Contract-Debugging

無法增加契約餘額。漏洞?

  • September 19, 2016

乙太坊新手。開始使用簡單的範例契約。它工作正常,除了我似乎無法增加它的平衡。有什麼想法嗎?

contract Faucet {
   address owner;
   uint256 sendAmount;

   function Faucet() {
       owner = msg.sender;
       sendAmount = 1000000000000000000;
   }

   function getBalance() returns (uint) {
        return this.balance;
   }

   function getWei() returns (bool) {
       return msg.sender.send(sendAmount);
   }

   function sendWei(address toWhom) returns (bool) {
       return toWhom.send(sendAmount);
   }

   function getSendAmount() returns (uint256) {
       return sendAmount;
   }

   function killMe() returns (bool) {
       if (msg.sender == owner) {
           suicide(owner);
           return true;
       }
   }
}

然後,使用 Geth :

eth.getBalance(faucetAddress)
1000000000000000000

下一個…

eth.sendTransaction({from:eth.coinbase, to:faucetAddress, amount:1000000000000000000})

塊被開採,然後:

eth.getBalance(faucetAddress)
1000000000000000000

沒有增加。

這是我的交易收據。提前謝謝了。

{
blockHash: "0x6dacad47ad5f6a4e8dbb38a70bbe77b1d2ef019df396642c0490afc7e5ad2c8c",
blockNumber: 1526,
contractAddress: null,
cumulativeGasUsed: 90000,
from: "0x245d5fef6bf170a0fc6b464f033bff2aea020dbd",
gasUsed: 90000,
logs: [],
root: "9da791d719134c34bdad70c6cfcc424a1daa1a1573a6319f475a61b7d2728b80",
to: "0xeff6f295823648420cd1e6707caf99340c2343d0",
transactionHash: "0xbc6c596afe9e05eb496d85472ade592fbb179fd7b4e0a619cba84bd8930da35b",
transactionIndex: 0
}

payable從 Solidity 0.4 開始,合約必須通過使用修飾符定義備份函式來明確允許自己接收 ETH 。在您的情況下,它看起來像這樣:

function() payable {}

只需將其放在契約的底部,您就可以開始了。請注意,任何想要接受 ETH 的函式現在都必須使用payable修飾符。

這是相關的發行說明

想要通過簡單的“發送”接收 Ether 的合約必須使用 payable 修飾符實現備份功能。如果沒有定義應付回退函式並且沒有函式與簽名匹配,則合約現在會拋出。

查看所有重大更改和發行說明:https ://github.com/ethereum/solidity/releases/tag/v0.4.0

引用自:https://ethereum.stackexchange.com/questions/8706