主页 > imtoken官网地址在哪里 > Ubuntu下用Geth搭建自己的以太坊私链

Ubuntu下用Geth搭建自己的以太坊私链

imtoken官网地址在哪里 2023-01-17 09:34:41

原文链接:

] 最近开始学习区块链,开始学习以太坊。以太坊不是我们简单理解的可以交易以太坊的平台,它是一个具有智能合约功能的开源公链平台。在这个平台上以太坊哈希值进度查询,它提供了一个去中心化的以太坊虚拟机环境,借助其专用的加密货币以太(ETH)来处理点对点合约。

作为初学者,如果想快速进入以太坊的学习门槛,搭建以太坊私链是个不错的方法。通过在私链上创建账户、部署合约和进行交易以太坊哈希值进度查询,完成这一系列操作后,您可以初步了解以太坊的理解和基于以太坊的开发方式。

一、环境准备

为了以后更多地了解区块链相关技术,避免在搭建私链的过程中出现各种莫名其妙的问题,当然也是为了让它看起来更高:),我选择完成私链下Linux系统。的建设。具体环境如下:

主机系统:Windows 10 专业版

虚拟机:VMware Workstation Pro 12.5.4

操作系统:Ubuntu 18.4.1 64 位

二、安装 Geth

Geth 是以太坊的一个客户,它的全称是 go-ethereum。以太坊客户端用于接入以太坊网络进行账户管理、交易、挖矿、智能合约部署开发等相关操作。目前有以多种语言实现的客户端。Geth 是用 Go 语言编写的,支持访问以太坊网络,成为一个全节点。它还可以提供 JSON-RPC 接口作为 HTTP-RPC 服务器。其他常用的以太坊客户端如下:

Geth的安装方式有两种,一种是直接下载程序进行安装,另一种是编译源码安装。这里我选择通过下载程序安装。

打开命令行窗口,依次执行以下命令:

sudo apt-get install software-properties-common sudo add-apt-repository -y ppa:ethereum/ethereum sudo add-apt-repository -y ppa:ethereum/ethereum-dev sudo apt-get update sudo apt-get install ethereum

执行上述命令后,执行以下命令:

geth --帮助

会显示Geth版本和命令参数等信息

附上Geth的Git项目地址和wiki地址

吉特:

维基:

三、定义创世区块

1、创建工作目录

##尽量不要在需要管理员权限的路径下创建工作目录,避免权限问题带来的麻烦 mkdir ~/privatechain ##数据目录用于存放账户信息和区块数据 mkdir ~/privatechain/data

2、创建创世块配置文件

在 privatechain 目录中创建一个新的 genesis.json 文件,内容如下:

{“config”:{“chainId”:10,“homesteadBlock”:0,“eip155Block”:0,“eip158Block”:0},“coinbase”:“0x0000000000000000000000000000000000000000”,“难度”:“0x2000”,“extraData” :“”,“ gaslimit”:“ 0xffffffff”,“ nonce”:“ 0x000000000000000042”,“ MixHash”:“0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090099998天”, 08a58f09194e403d02a1928a7bf78646cfc260b0": { "余额": "0x200000000000000000000000000000000000000000000000000000000000000" }, "87366ef81db496edd0ea2055ca605e8686eec1e6”:{“余额”:“0x20000000000000000000000000000000000000000000000000000000000000”}}}

如果你是以太坊的新手,不知道文件内容也没关系。当我们完成了整个私有链的创建,完成了链上账户、合约和交易相关的操作,我们就会明白其中的大部分含义。下表提供了配置文件的简要说明:

参数名称描述chainId指定独立的区块链网络ID。连接到其他节点时将使用网络 ID。以太坊公网的网络ID为1。为了不与公链网络冲突,运行私链节点时必须指定自己的网络ID。不同 ID 网络的节点不能相互连接 homesteadBlock 设置为 0 时,表示使用 homestead 发布链 noncenonce 是用于挖矿的 64 位随机数。注意it和mixhash的设置需要满足以太坊黄皮书4.3.4.Block Header Validity,(第4章中描述的条件mixhash4)是与nonce一起用于挖矿,前一个区块的一部分产生的hash。用于限制区块可以包含的交易信息的总和。我们正在创建一个私有链,它可以填充最大

3、创建一个创世块

cd ~/privatechain geth --datadir ./data init genesis.json

执行上述命令后,会在privatechain下的data目录下生成两个目录,结构如下:

在:

geth目录用于保存我们搭建的私链的区块数据

keystore 目录用于存储用户帐户数据

四、启动私链

执行以下命令启动私链:

## --datadir 表示当前区块链网络数据存放的位置 ## --nodiscover 表示禁止该链被其他节点发现 ## console 2>>geth.log 表示日志输出到geth 。日志。可以打开另一个控制台执行tail -f查看日志 geth --datadir ./data --nodiscover console 2>>geth.log

启动成功后如下图所示:

还有一种启动方法,其作用是启动PRC通讯。启动命令如下:

