【精解】EOS多节点组网:商业场景分析以及节点启动时序 (2)

Received block 5f1a90b86a211c11... #1000,后面是#2000, #3000 可以看出它是一千一千在同步的,这是依据config.ini的配置“sync-fetch-span = 1000” 决定的。在追上主节点出块以后,全节点就开始正常逐个同步了。

全节点服务

全节点只同步区块,不生成区块,它拥有完整的区块数据,因此可以通过全节点暴露的接口对链上数据进行查询,

全节点IP:8888/v1/chain/get_info { "server_version": "79651199", "chain_id": "cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f", "head_block_num": 3381, "last_irreversible_block_num": 3380, "last_irreversible_block_id": "00000d349eb386e22de1b2bdde422377d49b3d3e997af25de1124ff41bad8eb8", "head_block_id": "00000d3500aec9d772fa3c0801b79366e76dc5e4426a574e6b14a56e220b865e", "head_block_time": "2018-06-25T08:06:55.000", "head_block_producer": "eosio", "virtual_block_cpu_limit": 5869808, "virtual_block_net_limit": 30835535, "block_cpu_limit": 199900, "block_net_limit": 1048576 } 全节点功能模拟测试

现在有一台出块节点别名239,一台全节点别名182。

此时全网只有一个eosio账户,我们要使用它创建一个新的账户,我们期望出块节点维护自己的秘钥,所以在239上用钱包导入eosio的私钥(虽然eosio的秘钥是公开的,这里只是模拟)

182上导入一个新生成的私钥A,然后在239上创建账户jack,creator是eosio,公钥是A的公钥。

**@jack**

182(全节点) 239(出块节点)
私钥A   eosio  

这样一来,182模拟是小白客户端,239是业务带头人,小白的秘钥完全是由自己创建自己保存,而小白的账户是业务带头人来创建的,小白只需要提供自己的公钥即可。这样一来,小白很有安全感,因为账户完全是自己的,自己做任何事情都需要本地私钥签名,不会被冒名。而业务带头人也会很开心,因为他仍旧可以经营自己的社区,知道谁是通过自己创建的,是自己的用户,但也仅此而已,业务带头人并不能对小白有任何多余的管辖。

交易确认的方案分析

下面从区块数据上面研究以上行为:

方法一

账户被创建是一个行为或者一个事务,创建时会返回一个transaction id,我们手动去查一下这个transaction,

cleos get transaction 3b0b14a72cc4a98dd9145989xxxxxxxx

返回的数据非常庞大,其中包含了该transaction被记录的区块号,我们通过区块号去查找区块信息,

cleos get block 203xx

返回的数据中,可以看到很多字段信息,其中有一个confirmed字段。

猜想TODO:这是区块确权的值,只要超过出块节点总数的2/3 + 1,就可以被认定为不可逆区块。但由于目前只有一个出块节点,该字段为0,所以这个猜想仍需要测试。

方法二

在239上的事务的确认,我们是否可以通过182上对事务结果的查询进行验证呢?答案是肯定的。以上我们在239上创建了账户jack,我们转到182,去查询

cleos get account jack

结果返回jack账户是正常有效的,这就可以确定另一台机器239上的创建账户的事务被确认。这种交易确认的方法要简单的多,属于结果验证论,意思也就是通过结果来判断是否完成一个动作。EOS就有可逆区块大小的配置,可逆区块就是未经确权的区块,一经确权就会变为不可逆区块上链。

实际上,在可逆区块确权的过程中,以太坊是会全网广播的,但EOS只会BP之间广播,因此全节点接收到的一定是不可逆区块,通过全节点来确认交易是个不错的方法。

方法二逆证

我们在182上使用刚刚创建的jack来创建一个新的bob账户,

root@iZ2ze5wsiqz8cj0lqgf73xZ:~/182# cleos create account jack bob EOS5MLNon1NFXqnS4koDiKdVg2iTuu5ZS2NeZxve1RHTTifiCUfjg executed transaction: 0e95f8e9f3abdfbada4f1c10304f04f052a0b58364c3165da4551e9275ab86bb 200 bytes 298 us # eosio <= eosio::newaccount {"creator":"jack","name":"bob","owner":{"threshold":1,"keys":[{"key":"EOS5MLNon1NFXqnS4koDiKdVg2iTuu... warning: transaction executed locally, but may not be confirmed by the network yet

然后在239上查询,

cleos get account bob

结果是同样的。也就是说,

方法二的交易确认重点不在于是否全节点来确认交易,出块节点同样可以确认交易。所以重点是是否可在其他机器上查到结果。只不过是因为EOS BP之间广播可逆区块的特性,所以去全节点上查询结果显得更稳妥。

启动序列

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwjjp.html