本文旨在基于树莓派与计算机环境中搭建私有区块链并实现交易的传递和挖矿任务。
硬件及配置:Windows7系统笔记本电脑一台,Raspbian系统树莓派一个
环境搭建:geth
一,win7下节点的生成
之前的文章中介绍过关于私有链运行环境的搭建过程,这里不再赘述。
(1)任选合适位置建立单独的文件夹用于后续数据的存储
eg:E:\mychains
(2)在\mychains文件夹下放入文件genesis.json
genesis.json中保存创世区块的相关信息,内容如下:
{ "nonce": "0x0000000000000042", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x400", "alloc": {}, "coinbase": "0x0000000000000000000000000000000000000000", "timestamp": "0x00", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x436861696e536b696c6c732047656e6573697320426c6f636b", "gasLimit": "0xffffffff", "config": { "chainId": 42, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 } }
(3)打开cmd环境,进入到mychain文件夹下,指令输入:
这是初始化创世区块,并将生成的相关信息保存在新生成的文件夹“miner1”中
geth --datadir miner1 init genesis.json
(4)进入私有链控制台:
指明miner1节点存在的网络,以及所使用的端口号
geth --datadir miner1 --networkid 42 --port 30303 --rpcport 8042 --ipcdisable --nodiscover console
(5)进入控制台后建立新账号用于后续交易的处理和挖矿:
引号里是新生成账号的密码
> personal.newAccount("111111")
(6)然后借助该账号进行挖矿:
这一步并非必然操作,只是为了后面和其他节点进行交易时需要用到币,所以需要挖矿得到一些收益,同时也能清晰地了解私有链下挖矿操作是如何进行的
> miner.start()
(7)第一次挖矿系统会自动进行一些准备工作,这个不用我们担心,在常规执行之后就会开始挖矿了,挖矿进行大约十几秒之后输入下面指令停止挖矿:
> miner.stop()
(8)挖矿结束,查看一下此时账号中的余额:
指令中各部分的含义在之前的文章中介绍过,这里不再多说
> eth.getBalance(eth.coinbase)
二,win7建立集群私有网络
既然是集群网络势必存在至少两个节点,因此第二个节点的建立参考上面内容,下面将指令写在一起:
(1)只需要注意存放数据的文件夹变成了“miner2”,网络ID必须与miner1保持一致,端口号不能一致
geth --datadir miner2 init genesis.json geth --datadir miner2 --networkid 42 --port 30304 --rpcport 8043 --ipcdisable --nodiscover console > personal.newAccount("222222")
(2)现在拥有了两个节点,接下来就要建立二者的联系:
首先在miner1节点操作台下输入下条指令,得到该节点账号的enode内容:
> admin.nodeInfo.enode
(3)在miner2的操作台下加入miner1的节点信息:
“xxxxxx”是miner1的enode内容,填入即可
这里需要注意一个问题,enode后面的内容包含@符号,该符号后面是IP地址,如果发现默认状态下连接失败可以尝试将@后的IP地址更改成主机真实的地址
> admin.addPeer("enode://xxxxxx")
(4)测试一下连接是否成功:
peerCount表示当前节点所连节点的个数,peers详细展示当前节点所连节点的信息
> net.peerCount
> admin.peers
(5)在miner1的admin.peers下看到了miner2的信息,在miner2的admin.peers下看到miner1的信息,说明同一台计算机下不同节点之间连接成功
三,raspbian下节点的生成
上面是在同一台计算机下的不同节点加入同一个私有链的过程,接下来就要着手不同机器中的节点之间的连接,首先要在新机器树莓派中建立一个节点。
需要注意的是,因为这两个机器上的所有节点同处一个私有链,因此私有链创世区块的信息必须完全相同,即genesis.json文件不能变动。
(1)任选合适的位置建立一个新文件夹mychains用于存储节点信息,同时将genesis.json放到mychains下:
/home/Pi/Public/mychains/genesis.json
(2)节点初始化:
将新建节点的相关信息存储到node文件夹下
geth --datadir node init genesis.json
(3)进入以太坊控制台:
要注意的是,网络ID必须与Windows下节点的网络ID保持一致
geth --datadir node --networkid 42 --port 30303 --ipcdisable --rpc --rpcport 8042 console
四,win7节点与raspbian节点交互
树莓派中的节点已设置完毕,接下来就要与Windows下的节点进行互联。
(1)树莓派node节点控制台下,新建一个用户用于互联操作:
“xxxxxx”是密码
> personal.newAccount("xxxxxx")
(2)获取该账号的节点信息:
> admin.nodeInfo.enode
(3)在Windows中的miner1控制台下,建立与树莓派中节点node的联系:
“xxxxxx”是树莓派node节点信息。同样的,信息尾部@符号后的默认地址如果无效就考虑换成真实的地址
> admin.addPeer("enode://xxxxxx")
(4)需要额外注意的是,建立连接的前提必须保证树莓派与Windows主机在同一网段(也就是最好使用同一个局域网,有时Windows连接网线导致网络问题也会使得互联失败)