智能合约基础语言(十一)——创建和调用合约

 

智能合约基础语言(十一)——创建和调用合约

一、目录

☞创建合约

☞调用合约

二、创建合约

我们写好一个合约后,一个合约如何部署到以太坊网络,并实现合约函数的调用呢?合约部署到以太坊网络上,也是一个交易的过程。首先向全网发送一个合约创建的交易,待矿工打包交易,并获得全网的认可从而生效后,则得到合约的地址;既而向这个地址发送消息调用,实现调用合约的某个函数。

2.1 初始创建合约

创建合约主要有以下几种方式:

• solidity创建合约

• truffle框架创建合约

• web3.js创建合约

2.2 创建合约的准备事项

Testrpc:

testrpc是在本地使用内存模拟的一个以太坊环境,对于开发调试来说,更为方便快捷,testrpc不同于geth,geth是真正的以太坊环境。

Truffle:

truffle是本地的用来构建项目、编译、部署智能合约的工具

安装testrpc和truffle的命令:

如果网络原因卡住,需要安装cnpm:

安装好cnpm之后:

2.3 合约中创建合约

在Solidity中创建一个合约非常简单,但创建者必须知道要创建的合约源码。通过下面的例子,我们来看下如何在合约中创建合约。

下面是一个要被创建的合约的源码:

在创建者合约中,使用new关键字创建合约,由于创建者合约必须要知道源码。我们可以把多个合约写到同一个文件,或使用import关键字来引入关联合约,下面是引入Test合约,并创建的一个实例的具体实现:

上述实现中,我们首先引入了Test.sol源代码文件。需要注意的是,使用./说明两个文件是放在同级目录下,不以.开头默认是以绝对路径寻址。在合约NewContract中,我们使用new关键字部署了一个Test.sol合约。成功调用后,我们不止可以得到合约部署的地址,也可以直接调用合约提供的函数。

2.4 初始创建合约

新建一个文件夹,作为truffle的开发目录,我这里取名为helloWorld。另开一个终端,命令行进入helloWorld件夹,执行truffle init命令。 然后在生成的contracts目录里新建一个合约文件(后缀是.sol),然后在migrations目录里新建一个部署脚本(后缀是.js)。 分别编写刚才新建的合约和部署脚本,然后执行truffle compile, 如果在控制台里没有报错,则说明合约没有语法错误可以部署到测试链上。 然后执行truffle migrate部署合约。之后就可以执行truffle console打开truffle自己的控制台来调用合约了。

调用方法: 尝试在truffle控制台里输入:

仅仅是在控制台里调用合约还不足以完成项目, 还需要前端界面来展示合约数据以及与合约交互。如何让用户通过DApp界面来调用合约中定义的方法来完成交互呢?这就需要用到一个js库名字叫做web3。

三、web3.js调用合约

web3.js是以太坊提供的一个Javascript库,它封装了以太坊的JSON RPC API,提供了一系列与区块链交互的Javascript对象和函数,包括查看网络状态,查看本地账户、查看交易和区块、发送交易、编译/部署智能合约、调用智能合约等,其中最重要的就是与智能合约交互的API。

3.1 在项目中安装web3.js:

以上命令会将web3.js下载到web3test/node_modules目录下,其中–save参数会web3.js添加到package.json配置文件中。

3.2 创建web3对象

要使用web3.js与区块链交互,需要先创建web3对象,然后连接到以太坊节点。 在web3test目录下新建index.js文件,在其中输入以下代码:

3.3 获取已部署的合约实例

要使用智能合约,必须先从区块链中获取到合约实例,获取合约实例需要合约的ABI和合约的地址, ABI在truffle项目中的build目录里,合约地址会在执行完truffle migrate之后显示在控制台里:

之后就可以通过DAppInstance对象来调用合约中的函数了。

-END-

附上链块学院网课学习平台链接:链接:http://wk.liankuai.tech/

助教卫星:lkxy007

猜你喜欢

转载自blog.csdn.net/liankuaixy/article/details/83094929