作者: 王仕军(资深前端工程师)

相信你应该已经知道 ArcBlock 是一家什么样的公司:我们坚信区块链会给人类组织和协作方式带来巨大的变革,我们致力于开发简单易用、灵活可扩展的 dApp 开发框架和工具。到目前为止我们已经发布了 Forge 框架 及围绕 Forge 框架的一系列工具。

Forge 工具箱从开始的只包含 Forge 内核,到现在包含能覆盖 dApp 完整生命周期的如下组件:

  • Forge 内核: 交易处理引擎、和共识引擎、数据存储层的交互,每周会有大小版本发布
  • 核心智能合约: Forge 内置的交易合约,能够帮助开发者解决 99% 的账户、交易、跨链、链上治理等业务逻辑
  • Forge Desktop:桌面版链节点
  • Forge Web: Forge 链节点的 Web 管理界面和区块浏览器
  • Forge SDK: 各种语言的 SDK,目前支持的语言包括 Elixir、Javascript、Java、Python、Rust
  • Forge Simulator:流量模拟器
  • dApp Workshop:dApp 原型工坊
  • Forge Patron:集成测试工具
  • Forge Deploy:生产环境大规模部署的工具,目前只支持 AWS
  • Forge Compiler:智能合约编译工具,跟随 Forge 发版,在 Forge CLI 里面可用

而 Forge CLI 是开发者获取、使用这些工具的最佳路径:只需安装一条命令,就得到了整个区块链工具箱。

本文中我们会演示如何使用 Forge CLI 来完成下面几个事情:

  • 一键发链发币:创建和配置自己的链以及链上的通证
  • 一键创建 dApp:基于基石程序快速常见能跑在链上的 dApp

安装 Forge CLI

因为 Forge CLI 使用 Node.js 开发,所以安装前需要确保你的电脑上有 Node.js v10.x 及以上的运行环境,检查是否存在 Node.js 运行环境的最简单办法是:

node --version

然后,我们就可以开始安装 Forge CLI,执行:npm install -g @arcblock/forge-cli,等待安装完成,看到如下输出:

install forge cli

安装 Forge 发行版本

接下来,执行 forge install v0.38.4,把 Forge 发行版本安装到本地,安装过程如下图:

install forge release

一键发链和发币

接下来,我们就可以执行 forge chain:create demo-chain 来创建一条链,并且在链上定义名称为 DCT、总量为 1 亿的通证,配置过程如下图:

config chain

关于自定义配置的部分,我们逐行解释如下:

  1. Chain name: demo-chain:链的名称为 demo-chain,节点的名称也是这个
  2. Please input block time (in seconds): 5:出块时间为 5 秒
  3. Do you want to customize token config for this chain? Yes:选择自定义链上的币
  4. What's the token name? Demo Chain Token:币的名称
  5. What's the token symbol? DCT:币的符号,至少 3 个字符
  6. What's the token icon? /Users/wangshijun/.forge_cli/tmp/token.png:币的图标文件路径,建议正方形的 PNG 图片
  7. What's the token description? Token on demo chain:币的描述
  8. Please input token total supply: 100000000:币的总供应量是 1 个亿
  9. Please input token initial supply: 100000000:币的初始供应量是 1 个亿
  10. Please input token decimal: 18:币的精度是小数点后 18 位
  11. Do you want to enable "feel lucky" (poke) feature for this chain? Yes:允许用户签到领币
  12. Do you want to customize "feel lucky" (poke) config for this chain? Yes:需要自定义签到领币的参数
  13. How much token to give on a successful poke? 10:每次签到领币 10 个
  14. How much token can be poked daily? 1000:每天最多放出去 1000 个
  15. How much token can be poked in total? 1460000:允许签到领币放出去的最多的币数量
  16. Do you want to include moderator config in the config? Yes:自动包含链管理员信息
  17. Set moderator as token owner of (98540000 DCT) on chain start? Yes:把剩余的币放到链管理员账户里面,可以用程序转走

命令执行完毕之后,提示信息如下:

create chain

根据提示,执行 forge start demo-chain 即可启动测试链,等待 15 秒左右,即可启动成功:

start chain

刚刚启动的测试链其实是一条单节点的链,本地节点内置了节点的控制台和区块浏览器,执行 forge web open 即可打开控制台:

forge web

一键创建 dApp

有了链之后,我们就可以创建运行在这条链上的去中心化 dApp 了。Blocklet(基石程序) 是简化开发者创建 dApp 的可重用构建模块。Blocklet 可以是任何现成的组件、模块、库、前端视图或其他简化构建 dApp(去中心化 dApp)过程的工具。选择一个 Blocklet 后,就可以安装、启动并运行该 Blocklet。除了使用单一的 Blocklet, 用户也可以将多个 Blocklet 组合在一起,用于构建更复杂的 dApp。

基于 ArcBlock 官方提供的 Starter 类型基石程序,我们就可以快速创建一个包含如下功能的 dApp:

  • 支持用户用 ABT 钱包 登录
  • 支持用户扫码签到领币
  • 支持用户支付测试币来解锁加密的文档

执行 forge blocklet:use,选择 forge-react-starter,然后指定 dApp 代码的存放目录为 demo-dapp,如下图:

blocklet use

接下来根据提示,配置好 dApp 所必须的参数,配置完毕,forge-react-starter 会自动给 dApp 创建 DID 账户、并且去链上声明 dApp 的 DID(DID 是内置在 Forge 里面的身份解决方案):

blocklet config

关键配置项是测试链的 GraphQL 接口,这个接口在 forge start demo-chain 输出里面最后那列能找到:http://localhost:8211/api

dApp 创建结束后会有如下图的启动提示:

blocklet complete

按照提示进入 dApp 目录,启动 dApp,如果一切正常,你就能在浏览器里面看到 dApp 的首页:

dapp home

点击首页右上角的 "Login" 即可使用 ABT 钱包扫码登录,ABT 钱包的下载地址在这里

整个扫码登录过程和微信扫码登录非常类似:

dapp login

在 ABT 钱包上输入 dApp 请求的用户名、邮箱信息,滑动确认,完成登录之后,就跳转到档案页面:

dapp profile

点击档案页面的 "GET 25 DCT" 按钮,然后钱包再次扫码,即可领取 10 个测试链上的通证,这里是 10 个而不是 25 个是因为我们签到的配置里面是 10 个,签到完之后,如果刷新用户档案页面,可以看到链上余额已经变成了 10,此时打开测试链的区块浏览器则能看到账户的链上注册和签到操作:

dapp explorer

dApp 中的支付测试币解锁加密的功能则留给读者去探索,提示:只需要点击档案页面的 "MY PURCHASE" 按钮即可打开支付页面。

总结

如果你对命令行有一定的使用经验,整个发链、发币、发应用的流程走下来会非常快,开发者真正所需要关心的就是自己 dApp 的业务逻辑,而不需要在 dApp 运行环境和底层设施上浪费时间,这就是 Forge 框架和工具箱的初衷和目标,也是 ArcBlock 的愿景:让区块链应用开发变的足够简单。