https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu( k( H( Z" h; z" Z, C4 \( D9 G. B
- sudo apt-get install software-properties-common, I; e0 C) _4 [+ Y4 P2 T" ]
- sudo add-apt-repository -y ppa:ethereum/ethereum! Y2 R2 E" \% r B
- sudo apt-get update0 E. |7 m1 ]( l- C
- sudo apt-get install ethereum
初始化创世区块
https://github.com/ethereum/go-ethereum1 ~5 T$ j8 ?, Y7 h# z% W, S" W
chainId不能为0,否则交易会报错: insufficient funds for gas*price+value4 b' O' u7 m( R) |8 j/ H1 O/ z; N
- cd home
- mkdir blockChain&& cd blockChain
- vim genesis.json
- //摘自官网
- {# X" z4 D) \8 Z2 c1 r
- "config": {
- "chainId": 14,
- "homesteadBlock": 0,4 l! p/ F/ z3 D0 a/ C
- "eip155Block": 0,
- "eip158Block": 0
- },
- "alloc" : {},, P7 @5 K/ R' v5 |0 `5 e
- "coinbase" : "0x0000000000000000000000000000000000000000",
- "difficulty" : "0x05000",
- "extraData" : "",4 f7 f: ?. {$ w' L m
- "gasLimit" : "0x2fefd8",
- "nonce" : "0x0000000000000042",9 W/ n6 i: u) A' ^6 ?
- "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",$ Y: q" _" ]# i0 v: ^
- "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",6 Q( q: h1 U7 W6 f V, I" B
- "timestamp" : "0x00"1 e3 c5 z$ o, y, u- d* N5 O9 r
- }
官方文档中的chainId为0,应该修改为非0的值,不然会导致 insufficient funds for gas * price + value
difficulty表示挖矿的难度值,官方文档中为0x20000,由于测试机器配置低,修改为0x05000。
geth --datadir /home/blockChain/data/00 init genesis.json
geth --networkid 14 --nodiscover --datadir /home/blockChain/data/00 --rpc --rpcapi net,eth,web3,personal --rpcaddr ip_address console5 V# m, _0 F3 z6 C' t7 ^8 d8 L
/*
--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络' F9 U I8 E' E$ p X' l) ]
--datadir 区块链数据存储目录! f' X( a" c) Z4 _
--networkid 网络标识,私有链取一个大于4的随意的值9 A; r! ?% |: u
--rpc 启用ipc服务,默认端口号8545
--rpcapi 表示可以通过ipc调用的对象
--rpcaddr ipc监听地址,默认为127.0.0.1,只能本地访问3 Q1 @$ M1 n+ }! D! p6 B" n
console 打开一个可交互的javascript环境 e1 t. g }& Q, Y% k" _4 T! @
更多参数:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options
*/
挖矿以及转账
//创建coinbase账户
personal.newAccount("coinbase")' \$ E, }* Z- Y; W0 l0 L
//查看账户列表! b L) k! A4 d. J2 B5 |, `
eth.accounts
//开始挖矿
miner.start()
//继续挖矿,不要停~# I& k+ M5 g! h2 K
挖矿一段时间之后,再打开一个shell通过ipc连接到刚才的服务% ?' G4 g4 X/ O+ D% C
geth attach ipc:/home/blockChain/data/00/geth.ipc" @, o3 L4 i3 ^9 f4 _' _
//查看coinbase账户余额
baseAccount = eth.accounts[0]2 U; M2 }# _9 c1 e: ^# ?# ?1 {! l
num = eth.getBalance(baseAccount)- U5 X% j+ ^0 P
//换算单位为eth
web3.fromWei(num)
//新建一个账户) V5 L' p( [) j3 u6 U$ k/ ?( ~
personal.newAccount("account")
//查看新建账户的余额
account1 = eth.accounts[1]/ V% D+ T9 U H* f
eth.getBalance(account1)
//从coinbase账户转给account1账户1eth
personal.unlockAccount(baseAccount ,"coinbase")
eth.sendTransaction({from : baseAccount, to : account1 , value : web3.toWei(1,"ether")})
//观察挖矿shell的输出,等待交易打包完成后,查询account1的账户余额4 O5 S7 f( g% P/ B
eth.getBalance(account1)
提交转账之后,观察挖矿shell的输出,会出现一条打包转账交易的记录,等待新的区块继续生成的时候,account1 账户的余额才会更新。 Q* y2 C: I0 K9 z
如果交易很久之后才能被确认,很有可能是服务器性能不足导致的。/ G* g N# O; x5 g
通过mist客户端访问私链# i V: G7 v, x9 x
从以太坊爱好者或者官网,下载mist客户端:http://ethfans.org/wikis/Mist-Mirror3 v" I4 D9 R9 k3 K8 u; L$ ]
安装完成之后,找到mist安装目录 C:\Program Files\Mist,双击mist启动。
然后打开cmd,并切换到mist目录,执行5 q: c% S1 P+ R5 h
mist --rpc http://ip_address:port: k( M) G: }. e$ k, Q+ @2 a/ L3 W
其中,ip_address是私链的服务器地址,port是该节点运行的端口号,默认为8545。
如果不先运行一个mist程序,直接通过命令行连接私链的话,会报错 Couldn’t start swarm process.