以太坊单节点私链搭建(go+geth+Etherum Wallet)

前言:

geth和Etherum Wallet是个什么东西呢?

简单说,是以太坊客户端。以太坊客户端主要分成两类。

第一类:后台命令行客户端。

如:geth(go语言),parity(Rust语言),他们是一个与以太坊网络交互的命令行客户端。
另外的命令行客户端还有 ethereumjs-lib(javascript),pyethapp(python),ruby-ethereum(ruby),其中geth 使用的比较普遍。

第二类:可视化钱包。

Etherum Wallet 是属于可视化钱包,提供界面展示,更为直观。我们在geth 客户端中生成的用户,以太坊币数量可以通过Etherum Wallet 钱包可视化展示。当然Etherum Wallet 不只有这些简单的功能,最重要的是能部署智能合约,发布,调用。其他还有很多轻钱包,如 lightWallet,metamask等

一:环境说明

1.ubuntu16.04 64位
2.golang (1.10.3)
3.geth (1.8.12)
4.Etherum Wallet (Etherum-Wallet-liunx64-0-11-1.zip)

二:安装golang

geth依赖golang(版本不能低于1.7),
下载:https://golang.org/dl/
本文下载的是go1.10.3.liunx-amd64.tar.gz
下载后,解压到/usr/local/目录

> tar -C /usr/local/ -xvf go1.10.3.linux-amd64.tar.gz

添加环境变量:

> vi /etc/profile

在打开的文件profile中追加内容:

#golang
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
export GOARCH=amd64  # 注意这个坑

坑描述:
跨平台交叉编译涉及两个重要的环境变量:GOOS和GOARCH,分别代表Target Host OS和Target Host ARCH,如果没有显式设置这些环境变量,我们通过go env可以看到go编译器眼中这两个环境变量的当前值:
> go env
GOARCH 为386 或者amd64。如果此项配置错误,在编译安装其他程序时会报错:
go install: cannot install cross-compiled binaries when GOBIN is set

执行命令,使profile生效:

> source /etc/profile

golang安装部署完成,测试:

> go version
go version go1.10.3 linux/amd64

编写hello world程序,测试:

package main
import "fmt"
func main() {
    fmt.Println("Hello World!")
}

存储为hello.go
运行hello.go

> go run hello.go
Hello World!

三:安装geth

geth官网:https://geth.ethereum.org/
geth下载地址:https://github.com/ethereum/go-ethereum
解压 go-ethereum-master.zip,编译安装

> unzip go-ethereum-master.zip
> cd go-ethereum-master
> make all

在go-ethereum-master目录下会生成build目录,在build目录下执行命令,查看是否安装成功:

> ./bin/geth help

将build文件夹移动到/usr/local/,并重命名为geth。
将geth配置到环境变量,在/etc/profile文件中追加一下内容:

> mv ./build /usr/local/ETH/geth
> vi /etc/profile
...
#geth
export GETH_HOME=/usr/local/ETH/geth/bin
export PATH=$PATH:$GETH_HOME
...
> source /etc/profile
> geth help
...

四:安装Etherum Wallet

ETH官网:https://www.ethereum.org/
Etherum Wallet下载地址:https://github.com/ethereum/mist/releases/tag/v0.11.0

注意:
此下载地址中有Etherum Wallet、Mist;ubuntu系统下,Mist链接私链后,账户能显示,但不能做其他操作(原因未知),换用Etherum Wallet后,转账等可正常操作

下载后,解压到/usr/local/ETH/mist目录
直接运行etherumwallet文件即可
将Etherum Wallet配置到环境变量,在/etc/profile文件中追加一下内容:

> vi /etc/profile
...
#Etherum Wallet
export EW_HOME=/usr/local/ETH/EtherumWallet/
export PATH=$PATH:$EW_HOME
...
> source /etc/profile
> etherumwallet
...

五:创世块

5.1创建创世块文件

新建文件genesis.json,内容如下

{
  "config": {
    "chainId": 101,
    "homesteadBlock": 0,
    "eip155Block": 0,
    "eip158Block": 0
  },
  "alloc": {},
  "coinbase": "0x0000000000000000000000000000000000000000",
  "difficulty": "0x400",
  "extraData": "",
  "gasLimit": "0xffffffff",
  "nonce": "0x0000000000000042",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp": "0x00"
}

