首先我们进去geth平台
root@i-colbyo7v:/home/ubuntu# cd private-geth/
root@i-colbyo7v:/home/ubuntu/private-geth# geth --identity "haha" --datadir ./data/00 --networkid 12345 --rpcapi "db,eth,net,web3" --port 61910 --rpcport 8200 console
Welcome to the Geth JavaScript console!
instance: Geth/haha/v1.6.6-stable-10a45cb5/linux-amd64/go1.8.1
coinbase: 0x8260b02ac49855f9c00ff4275dc5291300517e30
at block: 48 (Tue, 11 Jul 2017 15:21:41 CST)
datadir: /home/ubuntu/private-geth/data/00
modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
合约部署流程
一般来说,部署智能合约的步骤为
1启动一个以太坊节点 (例如geth或者testrpc)。
2用solc编译智能合约。 => 获得二进制代码。
3编译好的合约部署到网络。(这一步会消耗以太币,还需要使用你的节点的默认地址或者指定地址来给合约签名。) => 获得合约的区块链地址和ABI(合约接口的JSON表示,包括变量,事件和可以调用的方法)。(译注:作者在这里把ABI与合约接口弄混了。ABI是合约接口的二进制表示。)
4 eb3.js提供的JavaScript API来调用合约。(根据调用的类型有可能会消耗以太币。)
部署合约
因为geth1.6版本以后都不支持solidity编译,所以我们在线编译以后再赋值给abi
> address = eth.accounts[0]
"0x8260b02ac49855f9c00ff4275dc5291300517e30"
> personal.unlockAccount(address)
Unlock account 0x8260b02ac49855f9c00ff4275dc5291300517e30
Passphrase:
true
部署合约就是将编译好的合约字节码通过外部账号发送交易的形式部署到以太坊区块链上。输入以下命令:
> abi = [{constant:false,inputs:{name:'a',type:'uint256'}}]
[{
constant: false,
inputs: {
name: "a",
type: "uint256"
}
}]
> MyContract = eth.contract(abi)
{
abi: [{
constant: false,
inputs: {
name: "a",
type: "uint256"
}
}],
eth: {
accounts: ["0x8260b02ac49855f9c00ff4275dc5291300517e30", "0xf7f54ba52d6226c1f3d4417cc0d700616474681d"],
blockNumber: 48,
coinbase: "0x8260b02ac49855f9c00ff4275dc5291300517e30",
compile: {
lll: function(),
serpent: function(),
solidity: function()
},
defaultAccount: undefined,
defaultBlock: "latest",
gasPrice: 18000000000,
hashrate: 0,
mining: false,
pendingTransactions: [],
protocolVersion: "0x3f",
syncing: false,
call: function(),
contract: function(abi),
estimateGas: function(),
filter: function(fil, callback),
getAccounts: function(callback),
getBalance: function(),
getBlock: function(),
getBlockNumber: