Window环境如何下搭建以太坊私链
大叔的爸爸
post on 2022-12-6 19:45:56
30
0
0
官网下载:https://ethfans.org/wikis/Ethereum-Geth-Mirror
一直下一步就行。
注意:安装的时候最好不要安装在带有空格的目录
二.准备配置文件
进入geth目录或你想要存放的目录,创建genesis.json文件(可自定义),文件内容如下:
解释一下各个参数的意思
Nonce是一个64位的随机数,用于挖矿用的。他和mixhash的设置需要满足以太坊的官方条件
Mixhash与Nonce配合用于挖矿,这是又上一个区块的一部分生成的hash。
Difficulty设置当前的难度,如果难度太大的话,cpu挖矿就很难,这里设置的小点,这样比较好挖。
-alloc是预置账户的地址和账户预置的以太币数量。
-Coinbase矿工的账号,这里可以随便填
-Timestamp设置创世块的时间戳,这里也填0x00就行
-Parenthash上一个区块的hash值,我们的是创世块,上面没有区块所有填0
-extraData附加信息,相当于个人说明,可以随便填。
-gasLimit这个是GAS的消耗总量限制,我们的是私链,用于测试,填大点好。
Config是配置文件,必须要写不然会爆一下错误。
三.写入创世块
配置好以后执行以下命令写入创世块
geth--datadirtestinitgenesis.json
命令中的--datadir选线后面跟着一个自定义目录,这里的意思是数据存储在test文件夹中,init表示初始化区块链,genesis.json是init命令的参数,是指定的配置文件。
创建成功回显是这样的
三.写入创世块
配置好以后执行以下命令写入创世块
geth--datadirtestinitgenesis.json
命令中的--datadir选线后面跟着一个自定义目录,这里的意思是数据存储在test文件夹中,init表示初始化区块链,genesis.json是init命令的参数,是指定的配置文件。
创建成功回显是这样的
然后执行一下面命令启动私链。
geth--datadirtest--networkid1111--nodiscoverconsole
console表示进入交互控制台,--datadir选项指定使用test数据目录,--networkid后面跟着数字,这里的1111表示这个私有链的网络ID为1111。以太网公网的网络ID是1。--nodiscover禁止节点发现手动添加节点
使用eth.accounts查看现有的用户,我们没有添加用户,所以为空
接下来我们创建两个密码为123456账户。
创建账户的命令为:personal.newAccount(“密码”)或者personal.newAccount()
注意:此命令区分大小写。
添加过后再查看就能看到我们刚刚创建的账户了
使用eth.getBalance获取账户余额。刚刚创建的两个账户没有钱,所以为0
四、开始挖矿
使用miner.start()命令来启动挖矿。
start()里面可设置线程,如:miner.start(5)表示五线程。
运行以后会被挖矿信息刷屏。
第一次挖矿会先生成挖矿所需要的DAG文件,需要等这个进度100%以后才会开始挖。这个过程会很慢。
开始挖矿以后你的CPU会飚的很高,甚至会卡卡的
如果字符被挖矿刷屏信息冲掉,没有关系的,只要输入完整的miner.stop()之后回车,即可停止挖矿。
挖到一个区块以后会有五个以太币作为奖励,挖矿的奖励会进入矿工的账户,这个账户默认是coinbase,默认情况下这个账户是本地账户中的第一个账户。
使用eth.coinbase查看账户地址
没挖矿前,coinbase账户的余额是0,挖到一个区块后会自动转到这个账户,如果想转到别的账户可以通过miner.setEtherbase(eth.accounts[下标])命令更换接收奖励的账户。
我们切换为0因为这个账户有钱方便做测试
别看这里那么多个0其实只有五个以太币。getBalance()返回值的单位是wei,wei是以太币中最小的单位,一个以太币等于10的18次方个wei。想要查看有多少个以太币,要用web3.fromWei()函数将返回值算成以太币。
web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')
五.发送交易
先查看一下我们两个账户的余额。账户0有五个以太币账户1为零个。
发送一笔交易,从账户0中转移2个以太币到账户1中
>amount=web3.toWei(2,'ether')
>eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
这里amount=web3.toWei(2,'ether')是把两个以太币转换为wei赋值给amount
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})函数的第一个参数是发送者地址,第二个接收者的地址,第三个是转账的金额,以wei为单位。
执行报错是因为账户每过一段时间就会被锁住,要发起交易,需要先输入密码解锁账户,从那个账户发起的交易就要解锁那个账户。
personal.unlockAccount(eth.accounts[0])
然后执行转账操作。
回显这个说明交易已经提交到区块链里了,返回的hash值是交易hash,但是交易并未被处理。可以通过txpool.status来查看状态。
可以看到pending里有一条交易信息,pending的意思是已提交但还未被处理的交易。等待中…
要让交易生效,我们就必须要挖矿,去处理这个块。
启动挖矿。
miner.start(1);admin.sleepBlocks(1);miner.stop();
这条命令的意思是启用一个线程来挖矿,挖到第一块区块就停止挖矿。
当他返回为true的时候就说明挖完了。可以使用txpool.startus查看
pending为0说明交易已经被处理了,可以通过以下命令查看账户余额。
账户1的余额已经有了我们刚刚用账户0转出的2个以太币了,账户0余额有8个以太币是因为刚刚我们挖矿的奖励3+5=8
六.查看交易和区块高度
可使用以下命令查看当前区块
eth.blockNumber
使用以下命令可以通过区块高度查看交易信息
eth.getBlock(需要查看的高度)
也可以通过交易hash查看交易记录
eth.getTransaction(“交易hash”)
七.连接其他节点
为什么要连接别的节点?
因为:节点之间连接成功后,节点B就会同步节点A的区块,同步完成以后,任意一台节点挖矿成功后另外的节点也会自动同步区块,节点中的任意一个节点发起的交易,另外一个节点也会收到这笔交易的信息。有两个以上的节点才是真正的区块链。
连接别的节点需要用到admin.addPeer()方法,连接的前提是必须保证网络相通,并且networkid要一致。比如:有两个节点,节点A和节点B,节点A的networkid是1111节点B的networkid是1108,那么这两个节点是连接不了的。想要两个节点之间实现连通networkid必须要一致,假设节点A和节点B的networkid都是1111,如果节点A要连接到节点B,首先还需要知道节点B的enode信息,enode可在JavaScriptconsole中查看到,查看命令为:admin.nodeInfo.enode
然后在节点A的console中执行admin.addPeer()方法这样就可以连接到节点B了
命令:admin.addPeer("节点B的enode地址")
需要注意的是@后面的0.0.0.0需要换成节点B的IP地址如:
admin.addPeer("enode://1dbfc88113b0b95ec96ba9666a37aef07aee8aa64fceaed077d7c0e7a17f7e8a7756832af6b2b7d286cc6f03bcf2a8d80ef815a175e468c13da808513cf66500@127.0.0.1:30303")
想查看是否连接上可以通过admin.peers查看连接到的其他节点的信息,通过net.peerCount可以查看到节点连接的数量
可以看到节点B已经同步了区块和交易记录
BitMere.com is Information release platform,just provides information storage space services.
The opinions expressed are solely those of the author,Does not constitute advice, please treat with caution.
The opinions expressed are solely those of the author,Does not constitute advice, please treat with caution.
Write the first review