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