Solidity

一個合約如何將乙太幣發送到另一個擁有超過 2300 gas 的合約?

  • January 11, 2018

我希望一份契約在將其發送到另一份契約之前收集一定數量的 finney,但我不能簡單地用C2.send(thisMuch).

function() {
   Dividend m = Dividend(dividendAddr);
   if (this.balance >= 70 finney) {
       uint sendProfit = this.balance;
   }
   m.Enter.send(sendProfit);
}

到目前為止,這就是我所擁有的,但是在將芬尼從一份契約發送到另一份契約時,我完全迷失了。我怎樣才能做到這一點?

我已經就我認為它應該如何運作簽訂了兩份契約。契約一將其發送給契約二。

contract one {

   address public deployer;
   address public targetAddress;


   modifier execute {
       if (msg.sender == deployer) {
           _
       }
   }


   function one(address _targetAddress) {
       deployer = msg.sender;
       targetAddress = _targetAddress;
   }


   function forward() {
       two m = two(targetAddress);
       m.pay();
       targetAddress.send(this.balance);
   }


   function() {
       forward();
   }


   function sendBack() execute {
       deployer.send(this.balance);
   }


}

契約二把它寄回給我。

contract two {

   address public deployer;

   function two() {
       deployer = msg.sender;
   }

   function pay() {
       deployer.send(this.balance);
   }

   function() {
       pay();
   }

}

這是它應該如何工作的嗎?

為了在指定氣體量的同時將 Ether 發送到另一個合約,請使用該call函式。

targetAddress.call.gas(200000).value(this.balance)();將呼叫回退函式。

targetAddress.call.gas(200000).value(this.balance)(bytes4(sha3("pay()")));將呼叫該pay函式。

應該可以為每個外部函式(和建構子)呼叫指定傳輸的值和使用的氣體:

contract Fa { function fa(uint _a) {} }

contract Fb {
 function fb(address a) {
    Fa b= Fa(a);// or Fa b = New Fa.value(2).gas(200)(a);
   b.fa.value(3).gas(1500)(50);
 }
}

f.gas(x).value(20)()呼叫修改後的函式 f,從而發送 20 Wei(或 20 ether 按值(20 ether))並將氣體限制為 x(因此此函式呼叫很可能會耗盡氣體並返回您的 20 Wei)。

注意:send()實際上應該使用最小氣體。如果我們想要執行程式碼,我們應該使用call()

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