EOS代码分析5 接收网络信息

网络部分:
Main()
{
app().set_version(eosio::nodeos::config::version);
app().register_plugin<history_plugin>(); //通过register_plugin()函数将插件注册到application的plugins插件集合中,plugins是一个map容器
auto root = fc::app_path(); //设定数据和配置路径
app().set_default_data_dir(root / "eosio/nodeos/data" );
app().set_default_config_dir(root / "eosio/nodeos/config" );

//应用程序初始化部分:1、输入参数处理,2、插件的初始化和安装
if(!app().initialize<chain_plugin, http_plugin, net_plugin, producer_plugin>(argc, argv))
return INITIALIZE_FAIL;
initialize_logging();

  app().startup();  //启动插件

  app().exec();  //网络服务器启动

}

1、P2P通信构建
1.1 初始化构建网络
http-server-address = 172.26.247.122:8886 //HTTP Server
p2p-listen-endpoint = 172.26.247.122:9006 //Node Server
p2p-server-address = 172.26.247.122:9006

#这里我们同步9004和9005的数据
p2p-peer-address = 172.26.247.122:9004
p2p-peer-address = 172.26.247.122:9005

因为只有21个节点,所以,就可以直接设定了,无需太多动态需求。

接收网络信息
my->start_listen_loop(); 进入监听循环
auto socket = std::make_shared<tcp::socket>( std::ref( app().get_io_service() ) ); //获io_service //return io_serv;
acceptor->async_accept(
socket, [socket,this]( boost::system::error_code ec )
//从上面看到,都是异步通信机制。
connections.insert( c );
start_session( c ); //111 开始处理
start_read_message( con ); //111 读取消息
conn->process_next_message 处理消息
msgHandler m(impl, shared_from_this() ); //111 处理不同的消息的函数

中间注册很多信号函数,网络线程通过push_transaction之emit函数发送信号到注册点,做发送操作。这个操作是信号注册的响应函数。

1接收交易
void net_plugin_impl::handle_message( connection_ptr c, const packed_transaction &msg) {
//存储在received_transactions列表里
dispatcher->recv_transaction(c, tid);
//received_transactions.emplace_back((transaction_origin){id, c});
chain_plug->accept_transaction();
on_incoming_transaction_async(); //Productor初始化时候注册
{
send_response() //错误则返回响应
chain.push_transaction(std::make_shared<transaction_metadata>(*trx), deadline);
}
2 接收握手信息
Handle_message()
1 消息正确
2 node ID重复(不要自己链接自己)
3 chain ID 一样
4 协议版本是否一样
所有错误都发送:go_away_message(错误类型)
5 if(!authenticate_peer(msg)) { //认证对方
elog("Peer not authenticated. Closing connection.");
c->enqueue(go_away_message(authentication));
return;
}
6 sync_master->recv_handshake(c,msg); //互相检测各自链的状态,并开始同步区块数据
// sync need checks; (lib == last irreversible block)
//
// 0. my head block id == peer head id means we are all caugnt up block wise
// 1. my head block num < peer lib - start sync locally
// 2. my lib > peer head num - send an last_irr_catch_up notice if not the first generation
//
// 3 my head block num <= peer head block num - update sync state and send a catchup request
// 4 my head block num > peer block num ssend a notice catchup if this is not the first generation

点击关注:

原文地址:https://blog.51cto.com/13878196/2385383

时间: 2024-08-30 14:28:33

EOS代码分析5 接收网络信息的相关文章

EOS代码分析1 理解EOS共识机制BFT-DPoS

EOS 最新的白皮书中已经将共识机制从 DPoS 升级为了 BFT-DPoS(Byzantine Fault Tolerance - Deligated Proof of Stake,带有拜占庭容错的委托股权证明). 传统 DPoSEOS 项目刚刚发布的时候的共识机制是 DPoS(Deligated Proof of Stake,委托股权证明),类似于 Bitshares 和 Steem,这种共识机制采用随机的见证人出块顺序,出块速度为 3 秒,交易不可逆需要45秒.为什么需要 45 秒呢?因为

Openvswitch原理与代码分析(4):网络包的处理过程

? 在上一节提到,Openvswitch的内核模块openvswitch.ko会在网卡上注册一个函数netdev_frame_hook,每当有网络包到达网卡的时候,这个函数就会被调用. ? static struct sk_buff *netdev_frame_hook(struct sk_buff *skb) { ???if (unlikely(skb->pkt_type == PACKET_LOOPBACK)) ??????return skb; ? ???port_receive(skb)

EOS代码分析3 EOS存储机制的IPFS分布式文件系统

EOS使用IPFS分布式文件系统作为底层存储.IPFS是一种内容可寻址.点对点.通过http协议传输的分布式文件系统.IPFS采用content-addressable寻址技术,即通过文件内容进行检索而不是通过文件的网络地址.简单来说,就是对文件内容进行hash运算,将hash值作为文件名保存在本地数据库中,所以,只要文件内容不变,则文件名也保持不变.运行IPFS的节点,既是客户端又是服务器.客户端通过发送文件名到服务器,请求下载文件,服务器会根据文件名到数据库中查找对应的文件,查找成功后将文件

恶意代码分析工具(进程信息、dll注入、PE解析等)

EOS代码分析6 P2P主动握手过程

主动链接对端connect( seed_node ); 链接peer节点if (start_session( c )) { c->send_handshake (); //发送握手协议 }c->send_handshake (); //初始化结构体,发送握手协议,协议最后要enqueuehandshake_initializer::populatequeue_write(); 发送缓冲过去[发送缓冲后,如何把缓冲发送过去?] 主动发送的握手数据内容voidhandshake_initializ

恶意代码分析实战

恶意代码分析实战(最权威的恶意代码分析指南,理论实践分析并重,业内人手一册的宝典) [美]Michael Sikorski(迈克尔.斯科尔斯基), Andrew Honig(安德鲁.哈尼克)著   <恶意代码分析实战>是一本内容全面的恶意代码分析技术指南,其内容兼顾理论,重在实践,从不同方面为读者讲解恶意代码分析的实用技术方法. <恶意代码分析实战>分为21章,覆盖恶意代码行为.恶意代码静态分析方法.恶意代码动态分析方法.恶意代码对抗与反对抗方法等,并包含了 shellcode分析

2017-2018-2 《网络对抗技术》 20155322 Exp4 恶意代码分析

[-= 博客目录 =-] 1-实践目标 1.1-实践介绍 1.2-实践内容 1.3-实践要求 2-实践过程 2.1-Mac下网络监控 2.2-Windows下网络监控 2.3-Mac下恶意软件分析 2.4-Windows下恶意软件分析 2.5-基础问题回答 3-资料 1-实践目标 1.1-恶意代码分析 一般是对恶意软件做处理,让它不被杀毒软件所检测.也是渗透测试中需要使用到的技术. 要做好免杀,就时清楚杀毒软件(恶意软件检测工具)是如何工作的.AV(Anti-virus)是很大一个产业.其中主要

2018-2019-2 网络对抗技术 20165232 Exp4 恶意代码分析

2018-2019-2 网络对抗技术 20165232 Exp4 恶意代码分析 1.实践目标 监控你自己系统的运行状态,看有没有可疑的程序在运行. 分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,systracer套件. 假定将来工作中你觉得自己的主机有问题,就可以用实验中的这个思路,先整个系统监控看能不能找到可疑对象,再对可疑对象进行进一步分析,好确认其具体的行为与性质. 2.实践内容概述 系统运行监控 使用如计划任务,每隔一分钟记

20145234黄斐《网络对抗技术》实验四,恶意代码分析

恶意代码 概述 恶意代码是指故意编制或设置的.对网络或系统会产生威胁或潜在威胁的计算机代码.最常见的恶意代码有计算机病毒(简称病毒).特洛伊木马(简称木马).计算机蠕虫(简称蠕虫).后门.逻辑炸弹等. 特征: 恶意的目的,获取靶机权限.用户隐私等 本身是计算机程序,可以执行,并作用于靶机 通过执行发生作用,一般来说不运行是没问题的 恶意代码分析 在大多数情况下,进行恶意代码分析时,我们将只有恶意代码的可执行文件本身,而这些文件并不是我们人类可读的.为了了解这些文件的意义,你需要使用各种工具和技巧