参数说明:
chainId : 以太坊区块链网络Id,ethereum主链是1,私有链只用不要与主链冲突即可。
alloc : 预留账户,如下
“alloc”:{
“0x0000000000000000000000000000000000000001”:{“balance”:”121312321”},
“0x0000000000000000000000000000000000000002”:{“balance”:”121312321”},
}
Coinbase: 旷工账户
Difficulty: 挖矿难度,0x400,这个是简单。
extraData:相当于备注
gasLimit:最小消耗gas
nonce : 64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊黄皮书中的要求
parentHash : 上一个区块的Hash值,因为是创世块,石头里蹦出来的,没有在它前面的,所以是0
Timestamp : 时间戳

5.2初始化创世块

在桌面新建目录EthDBSpace,执行初始化命令:

> cd ~/Desktop
> mkdir EthDBSpace
> geth --datadir  EthDBSpace  init  genesis.json  # genesis.json文件在桌面

注意:
记得去查看下EthDBSpace文件夹下的文件变化

六、挖矿

6.1启动geth客户端节点

简洁点的命令:

> geth --datadir ./ console  # ./是你之前创建的EthDBSpace文件夹地址

执行命令后的屏幕输出:
以太坊单节点私链搭建(go+geth+Etherum Wallet)_第1张图片
复杂点的命令:

> geth --identity node1 --datadir ./EthDBSpace --rpc  
--rpcapi db,eth,net,web3 --rpcaddr 127.0.0.1  
--rpcport 8481 --port 30301 --networkid 29381 console

使用命令 geth -h 可以查看geth 相关的帮助文档。这里我说几个常用的属性。
- -Identity : 节点身份标识,起个名字
- -datadir : 指定节点存在位置,“data0”
- -rpc : 启用http-rpc服务器
- -rpcapi : 基于http-rpc提供的api接口。eth,net,web3,db…
- -rpcaddr : http-rpc服务器接口地址:默认“127.0.0.1”
- -rpcport : http-rpc 端口(多节点时,不要重复)
- -port : 节点端口号(多节点时,不要重复)
- -networkid : 网络标识符 随便指定一个id(确保多节点是统一网络,保持一致)

6.2创建账户、开启挖矿

执行6.1命令后,会进入命令行,在命令行下,创建账户,并启动挖矿:

> personal.newAccount("123456")
> miner.start()

挖到新区块如下图:
以太坊单节点私链搭建(go+geth+Etherum Wallet)_第2张图片

其他geth常用命令:
1.创建账户(可创建多个)

> personal.newAccount("123456")

2.获取账户数组

> eth.accounts  

3.解锁账户,转账时可使用

> personal.unlockAccount(eth.accounts[0], "123456")

4.节点主账户

>  eth.coinbase

5.查看账户余额

> eth.getBalance(eth.accounts[0])

6.启动,结束挖矿,写区块

> miner.start()
> ...
> miner.stop() 

七:Etherum Wallet连接私链

在执行6.1命令时,最后一行打印的是url,即geth.ipc文件路径,在这里会用到:
开启新的终端,执行Etherum Wallet启动命令:

> ethereumwallet --rpc geth.ipc文件路径

以太坊单节点私链搭建(go+geth+Etherum Wallet)_第3张图片
Etherum Walle启动后的界面:(我这里创建了3个账户)
以太坊单节点私链搭建(go+geth+Etherum Wallet)_第4张图片

八:使用Etherum Wallet转账

选中某个账户,点击Etherum Wallet上方的“SEND”,进入转账界面,填入收款账户,提交即可。

注:
开启挖矿,才能转出成功。
如果你的Etherum Wallet中某个账户一直显示没有收到账款,可以尝试重启下Etherum Wallet。

复制账户快捷方式:
以太坊单节点私链搭建(go+geth+Etherum Wallet)_第5张图片

注:
Transfer Ether & Tokens 为收款功能

参考资料:https://www.cnblogs.com/sumingk/articles/9030469.html

你可能感兴趣的:(环境搭建,区块链)