Solidity
將乙太幣從智能合約轉移到 Truffle 中的另一個智能合約
我是 Solidity 的初學者,所以我的問題可能很簡單。我有兩個契約“BankA”和“客戶”。每當我在 Truffle 開發環境中部署 BankA 並呼叫
pay()
時,都會出現以下錯誤:Error: Returned error: VM Exception while processing transaction: revert at PromiEvent (C:\Users\lenovo\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\contract\lib\promievent.js:9:1)
解決辦法是什麼。謝謝你。
銀行A:
pragma solidity ^0.5.12; import "./customer.sol"; contract BankA{ function pay() public returns(uint256){ customer client=new customer(); address(client).transfer(1000); return address(client).balance; } function() external payable{}
}
顧客:
pragma solidity^0.5.12; contract customer{ function() external payable{} } }
如果 BankA 有足夠的資金,它看起來應該可以工作。
請記住:
address(client).transfer(1000);
如果沒有足夠的資金向客戶發送 1000,則無法工作。
因此,要麼呼叫 with
{value: 1000}
(或更多),要麼使用備份將一些資金單次轉移到 BankA。否則會因資金不足而失敗。希望能幫助到你。
ps 考慮
address(client).transfer(msg.value);
轉發收到的任何內容。
當我們看到時,兩個合約都具有備份功能。因此,他們可以在平台中接收和發送一些乙太幣。正如@Rob Hitchens 回答的那樣,錯誤來自BankA 的餘額值。BankA 發送的乙太幣永遠不會超過其餘額。為了讓你的程式碼更聰明地解決這個問題,我建議使用下面的程式碼來告訴你 BankA 的餘額:
pragma solidity ^0.5.12; import "./customer.sol"; contract BankA{ function pay() public returns(uint256){ require(address(this).balance>1000, "Balance Not Enough"); customer client=new customer(); address(client).transfer(1000); return address(client).balance; } function() external payable{} }