以太坊私有链云服务器(使用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
--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相同(更新特定于节点的参数)
此时,你的bootnode应流式传输来自node1(端口30311)和node2(端口30312)的连接,如上部终端窗口所示。Node1(中间终端)和node2(下层终端)应该愉快地挖掘和签署块。这里我有1秒的时间(在创世纪文件中定义)因此创建了快速块。
2.3 更新你的创世纪文件
我相信你会想要修改你的genesis文件中的一些值。前进!但是,为了使这些更改生效,我们必须初始化一个新的区块链。这是我目前使用的创世纪文件:
我已经清理了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节开始:
然后使用2.2节中的命令再次启动节点
3. 与你的节点交互
伟大的网络生活现在开始:)但如何连接到它并开始探索?
3.1 打开Geth Javascript控制台
使用节点的最简单且可能更直接的方法可能是将Geth javascript控制台附加到其中一个节点。
3.1.1 通过IPC
IPC(进程间通信)仅在本地工作:你应与节点位于同一台计算器上。打开一个额外的终端并连接到你的节点。要连接到node1:
仅在节点运行时才创建文件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:
3.1.3 使用Geth Javascript控制台
以下是一些方法示例
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_transactionCount。
“account”随机数是一个交易计数器,与工作证明的随机数无关。帐户现时值为零意味着地址0x627306090abaB3A6e1400e9345bC60c78a8BEf57从未在网络上执行任何交易:0x0是十六进制表示为零。
3.4 在你的专用网络上使用Truffle部署和测试你的智能合约
像Truffle(或Embark,Populus)这样的开发框架是开发和测试智能合约的绝佳工具。
使用时初始化工作空间时
$ truffle init
Truffle创建了一系列文件和活页夹,以帮助你入门。我通常会编辑truffle.js文件
然后使用这个命令:
$ 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。
海纳学院的内容将围绕:区块链技术,产品社群,经济模型等全方位的知识体系输出,为大家带来不一样的社群学习体验。