主页 > 苹果手机怎么下载imtoken > 使用Geth部署以太坊联盟链
使用Geth部署以太坊联盟链
一个区块链学习项目GitHub:github.com/xianfeng92/...
假设以太坊客户端Geth已经安装在Ubunbu 14.04 LTS上使用Geth部署以太坊联盟链
## 创世块文件genesis.json
创世块文件genesis.json是区块链最重要的识别标志之一。 每个区块链都有一个唯一标识的创世块文件。 如果两台机器选择的创世块启动 Geth 文件不同,则不能将它们识别为同一区块链的成员。 因此,同一联盟链中的所有节点必须使用相同的创世块文件进行初始配置。
下面是创世块文件 genesis.json 的示例。
{
“配置”:{
“链号”:110,
“家园块”:0,
“eip155块”:0,
“eip158块”:0
},
“分配”:{
"0x<#A#账户地址>": {"balance": "1000000000000000000"},
"0x<#A账户地址B#>": {"balance": "2000000000000000000"},
"0x<#一个账户地址C#>": {"balance": "3000000000000000000"}
},
“币库”:“0x0000000000000000000000000000000000000000”,
“难度”:“0x400”,
“额外数据”:“”,
“gasLimit”:“0x2fefd8”,
“随机数”:“0x0000000000000000”,
“混合哈希”:
"0x0000000000000000000000000000000000000000000000000000000000000000",
“父母哈希”:
"0x0000000000000000000000000000000000000000000000000000000000000000",
“时间戳”:“0x00”
}
其中config中的内容是区块链相关的基本配置参数,最重要的是链号chainId,这是用来标识区块链的编号,这里设置为110。 alloc为以太坊账户信息,可以留空,等待部署完成再启动以太坊创建账户,也可以预先配置好以太坊账户及其余额,其中账户余额以wei为单位。 其下的coinbase是联盟链挖矿的收益账户,可设置为零地址,运行以太坊挖矿前设置。 difficulty为初始挖矿难度,可设置为较低的值,如0x400。 gasLimit 是每个区块消耗的gas limit。 其余的如 extraData、nonce、mixhash、parentHash 和 timestamp 可以设置为零或留空。
初始配置
创建创世块文件后,下一步就是在以太坊联盟链上创建一个账户。 以太坊账户由一对公钥和私钥组成。 用户先设置账户密码以太坊创建账号,然后使用Geth从账户密码生成一对公私钥,再从公钥生成账户地址,最后将账户地址添加到创世块文件genesis.json中间。
具体操作如下:
geth --datadir testNet 控制台
eth.accounts
[]
账户为空
个人的。 新账户()
输入密码创建以太坊账户
eth.accounts
[“0x15e504a51e91ee6250412e595a00b49b9d4cab1d”]
账号创建成功!
将该地址复制到 genesis.json 的 alloc 参数中。
创建联盟链节点
然后将genesis.json文件和testNet文件夹复制并转移到另一台虚拟机中,并将testNet重命名为testNet1。 接下来使用以下命令创建一个联盟链节点。
geth --datadir ./testNet1 init ./genesis.json
搭建联盟链网络获取完整节点地址
在每台机器上完成联盟链节点的初始配置后,接下来就是连接各个节点。 首先确认网络是连通的以太坊创建账号,每台机器的防火墙都配置正确。 Geth使用的端口都是常开的(Geth常用的端口有8545、30303等),然后在各个节点上使用如下命令启动Geth,获取节点地址。
geth --datadir ./testNet1 --networdid 110 控制台
然后输入:
admin.nodeInfo.enode
enode返回的节点信息格式如下,包括节点的公钥地址和Geth端口号(默认30303)。
“enode://8f3333a83d31763a36ec9fbb0a402a5473a409b0b3fe43d32f65c7d6619e52842d4e1678306e670f74a03c1af914ab9ef0ef3d3fda207e4828f09b850398”29b@[
将“[::]”部分替换为机器的公网IP地址,得到节点的完整地址。
创建静态节点文件
在任意一个节点的.\testNet\geth目录下创建一个静态节点文件static-nodes.json,按照以下格式写入其他节点的完整地址信息:
[
"enode://<节点1公钥>@<节点1 IP地址>:<节点1端口>",
"enode://<node2公钥>@<node2 IP地址>:<node2端口>",
]
在各节点机器上使用如下命令启动Geth,查看其他连接的节点信息。 其中datadir参数为联盟链的数据存储目录,每次启动时必须指定,否则默认使用公链数据存储目录,即连接以太坊公链; networkid参数为连接的网络号,需要与创世块文件中的chainId参数一致。 如果初始化过程正确且网络状态正常,则各节点的Geth客户端启动后会根据__static节点文件__中的节点地址自动搜索并连接其他节点。
行政。 同行
如果其他节点尚未连接,可以动态添加节点。
admin.addPeer("enode://<节点公钥>@<节点IP地址>:<节点端口>")
节点相互连接后,联盟链网络搭建完成。
测试联盟链
首先使用以下命令启动一个节点进行挖矿,其中etherbase参数为以太坊指定的挖矿收益账户。 这里的以太坊只能在联盟链的账户中使用,和公链上的以太坊是完全分开的。 分开; miner.start的参数是指定的挖矿线程数。 由于联盟链挖矿难度低,只需要开启一个线程即可。
eth.setEtherbase(eth.accounts[0]) miner.start(2)
如果你想停止挖矿,可以使用以下命令:
矿工。 停止()
由于genesis.json中挖矿难度初始值设置的很低,而以太坊本身有自动调整挖矿难度的机制,联盟链挖矿速度很快,消耗的算力也很低,而挖矿收益账户会很快收到大量的Ether。 但需要注意的是,挖矿也需要一个初始化过程。 在挖出第一个区块之前,节点需要在大约一分钟内生成DAG有向图,然后大约两三秒就可以生成一个区块。 .
挖矿节点开启后,在另一个节点输入密码解锁账户,发送账户交易信息。 下面的例子从第二个默认账户转1个以太币到第三个默认账户,并返回交易信息的哈希值。
personal.unlockAccount(eth.accounts[1])
eth.sendTransaction({from:eth.accounts[1],to:eth.accounts[2],value:1*1e18})
本文参考