Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Geth搭建以太坊私链环境

温室小书生室d
96 1 0
安装Geth# [* W: Q; Y9 B3 F
https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu
& a9 q. v/ p' l+ f1 K
  1. sudo apt-get install software-properties-common
    4 I2 q/ h( {, I- o
  2. sudo add-apt-repository -y ppa:ethereum/ethereum
    & U6 m" U1 N" e1 R
  3. sudo apt-get update
    ) v$ z: F. f2 S! E' @, H, |
  4. sudo apt-get install ethereum
复制代码
9 Z; @$ K2 U% s
初始化创世区块3 H# g# ]4 D& O, l* ~6 A1 M/ _
https://github.com/ethereum/go-ethereum
( G# f/ Q2 E; I; d! r! W0 FchainId不能为0,否则交易会报错: insufficient funds for gas*price+value+ e8 }2 u5 y- p' K* ]- V
  1. cd home
    : _( B1 e+ U4 c$ [
  2. mkdir blockChain&& cd blockChain. r! C0 t& O9 o( c7 }7 f2 n
  3. vim genesis.json% T  y9 ?# b, `' ^  F
  4. //摘自官网# B% D( K0 ~8 s4 z
  5. {; c& o- z' j1 s% _3 p, W
  6.   "config": {  F9 y6 f2 Y/ o3 E: [9 }& E
  7.         "chainId": 14,( x8 s& R' D: C6 ~" R. e8 h3 }
  8.         "homesteadBlock": 0,+ U2 Q) a$ l- q; u% H( ~
  9.         "eip155Block": 0,
    6 c1 V" j2 ]# V& i" s
  10.         "eip158Block": 01 a- j& r9 T$ N/ ~: l9 ~
  11.     },
    / R- i$ w6 l) {: G9 X
  12.   "alloc"      : {},) Z* G) I8 w: @9 y. X
  13.   "coinbase"   : "0x0000000000000000000000000000000000000000",& Y0 p  @' r2 e# J: V: ~
  14.   "difficulty" : "0x05000",$ q/ S- {4 y2 q4 q" `" i  e0 [
  15.   "extraData"  : "",
    3 a5 r+ o2 ?, h6 Y% G  q8 \, t* G7 S
  16.   "gasLimit"   : "0x2fefd8",
    / H, p- g" J7 v! S
  17.   "nonce"      : "0x0000000000000042",
    . ]5 J. d3 @0 b0 W' y
  18.   "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
    + L+ S$ E5 p* Q, ]: P
  19.   "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",# q- g. X+ N) U$ f: C
  20.   "timestamp"  : "0x00"  h5 b! F& N4 |1 D7 p3 y
  21. }
复制代码

! `! k9 m/ \" {* a官方文档中的chainId为0,应该修改为非0的值,不然会导致 insufficient funds for gas * price + value
, Z6 J9 W  U2 q" `difficulty表示挖矿的难度值,官方文档中为0x20000,由于测试机器配置低,修改为0x05000。
8 X' ]/ Q" s( Jgeth --datadir /home/blockChain/data/00 init genesis.json# {& `% M. F" v
geth --networkid 14 --nodiscover --datadir /home/blockChain/data/00 --rpc --rpcapi net,eth,web3,personal --rpcaddr ip_address console, H0 Y. }% z# r5 D8 I
/*' e" t: f# H6 a. N2 s; W/ E
--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络
8 ^, t% }9 ^8 y6 d* W8 i- V! Y--datadir 区块链数据存储目录
/ e' t/ a; b  c& Y2 C--networkid 网络标识,私有链取一个大于4的随意的值
* s* U; }+ J6 x0 r- a--rpc 启用ipc服务,默认端口号85456 }& X! n& N: J; d0 Z+ {
--rpcapi 表示可以通过ipc调用的对象
) b! J+ Z7 \6 F8 b--rpcaddr ipc监听地址,默认为127.0.0.1,只能本地访问% t6 v, e/ J, Q% h9 j* I3 x
console 打开一个可交互的javascript环境  c9 V, V  a/ x  U. M: b! S4 z$ Z& _
更多参数:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options
1 o# _) P( }# L& c*/
  |) H0 b5 O7 T挖矿以及转账
1 S% w$ |6 m  b, w  @% f//创建coinbase账户
( Q8 }* k3 }) q) n( v7 gpersonal.newAccount("coinbase")
9 I8 q, M4 l. F! J  t* n0 S" S5 P0 [//查看账户列表- ]% E! J  ^6 V2 N% Q
eth.accounts
  E% O+ h) @$ G. h9 g0 V- `//开始挖矿- D  S9 d6 P; h7 A
miner.start()
: X4 p% _! T% z, O//继续挖矿,不要停~
. K7 [* b+ E5 o' P* V( ~$ G5 @. x挖矿一段时间之后,再打开一个shell通过ipc连接到刚才的服务
9 @7 _3 N. D" |! ngeth attach ipc:/home/blockChain/data/00/geth.ipc$ X: K! ?8 m2 v7 [, P; G# C
//查看coinbase账户余额
, N" \/ F% G4 `( _9 y, UbaseAccount = eth.accounts[0]
+ j4 c6 \1 ?2 \" l' Enum = eth.getBalance(baseAccount)* C) C' h9 O) r
//换算单位为eth
4 D0 G- O0 r( p+ `7 `- Jweb3.fromWei(num)
7 N: U! P; t' l/ B9 Q( q* ]# [# m4 ^//新建一个账户7 K: Z3 `: l) _1 }" a) r
personal.newAccount("account")$ O. O5 m2 R2 Y6 d5 ^6 j6 w1 v
//查看新建账户的余额) y; |* G* E( e' w: N4 O& R, R
account1 = eth.accounts[1]
2 b. j7 U: D& w; Geth.getBalance(account1)
4 x6 T$ a. K6 L" u. h; P//从coinbase账户转给account1账户1eth
" a. n) k/ }3 J3 X* d5 vpersonal.unlockAccount(baseAccount ,"coinbase")
3 d2 M4 v( O8 j/ T  k% xeth.sendTransaction({from : baseAccount, to : account1 , value : web3.toWei(1,"ether")})3 @( r: E7 l, b
//观察挖矿shell的输出,等待交易打包完成后,查询account1的账户余额3 M: @- n% d# k  r( z4 c
eth.getBalance(account1)/ |* o$ R* A; R1 ]0 V* s9 S- k" n
提交转账之后,观察挖矿shell的输出,会出现一条打包转账交易的记录,等待新的区块继续生成的时候,account1 账户的余额才会更新。
( b) _( W" W+ s1 D/ u
1 W: I( C( I8 A! i- E( O如果交易很久之后才能被确认,很有可能是服务器性能不足导致的。
8 f  H2 J7 q3 t# k# Z( y# D  F: o通过mist客户端访问私链5 {, i( T0 Y# P# v
从以太坊爱好者或者官网,下载mist客户端:http://ethfans.org/wikis/Mist-Mirror
  Z' B) k7 D+ o# Z3 n! P2 f安装完成之后,找到mist安装目录 C:\Program Files\Mist,双击mist启动。
, I' t' U4 A  E然后打开cmd,并切换到mist目录,执行9 C0 N% p8 h9 k- p! `  |: X0 V& w
mist --rpc http://ip_address:port) {; \: m2 V$ R! m! p- e
其中,ip_address是私链的服务器地址,port是该节点运行的端口号,默认为8545。' \+ D% _8 k9 z
如果不先运行一个mist程序,直接通过命令行连接私链的话,会报错 Couldn’t start swarm process.
标签: Geth
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13