mirror of
https://github.com/seigler/dash-docs
synced 2025-07-28 18:26:13 +00:00
P2P - Move alert message to deprecated section
This commit is contained in:
parent
9cbf20780e
commit
acd7e33ef2
1 changed files with 106 additions and 107 deletions
|
@ -1127,113 +1127,6 @@ d91f4854 ........................... Epoch time: 1414012889
|
||||||
{% endautocrossref %}
|
{% endautocrossref %}
|
||||||
|
|
||||||
|
|
||||||
#### Alert
|
|
||||||
{% include helpers/subhead-links.md %}
|
|
||||||
|
|
||||||
{% autocrossref %}
|
|
||||||
|
|
||||||
*Added in protocol version 311.*
|
|
||||||
*Removed by Bitcoin in protocol version 70013, but retained by Dash.*
|
|
||||||
|
|
||||||
The `alert` message warns nodes of problems that may affect them or the
|
|
||||||
rest of the network. Each `alert` message is signed using a key controlled
|
|
||||||
by respected community members, mostly Dash Core developers.
|
|
||||||
|
|
||||||
To ensure all nodes can validate and forward `alert` messages,
|
|
||||||
encapsulation is used. Developers create an alert using the data
|
|
||||||
structure appropriate for the versions of the software they want to
|
|
||||||
notify; then they serialize that data and sign it. The serialized data
|
|
||||||
and its signature make up the outer `alert` message---allowing nodes
|
|
||||||
which don't understand the data structure to validate the signature and
|
|
||||||
relay the alert to nodes which do understand it. The nodes which
|
|
||||||
actually need the message can decode the serialized data to access the
|
|
||||||
inner `alert` message.
|
|
||||||
|
|
||||||
The outer `alert` message has four fields:
|
|
||||||
|
|
||||||
| Bytes | Name | Data Type | Description
|
|
||||||
|-------------|-----------------|------------------|-------------
|
|
||||||
| *Variable* | alert bytes | compactSize uint | The number of bytes in following alert field.
|
|
||||||
| *Variable* | alert | uchar | The serialized alert. See below for a description of the current alert format.
|
|
||||||
| *Variable* | signature bytes | compactSize uint | The number of bytes in the following signature field.
|
|
||||||
| *Variable* | signature | uchar | A DER-encoded ECDSA (secp256k1) signature of the alert signed with the developer's alert key.
|
|
||||||
|
|
||||||
Although designed to be easily upgraded, the format of the inner
|
|
||||||
serialized alert has not changed since the `alert` message was first
|
|
||||||
introduced in protocol version 311.
|
|
||||||
|
|
||||||
| Bytes | Name | Data Type | Description
|
|
||||||
|----------|-------------------|---------------------------|-------------
|
|
||||||
| 4 | version | int32_t | Alert format version. Version 1 from protocol version 311 through at least protocol version 70002.
|
|
||||||
| 8 | relayUntil | int64_t | The time beyond which nodes should stop relaying this alert. Unix epoch time format.
|
|
||||||
| 8 | expiration | int64_t | The time beyond which this alert is no longer in effect and should be ignored. Unix epoch time format.
|
|
||||||
| 4 | ID | int32_t | A unique ID number for this alert.
|
|
||||||
| 4 | cancel | int32_t | All alerts with an ID number less than or equal to this number should be canceled: deleted and not accepted in the future.
|
|
||||||
| *Varies* | setCancel count | compactSize uint | The number of IDs in the following setCancel field. May be zero.
|
|
||||||
| *Varies* | setCancel | int32_t | Alert IDs which should be canceled. Each alert ID is a separate int32_t number.
|
|
||||||
| 4 | minVer | int32_t | This alert only applies to protocol versions greater than or equal to this version. Nodes running other protocol versions should still relay it.
|
|
||||||
| 4 | maxVer | int32_t | This alert only applies to protocol versions less than or equal to this version. Nodes running other protocol versions should still relay it.
|
|
||||||
| *Varies* | user\_agent count | compactSize uint | The number of user agent strings in the following setUser\_agent field. May be zero.
|
|
||||||
| *Varies* | setUser\_agent | compactSize uint + string | If this field is empty, it has no effect on the alert. If there is at least one entry is this field, this alert only applies to programs with a user agent that exactly matches one of the strings in this field. Each entry in this field is a compactSize uint followed by a string---the uint indicates how many bytes are in the following string. This field was originally called setSubVer; since BIP14, it applies to user agent strings as defined in the `version` message.
|
|
||||||
| 4 | priority | int32_t | Relative priority compared to other alerts.
|
|
||||||
| *Varies* | comment bytes | compactSize uint | The number of bytes in the following comment field. May be zero.
|
|
||||||
| *Varies* | comment | string | A comment on the alert that is not displayed.
|
|
||||||
| *Varies* | statusBar bytes | compactSize uint | The number of bytes in the following statusBar field. May be zero.
|
|
||||||
| *Varies* | statusBar | string | The alert message that is displayed to the user.
|
|
||||||
| *Varies* | reserved bytes | compactSize uint | The number of bytes in the following reserved field. May be zero.
|
|
||||||
| *Varies* | reserved | string | Reserved for future use. Originally called RPC Error.
|
|
||||||
|
|
||||||
The annotated hexdump below shows an `alert` message. (The message
|
|
||||||
header has been omitted.)
|
|
||||||
|
|
||||||
<!-- example below from Bitcoin Wiki but it's a network capture so I
|
|
||||||
(@harding) don't think it is subject to the wiki's copyright license; I
|
|
||||||
think it's public domain. TODO: replace with a more recent
|
|
||||||
alert the next time one is live on the network. -->
|
|
||||||
|
|
||||||
{% highlight text %}
|
|
||||||
73 ................................. Bytes in encapsulated alert: 115
|
|
||||||
01000000 ........................... Version: 1
|
|
||||||
3766404f00000000 ................... RelayUntil: 1329620535
|
|
||||||
b305434f00000000 ................... Expiration: 1330917376
|
|
||||||
|
|
||||||
f2030000 ........................... ID: 1010
|
|
||||||
f1030000 ........................... Cancel: 1009
|
|
||||||
00 ................................. setCancel count: 0
|
|
||||||
|
|
||||||
10270000 ........................... MinVer: 10000
|
|
||||||
48ee0000 ........................... MaxVer: 61000
|
|
||||||
00 ................................. setUser_agent bytes: 0
|
|
||||||
64000000 ........................... Priority: 100
|
|
||||||
|
|
||||||
00 ................................. Bytes In Comment String: 0
|
|
||||||
46 ................................. Bytes in StatusBar String: 70
|
|
||||||
53656520626974636f696e2e6f72672f
|
|
||||||
666562323020696620796f7520686176
|
|
||||||
652074726f75626c6520636f6e6e6563
|
|
||||||
74696e67206166746572203230204665
|
|
||||||
627275617279 ....................... Status Bar String: "See [...]"
|
|
||||||
00 ................................. Bytes In Reserved String: 0
|
|
||||||
|
|
||||||
47 ................................. Bytes in signature: 71
|
|
||||||
30450221008389df45f0703f39ec8c1c
|
|
||||||
c42c13810ffcae14995bb648340219e3
|
|
||||||
53b63b53eb022009ec65e1c1aaeec1fd
|
|
||||||
334c6b684bde2b3f573060d5b70c3a46
|
|
||||||
723326e4e8a4f1 ..................... Signature
|
|
||||||
{% endhighlight %}
|
|
||||||
|
|
||||||
**Alert key compromise:** Dash Core's source code defines a
|
|
||||||
particular set of alert parameters that can be used to notify users that
|
|
||||||
the alert signing key has been compromised and that they should upgrade
|
|
||||||
to get a new alert public key. Once a signed alert containing those
|
|
||||||
parameters has been received, no other alerts can cancel or override it.
|
|
||||||
See the `ProcessAlert()` function in the Dash Core [alert.cpp][core
|
|
||||||
alert.cpp] source code for the parameters of this message.
|
|
||||||
|
|
||||||
{% endautocrossref %}
|
|
||||||
|
|
||||||
|
|
||||||
#### FilterAdd
|
#### FilterAdd
|
||||||
{% include helpers/subhead-links.md %}
|
{% include helpers/subhead-links.md %}
|
||||||
|
|
||||||
|
@ -3869,6 +3762,112 @@ The following network messages have been deprecated and should no longer be used
|
||||||
|
|
||||||
{% endautocrossref %}
|
{% endautocrossref %}
|
||||||
|
|
||||||
|
#### Alert
|
||||||
|
{% include helpers/subhead-links.md %}
|
||||||
|
|
||||||
|
{% autocrossref %}
|
||||||
|
|
||||||
|
*Added in protocol version 311.*
|
||||||
|
*Removed by Bitcoin in protocol version 70013, but retained by Dash.*
|
||||||
|
|
||||||
|
The `alert` message warns nodes of problems that may affect them or the
|
||||||
|
rest of the network. Each `alert` message is signed using a key controlled
|
||||||
|
by respected community members, mostly Dash Core developers.
|
||||||
|
|
||||||
|
To ensure all nodes can validate and forward `alert` messages,
|
||||||
|
encapsulation is used. Developers create an alert using the data
|
||||||
|
structure appropriate for the versions of the software they want to
|
||||||
|
notify; then they serialize that data and sign it. The serialized data
|
||||||
|
and its signature make up the outer `alert` message---allowing nodes
|
||||||
|
which don't understand the data structure to validate the signature and
|
||||||
|
relay the alert to nodes which do understand it. The nodes which
|
||||||
|
actually need the message can decode the serialized data to access the
|
||||||
|
inner `alert` message.
|
||||||
|
|
||||||
|
The outer `alert` message has four fields:
|
||||||
|
|
||||||
|
| Bytes | Name | Data Type | Description
|
||||||
|
|-------------|-----------------|------------------|-------------
|
||||||
|
| *Variable* | alert bytes | compactSize uint | The number of bytes in following alert field.
|
||||||
|
| *Variable* | alert | uchar | The serialized alert. See below for a description of the current alert format.
|
||||||
|
| *Variable* | signature bytes | compactSize uint | The number of bytes in the following signature field.
|
||||||
|
| *Variable* | signature | uchar | A DER-encoded ECDSA (secp256k1) signature of the alert signed with the developer's alert key.
|
||||||
|
|
||||||
|
Although designed to be easily upgraded, the format of the inner
|
||||||
|
serialized alert has not changed since the `alert` message was first
|
||||||
|
introduced in protocol version 311.
|
||||||
|
|
||||||
|
| Bytes | Name | Data Type | Description
|
||||||
|
|----------|-------------------|---------------------------|-------------
|
||||||
|
| 4 | version | int32_t | Alert format version. Version 1 from protocol version 311 through at least protocol version 70002.
|
||||||
|
| 8 | relayUntil | int64_t | The time beyond which nodes should stop relaying this alert. Unix epoch time format.
|
||||||
|
| 8 | expiration | int64_t | The time beyond which this alert is no longer in effect and should be ignored. Unix epoch time format.
|
||||||
|
| 4 | ID | int32_t | A unique ID number for this alert.
|
||||||
|
| 4 | cancel | int32_t | All alerts with an ID number less than or equal to this number should be canceled: deleted and not accepted in the future.
|
||||||
|
| *Varies* | setCancel count | compactSize uint | The number of IDs in the following setCancel field. May be zero.
|
||||||
|
| *Varies* | setCancel | int32_t | Alert IDs which should be canceled. Each alert ID is a separate int32_t number.
|
||||||
|
| 4 | minVer | int32_t | This alert only applies to protocol versions greater than or equal to this version. Nodes running other protocol versions should still relay it.
|
||||||
|
| 4 | maxVer | int32_t | This alert only applies to protocol versions less than or equal to this version. Nodes running other protocol versions should still relay it.
|
||||||
|
| *Varies* | user\_agent count | compactSize uint | The number of user agent strings in the following setUser\_agent field. May be zero.
|
||||||
|
| *Varies* | setUser\_agent | compactSize uint + string | If this field is empty, it has no effect on the alert. If there is at least one entry is this field, this alert only applies to programs with a user agent that exactly matches one of the strings in this field. Each entry in this field is a compactSize uint followed by a string---the uint indicates how many bytes are in the following string. This field was originally called setSubVer; since BIP14, it applies to user agent strings as defined in the `version` message.
|
||||||
|
| 4 | priority | int32_t | Relative priority compared to other alerts.
|
||||||
|
| *Varies* | comment bytes | compactSize uint | The number of bytes in the following comment field. May be zero.
|
||||||
|
| *Varies* | comment | string | A comment on the alert that is not displayed.
|
||||||
|
| *Varies* | statusBar bytes | compactSize uint | The number of bytes in the following statusBar field. May be zero.
|
||||||
|
| *Varies* | statusBar | string | The alert message that is displayed to the user.
|
||||||
|
| *Varies* | reserved bytes | compactSize uint | The number of bytes in the following reserved field. May be zero.
|
||||||
|
| *Varies* | reserved | string | Reserved for future use. Originally called RPC Error.
|
||||||
|
|
||||||
|
The annotated hexdump below shows an `alert` message. (The message
|
||||||
|
header has been omitted.)
|
||||||
|
|
||||||
|
<!-- example below from Bitcoin Wiki but it's a network capture so I
|
||||||
|
(@harding) don't think it is subject to the wiki's copyright license; I
|
||||||
|
think it's public domain. TODO: replace with a more recent
|
||||||
|
alert the next time one is live on the network. -->
|
||||||
|
|
||||||
|
{% highlight text %}
|
||||||
|
73 ................................. Bytes in encapsulated alert: 115
|
||||||
|
01000000 ........................... Version: 1
|
||||||
|
3766404f00000000 ................... RelayUntil: 1329620535
|
||||||
|
b305434f00000000 ................... Expiration: 1330917376
|
||||||
|
|
||||||
|
f2030000 ........................... ID: 1010
|
||||||
|
f1030000 ........................... Cancel: 1009
|
||||||
|
00 ................................. setCancel count: 0
|
||||||
|
|
||||||
|
10270000 ........................... MinVer: 10000
|
||||||
|
48ee0000 ........................... MaxVer: 61000
|
||||||
|
00 ................................. setUser_agent bytes: 0
|
||||||
|
64000000 ........................... Priority: 100
|
||||||
|
|
||||||
|
00 ................................. Bytes In Comment String: 0
|
||||||
|
46 ................................. Bytes in StatusBar String: 70
|
||||||
|
53656520626974636f696e2e6f72672f
|
||||||
|
666562323020696620796f7520686176
|
||||||
|
652074726f75626c6520636f6e6e6563
|
||||||
|
74696e67206166746572203230204665
|
||||||
|
627275617279 ....................... Status Bar String: "See [...]"
|
||||||
|
00 ................................. Bytes In Reserved String: 0
|
||||||
|
|
||||||
|
47 ................................. Bytes in signature: 71
|
||||||
|
30450221008389df45f0703f39ec8c1c
|
||||||
|
c42c13810ffcae14995bb648340219e3
|
||||||
|
53b63b53eb022009ec65e1c1aaeec1fd
|
||||||
|
334c6b684bde2b3f573060d5b70c3a46
|
||||||
|
723326e4e8a4f1 ..................... Signature
|
||||||
|
{% endhighlight %}
|
||||||
|
|
||||||
|
**Alert key compromise:** Dash Core's source code defines a
|
||||||
|
particular set of alert parameters that can be used to notify users that
|
||||||
|
the alert signing key has been compromised and that they should upgrade
|
||||||
|
to get a new alert public key. Once a signed alert containing those
|
||||||
|
parameters has been received, no other alerts can cancel or override it.
|
||||||
|
See the `ProcessAlert()` function in the Dash Core [alert.cpp][core
|
||||||
|
alert.cpp] source code for the parameters of this message.
|
||||||
|
|
||||||
|
{% endautocrossref %}
|
||||||
|
|
||||||
#### dseg
|
#### dseg
|
||||||
{% include helpers/subhead-links.md %}
|
{% include helpers/subhead-links.md %}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue