主页 > 华为手机怎么安装不了imtoken > 以太坊搭建私有链
以太坊搭建私有链
本文是在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": { }
}
参数说明:
混合哈希
与 nonce 一起用于挖掘,从前一个块的一部分生成的哈希。 注意him和nonce的设置需要满足黄皮书4.3.4描述的条件。 区块头有效性,以太坊 (44) 部分。 .
随机数
nonce 是用于挖矿的 64 位随机数。 注意it和mixhash的设置需要满足黄皮书4.3.4描述的条件。 区块头有效性,(44) of Ethereum。
困难
设置当前区块的难度。 如果难度太高,CPU挖矿就会很困难。 在这里设置一个较小的难度
分配
用于为账户预先设置账号和以太币数量,因为私链挖矿相对容易,所以我们不需要预先设置一个账户有币,需要的时候可以自己创建。
币库
矿机账号,随便填
时间戳
设置创世块的时间戳
父哈希
上一个区块的哈希值,因为是创世区块,所以这个值为0
额外数据
附加信息,随便填,可以填写你的个人信息
气体限制
该值设置了 GAS 总消耗量的限制,用于限制区块可以包含的交易信息的总和。 由于我们是私链,所以我们填最大值。
几种可能的错误:
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,返回[]
因为还没有用户,所以需要创建用户并执行
personal.newAccount("123")
创建一个用户,“123”指的是密码。
您可以多次执行此命令以生成更多用户。
结果:
step5:输出区块链的日志
这里需要用到tail.exe。 由于 Windows 没有它,您需要下载它。 下载后解压到C:\Windows\System32文件夹中。
再打开一个命令行窗口,进入geth.log所在目录,执行tail -f geth.log,可以不断的看到日志内容的变化。
step6:开始挖矿
在第一个命令行窗口执行miner.start()命令开始挖矿(网上说的这个命令执行后返回值为true,但是我的返回值为null,不过最后还是挖矿成功了,这里不明白). 然后在第二个窗口中查看日志的变化。
部分日志:
第一次开始挖矿,首先会生成挖矿所需的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(单位换算):
amount = web3.toWei(0.01)
开始传输:
eth.sendTransaction({from: acc0, to: acc1, value: amount})
但是可能会失败,类似下图:
这是以太坊的一种保护机制。 该帐户将每隔一段时间自动锁定一次。 此时,任何账户之间的以太币兑换都将被拒绝以太坊是一个公有链还是私有链,除非账户被解锁。
这时候我们需要执行personal.unlockAccount(acc0),输入密码解锁acc0。
然后重新执行
eth.sendTransaction({from: acc0, to: acc1, value: amount})
这个命令。
此时再次查看acc1的账户,Ether的数量不再为0。
另外需要注意的是:在账户中转账以太币时,不能停止挖矿,否则转账不成功。
(目前只有这些,稍后补充)