Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Geth搭建以太坊私链环境

温室小书生室d
101 1 0
安装Geth
7 Q& p7 N6 C9 y4 w) N3 Ahttps://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu* H9 n6 T) g6 `# v& E) `  B3 I! M
  1. sudo apt-get install software-properties-common1 j. t' s' ?) W3 A
  2. sudo add-apt-repository -y ppa:ethereum/ethereum
    / }) R  Y* e* v6 k' J
  3. sudo apt-get update& F7 n; E5 I- e( n$ |# F& r
  4. sudo apt-get install ethereum
复制代码

! K1 U  ]- t. A$ o初始化创世区块
. [6 n: E# l$ t0 b" e& o. W4 Ohttps://github.com/ethereum/go-ethereum$ g( D. l1 u6 W; {1 {( O! L
chainId不能为0,否则交易会报错: insufficient funds for gas*price+value! q' _! |3 s8 U
  1. cd home
    1 ~; h' f. c, s$ W( M% k8 g
  2. mkdir blockChain&& cd blockChain; K9 {8 [0 V  e1 Z6 ~/ B! s8 M
  3. vim genesis.json
    7 t4 [8 W' E0 A% Y! i: a
  4. //摘自官网
    5 @+ `3 y8 O/ Q" ~
  5. {
    . h1 C& K' v1 A! n* |$ ~
  6.   "config": {
    $ M, M' a2 |8 o
  7.         "chainId": 14,! t( J* k- X. }) r; N+ ?) A; J
  8.         "homesteadBlock": 0,
    6 F: g! X& I5 D. r
  9.         "eip155Block": 0,- b4 A* j4 Q4 G! ^0 w
  10.         "eip158Block": 02 f+ ?2 d, O. I! |9 O, h. }
  11.     },$ T* ?0 z7 K& Z& a/ m) h5 Q& @
  12.   "alloc"      : {},% a" ~" Y5 I' e9 _, J! k
  13.   "coinbase"   : "0x0000000000000000000000000000000000000000",/ D+ F. A3 Y! W! R
  14.   "difficulty" : "0x05000",3 ?3 w* q2 M; v9 t
  15.   "extraData"  : "",
    $ z; A, [5 B+ f0 d! f! s. p
  16.   "gasLimit"   : "0x2fefd8",
    2 p: S7 ~! ]; p9 Z
  17.   "nonce"      : "0x0000000000000042",# ]0 g9 A3 p8 H
  18.   "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
    9 H& d# Q& }1 a
  19.   "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    ' K, }6 x7 d+ F
  20.   "timestamp"  : "0x00"6 \: Q; v) y& e1 w4 v
  21. }
复制代码
* S1 o# h; g3 C) D  K
官方文档中的chainId为0,应该修改为非0的值,不然会导致 insufficient funds for gas * price + value- ^  P/ n8 w: f# o) Z4 _
difficulty表示挖矿的难度值,官方文档中为0x20000,由于测试机器配置低,修改为0x05000。$ Q0 c4 K( d  T/ D* i( }% {
geth --datadir /home/blockChain/data/00 init genesis.json
2 [" O/ N# s$ _4 ogeth --networkid 14 --nodiscover --datadir /home/blockChain/data/00 --rpc --rpcapi net,eth,web3,personal --rpcaddr ip_address console5 L0 R- C' [% b' i
/*, Y  f$ M0 y3 O) M0 I! V
--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络+ |# M7 r2 f/ Z
--datadir 区块链数据存储目录+ {# B/ B, v3 e$ ?
--networkid 网络标识,私有链取一个大于4的随意的值' ]9 T$ U- L  D% s  I5 W: l+ \
--rpc 启用ipc服务,默认端口号8545
6 [% _% U( R, c! `% @% A1 r' A, |/ j--rpcapi 表示可以通过ipc调用的对象
: F2 Y% J! g* d5 w! h) V! b% V2 K--rpcaddr ipc监听地址,默认为127.0.0.1,只能本地访问
$ M7 z: m0 \5 o* g4 a( xconsole 打开一个可交互的javascript环境0 D/ K- I8 q, k6 [# O% b/ Q
更多参数:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options- A1 N$ O' F5 z# P/ n
*/: S, H1 J+ r, r8 Y. p  V8 H
挖矿以及转账
: t( y/ N7 w6 J1 K//创建coinbase账户
0 @/ M# Y& _. n2 Kpersonal.newAccount("coinbase")
3 [3 A& g1 i1 s, ~1 g//查看账户列表! C: A0 l0 g' m3 {( {
eth.accounts: s4 s- L  z% U
//开始挖矿
% w; {) T" |  [5 w5 @miner.start()3 P$ U- T& ?2 ^( j5 @% T
//继续挖矿,不要停~
2 q% d* X; Z* w挖矿一段时间之后,再打开一个shell通过ipc连接到刚才的服务
- B+ R4 p+ {6 Xgeth attach ipc:/home/blockChain/data/00/geth.ipc, k2 q$ X# u% G) {
//查看coinbase账户余额
+ a- C3 W8 g5 u$ b! _3 N, EbaseAccount = eth.accounts[0]
5 B* X- g0 h0 _2 N7 _num = eth.getBalance(baseAccount)
1 `$ w+ I( d* y, Y. a- z: |//换算单位为eth
8 e: v$ {- j, [- [web3.fromWei(num): o" a6 B4 o* _3 ]
//新建一个账户. m2 ~7 I' f9 C! W
personal.newAccount("account")
+ K3 W5 K. O" Y% D: y( m& R1 |' a//查看新建账户的余额
0 z8 O3 @1 i8 q& Iaccount1 = eth.accounts[1]# }, i& T7 O2 G& ~
eth.getBalance(account1)
# n( M) i* U! r% q//从coinbase账户转给account1账户1eth
+ e! i, Z1 d+ s! Mpersonal.unlockAccount(baseAccount ,"coinbase")
- Y' r6 g5 R2 v) F) n- v8 ^eth.sendTransaction({from : baseAccount, to : account1 , value : web3.toWei(1,"ether")})& D* m, ^9 e6 W" m9 o
//观察挖矿shell的输出,等待交易打包完成后,查询account1的账户余额! M! A% f  c; a8 e# y
eth.getBalance(account1)
- D# b  q2 h# O4 N  [提交转账之后,观察挖矿shell的输出,会出现一条打包转账交易的记录,等待新的区块继续生成的时候,account1 账户的余额才会更新。: k4 h2 E' W3 X7 y4 H! E
8 w9 Z; G8 K3 d  F& Y3 r8 Q
如果交易很久之后才能被确认,很有可能是服务器性能不足导致的。
9 e+ s9 a! p! Z/ S6 p  O通过mist客户端访问私链4 c9 C( S3 R( p( Z* O
从以太坊爱好者或者官网,下载mist客户端:http://ethfans.org/wikis/Mist-Mirror
/ X! m# D3 c7 m" g. K6 \  `9 g" o5 u安装完成之后,找到mist安装目录 C:\Program Files\Mist,双击mist启动。) t+ Z! r; i) o. V  t0 S
然后打开cmd,并切换到mist目录,执行" |" s/ o/ _9 E- E& U! n
mist --rpc http://ip_address:port
1 K6 t) z9 w0 U$ s3 P: Z: m其中,ip_address是私链的服务器地址,port是该节点运行的端口号,默认为8545。3 r  u# r5 D5 x: ^
如果不先运行一个mist程序,直接通过命令行连接私链的话,会报错 Couldn’t start swarm process.
标签: Geth
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13