Contract-Development

我可以使用乙太坊鬧鐘調度程序進行遞歸呼叫嗎?

  • November 6, 2018

此處給出的答案並未提供完整的解決方案。

如果使用乙太坊鬧鐘每 24 小時在我的智能合約中執行一種方法實際上可行,有人可以建議我嗎?您可以參考上面連結的文章中給出的範例。

根據文件,在 255 塊時間後無法再次執行相同的呼叫(請參閱gracePeriod參數)

請驗證我的理解是否正確。

您可以使用乙太坊鬧鐘執行重複呼叫。您提供的gracePeriod連結中描述的內容表明您將允許執行程序延遲多少塊(最大)。也就是說,假設您希望在 block 中執行某些內容x,這gracePeriod表明您可以在xand之間的任何塊中執行呼叫x + gracePeriod。Afterx + gracePeriod被認為是遲到了,呼叫將不會被執行。

所以它會起作用。

另一方面,您有 EAC 的替代品,它們的 gas 成本更低(乙太交易在 EAC 中約為 500K gas,現在由 Chronologic 重建)以及 Aion 的固定費用。Aion 調度系統每次通話的費用約為 10 美分,第一次通話費用約為 250Kgas,之後,通話費用低至 70K(比 EAC 少 5 倍)。這是因為系統會為使用者創建帳戶。您可以在 ropsten 上進行測試。

這段程式碼展示瞭如何使用Aion Scheduling系統設置一個循環呼叫(每天) :

pragma solidity ^0.4.24; 

// interface Aion
contract Aion {
   uint256 public serviceFee;
   function ScheduleCall(uint256 blocknumber, address to, uint256 value, uint256 gaslimit, uint256 gasprice, bytes data, bool schedType) public payable returns (uint,address);

}

// Main contract
contract MyContract{
   uint256 public sqrtValue;
   Aion aion;

   constructor(uint256 number) public payable{
       scheduleMyfucntion(number);
   }

   function scheduleMyfucntion(uint256 number) public {
       aion = Aion(0xFcFB45679539667f7ed55FA59A15c8Cad73d9a4E);
       bytes memory data = abi.encodeWithSelector(bytes4(keccak256('myfucntion(uint256)')),number); 
       uint callCost = 200000*1e9 + aion.serviceFee();
       aion.ScheduleCall.value(callCost)( block.timestamp + 1 days, address(this), 0, 200000, 1e9, data, true);
   }

   function myfucntion(uint256 number) public {
       // do your task here and call again the function to schedule
       scheduleMyfucntion(number);
   } 

   function () public payable {}

}

您可以在此處此處找到更多詳細資訊

希望這可以幫助。

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