Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Geth搭建以太坊私链环境

温室小书生室d
82 1 0
安装Geth8 E% u' b; B& X# w' o' T8 h! ?8 t2 [
https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu
8 l4 c. y, B2 y* s, w/ ~  J8 K9 X) c
  1. sudo apt-get install software-properties-common
    ' K8 c; ~* [- _& F5 g; P: u
  2. sudo add-apt-repository -y ppa:ethereum/ethereum
    7 a* X9 [4 b3 n$ v( x
  3. sudo apt-get update
    # e& V+ p; ?, u) w2 N/ w+ Z9 K
  4. sudo apt-get install ethereum
复制代码
/ o$ }' B7 U, r; k
初始化创世区块
/ b7 k& e+ R( x9 d# ?% H$ Lhttps://github.com/ethereum/go-ethereum
2 h5 n% z2 q; a  ~! K! c- @chainId不能为0,否则交易会报错: insufficient funds for gas*price+value8 R& r, A8 ~  q
  1. cd home' f1 {' W$ Y1 p2 _
  2. mkdir blockChain&& cd blockChain% `2 @3 @8 s5 O0 J
  3. vim genesis.json
    & n! J' o8 c5 c8 _8 `/ j
  4. //摘自官网' H: h, V9 q1 e& ~5 x
  5. {; |7 A* {1 ?$ |
  6.   "config": {- S! _) ^8 b+ [- H& C5 J
  7.         "chainId": 14,. S5 h9 x! j& m7 v
  8.         "homesteadBlock": 0,) k, @) M% I5 Z% \4 e7 U
  9.         "eip155Block": 0,- \. J: F- g0 L
  10.         "eip158Block": 0
    ; p* U$ y& T  x$ m, d/ v
  11.     },$ ~/ _, `( G* P) O# p' n; K
  12.   "alloc"      : {},
    9 v; m9 S7 N+ M8 T
  13.   "coinbase"   : "0x0000000000000000000000000000000000000000",; P+ z: u( G6 O8 \$ N4 v# W
  14.   "difficulty" : "0x05000",
    2 j: j8 N& W& ~; }( m8 ^+ B8 L- e
  15.   "extraData"  : "",# Q- g6 P$ k* ?4 B. w
  16.   "gasLimit"   : "0x2fefd8",
    7 ~& q/ }1 P! |3 R0 F; }
  17.   "nonce"      : "0x0000000000000042",: @6 c" A: ?1 B
  18.   "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
    1 z$ o0 _/ y8 g
  19.   "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    1 P  ~1 `5 {. d
  20.   "timestamp"  : "0x00"
    + y$ ^# v6 v- I$ r
  21. }
复制代码

/ ]' X# O) {2 k, `) V& L! P官方文档中的chainId为0,应该修改为非0的值,不然会导致 insufficient funds for gas * price + value3 y5 B. S4 O/ i. x0 _. U7 L* ]& f
difficulty表示挖矿的难度值,官方文档中为0x20000,由于测试机器配置低,修改为0x05000。
3 G; ~" u! I! Ygeth --datadir /home/blockChain/data/00 init genesis.json& o2 z4 e* @* X, L+ N( \, x) x' n
geth --networkid 14 --nodiscover --datadir /home/blockChain/data/00 --rpc --rpcapi net,eth,web3,personal --rpcaddr ip_address console
! I. p/ p+ I+ D: W3 X  N. s% B/** X! S9 @( [9 z0 T# w
--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络7 C3 a, D1 v  ~9 ~* g. E9 k1 q
--datadir 区块链数据存储目录( d( p8 m/ K8 a# O9 r3 N) U+ h+ B
--networkid 网络标识,私有链取一个大于4的随意的值# _; Z  F; n( Z
--rpc 启用ipc服务,默认端口号85455 y/ H1 T0 p6 i9 |( K& f- a8 n" S2 w: G
--rpcapi 表示可以通过ipc调用的对象
2 t1 i8 p/ N/ M; ~6 [--rpcaddr ipc监听地址,默认为127.0.0.1,只能本地访问
( T; Y3 z% [  j7 Oconsole 打开一个可交互的javascript环境& L" Q' a9 o: s
更多参数:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options
& t; d$ H( S& Y5 C+ k+ s8 Q* T+ L9 o*/
8 a2 J3 y1 K( e  H挖矿以及转账  Y6 Q; F3 Z8 t3 H7 q. I$ \' f
//创建coinbase账户
: k1 m! @: j5 Fpersonal.newAccount("coinbase")
2 {+ B3 u4 J7 _, `1 H+ V9 G) n//查看账户列表$ F$ \) [+ u$ P: a4 q+ `: _
eth.accounts
* [2 R+ U( S: H4 d1 F" m% @//开始挖矿6 D* z0 R+ H' P5 ?" u
miner.start()- Y& }& i& j9 a& b( {9 P* r* I
//继续挖矿,不要停~
$ h* @. z0 L7 P# l3 @: o挖矿一段时间之后,再打开一个shell通过ipc连接到刚才的服务
' A6 f8 L3 V. {geth attach ipc:/home/blockChain/data/00/geth.ipc
, J- @, U1 P7 b# |9 x. t//查看coinbase账户余额. k" l4 q0 `7 D
baseAccount = eth.accounts[0]
: J" f" O5 P0 J: C4 y# w$ t2 O" Nnum = eth.getBalance(baseAccount)
' |" |' n' y) f+ n6 g) c. F4 Q//换算单位为eth
2 _2 f; n. D0 \, ?$ w( @web3.fromWei(num)
( Q7 }6 ^- E! _9 r6 g//新建一个账户2 `% M, L  h( t. X6 s. p
personal.newAccount("account")
. h% D2 i. N2 ?% z//查看新建账户的余额
1 @! q3 a" U3 w2 S7 Laccount1 = eth.accounts[1]2 S& T9 O- }  _* n( ]2 S6 x" m
eth.getBalance(account1)9 y0 i- ?. T* m
//从coinbase账户转给account1账户1eth4 J8 n3 e9 e! a7 q+ }
personal.unlockAccount(baseAccount ,"coinbase")) j: U1 L! |, M, S* t4 Z: W
eth.sendTransaction({from : baseAccount, to : account1 , value : web3.toWei(1,"ether")})# T/ w0 e- B* M
//观察挖矿shell的输出,等待交易打包完成后,查询account1的账户余额# ?3 m+ s) J3 }
eth.getBalance(account1)
4 F$ O1 [8 W, h/ t! Q: R: F+ J# e提交转账之后,观察挖矿shell的输出,会出现一条打包转账交易的记录,等待新的区块继续生成的时候,account1 账户的余额才会更新。4 A1 _( z2 I# F" `& R5 }$ e% s

) f# W! t, t. q* m如果交易很久之后才能被确认,很有可能是服务器性能不足导致的。
5 ]5 q2 u7 d+ u& K/ L  c# {通过mist客户端访问私链! C6 N8 {  z. C0 V2 ^4 `
从以太坊爱好者或者官网,下载mist客户端:http://ethfans.org/wikis/Mist-Mirror
8 b7 U# p7 m0 C5 y9 T安装完成之后,找到mist安装目录 C:\Program Files\Mist,双击mist启动。2 x# I% a7 U5 h7 a7 c
然后打开cmd,并切换到mist目录,执行
  Z3 S3 W, c& o. z0 umist --rpc http://ip_address:port
& J/ V/ K- O) G! b) }3 T# {其中,ip_address是私链的服务器地址,port是该节点运行的端口号,默认为8545。
& g  G& S7 Z1 \7 d$ j8 J如果不先运行一个mist程序,直接通过命令行连接私链的话,会报错 Couldn’t start swarm process.
标签: Geth
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13