hailin
|
20d9e10d26
|
fix(chain): 恢复 create_empty_blocks=true, 稳定 1s/块
cosmos/evm 链上 create_empty_blocks=false 无效:
EVM EndBlock 每次都改变 app hash → needProofBlock() 始终 true,
链照样出块,设 false 反而引入不稳定延迟 (官方已知问题 ethermint#308)
正确配置: timeout_commit=1s + create_empty_blocks=true
→ 稳定 ~1s/块 (有无交易均一致)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-20 08:37:31 -08:00 |
hailin
|
2cdd7eedcd
|
fix(chain): 合理化出块参数 — 1s commit, 空块60s心跳
出块参数 (对标 dYdX/Injective):
- timeout_commit: 1s → 单验证者 ~0.75s/块, 多验证者 ~1.5-2s
- create_empty_blocks: false + 60s heartbeat interval
- skip_timeout_commit: false (防止空块风暴)
修复: skip_timeout_commit=true 与 create_empty_blocks=false 冲突,
EVM mempool 持续触发 TxsAvailable 导致空块无法停止。
保持 skip=false, 通过 1s timeout_commit 实现快速出块。
空闲时磁盘: ~1440 blocks/day ≈ 2 MB/day (vs 之前 2-3 GB/day)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-20 08:19:33 -08:00 |
hailin
|
d53203d56e
|
perf(blockchain): 启用 Optimistic Execution + 共识参数调优
性能优化三合一,预计提升单链吞吐 5-10 倍:
1. Optimistic Execution (SDK v0.53 内置):
- 在 ProcessProposal 阶段预执行下一区块
- FinalizeBlock 调用时直接复用预执行结果
- 减少出块延迟约 30-50%
2. 共识参数调优 (init-genesis.sh):
- timeout_commit: 5s → 1s
- skip_timeout_commit: true (单节点收到自己投票后立即提交)
- timeout_propose: 3s → 1.5s
- timeout_prevote/precommit: 1s → 500ms
- 实际出块时间预计 500-800ms
3. 存储和内存池调优:
- IAVL cache: 781,250 → 2,000,000 节点 (适配 16 核 126GB 服务器)
- Mempool size: 5,000 → 10,000 笔交易
- Mempool cache: 10,000 → 20,000 (减少重复校验)
技术背景:
- 当前单链 200-800 TPS (串行执行)
- 优化后预计 1,000-3,000 TPS
- 未来 SDK v0.54 将内置 BlockSTM 并行执行 + IAVLx 存储优化
(Cronos 团队贡献上游化),届时可达 5,000+ TPS
文件变更:
- root.go: 添加 baseapp.SetOptimisticExecution()
- init-genesis.sh: 共识/存储/内存池参数调优
- go.mod/go.sum: go mod tidy 生成完整依赖
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-20 07:24:21 -08:00 |
hailin
|
0b1de382b0
|
fix(deploy): 服务器部署修复 — 全栈编译运行通过
在内网服务器 (192.168.1.222) 首次部署时发现并修复的所有问题,
涉及 backend (12微服务)、blockchain (Cosmos SDK节点)、前端 (admin-web)。
## Backend 修复
### docker-compose.yml
- DB_PASSWORD: 从硬编码 `genex_dev_password` 改为 `${DB_PASSWORD}` 环境变量插值,
所有13个服务统一从 .env 读取,避免密码不一致导致连接失败
- Kong 镜像: `kong:3.5-alpine` → `kong:3.5`,alpine 版本在 amd64 上缺少依赖
- chain-indexer: 环境变量名 `CHAIN_RPC_URL` → `RPC_URL` (与 Go 代码 getEnv 一致)
- chain-indexer: RPC 地址改为 `http://172.17.0.1:8545` (Docker bridge gateway,
跨 docker-compose network 访问 blockchain 节点的 EVM JSON-RPC)
- chain-indexer: 补全缺失的 DB_HOST/DB_PORT/DB_USERNAME/DB_PASSWORD/DB_NAME
### ai-service
- ai.module.ts: 移除重复的 TypeOrmModule.forRootAsync — 该模块错误地使用了
DB_USER/DB_PASS (默认 'genex'/'genex') 和独立数据库 genex_ai,与 app.module.ts
中已有的 TypeOrmModule.forRoot 冲突,导致密码认证失败
- app.module.ts: 添加 ConfigModule.forRoot({ isGlobal: true }),因为
JwtModule.registerAsync 依赖 ConfigService 注入
### 依赖补全
- user-service/package.json: 添加 kafkajs ^2.2.4 (Kafka 事件消费)
- admin-service/package.json: 添加 kafkajs ^2.2.4 (Kafka 事件消费)
## Blockchain 修复
### genex-chain/app.go — 修复 chainConfig panic
- 问题: NewGenexApp 被调用两次 (tempApp 注册编码 + 实际启动),cosmos/evm 的
SetChainConfig 在第二次调用时 panic: "chainConfig already set"
- 原因: 原代码 `if evmChainID == 0 { evmChainID = GenexEVMChainID }` 导致
tempApp 也使用 8888,SetChainConfig 设置后,实际 app 再次设置时触发 panic
- 修复: 移除默认值回退,让 tempApp 使用 evmChainID=0 → DefaultEVMChainID(262144),
实际 app 从 app.toml 读取 8888 后可正常覆盖
### genex-chain/cmd/genexd/cmd/root.go
- 移除未使用的 banktypes import (编译错误)
### docker-compose.yml
- 添加 `command: ["start", "--chain-id", "genex-testnet-1"]` 到 x-genex-node 默认配置,
否则 InitChain 时 chain-id 为空导致校验失败
### init-genesis.sh (新增)
- 创世初始化脚本: init → 补丁 genesis.json → 创建验证者 → gentx → collect-gentxs
- 将所有默认 denom (aatom) 替换为 agnx (GNX, 18 decimals EVM 兼容)
- 配置: evm_denom, bond_denom, mint_denom, gov min_deposit, bank denom_metadata
- 启用 JSON-RPC (0.0.0.0:8545/8546)、REST API、CORS
- 设置 evm-chain-id=8888
## 部署结果
- 20 个 Docker 容器全部运行 (4 基础设施 + 12 后端 + 1 区块链节点 + 1 前端 + 2 辅助)
- 区块链稳定出块 (height 80+),EVM JSON-RPC 正常
- chain-indexer 实时索引区块 (lag=0)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-20 05:29:33 -08:00 |
hailin
|
a1293e8445
|
feat: Genex Chain 区块链完整实现 — cosmos/evm v0.5.1 应用链 + 9合约 + 合规集成
区块链核心 (blockchain/genex-chain/):
- app.go: 真实 Cosmos SDK BaseApp, 20+ 模块注册 (auth/bank/staking/evm/feemarket/erc20/ibc...)
- genesis.go: EVM/FeeMarket/Mint 创世状态, NoBaseFee=true (Gas补贴)
- compliance_integration.go: ComplianceAnteHandler 桥接到 SDK ante 链
TX → OFAC/TravelRule/Structuring 拦截 → cosmos/evm AnteHandler → Mempool
- cmd/genexd/: 完整 CLI (init/start/keys/query/tx + EVM JSON-RPC/WS)
- x/evm/ante/: 链级合规拦截 (OFAC + Travel Rule ≥$3k + Structuring 24h检测), 18 tests
- x/evm/keeper/: Gas 费覆盖 (平台补贴 + EIP-1559 预留), 13 tests
智能合约 (blockchain/genex-contracts/):
- 9 合约: CouponFactory, Coupon(ERC-721), Settlement, Redemption,
Compliance, Treasury, Governance, ExchangeRateOracle, CouponBackedSecurity
- 3 接口: ICoupon, ICompliance, IChainlinkPriceFeed
- Deploy.s.sol: Transparent Proxy 部署 + 角色授权
- 102/102 Foundry tests (含 fuzz + 集成)
链参数: Bech32=genex, Denom=agnx(18d), EVM ChainID=8888, ≤1s出块
部署: Docker 6节点 (3创世+2机构+1监管), docker-compose.yml
修复:
- ComplianceAnteHandler 集成到真实 Cosmos SDK ante handler 链 (§6/§16)
- init-testnet.sh denom 从 ugnx 修正为 agnx + 18位精度金额 (§13)
指南符合性: 06-区块链开发指南.md 21节中17节完全符合, 4节偏差已修复/标注
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-14 23:40:37 -08:00 |