
Chainlink Local CRE 参考手册源码锚点、环境命令与拓扑文档生成指南【免费下载链接】chainlinknode of the decentralized oracle network, bridging on and off-chain computation项目地址: https://gitcode.com/GitHub_Trending/ch/chainlink本篇文章是面向Local CRE本地 Chainlink Runtime Environment贡献者与调试者的深度参考指南。它以仓库中docs/local-cre/reference/index.md为骨架逐条剖析官方文档列出的核心源码锚点入口main.go、环境管理environment.go、工作流管理workflow.go、拓扑发现topology.go、测试辅助等完整梳理env、workflow、topology三大命令族的全部子命令与参数并讲透拓扑文档的生成机制。读完本文你将能快速定位 Local CRE 的关键实现文件、熟练使用其命令行工具并能够自行生成与校验拓扑文档。Local CRE Reference 页面在文档体系中的定位docs/local-cre/reference/index.md是 Local CRE 文档体系中的索引式参考页其定位非常明确为 Local CRE 贡献者收集“有实现支撑implementation-backed”的最实用参考而不是重复展开操作教程。它提供了三类信息关键源码锚点Key Source Anchors从 CLI 入口到系统测试辅助的一串精确文件路径生成产物Generated Artifacts由命令自动产出的拓扑文档及其存放位置、生成命令主环境命令Main Environment Commands覆盖环境生命周期、工作流部署、拓扑管理的核心 CLI 调用。该页与同目录下的 Getting Started、Environment、System Tests 互为补充——前者回答“怎么做”本参考页回答“去哪里看代码、跑什么命令”。关键源码锚点8 个文件定位 Local CRE 的实现核心1. CLI 入口core/scripts/cre/environment/main.goLocal CRE 的整个 CLI 由core/scripts/cre/environment/main.go驱动。它通过init()将四个命令组挂载到root.RootCmd上environment.EnvironmentCmd——env命令族环境生命周期、工作流、状态等environment.TopologyCmd()——topology命令族拓扑发现、可视化、文档生成examples.ExamplesCmd——示例工作流相关命令environment.BsCmd与environment.ObsCmd——billing计费服务与 observability可观测性辅助命令。main()中还内置了两个快捷参数传入version/--version/-v时打印Local CRE version: version, commit: commit, date: date传入shell/sh时进入交互式 Shell并默认把CTF_CONFIGS设置为configs/workflow-gateway-don.toml。其余参数一律交给 cobra 根命令执行出错时打印错误并退出码 1。值得注意的是root.RootCmd定义于 root/root.go其Use字段为local_cre这也是make install安装出的二进制名描述为“CLI tool for the local CRE to create and manage environments”。因此下面所有go run . command等价于安装后执行local_cre command。2. 环境生命周期实现environment/environment.goenvironment.go 是env命令族的核心实现文件体量约 1300 行涵盖start含restart别名、stop、status、workflow、chip-ingress-stack、swap、state、billing等子命令见其init()中EnvironmentCmd.AddCommand(...)的注册列表。其中几个关键实现细节值得注意env start的启动流程startCmd的RunE先执行setDefaultCtfConfigs()——若未显式设置CTF_CONFIGS环境变量则默认使用configs/workflow-gateway-capabilities-don.toml并始终在其前面追加configs/capability_defaults.toml作为能力默认配置随后设置TESTCONTAINERS_RYUK_DISABLEDtrue防止容器被 Ryuk 回收加载并校验CTF_CONFIGS指定的 TOML 配置生成拓扑可视化产物最终调用StartCLIEnvironment完成整套环境的装配20 分钟超时。端口占用诊断当启动失败且错误包含address already in use时CLI 会用lsof -nP -iTCP:port自动探测端口占用情况并打印占用进程方便快速定位冲突。失败恢复StartCmdRecoverHandlerFunc会在启动 panic 时打印堆栈、上报 DX 追踪并可在--cleanup-on-error下等待一段时间后保存容器日志、移除测试容器。env stop的智能提示stopCmd在仅停止主环境后会通过detectServiceStatus检测 Chip Ingress 栈、Billing、Observability 是否仍在运行并给出对应的停止命令提示加--all则一并移除全部附加服务并清理环境状态文件。3. 工作流管理实现environment/workflow.goworkflow.go 实现env workflow命令族共注册 5 个子命令deploy-and-verify-example、delete、delete-all、compile、deploy。文件里定义了默认工作流所有者地址常量DefaultWorkflowOwnerAddress 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266deploy的完整执行链deployWorkflow分五步走每一步都有清晰的日志输出拷贝产物到容器通过creworkflow.CopyArtifactsToDockerContainers把 base64 编码的工作流 WASM 文件拷贝到匹配容器名模式的工作流节点容器内创建 Seth 客户端newSethClient会确保PRIVATE_KEY环境变量存在缺省时回退到blockchain.DefaultAnvilPrivateKey并构造 RPC 客户端拷贝配置文件可选若指定--config-file-path则把配置拷贝进容器并以file://绝对路径形式传给注册调用Vault 密钥流程可选--secrets-file-path要求 Workflow Registry 与 Capabilities Registry 均为v2 版本合约从网关拉取 Vault 公钥、检查/更新 Capabilities Registry 中的 Vault 能力配置、等待 registry syncer 传播最后用公钥加密密钥并以 JSON 形式经网关下发到 Vault注册工作流先从注册表删除同名旧工作流不存在则跳过再以donID、donFamily、名称、标签、file://WASM 路径等参数调用creworkflow.RegisterWithContract完成注册。此外compile子命令的底层实现在system-tests/lib/cre/workflow/compile.go中见下文第 8 点delete/delete-all则直接调用注册表合约的删除方法。4. 拓扑发现与文档生成实现environment/topology.gotopology.go 实现topology命令族list、show、generate。其核心机制是自动发现拓扑配置递归扫描configs/目录下所有.toml文件排除capability_defaults.toml仅当文件中同时存在nodesets、blockchains、jd、infra四个顶层字段时才判定为拓扑配置isTopologyConfig函数对应topologyProbe结构体。list输出 ASCII 表格列Topology / Class / DONsshow为单个配置渲染 ASCII 拓扑图并写出产物generate则为全部配置批量生成 Markdown 文档与索引详见下节。5. 系统测试入口system-tests/tests/smoke/cre/cre_suite_test.gocre_suite_test.go 是 CRE 冒烟测试套件的入口。文件头部注释给出了标准的本地执行方式1. 在 core/scripts/cre/environment 目录下执行: go run . env restart --with-chip-ingress-stack 2. 在 system-tests/tests/smoke/cre 目录下执行: go test -timeout 15m -run ^Test_CRE_测试按桶Bucket划分Test_CRE_V2_Suite_Bucket_A/B/C分别执行suite_config.SuiteBucketA/B/C中的用例测试命名还会读取TOPOLOGY_NAME环境变量以区分拓扑。6~7. 测试辅助system-tests/tests/test-helpers/before_suite.go与t_helpers.go这两个文件位于 system-tests/tests/test-helpers/是系统测试与 Local CRE 环境之间的桥梁before_suite.go负责测试套件运行前的前置逻辑含在状态文件缺失时自动拉起 Local CREt_helpers.go则提供贯穿用例的通用辅助函数如环境变量读取、并行开关ParallelEnabled()等。它们消费env start写入的 repo 本地状态文件这就是“测试辅助能探测到已存在环境并避免重复创建”的原因。8. 工作流编译system-tests/lib/cre/workflow/compile.gocompile.go 实现了工作流从源码到可部署产物的编译管线语言检测支持go与typescript两种工作流语言编译Go 工作流编译为 WASMTypeScript 工作流同理编译为 WASM压缩与编码用 Brotli 压缩 WASM再 base64 编码这正是env workflow deploy要求输入“base64 编码、已编译的 WASM 文件”的原因约束工作流名称长度必须不少于 10 个字符否则直接报错。生成产物拓扑文档的存放位置与生成命令Local CRE 会把拓扑配置自动渲染成文档并固化在仓库中产出物有两类core/scripts/cre/environment/docs/TOPOLOGIES.md——拓扑索引总表core/scripts/cre/environment/docs/topologies/——每个拓扑配置一份独立的 Markdown 文档。生成命令在core/scripts/cre/environment目录下执行go run . topology generate从 TOPOLOGIES.md 可以看到生成索引的形态该文件头部明确标注“generated bygo run . topology generate. Do not edit manually”即人工不要直接编辑生成产物ConfigClassDONsconfigs/workflow-don-solana.tomlmulti-don3configs/workflow-gateway-capabilities-don.tomlmulti-don3configs/workflow-gateway-don.tomlsingle-don2configs/workflow-gateway-sharded-5-dons.tomlsharded7表中每一行都链接到topologies/下的详细文档。topology generate命令还提供--check模式对应源码writeOrCheck的逻辑只比对产物是否过期而不写盘发现过期即报错列出需要重新生成的文件适合接入 CI 做文档一致性校验。除了generatetopology命令族还包括go run . topology list # 列出 configs/ 下发现的全部拓扑配置ASCII 表格 go run . topology show # 为单个配置渲染 ASCII 拓扑图并输出产物show的常用参数--config-c默认configs/workflow-gateway-don.toml、--output-dir-o默认state。generate的参数--output-dir-o默认docs/topologies、--index-path-i默认docs/TOPOLOGIES.md、--check仅校验。主环境命令全解析以下是官方参考页列出的核心命令结合源码展开其子命令与参数细节。所有命令均需在core/scripts/cre/environment目录下执行或使用make install安装后的local_cre二进制。环境生命周期go run . env setup # 校验并准备前置条件Docker、AWS、Job Distributor、CRE CLI 等 go run . env start # 启动 Local CRE 环境restart 是 start 的别名 go run . env stop # 停止环境只停主环境加 --all 同时移除附加服务与状态文件 go run . env restart # 等价于 go run . env startenv setup参数见 setup.go-c/--config默认configs/setup.toml、-y/--no-prompt不交互直接采用默认值、-p/--purge清除已有镜像重新拉取/构建、-b/--build本地构建而非从 ECR 拉取Apple Silicon 常用、--with-billing。setup 由configs/setup.toml驱动管理 Job Distributor、Chip Router、Chip Ingress、Chip Config 等托管镜像。env start参数定义于 environment.go非常丰富重点如下参数缩写默认值说明--auto-setup-afalse启动前先执行 setup--setup-config-sconfigs/setup.tomlsetup 使用的 TOML 配置路径--with-example-xfalse启动后部署并验证示例工作流--example-workflow-timeout-u5m等待示例工作流成功的最长时间--extra-allowed-gateway-ports-e空网关连接器额外放行的出站端口逗号分隔--with-chip-ingress-stack-bfalse部署 Chip Ingress 栈Chip Ingress Red Panda--with-beholder为已废弃别名--with-observability—false启动 OTel/Grafana 可观测性栈--with-dashboards-dfalse在可观测性之上部署 Grafana Dashboard会等待 localhost:3000--with-billing—false部署 Billing Platform Service--grpc-port-gChip Ingress 默认 gRPC 端口Chip Ingress 的 gRPC 端口--wait-on-error-timeout-w15s启动失败时等待多久再清理容器--cleanup-on-error-lfalse启动失败时是否移除 Docker 容器--local-node—false从本地工作树交叉编译 Chainlink 节点镜像并用于所有节点--local-capabilities—空从本地源码构建指定能力插件逗号分隔或all并注入节点--capabilities-path—$CRE_CAPABILITIES_PATH或~/go/src/github.com/smartcontractkit/capabilities本地能力仓库路径--local-build-platform—linux/宿主机架构本地构建的目标平台--local-node-image—cre-node:local本地构建节点镜像的 tagenv stop参数-a/--all移除所有附加服务Chip Ingress 栈、Billing、Observability并清理环境状态目录。不带--all时若检测到附加服务仍在运行会打印相应的停止提示命令。工作流部署与删除go run . env workflow deploy # 部署工作流到环境 go run . env workflow delete # 从 Workflow Registry 合约删除指定工作流 go run . env workflow delete-all # 清空注册表中的全部工作流 go run . env workflow compile # 只编译Brotli 压缩 base64 编码不部署env workflow deploy的完整参数清单见 workflow.go参数缩写默认值说明--workflow-file-path-w必填base64 编码的工作流 WASM 文件配合--compile时传 Go/TS 源码文件--name-n必填工作流名称编译时要求不少于 10 个字符--compile-xfalse先编译再部署--config-file-path-c空随工作流拷贝进容器的工作流配置--secrets-file-path-s空Vault 密钥 YAML键、环境变量名、命名空间--secrets-output-file-path-o./vault_secrets.json加密后的 Vault 密钥输出路径--container-target-dir-t工作流默认目标目录容器内目标目录--container-name-pattern-p由状态文件中的 workflow DON 名推导docker cp目标容器的子串匹配模式--workflow-don-name—空工作流 DON 的 nodesets 名多 DON 拓扑下可选--don-family—空注册表注册用的 DON family多 DON 拓扑必填或改用--workflow-don-name--shard-index—0共享同一 don_family 的分片 DON 的索引--don-id-e1注册表合约中的 donID从 1 开始的整数--rpc-url-rhttp://localhost:8545RPC URL未显式指定时优先取状态文件中的值--workflow-owner-address-d0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266工作流所有者地址--workflow-registry-address-a空Workflow Registry 地址缺省时从状态文件解析--capabilities-registry-address—空Capabilities Registry 地址Vault 配置更新用--gateway-url-g空网关 URLVault 密钥流程需要--delete-workflow-file-lfalse部署成功后删除工作流文件拓扑管理go run . topology list go run . topology show go run . topology generate参数细节见前文“生成产物”一节此处不再重复。需要强调的是topology generate具备--check校验模式可直接作为 CI 中“拓扑文档是否过期”的门禁而topology list是对configs/目录的一次实时扫描能反映新增拓扑配置而不需要重新生成文档。从源码看命令背后的关键机制CTF_CONFIGS与配置叠加env start与topology系列命令都依赖CTF_CONFIGS环境变量。源码setDefaultCtfConfigs()展示了它的叠加语义默认值configs/workflow-gateway-capabilities-don.toml之前始终会被前缀拼接configs/capability_defaults.toml形成“能力默认配置 拓扑配置”的多文件列表逗号分隔。topology相关命令在加载单个配置时也复用这一机制cfgArg : defaultCapabilitiesConfigFile , configPath。这意味着任何拓扑 TOML 都能继承能力默认值且自身字段可以覆盖之。拓扑配置的判定条件从topologyProbe与isTopologyConfig可以看出一份 TOML 要被识别为拓扑配置必须同时包含blockchains、nodesets、jd、infra四个顶层字段。这也是为什么 configs/ 目录下像billing-platform-service.toml、capability_defaults.toml、chip-ingress.toml这类单组件配置不会被误判为拓扑。状态文件与测试辅助的衔接env start成功后会把配置与已部署合约地址写入 repo 本地的状态文件in.Store(...)t_helpers.go 与before_suite.go正是读取该状态来判断环境是否已就绪resolveRPCURL、resolveRegistryContractAddressAndVersion等函数也体现了“命令行参数优先、状态文件兜底”的取值策略这是 Local CRE 命令与测试能够无缝衔接的根基。从参考页出发继续深入的三条路径官方参考页末尾以 “Related Pages” 收尾为贡献者指路下面已按仓库根目录相对路径转换Getting Started——从干净 checkout 到运行环境与首个冒烟测试的最短路径含env setup/env start --auto-setup的完整引导Environment——环境生命周期、Chip Ingress 栈、端口规划如50050Chip Router admin、50051Chip Router ingress gRPC、50053Chip Ingress gRPC、状态存储与排障的完整展开System Tests——CRE 系统测试套件的组织方式、运行模式本地 / Kubernetes / CI与维护说明。此外core/scripts/cre/environment/README.md中的 Quickstart 给出了与本参考页互补的最短实操命令cd core/scripts/cre/environment go run . env start --auto-setup go run . env workflow deploy -w ./examples/workflows/v2/cron/main.go --compile -n cron_example小结docs/local-cre/reference/index.md虽然篇幅精炼却是理解 Local CRE 工程结构的“地图”8 个源码锚点分别覆盖 CLI 入口、环境装配、工作流管线、拓扑生成与系统测试五大模块env/workflow/topology三大命令族支撑起从环境拉起、工作流发布到文档产出的完整闭环。结合本文对源码的逐条展开贡献者可以快速建立“文档→源码→命令→测试”的映射无论是二次开发、调试环境问题还是维护拓扑文档都能做到有的放矢。【免费下载链接】chainlinknode of the decentralized oracle network, bridging on and off-chain computation项目地址: https://gitcode.com/GitHub_Trending/ch/chainlink创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考