首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么标准令牌手动为balanceOf和totalSupply创建getter

为什么标准令牌手动为balanceOf和totalSupply创建getter
EN

Ethereum用户
提问于 2018-04-06 14:23:54
回答 1查看 188关注 0票数 1

我一直在阅读ERC20令牌的不同实现,我注意到它们中的许多将balanceOf地址定义为balances地址,然后创建一个公共getter()来匹配balanceOf()标准。类似地,totalSupply通常以不同的名称在本地存储,然后创建一个getter来匹配标准的totalSupply() https://theethereum.wiki/w/index.php/ERC20_令牌_标准,我想知道手动为这两个变量创建getter的目的是什么?Solidity会自动为公共变量创建getter,那么为什么不将它们命名为正确的名称呢?

EN

回答 1

Ethereum用户

发布于 2018-04-06 15:53:00

它不能实现接口

尽管这是一个重复的问题,但我不确定其他答案是否足以解释这个问题。

通过一个简单的例子,这个问题很容易被证明:

示例:

代码语言:javascript
复制
pragma solidity ^0.4.21;

interface ERC20 {
    function balanceOf(address) external view returns (uint);
    function transfer(address, uint) external returns (bool);
}

contract TestA is ERC20 {
    mapping(address=>uint) public balanceOf;

    function TestA() public {
        balanceOf[this] = 1000;
    }

    function transfer(address _to, uint256 _value) external returns (bool success){
        require(balanceOf[msg.sender] >= _value);
        balanceOf[msg.sender] -= _value;
        balanceOf[_to] += _value;
        require(balanceOf[_to] >= _value);
        return true;
    }
}

contract TestB {
    address a;

    function TestB() public {
        a = new TestA();
    }

    function aBalance() external view returns (uint) {
        return ERC20(a).balanceOf(a);
    }
}

如果您尝试编译此契约,则最终会出现如下错误:

代码语言:javascript
复制
browser/contract.sol:28:13: TypeError: Trying to create an instance of an abstract contract.
        a = new TestA();
            ^-------^
browser/contract.sol:4:5: Missing implementation:
    function balanceOf(address) external view returns (uint);
    ^-------------------------------------------------------^

原因是,尽管它获得了一些虚拟的getter,并且充当了一个ERC20令牌,但它没有实现函数,因此不能从编译器的角度将其视为ERC20令牌。

如果您从契约中删除了is ERC20,或者手动添加了想要的函数,它将完全按照预期的方式工作,您就不能有一种温暖的模糊感觉,认为您已经保证了正确地实现了接口,同时最小化了代码。

我相信这可能是编译器的错误或者其他什么的。

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

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

复制
相关文章

相似问题

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