Go-Ethereum

使用 testrpc 在松露中無法將乙太幣從一個帳戶傳遞到另一個帳戶

  • December 2, 2017

我有一個具有一個功能的範例契約:

pragma solidity ^0.4.0;

contract Test {

   function sell(address transferTo) public {
       transferTo.transfer(1000);
   }
}

我使用testrpcandtruffle來部署和執行合約:

Test.deployed().then(instance => instance.sell(accounts[1], {from: accounts[0]}))

並且命令在 VM 級別失敗,但出現異常:

Error: VM Exception while processing transaction: revert
   at XMLHttpRequest._onHttpResponseEnd (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:70604:12)
   at XMLHttpRequest._setReadyState (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:70449:12)
   at XMLHttpRequestEventTarget.dispatchEvent (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:70159:18)
   at XMLHttpRequest.request.onreadystatechange (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:315621:13)
   at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:314196:9
   at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:331156:36
   at Object.InvalidResponse (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:43303:16)

任何想法出了什麼問題?似乎這個函式代表了文件所說的內容。

由於您是transfer()從合約中呼叫該方法,因此它試圖從合約本身轉移餘額,而不是從呼叫者那裡獲取 1000。它失敗是因為合約沒有餘額。

pragma solidity ^0.4.0;

contract Test {
   function sell(address transferTo)
     public
     payable // make function payable
   {
     // change the amount to the amount sent with the call (msg.value)          
     transferTo.transfer(msg.value);
   }
}

在 truffle 命令中,您必須為轉移添加一個值金額:

Test.deployed().then(instance => instance.sell(accounts[1], {from: accounts[0], value: web3.toWei(1, 'ether') }))

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