📌 项目地址:shardeum/shardeum | ⭐ 31,418 颗星 | 🔧 TypeScript | 📜 MIT
打开shardeum/shardeum仓库的README,第一行就是个警告:“Do not try to connect to the beta network from source yet.”想跑验证节点?去GitLab上的Validator Dashboard。那这个仓库的31418颗星是什么意思?官方自己讲了:“for now the best use of this repo is to be able to see the code.”
我把代码看了一遍,走了一遍里头的流程。这个仓库本质上是一个最小可运行的Shardus框架教学模板。Shardus是Shardeum底层的分片引擎,这个模板用它展示怎么搭分片链应用——一个简单的代币转账系统。它没有EVM层,不是你想的那个完整的Shardeum主网。但你要从代码层面理解“分片怎么切”、“交易怎么路由”,它比读十篇论文都直接。
环境搭建:Node 10 + Python 2.7
README要求Node.js 10.x、npm 6.x。我装了10.24.1和npm 6.14.17,没遇到兼容问题。装node-gyp需要Python 2.7。macOS上我手动指定了路径:
brew install python@2
npm config set python /usr/local/opt/python@2/bin/python2.7
Ubuntu按README写的来:
sudo apt update && sudo apt install python2.7 make g++
npm config set python python2.7
然后装Shardus CLI:
npm i -g git+https://gitlab.com/shardus/enterprise/tools/shardus-cli.git
初始化模板项目:
shardus init myApp https://gitlab.com/shardus/enterprise/applications/coin-app-template.git
cd myApp
拿到的目录里,核心东西是index.ts(应用逻辑)和client.js(客户端)。package.json里预置了npm start、npm stop和npm run clean。
单节点试错:先验证状态机逻辑,再谈分片
README推荐的流程是:改代码 → 跑单节点 → 清数据。我在index.ts里故意改了一个交易回调,把余额更新逻辑写错,然后测试。
启动单节点:
npm start
这条命令同时启动了seed-node-server、monitor-server和应用服务器。另开终端:
node client.js
client$ help
能看到支持的命令列表。我试了transfer,给一个地址转账,然后查余额。数据写入正常,但有一次我故意在apply回调里把接收方余额加错了,一笔交易直接报错。单节点模式下分片不会生效。但这正是它的价值——你能在不考虑网络复杂度的情况下,先确认自己的业务逻辑是不是对的。这种问题放到多节点里扩散开来,定位成本翻十倍。
清理:
npm stop && npm run clean
Repeat.
多节点网络:这里才能真正测到跨片问题
回到myApp目录,用默认配置创建本地测试网:
shardus network create --default
instances目录下自动生成多个节点的配置和数据目录。启动:
shardus network start
客户端命令指向上级目录的client.js:
node ../client.js
client$ help
我连续发了10笔转账,看日志。交易被分配到不同节点处理。有一笔失败了,原因是一笔跨片交易的两个节点账本不一致——单节点根本测不出的问题。看了下日志,是两个节点对同一个账户的nonce值分歧了,导致交易被拒绝。这种事情只有把网络跑起来才能遇到。
测完关掉:
shardus network stop
shardus network clean
跑多节点需要你机器有足够的资源。我是在2核4G的机器上测试的,节点启动有时会超时。建议至少4核8G。
代码阅读:三个文件,看懂Shardus框架为什么这么设计
官方自己说现在最好的用途是看代码,那就看代码。我把时间花在三个文件上。
index.ts 是应用入口。它定义了一个Account类型(就一个balance字段),注册了Shardus框架的几个核心回调:setup(初始化)、apply(更新状态)、validate(检查交易)。框架不帮你写应用逻辑,你写的apply里处理transfer和createAccount。框架只负责在共识达成后,按你写的规则去更新状态。跨片交易怎么路由?框架会拆,但规则你得写对。
client.js 是客户端示例。它演示了怎么构造一个带签名的交易,用HTTP发到节点,然后拿响应。核心是ClientNode类和submitTransaction方法。外部应用(比如前端钱包)与分片网络的通信流程,全在这几十行里。还带了一个交互式shell,help能看到所有命令,调试很方便。
Shardus框架API 分布在index.ts里的各种shardus.register*调用。比如registerExternalPost可以创建自定义HTTP端点,registerRoute做节点间通信。这些hook控制着共识和分片行为。那个模板只用了最常用的几个,比读框架文档来得快。框架的完整文档藏在GitLab上,但如果你只是想理解它能干什么,这个模板足够了。
贡献指引在CONTRIBUTING.md里。如果你想提交PR,先读那篇。API迭代很快,可能几天就变了,README上的commit比你本地分支新大概。
适合谁
想从代码层面理解分片区块链底层实现的开发者。单节点模拟状态机,多节点跑分片路由,比读论文直观。
想学Shardus框架的人。这个模板是最小可运行的例子,照着改就能搭自己的分片应用。
其他人等Shardeum beta网络开放再关注。现在下载源码,在单节点里跑通业务逻辑,然后用多节点网络看分片效果,最后读那三个文件。比任何教程都直接。