快捷搜索:  汽车  科技

以太坊私有链云服务器(使用Geth设置基于权利证明POA的以太网私有网络)

以太坊私有链云服务器(使用Geth设置基于权利证明POA的以太网私有网络)重要时刻!最后(但通常在这里麻烦也来了)。2.2 启动节点INFO [0207|22:44:09] UDP listener up self=enode://3ec4fef2d726c2c01f16f0a0030f15dd5a81e274067af2b2157cafbf76aa79fa9c0be52c6664e80cc5b08162ede53279bd70ee10d024fe86613b0b09e1106c40@[::]:30310我喜欢对我的bootnode有一些冗长,因为很高兴看到节点在网络上播放乒乓球时(这意味着它正在工作!)。随意使用你喜欢的任何端口,但请避免使用主流端口(如80 for HTTP)。30303用于公共以太坊网络。

接下来,我们继续未完成的课程内容。

2. 激活

2.1 启动bootnode服务

devnet$ bootnode -nodekey boot.key -verbosity 9 -addr :30310

INFO [0207|22:44:09] UDP listener up self=enode://3ec4fef2d726c2c01f16f0a0030f15dd5a81e274067af2b2157cafbf76aa79fa9c0be52c6664e80cc5b08162ede53279bd70ee10d024fe86613b0b09e1106c40@[::]:30310

我喜欢对我的bootnode有一些冗长,因为很高兴看到节点在网络上播放乒乓球时(这意味着它正在工作!)。

随意使用你喜欢的任何端口,但请避免使用主流端口(如80 for HTTP)。30303用于公共以太坊网络。

2.2 启动节点

重要时刻!最后(但通常在这里麻烦也来了)。

一切都在一个巨大的命令!我将介绍一些选项,但请做好功课并参考文档。

起始节点1

以太坊私有链云服务器(使用Geth设置基于权利证明POA的以太网私有网络)(1)

--syncmode'full',有助于防止错误,丢弃传播有问题的块Discarded Bad Propagated Block。

--port 30311,是node1的enode端口,必须与bootnode端口不同(如果你遵循我的命令,则为30310),因为我们在本地主机上。在真实网络(每台计算器一个节点)上,使用相同的端口。

--rpcapi,允许列出的模块用于RPC调用(参见3.3节的示例)。有关详细信息,请参阅Geth Management API。如果没有防火墙保护你的节点,每个人都可以调用您的RPC方法,请注意黑客攻击。

--bootnodes,告诉你的节点找到你的bootnode的地址。用引导节点IP替换[::]。不允许域名!只有IP。

--networkId,如genesis.json文件中所定义。请使用相同的ID!

--gasprice'1',我不喜欢在自己的网络上付款:)小心使用gasprice。如果您的交易没有被广播到网络,但只有接收交易的节点正在处理它们,这意味着您发送的交易的天然气价格被网络上的其他节点接受(太低)。没有错误将返回。如果您有两个节点,则只有一个节点将处理事务。这是偷偷摸摸的,将您的网络吞吐量降低了2倍。

--unlock --password --mine,告诉节点解锁此账户,使用该文件中的密码并开始挖掘(即投票/密封以获得权利证明)。

--targetgaslimit,值参见2.3节中的更新。

节点2相同(更新特定于节点的参数)

以太坊私有链云服务器(使用Geth设置基于权利证明POA的以太网私有网络)(2)

此时,你的bootnode应流式传输来自node1(端口30311)和node2(端口30312)的连接,如上部终端窗口所示。Node1(中间终端)和node2(下层终端)应该愉快地挖掘和签署块。这里我有1秒的时间(在创世纪文件中定义)因此创建了快速块。

以太坊私有链云服务器(使用Geth设置基于权利证明POA的以太网私有网络)(3)

2.3 更新你的创世纪文件

我相信你会想要修改你的genesis文件中的一些值。前进!但是,为了使这些更改生效,我们必须初始化一个新的区块链。这是我目前使用的创世纪文件:

以太坊私有链云服务器(使用Geth设置基于权利证明POA的以太网私有网络)(4)

我已经清理了puppeth在创建文件时包含的空地址(在1.3节)。我还添加了第三个地址,在创建创世块时获得资助。然后我将period从15秒更改为1,以便更快地挖掘这些块(小心,因为一个空块加权1024字节,这里我的chaindata/活页夹每秒增加1024字节(如果块不为空,则更多)。我已经增加了gasLimit以允许每个块进行更多的交易(trully,计算)。

更新:genesis文件中定义的gasLimit仅适用于genesis块!新块的gasLimit是DYNAMIC,意味着它的值随着时间的推移而变化,具体取决于父(前一个)块中使用了多少gas。新gasLimit的计算在CalcGasLimit函数(github源码)中完成。如果你想要一个恒定的gas限制,请在运行geth时使用选项--targetgaslimit intValue。我建议将它设置为等于genesis文件中的gasLimit(命令选项是一个整数,而生成值是十六进制),这样你就可以获得一个不再随时间变化的恒定gas限制。鉴于上面的genesis文件带有“gasLimit”:“0x59A5380”,我正在使用--targetgaslimit 94000000运行我的节点,以获得所有块的恒定gas限制。

字段extraData包含允许密封的地址(这就是为什么puppeth很高兴)。

我已经调查了更改period和gasLimit对区块链可以处理的每秒交易数(交易率)的影响。

如果你对genesis文件感到满意。如果节点正在运行,请终止它们(在终端中按ctrl C)。

然后删除node1/中的活页夹geth/和node2/中的geht/。仅删除geth/活页夹!

然后初始化你的节点。从1.4节开始:

以太坊私有链云服务器(使用Geth设置基于权利证明POA的以太网私有网络)(5)

然后使用2.2节中的命令再次启动节点

3. 与你的节点交互

伟大的网络生活现在开始:)但如何连接到它并开始探索?

