【以太坊系列-005】使用solc編譯solidity智慧合約,並生產web3deploy格式的程式碼
阿新 • • 發佈:2018-12-22
說明
本文主要介紹,只通過solc來進行智慧合約的部署,更簡單的方式是通過remix直接生成。
該場景是用於使用者自己修改了solc編譯器,remix無法使用的情況。
1、 程式碼結構
# cat counter.sol
pragma solidity ^0.4.20;
contract Counter {
uint count;
function Counter() public
{
count = 0;
}
function increment() public {
count = count + 1;
}
function getCount() constant returns (uint) {
return count;
}
}
2、生成web3deploy程式碼的指令碼
#!/bin/bash ####################################################################################### # v1: 當前版本暫時不支援合約中構造器帶引數的情況,如果合約中帶引數,請自行處理 # 僅作為演示使用 # v2: 待後續開發 # # usage: # sh gen_web3deploy.sh file.sol # author: # wechat : linshenyuan00 ####################################################################################### file_name=$1 echo "#######################################################################################" echo "begin to compile :[$file_name]." if [ ! -f $file_name ] || [ -z $file_name ] ; then echo "ERROR: the file not exist." echo "usage should be : sh gen_web3deploy.sh file.sol" exit 1 fi ####################################################################################### # 1,get bin info ####################################################################################### context=`solc $file_name --bin ` ret=$? if [ "$ret" != "0" ]; then echo "ERROR: [solc $file_name --bin] failed." exit 1 fi bin_info=`echo $context |awk -F ' ' '{print $5}'` echo "bin_info="$bin_info ####################################################################################### # 2,get abi info ####################################################################################### context=`solc $file_name --abi ` ret=$? if [ "$ret" != "0" ]; then echo "ERROR: [solc $file_name --abi] failed." exit 1 fi abi_info=`echo $context |awk -F ' ' '{print $7}'` echo "abi_info="$abi_info ####################################################################################### # 3,gen web3deploy info ####################################################################################### web3deploy_file="web3deploy.log" >$web3deploy_file cat >$web3deploy_file <<EOF var counterContract = web3.eth.contract($abi_info); var counter = counterContract.new( { from: web3.eth.accounts[0], data: '0x$bin_info', gas: '4700000' }, function (e, contract){ console.log(e, contract); if (typeof contract.address !== 'undefined') { console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash); } }) EOF ####################################################################################### # 4,print web3deploy info ####################################################################################### echo "#######################################################################################" echo "" echo "the web3deploy result is:" echo "#######################################################################################" echo "" cat $web3deploy_file echo "" echo "#######################################################################################"
生成對應的web3deploy程式碼
# sh gen_web3deploy.sh counter.sol
拷貝 web3deploy中的程式碼,到geth控制檯,部署即可