Solidity

是否可以從另一個契約中轉移契約的餘額?

  • April 27, 2018
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);
   }
}

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