主页 > 下载imtoken安卓版官网 > 使用Geth部署以太坊联盟链

使用Geth部署以太坊联盟链

下载imtoken安卓版官网 2023-04-09 05:17:22

一个区块链学习项目GitHub:github.com/xianfeng92/...

假设以太坊客户端Geth已经安装在Ubunbu 14.04 LTS上使用Geth部署以太坊联盟链

## 创世块文件genesis.json

创世块文件genesis.json是区块链最重要的识别标志之一。 每个区块链都有一个唯一标识的创世块文件。 如果两台机器选择的创世块启动 Geth 文件不同,则不能将它们识别为同一区块链的成员。 因此,同一联盟链中的所有节点必须使用相同的创世块文件进行初始配置。

下面是创世块文件 genesis.json 的示例。

{

“配置”:{

“链号”:110,

“家园块”:0,

“eip155块”:0,

“eip158块”:0

},

“分配”:{

怎么创建以太坊钱包_如何创建以太坊冷钱包_以太坊创建账号

"0x<#A#账户地址>": {"balance": "1000000000000000000"},

"0x<#A账户地址B#>": {"balance": "2000000000000000000"},

"0x<#一个账户地址C#>": {"balance": "3000000000000000000"}

},

“币库”:“0x0000000000000000000000000000000000000000”,

“难度”:“0x400”,

“额外数据”:“”,

“gasLimit”:“0x2fefd8”,

“随机数”:“0x0000000000000000”,

“混合哈希”:

"0x0000000000000000000000000000000000000000000000000000000000000000",

“父母哈希”:

如何创建以太坊冷钱包_以太坊创建账号_怎么创建以太坊钱包

"0x0000000000000000000000000000000000000000000000000000000000000000",

“时间戳”:“0x00”

}

其中config中的内容是区块链相关的基本配置参数,最重要的是链号chainId,这是用来标识区块链的编号,这里设置为110。 alloc为以太坊账户信息,可以留空,等待部署完成再启动以太坊创建账户,也可以预先配置好以太坊账户及其余额,其中账户余额以wei为单位。 其下的coinbase是联盟链挖矿的收益账户,可设置为零地址,运行以太坊挖矿前设置。 difficulty为初始挖矿难度,可设置为较低的值,如0x400。 gasLimit 是每个区块消耗的gas limit。 其余的如 extraData、nonce、mixhash、parentHash 和 timestamp 可以设置为零或留空。

初始配置

创建创世块文件后,下一步就是在以太坊联盟链上创建一个账户。 以太坊账户由一对公钥和私钥组成。 用户先设置账户密码以太坊创建账号,然后使用Geth从账户密码生成一对公私钥,再从公钥生成账户地址,最后将账户地址添加到创世块文件genesis.json中间。

具体操作如下:

geth --datadir testNet 控制台

eth.accounts

[]

账户为空

个人的。 新账户()

以太坊创建账号_如何创建以太坊冷钱包_怎么创建以太坊钱包

输入密码创建以太坊账户

eth.accounts

[“0x15e504a51e91ee6250412e595a00b49b9d4cab1d”]

账号创建成功!

将该地址复制到 genesis.json 的 alloc 参数中。

创建联盟链节点

然后将genesis.json文件和testNet文件夹复制并转移到另一台虚拟机中,并将testNet重命名为testNet1。 接下来使用以下命令创建一个联盟链节点。

geth --datadir ./testNet1 init ./genesis.json

搭建联盟链网络获取完整节点地址

在每台机器上完成联盟链节点的初始配置后,接下来就是连接各个节点。 首先确认网络是连通的以太坊创建账号,每台机器的防火墙都配置正确。 Geth使用的端口都是常开的(Geth常用的端口有8545、30303等),然后在各个节点上使用如下命令启动Geth,获取节点地址。

geth --datadir ./testNet1 --networdid 110 控制台

然后输入:

怎么创建以太坊钱包_如何创建以太坊冷钱包_以太坊创建账号

admin.nodeInfo.enode

enode返回的节点信息格式如下,包括节点的公钥地址和Geth端口号(默认30303)。

“enode://8f3333a83d31763a36ec9fbb0a402a5473a409b0b3fe43d32f65c7d6619e52842d4e1678306e670f74a03c1af914ab9ef0ef3d3fda207e4828f09b850398”29b@[

将“[::]”部分替换为机器的公网IP地址,得到节点的完整地址。

创建静态节点文件

在任意一个节点的.\testNet\geth目录下创建一个静态节点文件static-nodes.json,按照以下格式写入其他节点的完整地址信息:

[

"enode://<节点1公钥>@<节点1 IP地址>:<节点1端口>",

"enode://<node2公钥>@<node2 IP地址>:<node2端口>",

]

在各节点机器上使用如下命令启动Geth,查看其他连接的节点信息。 其中datadir参数为联盟链的数据存储目录,每次启动时必须指定,否则默认使用公链数据存储目录,即连接以太坊公链; networkid参数为连接的网络号,需要与创世块文件中的chainId参数一致。 如果初始化过程正确且网络状态正常,则各节点的Geth客户端启动后会根据__static节点文件__中的节点地址自动搜索并连接其他节点。

行政。 同行

以太坊创建账号_如何创建以太坊冷钱包_怎么创建以太坊钱包

如果其他节点尚未连接,可以动态添加节点。

admin.addPeer("enode://<节点公钥>@<节点IP地址>:<节点端口>")

节点相互连接后,联盟链网络搭建完成。

测试联盟链

首先使用以下命令启动一个节点进行挖矿,其中etherbase参数为以太坊指定的挖矿收益账户。 这里的以太坊只能在联盟链的账户中使用,和公链上的以太坊是完全分开的。 分开; miner.start的参数是指定的挖矿线程数。 由于联盟链挖矿难度低,只需要开启一个线程即可。

eth.setEtherbase(eth.accounts[0]) miner.start(2)

如果你想停止挖矿,可以使用以下命令:

矿工。 停止()

由于genesis.json中挖矿难度初始值设置的很低,而以太坊本身有自动调整挖矿难度的机制,联盟链挖矿速度很快,消耗的算力也很低,而挖矿收益账户会很快收到大量的Ether。 但需要注意的是,挖矿也需要一个初始化过程。 在挖出第一个区块之前,节点需要在大约一分钟内生成DAG有向图,然后大约两三秒就可以生成一个区块。 .

挖矿节点开启后,在另一个节点输入密码解锁账户,发送账户交易信息。 下面的例子从第二个默认账户转1个以太币到第三个默认账户,并返回交易信息的哈希值。

personal.unlockAccount(eth.accounts[1])

eth.sendTransaction({from:eth.accounts[1],to:eth.accounts[2],value:1*1e18})

本文参考