ZORAI 公链技术文档 v1.0
代码基线:/home/zhangxg/zoraiv5 当前工作区
最后更新:2026-05-22
适用对象:节点运维者、DApp 开发者、RWA 发行方、法务/公证存证服务商、AI/GPU Provider、跨链集成方、区块链浏览器与索引服务开发者
法律声明:ZORAI Evidence/Notary Layer 适用于司法存证场景,但最终法律效力以当地司法机关认定为准。
目录
- ZORAI 公链概述
- 系统架构总览
- 核心功能详解
- EVM 兼容性与智能合约
- RWA 真实世界资产支持
- 法务/公证存证系统
- AI / GPU 计算市场
- 跨链功能
- 稳定币 ZUSD / zUSDT
- RPC 接口大全
- 开发者指南
- 技术参数与配置
- 部署与运维
- 路线图与当前状态
1. ZORAI 公链概述
ZORAI 是一条面向高吞吐 EVM 应用、RWA 合规资产、AI/GPU 计算市场和跨链资产流转的 Layer 1 公链。当前代码库实现了完整节点、BFT + PoS 共识、EVM 执行层、MPT 状态存储、LevelDB 持久化、JSON-RPC/WebSocket、Explorer/Indexer、RWA RPC、Compute RPC、Bridge/Wrapped Asset 模块以及生产监控脚本。
核心实现入口:
| 模块 | 代码位置 | 说明 |
|---|---|---|
| 节点主程序 | cmd/xihud/main.go:2208 | 区块生产、BFT 提案、交易执行、最终性广播 |
| 共识核心 | pkg/consensus/bft.go:366 | BFTManager、QC、投票历史、round liveness |
| PoS 验证人 | pkg/consensus/pos_complete.go:37 | 验证人、质押、加权 proposer 选择 |
| EVM 执行层 | pkg/evm/evm.go:40 | go-ethereum EVM、London 规则、预编译 |
| 状态层 | pkg/state/mpt_state.go:43 | MPT 状态管理、账户、证明、状态根 |
| 区块链存储 | pkg/blockchain/store.go:34 | LevelDB + WAL、区块/交易索引 |
| 网络层 | pkg/network/network.go:107 | libp2p、Gossip、限流、DHT、同步 |
| RPC 层 | pkg/rpc/web3_full.go:598 | Ethereum JSON-RPC、ZORAI 扩展 RPC |
| WebSocket | pkg/websocket/websocket.go:22 | newHeads、pending tx、logs、syncing 订阅 |
| Explorer/Indexer | cmd/explorer/main.go:235 | 文档、区块、交易、账户、代币页面 |
项目定位
ZORAI 的设计重点是:
- EVM 兼容的高频交易链:链 ID 为
70707,十六进制为0x11433,定义见pkg/types/chain.go:3。 - 亚秒级出块目标:默认 block time 为
400ms,定义见configs/config.toml:21。 - BFT 最终性:BFT vote、QC、BLS 聚合签名与 finalized block 广播定义在
pkg/consensus/bft.go:70、pkg/consensus/bft.go:76、cmd/xihud/main.go:5454。 - RWA 原生支持:资产、发行人、KYC、披露、估值、赎回、监管报告等模型定义在
pkg/rwa/types.go:37、pkg/rpc/rwa_rpc.go:24。 - AI/GPU 计算市场:任务、Provider、证明、托管和争议状态机定义在
pkg/taskmarket/types.go:52、pkg/taskmarket/market.go:17。 - 跨链与 Wrapped Asset:跨链消息、证明绑定、Wrapped Asset 执行器定义在
pkg/crosschain/types.go:28、pkg/crosschain/manager.go:261、pkg/evm/bridge_executor.go:35。
当前成熟度
从代码完整度看,ZORAI 已具备生产候选链的核心能力。当前最重要的生产门槛不是功能数量,而是长时间公网稳定性证据,尤其是 BFT liveness 在 7 validator + 1 RPC 公网拓扑下连续运行。代码中已经加入了 pending block 恢复、voteHistory 清理、finalized 水位同步、round_timeout 关键消息旁路限流和 90 秒级 liveness watchdog,相关位置见 pkg/consensus/bft.go:650、pkg/consensus/bft.go:839、pkg/consensus/bft.go:2372、pkg/network/network.go:1865、scripts/stability-test/zorai_liveness_watchdog.py:231。
建议成熟度评估:
| 维度 | 当前评估 | 说明 |
|---|---|---|
| 执行层兼容性 | 8.5/10 | London EVM、EIP-1559、标准合约部署能力完整 |
| 共识安全性 | 8.0/10 | QC、BLS、2/3 stake 检查、双签防护已实现 |
| 共识活性 | 8.0 到 8.5/10 | liveness 修复已入代码,仍需要 720h 无停块证据 |
| RPC/开发者体验 | 8.0/10 | Ethereum RPC + ZORAI 扩展方法较完整 |
| RWA/Compute/Bridge | 7.5 到 8.5/10 | 模块完整,但需要更多审计和外部集成验证 |
| 运维生产化 | 8.0/10 | 8 节点脚本、720h monitor、90s watchdog、控制平面基础已存在 |
与 Ethereum、Solana、Monad、Avalanche 的对比
| 项目 | ZORAI | Ethereum | Solana | Monad | Avalanche |
|---|---|---|---|---|---|
| 执行环境 | EVM London | EVM | SVM | EVM | EVM/Subnet |
| 共识方向 | PoS + BFT QC | PoS finality | PoH + Tower BFT | 高性能 EVM 并行方向 | Avalanche consensus |
| 出块目标 | 默认 400ms | 约 12s | 亚秒级 slot | 高吞吐低延迟目标 | 秒级 |
| 状态存储 | MPT + LevelDB | MPT/Verkle 演进 | AccountsDB | 并行状态方向 | LevelDB/RocksDB 系 |
| 核心差异 | RWA + Compute + Bridge 原生模块 | 最大生态和安全性 | 高吞吐非 EVM 原生 | EVM 高性能 | 多链/子网成熟 |
| 当前阶段 | 生产候选,需要长稳验证 | 生产成熟 | 生产成熟 | 新兴 | 生产成熟 |
2. 系统架构总览
文字版架构图
用户 / 钱包 / DApp / 运维平台
|
| JSON-RPC / WebSocket / Explorer UI
v
RPC 层 pkg/rpc + pkg/websocket
|
| sendRawTransaction / eth_call / logs / compute / rwa / bridge
v
Mempool pkg/mempool ---> 区块生产 cmd/xihud
| |
| | BFT Proposal / Vote / QC
v v
执行层 pkg/evm <------> 共识层 pkg/consensus
|
| StateDB / receipts / logs
v
状态层 pkg/state MPT + 区块存储 pkg/blockchain LevelDB/WAL
|
v
P2P 网络 pkg/network libp2p / DHT / Gossip / Sync
|
v
Explorer / Indexer cmd/explorer
共识层:BFT + PoS
PoS 验证人结构包含地址、P2P multiaddr、RPC URL、质押、BLS 公钥等字段,见 pkg/consensus/pos_complete.go:37。Proposer 选择使用 active validator 集合、stake 加权、epoch height、round 和 previous hash 共同参与的确定性选择逻辑,见 pkg/consensus/pos_complete.go:144。
BFT 层的核心对象是 BFTManager,它维护 pending blocks、votes、voteHistory、fork/equivocation 记录、round locks、highQC、currentQC 和 finalized 水位,见 pkg/consensus/bft.go:366。Quorum Certificate 包含 block hash、height、round、聚合签名、签名者、总质押与验证人集合哈希,见 pkg/consensus/bft.go:76。QC 有效性要求签名质押达到总质押的 2/3,见 pkg/consensus/bft.go:103。
执行层:EVM
EVM 执行器封装 go-ethereum stateDB、trie DB、ChainConfig、receipt 管理和状态管理器,见 pkg/evm/evm.go:40。ZORAI ChainConfig 将 Homestead、EIP150、EIP155、Byzantium、Constantinople、Petersburg、Istanbul、Berlin、London 全部从 block 0 激活,见 pkg/evm/evm.go:78。这意味着链从创世开始支持 EIP-155 replay protection 和 EIP-1559 fee market。
状态存储:MPT + LevelDB
状态层由 MPTStateManager 管理,持有 LevelDB、账户映射、trie、stateRoot、dirtyAccounts 和历史 stateRoot,见 pkg/state/mpt_state.go:43。账户余额、nonce、code hash、storage root 等账户数据由 Account 结构管理,状态提交时按地址排序重建 canonical trie 并写入 state_root,见 pkg/state/mpt_state.go:477。
区块链存储由 Blockchain 管理 LevelDB、WAL、block index、transaction index、receipt 管理器和链状态,见 pkg/blockchain/store.go:34。区块写入使用 WAL + LevelDB 批处理,避免写入一半导致状态不一致,见 pkg/blockchain/store.go:337。
P2P 网络
ZORAI 网络层基于 libp2p,协议 ID 为 /zorai/1.0.0,定义见 pkg/network/network.go:34。网络支持 Kademlia DHT、routing discovery、peer scoring、CRDT peer exchange、快照同步、增量同步、消息去重、限流和关键消息旁路,核心结构见 pkg/network/network.go:107。
共识消息包括 block_proposal、vote、round_timeout、finalized_block、validator join/leave/vote 等,见 pkg/network/network.go:63。round_timeout 被纳入关键消息旁路限流列表,因为它直接关系到 BFT round-change 活性,见 pkg/network/network.go:1865。
RPC 层
RPC 层提供 Ethereum 兼容 JSON-RPC、ZORAI 扩展 RPC、validator RPC、bridge RPC、RWA RPC 和 compute RPC。方法分发集中在 pkg/rpc/web3_full.go:598。WebSocket 支持 newHeads、newPendingTransactions、logs、syncing,见 pkg/websocket/websocket.go:22。
Explorer 与 Indexer
Explorer 路由在 cmd/explorer/main.go:235,包含首页、区块、交易、账户、验证人、代币、稳定币、RWA、跨链、文档等页面。Token indexer 使用 LevelDB 存储 ERC20/ERC721/ERC1155 事件索引状态,默认目录为 /opt/zorai/token-indexdb,见 cmd/explorer/token_indexer.go:23、cmd/explorer/token_indexer.go:64。
3. 核心功能详解
账户模型与状态管理
ZORAI 使用 EVM 账户模型。账户包括余额、nonce、code hash 和 storage root。状态管理器提供余额、nonce、storage、code、proof、state root commit 能力,核心入口见 pkg/state/mpt_state.go:216 到 pkg/state/mpt_state.go:535。
读取账户余额的 RPC 示例:
curl -s https://rpc.zorai.co \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"id":1,
"method":"eth_getBalance",
"params":["0xYourAddressHere","latest"]
}'
读取 nonce:
curl -s https://rpc.zorai.co \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"id":1,
"method":"eth_getTransactionCount",
"params":["0xYourAddressHere","latest"]
}'
交易结构与签名
交易类型定义在 pkg/types/transaction.go:17:
| 类型 | 值 | 说明 |
|---|---|---|
| Legacy | 0x00 | 传统 Ethereum 交易 |
| AccessList | 0x01 | EIP-2930 access list 交易 |
| DynamicFee | 0x02 | EIP-1559 动态费用交易 |
交易结构包含 from、to、value、gasLimit、gasPrice、maxFeePerGas、maxPriorityFeePerGas、nonce、data、signature、chainID 等字段,见 pkg/types/transaction.go:26。签名使用 go-ethereum LatestSignerForChainID,见 pkg/types/transaction.go:62。验证时会检查 chain ID、签名、gas limit、EIP-1559 fee 字段,见 pkg/types/transaction.go:169。
发送 raw transaction:
curl -s https://rpc.zorai.co \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"id":1,
"method":"eth_sendRawTransaction",
"params":["0xRAW_SIGNED_TRANSACTION"]
}'
使用 ethers.js 发送 EIP-1559 交易:
import { ethers } from "ethers";
const provider = new ethers.JsonRpcProvider("https://rpc.zorai.co", {
chainId: 70707,
name: "zorai"
});
const wallet = new ethers.Wallet(process.env.PRIVATE_KEY!, provider);
const tx = await wallet.sendTransaction({
to: "0xReceiverAddress",
value: ethers.parseEther("1"),
type: 2,
maxFeePerGas: ethers.parseUnits("2", "gwei"),
maxPriorityFeePerGas: ethers.parseUnits("1", "gwei"),
gasLimit: 21000
});
console.log(tx.hash);
Gas 机制:EIP-1559
默认 gas 配置见 pkg/evm/evm.go:791:
| 参数 | 默认值 | 代码位置 |
|---|---|---|
| EIP-1559 | enabled | pkg/evm/evm.go:792 |
| 初始 base fee | 1 gwei | pkg/evm/evm.go:793 |
| min gas price | 1 gwei | pkg/evm/evm.go:794 |
| max gas price | 1000 gwei | pkg/evm/evm.go:795 |
| max priority fee | 1 gwei | pkg/evm/evm.go:796 |
| block gas limit | 30,000,000 | pkg/evm/evm.go:797 |
| base fee denominator | 8 | pkg/evm/evm.go:798 |
| target gas ratio | 50% | pkg/evm/evm.go:799 |
Base fee 调整逻辑在 pkg/evm/evm.go:495,按父区块 gasUsed 与 targetGas 的差值调整。RPC 支持 eth_gasPrice、eth_maxPriorityFeePerGas、eth_feeHistory,分发见 pkg/rpc/web3_full.go:658。
查询 gas:
curl -s https://rpc.zorai.co \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_gasPrice","params":[]}'
查询 fee history:
curl -s https://rpc.zorai.co \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"id":1,
"method":"eth_feeHistory",
"params":["0x5","latest",[10,50,90]]
}'
Mempool 与交易打包
TxPool 维护 pending、queued、按账户交易、交易大小、最小 gas price、replacement bump、chain ID、base fee 等状态,见 pkg/mempool/mempool.go:91。默认参数包括 3 小时过期、1 gwei minGasPrice、128KB maxTxBytes、10% replacement price bump,见 pkg/mempool/mempool.go:110。
交易加入 mempool 时会执行签名、nonce、余额、gas、size、chain ID 校验,见 pkg/mempool/mempool.go:409。区块生产时从 txpool 选择交易,执行 nonce、fee cap、余额、gas limit 过滤,见 cmd/xihud/main.go:2208。
查看 txpool:
curl -s https://rpc.zorai.co \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"txpool_status","params":[]}'
curl -s https://rpc.zorai.co \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":2,"method":"txpool_content","params":[]}'
区块生产与最终性
区块结构定义在 pkg/types/block.go:21,Header 包含 height、previous hash、state root、transactions hash、receipts hash、gas used、gas limit、base fee、chain ID、proposer 和签名。NewBlock 默认设置 chain ID 和 base fee,见 pkg/types/block.go:52。
生产流程:
- 通过 PoS 选择 proposer,见
pkg/consensus/pos_complete.go:144。 - proposer 从 mempool 打包交易并执行预执行,见
cmd/xihud/main.go:2208。 - proposer 创建 BFT proposal,见
pkg/consensus/bft.go:1120。 - 验证人收到 proposal 后校验 proposer、chain ID、validator set、parent hash、round、签名和本地投票历史,见
pkg/consensus/bft.go:1219。 - 验证人创建 vote,见
pkg/consensus/bft.go:1430。 - 达到 2/3 stake 后形成 QC,最终化区块并广播 finalized block,见
cmd/xihud/main.go:5454。
BFT Liveness 保护
ZORAI 的 BFT liveness 修复重点解决同高度多 round 下 voteHistory 与 re-propose 的冲突。当前实现中:
| 机制 | 代码位置 | 作用 |
|---|---|---|
| pending timeout 后允许恢复 | pkg/consensus/bft.go:650 | 超时后清理 stale pending,允许重新提案 |
| 清理高度恢复状态 | pkg/consensus/bft.go:839 | 同步清理 pending、forks、round locks、voteHistory |
| voteHistory 高 round 规则 | pkg/consensus/bft.go:788 | 同 round 禁止改投,高 round 可按规则推进 |
| finalized 水位推进 | pkg/consensus/bft.go:2098 | 启动或恢复时将 lastFinalized 推进到链头 |
| 持久状态加载 | pkg/consensus/bft.go:2372 | 加载 bft_state 时避免恢复导致死锁的 stale voteHistory |
| round_timeout 风暴保护 | pkg/network/network.go:1543 | 按 peer/height/round 进行高水位和重复保护 |
事件日志与 WebSocket 订阅
Receipt 和 Log 结构定义在 pkg/receipt/receipt.go:18、pkg/receipt/receipt.go:33。日志过滤实现见 pkg/receipt/receipt.go:257。RPC 的 eth_getLogs 入口见 pkg/rpc/web3_full.go:1920。
WebSocket 订阅类型:
| 类型 | 代码位置 | 说明 |
|---|---|---|
newHeads | pkg/websocket/websocket.go:22 | 新区块头 |
newPendingTransactions | pkg/websocket/websocket.go:23 | pending 交易 hash |
logs | pkg/websocket/websocket.go:24 | 合约事件日志 |
syncing | pkg/websocket/websocket.go:25 | 同步状态 |
WebSocket 示例:
const ws = new WebSocket("wss://rpc.zorai.co/ws");
ws.onopen = () => {
ws.send(JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "eth_subscribe",
params: ["newHeads"]
}));
};
ws.onmessage = (event) => {
console.log(JSON.parse(event.data));
};
4. EVM 兼容性与智能合约
支持的 EVM 版本
ZORAI 当前代码将 London 及之前主要 hard fork 从 block 0 启用,见 pkg/evm/evm.go:78。当前代码未显示 Shanghai/Cancun 配置项,因此文档层面应声明为 London EVM 兼容。
// 核心配置位置:pkg/evm/evm.go:78
ChainID: chainID,
HomesteadBlock: big.NewInt(0),
EIP150Block: big.NewInt(0),
EIP155Block: big.NewInt(0),
ByzantiumBlock: big.NewInt(0),
IstanbulBlock: big.NewInt(0),
BerlinBlock: big.NewInt(0),
LondonBlock: big.NewInt(0),
预编译合约
ZORAI 继承 go-ethereum Berlin/Istanbul 预编译,并注册 ERC-3643 自定义预编译,见 pkg/evm/evm.go:158。ERC-3643 预编译地址定义见 pkg/evm/erc3643_precompiled.go:17:
| 地址 | 功能 |
|---|---|
0x0000000000000000000000000000000000000200 | ERC3643 transfer |
0x0000000000000000000000000000000000000201 | ERC3643 mint |
0x0000000000000000000000000000000000000202 | ERC3643 burn |
0x0000000000000000000000000000000000000203 | ERC3643 balance |
0x0000000000000000000000000000000000000204 | ERC3643 whitelist |
0x0000000000000000000000000000000000000205 | ERC3643 freeze |
ERC 标准支持情况
| 标准 | 支持状态 | 说明 |
|---|---|---|
| ERC20 | 已支持 | 官方模板 contracts/zorai-token-templates/ZORAIERC20.sol:9 |
| ERC721 | EVM 可部署 | 当前仓库未发现官方 ERC721 模板,可使用 OpenZeppelin 标准合约 |
| ERC1155 | EVM 可部署,Indexer 有事件常量 | 事件哈希见 cmd/explorer/token_indexer.go:23 |
| ERC3643 | 原生重点支持 | Solidity 模板 + EVM 预编译 + RWA RPC |
| Stablecoin | 已支持 | ZORAIStablecoinV2 模板支持 mint/burn/pause/blacklist/freezer/multisig |
官方 ERC20 模板
模板位置:contracts/zorai-token-templates/ZORAIERC20.sol:9。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol";
import "@openzeppelin/contracts/access/AccessControl.sol";
contract ZORAIERC20 is ERC20, ERC20Burnable, ERC20Pausable, AccessControl {
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");
constructor(
string memory name_,
string memory symbol_,
address admin,
uint256 initialSupply
) ERC20(name_, symbol_) {
_grantRole(DEFAULT_ADMIN_ROLE, admin);
_grantRole(MINTER_ROLE, admin);
_grantRole(PAUSER_ROLE, admin);
_mint(admin, initialSupply);
}
}
Hardhat 网络配置
Hardhat 配置已内置 ZORAI 网络,见 contracts/hardhat/hardhat.config.ts:23。
zorai: {
url: process.env.ZORAI_RPC_URL || "http://127.0.0.1:18080/rpc",
chainId: 70707,
accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : [],
}
部署示例:
cd /home/zhangxg/zoraiv5/contracts/hardhat
npm install
export ZORAI_RPC_URL=https://rpc.zorai.co
export PRIVATE_KEY=0xYOUR_PRIVATE_KEY
npx hardhat compile
npx hardhat run scripts/deploy_zusd.ts --network zorai
5. RWA 真实世界资产支持
ZORAI 的 RWA 模块覆盖资产登记、发行人、估值、文档、KYC、合规规则、治理提案、分红、赎回、披露、监管报告和价格 oracle。资产模型定义在 pkg/rwa/types.go:37,KYC 记录定义在 pkg/rwa/types.go:137,赎回请求定义在 pkg/rwa/types.go:218。
ERC-3643 实现细节
ERC-3643 Solidity 模板位于 contracts/zorai-token-templates/ZORAIRWAToken.sol:260。模板包含:
| 模块 | 代码位置 | 作用 |
|---|---|---|
| ClaimTopics | contracts/zorai-token-templates/ZORAIRWAToken.sol:20 | 声明所需 KYC/合规声明主题 |
| TrustedIssuers | contracts/zorai-token-templates/ZORAIRWAToken.sol:59 | 可信声明发行方 |
| IdentityRegistry | contracts/zorai-token-templates/ZORAIRWAToken.sol:111 | 地址身份与国家码 |
| Compliance | contracts/zorai-token-templates/ZORAIRWAToken.sol:172 | 冻结、黑名单、国家限制、单日限额 |
| RWA Token | contracts/zorai-token-templates/ZORAIRWAToken.sol:260 | ERC20 + KYC + 合规控制 |
Token 的 _update 会检查发送方和接收方身份、冻结状态和合规规则,相关逻辑见 contracts/zorai-token-templates/ZORAIRWAToken.sol:360。
合规模块、KYC 与权限控制
RWA RPC 方法入口见 pkg/rpc/rwa_rpc.go:24。核心合规方法包括:
| 方法 | 说明 |
|---|---|
rwa_setKYCRecord | 设置 KYC 记录 |
rwa_getKYCRecord | 查询 KYC |
rwa_isVerified | 检查地址是否通过验证 |
rwa_freezeAddress / rwa_unfreezeAddress | 冻结或解冻地址 |
rwa_setComplianceRules | 设置资产级合规规则 |
rwa_setSanction | 设置制裁状态 |
rwa_registerTradingVenue | 登记交易场所 |
rwa_setTransferRestriction | 设置转让限制 |
设置 KYC 示例:
curl -s https://rpc.zorai.co \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"id":1,
"method":"rwa_setKYCRecord",
"params":[{
"address":"0xInvestorAddress",
"verified":true,
"level":"enhanced",
"investor_type":"professional",
"jurisdiction":"HK",
"tax_residency":"HK",
"sanctions_clear":true,
"accredited":true,
"professional":true,
"institution":false,
"kyc_hash":"ipfs://bafy.../kyc-proof.json",
"limits":{"daily":"1000000000000000000000"},
"expires":1798761600,
"metadata":{"provider":"licensed-kyc-vendor"}
}]
}'
设置合规规则示例:
curl -s https://rpc.zorai.co \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"id":2,
"method":"rwa_setComplianceRules",
"params":[{
"asset_id":"rwa-realestate-hk-001",
"required_kyc_level":"enhanced",
"allowed_jurisdictions":["HK","SG"],
"blocked_jurisdictions":["US"],
"require_accredited":true,
"max_trade_amount":"100000000000000000000",
"max_balance":"1000000000000000000000",
"holding_period_seconds":86400,
"venue_allowlist":["licensed-venue-1"]
}]
}'
RWA 发行完整流程
- 注册发行人:
rwa_registerIssuer。 - 注册资产:
rwa_registerAsset。 - 上传法律、审计、估值、托管文档:
rwa_submitDocument。 - 启动资产验证:
rwa_startVerification。 - 添加所有权证明、法律意见、审计、监管检查:
rwa_addOwnershipProof、rwa_addLegalReview、rwa_addAudit、rwa_addRegulatoryCheck。 - 完成并批准验证:
rwa_completeVerification、rwa_approveVerification。 - 设置 KYC 和合规规则:
rwa_setKYCRecord、rwa_setComplianceRules。 - 创建发行治理提案:
rwa_createProposal。 - 投票通过并激活 token:
rwa_voteProposal、rwa_activateToken。 - 开始转让、分红、赎回和披露。
部署 RWA 合约:
cd /home/zhangxg/zoraiv5/contracts/hardhat
export ZORAI_RPC_URL=https://rpc.zorai.co
export PRIVATE_KEY=0xISSUER_PRIVATE_KEY
npx hardhat run scripts/deploy_rwa.ts --network zorai
6. 法务/公证存证系统
ZORAI Evidence/Notary Layer 是面向法务、公证、审计、企业合同和司法存证服务的链上证据登记层。系统原则是:链上只保存 hash、角色、时间、交易和事件证明;原始文件必须留在链下加密保全系统中。当前实现包括:
| 能力 | 实现位置 | 说明 |
|---|---|---|
| 通用存证合约 | contracts/zorai-token-templates/ZORAINotaryRegistry.sol | registerEvidence、appendEvidence、revokeEvidence、batchRegister、Merkle leaf 验证 |
| 法律角色 | ZORAINotaryRegistry.sol / pkg/rwa/evidence.go | NOTARY_ROLE、LAW_FIRM_ROLE、COURT_ROLE、ENTERPRISE_ROLE、AUDITOR_ROLE、OPERATOR_ROLE |
| 多签与 timelock | ZORAINotaryRegistry.sol | append、revoke、batchRegister 通过 approveOperation + 24h timelock 执行 |
| RWA Evidence RPC | pkg/rpc/rwa_rpc.go | rwa_registerLegalIdentity、rwa_registerEvidence、rwa_verifyEvidence、rwa_getEvidenceReport |
| 状态持久化 | pkg/rwa/state_snapshot.go | 法律身份、地址索引、证据记录进入 RWA snapshot |
| Explorer 验证门户 | cmd/explorer/evidence.go | /evidence、/evidence/verify、/api/evidence/verify、PDF/JSON 报告导出 |
| 链下保全 | pkg/rwa/evidence.go | IPFS CID、Arweave ID、S3/Object Lock URI、加密算法、访问日志 hash |
6.1 Evidence Registry 合约
核心合约 ZORAINotaryRegistry 基于 OpenZeppelin AccessControlEnumerable、Pausable 和 MerkleProof。存证流程:
- 用户或企业系统对原始文件计算 SHA-256/Keccak-256。
- 生成规范化 metadata JSON,再计算
metadataHash。 - 法律角色账户调用
registerEvidence(contentHash, metadataHash, caseHash, subjectHash, previousEvidenceId, evidenceType, uri)。 - 合约发出
EvidenceRegistered事件,事件包含evidenceId、contentHash、submitter、caseHash、subjectHash、uri。 - Explorer 或 API 使用交易 receipt、block hash、event log 生成法律验证报告。
高风险操作:
| 操作 | 控制 |
|---|---|
appendEvidence | 多签 signer 至少 2 个批准,24h timelock 后执行 |
revokeEvidence | 多签 signer 至少 2 个批准,24h timelock 后执行 |
batchRegister | 多签 signer 至少 2 个批准,24h timelock 后执行 |
pause/unpause | OPERATOR_ROLE 控制,生产部署建议转入多签 |
事件:
event EvidenceRegistered(
bytes32 indexed evidenceId,
bytes32 indexed contentHash,
address indexed submitter,
bytes32 metadataHash,
bytes32 caseHash,
bytes32 subjectHash,
bytes32 previousEvidenceId,
uint8 evidenceType,
string uri
);
event EvidenceRevoked(bytes32 indexed evidenceId, address indexed revoker, bytes32 reasonHash);
event EvidenceSuperseded(bytes32 indexed evidenceId, bytes32 indexed newEvidenceId, address indexed operator);
event EvidenceBatchRegistered(bytes32 indexed batchId, bytes32 indexed merkleRoot, address indexed submitter, bytes32 metadataHash, uint32 itemCount, string uri);
6.2 法律身份与角色体系
法律级身份在 RWA 状态层扩展为 LegalIdentity:
{
"subject_id": "notary-hk-001",
"address": "0x...",
"legal_name": "Example Notary Office",
"jurisdiction": "HK",
"registration_id": "NOTARY-001",
"roles": ["notary"],
"oidc_subject": "oidc|notary-hk-001",
"webauthn_user_id": "base64url-user-id",
"rbac_groups": ["notary-admins"]
}
生产模式下,面板层使用 OIDC/WebAuthn/RBAC 认证,Control Plane 审批后调用 RWA RPC 或链上合约。节点、Explorer、Ops Console 不保存私钥;所有写操作必须保留操作人、参数 hash、审批记录和链上交易 hash。
6.3 证据验证门户
Explorer 新增:
| 路径 | 用途 |
|---|---|
/evidence | 证据验证入口 |
/evidence/verify | 同 /evidence |
/api/evidence/verify?tx=0x...&hash=0x... | 根据交易 receipt 解析 EvidenceRegistered 并与文件 hash 比对 |
/api/evidence/report.json?tx=0x...&hash=0x... | 导出 JSON 法律验证报告 |
/api/evidence/report.pdf?tx=0x...&hash=0x... | 导出 PDF 法律验证报告 |
页面在浏览器本地通过 WebCrypto 计算文件 SHA-256,不上传原始文件。报告包含:
- 文件
contentHash evidenceId- 存证交易 hash
- 区块高度、区块 hash、区块时间
- submitter 地址
- 合约地址
- receipt status
- 原始 event log
- 生成时间
- 法律声明
6.4 RWA Evidence RPC
新增 RPC:
{
"jsonrpc": "2.0",
"id": 1,
"method": "rwa_registerEvidence",
"params": {
"content_hash": "0x...",
"metadata_hash": "0x...",
"case_hash": "0x...",
"subject_hash": "0x...",
"uri": "ipfs://bafy...",
"evidence_type": "contract",
"submitter": "0x...",
"tx_hash": "0x...",
"block_hash": "0x...",
"block_number": 123,
"offchain_storage": {
"ipfs_cid": "bafy...",
"object_lock_uri": "s3://zorai-evidence/legal/001",
"encrypted": true,
"encryption_alg": "AES-256-GCM",
"access_log_hash": "0x..."
}
}
}
验证:
{
"jsonrpc": "2.0",
"id": 2,
"method": "rwa_verifyEvidence",
"params": {
"evidence_id": "abc...",
"content_hash": "0x..."
}
}
报告:
{
"jsonrpc": "2.0",
"id": 3,
"method": "rwa_getEvidenceReport",
"params": {
"evidence_id": "abc...",
"chain_id": 70707,
"contract_address": "0x...",
"regulatory_export": true
}
}
6.5 链下文件保全体系
生产推荐:
- 原始文件不上链。
- 文件本地计算 hash,metadata 规范化后再 hash。
- 文件加密后写入 IPFS/Arweave 或 S3 Object Lock。
- 访问日志写入不可变审计日志,并把访问日志 hash 写入
OffchainStorageProof.AccessLogHash。 - 证据验证报告不包含原始文件内容,只包含可复算的 hash 和链上证明。
6.6 部署与测试
部署:
cd /home/zhangxg/zoraiv5
export ZORAI_RPC_URL=http://127.0.0.1:8545
export ZORAI_CHAIN_ID=70707
export PRIVATE_KEY=0x...
scripts/rwa/deploy_notary_registry.sh
测试:
cd contracts/hardhat
npm test -- --grep "ZORAINotaryRegistry|ZORAIRWAToken"
cd /home/zhangxg/zoraiv5
go test ./pkg/rwa ./pkg/rpc -run 'TestRWAEvidenceRPCRegisterVerifyReport|TestRWAEnterpriseRPCOnboardingAndPersistence' -count=1
go test -tags explorer ./cmd/explorer -run TestDoesNotExist -count=1
7. AI / GPU 计算市场
ZORAI Compute Market 把 AI/GPU 任务发布、Provider 接单、结果提交、证明验证、托管支付和争议处理做成链上/链下协同协议。
架构设计
Requester
|
| zor_publishTask / HTTP relay
v
TaskMarket pkg/taskmarket
|
| task assigned / websocket
v
Compute Relay pkg/computerelay
|
| provider register / heartbeat / result
v
GPU Agent / Provider
|
| proof + result CID + signature
v
TaskMarket settle / dispute / reward
任务结构定义在 pkg/taskmarket/types.go:52,包含 requester、modelCID、inputCID、outputCID、budget、deposit、deadline、assignee、resultHash、proofHash、redundancy、audit、escrowToken 等字段。Provider 节点信息定义在 pkg/taskmarket/types.go:123。
TaskMarket
TaskMarket 维护 task、node、event、dispute、escrow、attestation、ledger 和持久化 store,见 pkg/taskmarket/market.go:17。默认配置包括最小任务押金、Provider stake、任务超时、挑战窗口、slashing bps、proof signature requirement,见 pkg/taskmarket/market.go:57。
核心状态机:
| 操作 | 代码位置 | 说明 |
|---|---|---|
| PublishTask | pkg/taskmarket/market.go:158 | 锁定预算并创建任务 |
| AcceptTask | pkg/taskmarket/market.go:235 | Provider 接单 |
| SubmitProof | pkg/taskmarket/market.go:328 | 提交结果和计算证明 |
| SettleTask | pkg/taskmarket/market.go:387 | 挑战期后结算 |
| Dispute | pkg/taskmarket/market.go:423 | 发起争议并可能罚没 |
| RegisterNode | pkg/taskmarket/market.go:520 | Provider 注册 |
Compute Relay
Relay HTTP 路由见 pkg/computerelay/relay.go:264:
| 路径 | 方法 | 说明 |
|---|---|---|
/health | GET | 健康检查 |
/v1/provider/connect | WebSocket | Provider 连接 |
/v1/providers | GET | Provider 列表 |
/v1/tasks | POST/GET | 创建或查询任务 |
/v1/tasks/{task_id} | GET | 查询任务详情 |
/v1/tasks/{task_id}/dispute | POST | 发起争议 |
/v1/chat/completions | POST | OpenAI 兼容风格的计算入口 |
Mutation 签名域为 ZORAI_COMPUTE_RPC_V1,验证逻辑见 pkg/rpc/compute_rpc.go:115。Relay 协议的签名 hash 定义在 pkg/computerelay/protocol.go:104。
GPU Agent 注册示例
curl -s https://rpc.zorai.co \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"id":1,
"method":"zor_registerNode",
"params":[{
"node_id":"gpu-provider-001",
"owner":"0xProviderAddress",
"endpoint":"wss://provider.example.com/v1/provider/connect",
"gpus":[{"type":"A100","vram_gb":80,"count":4}],
"stake":"100000000000000000",
"nonce":1,
"timestamp":1778112000,
"signature":"0xProviderSignature"
}]
}'
发布 AI 任务示例
curl -s https://rpc.zorai.co \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"id":2,
"method":"zor_publishTask",
"params":[{
"requester":"0xRequesterAddress",
"task_type":"inference",
"model_cid":"ipfs://bafy.../llm-model",
"input_cid":"ipfs://bafy.../prompt.json",
"config":{
"gpu_type":"A100",
"min_vram_gb":40,
"max_duration_sec":600,
"priority":5,
"redundancy":1,
"audit_sample_bps":500
},
"budget":"1000000000000000000",
"deposit":"100000000000000000",
"deadline":1778115600,
"nonce":2,
"timestamp":1778112000,
"signature":"0xRequesterSignature"
}]
}'
官方 Compute Escrow 合约
合约模板位于 contracts/zorai-token-templates/ZORAIComputeEscrow.sol:10。状态包括 Open、Assigned、Submitted、Disputed、Settled、Refunded、Slashed。主要方法包括 publishNative、publishToken、accept、submitResult、dispute、settle、refundExpired 和 resolveDispute,见 contracts/zorai-token-templates/ZORAIComputeEscrow.sol:100 到 contracts/zorai-token-templates/ZORAIComputeEscrow.sol:183。
部署:
cd /home/zhangxg/zoraiv5/contracts/hardhat
export ZORAI_RPC_URL=https://rpc.zorai.co
export PRIVATE_KEY=0xDEPLOYER_PRIVATE_KEY
npx hardhat run scripts/deploy_compute_escrow.ts --network zorai
8. 跨链功能
ZORAI 跨链模块包括两套互补能力:
pkg/crosschain:跨链消息、证明、链状态、finality binding、message digest 和 replay protection。pkg/bridge+pkg/evm/bridge_executor.go:跨链桥执行、Relayer、Wrapped Asset mint/burn/unlock、outbound receipt。
Solana / Ethereum 桥设计
跨链消息定义在 pkg/crosschain/types.go:28,包含 source chain、target chain、sender、receiver、token、amount、nonce、payload、proof、timestamp、status。Proof 同时支持 Ethereum transaction/receipt MPT proof、finalized checkpoint、Solana slot、program ID、guardian signatures 等字段,见 pkg/crosschain/types.go:49。
BridgeManager 注册 Ethereum 和 Solana verifier,见 pkg/crosschain/manager.go:172。消息验证流程在 pkg/crosschain/manager.go:261:
- 校验消息字段。
- 检查 chain state。
- 检查 proof finality binding。
- 调用对应链 verifier。
- 使用 message digest 防 replay。
Digest 绑定 sourceChainID、sourceTxHash、nonce、targetChainID、targetContract、token、amount、receiver、payload,见 pkg/crosschain/manager.go:554。
Wrapped Asset 机制
Wrapped Asset 执行器位于 pkg/evm/bridge_executor.go:35。Mint 时会:
- 校验消息和 wrapped asset registry。
- 检查 message hash 未处理。
- 更新 receiver balance 和 totalSupply。
- 生成 Transfer log。
- 标记消息已处理。
Wrapped asset registry 元数据包括 source chain、source token、wrapped token、symbol、decimals、maxSupply、dailyMintLimit、active、paused、blacklist 等,见 pkg/evm/wrapped_registry.go:292。
双向跨链流程
Ethereum/Solana 到 ZORAI:
用户在源链 lock/deposit
|
Relayer 读取源链 proof
|
bridge_deposit / bridge_submitMessage
|
BridgeManager 验证 proof + finality
|
BridgeExecutor MintWrapped
|
用户在 ZORAI 获得 wrapped asset
ZORAI 到外链:
用户在 ZORAI burn wrapped asset
|
Bridge 生成 outbound receipt
|
验证人签名形成跨链收据证明
|
Relayer 提交到目标链
|
目标链 unlock/release 原资产
Bridge RPC 入口见 pkg/rpc/bridge_admin_rpc.go:28。
Bridge RPC 示例
注册 wrapped asset:
curl -s https://rpc.zorai.co \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"id":1,
"method":"bridge_registerWrappedAsset",
"params":[{
"source_chain":"ethereum",
"source_token":"0xdAC17F958D2ee523a2206206994597C13D831ec7",
"wrapped_token":"0xWrappedUSDTOnZorai",
"symbol":"zUSDT",
"decimals":6,
"max_supply":"1000000000000",
"daily_mint_limit":"10000000000"
}]
}'
提交 deposit:
curl -s https://rpc.zorai.co \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"id":2,
"method":"bridge_deposit",
"params":[{
"source_chain_id":"ethereum-1",
"source_tx_hash":"0xSourceTxHash",
"source_sender":"0xEthereumSender",
"target_receiver":"0xZoraiReceiver",
"source_token":"0xdAC17F958D2ee523a2206206994597C13D831ec7",
"amount":"1000000",
"nonce":12345,
"proof":{"kind":"receipt_mpt","data":"0x..."}
}]
}'
9. 稳定币 ZUSD / zUSDT
ZORAI 稳定币支持两类路径:
- 原生发行稳定币:使用
ZORAIStablecoinV2合约模板部署 ZUSD 等资产。 - 跨链 wrapped 稳定币:使用 Bridge + Wrapped Asset 机制发行 zUSDT、zUSDC 等映射资产。
ZORAIStablecoinV2 生产特性
模板位置:contracts/zorai-token-templates/ZORAIStablecoinV2.sol:1。关键特性:
| 功能 | 代码位置 | 说明 |
|---|---|---|
| 6 位 decimals | contracts/zorai-token-templates/ZORAIStablecoinV2.sol:44 | 常见稳定币精度 |
| MINTER/BURNER | contracts/zorai-token-templates/ZORAIStablecoinV2.sol:24 | 发行与销毁权限 |
| PAUSER | contracts/zorai-token-templates/ZORAIStablecoinV2.sol:26 | 暂停转账 |
| BLACKLISTER | contracts/zorai-token-templates/ZORAIStablecoinV2.sol:27 | 黑名单 |
| FREEZER | contracts/zorai-token-templates/ZORAIStablecoinV2.sol:28 | 地址冻结 |
| UPGRADER | contracts/zorai-token-templates/ZORAIStablecoinV2.sol:29 | UUPS 升级 |
| 多签操作 | contracts/zorai-token-templates/ZORAIStablecoinV2.sol:47 | OperationRecord + signer threshold |
| 操作延迟 | contracts/zorai-token-templates/ZORAIStablecoinV2.sol:45 | 最大操作延迟保护 |
部署 ZUSD
部署脚本位于 contracts/hardhat/scripts/deploy_zusd.ts:28。脚本使用 ZORAI_RPC_URL、PRIVATE_KEY、ZUSD_NAME、ZUSD_SYMBOL、ZUSD_ADMIN、ZUSD_SIGNERS、ZUSD_THRESHOLD、ZUSD_DELAY 等环境变量。
cd /home/zhangxg/zoraiv5/contracts/hardhat
npm install
npx hardhat compile
export ZORAI_RPC_URL=https://rpc.zorai.co
export PRIVATE_KEY=0xDEPLOYER_PRIVATE_KEY
export ZUSD_NAME="ZORAI USD"
export ZUSD_SYMBOL="ZUSD"
export ZUSD_ADMIN=0xAdminAddress
export ZUSD_SIGNERS=0xSigner1,0xSigner2,0xSigner3
export ZUSD_THRESHOLD=2
export ZUSD_DELAY=3600
npx hardhat run scripts/deploy_zusd.ts --network zorai
mint / burn / pause / blacklist 流程
生产流程建议:
- 多签 signer 对操作 hash 签名。
- 调用
approveOperation累计批准,见contracts/zorai-token-templates/ZORAIStablecoinV2.sol:178。 - 达到 threshold 且满足 delay 后执行
mint、burnFrom、pause、unpause、setBlacklisted、setFrozen。 - 操作完成后记录链上事件和链下审批工单。
ethers.js mint 示例:
import { ethers } from "ethers";
import StablecoinAbi from "./artifacts/contracts/ZORAIStablecoinV2.sol/ZORAIStablecoinV2.json";
const provider = new ethers.JsonRpcProvider(process.env.ZORAI_RPC_URL);
const signer = new ethers.Wallet(process.env.PRIVATE_KEY!, provider);
const zusd = new ethers.Contract(process.env.ZUSD_ADDRESS!, StablecoinAbi.abi, signer);
const to = "0xRecipient";
const amount = 1_000_000n; // 1 ZUSD, decimals = 6
const tx = await zusd.mint(to, amount, {
maxFeePerGas: ethers.parseUnits("2", "gwei"),
maxPriorityFeePerGas: ethers.parseUnits("1", "gwei")
});
await tx.wait();
10. RPC 接口大全
RPC 方法分发入口在 pkg/rpc/web3_full.go:598。Bridge 方法入口在 pkg/rpc/bridge_admin_rpc.go:28。RWA 方法入口在 pkg/rpc/rwa_rpc.go:24。Compute 方法入口在 pkg/rpc/compute_rpc.go:51。
Ethereum / Web3 / Net 方法
| 方法 | 说明 |
|---|---|
web3_clientVersion | 客户端版本 |
net_version | 网络版本 |
net_peerCount | peer 数量 |
net_peers | peer 列表 |
net_addPeer | 添加 peer |
net_peerScores | peer score |
net_metrics | 网络指标 |
net_listening | 是否监听 |
eth_blockNumber | 当前块高 |
eth_chainId | chain id |
eth_getBalance | 账户余额 |
eth_getTransactionCount | nonce |
eth_getBlockByNumber | 按高度查块 |
eth_getBlockByHash | 按 hash 查块 |
eth_getTransactionByHash | 查交易 |
eth_getTransactionReceipt | 查 receipt |
eth_getTransactionsByAddress | 查地址交易 |
eth_getLogs | 查日志 |
eth_call | 只读调用 |
eth_estimateGas | gas 估算 |
eth_gasPrice | gas price |
eth_maxPriorityFeePerGas | priority fee |
eth_feeHistory | fee history |
eth_sendRawTransaction | 发送 raw tx |
txpool_status | txpool 状态 |
txpool_content | txpool 内容 |
eth_syncing | 同步状态 |
eth_coinbase | coinbase |
eth_mining | mining 状态 |
eth_hashrate | hashrate |
eth_getCode | 合约代码 |
eth_getStorageAt | storage |
基础示例:
curl -s https://rpc.zorai.co \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'
预期 chain id:
{"jsonrpc":"2.0","id":1,"result":"0x11433"}
ZORAI 扩展方法
| 方法 | 说明 |
|---|---|
zor_livenessMetrics | 共识活性指标 |
zor_getStats | 链统计 |
zor_getValidators | 验证人列表 |
zor_getValidator | 验证人详情 |
zor_getAccountCount | 账户数 |
zor_getContractCount | 合约数 |
zor_getTotalStaked | 总质押 |
zor_getBurnedFees | burned fees |
zor_getCommunityPool | community pool |
zor_getGPUPower | GPU power |
zor_getAvgGasPrice | 平均 gas price |
zor_pause | 暂停节点业务 |
zor_unpause | 恢复节点业务 |
zor_pauseStatus | 暂停状态 |
查询 liveness:
curl -s https://rpc.zorai.co \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"zor_livenessMetrics","params":[]}'
Validator 方法
| 方法 | 说明 |
|---|---|
validator_getInfo | 本地 validator 信息 |
validator_getStatus | validator 状态 |
validator_getPendingRewards | 待领取奖励 |
validator_join | 加入验证人集合 |
validator_leave | 离开验证人集合 |
validator_vote | 治理/验证人投票 |
validator_updateStake | 更新质押 |
validator_slash | 惩罚 |
validator_getUptime | uptime |
Bridge 方法
| 方法 | 说明 |
|---|---|
bridge_status | bridge 状态 |
bridge_deposit | 源链 deposit 进入 ZORAI |
bridge_burn | ZORAI burn 准备出链 |
bridge_outboundReceipt | 生成 outbound receipt |
bridge_getOutboundReceipt | 查询 outbound receipt |
bridge_listOutboundReceipts | 列出 outbound receipts |
bridge_registerChain | 注册链 |
bridge_updateCheckpoint | 更新 checkpoint |
bridge_registerRelayer | 注册 relayer |
bridge_submitMessage | 提交跨链消息 |
bridge_addRelayerSignature | 添加 relayer 签名 |
bridge_processMessage | 处理消息 |
bridge_getMessage | 查询消息 |
bridge_registerWrappedAsset | 注册 wrapped asset |
bridge_listWrappedAssets | 列出 wrapped asset |
bridge_updateWrappedAssetControls | 更新控制参数 |
bridge_burnWrapped | burn wrapped asset |
RWA 方法
RWA 方法很多,建议按业务域使用:
| 域 | 方法 |
|---|---|
| 资产 | rwa_getAsset, rwa_listAssets, rwa_getAssetStats, rwa_registerAsset |
| 发行人 | rwa_registerIssuer, rwa_listIssuers |
| 文档 | rwa_submitDocument, rwa_revokeDocument, rwa_getDocuments |
| Token | rwa_getToken, rwa_getAllTokens, rwa_getTokenInfo, rwa_getBalance, rwa_getHolders |
| 转让 | rwa_transfer, rwa_validateTransfer, rwa_preTradeCheck, rwa_setTokenRole |
| 治理发行 | rwa_createProposal, rwa_voteProposal, rwa_activateToken, rwa_getProposal, rwa_getPendingProposals |
| 验证 | rwa_startVerification, rwa_addOwnershipProof, rwa_addLegalReview, rwa_addAudit, rwa_completeVerification, rwa_approveVerification |
| 估值 | rwa_submitValuation, rwa_verifyValuation, rwa_getCurrentValuation, rwa_getValuationHistory |
| 合规 | rwa_setKYCRecord, rwa_getKYCRecord, rwa_isVerified, rwa_freezeAddress, rwa_unfreezeAddress, rwa_setComplianceRules |
| 基金/监管 | rwa_registerSPV, rwa_createFund, rwa_addTranche, rwa_updateNAV, rwa_submitAttestation, rwa_generateRegulatoryReport |
| 分红/赎回 | rwa_createDistribution, rwa_claimDividend, rwa_requestRedemption, rwa_approveRedemption, rwa_executeRedemption |
| 披露/统计 | rwa_submitDisclosure, rwa_getAssetDisclosures, rwa_getStats |
Compute 方法
| 方法 | 说明 |
|---|---|
zor_publishTask | 发布计算任务 |
zor_acceptTask | Provider 接单 |
zor_submitProof | 提交结果证明 |
zor_getTaskStatus | 查询任务状态 |
zor_getNodeEndpoint | 查询 Provider endpoint |
zor_claimReward | 领取奖励 |
zor_disputeTask | 争议任务 |
zor_registerNode | 注册 Provider |
zor_updateNodeStatus | 更新 Provider 状态 |
zor_submitProviderAttestation | 提交 Provider 证明 |
zor_getProviderAttestation | 查询 Provider 证明 |
zor_getOpenTasks | 查询开放任务 |
zor_getTasksByRequester | 按 requester 查询 |
zor_getTasksByNode | 按 node 查询 |
zor_getRecentEvents | 最近事件 |
zor_getMarketStats | 市场统计 |
zor_getDispute | 查询争议 |
zor_getTaskEscrow | 查询 escrow |
11. 开发者指南
快速启动节点
构建节点:
cd /home/zhangxg/zoraiv5
go build -o build/xihud ./cmd/xihud
使用配置启动:
./build/xihud \
--config configs/config.toml \
--data-dir /data/zorai
关键配置默认值见 configs/config.toml:
[genesis]
chain_id = 70707
[consensus]
block_time = "400ms"
[rpc]
port = 8545
compute_port = 8646
[network]
p2p_port = 30303
network_id = "zorai-mainnet"
部署合约示例
最小 ethers.js 部署流程:
import { ethers } from "ethers";
import fs from "node:fs";
const provider = new ethers.JsonRpcProvider("https://rpc.zorai.co", {
chainId: 70707,
name: "zorai"
});
const wallet = new ethers.Wallet(process.env.PRIVATE_KEY!, provider);
const artifact = JSON.parse(fs.readFileSync("./artifacts/contracts/MyToken.sol/MyToken.json", "utf8"));
const factory = new ethers.ContractFactory(artifact.abi, artifact.bytecode, wallet);
const contract = await factory.deploy("My Token", "MYT", wallet.address, ethers.parseEther("1000000"), {
maxFeePerGas: ethers.parseUnits("2", "gwei"),
maxPriorityFeePerGas: ethers.parseUnits("1", "gwei")
});
await contract.waitForDeployment();
console.log(await contract.getAddress());
发布 AI 任务
开发者可以直接调用 Compute RPC,也可以走 Compute Relay。链上任务字段结构参考 pkg/taskmarket/types.go:52。
curl -s https://rpc.zorai.co \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"id":1,
"method":"zor_getOpenTasks",
"params":[{"limit":20}]
}'
RWA 发行示例
curl -s https://rpc.zorai.co \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"id":1,
"method":"rwa_registerAsset",
"params":[{
"asset_id":"rwa-bond-2026-001",
"asset_type":"bond",
"name":"ZORAI Bond 2026",
"issuer":"issuer-001",
"jurisdiction":"HK",
"currency":"USD",
"total_value":"100000000",
"metadata_uri":"ipfs://bafy.../asset.json"
}]
}'
Bridge 使用示例
curl -s https://rpc.zorai.co \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"id":1,
"method":"bridge_status",
"params":[]
}'
12. 技术参数与配置
链参数
| 参数 | 值 | 代码位置 |
|---|---|---|
| Chain ID | 70707 | pkg/types/chain.go:3 |
| Chain ID Hex | 0x11433 | pkg/types/chain.go:4 |
| Network Name | zorai-mainnet | pkg/types/chain.go:5 |
| 默认区块时间 | 400ms | configs/config.toml:21 |
| 默认 block gas limit | 30000000 | pkg/evm/evm.go:797 |
| 默认 base fee | 1 gwei | pkg/evm/evm.go:793 |
| target gas ratio | 50% | pkg/evm/evm.go:799 |
| base fee denominator | 8 | pkg/evm/evm.go:798 |
P2P 配置
| 参数 | 值 | 代码位置 |
|---|---|---|
| P2P port | 30303 | configs/config.toml:12 |
| Protocol ID | /zorai/1.0.0 | pkg/network/network.go:34 |
| max peers | 50 | configs/config.toml:14 |
| max message size | 10MB | pkg/network/network.go:43 |
| max decompressed size | 32MB | pkg/network/network.go:44 |
| broadcast concurrency | 16 | pkg/network/network.go:45 |
RPC 配置
| 参数 | 值 | 代码位置 |
|---|---|---|
| JSON-RPC port | 8545 | configs/config.toml:27 |
| Compute RPC port | 8646 | configs/config.toml:28 |
| rate limit | 100 | configs/config.toml:32 |
| metrics port | 9200 | configs/config.toml:77 |
当前公网 8 节点拓扑
当前生产测试目标是 7 个 validator + 1 个 RPC 节点。节点清单保存在 scripts/nodes.conf:
| 节点 | 角色 | 代码位置 |
|---|---|---|
val-hk-1 | validator / bootnode | scripts/nodes.conf:11 |
val-hk-2 | validator | scripts/nodes.conf:20 |
val-hk-3 | validator | scripts/nodes.conf:29 |
val-hk-4 | validator | scripts/nodes.conf:38 |
val-zj-1 | validator | scripts/nodes.conf:47 |
rpc-hk-1 | rpc | scripts/nodes.conf:56 |
rpc-hz-1 | validator | scripts/nodes.conf:64 |
rpc-jp-2 | validator | scripts/nodes.conf:73 |
推荐硬件规格
| 节点类型 | 推荐配置 |
|---|---|
| Validator | 8 vCPU、32GB RAM、1TB NVMe、1Gbps 网络、固定公网 IP |
| RPC | 8 到 16 vCPU、32GB 到 64GB RAM、1TB NVMe、充足带宽 |
| Archive/Indexer | 16 vCPU、64GB RAM、2TB+ NVMe、独立 LevelDB/索引盘 |
| GPU Provider | 独立于 validator,按任务市场需要配置 A10/A100/H100 等 GPU |
13. 部署与运维
8 节点部署指南
公网节点部署应使用 scripts/nodes.conf 作为节点清单来源。每个节点需要:
- 相同的 genesis、chain ID、validator set。
- 唯一 node key 和 validator signing key。
- 正确的 external IP、P2P port、RPC port。
- systemd 管理
xihud进程。 - 日志进入 journal,监控脚本可远程抓取。
本地或测试环境可使用稳定性脚本生成 8 节点环境:
cd /home/zhangxg/zoraiv5
scripts/stability-test/deploy_8nodes.sh --clean
脚本默认参数位于 scripts/stability-test/deploy_8nodes.sh:4,包括 chain id、network id、block time、端口范围、初始余额和 validator stake。
24h / 720h 稳定性测试
720 小时生产监控脚本位于 scripts/stability-test/run_720h_public_monitor.sh:118,默认采样间隔为 1800 秒,即 30 分钟。Python monitor 会采样 eth_blockNumber、net_peerCount、common height/root、交易测试状态,并把生产失败条件写入 summary,见 scripts/stability-test/zorai_720h_monitor.py:139、scripts/stability-test/zorai_720h_monitor.py:200。
启动:
cd /home/zhangxg/zoraiv5
DURATION_HOURS=720 \
INTERVAL_SECONDS=1800 \
REQUIRE_PEER_COUNT=7 \
scripts/stability-test/run_720h_public_monitor.sh
90 秒级 liveness watchdog 位于 scripts/stability-test/run_liveness_watchdog.sh:4。它会在连续多次高度不增长、peer 过低、root 分叉或节点不可用时自动生成 incident,并采集 8 节点日志摘要。故障分类见 scripts/stability-test/zorai_liveness_watchdog.py:231,远程日志采集见 scripts/stability-test/zorai_liveness_watchdog.py:281。
启动:
cd /home/zhangxg/zoraiv5
INTERVAL_SECONDS=90 \
STALL_THRESHOLD=3 \
REQUIRE_PEER_COUNT=7 \
scripts/stability-test/run_liveness_watchdog.sh
连续交易测试
连续交易 supervisor 默认已经调整为每日 80000 笔,每 50 笔新增一个地址,见 scripts/stability-test/run_continuous_tx_supervised.sh:15、scripts/stability-test/run_continuous_tx_supervised.sh:17。地址池新增逻辑见 scripts/stability-test/continuous_tx.py:431。
启动:
cd /home/zhangxg/zoraiv5
DAILY_TARGET_TX=80000 \
ADD_ADDRESS_EVERY=50 \
scripts/stability-test/run_continuous_tx_supervised.sh
监控、日志、备份
建议生产监控指标:
| 指标 | RPC / 来源 |
|---|---|
| 当前块高 | eth_blockNumber |
| peer 数 | net_peerCount |
| liveness | zor_livenessMetrics |
| txpool | txpool_status |
| 同步状态 | eth_syncing |
| systemd 日志 | journalctl -u xihud -n 300 |
| watchdog incident | scripts/stability-test/logs/alerts/*.jsonl |
备份建议:
sudo systemctl stop xihud
sudo tar -czf /backup/zorai-data-$(date +%F).tar.gz /data/zorai
sudo systemctl start xihud
LevelDB、WAL、BFT state、validator keys 和 node key 都属于关键恢复资产。不要在 validator 间复用私钥。
常见问题排查
| 问题 | 检查命令 | 可能原因 |
|---|---|---|
| 停块 | curl -s ... eth_blockNumber 连续比较 | proposer 未出块、BFT round 分散、网络消息阻塞 |
| peer 过低 | net_peerCount、journalctl | bootnode 不通、防火墙、external addr 错误 |
| state diverged | eth_syncing | 本地执行结果与 finalized block 不一致 |
| tx 不上链 | txpool_content、receipt | nonce 错、fee cap 低、余额不足 |
| RPC 落后 | eth_blockNumber 对比 validator | sync 落后、finalized block 接收失败 |
控制平面用于未来新节点加入时的网络拓扑分配、配置下发、身份漂移检查和全节点状态观测。服务入口见 cmd/controlplane/main.go:13,配置要求见 internal/controlplane/config/config.go:80,节点客户端注册、心跳、配置获取见 pkg/controlplane/client.go:223、pkg/controlplane/client.go:231、pkg/controlplane/client.go:239。cmd/xihud/controlplane_agent.go:272 支持 observe mode,cmd/xihud/controlplane_agent.go:297 支持 managed mode。生产条件中应把控制平面恢复为核心要素之一,而不是只依赖人工 SSH 巡检。
14. 路线图与当前状态
已完成功能
| 功能 | 状态 | 证据 |
|---|---|---|
| Chain ID / Mainnet 参数 | 已实现 | pkg/types/chain.go:3 |
| 区块结构和校验 | 已实现 | pkg/types/block.go:21、pkg/types/block.go:187 |
| Legacy / EIP-1559 交易 | 已实现 | pkg/types/transaction.go:17 |
| MPT 状态管理 | 已实现 | pkg/state/mpt_state.go:43 |
| LevelDB + WAL 存储 | 已实现 | pkg/blockchain/store.go:34 |
| London EVM | 已实现 | pkg/evm/evm.go:78 |
| EIP-1559 gas | 已实现 | pkg/evm/evm.go:495 |
| Mempool | 已实现 | pkg/mempool/mempool.go:91 |
| PoS validator | 已实现 | pkg/consensus/pos_complete.go:37 |
| BFT QC / Finality | 已实现 | pkg/consensus/bft.go:76 |
| BFT liveness recovery | 已实现,需要长稳验证 | pkg/consensus/bft.go:839 |
| libp2p 网络 | 已实现 | pkg/network/network.go:107 |
| Ethereum JSON-RPC | 已实现 | pkg/rpc/web3_full.go:598 |
| WebSocket 订阅 | 已实现 | pkg/websocket/websocket.go:22 |
| Explorer / Token Indexer | 已实现 | cmd/explorer/main.go:235、cmd/explorer/token_indexer.go:23 |
| RWA RPC | 已实现 | pkg/rpc/rwa_rpc.go:24 |
| ERC-3643 模板和预编译 | 已实现 | contracts/zorai-token-templates/ZORAIRWAToken.sol:260、pkg/evm/erc3643_precompiled.go:17 |
| Compute Market | 已实现 | pkg/taskmarket/market.go:17 |
| Compute Relay | 已实现 | pkg/computerelay/relay.go:264 |
| Bridge / Wrapped Asset | 已实现 | pkg/bridge/cross_chain.go:174、pkg/evm/bridge_executor.go:35 |
| Stablecoin V2 | 已实现 | contracts/zorai-token-templates/ZORAIStablecoinV2.sol:1 |
| 720h monitor | 已实现 | scripts/stability-test/run_720h_public_monitor.sh:118 |
| 90s liveness watchdog | 已实现 | scripts/stability-test/run_liveness_watchdog.sh:4 |
| 控制平面基础 | 已实现,需要恢复生产使用 | cmd/controlplane/main.go:13 |
即将上线或建议优先补强
- 720 小时无停块生产证据:7 validator + 1 RPC 公网拓扑,结合 30 分钟 monitor 和 90 秒 watchdog。
- 控制平面恢复生产作用:节点注册、拓扑分配、配置下发、状态可视化、identity drift 拒绝策略。
- BFT 形式化测试与故障注入:覆盖网络限流、round 分散、节点重启、finalized 水位落后、Byzantine double vote。
- Bridge 外部审计:跨链 proof、relayer quorum、wrapped asset mint/burn replay protection 需要外部审计。
- RWA 合规审计:KYC、隐私证明、监管报告、强制转让和赎回流程需要法务与安全审计。
- RPC 兼容性测试:用 Hardhat、Foundry、ethers、web3.py、MetaMask 做完整兼容矩阵。
- Explorer 文档发布:将本文档接入
https://explorer.zorai.co/docs,替换当前简版页面。 - 性能压测:持续交易目标
80000/day是生产观察基础,还应增加峰值 TPS、合约调用、事件日志、RPC 查询压测。
附录 A:常用命令速查
# 构建节点
go build -o build/xihud ./cmd/xihud
# 全仓测试
go test ./...
# 单独测试共识与网络
go test ./pkg/consensus ./pkg/network
# 查询链 ID
curl -s https://rpc.zorai.co -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'
# 查询块高
curl -s https://rpc.zorai.co -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
# 查询 peer
curl -s https://rpc.zorai.co -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"net_peerCount","params":[]}'
# 启动 720h monitor
DURATION_HOURS=720 INTERVAL_SECONDS=1800 REQUIRE_PEER_COUNT=7 \
scripts/stability-test/run_720h_public_monitor.sh
# 启动 90s watchdog
INTERVAL_SECONDS=90 STALL_THRESHOLD=3 REQUIRE_PEER_COUNT=7 \
scripts/stability-test/run_liveness_watchdog.sh
# 启动连续交易
DAILY_TARGET_TX=80000 ADD_ADDRESS_EVERY=50 \
scripts/stability-test/run_continuous_tx_supervised.sh
附录 B:发布到 Explorer Docs 的建议
当前 Explorer 文档路由位于 cmd/explorer/main.go:235,/docs 页面由 docsEnPage 生成,处理函数见 cmd/explorer/main.go:1330。建议把本文档作为独立 Markdown 内容源,由 Explorer 在启动时读取并渲染,而不是继续把长文档硬编码在 Go handler 中。这样后续文档可以单独维护、审阅和版本化。
推荐落地方式:
- 将本文档保留在
docs/ZORAI_PUBLIC_CHAIN_TECHNICAL_DOCS_V1.md。 - 在 Explorer 中增加 Markdown 渲染 helper。
/docs默认读取该 Markdown 文件。- 保留
/docs/zh、/docs/whitepaper等专题页面入口。 - 在发布流程中把
docs/目录同步到 Explorer 节点。