Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Geth搭建以太坊私链环境

温室小书生室d
95 1 0
安装Geth! S0 l7 q& `( h; E* s( B
https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu1 D; U4 j! c& @* d& ^+ O
  1. sudo apt-get install software-properties-common/ m! m, J2 `# h- C, J6 _8 B
  2. sudo add-apt-repository -y ppa:ethereum/ethereum
    0 ^0 V) w6 v1 S5 p' {) @& @) J2 B
  3. sudo apt-get update
    & V" a" _* k3 ]+ |; l9 I& `% d
  4. sudo apt-get install ethereum
复制代码

) v6 y7 d7 Z) U$ M5 F# ^3 D初始化创世区块
( T+ H8 x2 ?# {4 [  |( i  X- B$ shttps://github.com/ethereum/go-ethereum
& r( S( e% H) T, o; c3 F1 _- dchainId不能为0,否则交易会报错: insufficient funds for gas*price+value
1 c& [9 }, M$ ?! ?+ m( ?. f
  1. cd home
    $ m) k* H7 A1 A1 F" q
  2. mkdir blockChain&& cd blockChain# r. S- C/ Q2 V' R
  3. vim genesis.json
    8 c2 z0 L5 ^8 S5 P- I. P
  4. //摘自官网
    ' q# _' y4 R# H* D7 F0 e3 n$ B) S( E
  5. {
    1 |! Z( n* T/ t* [) R3 g0 z- W) P! t
  6.   "config": {
    # G4 C, O4 H2 \: Q
  7.         "chainId": 14,
    1 l9 v! U8 b/ c1 r
  8.         "homesteadBlock": 0,1 J; k, E4 W  X# |$ `1 K# P
  9.         "eip155Block": 0,. m# b7 {5 T& k: G% D9 N
  10.         "eip158Block": 0# l; a. I' Y/ d
  11.     },
    / k% x+ O" U6 j( A% H5 J
  12.   "alloc"      : {},
    ( A, w7 a: Y* E
  13.   "coinbase"   : "0x0000000000000000000000000000000000000000",
    - p8 y3 {) d2 L5 G
  14.   "difficulty" : "0x05000",1 n3 n' ~+ ?$ G+ w& ?! y$ X
  15.   "extraData"  : "",. c8 M. G7 `) l: T
  16.   "gasLimit"   : "0x2fefd8",! ]# `0 B8 G% ^: K
  17.   "nonce"      : "0x0000000000000042",
    # c0 m! X3 g; i, z) R" }+ \& D! v
  18.   "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",$ C$ Y, W2 q/ c. b
  19.   "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    5 ]% F4 E+ y" l- n6 I
  20.   "timestamp"  : "0x00"
    ! x1 j5 ]1 H" ?- i! C. G* v
  21. }
复制代码

