8.4.10 truffle的创建管线

介绍了用truffle编译、部署和测试智能合约的方法之后,现在来为altcoin创建一个客户端了。在了解如何用 truffle创建客户端之前,需要知道,不允许我们使用在以太坊节点之外存储的账户签署交易,也就是说,它没有类似于 sendRawTransaction的东西,理由与truffle-contract的理由相同。

用truffle创建客户端意味着首先在客户端源代码中整合truffle的artifact,然后让客户端的源代码做好部署准备。

创建客户端需要运行如下命令:

8.4.10 truffle的创建管线

执行这条命令时,truffle将检查如何通过检测项目配置文件中的build属性创建客户端。

1.运行外部命令

可以用命令行工具创建客户端。如果build属性是一个字符串,truffle就假定想运行一个命令去创建客户端,所以它把该字符串当作一个命令运行。给该命令提供足够环境变量,用这些变量与truffle整合。

可以让truffle运行一个命令行工具,以创建使用类似配置代码的客户端:

8.4.10 truffle的创建管线

2.运行自定义函数

可以用一个JavaScript函数创建客户端。如果build属性是一个函数,只要想创建客户端,truffle就会运行该函数。给该函数提供大量关于项目的信息,用这些信息与truffle整合。

可以让truffle运行一个函数,以创建使用类似配置代码的客户端:

8.4.10 truffle的创建管线

还可以创建一个对象,其中包含一个和这里类似的创建方法。这对于想发布一个包来创建客户端的人来说实在太棒了!

3.truffle的默认构建器

truffle提供了truffle-default-builder npm包——在truffle中称为默认构建器(default builder)。该构建器导出一个对象,该对象有一个build方法,它的工作方式与之前提到的方法完全一样。

默认构建器可用于为DApp创建一个网络客户端,其服务端只服务于静态文件,所有功能都在前端。

在进一步了解如何使用默认构建器之前,首先用如下命令进行安装:

8.4.10 truffle的创建管线

现将配置文件修改如下:

8.4.10 truffle的创建管线

默认构建器可使用户完全掌控组织客户端文件和文件夹的方法。

该配置用文件、文件夹和文件数组这些构成目标值(targets)的内容(右侧)描述目标值(左侧)。每个目标值将通 过处理右侧的文件产生,要进行文件扩充、把结果连接在一起,然后保存结果文件(即目标值)到创建目的地。这里,字符串(而非数组)在右侧指明,且那个文件 将被处理(如果有需要),然后被直接复制。如果字符串结尾是“/”,就被翻译为目录,不对该目录进行任何处理直接复制。右侧指明的所有路径都与app/目 录有关。

可以随时修改该配置和目录结构。比如不需要有JavaScript和stylesheets目录,但是请确保相应修改了配置。

 如果希望默认构建器在Web应用前端整合truffle,就要确保有一个创建目标(叫作app.js),默认构建器可以对其附加代码。它不会将truffle与其他任何文件名整合。

默认构建器的功能如下:

·自动将已编译合约artifact、已部署合约信息和以太坊节点配置导入客户端源代码。

·包括受推荐的相关程序,包括web3和truffle-contract。

·编译ES6和JSX文件。

·编译SASS文件。

·最小化asset文件。

8.4.10 truffle的创建管线 可以使用truffle watch命令,监听合约目录、应用目录和配置文件的变化。如有变化,它就重新编译合约,并生成新的artifact文件,然后重新创建客户端。但是它不进行移植和测试。

4.创建客户端

现在为DApp编写一个客户端,并使用truffle的默认构建器创建客户端。首先,在前面做好的配置中创建文件和目 录:创建一个app目录,在里面创建一个index.html文件和两个目录(分别称为JavaScript和styelsheets)。在 JavaScript目录中,创建index.js文件。在stylesheets目录中,下载并放入Bootstrap 4的CSS文件。详见https://v4-alpha.getbootstrap.com/getting-started/downloads/#bootstrap-css-and-js

加载bootstrap.min.css和app.js文件。有两种形式:一种是发送Metacoins给一个不同的账户;另一种是查询账 户中的Metacoins余额。在第一种形式中,用户必须选择一个账户,然后输入要发送的Metacoin数量和想要发送到的地址。在第二种形式中,用户 只需要选择要查询Metacoins余额的账户地址。

上述代码的执行过程如下:

1)truffle-default-builder使artifacts对象在__contracts__全局对象下可用。

2)使可用的合约抽象对所有作为全局变量(变量名与合约名相应)的合约可用。

3)通过已经设置provider提供web3对象;为合约抽象设置provider。还使web3对象连接到带名字开发的网络,如果不存在,则默认值是http://localhost:8545

4)在程序代码中,首先等待页面加载,加载后在连接的节点中检索账户列表,并在两张表中显示。还要调用MetaCoin abstraction的detectNetwork()方法。

5)设置两张表的submit事件触发器。它们两个都在提示栏显示结果。

6)当提交第一张表时,获得MetaCoin合约的部署实例,并用正确的实参调用sendCoin方法。

7)当提交第二张表时,在EVM中用调用get Balance方法检索被选择账户的余额,而非广播一个交易。

继续运行truffle创建命令,truffle会在build目录中创建index.html、app.js和bootstrap.min.css文件,并在这些文件中放入客户端的最终部署代码。

来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=530

'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();