Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Geth搭建以太坊私链环境

温室小书生室d
109 1 0
安装Geth
  e, s' m' V) q: I; p: }- f3 rhttps://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu/ F+ k3 t# R% X. s. g; p
  1. sudo apt-get install software-properties-common! i1 K$ {  U# h1 M2 \# L( m
  2. sudo add-apt-repository -y ppa:ethereum/ethereum
    ' m+ C8 p' V2 L
  3. sudo apt-get update
    ' S/ Q+ z& j# b$ e, i  ], e: e
  4. sudo apt-get install ethereum
复制代码

4 @0 N8 D  R# }( n( C9 g+ I初始化创世区块' K, I: S' ]# S; B
https://github.com/ethereum/go-ethereum
3 I( C& v- p5 T9 ^3 ?1 c9 ZchainId不能为0,否则交易会报错: insufficient funds for gas*price+value& F8 j- g( z7 |. ~! E
  1. cd home. B# {0 v6 h$ _
  2. mkdir blockChain&& cd blockChain
    1 p' L  Y6 D' i  N  ^
  3. vim genesis.json: ]2 ]' g" U  y
  4. //摘自官网
    5 u3 _  R; \& d5 k
  5. {
    0 |+ g  u' s/ P$ u6 h
  6.   "config": {
    5 u0 ~/ E; G  l( H7 g- j" e; G0 i4 R
  7.         "chainId": 14,
    & j  G" R  N; r  b
  8.         "homesteadBlock": 0,& q9 `7 E# P. r' w/ a
  9.         "eip155Block": 0,; d6 k* ?2 ?* g# n. o% M5 \7 v
  10.         "eip158Block": 0. G0 h' m* b& h+ l
  11.     },
    5 z% K, S4 i$ I* z
  12.   "alloc"      : {},  Z/ x! R" S, O- N8 E5 C
  13.   "coinbase"   : "0x0000000000000000000000000000000000000000",
    2 R: S( D1 |% S7 S# n6 k: \. f
  14.   "difficulty" : "0x05000",# x7 k( ?2 w' C7 D& i9 {( ?7 H
  15.   "extraData"  : "",, V8 x* @* f: P; v4 }5 E5 ^
  16.   "gasLimit"   : "0x2fefd8",
    2 b3 D" k, \1 M* _9 K# f5 u2 A
  17.   "nonce"      : "0x0000000000000042",+ X% S& ^( M  g3 B2 h, z2 K* J
  18.   "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",* W7 k3 ?" W3 N( Y1 j5 I' _- a
  19.   "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    7 v7 C! \; l% j3 v! B3 u$ }9 `
  20.   "timestamp"  : "0x00"
    $ t% m, y; Z/ O
  21. }
复制代码

; U. T5 Q, ~; s, U) p4 O官方文档中的chainId为0,应该修改为非0的值,不然会导致 insufficient funds for gas * price + value& m& X3 J4 u: w: H1 a2 X
difficulty表示挖矿的难度值,官方文档中为0x20000,由于测试机器配置低,修改为0x05000。9 Y* [( z% U) e% e9 L- s  x9 Y- c
geth --datadir /home/blockChain/data/00 init genesis.json
; @- ]6 T3 Y1 F" W. n5 hgeth --networkid 14 --nodiscover --datadir /home/blockChain/data/00 --rpc --rpcapi net,eth,web3,personal --rpcaddr ip_address console
  [" U3 I2 H; M) W7 o( O/*
' m/ m7 M' |: t--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络& v/ `  o0 o% p. [8 K
--datadir 区块链数据存储目录; R7 g6 q( P, S" k& K% D
--networkid 网络标识,私有链取一个大于4的随意的值
" i- L5 t" P! b* K4 w) `--rpc 启用ipc服务,默认端口号85454 _- d! O7 Z( ^8 G
--rpcapi 表示可以通过ipc调用的对象
9 Z7 _! M) L" d5 @! o--rpcaddr ipc监听地址,默认为127.0.0.1,只能本地访问. c0 h5 j, q& [7 C9 J" b" \7 Q
console 打开一个可交互的javascript环境" B; U2 F; _* ?8 k$ l4 c! N0 ]
更多参数:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options
' l, u& B% x1 U) J*/
6 X# c# m; [: \$ l" E挖矿以及转账
" N% q: [, h# _: z( C! X//创建coinbase账户
0 H7 z6 k- [8 {8 t+ w+ _' ppersonal.newAccount("coinbase"): b% C# h0 p8 H# \  ]1 J
//查看账户列表
: N7 F; k) ^% q/ m* `& m9 P9 ^, beth.accounts" T, k4 t$ {+ b5 J& Y. A% d+ m
//开始挖矿% |' S2 A; s. j1 W, ]: L4 I
miner.start()
+ H* W, S6 K- o; |* w3 E//继续挖矿,不要停~3 q- H$ ^1 J" |, ~4 `1 K. a
挖矿一段时间之后,再打开一个shell通过ipc连接到刚才的服务# |9 D% @4 u( W9 z" N4 G, ~
geth attach ipc:/home/blockChain/data/00/geth.ipc, v/ H( i/ [7 s( L4 P- I6 C* l
//查看coinbase账户余额. A5 n, Q# i% d$ _' G7 w
baseAccount = eth.accounts[0]
: Y+ g) \. |1 o4 fnum = eth.getBalance(baseAccount)
) Y# h$ \% l7 L( m, d5 v2 k, T//换算单位为eth
7 d) d7 H: G( {8 S! V' Q0 E: `web3.fromWei(num)" r7 ^6 ?- S0 x6 z& U4 ?
//新建一个账户
7 T( N1 u$ {) E0 }' J" }  u  Y+ [personal.newAccount("account")1 k% Z. F  U: A& R0 H
//查看新建账户的余额* ^4 {# b+ X! `
account1 = eth.accounts[1]
0 O+ u" u6 {! e" x  teth.getBalance(account1)# ?" }0 \' Q( W/ l7 S& e
//从coinbase账户转给account1账户1eth5 L; `& ]$ y5 \3 m$ ]: H, |
personal.unlockAccount(baseAccount ,"coinbase")) B# a8 }3 Y5 d  I9 j7 v7 w
eth.sendTransaction({from : baseAccount, to : account1 , value : web3.toWei(1,"ether")})$ l* D# z7 C( [* i1 m
//观察挖矿shell的输出,等待交易打包完成后,查询account1的账户余额
. |2 Y- [/ v5 ^eth.getBalance(account1)
, \& R. u6 J/ A提交转账之后,观察挖矿shell的输出,会出现一条打包转账交易的记录,等待新的区块继续生成的时候,account1 账户的余额才会更新。
9 P) Y2 t9 o# i% S, C0 J. Q( g8 K% V+ Q; \0 g! G, [8 x/ Q1 u
如果交易很久之后才能被确认,很有可能是服务器性能不足导致的。
0 _. A& D& [" h2 Y8 J通过mist客户端访问私链9 v1 ~0 j8 }! ~& p, K
从以太坊爱好者或者官网,下载mist客户端:http://ethfans.org/wikis/Mist-Mirror
* S) ]- u( n& k: c# L安装完成之后,找到mist安装目录 C:\Program Files\Mist,双击mist启动。3 }* ~# w( D/ _! V! b9 L2 L
然后打开cmd,并切换到mist目录,执行
  @7 O$ @  I) `# d2 |+ n8 {% x# c7 Tmist --rpc http://ip_address:port
2 t, Y9 ^/ a" t$ ^% x) f( |. v其中,ip_address是私链的服务器地址,port是该节点运行的端口号,默认为8545。
% O) x2 k  B) Y0 ?$ V+ S如果不先运行一个mist程序,直接通过命令行连接私链的话,会报错 Couldn’t start swarm process.
标签: Geth
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13