Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
1.安装go语言环境0 @. }. M, X6 w
(1)下载linux下go的安装包
% i/ z. f0 i' f7 f* z$ wget https://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz
9 U7 e! N& y. U4 D; K  S% B(2)下载完后,进入到下载目录,将其解压到 /usr/local 文件夹下并在$HOME下新建一个文件夹go:
  B- F3 t; R# t" K2 M( U$ Q5 t' J$ sudo tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz; _0 a; X. m9 E7 e' ^2 z& Y
$ mkdir go( s% t4 A' E& r8 G- }! D% r
(3)配置环境变量& q1 P. a2 Z3 R  h
使用如下命令打开环境变量配置文件
5 H( p! f) \2 N+ [/ @$ N$ sudo vim ~/.bashrc
( Z3 C1 |* A/ Q0 ]1 x# |将下列代码复制粘贴到文件最后,wq命令保存退出
7 c" B/ j! l; W2 I  n: D! _2 |export GOROOT=/usr/local/go
9 I9 D" B& v- A: V' Q5 T2 F- _3 z5 P. xexport GOBIN=$GOROOT/bin
7 L0 e  C+ `6 |5 g3 t* j- Dexport GOPATH=$HOME/go& W$ P3 {* j" M
export PATH=$PATH:$GOBIN
4 M, M8 t9 W+ y9 w输入如下命令使环境变量生效(注意:不用加sudo)! @4 d! l% B# {* {7 n! C3 r! J  Q. i
$ source ~/.bashrc
3 `* y3 G3 p1 b, |( a至此,go语言环境已经安装完成,输入go version查看安装是否成功2 N8 s# D9 p( s9 J5 s+ k- J6 i
$ go version1 Y5 @/ J& g, D( Q
go version go1.10.3 linux/amd641 p" b6 b" m/ M+ J) k7 }
2.安装以太坊客户端Ethereum0 X9 C5 S2 @- v! p& S
使用如下命令进行安装
  x8 \% ?: J3 g6 `$ sudo apt-get install software-properties-common5 X9 x4 z8 T  D5 y
$ sudo add-apt-repository -y ppa:ethereum/ethereum
5 |% \- n9 K! }+ Y5 }: ?$ sudo apt-get update
8 `- P  u1 O+ b! E5 b7 ?4 h# p9 F$ sudo apt-get install ethereum1 l7 V: n* |( n5 |* d, \
安装完后,输入geth version查看安装是否成功
# Q; T% O1 Y. L$ geth version1 C8 \; c, D: I* z8 o. x% V
Geth Version: 1.8.11-stable
' Z3 e( u8 c* a9 a4 x3.以太坊私有链搭建
. h3 _& H% u1 J) f( S; t  v(1)新建一个文件夹,例如Mychain,用来保存私有链的数据。创建一个初始化的配置文件,genesis.json7 Y; R3 q9 l! g
$ mkdir Mychain! o" Y8 d7 I5 ~  _
$ vim genesis.json+ a' L1 s) N3 R* v5 ^0 ^
然后将如下的配置信息写入到genesis.json文件中(注意:chainId不能为0)
# m1 P1 R! j: w# p& q1 S6 A{" |  a6 W! g* U4 x. C
  "config": {# ^* t0 j5 C) `7 x
        "chainId": 3,  p' s4 y' k% H% H
        "homesteadBlock": 0,
, M" z; l& Z/ ]% Y# ^; r' _/ P        "eip155Block": 0,% J, m! H, L+ D3 l8 v. K8 r0 ^" S
        "eip158Block": 0/ y, E, r  D' R# K1 t+ @& H- @0 g
    },, A, l5 v, D- ]
  "alloc"      : {},
' n# [- u7 h# M' P  "coinbase"   : "0x0000000000000000000000000000000000000000",0 j/ e7 m! _' J; [9 I5 |
  "difficulty" : "0x20000",
1 h1 ^/ X% @: e8 ]/ G: w# x  "extraData"  : "",
8 Y# Q+ \- m  H0 K  e- e* b  "gasLimit"   : "0x2fefd8",
3 F/ u+ y; K5 R, I% V  "nonce"      : "0x0000000000000042",, A0 P1 ~8 N( v  V
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",1 D" }8 [) `, `4 C# C  Q8 F' B
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
9 Z( a  H- H( S+ X- V  "timestamp"  : "0x00"
- l0 J) E: ?0 {  P& z  W5 q}4 l( }$ _- S, K, q
(2)初始化创世区块,并指定数据存放路径
- ^/ }4 j, o  n4 P8 K) M  }2 N4 D$ geth --datadir Mychain init genesis.json
+ _6 x) z- p) F) d5 E( @6 R: Z& c1 {; t(3)启动私有链节点,并将日志输入到mychain.log
4 s& j, M# z! [! V* |5 @( N" T! R- `, Q# 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
9 v3 l% u" ?+ p9 u1 }. |具体参数含义请参考这个博客:geth命令* p: r! A0 ^5 T* L( }5 g7 v& P
启动成功后进入控制台界面,如下所示:# O# w5 g# N. {' e* q
Welcome to the Geth JavaScript console!
! b1 T( |( B* c2 `( L 4 ^( ^$ X9 Y! j3 F$ q6 Y, u; }
instance: Geth/mychain/v1.8.11-stable-dea1ce05/linux-amd64/go1.10$ i" M: h0 u/ h/ g8 d% 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- `0 V9 n. B/ {& c. u/ ]! s
>
0 a( y+ D  l& K% i+ P( p; P至此,ubuntu 16.04 下以太坊私有链环境已经搭好,接下在进行简单测试。
  q$ v7 Z. {5 x( i- {4.测试
- y+ w+ B- M/ E; Z2 i(1)创建新账户+ j5 X% Z* `! @! D6 p2 F
personl.newAccount("密码")7 @; T/ q# V  N% C! J1 h5 P# s7 c7 _
创建成功将返回账户的地址& v. m( q8 P, T# R, f5 c# r7 T
> personal.newAccount("123")- n  N% v, y. V$ p* i. Y  U' }
"0xe6319357003ff9889b7a849f5ec66b2903d08289"
3 n/ {; L: M7 @3 ]3 q, K" t: j(2)查询账户余额
4 d9 P% g" G2 o% j, |eth.getBalance("账户地址")5 U% l3 B+ B" x( B; M' J  p8 I
由于新建账户,没有余额,所以查询的结果为 02 e+ A: I' ^7 i( f
> eth.getBalance("0xe6319357003ff9889b7a849f5ec66b2903d08289")
0 ^; {2 J! g# }) |0# S" s' s; _, Y2 s2 T% S
(3)开启/停止挖矿,第一次开起需要等待一段时间。
0 S9 @' P( k* T, ]" Q7 L2 ]miner.start()! I0 X4 t) s1 ~" w3 J
miner.stop()
7 i3 A2 H/ X9 l查看挖矿日志,可以新开启一个终端,输入下面命令进行查看
+ w# z: A8 R( `; j6 R$ tail -f mychain.log
' M& b; ]: A0 W0 Z$ a8 j(4)转账" Z6 \4 m5 r  v/ o5 g
挖矿成功后,默认会将以太币给第一个账户,查看余额
8 f5 M2 _" `8 a$ s* X/ O>eth.getBalance(eth.accounts[0])
  X5 n  o3 k/ H8 w$ z  K* s; u. L+ X135000000000000000000
: p1 U' [/ y: e1 c& r8 N- T3 k- k' eeth.accounts:以数组形式返回为账户列表,当前只有一个账户,可用eth.accounts[0]表示0 j7 a" A% Y4 n$ ~
新建一个账户,查看余额9 h7 ?8 f) L2 F2 E
>personal.newAccount("111")
4 B! A, g8 [$ e* _! t1 e2 V/ x, @"0x866e46b71923d54e6fee26f42ececc216ca76c1d"7 p6 H2 f$ g2 {% E
>eth.getBalance(eth.accounts[1])
7 W1 R7 j: v8 V0+ M. A/ u8 E& w* Q! e1 X6 R
从accounts[0]向accounts[1]发送1个以太币,首先需要解锁accounts[0],使用如下命令
, ^  z( z. E# @>personal.unlockAccount(eth.accounts[0],"123",0)6 J2 r1 o  U' |; I5 L/ r7 {
true
$ b, {) K: Y6 `  \三个参数分别为accounts[0]的地址,创建时的密码及解锁时间(毫秒为单位)。0 代表长时间解锁5 k; t5 [3 \) i1 D) I6 i  u7 v' P
转账操作
8 U- J4 j' p+ {$ n+ R% k+ F- [>eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(1,'ether')})8 \6 P/ ]4 j8 R/ Y" i
开启挖矿等待区块验证,转账成功后,查询accounts[1]余额,默认单位是Wei; ?1 w4 C- b, ]; y; U
>eth.getBalance(eth.accounts[1])
+ ]) ^% a/ n% X4 u" Z1000000000000000002 u# `4 D) }2 X. u7 u
可以使用web3.fromWei()命令将wei转为ether。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

945坏男人 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10