Solidity
是否可以從另一個契約中轉移契約的餘額?
contract A{ address public seller; function A(){ seller = 0xdd870fa1b7c4700f2bd7f44238821c26f7392148; } function transfer_from_B(address b){ seller.transfer(b.balance);//ERROR } } contract B{ function deposit() payable{ } }
當我嘗試從契約 A 轉移契約 B 的餘額時,我收到錯誤消息。是否可以這樣做?
解決方案 1
要接受向智能合約的付款轉移,您需要覆蓋預設功能
function ()
並使其成為payable
,因此它會接受乙太幣。function () public payable {}
解決方案 2
否則,您可以直接呼叫該函式
deposit
並將您要轉移的值金額添加到該函式。seller.deposit().value(b.balance);
編輯:誤解。
智能合約不能代表另一個合約發送其餘額。您需要在智能合約 B 上建構一個傳輸函式並從 A 呼叫它。
contract A{ address public seller; function A(){ seller = 0xdd870fa1b7c4700f2bd7f44238821c26f7392148; } function transfer_from_B(address b){ b.transferBalance(seller) } } contract B{ function transferBalance(to) { // add modifier onlyA to.transfer(this.balance); } }