📌 项目地址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 startnpm stopnpm 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里处理transfercreateAccount。框架只负责在共识达成后,按你写的规则去更新状态。跨片交易怎么路由?框架会拆,但规则你得写对。

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网络开放再关注。现在下载源码,在单节点里跑通业务逻辑,然后用多节点网络看分片效果,最后读那三个文件。比任何教程都直接。

这篇文章对你有帮助吗?

发表回复