Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Geth搭建以太坊私链环境

温室小书生室d
100 1 0
安装Geth
& D5 }! Q  T5 T- u8 z2 ~! nhttps://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu( k( H( Z" h; z" Z, C4 \( D9 G. B
  1. sudo apt-get install software-properties-common, I; e0 C) _4 [+ Y4 P2 T" ]
  2. sudo add-apt-repository -y ppa:ethereum/ethereum! Y2 R2 E" \% r  B
  3. sudo apt-get update0 E. |7 m1 ]( l- C
  4. sudo apt-get install ethereum
复制代码
5 b' i5 t# l- s* m5 Y/ e' q0 n! m
初始化创世区块
! K4 b6 Z; Y. k) J3 b6 c+ Thttps://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
  1. cd home
    , D6 d* p+ d, i1 K5 `
  2. mkdir blockChain&& cd blockChain
    - s# ]7 k6 X2 i( r8 x0 \7 ^9 c
  3. vim genesis.json
    + @0 V# D4 t* g8 N
  4. //摘自官网
      i" W) |0 ?; e9 ^3 c2 o
  5. {# X" z4 D) \8 Z2 c1 r
  6.   "config": {
    # j, w& p/ r3 b9 l
  7.         "chainId": 14,
    8 y$ B$ g# U1 p# O
  8.         "homesteadBlock": 0,4 l! p/ F/ z3 D0 a/ C
  9.         "eip155Block": 0,
    : W. K0 |; }9 Y
  10.         "eip158Block": 0
    ( F* ^6 Z" T( F
  11.     },
    2 b$ }" [& q) X
  12.   "alloc"      : {},, P7 @5 K/ R' v5 |0 `5 e
  13.   "coinbase"   : "0x0000000000000000000000000000000000000000",
    & r1 k3 Y) m+ _8 |; N/ }4 i
  14.   "difficulty" : "0x05000",
    ( x/ l- ]& A' l" I/ o
  15.   "extraData"  : "",4 f7 f: ?. {$ w' L  m
  16.   "gasLimit"   : "0x2fefd8",
    0 j$ W& N% N+ A, ~( ^/ I
  17.   "nonce"      : "0x0000000000000042",9 W/ n6 i: u) A' ^6 ?
  18.   "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",$ Y: q" _" ]# i0 v: ^
  19.   "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",6 Q( q: h1 U7 W6 f  V, I" B
  20.   "timestamp"  : "0x00"1 e3 c5 z$ o, y, u- d* N5 O9 r
  21. }
复制代码
  ]" m6 X- d1 _
官方文档中的chainId为0,应该修改为非0的值,不然会导致 insufficient funds for gas * price + value
: A+ l9 e! o! @9 k7 d% idifficulty表示挖矿的难度值,官方文档中为0x20000,由于测试机器配置低,修改为0x05000。
5 ?7 ]" C) o  N8 k& `, f- l/ ugeth --datadir /home/blockChain/data/00 init genesis.json
/ s5 B  S: A$ ^, Ygeth --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
/*
8 ^. X1 J1 Q/ k! A( S  m3 E. }--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
) _. B  W% W! F% E--rpcapi 表示可以通过ipc调用的对象
3 l  ~7 M, ]" V' T--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
+ A3 w) w/ i9 n5 w3 v*/
( K; X; o! f* G$ `) B+ q: M! D挖矿以及转账
2 O' {% p& S( T//创建coinbase账户
# u8 D! L( p, B* \. Ppersonal.newAccount("coinbase")' \$ E, }* Z- Y; W0 l0 L
//查看账户列表! b  L) k! A4 d. J2 B5 |, `
eth.accounts
% K  t8 e9 O3 j  o2 s//开始挖矿
: C2 ~; `  [% Ominer.start()
3 g6 l$ |0 v2 @% ^- F! I7 |9 V//继续挖矿,不要停~# 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账户余额
* B, r* I: H/ K& q8 Q' IbaseAccount = eth.accounts[0]2 U; M2 }# _9 c1 e: ^# ?# ?1 {! l
num = eth.getBalance(baseAccount)- U5 X% j+ ^0 P
//换算单位为eth
/ f) }  |/ X, P, y& oweb3.fromWei(num)
! l" W5 m, j! M* b7 t//新建一个账户) V5 L' p( [) j3 u6 U$ k/ ?( ~
personal.newAccount("account")
$ {8 ^, Y, C6 d) S$ ?//查看新建账户的余额
  Q. ~( M0 [. w7 Z& V7 faccount1 = eth.accounts[1]/ V% D+ T9 U  H* f
eth.getBalance(account1)
3 ^7 Q" u  a3 y//从coinbase账户转给account1账户1eth
+ r- M1 [9 [- {: vpersonal.unlockAccount(baseAccount ,"coinbase")
7 h# o6 k+ ~( s  r6 R0 A" f% meth.sendTransaction({from : baseAccount, to : account1 , value : web3.toWei(1,"ether")})
  S0 _4 s0 o  |0 Q" c& J//观察挖矿shell的输出,等待交易打包完成后,查询account1的账户余额4 O5 S7 f( g% P/ B
eth.getBalance(account1)
& V: M7 R1 Z! }. Y3 X! `提交转账之后,观察挖矿shell的输出,会出现一条打包转账交易的记录,等待新的区块继续生成的时候,account1 账户的余额才会更新。  Q* y2 C: I0 K9 z

+ [. |& R( ^% G. B" a+ a: H' r如果交易很久之后才能被确认,很有可能是服务器性能不足导致的。/ 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启动。
% o; d9 j) L7 f) j+ E" Z" h然后打开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。
$ a$ u' p2 i& Q7 N如果不先运行一个mist程序,直接通过命令行连接私链的话,会报错 Couldn’t start swarm process.
标签: Geth
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13