从源码层面分析Neo的网络通信

泡沫雕刻机 | 2020-11-17

首页

英雄联盟S10竞猜|序言Neo反对C#和Java研发,在全球社区的共同努力下,将SDK扩展到js、python等编程环境,因此,开展Neo研发的语言障碍不大。比特币在解决问题拜占庭错误问题时,不仅引入了区块链这个最重要的概念,还引入了工作量证明(PoW)这个落后的解决方案,通过数学难题确保了各区块的创立必须计算代价。但是,事实上,通过计算得到工作量证明太浪费了:世界上几乎所有节点都进行了一定程度的计算,但只有一个节点计算的结果不会添加到区块链中,剩下的节点是计算功耗和浪费。

特别是工作量证明没有51%的可能反击方案。也就是说,只要有人掌握世界上最多50%的计算力,就可以对比特币系统进行反击,重置区块链。在发明中本俊先生发明的这种计算力工作量证明方法时,预计没有人专门开发ASIC矿机来挖掘矿。

Neo在解决这些问题时,明确提出了新的共识机制概念——委托Byzantine Fault Tolerant(DBFT),将节点分为两个:不扩展证书交易亲笔签名块的普通节点。另一个是共识节点,也就是可以参与共识的节点,这部分的基本概念可以参考官方文件。接下来,我将从源角度分析Neo网络通信协议。源代码概述本文分析的源代码地址:https://Github.com/Neo-project/Neo Git命令通过iTunes到地区:Git Clone 3359 Github.com/Neo-project Neo项目关闭后,项目根目录-Consensus concective节点之间的concentact协议-Core Neo核心-Cryptography加密方法-建立Implementations数据存储库和钱包-io Neo的io类-Network用作P2P网络通信的方法。

S10竞猜

Act Neo智能合同的相关类,整个项目代码量相当大。特别是项目本身是用C#高级语言编写的,所以更容易背代码。在消息Neo网络中,所有消息都以消息为单位发送,消息在Message.cs文件中定义,Magic字段用于确定当前节点是月网络还是测试网络,0x74746e41是月网络,0x74746是月网络,_Command_命令的内容是必需的字符串,因此苛刻的定义将被扩展我指出,依赖比较严重,应该先定义命令,然后从其他地方调用。

它不说明有哪些命令,但可以在消息路由代码中找到中使用的所有命令。源代码方向:neo/network/remote node . cs/onmessage received上述源代码的命令处理部分不是本节讨论的焦点。分析代码可以发现,信息的种类大致有22种。消息的具体内容在序列化后不存在于Message的payload字段中。

S10竞猜

所有消息类型中的一种消息与帐簿相关的三种消息非常相似:帐簿消息(Block)、一致消息(Consensus)和交易消息(Transaction)。这三条消息分别对应于系统的三个类别-neo/core/block-neo/core/transaction-neo/network . payloads/consensuspayloadsHash用于手写签名,帐簿消息类型InventoryType用于使用消息类型和检查函数verify检查消息。

英雄联盟S10竞猜

也就是说,所有帐簿消息都必须包含手写签名,必须检查。 帐簿消息的类型在InventoryType.cs文件中定义。源代码方向:neo/Network/InventoryType.cs每个RemoteNode内部都有两个消息队列、一个低优先级队列和一个低优先级队列。优先级较低的队列主要是-' alert '-' consensus '-' filter add '-' filter clear '-' filter load '-' get addr '此方法具有while循环。

在每个循环中,首先检测到优先级较低的队列。no null,如果不是null,则发送回优先级较低的命令。

否则,它将被发送到优先级较低的作业。循环的核心源代码如下:源代码方向:neo/netwotk。

本文来源:S10竞猜-www.scioteam.com