geth --nodiscover --identity "my etherum" --rpc --rpccorsdomain "*" --datadir ./data --port "30303" --rpcapi "db,eth,net,web3" --networkid 10 控制台 2 >>geth.log

PRC启动命令参数含义如下表所示:

参数名称描述了身份区块链的身份,用于表示当前网络的名称。Nodiscover 关闭 p2p 网络的自动发现。您需要手动添加节点,这有助于我们隐藏私网init的位置并指定创世块文件的位置并创建创世。block datadir 当前区块数据存放的位置 port 网络监听端口,默认 30303rpc 启动 rpc 通信 rpcapi 设置允许客户端连接 rpc,一般 db, eth, net, web3rpccorsdomain 指定什么url可以连接到你的节点执行rpc自定义任务,如果输入的是“*”,任何url都可以连接你的rpc实例的地址rpcaddr连接rpc,默认是localhostrpcport连接rpc的端口,

如果您在创建创世块之前已经启动了私有链,则在创建创世块配置文件后,您可以使用以下命令重新进入geth控制台并使用配置文件更新区块:

geth --datadir 数据 --networkid 10 控制台

提示:--networkid 参数是创世块配置文件中的chainId

五、创建一个帐户

为了方便后面的测试,我们创建了两个账户来演示账户之间的转账操作。

启动私链后,在控制台输入如下命令:

## newAccount的参数是账号密码,这里新账号的密码是123456和000000 > personal.newAccount("123456") > personal.newAccount("000000")

账户创建后,会返回遗传哈希码,代表新账户的地址

此时在私链上查询账户和账户余额信息,会返回相应的结果。

私链上的账户信息如下图所示

由于尚未开始挖矿,账户余额为0

六、挖矿

新创建的账户没有余额。只有通过挖矿赚钱,账户才能有收入。下面介绍如何开始挖矿。

1、开始挖矿

## start参数表示用于挖矿的线程数。如果不写,则表示要使用的最大线程数。成功执行返回 true 或 null > miner.start()

当百分比 = 100 时,开始挖矿

暗示:

2、停止挖矿

执行以下命令停止挖矿

矿工.stop()

挖矿结束后再次查看账户余额

挖一个区块会奖励5个以太币,挖矿的奖励会进入矿工的账户,这个账户叫做coinbase。默认情况下,coinbase 是本地账户中的第一个账户。

此时第二个账户的余额还是0

我们可以通过 miner.setEtherbase() 将其他账户设置为 coinbase

重新开始挖矿。一段时间后,查看第二个账户下的余额。此时,账户已经有余额。

此时显示的账户余额单位是魏。如果要将其转换为以太币,可以执行以下操作:

可以看到,第一个和第二个账户的以太币余额分别为5和15,表示他们分别挖了1个区块和3个区块。

提示:wei是ether的最小单位,1Eth(以太)=1,000,000,000,000,000,000 Wei(10的18次方)。通常,人们也使用 Gwei 作为显示单元。比较常用的是Eth、Gwei和Wei。以太坊中还有其他单位,它们的换算关系如下:

七、转移

在本节中,我们将演示传输操作。在转账之前,我们先来看看两个账户的余额:

执行以下转账命令将 2 个以太币从第一个账户转移到第二个账户:

> amount = web3.toWei(2,'ether') > eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value:amount})

执行后显示如下:

从提示中可以看出,账户没有解锁,需要解锁后才能进行转账操作。解锁命令如下:

##第一个参数为解锁账号,第二个参数为账号密码personal.unlockAccount(eth.accounts[0],'123456')

返回true表示解锁成功

下面重新执行上面的转账操作,返回结果如下:

转账成功后,输出的是交易的哈希码。

此时查看账户信息,发现账户余额没有变化。

这是因为它当前不处于挖矿状态,打包的交易只有在挖矿状态下才能被确认。但是此时我们可以看到交易池中有一个待处理的交易。执行以下命令查看交易池信息:

> txpool.status

从返回的结果中,我们可以看到有一个待处理的交易。

执行以下命令查看待处理事务的详细信息:

> eth.getBlock("待处理", true).transactions

返回的交易信息如下:

至此,我们重启挖矿,稍后查看账户信息如下:

您可以看到第二个帐户还有 2 个 ETH。如果使用挖矿时间段,如果此时看第一个账户,应该比之前少了2个ETH。如果挖矿时间长,账户余额应该会有很大的变化,比以前更多。

八、查看区块和交易信息

1、查看区块信息

> eth.blockNumber

> eth.getBlock(1)

2、查看交易信息

查看上面转账交易成功后的交易hash输出,通过它我们可以查看交易详情

> eth.getTransaction("0x5372d5d4580c5cd2055e13e31d81079ffe64fa151930cc5c70f8c1659d527249")

返回结果如下:

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

Geth 控制台内置了用于操作以太坊的 Javascript 对象,用户可以直接使用这些对象。主要包括:

这些对象的常用命令是: