警告:不推荐使用从地址类型继承的合约成员“余额”。坚固性

Posted

技术标签:

【中文标题】警告:不推荐使用从地址类型继承的合约成员“余额”。坚固性【英文标题】:Warning: Using contract member "balance" inherited from the address type is deprecated. Solidity 【发布时间】:2018-12-24 14:57:49 【问题描述】:

警告:不推荐使用从地址类型继承的合约成员“余额”。将合约转换为“address”类型以访问成员,例如使用“address(contract).balance”代替。

我在使用 Remix 编辑器的 Solidity 中收到此警告。

这是代码块:

function getSummary() public view returns(
    uint, uint, uint, uint, address
)
    return (
        minimumContribution,
        this.balance, // This is the warning line.
        requests.length,
        approversCount,
        manager
    );

我尝试按照警告的建议进行操作:

function getSummary() public view returns(
    uint, uint, uint, uint, address
)
    return (
        minimumContribution,
        address(contract).balance,
        requests.length,
        approversCount,
        manager
    );

但这不起作用。

【问题讨论】:

【参考方案1】:

或者,您可以将this 分配给address 类型的局部变量...

address contractAddress = this;

function getSummary() public view returns(
    uint, uint, uint, uint, address
)
  return (
    minimumContribution,
    contractAddress.balance,
    requests.length,
    approversCount,
    manager
  );

【讨论】:

【参考方案2】:

balanceaddress 类型的属性,而不是来自合同。将其更改为address(this).balance

function getSummary() public view returns(
    uint, uint, uint, uint, address
)
    return (
        minimumContribution,
        address(this).balance,
        requests.length,
        approversCount,
        manager
    );

【讨论】:

这就是我想要的。谢谢。

以上是关于警告:不推荐使用从地址类型继承的合约成员“余额”。坚固性的主要内容,如果未能解决你的问题,请参考以下文章

如何将 ERC20 代币发送到智能合约余额?

Web3:从地址中检索 ERC20 代币的余额

不推荐从字符串 const 转换。到 wchar_t*

swarm主网BZZ挖矿:钱包如何添加BZZ合约?如何查钱包余额?

为部署在 RinkeBy 测试网上的智能合约执行 ERC20 代币“传输函数”的原始交易

C#中的新修饰符