打字猴:1.703879002e+09
1703879002
1703879003 ·SampleContract.deployed()。该函数和at()类似,但地址是从artifacts对象中检索的。像at()一样,deployed()是合理的。在确保代码存在于所要用到的网络中的特定地址之后,该函数将解析一个代表已部署的合约的合约实例。
1703879004
1703879005 下面部署合约并获取样本合约的实例。在network ID 10中,需要首先使用new()部署StringLib库,然后把StringLib库的已部署地址添加到StringLib抽象,再把StringLib抽象接入SampleContract抽象,最后使用new()部署样本合约以获取样本合约的一个实例。但是在network ID 1中,只需要部署SampleContract并获取其实例,因为已经在那里部署了StringLib。全部相关代码如下:
1703879006
1703879007 上述代码的执行过程如下:
1703879008
1703879009
1703879010
1703879011
1703879012
1703879013
1703879014
1703879015 1)检测网络ID。如果网络ID是10,则部署合约和库;如果网络ID是1,则只部署合约。
1703879016
1703879017 2)在network ID 10中,部署StringLib合约并获取其合约实例。
1703879018
1703879019 3)更新StringLib抽象,这样就知道了它所代表的当前网络的合约地址。更新抽象的界面类似于直接更新artifacts对象。如果连接到network ID 1,则将重写已经设置好的StringLib地址。
1703879020
1703879021 4)把已部署的StringLib接入SampleContract抽象。接入会更新链接,并把库里的事件复制到SampleContract抽象的当前网络。库可以被多次接入,并将重写它们之前的链接。
1703879022
1703879023 5)部署SampleContract到当前网络。
1703879024
1703879025 6)更新SampleContract抽象,以便在当前网络中存储合约地址,这样以后可以使用deployed()来获取实例。
1703879026
1703879027 7)在network ID 1中,只部署SampleContract即可。
1703879028
1703879029 8)这时可以修改节点连接的网络并重启应用,应用将相应做出修改。例如,在开发人员的机器上,应用将连接到开发网络;在生产服务端上,应用将连接到主网络。显然,用户可能不希望每次运行前面的文件都部署合约,所以实际上,只要合约被部署了,就可以更新artifacts对象,而且可以在代码中检查是否已经部署了合约。如果没有部署,只有这时部署它。在合约部署完成后,用户可以在数据库或者文件中存储artifacts对象并编写代码自动更新(而非手动更新)。
1703879030
1703879031 3.合约实例API
1703879032
1703879033 源Solidity合约不同,每个合约实例也是不同的,且API是动态创建的。下面是合约实例的不同API:
1703879034
1703879035 ·allEvents。这是一个合约实例函数,在当前网络ID下,当合约artifacts对象中匹配事件签名的合约引发一个事件时,就激活这个回调函数。用户还可以用eventname-specific函数抓取特定事件,而非所有事件。在前面的合约中,要抓取ping事件,可以使用SampleContract_Instance.ping(function(e,r){})。
1703879036
1703879037 ·send。该函数用于向合约发送以太币。它有两个实参:第一个实参是要转账的wei数量;第二个实参是可选项对象,该对象用于设置交易的from,即发送以太币的地址。该调用返回一个承诺,且该承诺在挖出交易时解析交易细节。
1703879038
1703879039 ·可以使用SampleContract.functionName()或者SampleContract.functionName.call()调用合约的任何方法。前者发送交易,后者则只调用EVM上的方法,且修改并不持续。两种方法都返回一个承诺。在第一种情况下,承诺解析交易结果,也就是说,一个对象包含交易哈希、日志和交易收据。在第二种情况下,承诺解析方法调用的返回值。两种方法都有函数实参,且最后一个实参为可选项,它是一个设置交易的from、gas和value等的对象。
1703879040
1703879041
1703879042
1703879043
1703879044 区块链项目开发指南 [:1703875392]
1703879045 区块链项目开发指南 8.4 truffle概述
1703879046
1703879047 truffle是一种开发环境(提供编译、部署、测试和创建所用的命令行工具)、框架(提供多种包,使编写测试、部署代码、创建客户端等变得容易)和asset pipeline(发布包以及使用其他人发布的包)。
1703879048
1703879049
1703879050
1703879051
[ 上一页 ]  [ :1.703879002e+09 ]  [ 下一页 ]