Window上如何搭建以太坊私链

Window上如何搭建以太坊私链_第1张图片

本文使用的环境是:Windows  7 x64

一.安装geth

官网下载:https://ethfans.org/wikis/Ethereum-Geth-Mirror

一直下一步就行。

注意:安装的时候最好不要安装在带有空格的目录

推荐一个很全面的Geth命令详解(中文)

https://blog.csdn.net/wo541075754/article/details/79599081

二.准备配置文件

进入geth目录或你想要存放的目录,创建 genesis.json文件(可自定义),文件内容如下:


Window上如何搭建以太坊私链_第2张图片

解释一下各个参数的意思

[if !supportLists]l [endif]Nonce是一个64位的随机数,用于挖矿用的。他和mixhash的设置需要满足以太坊的官方条件

[if !supportLists]l [endif]Mixhash与Nonce 配合用于挖矿,这是又上一个区块的一部分生成的hash。

[if !supportLists]l [endif]Difficulty设置当前的难度,如果难度太大的话,cpu挖矿就很难,这里设置的小点,这样比较好挖。

[if !supportLists]l [endif]alloc是预置账户的地址和账户预置的以太币数量。

[if !supportLists]l [endif]Coinbase矿工的账号,这里可以随便填

[if !supportLists]l [endif]Timestamp设置创世块的时间戳,这里也填0x00就行

[if !supportLists]l [endif]Parenthash上一个区块的hash值,我们的是创世块,上面没有区块所有填0

[if !supportLists]l [endif]extraData附加信息,相当于个人说明,可以随便填。

[if !supportLists]l [endif]gasLimit这个是GAS的消耗总量限制,我们的是私链,用于测试,填大点好。

[if !supportLists]l [endif]Config是配置文件,必须要写 不然会爆一下错误。

Window上如何搭建以太坊私链_第3张图片

[if !supportLists]一.[endif]写入创世块

配置好以后执行以下命令写入创世块

geth --datadir test init genesis.json

命令中的--datadir选线后面跟着一个自定义目录,这里的意思是数据存储在test文件 夹中,init表示初始化区块链,genesis.json 是init 命令的参数,是指定的配置文件。

创建成功回显是这样的

Window上如何搭建以太坊私链_第4张图片

然后执行一下面命令启动私链。

geth --datadir test --networkid 1111 --nodiscover  console

console表示进入交互控制台,--datadir 选项指定使用test数据目录, --networkid 后 面跟着数字,这里的1111表示这个私有链的网络ID为1111 。以太网公网的网络ID 是1。--nodiscover 禁止节点发现  手动添加节点。

Window上如何搭建以太坊私链_第5张图片

使用eth.accounts查看现有的用户,我们没有添加用户,所以为空

接下来我们创建两个密码为123456账户。

创建账户的命令为:personal.newAccount(“密码”)或者personal.newAccount()

注意:此命令区分大小写。

Window上如何搭建以太坊私链_第6张图片

添加过后再查看就能看到我们刚刚创建的账户了

使用eth.getBalance获取账户余额。 刚刚创建的两个账户没有钱,所以为0

Window上如何搭建以太坊私链_第7张图片

四.开始挖矿

使用miner.start()命令 来启动挖矿。

start()里面可设置线程,如:miner.start(5) 表示五线程。

运行以后会被挖矿信息刷屏。

第一次挖矿会先生成挖矿所需要的DAG文件,需要等这个进度100%以后才会开始挖。 这个过程会很慢。

Window上如何搭建以太坊私链_第8张图片

开始挖矿以后你的CPU会飚的很高,甚至会卡卡的

Window上如何搭建以太坊私链_第9张图片

如果想停止,直接在界面输入miner.stop()就可以了

如果字符被挖矿刷屏信息冲掉,没有关系的,只要输入完整的miner.stop()之后回车, 即可停止挖矿。

挖到一个区块以后会有五个以太币作为奖励,挖矿的奖励会进入矿工的账户,这个账户 默认是coinbase,默认情况下这个账户是本地账户中的第一个账户。