, C3 F( e: @1 e1 A5 |/ g/ m' j官方文档中的chainId为0,应该修改为非0的值,不然会导致 insufficient funds for gas * price + value
% j/ Z# _2 d7 r& ]difficulty表示挖矿的难度值,官方文档中为0x20000,由于测试机器配置低,修改为0x05000。
. ?8 f& k: `- E1 q# `$ q4 @$ u3 ngeth --datadir /home/blockChain/data/00 init genesis.json! x) }/ o7 K! E
geth --networkid 14 --nodiscover --datadir /home/blockChain/data/00 --rpc --rpcapi net,eth,web3,personal --rpcaddr ip_address console
7 ?9 L; U, ?0 g/*6 m+ V" d# y& n% X/ ]
--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络
% S- v9 `( k& Z0 e* U7 M6 X% x: Z--datadir 区块链数据存储目录
, v5 w2 `, ~, s$ O# m--networkid 网络标识,私有链取一个大于4的随意的值& q8 ~" w/ X: M, m- D- G
--rpc 启用ipc服务,默认端口号8545
% Z/ {; t1 s. V: Z- |6 z3 y% _--rpcapi 表示可以通过ipc调用的对象, p2 b/ \9 D! O+ R% M- c' c6 S& J( q  e
--rpcaddr ipc监听地址,默认为127.0.0.1,只能本地访问
2 n+ a8 Q+ d, {) B; \$ Xconsole 打开一个可交互的javascript环境5 O* i1 R2 I: S9 \8 j
更多参数:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options
; R8 E4 _& K0 y& Z6 `1 F*/* r* W# s. }' U& C9 J
挖矿以及转账6 B* N* @2 F* Z, C
//创建coinbase账户9 S  n- w  ~8 D) ^5 y
personal.newAccount("coinbase")% \! N4 E7 z% Q6 D9 Q$ S
//查看账户列表
# R# g6 q+ ?3 ]eth.accounts
( |) [2 Y9 M, O& E* C//开始挖矿
, l' v* ^5 A! B( f* ]9 hminer.start()- Z, Q" X( s& z! X# r' ~
//继续挖矿,不要停~3 J' v1 g+ g' F3 e& g! W- W& ]# I
挖矿一段时间之后,再打开一个shell通过ipc连接到刚才的服务
) _% I! x% H" v' u( r4 x. Wgeth attach ipc:/home/blockChain/data/00/geth.ipc6 O/ x' A: q$ \4 q6 p" u: |7 ?
//查看coinbase账户余额2 U% z& {1 }; c0 o9 B8 Q" w
baseAccount = eth.accounts[0]
" m. \2 o2 v, E6 @num = eth.getBalance(baseAccount), g6 x* U. t. Q! Z
//换算单位为eth
3 G2 [; a0 f! L5 Qweb3.fromWei(num)
3 @4 [' o5 A- r5 }6 J& Q//新建一个账户
: E; T) a/ {9 C2 ^  j) rpersonal.newAccount("account")
6 l3 E. V/ o6 M. d) T* _0 Z//查看新建账户的余额
( L, D7 o9 N; C/ ?account1 = eth.accounts[1]0 s3 |) H0 }$ n* ?7 O  K& L
eth.getBalance(account1)- ^3 ?* K4 K' O* q/ T. A: `3 t. ^& y
//从coinbase账户转给account1账户1eth3 G  {. @! b( n+ L/ m4 q
personal.unlockAccount(baseAccount ,"coinbase")
5 O8 [, g- J; f& Peth.sendTransaction({from : baseAccount, to : account1 , value : web3.toWei(1,"ether")})
- C+ }+ q( [- E7 L, J$ a# T' O//观察挖矿shell的输出,等待交易打包完成后,查询account1的账户余额8 ?2 z! q' D6 [5 I* z
eth.getBalance(account1)2 ?  B2 O) O+ X5 W6 v  h7 N
提交转账之后,观察挖矿shell的输出,会出现一条打包转账交易的记录,等待新的区块继续生成的时候,account1 账户的余额才会更新。
* |4 P; O0 X6 D) `# Y% S3 r& S& Q0 z; A- H
如果交易很久之后才能被确认,很有可能是服务器性能不足导致的。0 @, q! Y# q: s1 i2 p
通过mist客户端访问私链4 E0 |! y! V2 N+ v
从以太坊爱好者或者官网,下载mist客户端:http://ethfans.org/wikis/Mist-Mirror
7 \( f$ B9 r* {4 L/ i* m% E安装完成之后,找到mist安装目录 C:\Program Files\Mist,双击mist启动。
1 V% M) I+ u. H0 A- g! J% [然后打开cmd,并切换到mist目录,执行
& d9 P( J& Q' \8 c/ o7 emist --rpc http://ip_address:port; T* K, T/ H+ @" L8 K
其中,ip_address是私链的服务器地址,port是该节点运行的端口号,默认为8545。- G0 R* c# T! I' L
如果不先运行一个mist程序,直接通过命令行连接私链的话,会报错 Couldn’t start swarm process.
标签: Geth
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13