Chainlink 透過允許存取現實世界數據和鏈下運算來擴展智慧合約的功能,同時保持區塊鏈技術固有的安全性和可靠性保證。
此儲存庫包含 Chainlink 核心節點和合約。核心節點是捆綁的二進位文件,可供參與去中心化預言機網路的節點運營商運作。所有主要發行版本都有預先建置的 docker 映像,可從 Chainlink dockerhub 下載。如果您有興趣貢獻,請參閱我們的貢獻指南。如果您在這裡報告錯誤或請求功能,請檢查目前未解決的問題。有關如何開始使用 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。
您應該將 Postgres 設定為使用 SSL 連線(或為了進行測試,您可以在 Postgres 查詢字串中設定?sslmode=disable
)。
確保您已安裝 Python 3(這是編譯 Solidity 合約所需的 solc-select 所必需的)
下載 Chainlink: git clone https://github.com/smartcontractkit/chainlink && cd chainlink
建置並安裝 Chainlink: make install
運行節點: chainlink help
有關設定開發環境的最新信息,請參閱開發設定指南。
基於 Apple Silicon 的本機構建應該可以開箱即用,但 Docker 映像需要更多考慮。
$ docker 建置 . -t chainlink-develop:最新 -f ./core/chainlink.Dockerfile
為了運行 Chainlink 節點,您必須能夠透過開放的 Websocket 連線存取正在運行的以太坊節點。一旦您配置了鏈 ID,任何基於以太坊的網路都可以工作。目前測試和支援的以太坊節點版本:
[官方支援]
Parity/Openethereum(注意:Parity 已棄用,並且將來可能會刪除對此用戶端的支援)
蓋斯
貝蘇
[支援但已損壞] 這些用戶端受 Chainlink 支持,但存在阻止 Chainlink 在這些執行客戶端上可靠工作的錯誤。
Nethermind 阻塞問題:
NethermindEth/nethermind#4384
Erigon 阻塞問題:
erigontech/erigon#4946
erigontech/erigon#4030(評論)
我們無法推薦以太坊節點的特定版本號,因為軟體正在不斷更新,但您通常應該嘗試執行可用的最新版本。
注意:預設情況下,chainlink 將在 TLS 模式下運作。對於本機開發,您可以透過使用make chainlink-dev
進行dev build
並設定 TOML 欄位來停用此功能:
[WebServer]SecureCookies = falseTLS.HTTPSPort = 0[不安全]DevWebServer = true
或者,您可以使用tools/bin/self-signed-certs
或手動產生自簽名憑證。
要啟動 Chainlink 節點,只需運行:
chainlink節點啟動
預設情況下,它將在連接埠 6688 上啟動。
Chainlink 提供遠端 CLI 用戶端和 UI。節點啟動後,您可以開啟一個新的終端視窗來使用 CLI。您需要先登入以授權客戶端:
chainlink 管理員登入
(如果您願意,您也可以將來設定ADMIN_CREDENTIALS_FILE=/path/to/credentials/file
,以避免再次登入)。
現在您可以透過以下方式查看您目前的職位:
鏈環職位列表
要了解有關 Chainlink CLI 的更多信息,您可以隨時運行chainlink help
。
查看作業上的文件頁面,以了解有關如何建立作業的更多資訊。
節點配置由環境變數和透過 API/UI/CLI 直接設定的組合來管理。
查看官方文件以獲取有關如何配置節點的更多資訊。
外部適配器使 Chainlink 易於擴展,提供自訂計算和專用 API 的簡單整合。 Chainlink 節點透過簡單的 REST API 與外部適配器進行通訊。
有關建立和使用外部適配器的更多信息,請參閱我們的外部適配器頁面。
我們在建置、簽署和發布 Chainlink 工作流程期間將cosign
與 OIDC 無金鑰簽章結合使用。
鼓勵任何從官方 Chainlink docker 映像建置的節點操作員驗證標記的發布版本確實是從該工作流程建置的。
您需要cosign
才能進行此驗證。請按照此處的說明安裝 cosign。
# tag 是標記的發行版本 - 即。 v2.16.0cosign 驗證 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
安裝 gencodec 和 jq 以便能夠運行go generate ./...
並make abigen
安裝嘲諷
make mockery
使用make
指令將安裝正確的版本。
建立合約:
推播合約 PNPM我 pnpm 編譯:nativepopd
產生並編譯靜態資源:
使生成
準備您的開發環境:
測試需要 postgres 資料庫。反過來,環境變數CL_DATABASE_URL
必須設定為可以連接到_test
資料庫的值,並且使用者必須能夠建立和刪除給定的_test
資料庫。
注意:不應設定其他環境變數以使所有測試都通過
有用於初始設定的幫助程序腳本來建立適當的測試使用者。它要求postgres
在 localhost 的連接埠 5432 上運行。
進行設定-testdb
該腳本會將CL_DATABASE_URL
保存在.dbenv
中
對資料庫的變更需要運行遷移。同樣, pull
取儲存庫可能需要運行遷移。經過上述一次性設定後:
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
標誌會跳過依賴資料庫的測試,以便在一分鐘左右快速抽查更簡單的測試
從 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" 去測試 -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
執行。
此外,您可以執行主動模糊測試來搜尋新案例:
去測試 ./pkg/path -run=XXX -fuzz=FuzzTestName
https://go.dev/doc/fuzz/
此儲存庫包含三個 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
:
make gomodtidy
在contracts/
目錄中:
安裝依賴項:
PNPM我
運行測試:
PNPM測試
注意:Chainlink 目前正在遷移到 Foundry,並在某些版本中包含 Foundry 和 Hardhat 測試。更多資訊可以在這裡找到:Chainlink Foundry 文件。 src 目錄中包含的任何與 Foundry 測試關聯的「t.sol」檔案都將被 Hardhat 忽略。
Gogenerate 用於在該專案中產生模擬。模擬是透過嘲笑生成的,並存在於 core/internal/mocks 中。
提供了一個 shell.nix 供 Nix 套件管理器使用。預設情況下,我們透過 Nix Flakes 使用 shell。
Nix 定義了一個聲明性的、可複製的開發環境。 Flakes 版本使用確定性、凍結 ( flake.lock
) 相依性來獲得建置工件的更高一致性/可重複性。
使用方法:
在您的系統中安裝 nix 套件管理器。
啟用薄片支持
運行nix develop
。您將進入包含所有依賴項的 shell。
(可選) nix develop --command $SHELL
將使用您目前的 shell 而不是預設的(bash)。
您可以使用direnv
在cd
-ing 進入資料夾時自動啟用它;為此,啟用 nix-direnv 並在其上use flake
。
建立本地 postgres 資料庫:
mkdir -p $PGDATA && cd $PGDATA/ 初始化資料庫 pg_ctl -l postgres.log -o "--unix_socket_directories='$PWD'" 開始 createdb chainlink_test -h localhost createuser --superuser --password chainlink -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
命令來建立隨附的變更集條目,該條目將反映在下一個版本的變更日誌中。
此格式基於保留變更日誌,
該項目遵循語義版本控制。
有關如何建立和測試 Chainlink 的更多提示,請參閱我們的開發提示頁面。
歡迎對 Chainlink 的源代碼做出貢獻。
請查看我們的貢獻指南以了解更多詳細資訊。
謝謝你!