|
@@ -0,0 +1,32 @@
|
|
|
|
|
+# DEP 0001: Version Message Info
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+status: draft
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## Motivation
|
|
|
|
|
+
|
|
|
|
|
+Currently `version` messages are empty, but before releasing in order to anticipate protocol
|
|
|
|
|
+upgrades, we should include the protocol version. This is for the moment inside `verack`,
|
|
|
|
|
+but should be moved to `version` since it allows immediately dropping the connection if the
|
|
|
|
|
+protocol version is incorrect (and indeed is the main purpose of the version message).
|
|
|
|
|
+
|
|
|
|
|
+Additionally it should include further info which makes debugging connections and negotiation
|
|
|
|
|
+easier.
|
|
|
|
|
+
|
|
|
|
|
+## Proposal
|
|
|
|
|
+
|
|
|
|
|
+| Type | Description | Comment |
|
|
|
|
|
+|---------------|-------------------|------------------------------------------------------------------------------------------------------------------------|
|
|
|
|
|
+| `u32` | version | Identifies protocol version being used by the node |
|
|
|
|
|
+| `u64` | timestamp | UNIX timestamp |
|
|
|
|
|
+| `u16` | nonce | Random nonce, randomly generated everytime a version packet is sent. This nonce is used to detect connections to self. |
|
|
|
|
|
+| `String` | connect_recv_addr | Network address of the node receiving this message (before resolving) |
|
|
|
|
|
+| `String` | resolv_recv_addr | Network address of the node receiving this message (after resolving) |
|
|
|
|
|
+| `Vec<String>` | ext_send_addr | External address of the node sending this message |
|
|
|
|
|
+| `Vec<String>` | services | List of features to be enabled for this connection |
|
|
|
|
|
+
|
|
|
|
|
+`resolv_recv_addr` is optional depending on some transports which may not have such an address.
|
|
|
|
|
+
|
|
|
|
|
+`ext_send_addr` is optional when no external address is set for the node.
|
|
|
|
|
+
|