Features for v3 lifetime which don't change message format
[x] paritytech/polkadot#6126
[x] paritytech/polkadot#6572
[ ] paritytech/polkadot-sdk#488
[x] paritytech/polkadot-sdk#490
[ ] paritytech/polkadot-sdk#954
[ ] paritytech/polkadot-sdk#489
[ ] paritytech/polkadot-sdk#487
[ ] paritytech/polkadot-sdk#864
[x] paritytech/polkadot#4813
[ ] paritytech/polkadot-sdk#736
Version discovery
[ ] Automatic version discovery once channel is open.
[ ] Queue outgoing messages which trigger discovery and send them once the version is known.
Trustless replies
Re-evaluate whether the Query system really is enough to get information on the execution of a remote operation back to the sender trustlessly and resistant to forgery attacks.
Origin aliasing
[x] paritytech/polkadot#6668
[ ] paritytech/polkadot-sdk#722
Improved error reporting
[ ] Simulator should extract XCM execution events and pretty-print
[ ] Ensure XCM is easily identifiable from source to dest.
[ ] Introduce ConversionError enum for when conversion between versions fails with TryFrom, and place that as an inner parameter of XcmError::UnsupportedDestination paritytech/polkadot-sdk#920
Wish list
Fees
Fees are attributes of remote locations which are essentially opaque, yet it is important to know them if messages are being sent to/through them in order to ensure messages succeed. This is quite similar to XCM versioning. We should utilise the same kind of mechanisms we have for managing XCM versions of remote locations more generally.
[ ] Instruction and Response to get a fee table from remote locations.
[ ] Fee-Registrar Pallet to store known remote locations' fee table.
[ ] Trait hooks to allow Fee-Registrar pallet to be used to determine remote-payable fees.
[ ] Subscription service to keep data in Fee-Registrar up to date.
[ ] Dynamic route pricing, based on price queries.
[ ] QueryExportTable instruction and query datatype.
[ ] Dynamic routing based on QueryExportTable replies from known/trusted bridges.
Checkpoints (v4/v5?)
[ ] Allow for the possibility of Commit and Rollback instructions which allow for error-resistant atomic operations. Payment for weight can NEVER be reverted, so the BuyExecution barrier would check for a Commit following after it.
Client
[ ] Get block-builder to provide feedback to the XCM system so that the PoV block doesn't become too big when squeezing in messages in on_idle.
[ ] paritytech/polkadot#4119
Questionable things/vague ideas/low priority
Efficient encodings for MultiAsset. (TODO: #XCMENCODE)
Consider removing all BTree stuff and just have a fixed array of MultiAsset registers. This puts the onus on the XCM message author to consider exactly what they're doing, but avoids indeterminate weights coming from sophisticated structures.
When executing XCM::Transact, use a call filter to be specified in the Config trait. (TODO: #TRANSACTFILTER)
New type of XcmpMessageFormat which gives every Xcm message an ordering flag so that lighter messages are not needlessly blocked by heavier ones preceding them. This will result in a slower overall dispatch function since it will need the page to be rebuilt with any skipped messages and placed back in storage.
Features for v3 lifetime which don't change message format
Version discovery
Trustless replies
Re-evaluate whether the Query system really is enough to get information on the execution of a remote operation back to the sender trustlessly and resistant to forgery attacks.
Origin aliasing
Improved error reporting
ConversionError
enum for when conversion between versions fails withTryFrom
, and place that as an inner parameter ofXcmError::UnsupportedDestination
paritytech/polkadot-sdk#920Wish list
Fees
Fees are attributes of remote locations which are essentially opaque, yet it is important to know them if messages are being sent to/through them in order to ensure messages succeed. This is quite similar to XCM versioning. We should utilise the same kind of mechanisms we have for managing XCM versions of remote locations more generally.
Instruction
andResponse
to get a fee table from remote locations.Bounds
Assets
Bridging
QueryExportPrice
instruction.QueryExportTable
instruction and query datatype.QueryExportTable
replies from known/trusted bridges.Checkpoints (v4/v5?)
Commit
andRollback
instructions which allow for error-resistant atomic operations. Payment for weight can NEVER be reverted, so the BuyExecution barrier would check for aCommit
following after it.Client
on_idle
.Questionable things/vague ideas/low priority
MultiAsset
. (TODO: #XCMENCODE)MultiAsset
registers. This puts the onus on the XCM message author to consider exactly what they're doing, but avoids indeterminate weights coming from sophisticated structures.XCM::Transact
, use a call filter to be specified in theConfig
trait. (TODO: #TRANSACTFILTER)XcmpMessageFormat
which gives everyXcm
message an ordering flag so that lighter messages are not needlessly blocked by heavier ones preceding them. This will result in a slower overall dispatch function since it will need the page to be rebuilt with any skipped messages and placed back in storage.