Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Geth搭建以太坊私链环境

温室小书生室d
99 1 0
安装Geth" A6 p2 h. b1 T5 d2 |9 [' v. c
https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu0 N6 |# T8 B+ Y% _1 I
  1. sudo apt-get install software-properties-common
    6 H- H' E: w9 ]$ E
  2. sudo add-apt-repository -y ppa:ethereum/ethereum# I. [0 U/ l  k6 ^- h0 G* d
  3. sudo apt-get update3 H- N! M! H. A5 O* ]
  4. sudo apt-get install ethereum
复制代码

2 r% Z0 v8 b0 y% H( `  H- ?初始化创世区块) O# b- r! Z. S. [
https://github.com/ethereum/go-ethereum
' V; X% i/ M$ ?4 E4 k) PchainId不能为0,否则交易会报错: insufficient funds for gas*price+value
# d# n# t3 m# }3 }
  1. cd home
    2 J: t8 ?4 p+ }0 |. S/ k7 @
  2. mkdir blockChain&& cd blockChain
    4 g) Q7 \0 k. Y  ~, H' s" S- f6 a  r
  3. vim genesis.json; v, M2 Q7 E; a, E6 [
  4. //摘自官网
    / t/ }' c' C& v1 ~. q
  5. {) T+ ~" Y% _' o+ f5 T& [
  6.   "config": {! y3 S  u; L; \4 e6 \' _8 p
  7.         "chainId": 14,
      d5 O8 b9 S3 u  u/ c
  8.         "homesteadBlock": 0,$ ?9 E5 l5 W8 F/ H) S; v$ t
  9.         "eip155Block": 0,
    , }3 u. Q2 N0 I0 y, }$ l0 e
  10.         "eip158Block": 0! l, A9 R& {- L9 y3 V
  11.     },9 G0 a6 ?( |' w  v3 b) W5 ^; \% b- O
  12.   "alloc"      : {},
    6 d  ], f5 C& q2 h
  13.   "coinbase"   : "0x0000000000000000000000000000000000000000",6 ?1 V# P) e- p3 C. M7 b7 P* {
  14.   "difficulty" : "0x05000",
      B% t5 ?% [/ g; z
  15.   "extraData"  : "",& ^+ K- I+ D( v3 c0 R+ r
  16.   "gasLimit"   : "0x2fefd8",3 j# A, p& T  [) _) I; v
  17.   "nonce"      : "0x0000000000000042",
    ; u% ~1 {) a! A# J
  18.   "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",' o9 e, }. A, Y( E2 Y9 c- C, s
  19.   "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",% Q! l4 N* A5 u* L( d0 R. w
  20.   "timestamp"  : "0x00"
    ' y/ H; |" [5 G
  21. }
复制代码
1 Z* S1 \7 N2 V2 D: U' |0 h9 H
官方文档中的chainId为0,应该修改为非0的值,不然会导致 insufficient funds for gas * price + value
" n! Y! D% i" D# B: |9 `, H5 z5 |difficulty表示挖矿的难度值,官方文档中为0x20000,由于测试机器配置低,修改为0x05000。
" Q0 S4 r$ F  L2 Lgeth --datadir /home/blockChain/data/00 init genesis.json, i$ Y8 f' s+ E3 J
geth --networkid 14 --nodiscover --datadir /home/blockChain/data/00 --rpc --rpcapi net,eth,web3,personal --rpcaddr ip_address console8 x/ d7 U9 ^2 G* w: ~7 m7 J
/*
+ M5 \8 l" t6 {--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络
$ m$ H8 H0 ]5 X; d' y' B) V--datadir 区块链数据存储目录
6 r* o8 x7 D; Q0 m--networkid 网络标识,私有链取一个大于4的随意的值' R8 f% `# W6 F% V6 m7 Q* l# O
--rpc 启用ipc服务,默认端口号85451 e( x. I' V; ?9 Z' w$ ^. O9 Q
--rpcapi 表示可以通过ipc调用的对象
3 I6 a- a) ?4 ]+ I! Q' k--rpcaddr ipc监听地址,默认为127.0.0.1,只能本地访问
  N+ r# g) v. q1 Aconsole 打开一个可交互的javascript环境5 a1 P) o) p4 w$ G& f
更多参数:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options
  b* {1 _( i" [3 v0 F- Q*/4 `5 R% P0 Y$ p3 _& Y8 Q. a" W5 f
挖矿以及转账
1 N( D7 Q! n9 W7 u$ [3 s  y//创建coinbase账户
6 c" M6 R. T# Q' rpersonal.newAccount("coinbase")
' H/ ^" e+ H9 |. B: o# {//查看账户列表& c6 F0 f& O4 m( D4 e
eth.accounts
( |9 f; ~( x5 @- Y/ l6 O//开始挖矿
% M" v: t$ N, D/ s) w4 d0 tminer.start()- k- Y' t/ C. G3 D5 }# }
//继续挖矿,不要停~
* G' T9 I8 b" j挖矿一段时间之后,再打开一个shell通过ipc连接到刚才的服务
' U# [2 d7 U7 r3 D4 D7 Bgeth attach ipc:/home/blockChain/data/00/geth.ipc
4 {! x# [! o7 S//查看coinbase账户余额
2 a4 o6 f8 Q: v$ @4 KbaseAccount = eth.accounts[0]
+ W5 z! I7 I% j: i9 Gnum = eth.getBalance(baseAccount)& h2 p* m+ V1 D. o3 i# A
//换算单位为eth
2 _6 J4 ]( P8 kweb3.fromWei(num): e- a7 {! L: i, T) X4 ^+ m
//新建一个账户) U4 \  ^' ]" [
personal.newAccount("account")0 x" i# s; h2 y( f
//查看新建账户的余额
2 `- \4 J: @, _( h( I2 daccount1 = eth.accounts[1]) i* N7 n6 n4 O2 A4 S' C$ q
eth.getBalance(account1)
/ j! `9 t+ M5 r* R//从coinbase账户转给account1账户1eth! o' q9 _: J8 q' R2 z% e  j2 T4 P0 D
personal.unlockAccount(baseAccount ,"coinbase"): S, h! {4 i5 l$ U. L" U6 z
eth.sendTransaction({from : baseAccount, to : account1 , value : web3.toWei(1,"ether")})$ R6 g8 i: {1 j
//观察挖矿shell的输出,等待交易打包完成后,查询account1的账户余额
& O# z7 `7 s( reth.getBalance(account1)
( N/ Y. R0 K7 v! M2 l$ k7 w/ D提交转账之后,观察挖矿shell的输出,会出现一条打包转账交易的记录,等待新的区块继续生成的时候,account1 账户的余额才会更新。
' k$ x' b5 ~: o/ i( h
  T. d6 x+ J/ p  c2 k7 z如果交易很久之后才能被确认,很有可能是服务器性能不足导致的。5 ~% ]0 q$ O5 j' G9 F0 l& {6 `
通过mist客户端访问私链
% F: B* N+ r, C5 W/ j: ~从以太坊爱好者或者官网,下载mist客户端:http://ethfans.org/wikis/Mist-Mirror
! e" t8 K8 ]! I1 C安装完成之后,找到mist安装目录 C:\Program Files\Mist,双击mist启动。
1 W3 r; H. e2 v5 T# ]然后打开cmd,并切换到mist目录,执行
$ ]. q8 a* Z! j+ ]! O# jmist --rpc http://ip_address:port" a9 P# F. P! p# a
其中,ip_address是私链的服务器地址,port是该节点运行的端口号,默认为8545。
1 O1 H9 a+ Z% H3 ?1 W& S8 v如果不先运行一个mist程序,直接通过命令行连接私链的话,会报错 Couldn’t start swarm process.
标签: Geth
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13