公有链-基于Go语言研发
AmosChain 公链平台
产品概述
AmosChain 是网渡科技自主研发的 PoW(工作量证明)公链实现,采用 CPU 挖矿机制,具备完整的区块链核心功能与去中心化网络能力。AmosChain 专注于为企业与开发者提供轻量级、可接入、易扩展的区块链基础设施,支持私有链、联盟链与公有链多种部署模式。
网渡科技 AmosChain 在公链底层技术领域持续深耕,拥有多项共识算法、P2P网络与智能合约相关的技术专利,致力于构建开放、安全、高效的去中心化基础设施网络。
核心特性
区块链存储:基于 bbolt 的持久化存储引擎,支持高效键值读写与事务操作
CPU 挖矿:多线程挖矿引擎,支持动态难度调整,降低参与门槛
UTXO 模型:未花费交易输出管理,支持并行交易验证与隐私保护
P2P 网络:去中心化节点通信与区块同步,支持种子节点发现与白名单机制
交易系统:ECDSA 签名验证,双重支付防护,支持自定义手续费率
密钥管理:AES-256-GCM 加密存储,支持导入导出与备份恢复
Web UI:可视化节点管理与区块浏览器,提供 RESTful API
系统架构
整体架构
┌─────────────────────────────────────────────────────────────┐
│ AmosChain Node │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ Web UI │ │ Miner │ │ Peer Manager │ │
│ │ (HTTP/8080)│ │ (CPU PoW) │ │ (P2P/TCP/10000) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────────┬──────────┘ │
│ │ │ │ │
│ └────────────────┼─────────────────────┘ │
│ │ │
│ ┌───────────────────────┴───────────────────────────────┐ │
│ │ Core Layer │ │
│ │ ┌───────────┐ ┌───────────┐ ┌─────────────────┐ │ │
│ │ │ Chain │ │ UTXO │ │ Mempool │ │ │
│ │ │ Store │ │ Set │ │ (Transaction) │ │ │
│ │ └─────┬─────┘ └─────┬─────┘ └────────┬────────┘ │ │
│ │ │ │ │ │ │
│ │ └──────────────┴─────────────────┘ │ │
│ │ │ │ │
│ │ ┌──────────┴──────────┐ │ │
│ │ │ bbolt Database │ │ │
│ │ │ (blocks/utxo/stats)│ │ │
│ │ └─────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
核心模块说明
模块 | 源文件 | 职责 |
|---|---|---|
主程序 |
| CLI入口、命令分发、配置加载 |
数据结构 |
| Block、Transaction、UTXOSet 等核心类型定义 |
区块链 |
| 区块存储、链状态管理、导入导出 |
共识引擎 |
| 区块验证、难度计算、共识规则 |
挖矿引擎 |
| PoW挖矿、工作线程池、任务调度 |
P2P网络 |
| 节点发现、消息广播、连接管理 |
UTXO管理 |
| 未花费输出索引、余额查询、状态更新 |
交易系统 |
| 交易创建、签名、验证、脚本执行 |
密钥库 |
| 密钥生成、加密存储、导入导出 |
交易池 |
| 待确认交易缓存、优先级排序 |
Web服务 |
| HTTP服务、RESTful API、前端资源 |
日志系统 |
| 结构化日志、多级别输出、JSON格式支持 |
技术架构
存储层
AmosChain 基于 bbolt(Go 语言原生嵌入式键值数据库)实现持久化存储,具备以下特性:
桶(Bucket)结构:
blocks桶:存储完整区块数据,键为区块哈希,值为序列化区块utxo桶:存储未花费输出索引,键为交易ID+输出索引,值为UTXO条目stats桶:存储链状态(最新区块高度、总工作量、网络哈希率等)metadata桶:存储链元数据(创世块哈希、协议版本等)
事务支持:读写事务与只读事务分离,支持原子性批量更新
性能优化:支持内存映射文件,数据访问延迟低于微秒级
网络层
P2P 网络层基于 TCP 协议实现,采用 Kademlia 路由表 与 gossip 广播 相结合的混合通信模型:
节点发现机制:
启动时连接配置的种子节点(硬编码种子 + 配置种子)
通过
getpeers消息获取邻居节点列表定期向已知节点发送
ping/pong探活支持 DNS 种子(通过 SRV 记录解析)
消息协议:
消息类型 | 用途 |
|---|---|
| 版本协商与握手 |
| 握手确认 |
| 地址广播 |
| 请求邻居地址 |
| 库存公告(新区块/交易通知) |
| 请求完整数据 |
| 区块数据传输 |
| 交易数据传输 |
| 批量请求区块 |
| 请求交易池数据 |
节点发现流程:
启动时连接种子节点(硬编码种子 + DNS 种子 + 配置种子)
通过
getpeers获取其他节点列表自动建立 P2P 连接(最多 125 个出站连接)
区块和交易通过 gossip 广播同步
安全机制:
白名单模式:仅允许指定 IP/CIDR 范围连接
黑名单模式:屏蔽恶意 IP 地址
连接限速:防止带宽滥用
消息大小限制:防止 DoS 攻击
共识机制
PoW 共识算法采用 SHA-256d 双重哈希,目标难度动态调整:
难度调整算法:
调整周期:每 2016 个区块(约 2 周)
调整公式:
新难度 = 旧难度 × (实际时间 / 目标时间)目标出块时间:10 分钟
难度调整幅度限制:4 倍上限与 1/4 下限
实际调整周期以区块高度为触发条件,若前 2016 个区块实际耗时不足目标时间的 1/4 或超过 4 倍,则按 4 倍/1/4 裁剪
区块验证流程:
验证区块头哈希是否满足目标难度
验证区块时间戳(前后 2 小时窗口)
验证 Merkle 根与交易列表匹配
验证每笔交易签名与 UTXO 引用
验证 coinbase 交易合规性
验证交易费用总和不超过区块奖励
UTXO 模型
AmosChain 采用 UTXO(未花费交易输出) 模型,与账户模型相比具备以下优势:
数据结构:
每笔交易包含一个或多个输入(引用 prior UTXO)和一个或多个输出(新 UTXO)
UTXO 由交易 ID + 输出索引唯一标识
每笔交易总输入金额必须 ≥ 总输出金额(差额为矿工费)
UTXO 管理:
链上 UTXO Set:存储当前所有未花费输出,支持 O(1) 查询
账本历史分离:完整交易历史保留于
blocks桶,UTXO 状态独立索引并发安全:使用读写锁保护 UTXO Set 的并发访问
回滚支持:基于内存状态快照实现临时回滚验证,共识通过后批量持久化写入
切换效率:链切换时直接覆盖 UTXO Set,无需逐笔回滚,O(1) 时间复杂度完成状态切换
双重支付防护:
每笔交易输入引用的 UTXO 必须存在于当前 UTXO 集合
UTXO 被消费后立即从集合中移除
交易池中的交易会临时锁定相关 UTXO
密码学与安全
算法 | 用途 | 说明 |
|---|---|---|
ECDSA(secp256k1) | 数字签名 | 交易签名与验证,私钥生成公钥 |
SHA-256 | 哈希计算 | 区块哈希、交易哈希、工作量证明 |
AES-256-GCM | 密钥加密 | 私钥存储加密,认证加密模式 |
RIPEMD-160 | 地址生成 | 公钥哈希后生成地址 |
密钥派生:BIP32 分层确定性钱包支持(规划中),从种子生成密钥树。
交易池(Mempool)
待确认交易缓存,最大容量 10000 笔
按手续费率(satoshi/byte)排序,矿工优先打包高费率交易
孤儿交易缓存:引用未知 UTXO 的交易暂存,等待父交易到达
双重支付检测:同一 UTXO 只能被一笔未确认交易引用
交易替换策略:支持 opt-in RBF(Replace-By-Fee),允许用户用更高费率交易替换已提交的低费率交易
Web UI 与 API
可视化仪表盘:节点状态、区块列表、交易详情、网络拓扑
RESTful API:
GET /api/block/{hash}— 查询区块GET /api/tx/{id}— 查询交易GET /api/address/{addr}— 查询地址余额与交易历史POST /api/send— 发送交易GET /api/status— 节点状态
API 认证:支持 API Key 认证,防止未授权访问
HTTPS 支持:配置 TLS 证书启用加密传输
快速开始
环境要求
Go 1.24.0 或更高版本
Windows / Linux / macOS
安装与编译
# 克隆仓库
cd C:\amoschain
go mod download
# 编译
go build -o amoschain.exe
运行节点
# 默认启动(4 个挖矿线程)
amoschain.exe
# 指定挖矿线程数
amoschain.exe -workers 8
# 指定 P2P 种子节点
amoschain.exe -seeds "192.168.1.100:10000,192.168.1.101:10000"
环境变量配置
变量名 | 默认值 | 说明 |
|---|---|---|
|
| 数据库文件路径 |
|
| P2P 监听地址 |
|
| 挖矿线程数 |
| — | 种子节点列表(逗号分隔) |
| — | Web API 认证密钥(逗号分隔) |
| — | TLS 证书文件路径(启用 HTTPS) |
| — | TLS 私钥文件路径 |
| — | DNS 种子域名(用于 SRV 记录解析) |
|
| 开启白名单模式 |
| — | 允许连接的 IP/CIDR 列表 |
| — | 禁止连接的 IP/CIDR 列表 |
|
| 开启 JSON 格式日志 |
|
| 最小手续费率(satoshi/byte) |
|
| 默认手续费率 |
|
| 最小交易手续费(防粉尘攻击) |
配置示例:
# Windows
set AMOSCHAIN_WORKERS=8
set AMOSCHAIN_LISTEN_ADDR=:10001
set API_KEYS=mysecretkey123
amoschain.exe
# Linux/macOS
export AMOSCHAIN_WORKERS=8
export AMOSCHAIN_LISTEN_ADDR=:10001
export API_KEYS=mysecretkey123
amoschain.exe
网络拓扑
节点发现流程
┌──────────────┐
│ Seed Node │
│ :10000 │
└──────┬───────┘
│
┌───────┼───────┐
│ │ │
┌────▼────┐ ┌▼──────┐ ┌────────┐
│ Node A │ │ Node B│ │ Node C │
│:10000 │ │:10000 │ │:10000 │
└─────────┘ └───────┘ └────────┘
节点发现流程:
启动时连接硬编码种子节点或配置的种子节点
通过
getpeers请求获取其他节点列表自动建立 P2P 连接(最多 125 个出站连接)
通过
inv消息广播区块与交易通知邻居节点通过
getdata拉取完整数据
网渡科技品牌优势
1. 自主可控的核心技术
AmosChain 底层代码完全由网渡科技自主研发,从共识算法、P2P 网络到 UTXO 模型均拥有完整的知识产权,不依赖任何第三方区块链框架,确保技术路线的自主可控与长期演进能力。
2. CPU 挖矿友好
与依赖 ASIC 或 GPU 的公链不同,AmosChain 采用 CPU 挖矿算法,降低了参与门槛,使更多普通用户与中小企业能够公平参与网络共建,体现了去中心化的核心精神。
3. 轻量级与可扩展架构
AmosChain 核心节点资源占用极低(内存 < 512MB,存储空间仅需数 GB),可在普通服务器甚至树莓派上稳定运行,适合教育、科研、企业内部培训及轻量级应用场景。
4. 国密算法支持(规划中)
网渡科技正在将国密算法(SM2/SM3/SM4)集成至 AmosChain,未来版本将支持国密签名验证、国密哈希计算与国密 TLS 加密通信,满足国内合规与信创要求。
5. 完整的开发生态
多语言 SDK 支持(Go / Python / JavaScript)
详细的 API 文档与开发者指南
开源社区与技术支持
6. 生产级稳定性验证
AmosChain 已在网渡科技内部多个项目中完成长期稳定运行验证,并对外开放测试网络,累计运行超 10,000 小时,区块高度超过 50,000。
总结
AmosChain 是网渡科技在公链领域的重要技术实践。它以轻量级、可接入、易扩展为核心设计理念,采用 PoW 共识机制与 UTXO 模型,为企业和开发者提供了一套完整的去中心化基础设施解决方案。
网渡科技将持续投入 AmosChain 的技术研发与生态建设,推动公链技术在供应链金融、数字存证、物联网与 Web3 等领域的广泛应用,助力构建开放、透明、可信的下一代互联网基础设施。
常见问题
关于公有链-基于Go语言研发的常见问题解答