3.1 打开Geth Javascript控制台

使用节点的最简单且可能更直接的方法可能是将Geth javascript控制台附加到其中一个节点。

3.1.1 通过IPC

IPC(进程间通信)仅在本地工作:你应与节点位于同一台计算器上。打开一个额外的终端并连接到你的节点。要连接到node1:

以太坊私有链云服务器(使用Geth设置基于权利证明POA的以太网私有网络)(6)

仅在节点运行时才创建文件geth.ipc。所以如果你的node1关闭,不要指望找到它。

RPC提供对终端中列出的所有模块的访问而不受限制:admin:1.0 clique:1.0 debug:1.0 eth:1.0 miner:1.0net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

3.1.2 通过RPC

RPC(远程过程调用)作为HTTP请求在Internet上工作。因此,当您向外界打开RPC时要小心,因为每个人都可以访问您的节点。因此,默认情况下禁用RPC,启用后,它不会授予对所有模块的访问权限。在本指南中,我们使用命令--rpc在我们的Geth节点上允许RPC,并允许访问模块personal,db,eth,net,web3,txpool,miner(来自第2.2节)。要使用RPC连接到node1:

以太坊私有链云服务器(使用Geth设置基于权利证明POA的以太网私有网络)(7)

3.1.3 使用Geth Javascript控制台

以下是一些方法示例

以太坊私有链云服务器(使用Geth设置基于权利证明POA的以太网私有网络)(8)

3.2 使用 mist

Mist浏览器提供图形用户界面,用于部署智能合约和管理账户并与之交互。要通过IPC将Mist连接到本地专用网络,只需执行以下操作:

devnet $ mist --rpc node1/geth.ipc

并通过RPC(确保启用RPC)

$ mist --rpc 'http://localhost:8501'

如果您想使用以太坊钱包而不是mist,则程序完全相同。只需在上面的命令中用ethereumwallet替换mist。

3.3 使用你喜欢的编程语言进行RPC调用

在3.1节中,我们了解瞭如何手动与GethAPI进行交互。现在让我们将我们的PC用于最擅长的领域:自动化。

向你的节点发送JSON-RPC请求的引用和到目前为止是web3.js javascript库。我相信互联网上有很多关于如何使用web3.js库的精彩教程和示例。所以我不会在这里隐瞒任何一个。

JSON-RPCAPI目前也在使用web3.j库的java中实现,在python中使用web3.py库实现。这些库提供了与web3.js一样使用以太坊区块链的高级方法。

但是,也可以将原始JSON-RPC请求直接发送到你的节点。我认为值得尝试,因为它提供了一个有价值的理解,了解这些高级库如何在幕后工作。

下面是使用python 3将原始JSON-RPC请求发送到节点的简单示例:

以太坊私有链云服务器(使用Geth设置基于权利证明POA的以太网私有网络)(9)

这里记录了方法geth_transactionCount。

“account”随机数是一个交易计数器,与工作证明的随机数无关。帐户现时值为零意味着地址0x627306090abaB3A6e1400e9345bC60c78a8BEf57从未在网络上执行任何交易:0x0是十六进制表示为零。

3.4 在你的专用网络上使用Truffle部署和测试你的智能合约

像Truffle(或Embark,Populus)这样的开发框架是开发和测试智能合约的绝佳工具。

使用时初始化工作空间时

$ truffle init

Truffle创建了一系列文件和活页夹,以帮助你入门。我通常会编辑truffle.js文件

以太坊私有链云服务器(使用Geth设置基于权利证明POA的以太网私有网络)(10)

然后使用这个命令:

$ truffle deploy --network devnet

部署迁移/X_deploy.js中定义的智能合约。或者用于在test/中运行测试

$ truffle test --network devnet

通常,以太坊区块链仿真器Ganache足以运行你的测试。但是我喜欢使用我的私有区块链在真实节点上进行终极测试,而不仅仅是在仿真器上。有了Ganache,我相信抽象层太大了,它的美妙之处还有危险,因为它不需要理解真实节点的复杂性(交易池,gasPrice,gasLimit,节点之间的广播交易),挖掘或投票,计算时间,共识引擎等)。

下一步是什么?

这对于本指南来说非常重要。如果你了解这里的一切,我相信你已经处于非常好的轨道上,并且你有一个坚实的基础,你可以自信地继续你的旅程。

你可以通过抓取web3库或制作自己的自定义JSON-RPC包装器来开始开发Dapps(去中心化应用程序)。

在这篇文章中,我将探讨如何使用python仅使用原始HTTP请求与智能合约进行部署和交易。

Clique要求int(N/2 1) sealers(其中N是创世纪文件中定义的sealers数量——在extraData字段中)才能在线运行。

感谢Ivica Aracic指出clique PoA可与单个节点一起工作。出于任何原因,我错过了,我为这种困惑道歉。使用单个节点,我们只需要(A)创建只有一个sealer的genesis文件(extraData中只有1个地址),(B)创建一个账户,(C)init geth,(D)运行geth,解锁账户和mine。那么不需要bootnode。

使用geth 1.8如果收到指定的无效主机invalid host specified的错误,请尝试将选项--rpcvhosts值添加到geth命令。见geth --help。

海纳学院的内容将围绕:区块链技术,产品社群,经济模型等全方位的知识体系输出,为大家带来不一样的社群学习体验。

猜您喜欢: