企业培训资讯_企业培训干货

当前位置:首页 > 新闻中心

源码分析Neo网络通信协议|bob体育盘口

发布时间:2020-12-28    来源:官网1283

本文摘要:com/neo-project/neo通过git命令iTunes到本地:gitclonehttps://githubcom/neo-project/neo关上Neo项目后可以看见项目根目录文件结构:-Consensus共识节点间共识协议-CoreNeo核心-Cryptography加密方法-Implementations数据存储以及钱包的构建-IONeo的io类-Network用作p2p网络通信的方法-SmartContractNeo智能合约的涉及类整个项目代码量远比相当大,特别是在是项目本身是C#高级语言撰写,所以代码很更容易背诵。

前言Neo反对C#和java研发,在全球社区的共同努力下现把SDK扩展到了js,python等编程环境,所以展开Neo研发是没过于大的语言障碍的。比特币在解决问题拜占庭错误这个问题时除了引进了区块链这个最重要的概念之外,还引进了工作量证明(PoW)这个落后的解决方案,通过数学意义上的难题来确保每个区块创立都必须代价计算出来量。然而实践中已证明,通过计算出来来获取工作量证明,觉得是过于浪费了:全世界所有的几乎节点都展开某种程度的计算出来,然而只有一个节点计算出来出有的结果不会被加到到区块链中,其余节点计算出来消耗的电力都白白浪费了。特别是在,工作量证明不存在一个51%的有可能反击方案,即只要有人掌控了世界上多达50%的算力,他就能对比特币系统展开反击,重置区块链。

优先级队列

中本俊先生发明者这个算力工作量证明方法时,大约没预料到不会有人专门为了挖矿而研发ASIC矿机。Neo在解决问题这些问题时明确提出了一个新的共识机制概念dBFT( Delegated Byzantine Fault Tolerant),将节点分成两种,一种为不参予共识的普通节点,即不展开证书交易亲笔签名区块的过程。另一种为共识节点,即可以参予共识的节点,这部分基础概念可以参照官方文档。

接下来,我将从源码层面分析Neo网络通信协议。源码概览本文分析的源码地址:https://github.com/neo-project/neo通过git命令iTunes到本地:git clone https://github.com/neo-project/neo.git我用的编译器是VS2017社区版。关上Neo项目后可以看见项目根目录文件结构:- Consensus 共识节点间共识协议- Core Neo 核心- Cryptography 加密方法- Implementations 数据存储以及钱包的构建- IO Neo 的io类- Network 用作p2p网络通信的方法- SmartContract Neo 智能合约的涉及类整个项目代码量远比相当大,特别是在是项目本身是C#高级语言撰写,所以代码很更容易背诵。

消息在Neo网络中,所有的消息都以Message为单位展开传输,Message的定义在Message.cs文件中,其结构如下:Magic 字段用来确认当前节点是运营在月网络还是在测试网络,如果是0x00746e41则为月网,如果是0x74746e41则为测试网。_Command_命令的内容是必要用于的字符串,所以没展开严苛定义,在所有用于到的地方都是必要用于的字符串。我指出倚赖比较严重,应先定义好命令再行在别的地方调用。虽然没说明都有哪些命令,但是在消息路由的代码里,我们可以寻找所有用于到的命令。

优先级队列

源码方位:neo/Network/RemoteNode.cs/OnMessageReceived以上源码中关于命令的处置部分不是本小节辩论的重点。通过分析代码可以告诉,消息种类大体有22种。消息的具体内容在序列化之后不存在在Message里的payload字段中。

在所有的消息类型中有一类消息十分类似,与账本涉及的三种消息:账目消息(Block)、共识消息(Consensus)以及交易消息(Transaction)。这三中消息分别对应系统中的三个类:- neo/Core/Block- neo/Core/Transaction- neo/Network.Payloads/ConsensusPayload这三个类都构建了模块IInventory,我把inventory翻译成为账本,把构建了IInventory模块的类沦为账本类,消息称作账本消息。IInventory接口定义了消息的哈希值Hash用来存放在亲笔签名、账本消息类型InventoryType用来留存消息类型以及一个检验函数verify用来对消息展开检验,也就是说所有的账本消息都必须包括亲笔签名,并且必须检验。

账本消息的类型定义在InventoryType.cs文件中:源码方位:neo/Network/InventoryType.cs每个RemoteNode内部都有两个消息队列,一个低优先级队列和一个低优先级队列,低优先级队列主要负责管理:- "alert"- "consensus"- "filteradd"- "filterclear"- "filterload"- "getaddr"- "mempool"这几个命令,其余的命令都由低优先级队列负责管理。发送到命令的任务由StartSendLoop方法负责管理,在这个方法中有一个while循环,在每一轮循环中都会首先检测低优先级队列否为空,如果不为空则再行发送到低优先命令,否则发送到低优先级任务,循环中的核心源码如下:源码方位:neo/Netwotk/RemoteNode.。


本文关键词:bob体育盘口,工作量,优先级队列,展开,账本

本文来源:bob体育盘口-www.flightflowgame.com

分享到:
bob体育盘口:云南武定县大力推进畜牧产业化进程 江西:江西横峰冬种快而早
热门文章
江西省在老矿区边深部勘查紧缺资源和优势矿产:官网
不惧利空打压 黄金V型反转顽强收涨【bob体育盘口】
bob体育盘口|供给侧改革炒作道远且艰 铝市不要过分乐观
官网_《龙珠:超》动画94集
纳米核心3每周几更新几集? 纳米核心第三季哪里可以看_官网
bob体育盘口-云之变1:云与智能的大变局
人类首个太空国筹备中!全球只招10万公民【bob体育盘口】
【bob体育盘口】落后两年,Google开放虚拟助手Assistant后还能赶上亚马逊?
官网-2019支付宝年度账单哪里看怎么查看今年支付宝年度账单方法
【机构观点】惠誉:产能置换政策或将令中国铝行业达到产能上限_政策法规_新闻_矿道网
市场担忧情绪逐步消释环保产业重回上升通道-bob体育盘口
官网_中国石化落实2个1000亿立方米规模的页岩气增储阵地
一拳超人第145话情报内容解读:甜心假面全灭敌人!
这会是一个啥感觉?「攻壳机动队」日本版采用动画原版配音~
龙女仆声优的一天时间表 多少时间花在配音上
客户案例
×