Ethereum / Solidity: Нужно ли нам внедрять собственный «баланс» - переменную в контрактах? - PullRequest
0 голосов
/ 05 сентября 2018

Чтобы управлять балансами умного контракта с 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 должным образом.

1 Ответ

0 голосов
/ 05 сентября 2018

Два делают разные вещи. Вы всегда можете проверить остаток контракта через <address>.balance из контракта или eth_getBalance через JSON-RPC.

Но переменная состояния balance в контракте, которым вы поделились, может отличаться от этого числа. Например, адрес контракта может содержать эфир перед развертыванием, или другой контракт может вызвать selfdestruct(<address>) и таким образом добавить к эфиру контракта. В обоих случаях баланс адреса будет отражать это, но переменная состояния balance в коде не будет, потому что она увеличивается только тогда, когда вызывается резервная функция.

Так что это как бы зависит ... если вы просто хотите узнать, сколько эфира содержит контракт, вам следует использовать встроенный <address>.balance, но если вы хотите отследить какой-то другой номер, вам нужно сделай это сам.

...