Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Geth搭建以太坊私链环境

温室小书生室d
154 1 0
安装Geth! X& B% l) N( R6 @0 E
https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu( t) e7 Z! Z3 A/ U
  1. sudo apt-get install software-properties-common$ x8 x- y+ Z2 a& n3 T5 G5 I
  2. sudo add-apt-repository -y ppa:ethereum/ethereum
    0 n, `9 _3 I6 v9 D" z0 {
  3. sudo apt-get update
    ) E1 j) O  m, U# W1 }
  4. sudo apt-get install ethereum
复制代码

: ?+ o! y+ U/ \2 n* Q2 B初始化创世区块
: @* y0 k# C+ m* I7 U! Qhttps://github.com/ethereum/go-ethereum2 w/ [7 g( [) m  i
chainId不能为0,否则交易会报错: insufficient funds for gas*price+value
7 Z' q6 F' n4 v* f, ~) b
  1. cd home
    9 l, P+ [) o: W) }6 [. ^$ D$ K( W
  2. mkdir blockChain&& cd blockChain2 O* I9 [8 M( W4 z3 F, p/ i4 x
  3. vim genesis.json
    ! U: }1 s7 F* U7 B) Z! X8 y
  4. //摘自官网
    . y1 U7 ^5 |$ n' Z$ b4 s& z. C
  5. {
    9 j1 w4 o2 F7 ?
  6.   "config": {
    + K3 t5 [! i( j6 \. q8 a
  7.         "chainId": 14,; p+ Q4 i, j! g5 I+ O+ `. E% k; W5 x
  8.         "homesteadBlock": 0,6 F! u5 {" c& R! f( S/ V- O
  9.         "eip155Block": 0,' R9 `' i# }4 H1 ?+ X& [! F$ ~+ J7 ?3 _* d
  10.         "eip158Block": 0. v: c+ Y3 [& X3 w) ^$ b2 b
  11.     },
    6 t9 W4 N7 C0 w4 v! o% V7 }
  12.   "alloc"      : {},: Z3 [# J. Z2 G) ~6 w( a/ a7 I& Z
  13.   "coinbase"   : "0x0000000000000000000000000000000000000000",8 f" ^* h/ n5 q  m
  14.   "difficulty" : "0x05000",0 W5 S! F5 |: e. g
  15.   "extraData"  : "",- k* t* a2 F  }2 ?5 I$ ?
  16.   "gasLimit"   : "0x2fefd8",( m: d  E% S' c" Y6 i1 t2 q
  17.   "nonce"      : "0x0000000000000042",
    - z5 D- o3 }7 w/ i
  18.   "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
    ! ~' _, q7 p+ j/ s( c' V" k/ _: i
  19.   "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",) y+ K6 B/ `8 }" b5 h5 R0 N
  20.   "timestamp"  : "0x00"% \9 l! ^/ n. y) e. u$ P$ ^) T
  21. }
复制代码
+ L- I) I" b, t) H/ D6 f
官方文档中的chainId为0,应该修改为非0的值,不然会导致 insufficient funds for gas * price + value
# k5 C8 O8 Y: R7 p  Y. f  qdifficulty表示挖矿的难度值,官方文档中为0x20000,由于测试机器配置低,修改为0x05000。! A( n( `, q. x# a
geth --datadir /home/blockChain/data/00 init genesis.json% g  F1 J% w# Q; ~
geth --networkid 14 --nodiscover --datadir /home/blockChain/data/00 --rpc --rpcapi net,eth,web3,personal --rpcaddr ip_address console
- ]: S# J3 I/ [- Q6 J6 r- Z' y2 V/*
- j5 P" c2 H: |$ W% u# U--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络, {6 {8 z, @" P6 H' Q6 I
--datadir 区块链数据存储目录
- n& N: w6 r$ E9 A/ o4 s" E" c! ]--networkid 网络标识,私有链取一个大于4的随意的值8 ]! n8 I& h1 b& `; |0 B% t
--rpc 启用ipc服务,默认端口号85459 Q* n& v$ \# n+ X+ N. q8 ]( I7 `
--rpcapi 表示可以通过ipc调用的对象* X: X# ~/ `* d# B" ]5 w
--rpcaddr ipc监听地址,默认为127.0.0.1,只能本地访问' ^% j0 Z0 |  Y/ |8 n* U% ?3 {
console 打开一个可交互的javascript环境
2 X, s! [+ f  P更多参数:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options3 ^  Q9 k6 y. R# Q( J
*/! u, k3 v. t) N" L0 U1 ?  R
挖矿以及转账
3 |7 B: k$ q" _% D  _0 j//创建coinbase账户5 `% w* _6 Y0 G0 y9 l
personal.newAccount("coinbase")
3 K& r, x8 W  {& G( g% Q( B//查看账户列表5 p9 Z  t6 t, i( |
eth.accounts
: T) s3 s7 R! N7 [  D1 e//开始挖矿
7 j, x* D3 H  Z: T* U$ W0 n' x3 I( ~miner.start(); v% @1 t, R4 ^! h5 u8 b8 t( F
//继续挖矿,不要停~
' W! K. b: t. o挖矿一段时间之后,再打开一个shell通过ipc连接到刚才的服务3 K" h, y- n/ T5 C& G
geth attach ipc:/home/blockChain/data/00/geth.ipc" l" J! p1 v* ]
//查看coinbase账户余额
5 f  G4 q6 d: W0 wbaseAccount = eth.accounts[0]% y, V9 `# X' K2 N, j3 F9 ?
num = eth.getBalance(baseAccount). F/ Q6 ]& B" ~, j
//换算单位为eth3 }  v; x/ t5 _+ j/ D. }: f* ?6 ]1 ?
web3.fromWei(num)- u) S: D. X; Z4 J5 a( m
//新建一个账户/ V4 H) }/ C" [- n+ m
personal.newAccount("account")
3 A, L$ P/ {1 ]' a4 k//查看新建账户的余额6 Y; A2 H: x, K" u  h5 n$ N. l9 c
account1 = eth.accounts[1]
+ n! m" h; c9 N  Ceth.getBalance(account1)
+ f1 S- ?% [! h- {; c% m$ g//从coinbase账户转给account1账户1eth
2 l( w7 _, |) ~, D% _7 g. q( qpersonal.unlockAccount(baseAccount ,"coinbase")) `4 b% e4 T4 w- H  _
eth.sendTransaction({from : baseAccount, to : account1 , value : web3.toWei(1,"ether")})
& M6 z" v9 C# T9 U: K//观察挖矿shell的输出,等待交易打包完成后,查询account1的账户余额' _: H" r! {+ Y" i! ~, t) m% r9 n
eth.getBalance(account1)
) {4 T: o8 c6 O$ S( _提交转账之后,观察挖矿shell的输出,会出现一条打包转账交易的记录,等待新的区块继续生成的时候,account1 账户的余额才会更新。
  E( ]1 n) r3 P! R$ o6 p: d/ x" @5 o( v
如果交易很久之后才能被确认,很有可能是服务器性能不足导致的。
7 U4 S; L" G% }( U通过mist客户端访问私链
, u/ y4 m+ C% X- ]% n; E7 Y, x! Q+ B5 M* ?从以太坊爱好者或者官网,下载mist客户端:http://ethfans.org/wikis/Mist-Mirror
* Z$ L. T$ Z% k9 w, ]1 D, L2 U安装完成之后,找到mist安装目录 C:\Program Files\Mist,双击mist启动。) S* v+ `* A5 [) O# Q- ~. r
然后打开cmd,并切换到mist目录,执行' p; a. X* k& T% B
mist --rpc http://ip_address:port! G; l0 I6 Q4 \$ |- L3 |" G
其中,ip_address是私链的服务器地址,port是该节点运行的端口号,默认为8545。% y1 \! q' e  W' Q( M5 r9 [% f
如果不先运行一个mist程序,直接通过命令行连接私链的话,会报错 Couldn’t start swarm process.
标签: Geth
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13