此博客讲解智能合约在本地以太坊客户端的部署和测试。本地以太坊的搭建和启动在区块链(三)基于本地以太坊客户端搭建多节点私链中已经介绍过,在此不再阐述。有关智能合约部署过程中涉及到的智能合约abi和字节码数据在区块链(七)智能合约(Smart Contract)中已经详细作了介绍在此也不再做阐述。接下来,我们介绍一下在本地以太坊客户端如何部署智能合约。
1. 查看本地账户有没有足够的gas来进行部署合约。
eth.getBalance(eth.accounts[0])
效果如下:
如果账户没有足够的gas需要挖矿代码如下:
miner.start()
2. 定义智能合约的abi
abi = [{"constant":true,"inputs":[],"name":"getmanagResult","outputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"},{"internalType":"uint256","name":"c","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"}]
以太坊客户端会自动进行json数组对齐,效果如下:
3. 通过abi创建智能合约
MyContract = eth.contract(abi)
效果如下:
4.在部署合约之前需要解锁账户
personal.unlockAccount(eth.accounts[0])
5.部署合约
strContract=MyContract.new({from:eth.accounts[0],data:"0x6080604052348015600f57600080fd5b5060ab8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063a0268dac14602d575b600080fd5b60336057565b60405180848152602001838152602001828152602001935050505060405180910390f35b600080600060016002600382925081915080905092509250925090919256fea265627a7a72315820d730cd6dd59b2d2f91b2b3ce1fdc420df258bb22b8cb42b2af3cab5f787f5e4c64736f6c634300050d0032"})
效果如下:
6. 测试合约部署状态(pending为1成功)
txpool.status
效果如下:
7.通过挖矿,让合约上块
miner.start()
8.停止挖矿
miner.stop()
9.再次查看合约状态(pending为0成功)
txpool.status
效果如下:
10. 查看合约地址
strContract.address
11. 调用合约
BackContract=MyContract.at(strContract.address)
效果如下:
12. 测试智能合约中的方法
BackContract.getmanagResult.call()
测试效果如下:
至此,智能合约在本地以太坊客户端的部署、测试工作已经完成。