Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Geth搭建以太坊私链环境

温室小书生室d
155 1 0
安装Geth
# @9 N3 [$ x/ J; k% d2 |; Ohttps://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu
; @" E( L1 R' H
  1. sudo apt-get install software-properties-common2 C, n( M, q9 A; m/ ^
  2. sudo add-apt-repository -y ppa:ethereum/ethereum1 F  \, I& g$ a: M
  3. sudo apt-get update
    4 }: R* v# m& ~
  4. sudo apt-get install ethereum
复制代码

4 x0 o6 h, s$ t初始化创世区块+ W, z0 q9 J% A5 y  g. r2 m* t
https://github.com/ethereum/go-ethereum7 `$ Q7 W; c/ l& ^$ k0 L5 l% E
chainId不能为0,否则交易会报错: insufficient funds for gas*price+value
3 A! E% n8 {3 t7 u) E7 u4 d
  1. cd home+ Q/ \9 _# a2 f& d7 z! c
  2. mkdir blockChain&& cd blockChain' Y' Q; V& ?3 |/ g$ ?
  3. vim genesis.json
    " S9 B- w2 r! ?9 e, C) `
  4. //摘自官网6 i; P: _# k% d$ O! o" T  A" J7 k  ?
  5. {
    0 P3 }) ?4 {( K
  6.   "config": {( b0 r  {( K7 Z) n& U
  7.         "chainId": 14,; N1 V% U# b9 ]0 R. U" C! r$ J# n
  8.         "homesteadBlock": 0,$ q3 P( ?8 X! H% F# ?
  9.         "eip155Block": 0,
    5 a1 A" L, D6 S) c; N5 ?1 y+ d8 g
  10.         "eip158Block": 0
    6 i. M7 {) B) m4 ^) i2 W
  11.     },+ L: l( R8 p9 Q, a
  12.   "alloc"      : {},- [8 }* l' f6 X# W/ r
  13.   "coinbase"   : "0x0000000000000000000000000000000000000000",5 v, k. n4 l: K4 ^; s- W3 [
  14.   "difficulty" : "0x05000",
    ! m7 u& `: |/ C9 d: }$ U1 n0 L
  15.   "extraData"  : "",( V" p# l6 Y0 _( [, ]' Y- z& |/ E
  16.   "gasLimit"   : "0x2fefd8",# M, o. `) w0 J9 C3 q9 T
  17.   "nonce"      : "0x0000000000000042",7 V0 |+ S$ G. l9 ~
  18.   "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",( Q' b/ a# \) r& p& J
  19.   "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",3 A0 J2 v7 i7 p
  20.   "timestamp"  : "0x00"
    % L$ ^+ V9 E; f' v8 h2 ^  f# ~
  21. }
复制代码

& t9 c8 r; j! h/ Q6 P官方文档中的chainId为0,应该修改为非0的值,不然会导致 insufficient funds for gas * price + value! S' G; J% Z. q3 s6 t( |' O
difficulty表示挖矿的难度值,官方文档中为0x20000,由于测试机器配置低,修改为0x05000。+ l& x) x6 u5 `$ X$ H" d0 N" X
geth --datadir /home/blockChain/data/00 init genesis.json, H0 N" n: d3 y$ ]: B3 M
geth --networkid 14 --nodiscover --datadir /home/blockChain/data/00 --rpc --rpcapi net,eth,web3,personal --rpcaddr ip_address console
% \* ?% X- ]1 \/ |! _$ @/*) f. U( _" ]( i% z( @2 s$ D
--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络
- |! H. r1 z( l$ ]9 h& H! T6 s--datadir 区块链数据存储目录
9 h& J4 |7 t0 P% v: i$ {7 R: D--networkid 网络标识,私有链取一个大于4的随意的值8 j3 o+ `2 \8 [) X. d
--rpc 启用ipc服务,默认端口号8545. ?8 ?8 i* o4 b. ]; c. [
--rpcapi 表示可以通过ipc调用的对象
; O" z3 g: T( g6 d6 x- ^4 {--rpcaddr ipc监听地址,默认为127.0.0.1,只能本地访问
' a! M4 k9 D' H2 u6 S5 O" Wconsole 打开一个可交互的javascript环境
, z0 P4 Z( C0 A0 A更多参数:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options7 E. O+ o& h5 n' a9 T+ r. q
*/- ?4 [, ^1 |% s$ Y0 i' }1 ~
挖矿以及转账# U) m6 k4 `6 y4 B) n% X7 M
//创建coinbase账户
! ]! j" N! V  E' T- w" cpersonal.newAccount("coinbase")
* n$ q3 r9 e# G0 D//查看账户列表
; H4 @) p; l; |- f; S; Z% Meth.accounts' e" i! |; _- k3 R! T( E% X
//开始挖矿7 s  g! G! I1 r  D' D: H
miner.start()( F, W7 n2 x3 }3 [7 ?0 G
//继续挖矿,不要停~  j( E, G% X# u- k* `' {6 w
挖矿一段时间之后,再打开一个shell通过ipc连接到刚才的服务; _: h( e" l4 Q$ a  ^
geth attach ipc:/home/blockChain/data/00/geth.ipc
1 @; _4 P. Q; h1 k! `//查看coinbase账户余额; g% ]$ M4 o3 ?
baseAccount = eth.accounts[0]" l" O3 ]' ?- J0 W6 L' V5 b" q; Y, L
num = eth.getBalance(baseAccount)' Y" g& D" Z. c: ~# [' s# y& I
//换算单位为eth# N0 L) O* z8 a+ z8 R' D$ Y, |
web3.fromWei(num)
, g3 Q2 h- M" w, h2 l# K5 x8 X( U//新建一个账户* ?2 o: z9 Y1 y- q+ j: Z$ Z6 ~0 z2 T
personal.newAccount("account")
  p0 M, v7 y% c% I: s5 D. r//查看新建账户的余额
/ j# r/ I2 q4 p+ R& y! ?, b' _account1 = eth.accounts[1]: v# v2 `1 X, j# y6 Y9 Q# K
eth.getBalance(account1)
4 Z4 ]: s; T5 a4 Y//从coinbase账户转给account1账户1eth
- o5 o- z% B9 \5 N9 L: [5 i" Kpersonal.unlockAccount(baseAccount ,"coinbase")
0 M! A# W* |' }6 X& E& f" w* X; B0 Leth.sendTransaction({from : baseAccount, to : account1 , value : web3.toWei(1,"ether")})" M8 h; R, v; z; ^8 P( g
//观察挖矿shell的输出,等待交易打包完成后,查询account1的账户余额
5 N+ N0 Z0 Z% n- P' k7 t/ Reth.getBalance(account1)
( R/ j+ D4 k/ ?/ ~0 u提交转账之后,观察挖矿shell的输出,会出现一条打包转账交易的记录,等待新的区块继续生成的时候,account1 账户的余额才会更新。  D: a# n6 a( M+ n# c8 @

& o  b  o: p, F如果交易很久之后才能被确认,很有可能是服务器性能不足导致的。
* _( v/ T& ]4 ?/ W' |通过mist客户端访问私链8 t3 c3 R0 G2 c3 }
从以太坊爱好者或者官网,下载mist客户端:http://ethfans.org/wikis/Mist-Mirror4 [( E9 Y+ e  d5 t9 e
安装完成之后,找到mist安装目录 C:\Program Files\Mist,双击mist启动。9 @8 o0 }* _" {: g4 ?" y% ]
然后打开cmd,并切换到mist目录,执行; D+ i9 M" D- M' v8 D* H, O5 H
mist --rpc http://ip_address:port
0 ]/ O& [5 }8 O+ o其中,ip_address是私链的服务器地址,port是该节点运行的端口号,默认为8545。+ l5 O/ u9 n9 o
如果不先运行一个mist程序,直接通过命令行连接私链的话,会报错 Couldn’t start swarm process.
标签: Geth
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13