在出现新的需求时,在需要不同的治理结构或不同的资源模型时创建新的分链是 EOSIO 生态文化的一部分。这也符合多链繁荣的愿景,集思广益,一步步地向前发展。

在多链繁荣的世界中,开发者们需要有一个强大的工具,来启动、重置或重启区块链。当 EOSIO 软件打入企业中时,你可以轻松地想象这样的一个场景:一家公司会建立数十个小型数据库,其中一些是在整个公司通用的,其他是以每个部门为中心并与客户、合作伙伴或供应商共享的。有的链可能会被做成瞬息的:它会在另一个链上的固定状态下启动,突发处理数百万笔交易,然后直接废除,最终状态将回到原始链上(例如,作为两方之间的临时闪电网络)。

使用最新的 dfuse 迁移工具会简化类似的整个过程。

为什么需要用 dfuse 迁移工具

  • 加速合约开发流程:更快地升级你的数据模型,避免链上突变的麻烦,而仍然保持其他团队成员的链状态一致。
  • 在启动新链时,同步先前存在于另一个网络上的所有帐户(想象它像是 EOS 主网链扩展)。
  • 在不对用户造成使用中断的情况下,修剪链的历史数据。
  • 启动链时的确定性:仅需要指定的块高度快照以及指定脚本(如果)即可修改链状态。一个去中心化的团队可以让每个成员独立验证链的完整性,还可以通过签署交易来完成链的激活。

如何使用 dfuse 迁移工具

最新版本的 dfuseeos 包含了一个新命令:

$ dfuseeos migrate --snapshot=./path/to/snapshot.dat

该命令将生成一个可移植状态快照(如果你用 dfuseeosnode-manager 的话,它会定期为你创建),全部在磁盘上展开,易于浏览目录的结构(在 ./migration-data 下),由 .json 文件、 .wasm 合同二进制文件及其对应的 .abi 文件组成。这些文件共同会共同快照生成时区块链的完整状态,而且每个帐户都有它们自己的文件夹。

然后,你可以编写个简单的脚本来清理或更改合同、更改ABI、修改数据行、修改二级索引、添加或删除帐户、更改键结构——调整任意部分的状态。这些脚本仅需要与文件系统和 .json文件进行交互,所以可以用 Python、NodeJS、Haskell、C#、Go,如果您喜欢的话,甚至可以用 awk 或 sed 写。

完成后,用以下两个命令启动你的新区块链:

$ dfuseeos init
Wrote dfuse.yaml
$ dfuseeos start
Booting and injecting your new chain...

新链启动时会抓取在 migrate 步骤生成的 bootseq.yaml 文件,并注入在 migration-data 文件夹中找到的所有帐户、合同、数据行、索引和权限结构。帐户权限之间的所有依赖关系周期都被程序处理好了,同时它也确保了所有数据分配给正确的 RAM 付款人,等等。

就这样,一个功能完整的 EOSIO 分布式数据库就全面启动了。

非常感谢 ULTRA 其中一部分工作的赞助,也感谢 cc32d9 的贡献,以及社区的反馈。

你可以在 https://github.com/dfuse-io/dfuse-eosio 找到此工具,并通过微信公众号TelegramTwitter 与我们联系。