Go-Ethereum
使用 testrpc 在松露中無法將乙太幣從一個帳戶傳遞到另一個帳戶
我有一個具有一個功能的範例契約:
pragma solidity ^0.4.0; contract Test { function sell(address transferTo) public { transferTo.transfer(1000); } }
我使用
testrpc
andtruffle
來部署和執行合約: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') }))