主页 > imtoken官网下载 > 基于以太坊的私有链构建-第1讲

基于以太坊的私有链构建-第1讲

imtoken官网下载 2023-05-21 05:31:21

Geth简介

首先确保你已经完成了 go-ethereum 客户端的安装。 go-ethereum 客户端,通常称为 Geth,是一个命令行界面以太坊是私有链还是公有链,可执行在 Go 中实现的完整以太坊节点。 Geth 得益于 Go 语言的多平台特性,支持在多个平台(如 Windows、Linux、Mac)上使用。 Geth是以太坊协议的具体实现。 通过Geth,您可以实现以太坊的各种功能,如创建、编辑和删除账户,启用挖矿,转账以太币,部署和执行智能合约等。

检查是否安装成功

geth--帮助

如果出现版本号和一些帮助提示命令,则安装成功

以太坊是私有链还是公有链_ubuntu以太坊私有链_以太坊公链上都有什么币

创建创世块

在以太坊上,可以通过自定义创世块来构建私有链,非常方便开发和调试。 我们知道每个区块都是在前一个区块的基础上产生的,但是作为整个链的第一个区块的创世块是如何产生的呢?需要配置一个json文件,这里命名为genesis.json,其内容如下

{
  "config": {
        "chainId": 10, 
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0

以太坊是私有链还是公有链_ubuntu以太坊私有链_以太坊公链上都有什么币

}, "alloc" : {}, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x20000", "extraData" : "", "gasLimit" : "0x2fefd8", "nonce" : "0x0000000000000042", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00" }

ubuntu以太坊私有链_以太坊是私有链还是公有链_以太坊公链上都有什么币

以下是对这些字段的解释:

参数名称说明

分配

用于为账户预先设置账号和以太币数量,因为私链挖矿相对容易,所以我们不需要预先设置一个账户有币,需要的时候可以自己创建。

币库

矿工账户

困难

设置当前区块的难度,越大越难挖

额外数据

附加信息,可以填写个人信息 注意需要以0x开头,需要将文字转为十六进制

气体限制

这个值设置了对GAS消耗总量的限制,用来限制区块可以包含的交易信息总和,因为这是私有链,可以填一个更大的值

以太坊是私有链还是公有链_ubuntu以太坊私有链_以太坊公链上都有什么币

随机数

nonce是一个64位的随机数,在挖矿的时候会用到Hash运算

混合哈希

与 nonce 一起用于挖掘,从前一个块的一部分生成的哈希。 注意it和nonce的设置需要满足黄皮书4.3.4描述的条件。 区块头有效性以太坊是私有链还是公有链,以太坊 (44) 部分。

父哈希

上一个区块的hash,因为这是创世区块,所以为0

时间戳

设置创世块的时间戳

链号

指定一个独立的区块链网络ID。 连接到其他节点时将使用网络 ID。 以太坊公网网络ID为1,为了不与公链网络冲突,运行私链节点时必须指定自己的网络ID。 不同 ID 网络的节点不能相互连接。

接下来,需要将创世块的信息写入区块链。 这里,我们先在桌面上新建一个文件夹privatetechian,然后在这个文件夹下新建一个目录blockdata。 这个blockdata目录是用来存放区块数据的,相当于一个根节点。 当我们根据genesis.json生成一个根节点后,后面可以生成一个新的区块连接到这个根节点上,这样就可以进行交易了。 目录结构如图:

以太坊是私有链还是公有链_ubuntu以太坊私有链_以太坊公链上都有什么币

ubuntu以太坊私有链_以太坊是私有链还是公有链_以太坊公链上都有什么币

接下来进入privatechain,开始初始化操作

cd privatechain
geth --datadir blockdata init genesis.json

这条命令的主体是geth init,意思是启动并初始化一个新的创世块,即初始化区块链。 该命令可以有选项和参数,其中--datadir选项后跟一个目录名,这里是data0,表示指定的数据存储目录为blockdata,genesis.json是init命令的参数。

运行上述命令将读取 genesis.json 文件并将创世块写入区块链。 如果在日志信息中看到Successfully written genesis state字样,说明初始化成功。

以太坊是私有链还是公有链_ubuntu以太坊私有链_以太坊公链上都有什么币

如果初始化成功,会发现多了2个目录,geth和keystore目录如下:

以太坊是私有链还是公有链_ubuntu以太坊私有链_以太坊公链上都有什么币

其中,区块数据存放在geth/chaindata,账户数据存放在keystore。

启动私有链节点

初始化完成后,您将拥有自己的私有链。 输入以下命令行以启动节点。

以太坊是私有链还是公有链_ubuntu以太坊私有链_以太坊公链上都有什么币

geth --datadir blockdata --networkid 100 console

这条命令的主体是geth console,表示启动节点,进入交互式JavaScript环境,--datadir blockdata表示存放区块数据的目录,--networkid 100表示​​私有链的网络ID为100,网络id连接到其他节点时会用到。 以太坊公网的network id为1,为了不和公链网络冲突,我们这里指定为100。

启动成功后,我们会看到如下信息:Welcome to the Geth JavaScript console!

以太坊是私有链还是公有链_ubuntu以太坊私有链_以太坊公链上都有什么币

至此,你已经进入了一个交互式的Javascript执行环境,你可以在其中执行Javascript代码。 在这个环境中,还内置了一些操作以太坊的Javascript对象,可以直接使用这些对象。 这些对象主要包括:

eth:包含一些操作区块链相关的方法

net:包含以下方法查看p2p网络状态

admin:包含一些管理节点相关的方法

miner:包含一些启动和停止挖矿的方法

personal:主要包括一些管理账户的方法

txpool:包含一些查看交易内存池的方法

web3:包含以上对象,还包含一些单位换算的方法

启动节点后,您可以在这个控制台上进行很多操作,包括创建账户、挖矿、交易等。

未完待续。 . .