iotexproject/iotex-core

GitHub: iotexproject/iotex-core

IoTeX 区块链协议的官方 Go 实现,为 DePIN 项目提供高吞吐量、EVM 兼容的模块化 Layer-1 基础设施。

Stars: 1610 | Forks: 367

# iotex-core IoTeX 协议的官方 Golang 实现,这是模块化的 DePIN Layer-1 网络。 ## 什么是 IoTeX? IoTeX 是为 DePIN 项目提供的模块化基础设施,支持全面部署或将模块集成到现有的框架中。请访问 [IoTeX 主页](https://iotex.io) 官方网站,以了解更多关于 IoTeX 网络的信息。 ## 什么是 DePIN? ### 探索 DePIN 项目? [DePIN Scan](https://depinscan.io/) 是 DePIN 项目的首选浏览器。DePIN Scan 跟踪加密代币价格、实时设备数据,并为 DePIN 项目提供多种视图。 ## 运行 delegate? 请访问 [IoTeX Delegate 手册](https://github.com/iotexproject/iotex-bootstrap) 获取详细的设置流程。 ## 构建源代码 ### 最低要求 | 组件 | 版本 | 描述 | |----------|-------------|-------------| | [Golang](https://golang.org) | ≥ 1.22.12 | Go 编程语言 | | [Protoc](https://developers.google.com/protocol-buffers/) | ≥ 3.6.0 | Protocol buffers,仅在重新构建 protobuf 消息时需要 | ### 编译 将代码下载到您希望的本地位置(不需要放在 `$GOPATH/src` 目录下) ``` git clone git@github.com:iotexproject/iotex-core.git cd iotex-core ``` 如果您将项目代码放在 `$GOPATH\src` 目录下,您需要设置一个环境变量 ``` export GO111MODULE=on set GO111MODULE=on (for windows) ``` 通过以下命令构建通用用途(server、ioctl)的项目 ``` make ``` 通过以下命令构建更广泛用途(server、ioctl、injector...)的项目 ``` make all ``` 如果需要更新依赖,请运行 ``` go get -u go mod tidy ``` 如果您想了解关于 `go mod` 的更多高级用法,可以在[这里](https://github.com/golang/go/wiki/Modules)找到。 仅运行单元测试 ``` make test ``` 构建 docker 镜像 ``` make docker ``` ### 运行 iotex-core 通过以下命令启动(或恢复)一个独立的服务器来运行区块链 ``` make run ``` 通过以下命令从干净的状态重启服务器 ``` make reboot ``` 如果“make run”由于状态数据库损坏或缺失而失败,但区块数据库状态正常时,例如: 无法从底层数据库获取 factory 的高度,请尝试通过以下命令恢复状态数据库 ``` make recover ``` 然后再次执行“make run”。 ### 使用 CLI 用户可以通过以下命令与 iotex 区块链进行交互 ``` ioctl [command] ``` 请参阅 [ioctl CLI 文档](https://docs.iotex.io/blockchain/build/web3-development/ioctl-cli) 获取更多详细信息。 ## IOSwarm:分布式交易验证 IOSwarm 为 iotex-core 添加了一个可选的 coordinator,它通过 gRPC 将待处理的交易验证任务分发给外部 agent。它以 **shadow mode** 运行 —— 仅作观察用途,对共识或区块生产零影响。支持 L1–L4 验证级别,包括完整的 EVM 重新执行 (L3) 和有状态的本地验证 (L4)。 ### 工作原理 ``` Delegate Node (iotex-core + IOSwarm coordinator) ├── actpool → pending txs ├── stateDB → account state prefetch + SimulateAccessList (L3) ├── gRPC :14689 → dispatch tasks to agents ├── HTTP :14690 → monitoring API (/api/stats, /swarm/shadow) └── StateDiff stream → real-time state sync for L4 agents Agent Swarm (external processes) ├── L1: signature verify ├── L2: + nonce/balance checks ├── L3: + full EVM execution (100% shadow accuracy) ├── L4: + local state (BoltDB), independent validation └── Earn IOTX rewards per epoch (on-chain settlement) ``` ### 快速部署(已有 delegate) 完整的 delegate 接入指南请参见 [ioswarm/README.md](ioswarm/README.md)。 **1. 拉取镜像:** ``` docker pull raullen/iotex-core:ioswarm-v14 ``` **2. 将 IOSwarm 配置添加到您的 `config.yaml` 中:** ``` ioswarm: enabled: true grpcPort: 14689 swarmApiPort: 14690 maxAgents: 100 taskLevel: "L4" shadowMode: true pollIntervalMs: 1000 masterSecret: "" epochRewardIOTX: 0.5 diffStoreEnabled: true diffStorePath: "/var/data/statediffs.db" rewardContract: "0x236CBF52125E68Db8fA88b893CcaFB2EE542F2d9" rewardSignerKey: "" reward: delegateCutPct: 10 epochBlocks: 1 minTasksForReward: 1 bonusAccuracyPct: 99.5 bonusMultiplier: 1.2 ``` **3. 重启 delegate 并开放额外端口:** ``` docker stop iotex && docker rm iotex docker run -d --restart on-failure --name iotex \ -p 4689:4689 -p 14014:14014 \ -p 127.0.0.1:14689:14689 -p 127.0.0.1:14690:14690 \ -v=$IOTEX_HOME/data:/var/data:rw \ -v=$IOTEX_HOME/log:/var/log:rw \ -v=$IOTEX_HOME/etc/config.yaml:/etc/iotex/config_override.yaml:ro \ -v=$IOTEX_HOME/etc/genesis.yaml:/etc/iotex/genesis.yaml:ro \ raullen/iotex-core:ioswarm-v14 \ iotex-server \ -config-path=/etc/iotex/config_override.yaml \ -genesis-path=/etc/iotex/genesis.yaml ``` **4. 连接一个 agent:** ``` # 生成 agent key go run ./ioswarm/cmd/keygen --master= --agent=agent-01 # 启动 agent ./ioswarm-agent \ --coordinator=:14689 \ --agent-id=agent-01 \ --api-key= \ --level=L2 ``` **5. 监控:** ``` # 日志 docker logs -f iotex | grep -i ioswarm # Status API curl http://localhost:14690/swarm/status curl http://localhost:14690/swarm/agents curl http://localhost:14690/swarm/shadow ``` ### 安全保障 - **默认关闭:** `ioswarm.enabled` 默认值为 `false` —— 除非明确启用,否则零影响 - **非致命错误:** 如果 IOSwarm 启动失败(端口冲突等),delegate 会记录一条警告并继续正常运行 - **Panic 隔离:** 所有 IOSwarm goroutine 都具有 `defer recover()` —— IOSwarm 中的 panic 不会导致节点崩溃 - **优雅关闭:** gRPC 停止设有 5 秒超时,以防止阻塞节点关闭 - **Shadow mode:** Agent 的结果仅用于比较,绝不会影响区块生产 ### 相比 v2.3.5 有哪些变化 IOSwarm 的集成仅涉及 2 个现有文件: | 文件 | 变更 | |------|--------| | `config/config.go` | +3 行:Config 结构体中的 `IOSwarm` 字段 | | `server/itx/server.go` | +21 行:coordinator 的条件性 Start/Stop | 其他所有内容都在新的 `ioswarm/` 目录中。当 `ioswarm.enabled: false`(默认)时,不会执行任何新的代码路径。 ## 联系方式 - 邮件列表:[iotex-dev](iotex-dev@iotex.io) - 开发者论坛:[forum](https://community.iotex.io/c/research-development/protocol) - Bug 反馈:[issues](https://github.com/iotexproject/iotex-core/issues) ## 贡献 对于任何重大的协议层更改,我们使用 [IIP](https://github.com/iotexproject/iips) 来跟踪提案、决策 等内容。 ## 许可证 本项目基于 [Apache License 2.0](LICENSE) 授权。
标签:DeFi, DePIN, EVM, EVTX分析, Golang, IoTeX, Python工具, Web3, 区块链, 安全编程, 日志审计, 请求拦截