Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Geth搭建以太坊私链环境

温室小书生室d
183 1 0
安装Geth
" f* a9 r% T! l" B- y, @https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu
+ D/ E: l7 n+ h
  1. sudo apt-get install software-properties-common
    ; c5 w! Z1 R) o0 Q
  2. sudo add-apt-repository -y ppa:ethereum/ethereum
    & [# \+ n  Z, I% Z
  3. sudo apt-get update
    6 V! \+ |, `, b4 o- h( O& ^
  4. sudo apt-get install ethereum
复制代码
. T3 |, l- P1 r' ~3 \
初始化创世区块7 s: V( Q9 ~) q+ Y8 D
https://github.com/ethereum/go-ethereum' f2 _) B7 Z5 n
chainId不能为0,否则交易会报错: insufficient funds for gas*price+value
2 `: o0 Z. X" H- D  X
  1. cd home
    % I$ }6 Y/ L. }  W/ U- _2 }/ C
  2. mkdir blockChain&& cd blockChain
    ! C9 ^$ c5 a( l5 j4 m
  3. vim genesis.json
      ?4 b& M* l8 K
  4. //摘自官网
    % y. J5 X. H" M5 S9 k/ F
  5. {
    ' F5 `6 R. b+ ?- ^$ L" p
  6.   "config": {
    6 x, J- @; A* b9 u+ Z& m- p
  7.         "chainId": 14,
    # N% E5 E" x1 L6 f* s
  8.         "homesteadBlock": 0,
      R" D# N2 d+ o! M/ E9 v
  9.         "eip155Block": 0,
    $ Q. a( `6 C* v) O+ i2 N
  10.         "eip158Block": 0
    ' C- c! @& N6 z4 Q2 I
  11.     },8 U0 P) K8 J9 T+ u0 s# f( H* Q
  12.   "alloc"      : {},
    % U4 P- j8 q# x8 f) c
  13.   "coinbase"   : "0x0000000000000000000000000000000000000000",
    ' [  R; M* M% w, ]
  14.   "difficulty" : "0x05000",
    0 f- b; @. }" v' f( e) g
  15.   "extraData"  : "",' d* [, v1 g. ]. L
  16.   "gasLimit"   : "0x2fefd8",
    0 A' B: j. L4 ]3 A  I
  17.   "nonce"      : "0x0000000000000042",
    * S8 ?5 y/ {2 w7 f5 e1 E) S8 x
  18.   "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",# b; w3 y3 C' f+ J; R! g
  19.   "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",8 x/ X$ J! y3 ]# o3 ^
  20.   "timestamp"  : "0x00"
    9 c! [/ Z* P9 d" R
  21. }
复制代码

% P5 K8 b4 ]; a官方文档中的chainId为0,应该修改为非0的值,不然会导致 insufficient funds for gas * price + value' O0 H+ y; o; j
difficulty表示挖矿的难度值,官方文档中为0x20000,由于测试机器配置低,修改为0x05000。: _& |6 V, F- A- s6 i  K0 A$ `
geth --datadir /home/blockChain/data/00 init genesis.json
' M4 ^' M4 T4 u& Ggeth --networkid 14 --nodiscover --datadir /home/blockChain/data/00 --rpc --rpcapi net,eth,web3,personal --rpcaddr ip_address console
" R5 u6 ^! h. M" ?. [  i/*
0 a) W* m; C: f, R+ l' W--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络
2 C6 K3 ~. p! j+ g4 o* K--datadir 区块链数据存储目录
% O+ q8 l$ G1 O  P# ^; b--networkid 网络标识,私有链取一个大于4的随意的值
1 F9 O; ~0 d3 t--rpc 启用ipc服务,默认端口号8545
) }' j: M9 ^( J7 j" o- X--rpcapi 表示可以通过ipc调用的对象
4 u8 ?4 y& R9 h% ~; I9 m- E2 T! j--rpcaddr ipc监听地址,默认为127.0.0.1,只能本地访问
+ c6 H. B+ m2 t7 J: b% b) bconsole 打开一个可交互的javascript环境6 I' _7 {; J& i) D# X) z
更多参数:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options+ l5 O. e1 ?) S/ m
*/
+ W' ?, y. R' o/ k挖矿以及转账" `" H* v. ]& e; `  q
//创建coinbase账户
& N2 i) x4 ~* M5 g  c: G% kpersonal.newAccount("coinbase")3 Y3 f' M9 }$ x+ t' c  ~) C
//查看账户列表
: D% M$ j  q3 o. y9 f5 Yeth.accounts% v- b/ f% {0 F, I- B" D- ~
//开始挖矿
2 `# U0 l: y  {) g  ^6 X0 Hminer.start()
3 ?+ j# H8 u; ~' ^9 q. e' `//继续挖矿,不要停~
( n: c1 f/ n+ s% E1 J( n挖矿一段时间之后,再打开一个shell通过ipc连接到刚才的服务
( |6 s# k* ?% k( _$ a5 Q& fgeth attach ipc:/home/blockChain/data/00/geth.ipc( [5 M" i; x" ]: ^( Z( W! K8 a, v- G
//查看coinbase账户余额) L; F* k3 i$ S! x- O" _4 M% l" w
baseAccount = eth.accounts[0]$ h- N$ R6 h1 Z" t* ~9 `: e
num = eth.getBalance(baseAccount)
% L% q/ Q' g! C//换算单位为eth- z4 C9 ?7 P' B2 E  N; b8 n
web3.fromWei(num)
/ @/ \+ b6 Q8 E$ j4 V; b; ?& y, p//新建一个账户
0 y9 {  Z& X) W2 E4 G/ Rpersonal.newAccount("account")1 |: V" n; ^4 o: {) X& l( s
//查看新建账户的余额
/ m  U3 r( s+ haccount1 = eth.accounts[1]
0 B( q5 j) |9 K- W1 F6 \) z- Teth.getBalance(account1)5 z5 Q$ i% ]6 a1 l
//从coinbase账户转给account1账户1eth
: ^6 m# F! v& R( _personal.unlockAccount(baseAccount ,"coinbase")
/ I7 A! b% M0 j8 xeth.sendTransaction({from : baseAccount, to : account1 , value : web3.toWei(1,"ether")}); X& y+ W: z( a. S8 V
//观察挖矿shell的输出,等待交易打包完成后,查询account1的账户余额
* [6 [0 w, i) Q, u3 Leth.getBalance(account1)
2 r- A7 x1 I6 H/ J9 U提交转账之后,观察挖矿shell的输出,会出现一条打包转账交易的记录,等待新的区块继续生成的时候,account1 账户的余额才会更新。
( D' `* }% t9 ~# U7 t
' b0 h2 }2 f$ K* L7 C' s& T如果交易很久之后才能被确认,很有可能是服务器性能不足导致的。. B; N2 K  u  ~: `0 x1 X
通过mist客户端访问私链
. k9 ]1 n) t& i  R从以太坊爱好者或者官网,下载mist客户端:http://ethfans.org/wikis/Mist-Mirror
0 V9 V" r$ ?( Z' g6 j( S安装完成之后,找到mist安装目录 C:\Program Files\Mist,双击mist启动。' c, C- e. \2 [. ~/ }
然后打开cmd,并切换到mist目录,执行
0 h9 Y: M% K. V5 o5 [* Gmist --rpc http://ip_address:port- A* J% ~# B+ F+ l# R: z
其中,ip_address是私链的服务器地址,port是该节点运行的端口号,默认为8545。
( y( G+ R7 M& U如果不先运行一个mist程序,直接通过命令行连接私链的话,会报错 Couldn’t start swarm process.
标签: Geth
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13