首页
学习
活动
专区
圈层
工具
发布

ERC20接口
EN

Ethereum用户
提问于 2020-11-29 04:35:09
回答 1查看 770关注 0票数 0

在创建令牌时,必须有一个ERC20接口(如下面的接口)?它的目的是什么?

代码语言:javascript
复制
pragma solidity 0.6.6;

/// @notice ERC20 https://eips.ethereum.org/EIPS/eip-20 with optional symbol, name and decimals

interface ERC20 {
    function totalSupply() external view returns (uint);
    function balanceOf(address tokenOwner) external view returns (uint balance);
    function allowance(address tokenOwner, address spender) external view returns (uint remaining);
    function transfer(address to, uint tokens) external returns (bool success);
    function approve(address spender, uint tokens) external returns (bool success);
    function transferFrom(address from, address to, uint tokens) external returns (bool success);

    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function decimals() external view returns (uint8);

    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
} 

我在想,我不能为totalSupply做一个函数,难道我不能做uint256 totalSupply;uint256 public totalSupply;吗?

EN

回答 1

Ethereum用户

回答已采纳

发布于 2020-11-29 06:11:35

在创建令牌时,必须有一个ERC20接口吗?

不,您必须实现ERC20接口。

interface中声明这些函数只是一个很好的编程实践,因为它允许您在代码的其他地方使用该接口而不是实际的契约。

而不是function totalSupply,我就不能直接使用uint256 public totalSupply吗?

当然可以,这就是“实现接口”的意思。

没有人强迫您显式地实现function totalSupply,但是您知道,当您声明uint256 public totalSupply时,您将隐式地实现相同的函数(即编译器自动为您生成它)。所以从技术上讲,没有什么不同。

一些(例如Open)声明uint256 private totalSupply,然后显式实现function totalSupply的原因同样也是良好编程实践的原因。

例如,当您声明uint256 public totalSupply时,从您的合同继承的任何合同都可以在内部更改这个变量,这很可能是不可取的。当然,如果您在系统中没有这样的合同,那么它不应该是一个问题,但是一个好的编程实践也意味着,即使没有“迫在眉睫的威胁”,您也可以提前计划并以“正确的方式”进行。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/90591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档