https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu
- sudo apt-get install software-properties-common
- sudo add-apt-repository -y ppa:ethereum/ethereum
- sudo apt-get update! G1 v" R$ ^( I
- sudo apt-get install ethereum
初始化创世区块& u3 m8 _- @% w& \6 G0 Q( X% C
https://github.com/ethereum/go-ethereum
chainId不能为0,否则交易会报错: insufficient funds for gas*price+value5 n q1 L3 c, `: b" B
- cd home4 V$ N& w! w3 }" P6 Q7 u7 Y) _
- mkdir blockChain&& cd blockChain4 }, X' x8 G* D) p1 y$ }$ ^
- vim genesis.json
- //摘自官网9 f0 R4 k I' V P
- {
- "config": {
- "chainId": 14,8 N: n% L/ [( k. y5 [0 f
- "homesteadBlock": 0,
- "eip155Block": 0,) Y: @/ R! y0 G) |5 [9 X8 l) H% m* }8 r
- "eip158Block": 00 b2 p5 ?; B" x
- },9 y8 F) a" \- J- l
- "alloc" : {},5 a- D6 s+ [. @2 C( Y/ U; ^
- "coinbase" : "0x0000000000000000000000000000000000000000",: m: L0 S! G2 o1 o9 C
- "difficulty" : "0x05000",0 Y3 ^1 t2 M( n
- "extraData" : "",6 w; x3 u5 n" g! f( Z" ^" c. w
- "gasLimit" : "0x2fefd8",
- "nonce" : "0x0000000000000042",
- "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
- "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",# f$ a3 _8 ?; A5 V/ i
- "timestamp" : "0x00"5 X# k" C# w5 k: L2 S* G9 ]5 s
- }
官方文档中的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 console
/*$ W: s6 {; x9 N2 s' K
--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络1 @2 D. S' E/ c. x3 x
--datadir 区块链数据存储目录
--networkid 网络标识,私有链取一个大于4的随意的值
--rpc 启用ipc服务,默认端口号8545, `3 z5 Q' r0 W- R
--rpcapi 表示可以通过ipc调用的对象: ~% h) C9 ~2 T8 |, g" @+ z
--rpcaddr ipc监听地址,默认为127.0.0.1,只能本地访问. t$ g2 T8 h' K+ y/ z& M$ O
console 打开一个可交互的javascript环境
更多参数:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options
*/
挖矿以及转账1 I. t; R; _) P- ^9 L
//创建coinbase账户- I3 _" m0 a2 e8 C
personal.newAccount("coinbase")
//查看账户列表2 A5 m# F3 A. i V
eth.accounts
//开始挖矿
miner.start()! f7 G% i7 T# g h; Y$ q
//继续挖矿,不要停~
挖矿一段时间之后,再打开一个shell通过ipc连接到刚才的服务
geth attach ipc:/home/blockChain/data/00/geth.ipc. `% Q5 j0 w0 ~0 ^
//查看coinbase账户余额
baseAccount = eth.accounts[0]
num = eth.getBalance(baseAccount)
//换算单位为eth
web3.fromWei(num)0 B- _ D& T5 u
//新建一个账户% t# x+ ]& u1 B. S
personal.newAccount("account")
//查看新建账户的余额. D8 _( C$ P- } G4 H2 t
account1 = eth.accounts[1]
eth.getBalance(account1)8 y* e, e' ]. a- u4 @9 q0 @8 {1 J
//从coinbase账户转给account1账户1eth
personal.unlockAccount(baseAccount ,"coinbase")
eth.sendTransaction({from : baseAccount, to : account1 , value : web3.toWei(1,"ether")})
//观察挖矿shell的输出,等待交易打包完成后,查询account1的账户余额
eth.getBalance(account1) a8 U& E0 s2 }9 p
提交转账之后,观察挖矿shell的输出,会出现一条打包转账交易的记录,等待新的区块继续生成的时候,account1 账户的余额才会更新。
如果交易很久之后才能被确认,很有可能是服务器性能不足导致的。
通过mist客户端访问私链0 T0 e9 L8 E# m# U$ W6 ~: i1 b0 B: X
从以太坊爱好者或者官网,下载mist客户端:http://ethfans.org/wikis/Mist-Mirror
安装完成之后,找到mist安装目录 C:\Program Files\Mist,双击mist启动。
然后打开cmd,并切换到mist目录,执行$ S4 J9 ^( Q9 Y* j
mist --rpc http://ip_address:port
其中,ip_address是私链的服务器地址,port是该节点运行的端口号,默认为8545。
如果不先运行一个mist程序,直接通过命令行连接私链的话,会报错 Couldn’t start swarm process.