登录
personal.unlockAccount(eth.coinbase)
解锁账户默认解锁300s
如果没有账户则需要注册
部署合约
要部署合约首先需要录入合约的bytecode
var code="0x合约的bytecode"
一定要在bytecode前加上0x否则会导致录入失败
录入智能合约的ABI
var abi=JSON.parse('ABI')
在remix在线编译器中编译solidity源码后可以得到bytecode和ABI
录入需要的ABI为remix中复制下来的ABI删除压缩并转义后的代码。
压缩转义可以使用
http://www.bejson.com/zhuanyi/
录入完成后需要估算部署合约要用的gas
eth.estimateGas({data: code})
部署合约
var myContract = eth.contract(abi)
var contract1=myContract.new({from:eth.accounts[0],data:code,gas:1200000})//gas需要大于估算的gas数
因为这个私链上现在就只有我们自己这一个用户。没有其它矿工来挖矿把这个合约写入链上。所以我们要自己挖一下矿把合约写入链上。
txpool.status
//这个命令可以看到有没有待挖矿的交易。我们可以看到有一个。
miner.start()
miner.stop()
//挖一会矿再停下来。
txpool.status
//待挖矿交易变为0。就说明合约已经写入链上了。
contract1.address
//调用这个可以看到我们部署到链上的合约的地址了。这个值保存下来。以后要用到。
重新启动geth控制台时,调用原来部署好的智能合约要通过合约地址
var abi=JSON.parse(‘合约的abi’)
//录入ABI。格式同上一节
myContract = eth.contract(abi)
//创建类
contract = myContract.at(address)
//创建合约实例,这里要指名部署过的合约地址。地址先前已经保存。
调用合约
调用需要付费的合约
contract.函数名.sendTransaction("参数1","参数2","参数...",{from:"0xe473d288faf6c2d1812dbb759d7423605c7d1a58"})
调用不需要付费的合约
contract.函数名.call("参数1","参数2", "参数...")