Ethereum/Solidity:我们需要在合约中实现自己的 "balance" 变量吗?
Ethereum/Solidity: Do we need to implement an own "balance"-variable in Contracts?
为了用 Solidity 管理智能合约的余额,我们还需要自己实现 balance
-keeper 吗?
在下面的博文中,作者是这样做的:
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
,但如果你想跟踪其他数字,你需要自己动手。
为了用 Solidity 管理智能合约的余额,我们还需要自己实现 balance
-keeper 吗?
在下面的博文中,作者是这样做的:
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
,但如果你想跟踪其他数字,你需要自己动手。