2.2 创建脚手架并进行相关设置

779 阅读3分钟

原文链接

在本教程中,我们将建立一个石头剪刀布的 Dapp 。其中,两个玩家 Alice 和 Bob 可以对比赛结果下注。我们会从头开始,并逐步完善这个应用程序的功能。
您可以复制程序的全部代码,然后查看运行情况;也可以自己输入每行代码,这样就可以熟悉 Reach 语言以及程序的每个部分。
首先创建一个名为 index.rsh 的文件。文件可以放置在任何位置,但是我们建议将其放在当前目录,即 〜/reach/tut 中。在随后的所有代码示例中,我们会以当前教程的章节号命名文挡。例如,首先在 index.rsh 中输入以下内容:
tut-2/index.rsh

1 'reach 0.1';
2
3 export const main =
4  Reach.App(
5    {},
6    [Participant('Alice', {}), Participant('Bob', {})],
7    (A, B) => {
8      exit(); });

可以点击 exportconstexit查看其说明文档。

您是否注意到代码示例上方的链接 tut-2/index.rsh ?您可以单击这些链接,进入Gitee 查看完整文件。

您的文本编辑器有没有将 index.rsh 识别为 Reach 程序,并显示适当的语法提示呢?如果没有,请访问IDE/文本编辑器中的扩展支持,或手动配置该插件,将 Reach(.rsh) 文件视为 JavaScript 。

这只是 Reach 程序的基础架构,并不能做多少事情,但是它具有一些重要的部份。

  • 第 1 行表明这是一个 Reach 程序。请始终将它写在每个程序的顶部。
  • 第 3 行定义了程序的主要输出。编译时,编译器将查看这个内容。
  • 第 6 行指定了该应用程序的两个参与者: Alice 和 Bob 。
  • 第 7 行将 Reach 标识符( A 和 B )绑定到这些参与者,并定义程序的主体。

在进一步介绍之前,让我们为 JavaScript 前端代码创建一个类似的 shell 。创建一个名为 index.mjs 的新文件,代码如下:
tut-2/index.mjs

1  import { loadStdlib } from '@reach-sh/stdlib';
2  import * as backend from './build/index.main.mjs';
3 
4  (async () => {
5    const stdlib = await loadStdlib();
6    const startingBalance = stdlib.parseCurrency(10);
7  
8    const accAlice = await stdlib.newTestAccount(startingBalance);
9    const accBob = await stdlib.newTestAccount(startingBalance);
10 
11   const ctcAlice = accAlice.deploy(backend);
12   const ctcBob = accBob.attach(backend, ctcAlice.getInfo());
13 
14   await Promise.all([
15     backend.Alice(
16       ctcAlice,
17       {},
18     ),
19     backend.Bob(
20       ctcBob,
21       {},
22     ),
23   ]);
24 })(); // <-- Don't forget these!

可以点击parseCurrencynewestaccountdeploy查看相关文档。

这个 JavaScript 代码的主要结构在随后所有测试程序中都会被延用。

  • 第 1 行导入 Reach 标准函数加载器。
  • 第 2 行导入后端代码,此部分代码通过 ./reach compile 产生。
  • 第 4 行定义了一个异步函数,它是我们前端的入口函数。
  • 第 5 行根据 REACH_CONNECTOR_MODE 环境变量动态加载标准库。
  • 第 6 行添加 10 个代币作为初始余额以便后续可以进行转账操作。
  • 第 8 行和第 9 行为 Alice 和 Bob 创建了 10 个代币的测试帐户。这仅适用于 Reach 提供的开发人员测试网络。
  • 第 11 行 Alice 部署了该应用程序。
  • 第 12 行附加 Bob 到该应用程序。
  • 第 15 至 18 行初始化 Alice 的后端。
  • 第 19 至 22 行初始化 Bob 的后端。
  • 第 14 行等待后端完成。
  • 第 24 行调用我们定义的异步函数。

现在就可以编译和运行我们的程序了。输入 $ ./reach run便可以运行

Reach 会为应用程序构建并启动 Docker 容器。
这个应用程序没有做任何操作,您只会看到很多诊断消息。

当您开始下一步教程时,可以通过运行 $ ./reach init 来自动化创建 Reach 的脚手架代码!

下一步中,我们将实现石头剪刀布的逻辑!我们应用程序的雏形也会建立!

您知道了吗?:
当您使用 Reach 编写 DApp 时,您应该

  1. 用 Solidity 编写智能合约,用 Ethereum SDK 编写 JavaScript 后端,用 JavaScript 编写前端,然后用 Reach 进行测试和部署; 还是
  2. 在 Reach 中编写程序,生成智能合约和 JavaScript 的后端和前端,然后使用 Reach 来测试和部署? 解答: Reach 精简了共识网络里的细节。

上一篇 : 2.1 安装及初始化

下一篇 : 2.3 石头剪刀布