使用Geth使用以太坊搭建私有链

环境:Windows10 + VirtualBox + Ubuntu16.04.6
参考教程: https://blog.csdn.net/kevinyankai/article/details/98623397?utm_source=app
以太坊是一个开源的有智能合约功能的公共区块链平台。在这个平台上,使用它专用的加密货币——以太币(ETH)提供去中心化的以太虚拟环境处理点对点的合约。

一、安装Geth

Geth是以太坊的客户端,其全称是go-ethereum。以太坊的客户端用于接入以太坊网络,进行账户的管理、交易、挖矿、智能合约部署开发等相关的工作。
Geth的安装方式:通过直接下载程序进行安装
依次执行以下命令:

sudo apt-get install software-properties-common

使用Geth使用以太坊搭建私有链_第1张图片
#启动PPA储存库

sudo add-apt-repository -y ppa:ethereum/ethereum

使用Geth使用以太坊搭建私有链_第2张图片
#访问源列表里的每个网址,并读取软件列表,然后保存在电脑

sudo add-apt-repository -y ppa:ethereum/ethereum-dev

使用Geth使用以太坊搭建私有链_第3张图片

sudo apt-get update

使用Geth使用以太坊搭建私有链_第4张图片
#安装Go Ethereum

sudo apt-get install ethereum

使用Geth使用以太坊搭建私有链_第5张图片
安装完成后检查:

geth --help

使用Geth使用以太坊搭建私有链_第6张图片

二、定义创世区块

1.创建工作目录

#尽量不要在需要管理员权限的路径下创建工作目录,避免出现因权限问题引起的麻烦

mkdir ~/privatechain

#data目录用于存放账户信息和区块数据

mkdir ~/privatechain/data

2.创建创世区块配置文件

在privatechain目录下新建genesis.json文件,文件内容如下:

cd  ~/privatechain
vim genesis.json
{
  "config": {
    "chainId": 666,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock": 0,
    "ethash": {}
  },
  "nonce": "0x0",
  "timestamp": "0x5ddf8f3e",
  "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "gasLimit": "0x47b760",
  "difficulty": "0x00002",
  "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x0000000000000000000000000000000000000000",
  "alloc": { },
  "number": "0x0",
  "gasUsed": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

三、创建创世区块

geth --datadir ./data init genesis.json

使用Geth使用以太坊搭建私有链_第7张图片
创建创世区块完成之后,会生成两个文件:geth和keystore。
geth目录保存所见区块链的区块数据。
keystore目录用于保存用户的账户数据。

四、启动私有链

#–datadir 表示当前区块链网络数据存放的位置
#–nodiscover 表示该链禁止被其他节点发现 # console 2>>geth.log 表示将日志输出到geth.log。

geth --datadir ./data --nodiscover console 2>>geth.log

成功启动后如下图所示:
在这里插入图片描述

五、创建账户

在私有链上查看自己的账户:输入命令:

eth.accounts

在这里插入图片描述
[]表示该私有链中的账户为空。虽然以太坊的私有链被创建出来了,但是没有任何用户。

在本实验中我们创建两个账户,其中newAccount的参数为账号密码,这里新账户的密码分别为123456和000000。

personal.newAccount("123456")
personal.newAccount("000000")

在这里插入图片描述
查看私有链的账户信息:
在这里插入图片描述
查看账户中的余额,由于没有挖矿,账户中的余额为0。在这里插入图片描述

六、挖矿

通过eth.coinbase设置进行挖矿的账户:

eth.coinbase

在这里插入图片描述
进行挖矿:

miner.start()

在这里插入图片描述
建立一个新的终端:
在privatechain路径下输入:

tail -f geth.log

使用Geth使用以太坊搭建私有链_第8张图片

初次挖矿的时候要等的时间长一点。
在这里插入图片描述
查看账户的余额:
在这里插入图片描述
此时显示的账户余额的单位为Wei,如果要转成以太币,可进行如下操作:
在这里插入图片描述
提示:Wei是以太币的最小单位,1Eth(以太币)= 1,000,000,000,000,000,000 Wei (10的18次方)。

七、转账

在转账前先查看一下两个账户的余额:
在这里插入图片描述
执行以下转账命令,将第一个账户的1个以太币转到第二个账户下:
使用Geth使用以太坊搭建私有链_第9张图片
执行后显示上述问题,从提示可以看出是账户没有解锁,需要先解锁才能执行转账操作。解锁命令如下:
在这里插入图片描述
第一个参数为解锁的账户;第二个参数是解锁的密码。返回ture表示解锁成功。
下面重新执行上面的转账操作,返回结果如下:
在这里插入图片描述
转账成功后返回的是交易的hash码。
此时查看账户的余额没有发生变化。
在这里插入图片描述
这是因为当前账户没有处于挖矿状态下,只有处于挖矿的状态下才能确认打包交易,此时我们可以在交易池中看到有一笔待确认的交易。执行以下命令查看交易池的信息:
在这里插入图片描述
从返回的结果中可以看到有一个待确认的交易。
使用Geth使用以太坊搭建私有链_第10张图片
此时重新启动挖矿:

miner.start()

此时可以在一个新的终端中进行查看:
使用Geth使用以太坊搭建私有链_第11张图片
表示挖矿成功。
停止挖矿:

miner.stop()

查看账户的余额:
在这里插入图片描述
可以看到第二个账户多了1个ETH,我的挖矿时间真的是太长了,两个多小时,现在查看一下第一个账户的余额,可能会有挖矿到的ETH。
在这里插入图片描述
可以看到,如果eth.accounts[0]原本有2个ETH,现在转给了eth.accounts[1]账户1个ETH,本应该剩余1个ETH,但是在挖矿的过程中,多增加了2个ETH。

八、查看区块和交易信息

1.查看区块信息

查看区块总数

eth.blockNumber

在这里插入图片描述
根据区块编号查看区块信息:

eth.getBlock(1)

使用Geth使用以太坊搭建私有链_第12张图片

2.查看交易信息

查看上面转账交易成功后输出的hash,通过该hash可以查看交易详细信息。

eth.getTransaction("交易hash")

返回结果如下:
使用Geth使用以太坊搭建私有链_第13张图片

九、Geth控制台常用对象及命令

Geth控制台内置了一些用来操作以太坊的JavaScript对象,用户可以直接使用这些对象。主要包括:
eth:包含一些跟操作区块链相关的方法
net:包含以下查看网络p2p状态的方法
admin:包含一些与管理节点相关的方法
miner:包含启动&停止挖矿的一些方法
personal:主要包含一些管理账户的方法
txpool:包含一些查看交易内存池的方法
Web3:包含了以上方法,还包含一些单位换算的方法
这些对象的常用命令有:
personal.newAccount():创建账户
personal.unlockAccount():解锁账户
eth.accounts:枚举系统中的账户
eth.getBalance():查看账户余额,返回值的单位为Wei。
eth.blockNumber:列出区块总数
eth.getTransaction():根据交易hash获取交易的详细信息
miner.start():开始挖矿
miner.stop():停止挖矿
eth.coinbase:挖矿奖励的账户
txpool.status:交易池中的状态

你可能感兴趣的:(使用Geth使用以太坊搭建私有链)