github.com/turingchain2020/turingchain@v1.1.21/types/proto/p2p.proto (about) 1 syntax = "proto3"; 2 3 import "transaction.proto"; 4 import "common.proto"; 5 import "blockchain.proto"; 6 7 package types; 8 option go_package = "github.com/turingchain2020/turingchain/types"; 9 10 service p2pgservice { 11 //广播交易 12 rpc BroadCastTx(P2PTx) returns (Reply) {} 13 //广播区块 14 rpc BroadCastBlock(P2PBlock) returns (Reply) {} 15 16 // PING 17 rpc Ping(P2PPing) returns (P2PPong) {} 18 19 //获取地址 20 rpc GetAddr(P2PGetAddr) returns (P2PAddr) {} 21 22 rpc GetAddrList(P2PGetAddr) returns (P2PAddrList) {} 23 24 //版本 25 rpc Version(P2PVersion) returns (P2PVerAck) {} 26 //获取p2p协议的版本号 27 rpc Version2(P2PVersion) returns (P2PVersion) {} 28 //获取软件的版本号 29 rpc SoftVersion(P2PPing) returns (Reply) {} 30 //获取区块,最高200 31 rpc GetBlocks(P2PGetBlocks) returns (P2PInv) {} 32 33 //获取mempool 34 rpc GetMemPool(P2PGetMempool) returns (P2PInv) {} 35 36 //获取数据 37 rpc GetData(P2PGetData) returns (stream InvDatas) {} 38 39 //获取头部 40 rpc GetHeaders(P2PGetHeaders) returns (P2PHeaders) {} 41 42 //获取 peerinfo 43 rpc GetPeerInfo(P2PGetPeerInfo) returns (P2PPeerInfo) {} 44 45 // grpc server 读客户端发送来的数据 46 rpc ServerStreamRead(stream BroadCastData) returns (ReqNil) {} 47 48 // grpc server 发送数据给客户端 49 rpc ServerStreamSend(P2PPing) returns (stream BroadCastData) {} 50 51 // grpc 收集inpeers 52 rpc CollectInPeers(P2PPing) returns (PeerList) {} 53 rpc CollectInPeers2(P2PPing) returns (PeersReply) {} 54 } 55 56 /** 57 * 请求获取远程节点的节点信息 58 */ 59 message P2PGetPeerInfo { 60 /// p2p版本 61 int32 version = 1; 62 } 63 64 /** 65 * 节点信息 66 */ 67 message P2PPeerInfo { 68 ///节点的IP地址 69 string addr = 1; 70 ///节点的外网端口 71 int32 port = 2; 72 ///节点的名称 73 string name = 3; 74 /// mempool 的大小 75 int32 mempoolSize = 4; 76 ///节点当前高度头部数据 77 Header header = 5; 78 string version = 6; 79 string localDBVersion = 7; 80 string storeDBVersion = 8; 81 } 82 83 /** 84 * p2p节点间发送版本数据结构 85 */ 86 message P2PVersion { 87 ///当前版本 88 int32 version = 1; 89 ///服务类型 90 int64 service = 2; 91 ///时间戳 92 int64 timestamp = 3; 93 ///数据包的目的地址 94 string addrRecv = 4; 95 ///数据发送的源地址 96 string addrFrom = 5; 97 ///随机数 98 int64 nonce = 6; 99 ///用户代理 100 string userAgent = 7; 101 ///当前节点的高度 102 int64 startHeight = 8; 103 } 104 105 /** 106 * P2P 版本返回 107 */ 108 message P2PVerAck { 109 int32 version = 1; 110 int64 service = 2; 111 int64 nonce = 3; 112 } 113 114 /** 115 * P2P 心跳包 116 */ 117 message P2PPing { 118 ///随机数 119 int64 nonce = 1; 120 ///节点的外网地址 121 string addr = 2; 122 ///节点的外网端口 123 int32 port = 3; 124 //签名 125 Signature sign = 4; 126 } 127 128 /** 129 * 心跳返回包 130 */ 131 message P2PPong { 132 int64 nonce = 1; 133 } 134 135 /** 136 * 获取对方节点所连接的其他节点地址的请求包 137 */ 138 message P2PGetAddr { 139 int64 nonce = 1; 140 } 141 142 /** 143 * 返回请求地址列表的社保 144 */ 145 message P2PAddr { 146 int64 nonce = 1; 147 ///对方节点返回的其他节点信息 148 repeated string addrlist = 2; 149 } 150 /** 151 * 返回包括地址以及响应地址高度的列表信息 152 **/ 153 154 message P2PAddrList { 155 int64 nonce = 1; 156 repeated P2PPeerInfo peerinfo = 2; 157 } 158 159 /** 160 * 节点外网信息 161 */ 162 message P2PExternalInfo { 163 ///节点的外网地址 164 string addr = 1; 165 //节点是否在外网 166 bool isoutside = 2; 167 } 168 169 /** 170 * 获取区间区块 171 */ 172 message P2PGetBlocks { 173 int32 version = 1; 174 int64 startHeight = 2; 175 int64 endHeight = 3; 176 } 177 178 /** 179 * 获取mempool 180 */ 181 message P2PGetMempool { 182 int32 version = 1; 183 } 184 185 message P2PInv { 186 repeated Inventory invs = 1; 187 } 188 189 // ty=MSG_TX MSG_BLOCK 190 message Inventory { 191 //类型,数据类型,MSG_TX MSG_BLOCK 192 int32 ty = 1; 193 ///哈希 194 bytes hash = 2; 195 //高度 196 int64 height = 3; 197 } 198 199 /** 200 * 通过invs 下载数据 201 */ 202 message P2PGetData { 203 /// p2p版本 204 int32 version = 1; 205 /// invs 数组 206 repeated Inventory invs = 2; 207 } 208 209 // 210 message P2PRoute { 211 int32 TTL = 1; 212 } 213 214 /** 215 * p2p 发送交易协议 216 */ 217 message P2PTx { 218 Transaction tx = 1; 219 P2PRoute route = 2; 220 } 221 222 /** 223 * p2p 发送区块协议 224 */ 225 message P2PBlock { 226 Block block = 1; 227 } 228 229 /** 230 * p2p 轻量级区块, 广播交易短哈希列表 231 */ 232 message LightBlock { 233 234 int64 size = 1; 235 Header header = 2; 236 Transaction minerTx = 3; 237 repeated string sTxHashes = 4; 238 } 239 240 // 轻量级交易广播 241 message LightTx { 242 bytes txHash = 1; 243 P2PRoute route = 2; 244 } 245 246 // 请求完整交易数据 247 message P2PTxReq { 248 bytes txHash = 1; 249 } 250 251 // 请求区块内交易数据 252 message P2PBlockTxReq { 253 string blockHash = 1; 254 repeated int32 txIndices = 2; 255 } 256 257 // 区块交易数据返回 258 message P2PBlockTxReply { 259 string blockHash = 1; 260 repeated int32 txIndices = 2; 261 repeated Transaction txs = 3; 262 } 263 264 /* 节点收到区块或交易hash, 265 * 当在本地不存在时,需要请求重发完整交易或区块 266 * 采用统一结构减少消息类型 267 */ 268 message P2PQueryData { 269 oneof value { 270 P2PTxReq txReq = 1; 271 P2PBlockTxReq blockTxReq = 2; 272 } 273 } 274 /** 275 * p2p 协议和软件版本 276 */ 277 message Versions { 278 int32 p2pversion = 1; 279 string softversion = 2; 280 string peername = 3; 281 } 282 283 /** 284 * p2p 广播数据协议 285 */ 286 message BroadCastData { 287 oneof value { 288 P2PTx tx = 1; 289 P2PBlock block = 2; 290 P2PPing ping = 3; 291 Versions version = 4; 292 LightTx ltTx = 5; 293 LightBlock ltBlock = 6; 294 P2PQueryData query = 7; 295 P2PBlockTxReply blockRep = 8; 296 } 297 } 298 299 /** 300 * p2p 获取区块区间头部信息协议 301 */ 302 message P2PGetHeaders { 303 int32 version = 1; 304 int64 startHeight = 2; 305 int64 endHeight = 3; 306 } 307 308 /** 309 * p2p 区块头传输协议 310 */ 311 message P2PHeaders { 312 repeated Header headers = 1; 313 } 314 315 /** 316 * inv 请求协议 317 */ 318 message InvData { 319 oneof value { 320 Transaction tx = 1; 321 Block block = 2; 322 } 323 int32 ty = 3; 324 } 325 326 /** 327 * inv 返回数据 328 */ 329 message InvDatas { 330 repeated InvData items = 1; 331 } 332 333 /** 334 * peer 信息 335 */ 336 message Peer { 337 string addr = 1; 338 int32 port = 2; 339 string name = 3; 340 bool self = 4; 341 int32 mempoolSize = 5; 342 Header header = 6; 343 string version = 7; 344 string localDBVersion = 8; 345 string storeDBVersion = 9; 346 } 347 348 /** 349 * peer 列表 350 */ 351 message PeerList { 352 repeated Peer peers = 1; 353 } 354 355 /** 356 * p2p get peer req 357 */ 358 message P2PGetPeerReq { 359 string p2pType = 1; 360 } 361 362 /** 363 * p2p get net info req 364 */ 365 message P2PGetNetInfoReq { 366 string p2pType = 1; 367 } 368 369 /** 370 *当前节点的网络信息 371 */ 372 message NodeNetInfo { 373 string externaladdr = 1; 374 string localaddr = 2; 375 bool service = 3; 376 int32 outbounds = 4; 377 int32 inbounds = 5; 378 int32 routingtable = 6; 379 int32 peerstore = 7; 380 string ratein = 8; 381 string rateout = 9; 382 string ratetotal = 10; 383 } 384 385 /** 386 * p2p节点扫描返回的结构数据 387 */ 388 389 message PeersReply { 390 repeated PeersInfo peers = 1; 391 } 392 393 message PeersInfo { 394 string name = 1; 395 string ip = 2; 396 int32 port = 3; 397 string softversion = 4; 398 int32 p2pversion = 5; 399 }