Ethereum Alarm Clockは、特定の時間またはブロックでコントラクト関数呼び出しをスケジュールできます。現在、メインネットとテストネットに取り組んでいます。ローカル ネットワークに展開することもできます。
- 将来、指定されたブロックの関数呼び出しのスケジューリングを容易にする Ethereum コントラクト。
- 関数呼び出しは、任意のコントラクトに対して実行されるようにスケジュールできます
- スケジューリングは、コントラクトまたはイーサリアム アカウント所有者が行うことができます。
- イーサリアム ネットワーク内に完全に含まれています。
たとえば、次の契約では支払いが遅れる可能性があります。これは Ethereum Alarm Clock リポジトリの例です:
pragma solidity 0.4.24;
import "contracts/Interface/SchedulerInterface.sol";
/// Example of using the Scheduler from a smart contract to delay a payment.
contract DelayedPayment {
SchedulerInterface public scheduler;
address recipient;
address owner;
address public payment;
uint lockedUntil;
uint value;
uint twentyGwei = 20000000000 wei;
constructor(
address _scheduler,
uint _numBlocks,
address _recipient,
uint _value
) public payable {
scheduler = SchedulerInterface(_scheduler);
lockedUntil = block.number + _numBlocks;
recipient = _recipient;
owner = msg.sender;
value = _value;
uint endowment = scheduler.computeEndowment(
twentyGwei,
twentyGwei,
200000,
0,
twentyGwei
);
payment = scheduler.schedule.value(endowment)( // 0.1 ether is to pay for gas, bounty and fee
this, // send to self
"", // and trigger fallback function
[
200000, // The amount of gas to be sent with the transaction.
0, // The amount of wei to be sent.
255, // The size of the execution window.
lockedUntil, // The start of the execution window.
twentyGwei, // The gasprice for the transaction (aka 20 gwei)
twentyGwei, // The fee included in the transaction.
twentyGwei, // The bounty that awards the executor of the transaction.
twentyGwei * 2 // The required amount of wei the claimer must send as deposit.
]
);
assert(address(this).balance >= value);
}
function () public payable {
if (msg.value > 0) { //this handles recieving remaining funds sent while scheduling (0.1 ether)
return;
} else if (address(this).balance > 0) {
payout();
} else {
revert();
}
}
function payout()
public returns (bool)
{
require(block.number >= lockedUntil);
recipient.transfer(value);
return true;
}
function collectRemaining()
public returns (bool)
{
owner.transfer(address(this).balance);
}
}
プログラムでトランザクションをスケジュールする最も簡単な方法は、@ethereum-alarm-clock/libを使用することです。これは、TypeScript 型を使用した JS ライブラリです (操作が簡単です)。
このライブラリの使用方法に関するテキスト チュートリアルは次のとおりです: https://github.com/ethereum-alarm-clock/ethereum-alarm-clock/wiki/Integration-using-EAC-JavaScript-library
ビデオチュートリアルはこちら: https://youtu.be/DY0QYDQG4lw