【以太坊系列-005】使用solc编译solidity智能合约,并生产web3deploy格式的代码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linshenyuan1213/article/details/84187075

说明

本文主要介绍,只通过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控制台,部署即可

猜你喜欢

转载自blog.csdn.net/linshenyuan1213/article/details/84187075