此博客講解智能合約在本地以太坊客戶端的部署和測試。本地以太坊的搭建和啓動在區塊鏈(三)基於本地以太坊客戶端搭建多節點私鏈中已經介紹過,在此不再闡述。有關智能合約部署過程中涉及到的智能合約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()
測試效果如下:
至此,智能合約在本地以太坊客戶端的部署、測試工作已經完成。