Chainlink は、ブロックチェーン技術に固有のセキュリティと信頼性の保証を維持しながら、現実世界のデータとオフチェーン計算へのアクセスを可能にすることで、スマート コントラクトの機能を拡張します。
このリポジトリには、Chainlink コア ノードとコントラクトが含まれています。コアノードは、分散型オラクルネットワークに参加しているノードオペレーターが実行できるバンドルされたバイナリです。すべてのメジャー リリース バージョンには、Chainlink dockerhub からダウンロードできる事前構築済みの Docker イメージが含まれています。貢献に興味がある場合は、貢献ガイドラインをご覧ください。バグを報告したり、機能をリクエストしたりするためにここに来た場合は、現在開いている問題を確認してください。 Chainlink の使用を開始する方法の詳細については、公式ドキュメントを確認してください。 Solidity 開発者向けのリソースは、Chainlink Hardhat Box にあります。
Chainlink には、活発で成長を続けるコミュニティがあります。 Discord は、日常のコミュニケーション、開発上の質問への回答、Chainlink 関連のコンテンツの集約に使用される主要なコミュニケーション チャネルです。 Chainlink ソーシャル アカウント、ニュース、ネットワーキングに関する詳細については、コミュニティ ドキュメントをご覧ください。
Go 1.22 をインストールし、GOPATH の bin ディレクトリを PATH に追加します。
macOS のパスの例export PATH=$GOPATH/bin:$PATH
およびexport GOPATH=/Users/$USER/go
npm 経由で NodeJS v20 と pnpm v9 をインストールします。
長期的には、nvm を使用してさまざまなプロジェクトのノードのバージョンを切り替える方が簡単かもしれません。たとえば、$NODE_VERSION が NodeJS の有効なバージョンに設定されていると仮定すると、次のように実行できます: nvm install $NODE_VERSION && nvm use $NODE_VERSION
Postgres (>= 12.x) をインストールします。 postgres の最新メジャー バージョンを実行することをお勧めします。
公式の Chainlink Docker イメージを実行している場合、サポートされる Postgres の最も高いバージョンは、バンドルされたクライアントのため、16.x であることに注意してください。
SSL 接続を使用するように Postgres を構成する必要があります (または、テストのために、Postgres クエリ文字列で?sslmode=disable
設定できます)。
Python 3 がインストールされていることを確認します (これは、Solidity コントラクトのコンパイルに必要な solc-select で必要です)。
チェーンリンクをダウンロード: git clone https://github.com/smartcontractkit/chainlink && cd chainlink
Chainlink をビルドしてインストールする: make install
ノードを実行します: chainlink help
開発環境のセットアップに関する最新情報については、『開発セットアップ ガイド』を参照してください。
Apple Silicon 上のネイティブ ビルドはそのまま使用できますが、Docker イメージについてはさらに考慮する必要があります。
$ docker build 。 -t チェーンリンク開発:最新 -f ./core/chainlink.Dockerfile
Chainlink ノードを実行するには、開いている WebSocket 接続を使用して実行中の Ethereum ノードにアクセスする必要があります。チェーン ID を設定すると、イーサリアム ベースのネットワークはすべて機能します。現在テストされサポートされている Ethereum ノードのバージョン:
【正式対応】
パリティ/Openethereum (注: パリティは非推奨であり、このクライアントのサポートは将来削除される可能性があります)
ゲス
ベス
[サポートされているが壊れている] これらのクライアントは Chainlink によってサポートされていますが、Chainlink がこれらの実行クライアントで確実に動作することを妨げるバグがあります。
Nethermind のブロックの問題:
NethermindEth/ネザーマインド#4384
エリゴンのブロッキングの問題:
エリゴンテック/エリゴン#4946
erigontech/erigon#4030 (コメント)
ソフトウェアは継続的に更新されているため、イーサリアム ノードの特定のバージョン番号を推奨することはできませんが、通常は利用可能な最新バージョンを実行するようにしてください。
注: デフォルトでは、チェーンリンクは TLS モードで実行されます。ローカル開発の場合は、 make chainlink-dev
使用してdev build
使用し、TOML フィールドを設定することでこれを無効にできます。
[Webサーバー]SecureCookies = falseTLS.HTTPSPort = 0[安全でない]DevWebServer = true
あるいは、 tools/bin/self-signed-certs
を使用するか手動で自己署名証明書を生成することもできます。
Chainlink ノードを開始するには、次を実行するだけです。
チェーンリンクノードの開始
デフォルトでは、これはポート 6688 で開始されます。http://localhost:6688/ で UI にアクセスできるはずです。
Chainlink は、リモート CLI クライアントと UI を提供します。ノードが起動したら、新しいターミナル ウィンドウを開いて CLI を使用できます。まずログインしてクライアントを認証する必要があります。
チェーンリンク管理者ログイン
(必要に応じて、後でADMIN_CREDENTIALS_FILE=/path/to/credentials/file
設定して、再度ログインする必要を避けることもできます)。
次の方法で現在のジョブを表示できるようになりました。
チェーンリンクのジョブリスト
Chainlink CLI の詳細については、いつでもchainlink help
を実行してください。
ジョブの作成方法の詳細については、ジョブのドキュメント ページを参照してください。
ノード構成は、環境変数と API/UI/CLI による直接設定の組み合わせによって管理されます。
ノードの構成方法の詳細については、公式ドキュメントを確認してください。
外部アダプターを使用すると、Chainlink を簡単に拡張でき、カスタム計算と特殊な API を簡単に統合できます。 Chainlink ノードは、単純な REST API を介して外部アダプターと通信します。
外部アダプターの作成と使用の詳細については、外部アダプターのページを参照してください。
Chainlink のビルド、署名、公開ワークフロー中に、OIDC キーレス署名とのcosign
使用します。
公式 Chainlink Docker イメージからビルドするノード オペレーターは、タグ付けされたリリース バージョンが実際にこのワークフローからビルドされたことを確認することをお勧めします。
この検証を行うにはcosign
必要です。ここの指示に従って cosign をインストールします。
# タグは、タグ付けされたリリース バージョンです。 v2.16.0cosign verify public.ecr.aws/chainlink/chainlink:${tag} --certificate-oidc-issuer https://token.actions.githubusercontent.com --certificate-identity "https://github.com/smartcontractkit/chainlink/.github/workflows/build-publish.yml@refs/tags/${tag}"
npm経由でpnpm 9をインストールする
go generate ./...
実行してmake abigen
作成できるように、gencodec と jq をインストールします。
嘲笑をインストールする
make mockery
make
コマンドを使用すると、正しいバージョンがインストールされます。
契約を構築する:
プッシュ契約 pnpm私 pnpm コンパイル:nativepopd
静的アセットを生成してコンパイルします。
生成させる
開発環境を準備します。
テストには postgres データベースが必要です。さらに、環境変数CL_DATABASE_URL
、 _test
データベースに接続できる値に設定する必要があり、ユーザーは指定された_test
データベースを作成および削除できる必要があります。
注: すべてのテストに合格するには、他の環境変数を設定する必要はありません。
適切なテスト ユーザーを作成するための初期セットアップ用のヘルパー スクリプトがあります。 postgres がローカルホストのポート 5432 で実行されている必要があります。postgres ユーザーのパスワードの入力を求められますpostgres
setup-testdb を作成する
このスクリプトはCL_DATABASE_URL
.dbenv
に保存します。
データベースを変更するには、移行を実行する必要があります。同様に、リポジトリをpull
と、移行の実行が必要になる場合があります。上記の 1 回限りのセットアップ後:
source .dbenv make testdb
database accessed by other users (SQLSTATE 55006) exit status 1
、データベースの作成を強制したい場合は、次を使用します。
source .dbenv make testdb-force
テストを実行します。
テストに行ってください。/...
parallel
フラグを使用すると、バックグラウンドでテストを実行する場合に CPU 使用率を制限できます ( -parallel=4
)。デフォルトはGOMAXPROCS
です。
p
フラグを使用すると、パッケージが相互に干渉する場合に、同時にテストされるパッケージの数を制限できます ( -p=1
)。
-short
フラグは、データベースに依存するテストをスキップし、単純なテストを約 1 分で迅速にスポットチェックします。
Go 1.1 の時点では、ランタイムには-race
フラグで有効になるデータ競合検出機能が含まれています。これはtools/bin/go_core_race_tests
スクリプトを介して CI で使用されます。アクションが競合を検出した場合、概要ページのアーティファクトには、詳細なスタック トレースを含むrace.*
ファイルが含まれます。
誤検知は発生しないため、警告を真剣に受け止めてください。
ローカルでターゲットを絞った競合検出の場合は、次を実行できます。
GORACE="log_path=$PWD/race" go test -race ./core/path/to/pkg -count 10 GORACE="log_path=$PWD/race" go test -race ./core/path/to/pkg -count 100 -run TestFooBar/sub_test
https://go.dev/doc/articles/race_detector
Go 1.18 では、ファズ テストfunc FuzzXXX(*testing.F)
が通常のテスト スイートの一部として含まれているため、既存のケースはgo test
で実行されます。
さらに、アクティブ ファジングを実行して新しいケースを検索することもできます。
go test ./pkg/path -run=XXX -fuzz=FuzzTestName
https://go.dev/doc/fuzz/
このリポジトリには 3 つの Go モジュールが含まれています。
フローチャート RL
github.com/smartcontractkit/chainlink/v2
github.com/smartcontractkit/chainlink/integration-tests --> github.com/smartcontractkit/chainlink/v2
github.com/smartcontractkit/chainlink/core/scripts --> github.com/smartcontractkit/chainlink/v2
読み込み中integration-tests
とcore/scripts
モジュールは、 go.mod
ファイル内の相対置換を使用してルート モジュールをインポートするため、ルートgo.mod
の依存関係の変更には、多くの場合、これらのモジュールの変更も必要になります。変更を加えた後、以下を使用してgo mod tidy
3 つのモジュールすべてで実行できます。
make gomodtidy
contracts/
ディレクトリ内:
依存関係をインストールします。
pnpm私
テストを実行します。
pnpmテスト
注: Chainlink は現在 Foundry への移行過程にあり、一部のバージョンには Foundry テストと Hardhat テストの両方が含まれています。詳細については、Chainlink Foundry のドキュメントを参照してください。 src ディレクトリ内に含まれる Foundry テストに関連する「t.sol」ファイルは、Hardhat によって無視されます。
Gogenerate は、このプロジェクトでモックを生成するために使用されます。モックはモックによって生成され、コア/内部/モックに存在します。
Shell.nix は、Nix パッケージ マネージャーで使用するために提供されています。デフォルトでは、Nix Flakes を介してシェルを利用します。
Nix は、宣言的で再現可能な開発環境を定義します。 Flakes バージョンは、構築されたアーティファクトの一貫性と再現性を高めるために、決定的で凍結された ( flake.lock
) 依存関係を使用します。
使用するには:
nix パッケージマネージャーをシステムにインストールします。
フレークのサポートを有効にする
nix develop
実行します。すべての依存関係を含むシェルが表示されます。
オプションで、 nix develop --command $SHELL
デフォルト (bash) の代わりに現在のシェルを使用します。
direnv
使用すると、フォルダーにcd
するときに自動的に有効にすることができます。そのためには、nix-direnv を有効にし、それにuse flake
。
ローカルの postgres データベースを作成します。
mkdir -p $PGDATA && cd $PGDATA/ initdb pg_ctl -l postgres.log -o "--unix_socket_directories='$PWD'" start createdbchainlink_test -h localhost createuser --superuser --passwordchainlink -h localhost# 次に、テスト パスワード (例:chainlink) を入力し、shell.nix CL_DATABASE_URL に設定します。
プロジェクトに再度入るときは、postgres を再起動できます。 cd $PGDATA; pg_ctl -l postgres.log -o "--unix_socket_directories='$PWD'" start
これで、通常どおりテストを実行したりコードをコンパイルしたりできるようになります。
完了したら、それを停止します。 cd $PGDATA; pg_ctl -o "--unix_socket_directories='$PWD'" stop
変更セットを使用して、ライブラリとサービスのバージョン管理を管理します。
構成やコードを変更するすべての PR には、ほとんどの場合、チェンジセット ファイルが伴う必要があります。
changesets
をインストールするには:
pnpm
まだインストールされていない場合はインストールします (ドキュメント)。
pnpm install
実行します。
コミットの作成後または作成前に、 pnpm changeset
コマンドを実行して、次のリリースの CHANGELOG に反映される付随の変更セット エントリを作成します。
形式は Keep a Changelog に基づいています。
そしてこのプロジェクトはセマンティック バージョニングに準拠しています。
Chainlink の構築およびテスト方法に関するヒントについては、開発ヒント ページを参照してください。
Chainlink のソースコードへの貢献を歓迎します。
詳細については、投稿ガイドラインをご覧ください。
ありがとう!