Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Geth搭建以太坊私链环境

温室小书生室d
130 1 0
安装Geth
+ [, b. V7 n- |) N- M# Thttps://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu4 l) l# [( @# ~4 x
  1. sudo apt-get install software-properties-common
    / x5 e1 e  C8 M1 O. o, ?. B
  2. sudo add-apt-repository -y ppa:ethereum/ethereum" |. @8 M% l: _) B$ d
  3. sudo apt-get update/ h* m6 C9 e! o; B
  4. sudo apt-get install ethereum
复制代码
+ m( T8 c0 n, ~: B7 _) c6 H  i
初始化创世区块
& O, u. h2 k$ }https://github.com/ethereum/go-ethereum
% z4 S. G: V( i+ y1 g; \chainId不能为0,否则交易会报错: insufficient funds for gas*price+value7 u+ w& j& i& K# S6 m
  1. cd home
    ' D# ?. X- p  a
  2. mkdir blockChain&& cd blockChain
    ! J# ~. J$ L, M* r2 r: P
  3. vim genesis.json
    & F0 {' p5 ]$ p- @& N  z2 s- O
  4. //摘自官网
    5 D/ q1 ?" o4 y8 Z1 V9 _4 x) \
  5. {! w+ S  M: d+ P( Y
  6.   "config": {
    7 T) @8 D- h+ A
  7.         "chainId": 14,
    # N8 J0 n9 e# p3 Q' @8 G/ _3 ?
  8.         "homesteadBlock": 0,6 o2 ]0 a8 N7 g5 h0 V
  9.         "eip155Block": 0,
    9 ~! B" J6 C7 N: @( t: k
  10.         "eip158Block": 0
    ( P4 R/ n9 d4 f1 `. [
  11.     },
    . i! k  u( M, C3 i* u9 [$ A
  12.   "alloc"      : {},
    # D1 P" ]7 {% @; S& z+ S' T# Z
  13.   "coinbase"   : "0x0000000000000000000000000000000000000000",
    % @& Z7 D3 L5 p2 A: C/ ?, i, C
  14.   "difficulty" : "0x05000",$ h1 [& t. ]! L% [7 m5 r7 p
  15.   "extraData"  : "",
    * _& M  m# f  h3 A/ Q( k
  16.   "gasLimit"   : "0x2fefd8",! ~* T7 U1 ]2 r7 z' m8 c
  17.   "nonce"      : "0x0000000000000042",
    % w% i  y' H8 ]* g/ \
  18.   "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",& D0 G0 p& k- k2 E
  19.   "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",% v* x* i3 ]  {5 W
  20.   "timestamp"  : "0x00"
    # o- r; \6 I# T. f
  21. }
复制代码

" Q. N0 V! F  T官方文档中的chainId为0,应该修改为非0的值,不然会导致 insufficient funds for gas * price + value; X; ?# r! _* Z% e9 V! j
difficulty表示挖矿的难度值,官方文档中为0x20000,由于测试机器配置低,修改为0x05000。
) v5 B1 A2 ?) Zgeth --datadir /home/blockChain/data/00 init genesis.json# l6 o; b; t% i8 @8 ]# w
geth --networkid 14 --nodiscover --datadir /home/blockChain/data/00 --rpc --rpcapi net,eth,web3,personal --rpcaddr ip_address console
4 s: e  V: R- W" L# Y/*: x) M& d3 }5 ~/ _
--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络
- H. v1 A7 t( p--datadir 区块链数据存储目录* f6 f2 w" C) X2 Q& P* @; f) i
--networkid 网络标识,私有链取一个大于4的随意的值# `- @9 Q! c- X
--rpc 启用ipc服务,默认端口号8545
5 V  P3 V/ e( i4 [# N* b1 I--rpcapi 表示可以通过ipc调用的对象4 p7 H; k2 u( B3 W$ V
--rpcaddr ipc监听地址,默认为127.0.0.1,只能本地访问
8 S  _: b; w2 j; @. econsole 打开一个可交互的javascript环境% c/ M7 i- a# v8 j& O
更多参数:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options: s, v/ O/ v! J' r
*/9 l' p" g9 \8 w1 ?6 `+ K
挖矿以及转账
1 U( M4 |( W7 S, k6 k  X5 a3 d//创建coinbase账户
% A/ d' @) f* M$ v3 k  `personal.newAccount("coinbase")
# F9 F% }& t: X, c//查看账户列表
) _; O0 Y! P2 A3 X3 F; X( r6 Peth.accounts
2 y# L* c8 b3 P( K6 R//开始挖矿
4 t9 T8 k; q( ^# `! M) |, Xminer.start()
1 c$ m$ g# M4 ^' F% e# a//继续挖矿,不要停~
  b8 b! R/ K5 Z- k挖矿一段时间之后,再打开一个shell通过ipc连接到刚才的服务
4 h3 H6 ]- H7 _9 t; g6 Kgeth attach ipc:/home/blockChain/data/00/geth.ipc
& Z7 H# U7 N/ A* g3 N8 l//查看coinbase账户余额
0 O' q2 \2 z1 I+ fbaseAccount = eth.accounts[0]
, _& V$ _- W, m) W7 X% }, b; T+ r" ?num = eth.getBalance(baseAccount); ?0 p' `# q3 ]2 ~3 n
//换算单位为eth
" z6 d% l+ z- G& Pweb3.fromWei(num)
% \; L0 s0 R6 I  x' |3 [, W7 L1 s% e//新建一个账户; ^; s) \! t  \5 m4 n& t
personal.newAccount("account")* f0 A0 G. s3 a% S  B( P: W' Z
//查看新建账户的余额
+ m4 p  P+ F" {- i( t% U0 `# C0 ^account1 = eth.accounts[1]
) x" Q$ K* g3 d9 reth.getBalance(account1)
3 R% s- Z+ c9 r) P7 U' ^. a//从coinbase账户转给account1账户1eth7 f3 J- P& N& g0 S, t2 V  J
personal.unlockAccount(baseAccount ,"coinbase")0 T& i+ c5 q* _( O+ v& e
eth.sendTransaction({from : baseAccount, to : account1 , value : web3.toWei(1,"ether")})
$ ~; p- b$ s) [6 h9 _/ I//观察挖矿shell的输出,等待交易打包完成后,查询account1的账户余额& b8 Q, B; o% d! z+ h- m0 w
eth.getBalance(account1)
% a/ W6 Y) Z+ {# I4 X% z提交转账之后,观察挖矿shell的输出,会出现一条打包转账交易的记录,等待新的区块继续生成的时候,account1 账户的余额才会更新。9 u% H6 ]% X1 ^

$ L" i, q7 C$ k如果交易很久之后才能被确认,很有可能是服务器性能不足导致的。
3 p8 N: q* @' r. f# f: Y/ M通过mist客户端访问私链
9 A% @7 O- O# v9 Q$ P& R从以太坊爱好者或者官网,下载mist客户端:http://ethfans.org/wikis/Mist-Mirror
8 ?5 Y( u8 I3 y9 L6 |安装完成之后,找到mist安装目录 C:\Program Files\Mist,双击mist启动。
0 ^( V9 V  }  a3 D% k/ s4 T! \然后打开cmd,并切换到mist目录,执行+ O7 {7 X. Q+ N+ z& y  S7 h
mist --rpc http://ip_address:port2 z) M% b9 b% c6 S" z8 C. ^
其中,ip_address是私链的服务器地址,port是该节点运行的端口号,默认为8545。) {8 O+ z! z$ q( i7 y
如果不先运行一个mist程序,直接通过命令行连接私链的话,会报错 Couldn’t start swarm process.
标签: Geth
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13