Overview
| Comment: | Added start of documenting the network protocol |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
343acb481bfe943dd91e7e6a1776ea3b |
| User & Date: | rkeene on 2018-07-16 22:03:52.991 |
| Other Links: | manifest | tags |
Context
|
2018-07-17
| ||
| 13:56 | Cleaned up man page some check-in: d91ac639f4 user: rkeene tags: trunk | |
|
2018-07-16
| ||
| 22:03 | Added start of documenting the network protocol check-in: 343acb481b user: rkeene tags: trunk | |
|
2018-07-12
| ||
| 21:18 | Merged in start of network branch check-in: c07e032cc7 user: rkeene tags: trunk | |
Changes
Modified nano.man
from [64858d5e00]
to [db5ba6c98c].
| ︙ | ︙ | |||
333 334 335 336 337 338 339 340 341 342 343 344 345 346 | would be encoded as .B 0000.DC1512154EB72112B8CC230D7B8C7DD467DA78E4763182D6CAFAADB14855A5E8.9C46A37418 which when encoded in base32 and the prefix added produces the address .BR nano_3q1o4acnxfs34cwerarfhg89uo59ubwgaxjjiddeoyofp767dbhamj5c8x1r . The checksum is computed as a 5 byte (40 bit) Blake2b hash of the 256-bit public key (in binary format), followed by reversing the bytes. .SH PROCEDURES .SS Addresses .TP .B ::nano::address::toPublicKey .I address | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 |
would be encoded as
.B 0000.DC1512154EB72112B8CC230D7B8C7DD467DA78E4763182D6CAFAADB14855A5E8.9C46A37418
which when encoded in base32 and the prefix added produces the address
.BR nano_3q1o4acnxfs34cwerarfhg89uo59ubwgaxjjiddeoyofp767dbhamj5c8x1r .
The checksum is computed as a 5 byte (40 bit) Blake2b hash of the 256-bit
public key (in binary format), followed by reversing the bytes.
.SS Network
The Nano network consists of two different peer-to-peer networks. One for
real-time block updates over UDP, and another for bulk ledger updates over
TCP
.RI ( bootstrapping ).
The real-time network is a broadcast style network where every message sent
over it are relayed to all other nodes.
The customary and default port for the real-time/UDP network is 7075/udp, while
the default port for the bootstrapping/TCP network is 7075/tcp.
The format of the messages on both networks is the same, however not every
type of message may be used on either network. The
.B keepalive
message type is invalid on the TCP (bootstrapping) network and the
.B bulk_pull
message type is invalid on the UDP (real-time) network. The format of
message are an 8 byte header consisting of:
.EX
struct {
uint8_t magicProtocol = 0x52;
uint8_t magicNetwork = 0x41/0x42/0x43;
uint8_t versionMax;
uint8_t version;
uint8_t versionMin;
uint8_t messageType;
uint16_t extensions;
};
.EE
Where the
.B magicProtocol
field must be the value
.B 0x52
(which is ASCII 'R') and the
.B magicNetwork
field must be one of
.BR 0x41 ", " 0x42 ", or " 0x43
corresponding to one of the three Nano networks. A value of
.B 0x41
(ASCII 'A') represents the Test network; A value of
.B 0x42
(ASCII 'B') represents the Beta network; A value of
.B 0x43
(ASCII 'C') represents the Main network.
The various version fields control the relaying of the message to nodes running
various versions of the Nano network protocol (distinct from the Nano reference
implementation version). The
.B versionMax
and
.B versionMin
fields indicate the inclusive range of acceptable versions to relay or broadcast
this message to. The
.B version
field indicates what version of the Nano protocol this node is using.
The messageType field indicates what type of message is being relayed, and
must conform to the following enumeration
.TS
box tab(:);
cb cb cb cb
c l l l.
messageType:Name:On Bootstrap:On Realtime
0x00:Invalid:Yes:Yes
0x01:Not_A_Type:?:?
0x02:Keepalive:No:Yes
0x03:Publish:No:Yes
0x04:Confirm_Req:No:Yes
0x05:Confirm_Ack:No:Yes
0x06:Bulk_Pull:Yes:No
0x07:Bulk_Push:Yes:No
0x08:Frontier_Req:Yes:No
0x09:Bulk_Pull_Blocks:Yes:No
.TE
.B "TODO: Extensions"
Following the message header comes the payload for the particular message
type.
.TP
.B Invalid
TODOC
.TP
.B Not_A_Type
TODOC
.TP
.B Keepalive
The Keepalive message requires exactly 8 IPv6 address and port number
tuples to be sent as its payload. The IPv6 addresses are each 128-bits
(16-bytes) long and the port numbers are 16-bit integers sent in network byte
order. The payload for the Keepalive message type is 144 bytes in size.
.TP
.B Publish
TODOC
.TP
.B Confirm_Req
TODOC
.TP
.B Confirm_Ack
TODOC
.TP
.B Bulk_Pull
TODOC
.TP
.B Bulk_Push
TODOC
.TP
.B Frontier_Req
TODOC
.TP
.B Bulk_Pull_Blocks
TODOC
.SH PROCEDURES
.SS Addresses
.TP
.B ::nano::address::toPublicKey
.I address
|
| ︙ | ︙ |