在创建令牌时,必须有一个ERC20接口(如下面的接口)?它的目的是什么?
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;吗?
发布于 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时,从您的合同继承的任何合同都可以在内部更改这个变量,这很可能是不可取的。当然,如果您在系统中没有这样的合同,那么它不应该是一个问题,但是一个好的编程实践也意味着,即使没有“迫在眉睫的威胁”,您也可以提前计划并以“正确的方式”进行。
https://ethereum.stackexchange.com/questions/90591
复制相似问题