http://www.jiliann.com

在控制台命令行上部署调用智能合约

7.4.2 通过控制台部署智能合约
 
除了使用以太坊钱包外,用户还可以通过web3.js Javascript API在控制台命令行上部署调用智能合约。
 
1.部署智能合约
 
在命令行部署智能合约需首先确认已经安装了go-ethereum客户端,其具体步骤如下。
图7-11 合约交易结果
 
1)打开一个命令行窗口,运行geth命令同步区块链。由于我们使用测试网进行智能合约的部署,这里需要给geth命令加上参数,执行以下命令:
 
geth --testnet
 
2)打开另一个命令行窗口,执行geth attach命令。这个命令会打开一个Javascript控制台,通过这个控制台可使用web3的方法和geth自身的管理API调用部署的智能合约。默认的geth attach命令打开的是附加于标准的以太坊区块链上的控制台。如需打开附加于测试链的控制台,则要明确为geth attach命令指明访问的位置,此时需要加入参数,执行以下命令:
 
geth attach ipc:/home/*用户名
 
*/.ethereum/testnet/geth.ipc
 
其中,geth.ipc为以太坊的进程间通信接口,此接口用于测试网节点。同样在以太坊文件系统的主目录下也有一个geth.ipc文件,用于标准以太坊节点。
 
3)用户在部署合约之前,需要知道自己的账户地址和余额。在控制台输入以下命令可看到当前的所有外部所有账户:
 
personal.listAccounts
 
4)执行以下命令可以以以太币为单位查询账户的余额:
 
web3.fromWei(eth.getBalance("账户地址"), "ether")
 
此外,还需要解锁要发起智能合约的账户,解锁时需要输入账户创建时所设置的密码,其命令如下:
 
personal.unlockAccount("账户地址")
 
5)通过控制台部署一个简单的给商品打分的智能合约,其代码如下:
 
contract Rating {
 
function setRating(bytes32 _key, uint256 _value) {
 
/*为特定编号的商品打分
 
*/
 
ratings[_key] = _value;
 
}
 
/*显示特定商品的分数
 
*/
 
mapping (bytes32 => uint256) public ratings;
 
}
 
为了方便起见,我们将代码放到Solidity语言的在线编译器 [1] 上进行编译,其界面如图7-12所示。
图7-12 Solidity在线编译器
 
编译完成之后,在右侧的菜单栏中将Web3deploy菜单下的全部内容复制到控制台中,如图7-13所示。
 
经过一段时间的确认,控制台提示“Contract mined!”,则合约被创建成功,并返回合约的地址(address)和此次交易的散列值(transactionHash)。可通过这两个数值在区块链上寻找合约的信息。
 
2.调用智能合约
 
在部署合约所使用的控制台窗口下,可直接使用合约名和函数名调用合约。假设一个用户想为1号商品打3分,需要调用rating合约的setRating函数,需要执行以下命令:
 
rating.setRating.sendTransaction(
 
1,
 
3,
 
{from:
 
eth.accounts[0]})
图7-13 在控制台部署智能合约
 
由于用户需要发起一个交易并改变区块链的状态,因此需要用到合约对象的sendTransaction()方法来发起交易。该方法的前几个参数为setRating函数的参数,最后一个参数为发起交易的地址,也就是需要为本次交易支付费用的账户的地址。这里eth.accounts[0]代表钱包内的第1个账户,即基准账户MAIN ACCOUNT。
 
经过一段时间的确认,该交易被保存到区块链中,此时可使用rating合约中的ratings数组来显示1号商品的打分,其命令如下:
 
rating.ratings(1)
 
这时将会显示3,表示1号商品被打了3分。由于此时并不需要改变区块链系统的状态,因此不需要使用sendTransaction方法,也就不需要支付任何费用。
 
如果想在其他以太坊节点通过控制台调用合约,则需知道合约的地址和接口。
 
执行以下命令实例化合约对象:
 
var NewRatingContract = eth.contract(interface).at(“
 
address”
 
)
 
这里,interface的信息可从Solidity在线编辑器上获得,而address在合约部署之后返回得到。之后,使用NewRatingContract.ratings命令就可查找到1号商品的打分。
 
7.5 本章小结
 
在这一章,我们首先介绍了什么是智能合约、智能合约的应用以及其起源。之后介绍了在以太坊上部署智能合约的基本知识以及背后的原理。接下来我们介绍了以太坊最大的特色——以太坊虚拟机的相关知识。最后,通过实例向读者分别展示如何用图形界面的以太坊钱包和控制台命令行部署运行智能合约。通过这章的学习,读者能够很快地了解智能合约,并顺利地在以太坊上部署自己的第一个智能合约。

郑重声明:即联区块链作为开放的资讯分享平台,所提供的资讯版权归原作者所有,且不构成任何投资理财建议,如有侵权请联系删除!