Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Geth搭建以太坊私链环境

温室小书生室d
113 1 0
安装Geth
9 _+ }5 a, }/ `" phttps://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu
( p1 A+ D3 c9 M) G$ S
  1. sudo apt-get install software-properties-common
    & b# A, |+ G$ k5 z
  2. sudo add-apt-repository -y ppa:ethereum/ethereum
    $ k: V9 M* T) Z( M! M8 r8 x
  3. sudo apt-get update: J; r: m3 J; J' @1 B2 N# t
  4. sudo apt-get install ethereum
复制代码
. H" c% ^4 K, s6 ]0 u3 U, h
初始化创世区块
; G, u; L# \& ]https://github.com/ethereum/go-ethereum
9 t9 P3 K7 h% ~# gchainId不能为0,否则交易会报错: insufficient funds for gas*price+value
1 q, a/ ^& O7 d5 X5 o
  1. cd home
    ( b8 J; k+ Y9 X+ |: i/ S
  2. mkdir blockChain&& cd blockChain
    1 a, D8 [  r% P: u  y" x
  3. vim genesis.json
    * N) E% V8 l" N$ F
  4. //摘自官网5 c0 g% G& J3 M; A- j4 A2 m
  5. {& B5 g  U# h' u6 e! G! S) p
  6.   "config": {# j; w5 t+ B& W: A
  7.         "chainId": 14,
    6 o, M: B% V, m/ r
  8.         "homesteadBlock": 0,# D" e# @2 v, K# b
  9.         "eip155Block": 0,2 m: G% d, T9 c0 d4 w& ?. L
  10.         "eip158Block": 0
    : t  y& l  Y- E+ X  w; p  z2 E- Z
  11.     },  D5 k: K4 \, j2 T4 {
  12.   "alloc"      : {},- F# h1 g6 j7 P
  13.   "coinbase"   : "0x0000000000000000000000000000000000000000",
    # G& O$ x% K$ q0 J( C4 d" ~
  14.   "difficulty" : "0x05000",9 k1 C" j/ _; }2 _! B: q0 f
  15.   "extraData"  : "",3 m7 V& n# n4 Y
  16.   "gasLimit"   : "0x2fefd8",# Z% f" ^( H/ a. u0 V" Z5 D
  17.   "nonce"      : "0x0000000000000042",/ j0 y- k, e3 g9 I
  18.   "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",  K) I) o, A  ^. I
  19.   "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    % a" {' e: n. O( ?" H1 I! S
  20.   "timestamp"  : "0x00"7 A% W& w3 N  c' v. D/ ]) C1 q  g
  21. }
复制代码
% v' v1 o4 o1 b% j/ s
官方文档中的chainId为0,应该修改为非0的值,不然会导致 insufficient funds for gas * price + value. p1 v4 S( A) ?" K9 u. T$ T
difficulty表示挖矿的难度值,官方文档中为0x20000,由于测试机器配置低,修改为0x05000。, F. o9 S1 l8 N: |1 z
geth --datadir /home/blockChain/data/00 init genesis.json
- L/ }- k( W1 D/ h2 Cgeth --networkid 14 --nodiscover --datadir /home/blockChain/data/00 --rpc --rpcapi net,eth,web3,personal --rpcaddr ip_address console
& ]$ G- ?# p% j/*
# n9 F3 E2 Z/ E) t7 p# F$ Y% y  k--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络! t3 ]1 S$ N- s& l" [3 g8 A
--datadir 区块链数据存储目录
  n' m; W( V5 H* q4 ^9 F7 j& B--networkid 网络标识,私有链取一个大于4的随意的值/ e7 Y3 |" c9 i5 g1 D, C( n
--rpc 启用ipc服务,默认端口号8545
( P, s2 B) s: Y--rpcapi 表示可以通过ipc调用的对象. ?) ~2 d2 [  h4 D% x( ^
--rpcaddr ipc监听地址,默认为127.0.0.1,只能本地访问- S' j* v, i9 ~
console 打开一个可交互的javascript环境7 I* D4 h. j/ S. {( k4 Z
更多参数:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options( _- O: D( m: V% L0 F
*/
4 U9 K. x- b" t' _% J# x: n挖矿以及转账  T2 E8 @# i8 J2 }6 K
//创建coinbase账户  A5 t7 n5 M' ?! p
personal.newAccount("coinbase")3 |9 O$ x6 d% T" s( h& ^5 b' J
//查看账户列表
5 U8 \" o' {2 [eth.accounts
2 u) L' o, f; `( a  S# i& T//开始挖矿
. S2 E: s- @5 y( |8 I" gminer.start()
. ?  B6 c5 d! {  e7 f4 o//继续挖矿,不要停~
$ X! C6 ~0 R( _7 ?4 x( u5 g挖矿一段时间之后,再打开一个shell通过ipc连接到刚才的服务
$ p1 f& y$ W0 m; P) d+ H: i. Vgeth attach ipc:/home/blockChain/data/00/geth.ipc4 c) r+ t0 ~. a) d& e
//查看coinbase账户余额
- j: x& a* k% T/ p* ^+ ^baseAccount = eth.accounts[0]0 c( n) C) r0 }$ i( C
num = eth.getBalance(baseAccount)
0 B) ^! @7 d, ], [8 l+ M//换算单位为eth% G1 ]4 f, k2 \3 {1 z8 H
web3.fromWei(num)
6 A0 }0 A6 t7 G; H* ]//新建一个账户
& S$ K! q/ m  {" h* G7 |personal.newAccount("account")$ b! k* T1 Q# D( K5 }2 C
//查看新建账户的余额
7 {" Q' |; H( q7 C$ Zaccount1 = eth.accounts[1]' Y1 i9 q! ]" S2 v/ W
eth.getBalance(account1)# S# A" N% L- b+ V. G" Y- P
//从coinbase账户转给account1账户1eth
0 }) A5 @. K' D5 ~/ ]2 Gpersonal.unlockAccount(baseAccount ,"coinbase")
- G4 e5 B& z. r: ^- O7 eeth.sendTransaction({from : baseAccount, to : account1 , value : web3.toWei(1,"ether")})9 c7 D$ |- |1 _* P0 `8 o
//观察挖矿shell的输出,等待交易打包完成后,查询account1的账户余额
; N0 h$ b( L0 F( @% H& reth.getBalance(account1)
9 K5 o& m9 w' B/ R( |. ^提交转账之后,观察挖矿shell的输出,会出现一条打包转账交易的记录,等待新的区块继续生成的时候,account1 账户的余额才会更新。4 [' n$ n* ^# |1 ^1 R* G3 y
5 n/ E* z" |4 j5 }4 M! {2 ?3 _% J
如果交易很久之后才能被确认,很有可能是服务器性能不足导致的。5 _' _- i) Y2 h( M: q  |: K; W
通过mist客户端访问私链$ t1 ~) J' {( I6 V* w
从以太坊爱好者或者官网,下载mist客户端:http://ethfans.org/wikis/Mist-Mirror
: Y$ R4 {6 @& Y" i, E, X1 K安装完成之后,找到mist安装目录 C:\Program Files\Mist,双击mist启动。
1 f: V& l2 D2 P! ?+ \然后打开cmd,并切换到mist目录,执行* G. k8 I5 Y) ?$ C
mist --rpc http://ip_address:port: W4 D. ~; B. O9 v
其中,ip_address是私链的服务器地址,port是该节点运行的端口号,默认为8545。
* O; n9 X, ]6 y* |/ y如果不先运行一个mist程序,直接通过命令行连接私链的话,会报错 Couldn’t start swarm process.
标签: Geth
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13