使用eth.coinbase 查看账户地址

没挖矿前,coinbase账户的余额是0,挖到一个区块后会自动转到这个账户,如果想转 到别的账户可以通过miner.setEtherbase(eth.accounts[下标])命令更换接收奖励的账户。

Window上如何搭建以太坊私链_第10张图片

我们切换为0因为这个账户有钱方便做测试

Window上如何搭建以太坊私链_第11张图片

我们切换为0因为这个账户有钱方便做测试

Window上如何搭建以太坊私链_第12张图片

别看这里那么多个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为单位。

Window上如何搭建以太坊私链_第13张图片

执行报错是因为账户每过一段时间就会被锁住,要发起交易,需要先输入密码解锁账 户,从那个账户发起的交易就要解锁那个账户。

> personal.unlockAccount(eth.accounts[0])

Window上如何搭建以太坊私链_第14张图片

然后执行转账操作。

回显这个说明交易已经提交到区块链里了,返回的hash值是交易hash,但是交易并未 被处理。可以通过txpool.status来查看状态。

Window上如何搭建以太坊私链_第15张图片

可以看到pending里有一条交易信息,pending的意思是已提交但还未被处理的交易。 等待中...

要让交易生效,我们就必须要挖矿,去处理这个块。

启动挖矿。

miner.start(1);admin.sleepBlocks(1);miner.stop();

这条命令的意思是启用一个线程来挖矿,挖到第一块区块就停止挖矿。

Window上如何搭建以太坊私链_第16张图片

当他返回为true的时候就说明挖完了。 可以使用txpool.startus查看

Window上如何搭建以太坊私链_第17张图片

pending为0 说明交易已经被处理了,可以通过以下命令查看账户余额。

账户1的余额已经有了我们刚刚用账户0转出的2个以太币了,账户0余额有8个以太 币是因为刚刚我们挖矿的奖励3+5 = 8

六.查看交易和区块高度

可使用以下命令查看当前区块

eth.blockNumber

使用以下命令可以通过区块高度查看交易信息

eth.getBlock(需要查看的高度)

Window上如何搭建以太坊私链_第18张图片

也可以通过交易hash查看交易记录

eth.getTransaction(“交易hash”)

Window上如何搭建以太坊私链_第19张图片

七.连接其他节点

为什么要连接别的节点?

因为:节点之间连接成功后,节点B就会同步节点A的区块,同步完成以后,任意一台节点挖矿成功后另外的节点也会自动同步区块,节点中的任意一个节点发起的交易,另外一个节点也会收到这笔交易的信息。有两个以上的节点才是真正的区块链。

连接别的节点需要用到admin.addPeer()方法,连接的前提是必须保证网络相通,并且 networkid要一致。比如:有两个节点,节点A 和节点B ,节点A 的networkid 是 1111 节点B的networkid是1108,那么这两个节点是连接不了的。想要两个节点之间实现连 通networkid必须要一致,假设节点A 和 节点B 的networkid都是 1111,如果节点A 要连接到节点B,首先还需要知道节点B的enode信息,enode可在JavaScript console 中查看到,查看命令为:admin.nodeInfo.enode

然后在节点A的console中执行 admin.addPeer() 方法这样就可以连接到节点B了

命令:admin.addPeer("节点B的enode地址")

需要注意的是@后面的0.0.0.0需要换成节点B的IP地址如:

admin.addPeer("enode://1dbfc88113b0b95ec96ba9666a37aef07aee8aa64fceaed077d7c0e 7a17f7e8a7756832af6b2b7d286cc6f03bcf2a8d80ef815a175e468c13da808513cf66500@12 7.0.0.1:30303")

想查看是否连接上可以通过admin.peers查看连接到的其他节点的信息,通过 net.peerCount可以查看到节点连接的数量

Window上如何搭建以太坊私链_第20张图片

可以看到节点B已经同步了区块和交易记录

Window上如何搭建以太坊私链_第21张图片

你可能感兴趣的:(Window上如何搭建以太坊私链)