原文:https://docs.reach.sh/tut-2.html

    在本教程中,我们将建立一个剪刀石头布的应用程序。其中,两个玩家Alice和Bob可以对比赛结果下注。我们将从头开始,并逐步完善这个应用程序的功能。
    您可以复制程序的全部代码,然后查看运行情况。您也可以输入每行代码,这样您就可以熟悉Reach语言以及程序的每个部分。
    首先创建一个名为index.rsh的文件。文件可以放置在任何位置,但是我们建议将其放在当前目录,即〜/reach/tut中。在随后的所有代码示例中,我们将以当前教程的代码作为基础代码结构进行扩充。例如,首先在index.rsh中输入以下内容:
    tut-1/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-1/index.rsh 代码示例上方的链接?您可以单击这些链接,进入GitHub库查看完整文件。 您的文本编辑器是否将index.rsh识别为Reach程序,并显示适当的语法提示?如果没有,请访问IDE/文本编辑器中的扩展支持,或手动配置该插件将Reach(.rsh)文件视为JavaScript。

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

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

    在进一步介绍之前,让我们为JavaScript前端代码创建一个类似的shell。创建一个名为index.mjs的新文件,代码如下:
    tut-1/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示例代码中,可以单击文档中的标准函数查看相关文档。

    这个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进行测试和部署;

    还是

    1. 在Reach中编写程序,生成智能合约和JavaScript的后端和前端,然后使用Reach来测试和部署

    ? 回答: