Ethereum/Solidity:我们需要在合约中实现自己的 "balance" 变量吗?

Ethereum/Solidity: Do we need to implement an own "balance"-variable in Contracts?

为了用 Solidity 管理智能合约的余额,我们还需要自己实现 balance-keeper 吗?

在下面的博文中,作者是这样做的:

https://medium.com/daox/three-methods-to-transfer-funds-in-ethereum-by-means-of-solidity-5719944ed6e9

contract Sender {
  function send(address _receiver) payable {
    _receiver.call.value(msg.value).gas(20317)();
  }
}

contract Receiver {
   uint public balance = 0;

   function () payable {
      balance += msg.value;
   }
 }

根据文档,它似乎已经内置:https://solidity.readthedocs.io/en/develop/units-and-global-variables.html#address-related(尽管它是在 address-属性 中实现的,可以从 this ,不知道我理解的对不对)

哪位有经验的能解释一下吗?

PS:抱歉我的问题格式不正确。 Safari 不再正确显示 stackoveflow 的格式化工具栏。

两者做的事情不同。您始终可以通过 <address>.balance 从合约或通过 JSON-RPC eth_getBalance 查看合约的余额。

但是您共享的合约中的 balance 状态变量可能与该数字不同。例如,合约地址在部署前可能有以太币,或者另一个合约可能调用 selfdestruct(<address>) 并以这种方式添加到该合约的以太币。在这两种情况下,地址的余额都会反映出来,但代码中的 balance 状态变量不会,因为它只会在调用回退函数时增加。

所以这在某种程度上取决于......如果你只想知道一份合约持有多少以太币,你应该使用内置的 <address>.balance,但如果你想跟踪其他数字,你需要自己动手。