Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
1.安装go语言环境
8 w& p# ?7 \- e' k(1)下载linux下go的安装包
+ e4 a6 }3 n! y. H$ wget https://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz
0 h  r! [% }" [0 K. G1 G(2)下载完后,进入到下载目录,将其解压到 /usr/local 文件夹下并在$HOME下新建一个文件夹go:
( f$ S4 e) f2 ]! V) {2 t$ sudo tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz* C& S+ T& x( H2 Z- V* d' Q
$ mkdir go( v) T' O: `2 c: d( x
(3)配置环境变量2 H. F  _) B( F8 u, W
使用如下命令打开环境变量配置文件% |1 C* O/ A3 ^" n  A( {
$ sudo vim ~/.bashrc
: D+ H7 c: I: c) w9 {4 V8 y将下列代码复制粘贴到文件最后,wq命令保存退出7 M0 ?: G" q' l  _& u: U5 c
export GOROOT=/usr/local/go- F) G% |; ]+ O( o0 {
export GOBIN=$GOROOT/bin/ @6 b- }' L. V+ S  n1 B: w4 v
export GOPATH=$HOME/go
" k$ D" G8 ~6 _9 e3 g2 b! p$ fexport PATH=$PATH:$GOBIN
. S+ m, Q& u/ i$ E- [. m9 ?输入如下命令使环境变量生效(注意:不用加sudo)
* q$ M3 X, c: z$ source ~/.bashrc2 e$ p' \0 U( P3 T! A# M
至此,go语言环境已经安装完成,输入go version查看安装是否成功
. c. U  m# [' S; R' u: U. L9 L$ go version
- I" z7 ]& U5 y, M. B( Zgo version go1.10.3 linux/amd64
4 x$ }8 u& B3 i3 B- }& Z% ]2.安装以太坊客户端Ethereum- Q9 l6 x' ^2 f* {. e. Y
使用如下命令进行安装* j  @2 o+ Z5 p! I
$ sudo apt-get install software-properties-common
  R& w: [' E. Q( w6 g4 ]; J$ sudo add-apt-repository -y ppa:ethereum/ethereum% W; a1 O# B  d$ D' n
$ sudo apt-get update6 H- x. s. g& B6 {( W
$ sudo apt-get install ethereum
$ p- k" R4 q9 T: {安装完后,输入geth version查看安装是否成功
( o+ M. o" R0 y+ e  \$ geth version. k/ [0 n: _! w! F
Geth Version: 1.8.11-stable
! e  J) V- h$ z( W: Q+ z; l) \3.以太坊私有链搭建( w, R" @" c2 J9 Y, k9 g
(1)新建一个文件夹,例如Mychain,用来保存私有链的数据。创建一个初始化的配置文件,genesis.json; P1 C) ~$ l; _  N) E% \1 d
$ mkdir Mychain  l2 X5 t' D1 V; J
$ vim genesis.json
% n) H. _$ Z3 O  a' p; n然后将如下的配置信息写入到genesis.json文件中(注意:chainId不能为0)
: i: e# Q2 d& N3 I6 G{4 O$ O" T% @  F1 b# b
  "config": {
+ b* j3 N8 l, _1 F        "chainId": 3,
1 s1 B$ F/ U6 [2 w4 u        "homesteadBlock": 0,2 e1 N/ H' m# H% [7 }: X2 A
        "eip155Block": 0,
2 _# N0 C( P, Q% d        "eip158Block": 0
8 K1 W- W* X$ X: D& C    },
/ ^9 t% B/ p9 u9 \7 N- l# c  "alloc"      : {},
+ V- s3 i- K9 L* E6 \  "coinbase"   : "0x0000000000000000000000000000000000000000",) G" z. S; R! c! [& N" v. z
  "difficulty" : "0x20000",- }7 o" E1 I5 T# T; H/ `. i
  "extraData"  : "",
9 c  k: L4 L- L' T  "gasLimit"   : "0x2fefd8",
# o" v  j" N1 x  "nonce"      : "0x0000000000000042",7 T8 h5 l4 F4 [3 {& f: \0 c
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
( r! Q: W& J$ Y8 Z$ N* y  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",& y2 \. b" Q3 p3 h8 E; E5 s) T
  "timestamp"  : "0x00"+ ^0 w/ ?& C3 d# L: S
}
, C% p8 X2 V4 @2 a6 g(2)初始化创世区块,并指定数据存放路径
3 M) R  m' S4 w! L7 j4 c$ S$ geth --datadir Mychain init genesis.json
9 |3 j, U/ \+ y" I$ @- U(3)启动私有链节点,并将日志输入到mychain.log3 b) U5 `1 t2 X/ _/ z) l
$ geth --networkid 3 --datadir Mychain --identity "mychain" --rpc --rpcaddr 0.0.0.0 --rpcport 8545 --rpcapi "admin,debug,eth,miner,net,personal,shh,txpool,web3" --port 30303 --rpccorsdomain "*" --nodiscover console 2>>mychain.log/ H+ V5 Y  m8 f) i1 b! D& h
具体参数含义请参考这个博客:geth命令
+ y! l% U0 p& u' R启动成功后进入控制台界面,如下所示:
( g4 m4 M" T8 k% @! Q/ fWelcome to the Geth JavaScript console!1 X, b, ?4 H* b; ], u, Q# ~
7 }7 B2 H1 e+ w$ n0 k! m. e
instance: Geth/mychain/v1.8.11-stable-dea1ce05/linux-amd64/go1.10+ n+ V3 D% m% ?/ ^- M% e$ e/ W
modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0  \5 `% E# U- F) c2 A
> 7 w! F* P0 p( G
至此,ubuntu 16.04 下以太坊私有链环境已经搭好,接下在进行简单测试。
7 H* o; ]- B8 b* h4.测试
9 P' t6 k6 x  P1 w(1)创建新账户0 a2 T; U- j( f% J* e1 i
personl.newAccount("密码")
8 C7 S' @% J; h  W创建成功将返回账户的地址
! y4 Q" h& J0 J, y7 l' I+ y1 \> personal.newAccount("123")
( [. \$ i. V6 y! ?1 i1 Y"0xe6319357003ff9889b7a849f5ec66b2903d08289" ; i  \% o6 Q4 L& C" |
(2)查询账户余额
! X* d/ O; F% A, n/ peth.getBalance("账户地址")
2 c1 r: J6 H- q2 s7 S: p; I由于新建账户,没有余额,所以查询的结果为 0
( A2 x3 Q* E- V+ m; d' L> eth.getBalance("0xe6319357003ff9889b7a849f5ec66b2903d08289")
1 M1 i) s. ~  T2 c9 k08 Z+ \( M4 [9 p* C5 j0 n6 x
(3)开启/停止挖矿,第一次开起需要等待一段时间。
7 N$ h/ D, G+ s7 y4 i! ?- J9 pminer.start()- K* f2 N, [' t* O- S" [
miner.stop()" o. \$ O, a6 C2 C
查看挖矿日志,可以新开启一个终端,输入下面命令进行查看  z* M0 u& h- O1 f/ {
$ tail -f mychain.log2 P" w- F& u) s
(4)转账) a, d$ L! \' q2 d% ^
挖矿成功后,默认会将以太币给第一个账户,查看余额0 j' H7 F, k' ], y% [& w+ z
>eth.getBalance(eth.accounts[0])
! s8 ~1 `8 Y5 K! s! L) }; l135000000000000000000
& F9 d/ P; ], }. t; w' ceth.accounts:以数组形式返回为账户列表,当前只有一个账户,可用eth.accounts[0]表示
. a0 ^7 i9 F; C新建一个账户,查看余额( [" p/ h: [/ l& E8 a) ^
>personal.newAccount("111")2 h+ Y" r$ t9 z- B: k: T# y
"0x866e46b71923d54e6fee26f42ececc216ca76c1d") s) o6 u- f5 `# V! ~' i, G- u
>eth.getBalance(eth.accounts[1])
2 _. R. t% _. o- P8 N2 K0
( _+ ^: r( p# z从accounts[0]向accounts[1]发送1个以太币,首先需要解锁accounts[0],使用如下命令
6 p9 \( |/ M; t: h3 B>personal.unlockAccount(eth.accounts[0],"123",0)" E3 L- y1 e( X% C  S: G
true& b  F7 S7 K# r5 ?" l5 Y
三个参数分别为accounts[0]的地址,创建时的密码及解锁时间(毫秒为单位)。0 代表长时间解锁
+ T/ }3 V, P" m. w- V  R转账操作
8 R" Q  ?  x9 j>eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(1,'ether')})( E  ^' W" g. j
开启挖矿等待区块验证,转账成功后,查询accounts[1]余额,默认单位是Wei
5 J$ x% M  m! Q8 ~>eth.getBalance(eth.accounts[1])
6 p  j7 e3 l( A! x100000000000000000
9 O+ @* v1 U5 p" \. n7 P可以使用web3.fromWei()命令将wei转为ether。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

945坏男人 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10