Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Geth搭建以太坊私链环境

温室小书生室d
152 1 0
安装Geth' C4 H; K5 u5 U6 g# |$ W5 _$ h1 I
https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu
3 r6 T+ W; K5 p3 [+ c
  1. sudo apt-get install software-properties-common
    4 s) I& K1 M7 }5 M6 ~! f1 t" f$ s& A4 Y
  2. sudo add-apt-repository -y ppa:ethereum/ethereum
    1 C/ g0 E5 t* X: \& A! j/ e
  3. sudo apt-get update! G1 v" R$ ^( I
  4. sudo apt-get install ethereum
复制代码

4 K- R' n* P! G% k0 T5 K9 \7 l初始化创世区块& u3 m8 _- @% w& \6 G0 Q( X% C
https://github.com/ethereum/go-ethereum
) R: @' \& @) R8 X% \- A2 U) ~chainId不能为0,否则交易会报错: insufficient funds for gas*price+value5 n  q1 L3 c, `: b" B
  1. cd home4 V$ N& w! w3 }" P6 Q7 u7 Y) _
  2. mkdir blockChain&& cd blockChain4 }, X' x8 G* D) p1 y$ }$ ^
  3. vim genesis.json
    0 B* [! W  L8 v( |. x5 v% R
  4. //摘自官网9 f0 R4 k  I' V  P
  5. {
    ; E+ V1 d/ S* S0 ~/ ^) c! q
  6.   "config": {
    * a$ O& m% B# j" z* @
  7.         "chainId": 14,8 N: n% L/ [( k. y5 [0 f
  8.         "homesteadBlock": 0,
    2 x- D" |0 t- k3 y) A" C% S) @$ j
  9.         "eip155Block": 0,) Y: @/ R! y0 G) |5 [9 X8 l) H% m* }8 r
  10.         "eip158Block": 00 b2 p5 ?; B" x
  11.     },9 y8 F) a" \- J- l
  12.   "alloc"      : {},5 a- D6 s+ [. @2 C( Y/ U; ^
  13.   "coinbase"   : "0x0000000000000000000000000000000000000000",: m: L0 S! G2 o1 o9 C
  14.   "difficulty" : "0x05000",0 Y3 ^1 t2 M( n
  15.   "extraData"  : "",6 w; x3 u5 n" g! f( Z" ^" c. w
  16.   "gasLimit"   : "0x2fefd8",
    # J' T" P0 X$ I, M# L0 E
  17.   "nonce"      : "0x0000000000000042",
    - h9 F0 B2 W) }
  18.   "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
    8 d8 ^4 ?, M" S9 N+ S- q
  19.   "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",# f$ a3 _8 ?; A5 V/ i
  20.   "timestamp"  : "0x00"5 X# k" C# w5 k: L2 S* G9 ]5 s
  21. }
复制代码

& k8 ~& t6 x8 n3 g. N官方文档中的chainId为0,应该修改为非0的值,不然会导致 insufficient funds for gas * price + value
% w1 U  }" r' V6 M- edifficulty表示挖矿的难度值,官方文档中为0x20000,由于测试机器配置低,修改为0x05000。
4 F1 k) I( n4 N% \geth --datadir /home/blockChain/data/00 init genesis.json
, D7 C/ v$ |) c. j* lgeth --networkid 14 --nodiscover --datadir /home/blockChain/data/00 --rpc --rpcapi net,eth,web3,personal --rpcaddr ip_address console
1 t/ q# W4 j7 h% ?. n/*$ W: s6 {; x9 N2 s' K
--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络1 @2 D. S' E/ c. x3 x
--datadir 区块链数据存储目录
; T) b3 K" p) ?4 y+ N. D& `--networkid 网络标识,私有链取一个大于4的随意的值
# Q8 S/ m0 D: z  y$ h& a7 L--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环境
; \# U7 X! Z/ Z- C- `: P4 f更多参数:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options
2 P6 E  Y( ]& f3 n+ o2 G5 \. o*/
1 p& t$ ^6 y$ k* ~; ?5 @挖矿以及转账1 I. t; R; _) P- ^9 L
//创建coinbase账户- I3 _" m0 a2 e8 C
personal.newAccount("coinbase")
7 e' A7 r4 o7 `2 T//查看账户列表2 A5 m# F3 A. i  V
eth.accounts
! z1 h6 c  _% Z//开始挖矿
# R( B0 d& U% U% Z( x, B  Gminer.start()! f7 G% i7 T# g  h; Y$ q
//继续挖矿,不要停~
; z3 Y- }9 B9 n& m挖矿一段时间之后,再打开一个shell通过ipc连接到刚才的服务
4 ]) ]6 A! j% |. F& Xgeth attach ipc:/home/blockChain/data/00/geth.ipc. `% Q5 j0 w0 ~0 ^
//查看coinbase账户余额
. o$ y: G- x, `0 ]+ H8 PbaseAccount = eth.accounts[0]
- S$ I: j5 u6 qnum = eth.getBalance(baseAccount)
/ F; h3 D* ?& e//换算单位为eth
6 g5 |" F1 i5 [  ]web3.fromWei(num)0 B- _  D& T5 u
//新建一个账户% t# x+ ]& u1 B. S
personal.newAccount("account")
- }1 p4 S* H5 _. a9 d- K0 C//查看新建账户的余额. D8 _( C$ P- }  G4 H2 t
account1 = eth.accounts[1]
6 l% T, y; M1 H3 t) D6 z1 Q- keth.getBalance(account1)8 y* e, e' ]. a- u4 @9 q0 @8 {1 J
//从coinbase账户转给account1账户1eth
2 D, r$ p' F( S- Z4 ~$ x; C( }3 ~personal.unlockAccount(baseAccount ,"coinbase")
# O( G3 A4 W, K. f; }eth.sendTransaction({from : baseAccount, to : account1 , value : web3.toWei(1,"ether")})
' Z* |. S/ a# n* U6 Y//观察挖矿shell的输出,等待交易打包完成后,查询account1的账户余额
" k  u" x' k7 H0 E: Geth.getBalance(account1)  a8 U& E0 s2 }9 p
提交转账之后,观察挖矿shell的输出,会出现一条打包转账交易的记录,等待新的区块继续生成的时候,account1 账户的余额才会更新。
# T1 n+ F- P# W3 l
. v# V& X" y' \7 d如果交易很久之后才能被确认,很有可能是服务器性能不足导致的。
" u, T: O( v" L% f通过mist客户端访问私链0 T0 e9 L8 E# m# U$ W6 ~: i1 b0 B: X
从以太坊爱好者或者官网,下载mist客户端:http://ethfans.org/wikis/Mist-Mirror
' a9 C4 _$ b& z9 R; ~安装完成之后,找到mist安装目录 C:\Program Files\Mist,双击mist启动。
& d1 s/ c' Z1 R1 _7 N$ l4 ~- h# H然后打开cmd,并切换到mist目录,执行$ S4 J9 ^( Q9 Y* j
mist --rpc http://ip_address:port
, l/ A' Y9 u/ t' `其中,ip_address是私链的服务器地址,port是该节点运行的端口号,默认为8545。
/ U) J4 T8 G. v* Q如果不先运行一个mist程序,直接通过命令行连接私链的话,会报错 Couldn’t start swarm process.
标签: Geth
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

温室小书生室d 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13