1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【入門】Chainlink Automationを使ってみる(Time-based Trigger編)

Posted at

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の設定手順

  1. Chainlink Automation App にアクセス
  2. ネットワークは Sepolia に設定
  3. ウォレットを接続
  4. 「Connect Wallet」でウォレットを接続
  5. 「Register new Upkeep」ボタンをクリック
    image.png
  6. Time-based にチェックを入れ、「Next」をクリック
    image.png
  7. コントラクトアドレスを入力して「Next」
    image.png
  8. ABIを入力して「Next」
    image.png
  9. 実行関数(今回は performUpkeep)を選択し、「Next」
    image.png
  10. 実行間隔(例:4分ごと)を入力して「Next」
    image.png
  11. 詳細情報を入力し、「Register Upkeep」をクリック
    image.png
  12. 指示に従ってトランザクションを送信
    image.png

実行確認

登録が完了すると、定期的に performUpkeep 関数が実行されます。
Etherscanの「Transaction History」からトランザクションハッシュを確認できます。

image

該当のトランザクションを開いてログを確認すると、下記のようにイベントが発行されていることがわかります。

image


まとめ

本記事では、Chainlink Automationの概要と、Time-basedトリガーを用いた簡単な自動実行コントラクトの構築手順を解説しました。
次回はCustom logic triggerやLog triggerを用いた応用例も紹介する予定です。


参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?