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 上启动。您应该能够通过 http://localhost:6688/ 访问 UI。
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 上运行。系统将提示您输入postgres
用户密码
进行设置-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 的源代码做出贡献。
请查看我们的贡献指南以了解更多详细信息。
谢谢你!