1. 程式人生 > >【以太坊系列-005】使用solc編譯solidity智慧合約,並生產web3deploy格式的程式碼

【以太坊系列-005】使用solc編譯solidity智慧合約,並生產web3deploy格式的程式碼

說明

本文主要介紹,只通過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控制檯,部署即可