主页 > imtoken官网是哪个 > (2023年更新(今日/知乎)以太坊私链建设(中国)搜狗百科
(2023年更新(今日/知乎)以太坊私链建设(中国)搜狗百科
本文是在Windows上搭建私有链。 如果要开发区块链,强烈建议在Linux环境下使用。 构建过程与Windows类似,可参考以下内容。
1.安装geth客户端
geth是Go Ethereum,一个用go语言实现的以太坊客户端。 Geth 是以太坊协议的具体实现。 通过Geth,您可以实现以太坊的各种功能,如创建、编辑和删除账户、启用挖矿、转账以太坊、部署和执行智能合约等。
下载链接:
安装指南:
2.开始建链(参考区块链学派)
step1: 创建目录和genesis.json
我在E盘创建了tmpPrivate文件夹,在该文件夹下创建了genesis.json文件,用notepad++打开,写入如下内容:
{ "config":{"chainId":15,"homesteadBlock":0,"eip155Block":0,"eip158Block":0 }, "nonce": "0x0000000000000042", "timestamp": "0x00", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x00", "gasLimit": "0x80000000", "difficulty": "0x400", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x3333333333333333333333333333333333333333", "alloc": { }}
参数说明:
混合散列
用于使用随机数进行挖掘,随机数是从前一个块的一部分生成的哈希值。 注意him和nonce的设置需要满足黄皮书4.3.4描述的条件。 区块头有效性,以太坊 (44) 部分。 .
随机数
nonce 是用于挖矿的 64 位随机数。 注意it和mixhash的设置需要满足黄皮书4.3.4描述的条件。 区块头有效性,以太坊 (44)。
困难
设置当前区块的难度。 如果难度太高,CPU挖矿会很困难。这里设置一个较小的难度
分发
用于预先设置账号和账户的以太币数量。 因为私链挖矿相对容易,我们不需要预先设置账户存币,需要的时候可以自己创建。
币库
矿工账号,随便填
时间戳
设置创世块的时间戳
父散列
上一个区块的哈希值,因为是创世区块搭建私有以太坊节点,所以这个值为0
额外数据
附加信息,随便填,可以填写你的个人信息
气体限制
该值设置了总耗气量的限制,用于限制一个区块可以包含的交易信息的总和。 由于我们是私有链,所以我们填最大值。
几种可能的错误:
Fatal: invalid genesis file: missing 0x prefix for hex data: 这个报错信息的意思很明确,就是在你的json文件中,对于十六进制数据,需要加上0x前缀
Fatal: invalid genesis file: hex string has odd length: 从v1.6开始,设置的十六进制值不能是奇数,比如不能是0x0,而应该是0x00。
Fatal: failed to write genesis block: genesis has no chain configuration: 此错误消息表示您的 json 文件缺少配置部分。 看到这个信息,我们不需要将geth返回到v1.5版本,而是需要添加config部分。
Error: invalid sender undefined: 这个错误不会导致初始化失败,但是会出现在以后的转账(eth.sendTransaction),或者部署智能合约的时候。 解决办法是chainId不能设置为0,如果按照github上官方的配置文件,就会出现这个错误。
step2:创建创世块
命令行进入tmpPrivate目录搭建私有以太坊节点,输入
geth --datadir "./" init genesis.json
完成创世块的创建,结果如下:
这个时候你可以注意一下。 此时会在当前目录下添加geth和keystore两个文件夹:
区块链的相关数据存储在geth中
keystore 在链上保存用户信息
step3:创建自己的私有链
执行创建私有链的命令:
geth -- datadir "./" --nodiscover console 2>>geth.log
范围:
--datadir 代表文件夹地址,
--nodiscover 表示私链不应该让公网节点发现里面的代码。 console 2>> geth.log 表示控制台的输出部分到文件geth.log。
结果:
step4:在自己的私链上创建账户。
输入eth.accounts,返回[]
因为还没有用户,所以需要创建用户并执行
个人的。 新帐户(“123”)
创建一个用户,“123”指的是密码。
您可以多次执行此命令以生成更多用户。 结果:
step5:输出区块链的日志
这里需要tail.exe。 由于 Windows 没有它,您需要下载它。 下载后解压到C:\Windows\System32文件夹。
然后打开一个命令行窗口,进入geth.log所在目录,执行tail -f geth.log,可以不断的看到日志内容的变化。
step6:开始挖矿
在第一个命令行窗口执行miner.start()命令开始挖矿。 . 然后在第二个窗口查看日志变化。
部分日志:
首次挖矿时,会先生成挖矿所需的DAG文件。 过程有点慢。 进度达到100%后开始挖矿,屏幕上会刷新挖矿信息。
谨防:
1、挖矿挖出的以太币默认存放在第一个账户,即eth.acccounts[0]。
2. 挖矿是执行智能合约的基础。 如果停止挖矿,不仅以太币的产生会停止,所有的智能合约调用也会被禁用。
3.如果真的要停止挖矿,可以执行命令miner.stop()停止挖矿
4.根据上面的命令,以太坊挖矿应该是可以的。 如果没有,可能有一条链是之前存在的,此时要删除之前的数据。 Windows下,删除ethash文件夹和里面的文件即可。
step7:查看以太坊挖矿量
acc0 = eth.accounts[0]eth.getBalance(acc0)
结果:
只要数字不为0,就表示挖矿成功。
step7:在两个账户之间转移以太币
先显示两个账户(acc0之前已经写过了,不用再写了)
acc0 = eth.accounts[0]acc1 = eth.accounts[1]
设置转账金额,例如转账0.01 ETH(单位换算):
金额 = web3.toWei(0.01)
开始传输:
eth.sendTransaction({from: acc0, to: acc1, value: amount})
但是可能会失败,类似下图:
这是以太坊的一种保护机制。 该帐户将每隔一段时间自动锁定。 此时,除非账户解锁,否则账户之间的任何 Ether 交换都将被拒绝。
这时我们需要执行personal.unlockAccount(acc0),输入密码解锁acc0。
然后重新执行
eth.sendTransaction({from: acc0, to: acc1, value: amount})
这个命令。
此时再次查看acc1的账户,Ether的数量不再为0。
另外需要注意的是:在账户中转账以太币时,不能停止挖矿,否则转账不成功。
(目前只有这些,以后会添加)
币圈新闻,版权所有丨如未注明,均为原创丨本站受BY-NC-SA协议授权
转载请注明原文链接:(2023更新(今日/知乎)以太坊私链建设(中国)搜狗百科