Skip to main content
这一页告诉你从克隆仓库到本机跑起一个 worker 需要什么。BlockX 是一个 Go 工作区,python/ 目录放运行时与审计器,pyhost/ 放嵌入 CPython 的 Executor 宿主。整体架构见 架构总览,目录分层见 仓库结构。

前置依赖

外部服务在本地开发中都有替身,不需要先搭 etcd、BlockDB、Meta 或链节点:

快速开始

按照快速开始准备依赖、构建 Worker 与 Executor 宿主,并提交本地任务。启动命令集中维护在那里。 修改 EVM 运行时桥接时,可先运行:
接入真实链数据前,先明确链与区块上下文。完整测试分层见测试。

Makefile 目标

环境变量与配置文件

worker 的加载顺序在 internal/worker/app/app.go 里:DefaultWorkerFullConfig() → profile 的 TuneDefaults → WORKER_CONFIG 指向的 JSON 文件(LoadWorkerFullConfigFrom)→ 环境变量覆盖。JSON 字段名与 WorkerFullConfig 的 json tag 一致,示例见 blockx 仓库 docs/deploy.md §9.3。coordinator 只读环境变量,没有配置文件(internal/coordinator/app/config.go 的 LoadCoordinatorRuntimeConfigFromEnv)。 本地开发最常碰到的变量: 完整表(含 AIMD、gRPC keepalive、Iceberg cache 等几十项)见 blockx 仓库 docs/deploy.md §9;deploy/env/worker.env.example 是 EC2 部署用的 env 文件样例,包含大量宿主机脚本才读的键,不适合直接拿来本地跑。

代码生成

改了 .proto 后重新生成 Go 绑定:
Makefile 会把 $(go env GOBIN)(或 $(go env GOPATH)/bin)加进 PATH,所以插件装在默认位置即可。proto 源文件位置:api/grpc/*/ 与 internal/sdk/{blockdb,meta,localtestservice}/proto/。生成结果要一起提交。

常见问题

先安装 python/pyproject.toml 固定的依赖,并确认 Executor 宿主可以构建。共享进程测试环境由 internal/testutil/pyhost.go 准备。
这是 CGO_ENABLED=0 的症状。worker 与 bundle_worker 必须开 CGO,并且机器上要有 C 编译器。首次链接较慢属正常。
看错误串:icebergNamespace must not be empty 补 ICEBERG_NAMESPACE;plugin BlockTableWriteHandler requires blockdb.batchWriteAddr(仅 cmd/bundle_worker)补 BLOCKDB_BATCH_WRITE_ADDR;usage 相关错误补 BLOCKX_USAGE_DISABLED=true。
检查 ETCD_ENDPOINTS 是否指向同一个 etcd,以及 WORKER_ADDR 是否是 Coordinator 可达的地址;容器网络隔离时必须显式设置(docs/deploy.md §7)。本地单机调试可以直接 ETCD_ENDPOINTS=none 绕过 Coordinator。
检查 EXECUTOR_HOST_BIN 是否指向已构建的宿主,以及 PYTHONPATH 是否包含运行时与虚拟环境依赖。启动步骤见快速开始。
这些是私有模块。配置 git 凭据(例如 git config --global url."git@github.com:".insteadOf "https://github.com/"),并设 GOPRIVATE=github.com/Chaintable/*。Python 侧的 blockx-py 等也是私有 git 依赖,同样需要凭据。

相关文档

  • 测试:各测试层的命令、耗时与前置条件。
  • 贡献流程:提交与 PR 约定。
  • 仓库结构:cmd/、internal/、api/、python/ 各放什么。
  • 部署概览:镜像构建与 EC2 运行形态。
  • blockx 仓库 docs/deploy.md:完整环境变量表、Docker 启动示例与常见问题。
  • blockx 仓库 AGENTS.md:构建、测试与协作约定的权威清单。