區塊鏈用戶在部署智能合約的時候,如果使用工具,比如《墨客區塊鏈(MOAC BlockChain) 部署ERC-20合約》中是使用wallet.io網頁版錢包部署合約,此時如果合約需要引數,錢包會在對合約的編譯程序中顯示出來并提供引數輸入框。合約部署者輸入相應的引數后就可以正常部署合約了。
那么實際上部署合約時的這個程序是怎么做的呢?本文提供一段代碼示例,在部署智能合約時傳入引數,并成功部署。
仍然使用一個標準的erc20 token智能合約做例子。
1.編譯智能合約
首先本地的solidity編譯環境。安裝命令:
C:>npm install -g solc //默認安裝最新版本
C:>npm install -g [email protected] //安裝指定版本
進入TestToken20.sol所在目錄,編譯合約:
D:>solcjs --optimize --bin --abi -o bin TestToken20.sol
運行后,會自動生成一個bin目錄,輸出TestToken20.abi及TestToken20.bin到bin目錄下,TestToken20.abi里邊放的就是abi的內容,TestToken20.bin里邊放的就是bytecode的內容。
2.部署合約
使用以下代碼部署合約,直接node執行。
var Chain3 = require('chain3');
var chain3 = new Chain3(new Chain3.providers.HttpProvider('http://localhost:8545'));
//deploy contract
chain3.personal.unlockAccount(chain3.mc.accounts[0], 'password',0);
var totalSupply = 1000000 ;
var name = "erc20Token" ;
var decimals = 18 ;
var symbol = "token" ;
var erc20TokenContract = chain3.mc.contract([{"constant":true,"inputs":[],"name":"name","outputs":......,"name":"Approval","type":"event"}]); //編譯智能合約得到的abi
var subchainbase = erc20TokenContract.new(
totalSupply,
name,
decimals,
symbol,
{
from: chain3.mc.accounts[0],
data: '0x608060405234801561001057600080......00029', //編譯智能合約得到的bin,前面加上0x
gas : '9000000'
}, function (e, contract){
console.log(e, contract);
if (typeof contract.address !== 'undefined') {
console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
}
})
傳入四個引數,正是智能合約所需要的引數。
執行后得到:

到瀏覽器查詢結果:

部署成功!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/30174.html
標籤:區塊鏈技術
