Chainlink Automationとは
Chainlink Automationとは、特定の条件が満たされたときにスマートコントラクトを自動的に実行できるサービスです。
この「特定の条件」は**トリガー(trigger)**と呼ばれ、以下の3種類が存在します。
トリガーの種類
Time-based trigger(時間ベースのトリガー)
指定した時間間隔でスマートコントラクトを実行します。
このトリガーを使う場合、コントラクトは AutomationCompatibleInterface
を実装している必要はありません。
Custom logic trigger(カスタムロジックトリガー)
オンチェーンの状態に基づいて関数を実行するかどうかを、オフチェーンのAutomationノードが判断します。
たとえば「コントラクトの残高が一定額を下回った場合に実行する」など、柔軟な制御が可能です。
このトリガーを利用する場合は、コントラクトが AutomationCompatibleInterface
を実装している必要があります。
Log trigger(ログトリガー)
スマートコントラクトのログ(イベント)を元にトリガーを起動します。
この場合も、コントラクトは AutomationCompatibleInterface
を実装している必要があります。
AutomationCompatibleInterfaceとは?
Chainlinkのオートメーションノードが、どのタイミングでどのようにスマートコントラクトを実行すべきかを認識するためには、対応するインターフェースを実装する必要があります。
- Logトリガーの場合は
ILogAutomation
インターフェースを実装する必要があります。 - カスタムロジックトリガーの場合は
AutomationCompatibleInterface
を実装する必要があります。 - Time-basedトリガーの場合、これらのインターフェースは不要です。
Time-based Triggerを使った自動実行
前提知識の説明が終わったところで、ここではTime-basedトリガーを使って一定間隔で関数を自動実行するスマートコントラクトを作成してみます。
開発環境の準備
スマートコントラクトの作成
まず初めに以下のような簡単なコントラクトを用意します。
このコントラクトは、performUpkeep
が実行されるたびに、現在時刻を記録してイベントを発行します。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
contract TimeBasedAutomation {
uint256 public lastExecutedAt;
event Executed(uint256 lastExecutedAt);
constructor() {
lastExecutedAt = block.timestamp;
}
// Automation UIでTime-basedトリガー設定し、この関数を実行対象にする
function performUpkeep() external {
lastExecutedAt = block.timestamp;
emit Executed(lastExecutedAt);
}
}
このコントラクトをSepoliaネットワークにデプロイします。
デプロイ方法は以下のQiita記事などを参考にしてください。
Chainlink Automation Appにアクセスし、以下の設定を行います。
- Chainlink Automation App
- ネットワークは Sepolia に設定
- ウォレットを接続
- 「Register new Upkeep」ボタンを押下
- トリガーの選択画面に遷移
Chainlink Automationの設定手順
- Chainlink Automation App にアクセス
- ネットワークは Sepolia に設定
- ウォレットを接続
- 「Connect Wallet」でウォレットを接続
- 「Register new Upkeep」ボタンをクリック
-
Time-based にチェックを入れ、「Next」をクリック
- コントラクトアドレスを入力して「Next」
- ABIを入力して「Next」
- 実行関数(今回は
performUpkeep
)を選択し、「Next」
- 実行間隔(例:4分ごと)を入力して「Next」
- 詳細情報を入力し、「Register Upkeep」をクリック
- 指示に従ってトランザクションを送信
実行確認
登録が完了すると、定期的に performUpkeep
関数が実行されます。
Etherscanの「Transaction History」からトランザクションハッシュを確認できます。
該当のトランザクションを開いてログを確認すると、下記のようにイベントが発行されていることがわかります。
まとめ
本記事では、Chainlink Automationの概要と、Time-basedトリガーを用いた簡単な自動実行コントラクトの構築手順を解説しました。
次回はCustom logic triggerやLog triggerを用いた応用例も紹介する予定です。
参考