A pallet which uses the XCMP transport layer to handle both incoming and outgoing XCM message
sending and dispatch, queuing, signalling and backpressure. To do so, it implements:
* `XcmpMessageHandler`
* `XcmpMessageSource`
Also provides an implementation of `SendXcm` which can be placed in a router tuple for relaying
XCM over XCMP if the destination is `Parent/Parachain`. It requires an implementation of
`XcmExecutor` for dispatching incoming XCM messages.
To prevent out of memory errors on the `OutboundXcmpMessages` queue, an exponential fee factor
(`DeliveryFeeFactor`) is set, much like the one used in DMP.
The fee factor increases whenever the total size of messages in a particular channel passes a
threshold. This threshold is defined as a percentage of the maximum total size the channel can
have. More concretely, the threshold is `max_total_size` / `THRESHOLD_FACTOR`, where:
- `max_total_size` is the maximum size, in bytes, of the channel, not number of messages.
It is defined in the channel configuration.
- `THRESHOLD_FACTOR` just declares which percentage of the max size is the actual threshold.
If it's 2, then the threshold is half of the max size, if it's 4, it's a quarter, and so on.