主页 > imtoken最新版官网 > Geth --- 搭建以太坊本地私有链

Geth --- 搭建以太坊本地私有链

imtoken最新版官网 2023-05-10 05:23:58

Geth是以太坊基金会提供的客户端,可以通过客户端的交互式命令控制台使用以太坊的API。

下面记录一下使用Geth搭建以太坊本地私链的过程。

1.下载geth

官方链接:

个人环境:MacOS

启动以太坊私有链_以太坊的私有链_以太坊 布署 公有链

图片-20220215224607052.png

下载成功后,解压即可。 解压后的文件包括 COPYING 和一个二进制文件 geth. 您可以将 geth 放在系统 PATH 中。

启动以太坊私有链_以太坊的私有链_以太坊 布署 公有链

图片.png

2.准备创世块的配置文件

先创建一个文件夹,存放区块链的相关数据。 比如我的存放位置是~/Documents/Data/Geth/test

启动以太坊私有链_以太坊的私有链_以太坊 布署 公有链

图片.png

然后在~/Documents/Data/Geth/test目录下添加一个genesis.json文件,文件内容如下:(文件名可以任意)

启动以太坊私有链_以太坊的私有链_以太坊 布署 公有链

{
"config": {
"chainId": 66,  //该链的ID。在用geth 启动区块链时,还需要指定一个network 参数。只有当network、chainID、创世区块配置都相同时,才是同一条链。
"homesteadBlock": 0, //相关协议机制的升级区块所在的高度,签名算法是homestead ->eip155 -> eip158,所以从homesteadBlock 之前区块都通过homestead 相关算法机制来验证,homesteadBlock 到eip155Block 之间的用eip155 算法来验证,依次类推。
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0
},
"coinbase" : "0x0000000000000000000000000000000000000000",  //每挖出一个区块,都会获得奖励。该值指定默认情况下把奖励给到哪个账户。实际上,我们每次挖矿开始之前,都会自己指定miner.setEtherbase(UserAddress),一般都会把奖励给自己
"difficulty" : "0x40000",  //定义了每次挖矿时,最终确定nonce 的难度
"extraData" : "",
"gasLimit" : "0xffffffff",  //规定该区块链中,gas 的上限

启动以太坊私有链_以太坊 布署 公有链_以太坊的私有链

"nonce" : "0x0000000000000042", //预定一个随机数,这是一个与PoW 机制有关的值 "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", //一个与PoW 机制有关的值 "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", //在区块链中,区块是相连的,parentHash 指定了本区块的上一个区块Hash。对于创世区块来说,parentHash 为0 "timestamp" : "0x00", // 时间戳,规定创世区块开始的时间 "alloc": { } //代表初始资产配置,在该区块链产生时,就预先赋予这些账户一定数额的WEI(不是ETH) }

可配置的参数不止这些,更多配置可以查看。

3.初始化区块链

我在环境变量里加了geth,所以可以直接用,不加也可以用绝对路径运行。

geth --datadir .init genesis.json

--datadir 是存储区块链数据的位置。 我目前在测试目录中,所以使用 . , init genesis.json是用我们刚才写的genesis.json进行初始化,注意genesis.json的路径位置。

启动以太坊私有链_以太坊的私有链_以太坊 布署 公有链

图片.png

以太坊的私有链_启动以太坊私有链_以太坊 布署 公有链

如果看到 Successfully written genesis 状态启动以太坊私有链,则初始化成功。

启动以太坊私有链_以太坊的私有链_以太坊 布署 公有链

图片.png

初始化成功后会生成geth和keystore目录启动以太坊私有链,其中块数据存放在geth/chaindata,账户数据存放在keystore。

4.启动私链节点

geth --datadir 。 --networkid 666 控制台

--networkid 666中的666是创世块配置文件中的chainId

启动以太坊私有链_以太坊的私有链_以太坊 布署 公有链

图片.png

请参阅欢迎使用 Geth JavaScript 控制台! 说明没问题

启动以太坊私有链_以太坊的私有链_以太坊 布署 公有链

在此处插入图像描述

5.创建一个新帐户

可以通过eth.accounts查看当前账户,当前账户列表为空

启动以太坊私有链_以太坊 布署 公有链_以太坊的私有链

eth.accounts

通过personal.newAccount("1024")可以创建一个账户,"1024"是账户的密码,创建成功后会返回账户的公钥。 如下所示:

personal.newAccount("1024")

启动以太坊私有链_以太坊的私有链_以太坊 布署 公有链

图片.png

创建账户后执行eth.accounts,可以看到账户列表中已经存在新建账户的公钥。

6.开始挖矿

您可以通过eth.getBalance()查看指定账户的余额。 参数可以是账户的公钥,也可以是账户在账户列表中的位置

eth.getBalance("0x28b8c8effbb60999c05380de8b84353176cf3780")

或者

伦理。 getBalance(eth.accounts[0])

启动以太坊私有链_以太坊的私有链_以太坊 布署 公有链

以太坊 布署 公有链_以太坊的私有链_启动以太坊私有链

图片.png

此时第一个账户余额为0

开始挖矿并在挖出一个区块后停止

miner.start(1);admin.sleepBlocks(1);miner.stop();

启动以太坊私有链_以太坊的私有链_以太坊 布署 公有链

图片.png

启动以太坊私有链_以太坊的私有链_以太坊 布署 公有链

图片.png

当百分比达到 100 时,挖矿完成。

使用eth.blockNumber查看当前有多少块,使用eth.getBlock()查看指定块的信息

启动以太坊私有链_以太坊的私有链_以太坊 布署 公有链

图片.png

第一个账户挖出创世块,获得挖矿奖励。

启动以太坊私有链_以太坊的私有链_以太坊 布署 公有链

图片.png

参考链接: