不同步区块也能发币???是的!
除了使用官方钱包Ethereum Wallet、geth部署合约以外,还有第三种选择,即使用网页钱包MyEtherWallet部署。
MyEtherWallet是个网页版的以太坊钱包,具有直接和Blockchain交互的能力。这便有了不用同步节点而部署合约的能力(毕竟我可怜的Air可没有上百G的空间)。
部署的关键在于二进制代码一定要带有构造函数参数。
1、使用Remix在线IDE调试合约,假设你的合约已经调试通过(最好是在测试网络上已经运行过)。
2、通过Remix获得合约字节码,也可以拷贝Remix生成的web3代码
var initialSupply = /* var of type uint256 here */ ;
var tokenName = /* var of type string here */ ;
var tokenSymbol = /* var of type string here */ ;
var xxxtokenContract = web3.eth.contract(tokenAbi);
var xxxtoken = xxxtokenContract.new(
initialSupply,
tokenName,
tokenSymbol,
{
from: web3.eth.accounts[0],
data: byteCode,
gas: '4700000'
}, function (e, contract){
console.log(e, contract);
if (typeof contract.address !== 'undefined') {
console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
}
})
这段代码的意思是使用Remix编译好的字节码,调用构造函数(最后一句)。其中byteCode和tokenAbi是跟合约有关的变量。
3、通过js获得构造函数的字节码
核心在于不直接调用构造函数,而是打印出构造函数的字节码,去让MEW提交到blockchain上。利用的是getData函数。
var byteCodeWithParam = dectokenContract.new.getData(initialSupply, tokenName, tokenSymbol, {data: byteCode});
console.log(byteCodeWithParam)
4、把打印出来的字节码,提交到MEW,签名,运行,即可看到自己的合约。