Ubuntu 16.04 快速搭建以太坊私有链开发环境
945坏男人
发表于 2023-1-9 17:19:40
137
0
0
(1)下载linux下go的安装包
$ wget https://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz
(2)下载完后,进入到下载目录,将其解压到 /usr/local 文件夹下并在$HOME下新建一个文件夹go:
$ 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
使用如下命令打开环境变量配置文件
$ sudo vim ~/.bashrc
将下列代码复制粘贴到文件最后,wq命令保存退出
export GOROOT=/usr/local/go
export GOBIN=$GOROOT/bin
export GOPATH=$HOME/go& W$ P3 {* j" M
export PATH=$PATH:$GOBIN
输入如下命令使环境变量生效(注意:不用加sudo)! @4 d! l% B# {* {7 n! C3 r! J Q. i
$ source ~/.bashrc
至此,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
使用如下命令进行安装
$ sudo apt-get install software-properties-common5 X9 x4 z8 T D5 y
$ sudo add-apt-repository -y ppa:ethereum/ethereum
$ sudo apt-get update
$ sudo apt-get install ethereum1 l7 V: n* |( n5 |* d, \
安装完后,输入geth version查看安装是否成功
$ geth version1 C8 \; c, D: I* z8 o. x% V
Geth Version: 1.8.11-stable
3.以太坊私有链搭建
(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)
{" | a6 W! g* U4 x. C
"config": {# ^* t0 j5 C) `7 x
"chainId": 3, p' s4 y' k% H% H
"homesteadBlock": 0,
"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" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",0 j/ e7 m! _' J; [9 I5 |
"difficulty" : "0x20000",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000042",, A0 P1 ~8 N( v V
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",1 D" }8 [) `, `4 C# C Q8 F' B
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}4 l( }$ _- S, K, q
(2)初始化创世区块,并指定数据存放路径
$ geth --datadir Mychain init genesis.json
(3)启动私有链节点,并将日志输入到mychain.log
$ 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
具体参数含义请参考这个博客:geth命令* p: r! A0 ^5 T* L( }5 g7 v& P
启动成功后进入控制台界面,如下所示:# O# w5 g# N. {' e* q
Welcome to the Geth JavaScript console!
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
>
至此,ubuntu 16.04 下以太坊私有链环境已经搭好,接下在进行简单测试。
4.测试
(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"
(2)查询账户余额
eth.getBalance("账户地址")5 U% l3 B+ B" x( B; M' J p8 I
由于新建账户,没有余额,所以查询的结果为 02 e+ A: I' ^7 i( f
> eth.getBalance("0xe6319357003ff9889b7a849f5ec66b2903d08289")
0# S" s' s; _, Y2 s2 T% S
(3)开启/停止挖矿,第一次开起需要等待一段时间。
miner.start()! I0 X4 t) s1 ~" w3 J
miner.stop()
查看挖矿日志,可以新开启一个终端,输入下面命令进行查看
$ tail -f mychain.log
(4)转账" Z6 \4 m5 r v/ o5 g
挖矿成功后,默认会将以太币给第一个账户,查看余额
>eth.getBalance(eth.accounts[0])
135000000000000000000
eth.accounts:以数组形式返回为账户列表,当前只有一个账户,可用eth.accounts[0]表示0 j7 a" A% Y4 n$ ~
新建一个账户,查看余额9 h7 ?8 f) L2 F2 E
>personal.newAccount("111")
"0x866e46b71923d54e6fee26f42ececc216ca76c1d"7 p6 H2 f$ g2 {% E
>eth.getBalance(eth.accounts[1])
0+ M. A/ u8 E& w* Q! e1 X6 R
从accounts[0]向accounts[1]发送1个以太币,首先需要解锁accounts[0],使用如下命令
>personal.unlockAccount(eth.accounts[0],"123",0)6 J2 r1 o U' |; I5 L/ r7 {
true
三个参数分别为accounts[0]的地址,创建时的密码及解锁时间(毫秒为单位)。0 代表长时间解锁5 k; t5 [3 \) i1 D) I6 i u7 v' P
转账操作
>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])
1000000000000000002 u# `4 D) }2 X. u7 u
可以使用web3.fromWei()命令将wei转为ether。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
成为第一个吐槽的人