在智能合约编写完成后,部署的方式就提到了日程上来,经过简单的测试,总结出来以下几种编译部署方式:
一、编译
solc编译
solc安装方式非常简单,可以直接命令安装也可以使用源码编译。使用方法:
solcjs--bin name.sol获得bytecode
solcjs--abi name.sol获得abi
或者二合一:
solcjs--bin--abi name.sol
需要注意的是,如果不增加编译参数,那么因为优化程度不同可能同Remix上编译得到的略有不同。
remix编译
将代码直接拷贝到如下网址:
在其中编译即可,如果不编译,可能需要在setting中选择一下编译器的版本。编译成功后,点击Details,即可得到相关的参数值。
node.js编译
主要是安装node.js,solc,web3.js等相关内容。
这里有一个需要注意的地方,在老的版本中提供了eth.compile.solidity这个属性,但是在新的版本中,已经去除,编译时会报找不到solidity这个属性。
二、部署
1、geth部署
方法非常简单,把abi,bytecode组成类似Remix上的格式拷贝到命令行中执行即可:
var testContract=
web3.eth.contract([{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]);
var test=testContract.new(
{
from:web3.eth.accounts[0],
data:'0x6080604052348015600f57600080fd5b50609c8061001e6000396000f300608060405260043610603e5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663c6888fa181146043575b600080fd5b348015604e57600080fd5b506058600435606a565b60408051918252519081900360200190f35b600701905600a165627a7a72305820325aa8f93a172a9ced694be2e82a701fb1871a9a30185f1259d5aadc28b44fcc0029',
gas:'4700000'
},function(e,contract){
console.log(e,contract);
if(typeof contract.address!=='undefined'){
console.log('Contract mined!address:'+contract.address+'transactionHash:'+contract.transactionHash);
}
})
这里需要注意的是,如果有参数需要将参数数据设置好,并在new的时候儿将其填充到前面,细节看上篇的内容。
2、remix部署
这个就更简单了,编译成功后,点击Run,在”Environment”中选择部署的方式,有三种方式:
javascriptVM:这个类似于使用JS的虚拟机来测试部署。
injected Web3:使用MetaMask这个插件的选项,发币相当简单,其实就是一个大号的钱包。功能强大,简单易用。它内部可以选择是使用测试网还是主网,一用就明白了。没有什么可讲的。
Web3 Provider:使用URL地址来决定连接的网络。如果都连接本地网,那么它和第二项没啥区别。
node.js部署
使用本地的Web3来部署。
使用eth_sendTransaction
重点讲一下这个,这个弄明白了,下面的也就是增加一个签名而已:
首先部署一个最简单的合约,说明使用流程;其次部署一个发币合约,来说明整个流程,具体步骤见后面代码。
使用eth_sendRawTransaction
这个就比较简单了,使用ethereumjs-tx来签名发送即可。需要注意的,这里需要自己处理nonce,方法很多,可以用web3.eth.getTransactionCount(web3.eth.coinbase),也可以使用自己写代码控制的方式。
4、其它方式
可以使用一些现成的插件或者软件,比如metamask,etherscan等,还有好多的钱包都自带这个功能。