mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-21 17:55:42 +00:00
Markdown linter (#1309)
* Add markdown linting - add linter default rules - adapt rules to current code - fix the code for linting to pass - add CI check fix #1243 * Fix markdown for Substrate * Fix tooling install * Fix workflow * Add documentation * Remove trailing spaces * Update .github/.markdownlint.yaml Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Fix mangled markdown/lists * Fix captalization issues on known words
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
# HRMP Pallet
|
||||
|
||||
A module responsible for Horizontally Relay-routed Message Passing (HRMP). See [Messaging Overview](../messaging.md) for more details.
|
||||
A module responsible for Horizontally Relay-routed Message Passing (HRMP). See [Messaging Overview](../messaging.md) for
|
||||
more details.
|
||||
|
||||
## Storage
|
||||
|
||||
@@ -132,7 +133,8 @@ Candidate Acceptance Function:
|
||||
1. or in `HrmpChannelDigests` for `P` an entry with the block number should exist
|
||||
* `check_outbound_hrmp(sender: ParaId, Vec<OutboundHrmpMessage>)`:
|
||||
1. Checks that there are at most `config.hrmp_max_message_num_per_candidate` messages.
|
||||
1. Checks that horizontal messages are sorted by ascending recipient ParaId and there is no two horizontal messages have the same recipient.
|
||||
1. Checks that horizontal messages are sorted by ascending recipient ParaId and there is no two horizontal messages
|
||||
have the same recipient.
|
||||
1. For each horizontal message `M` with the channel `C` identified by `(sender, M.recipient)` check:
|
||||
1. exists
|
||||
1. `M`'s payload size doesn't exceed a preconfigured limit `C.max_message_size`
|
||||
@@ -143,42 +145,48 @@ Candidate Enactment:
|
||||
|
||||
* `queue_outbound_hrmp(sender: ParaId, Vec<OutboundHrmpMessage>)`:
|
||||
1. For each horizontal message `HM` with the channel `C` identified by `(sender, HM.recipient)`:
|
||||
1. Append `HM` into `HrmpChannelContents` that corresponds to `C` with `sent_at` equals to the current block number.
|
||||
1. Locate or create an entry in `HrmpChannelDigests` for `HM.recipient` and append `sender` into the entry's list.
|
||||
1. Append `HM` into `HrmpChannelContents` that corresponds to `C` with `sent_at` equals to the current block
|
||||
number.
|
||||
1. Locate or create an entry in `HrmpChannelDigests` for `HM.recipient` and append `sender` into the entry's
|
||||
list.
|
||||
1. Increment `C.msg_count`
|
||||
1. Increment `C.total_size` by `HM`'s payload size
|
||||
1. Append a new link to the MQC and save the new head in `C.mqc_head`. Note that the current block number as of enactment is used for the link.
|
||||
1. Append a new link to the MQC and save the new head in `C.mqc_head`. Note that the current block number as of
|
||||
enactment is used for the link.
|
||||
* `prune_hrmp(recipient, new_hrmp_watermark)`:
|
||||
1. From `HrmpChannelDigests` for `recipient` remove all entries up to an entry with block number equal to `new_hrmp_watermark`.
|
||||
1. From the removed digests construct a set of paras that sent new messages within the interval between the old and new watermarks.
|
||||
1. For each channel `C` identified by `(sender, recipient)` for each `sender` coming from the set, prune messages up to the `new_hrmp_watermark`.
|
||||
1. From `HrmpChannelDigests` for `recipient` remove all entries up to an entry with block number equal to
|
||||
`new_hrmp_watermark`.
|
||||
1. From the removed digests construct a set of paras that sent new messages within the interval between the old and
|
||||
new watermarks.
|
||||
1. For each channel `C` identified by `(sender, recipient)` for each `sender` coming from the set, prune messages up
|
||||
to the `new_hrmp_watermark`.
|
||||
1. For each pruned message `M` from channel `C`:
|
||||
1. Decrement `C.msg_count`
|
||||
1. Decrement `C.total_size` by `M`'s payload size.
|
||||
1. Set `HrmpWatermarks` for `P` to be equal to `new_hrmp_watermark`
|
||||
> NOTE: That collecting digests can be inefficient and the time it takes grows very fast. Thanks to the aggressive
|
||||
> parameterization this shouldn't be a big of a deal.
|
||||
> If that becomes a problem consider introducing an extra dictionary which says at what block the given sender
|
||||
> sent a message to the recipient.
|
||||
> parameterization this shouldn't be a big of a deal. If that becomes a problem consider introducing an extra
|
||||
> dictionary which says at what block the given sender sent a message to the recipient.
|
||||
|
||||
## Entry-points
|
||||
|
||||
The following entry-points are meant to be used for HRMP channel management.
|
||||
|
||||
Those entry-points are meant to be called from a parachain. `origin` is defined as the `ParaId` of
|
||||
the parachain executed the message.
|
||||
Those entry-points are meant to be called from a parachain. `origin` is defined as the `ParaId` of the parachain
|
||||
executed the message.
|
||||
|
||||
* `hrmp_init_open_channel(recipient, proposed_max_capacity, proposed_max_message_size)`:
|
||||
1. Check that the `origin` is not `recipient`.
|
||||
1. Check that `proposed_max_capacity` is less or equal to `config.hrmp_channel_max_capacity` and greater than zero.
|
||||
1. Check that `proposed_max_message_size` is less or equal to `config.hrmp_channel_max_message_size` and greater than zero.
|
||||
1. Check that `proposed_max_message_size` is less or equal to `config.hrmp_channel_max_message_size` and greater
|
||||
than zero.
|
||||
1. Check that `recipient` is a valid para.
|
||||
1. Check that there is no existing channel for `(origin, recipient)` in `HrmpChannels`.
|
||||
1. Check that there is no existing open channel request (`origin`, `recipient`) in `HrmpOpenChannelRequests`.
|
||||
1. Check that the sum of the number of already opened HRMP channels by the `origin` (the size
|
||||
of the set found `HrmpEgressChannelsIndex` for `origin`) and the number of open requests by the
|
||||
`origin` (the value from `HrmpOpenChannelRequestCount` for `origin`) doesn't exceed the limit of
|
||||
channels (`config.hrmp_max_parachain_outbound_channels` or `config.hrmp_max_parathread_outbound_channels`) minus 1.
|
||||
1. Check that the sum of the number of already opened HRMP channels by the `origin` (the size of the set found
|
||||
`HrmpEgressChannelsIndex` for `origin`) and the number of open requests by the `origin` (the value from
|
||||
`HrmpOpenChannelRequestCount` for `origin`) doesn't exceed the limit of channels
|
||||
(`config.hrmp_max_parachain_outbound_channels` or `config.hrmp_max_parathread_outbound_channels`) minus 1.
|
||||
1. Check that `origin`'s balance is more or equal to `config.hrmp_sender_deposit`
|
||||
1. Reserve the deposit for the `origin` according to `config.hrmp_sender_deposit`
|
||||
1. Increase `HrmpOpenChannelRequestCount` by 1 for `origin`.
|
||||
@@ -189,27 +197,26 @@ the parachain executed the message.
|
||||
1. Set `max_message_size` to `proposed_max_message_size`
|
||||
1. Set `max_total_size` to `config.hrmp_channel_max_total_size`
|
||||
1. Send a downward message to `recipient` notifying about an inbound HRMP channel request.
|
||||
- The DM is sent using `queue_downward_message`.
|
||||
- The DM is represented by the `HrmpNewChannelOpenRequest` XCM message.
|
||||
- `sender` is set to `origin`,
|
||||
- `max_message_size` is set to `proposed_max_message_size`,
|
||||
- `max_capacity` is set to `proposed_max_capacity`.
|
||||
* The DM is sent using `queue_downward_message`.
|
||||
* The DM is represented by the `HrmpNewChannelOpenRequest` XCM message.
|
||||
* `sender` is set to `origin`,
|
||||
* `max_message_size` is set to `proposed_max_message_size`,
|
||||
* `max_capacity` is set to `proposed_max_capacity`.
|
||||
* `hrmp_accept_open_channel(sender)`:
|
||||
1. Check that there is an existing request between (`sender`, `origin`) in `HrmpOpenChannelRequests`
|
||||
1. Check that it is not confirmed.
|
||||
1. Check that the sum of the number of inbound HRMP channels opened to `origin` (the size of the set
|
||||
found in `HrmpIngressChannelsIndex` for `origin`) and the number of accepted open requests by the `origin`
|
||||
(the value from `HrmpAcceptedChannelRequestCount` for `origin`) doesn't exceed the limit of channels
|
||||
(`config.hrmp_max_parachain_inbound_channels` or `config.hrmp_max_parathread_inbound_channels`)
|
||||
minus 1.
|
||||
1. Check that the sum of the number of inbound HRMP channels opened to `origin` (the size of the set found in
|
||||
`HrmpIngressChannelsIndex` for `origin`) and the number of accepted open requests by the `origin` (the value from
|
||||
`HrmpAcceptedChannelRequestCount` for `origin`) doesn't exceed the limit of channels
|
||||
(`config.hrmp_max_parachain_inbound_channels` or `config.hrmp_max_parathread_inbound_channels`) minus 1.
|
||||
1. Check that `origin`'s balance is more or equal to `config.hrmp_recipient_deposit`.
|
||||
1. Reserve the deposit for the `origin` according to `config.hrmp_recipient_deposit`
|
||||
1. For the request in `HrmpOpenChannelRequests` identified by `(sender, P)`, set `confirmed` flag to `true`.
|
||||
1. Increase `HrmpAcceptedChannelRequestCount` by 1 for `origin`.
|
||||
1. Send a downward message to `sender` notifying that the channel request was accepted.
|
||||
- The DM is sent using `queue_downward_message`.
|
||||
- The DM is represented by the `HrmpChannelAccepted` XCM message.
|
||||
- `recipient` is set to `origin`.
|
||||
* The DM is sent using `queue_downward_message`.
|
||||
* The DM is represented by the `HrmpChannelAccepted` XCM message.
|
||||
* `recipient` is set to `origin`.
|
||||
* `hrmp_cancel_open_request(ch)`:
|
||||
1. Check that `origin` is either `ch.sender` or `ch.recipient`
|
||||
1. Check that the open channel request `ch` exists.
|
||||
@@ -221,15 +228,15 @@ the parachain executed the message.
|
||||
1. Check that `origin` is either `ch.sender` or `ch.recipient`
|
||||
1. Check that `HrmpChannels` for `ch` exists.
|
||||
1. Check that `ch` is not in the `HrmpCloseChannelRequests` set.
|
||||
1. If not already there, insert a new entry `Some(())` to `HrmpCloseChannelRequests` for `ch`
|
||||
and append `ch` to `HrmpCloseChannelRequestsList`.
|
||||
1. If not already there, insert a new entry `Some(())` to `HrmpCloseChannelRequests` for `ch` and append `ch` to
|
||||
`HrmpCloseChannelRequestsList`.
|
||||
1. Send a downward message to the opposite party notifying about the channel closing.
|
||||
- The DM is sent using `queue_downward_message`.
|
||||
- The DM is represented by the `HrmpChannelClosing` XCM message with:
|
||||
- `initator` is set to `origin`,
|
||||
- `sender` is set to `ch.sender`,
|
||||
- `recipient` is set to `ch.recipient`.
|
||||
- The opposite party is `ch.sender` if `origin` is `ch.recipient` and `ch.recipient` if `origin` is `ch.sender`.
|
||||
* The DM is sent using `queue_downward_message`.
|
||||
* The DM is represented by the `HrmpChannelClosing` XCM message with:
|
||||
* `initator` is set to `origin`,
|
||||
* `sender` is set to `ch.sender`,
|
||||
* `recipient` is set to `ch.recipient`.
|
||||
* The opposite party is `ch.sender` if `origin` is `ch.recipient` and `ch.recipient` if `origin` is `ch.sender`.
|
||||
|
||||
## Session Change
|
||||
|
||||
@@ -241,13 +248,15 @@ the parachain executed the message.
|
||||
1. Remove `HrmpOpenChannelRequests` and `HrmpOpenChannelRequestsList` for `(P, _)` and `(_, P)`.
|
||||
1. For each removed channel request `C`:
|
||||
1. Unreserve the sender's deposit if the sender is not present in `outgoing_paras`
|
||||
1. Unreserve the recipient's deposit if `C` is confirmed and the recipient is not present in `outgoing_paras`
|
||||
1. For each channel designator `D` in `HrmpOpenChannelRequestsList` we query the request `R` from `HrmpOpenChannelRequests`:
|
||||
1. Unreserve the recipient's deposit if `C` is confirmed and the recipient is not present in
|
||||
`outgoing_paras`
|
||||
1. For each channel designator `D` in `HrmpOpenChannelRequestsList` we query the request `R` from
|
||||
`HrmpOpenChannelRequests`:
|
||||
1. if `R.confirmed = true`,
|
||||
1. if both `D.sender` and `D.recipient` are not offboarded.
|
||||
1. create a new channel `C` between `(D.sender, D.recipient)`.
|
||||
1. Initialize the `C.sender_deposit` with `R.sender_deposit` and `C.recipient_deposit`
|
||||
with the value found in the configuration `config.hrmp_recipient_deposit`.
|
||||
1. Initialize the `C.sender_deposit` with `R.sender_deposit` and `C.recipient_deposit` with the value
|
||||
found in the configuration `config.hrmp_recipient_deposit`.
|
||||
1. Insert `sender` into the set `HrmpIngressChannelsIndex` for the `recipient`.
|
||||
1. Insert `recipient` into the set `HrmpEgressChannelsIndex` for the `sender`.
|
||||
1. decrement `HrmpOpenChannelRequestCount` for `D.sender` by 1.
|
||||
|
||||
Reference in New Issue
Block a user