Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
1.安装go语言环境
" L9 C# Y7 y5 k. t7 y" |(1)下载linux下go的安装包
- `4 f* l+ p8 A& U4 e! ]$ wget https://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz% L8 e1 _+ g1 p+ g0 L3 B
(2)下载完后,进入到下载目录,将其解压到 /usr/local 文件夹下并在$HOME下新建一个文件夹go:
) c  [9 u( k: Z, E* H9 P8 D* X' y7 Y$ sudo tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz) A( k- J9 o- }  A# x4 }
$ mkdir go% B. r6 p* K: I9 O* K: R
(3)配置环境变量
% W9 ]% c" V0 d! C5 m使用如下命令打开环境变量配置文件. I4 }, H! O, J& [( T! p/ E
$ sudo vim ~/.bashrc
# F# g3 K" }4 z* w2 }将下列代码复制粘贴到文件最后,wq命令保存退出
, S) o! W3 h. ]2 n* A! f2 Hexport GOROOT=/usr/local/go' x( @1 z  a5 v% W2 `, o
export GOBIN=$GOROOT/bin
$ V3 [( o: h( Q; m7 h+ Jexport GOPATH=$HOME/go7 m. ?' f& S, j6 e3 ?- L" u
export PATH=$PATH:$GOBIN2 `& x. \! h* i
输入如下命令使环境变量生效(注意:不用加sudo)0 }* G/ |' k# \* A
$ source ~/.bashrc
% W- o3 m5 M( ^+ `0 ^至此,go语言环境已经安装完成,输入go version查看安装是否成功- K1 D$ U( Z, z3 ?( y7 M
$ go version
6 z1 S* G: x1 G" A7 Z6 U9 d  ugo version go1.10.3 linux/amd64
2 h- u0 D; l7 q  t0 s  c) c2.安装以太坊客户端Ethereum
1 ~, ?  y) n4 O# |使用如下命令进行安装. V' Y2 i7 E) n0 r9 a: M
$ sudo apt-get install software-properties-common
" M  i1 e* q" }& ~+ r7 `# j$ sudo add-apt-repository -y ppa:ethereum/ethereum7 S& Q0 t6 \  m. J4 L& c
$ sudo apt-get update0 ~9 ?$ E5 y; t0 g  L+ k
$ sudo apt-get install ethereum
/ ?1 p+ e$ i5 P* H/ U  v+ F2 A安装完后,输入geth version查看安装是否成功
$ ^6 n& k% w% h! i0 }$ geth version6 i* }, _4 }" M! c
Geth Version: 1.8.11-stable) M5 Y! [, l- t) v8 u; N! R
3.以太坊私有链搭建
1 |3 t! _: l5 s/ q% f. b# g. z(1)新建一个文件夹,例如Mychain,用来保存私有链的数据。创建一个初始化的配置文件,genesis.json
" g8 u5 u) N0 K4 V$ mkdir Mychain
+ u5 x) W, m) Q0 U' @" w$ vim genesis.json
- p9 F3 k* c$ I( C然后将如下的配置信息写入到genesis.json文件中(注意:chainId不能为0)
7 k, O  I% ~8 f0 s{
0 g& r9 m. N1 S5 v% ?  "config": {, z  x) Y' c0 G+ `9 `9 a
        "chainId": 3,, a0 k9 B1 ^; f3 c9 n
        "homesteadBlock": 0,
2 X( U3 e+ ^2 W  h$ {        "eip155Block": 0,
& A. `5 Q! ^  h$ t+ e        "eip158Block": 0
/ c! P  Z( r2 |$ r0 K$ A    },1 I: w# ]! b& _2 m1 l4 P# ~8 H
  "alloc"      : {},6 A, w$ _7 h+ M' s, }' o/ a
  "coinbase"   : "0x0000000000000000000000000000000000000000",
5 l+ W, r* S- w2 k+ F/ p' Q  "difficulty" : "0x20000",
2 [* [" g) S. y. W7 B* F0 f: j  "extraData"  : "",) g" G- O9 `7 S- i
  "gasLimit"   : "0x2fefd8",
, ?8 i7 @; k+ D# q& b  "nonce"      : "0x0000000000000042",' D. v* D3 e3 x3 T! c3 k
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",9 s8 o+ d& F8 ~$ ~3 J* @
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
5 n3 r6 ]- o& y7 a' B  "timestamp"  : "0x00"
( w) d" Z8 D' R2 E& \. P1 L* k}. @6 s( @& s9 H" C
(2)初始化创世区块,并指定数据存放路径' A6 N. ]7 Z5 M$ G) O
$ geth --datadir Mychain init genesis.json! x* s& R! Y; q; Z
(3)启动私有链节点,并将日志输入到mychain.log/ [2 r% v$ m' A. S# H2 ?
$ 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' q( u# v3 J- s6 A  w, g
具体参数含义请参考这个博客:geth命令7 n7 V2 T' g3 u, e9 {
启动成功后进入控制台界面,如下所示:
+ G6 b6 g. {1 L( Z* a# OWelcome to the Geth JavaScript console!' o& Q2 K& O3 v7 L9 X

: g7 n# J' R; j* G& O$ C2 M+ {instance: Geth/mychain/v1.8.11-stable-dea1ce05/linux-amd64/go1.10
2 l. l. V& v9 E 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) d% b9 \) L9 T. [+ [( N4 I
> ) u: P! F5 j; o* V+ x: S0 @
至此,ubuntu 16.04 下以太坊私有链环境已经搭好,接下在进行简单测试。
% {' U7 \  s2 M4.测试6 Y3 e1 L- ~; T
(1)创建新账户
, u' X- C$ {9 `% z! X2 y) F9 |personl.newAccount("密码")
9 x, I1 B, D  Z" i创建成功将返回账户的地址# v  o/ U2 i6 h7 C
> personal.newAccount("123")
7 j* _8 ]# _: O/ u3 @"0xe6319357003ff9889b7a849f5ec66b2903d08289"
6 \! g; X7 n% h  O. p/ t, g(2)查询账户余额
2 e* c: n; Q6 n5 eeth.getBalance("账户地址")5 R; ?- Q9 S" r) }+ J$ `
由于新建账户,没有余额,所以查询的结果为 0
  w8 j& r5 X. A8 _" v# G  l+ @> eth.getBalance("0xe6319357003ff9889b7a849f5ec66b2903d08289")
$ n4 k7 b- @! M5 e% b3 q  J0
. R/ \! q  R' J1 ?9 n(3)开启/停止挖矿,第一次开起需要等待一段时间。
& O; A: f' E& T2 i! ?miner.start()
* f; K5 q% R6 y) lminer.stop()
- I7 d# w7 v" B查看挖矿日志,可以新开启一个终端,输入下面命令进行查看2 M4 U8 y+ U. A! Y) A
$ tail -f mychain.log
8 T6 a  b6 E% M(4)转账! X/ j  s# ?8 |. }- d6 g; P
挖矿成功后,默认会将以太币给第一个账户,查看余额
$ S# [$ }# h2 L& `( W! Z>eth.getBalance(eth.accounts[0])
2 H# s6 E7 C. s* ~3 u0 c1350000000000000000000 T; N1 P/ \' y. Z9 m
eth.accounts:以数组形式返回为账户列表,当前只有一个账户,可用eth.accounts[0]表示
' e7 X$ b6 T2 R2 K新建一个账户,查看余额: w5 Y( m/ s8 Z# d; \  N
>personal.newAccount("111")' I* d' T/ D' z$ H; V9 q
"0x866e46b71923d54e6fee26f42ececc216ca76c1d"
5 F; I6 K+ n6 f>eth.getBalance(eth.accounts[1])- V- L( i6 n6 V& `
0
% O+ ?" r8 X' Y" a' u从accounts[0]向accounts[1]发送1个以太币,首先需要解锁accounts[0],使用如下命令
  h: ~+ Q- n1 ~3 R  o; k2 _# E>personal.unlockAccount(eth.accounts[0],"123",0)' r. y4 R1 f# G7 A& G8 P/ H( Z
true3 Y9 {- j3 t3 v+ V/ g# Q% O3 Y
三个参数分别为accounts[0]的地址,创建时的密码及解锁时间(毫秒为单位)。0 代表长时间解锁
# v, U- f1 `. c  n  s0 v/ e, N& s转账操作7 n- H4 O) t8 n# L2 D4 t* V3 X6 _
>eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(1,'ether')})8 l0 M8 Y& h9 n/ W
开启挖矿等待区块验证,转账成功后,查询accounts[1]余额,默认单位是Wei, t4 q& Q1 B5 h4 R: _# f
>eth.getBalance(eth.accounts[1])
& g4 L; g6 e  n' k. W3 |: c1000000000000000001 Q, ?+ J- e- L1 S( b& L" R* H
可以使用web3.fromWei()命令将wei转为ether。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

945坏男人 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10