-
Notifications
You must be signed in to change notification settings - Fork 708
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Treasury spends various asset kinds #1333
Conversation
…primitives-utility crates deps
Enable `runtime-benchmarks` feature for `parachain-common` and `cumulus-primitives-utility` crates' dependencies. After adding `runtime-benchmarks = []` under `features` category in `Cargo.toml` files for the creates, I did run, > zepter lint propagate-feature --feature runtime-benchmarks --workspace --fix --feature-enables-dep="runtime-benchmarks:frame-benchmarking" This changes required for #1333
This pull request has been mentioned on Polkadot Forum. There might be relevant details there: https://forum.polkadot.network/t/polkadot-treasury-diversification-proposal/5344/3 |
This pull request has been mentioned on Polkadot Forum. There might be relevant details there: https://forum.polkadot.network/t/figuring-out-the-first-polkadot-treasury-spend-in-usdt/6545/2 |
This pull request has been mentioned on Polkadot Forum. There might be relevant details there: https://forum.polkadot.network/t/parity-tech-update-for-february/6630/1 |
This pull request has been mentioned on Polkadot Forum. There might be relevant details there: https://forum.polkadot.network/t/treasury-spends-multiple-assets-and-milestone-based-spends/6780/1 |
The `AssetKind` type parameter of a dispatchable, defined by the user, might be large — like `xcm::MultiLocation`. To prevent inflating the size of the `Call` type, we `Box` it. This changes required for paritytech#1333 --------- Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
### Summary This PR introduces new dispatchables to the treasury pallet, allowing spends of various asset types. The enhanced features of the treasury pallet, in conjunction with the asset-rate pallet, are set up and enabled for Westend and Rococo. ### Westend and Rococo runtimes. Polkadot/Kusams/Rococo Treasury can accept proposals for `spends` of various asset kinds by specifying the asset's location and ID. #### Treasury Instance New Dispatchables: - `spend(AssetKind, AssetBalance, Beneficiary, Option<ValidFrom>)` - propose and approve a spend; - `payout(SpendIndex)` - payout an approved spend or retry a failed payout - `check_payment(SpendIndex)` - check the status of a payout; - `void_spend(SpendIndex)` - void previously approved spend; > existing spend dispatchable renamed to spend_local in this context, the `AssetKind` parameter contains the asset's location and it's corresponding `asset_id`, for example: `USDT` on `AssetHub`, ``` rust location = MultiLocation(0, X1(Parachain(1000))) asset_id = MultiLocation(0, X2(PalletInstance(50), GeneralIndex(1984))) ``` the `Beneficiary` parameter is a `MultiLocation` in the context of the asset's location, for example ``` rust // the Fellowship salary pallet's location / account FellowshipSalaryPallet = MultiLocation(1, X2(Parachain(1001), PalletInstance(64))) // or custom `AccountId` Alice = MultiLocation(0, AccountId32(network: None, id: [1,...])) ``` the `AssetBalance` represents the amount of the `AssetKind` to be transferred to the `Beneficiary`. For permission checks, the asset amount is converted to the native amount and compared against the maximum spendable amount determined by the commanding spend origin. the `spend` dispatchable allows for batching spends with different `ValidFrom` arguments, enabling milestone-based spending. If the expectations tied to an approved spend are not met, it is possible to void the spend later using the `void_spend` dispatchable. Asset Rate Pallet provides the conversion rate from the `AssetKind` to the native balance. #### Asset Rate Instance Dispatchables: - `create(AssetKind, Rate)` - initialize a conversion rate to the native balance for the given asset - `update(AssetKind, Rate)` - update the conversion rate to the native balance for the given asset - `remove(AssetKind)` - remove an existing conversion rate to the native balance for the given asset the pallet's dispatchables can be executed by the Root or Treasurer origins. ### Treasury Pallet Treasury Pallet can accept proposals for `spends` of various asset kinds and pay them out through the implementation of the `Pay` trait. New Dispatchables: - `spend(Config::AssetKind, AssetBalance, Config::Beneficiary, Option<ValidFrom>)` - propose and approve a spend; - `payout(SpendIndex)` - payout an approved spend or retry a failed payout; - `check_payment(SpendIndex)` - check the status of a payout; - `void_spend(SpendIndex)` - void previously approved spend; > existing spend dispatchable renamed to spend_local The parameters' types of the `spend` dispatchable exposed via the pallet's `Config` and allows to propose and accept a spend of a certain amount. An approved spend can be claimed via the `payout` within the `Config::SpendPeriod`. Clients provide an implementation of the `Pay` trait which can pay an asset of the `AssetKind` to the `Beneficiary` in `AssetBalance` units. The implementation of the Pay trait might not have an immediate final payment status, for example if implemented over `XCM` and the actual transfer happens on a remote chain. The `check_status` dispatchable can be executed to update the spend's payment state and retry the `payout` if the payment has failed. --------- Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com> Co-authored-by: command-bot <>
…aritytech#1189)" (paritytech#1275)" (paritytech#1333) This reverts commit ffd25db.
…aritytech#1189)" (paritytech#1275)" (paritytech#1333) This reverts commit ffd25db.
…aritytech#1189)" (paritytech#1275)" (paritytech#1333) This reverts commit ffd25db.
…aritytech#1189)" (paritytech#1275)" (paritytech#1333) This reverts commit ffd25db.
…aritytech#1189)" (paritytech#1275)" (paritytech#1333) This reverts commit ffd25db.
…aritytech#1189)" (paritytech#1275)" (paritytech#1333) This reverts commit ffd25db.
…aritytech#1189)" (paritytech#1275)" (paritytech#1333) This reverts commit ffd25db.
…aritytech#1189)" (paritytech#1275)" (paritytech#1333) This reverts commit ffd25db.
…aritytech#1189)" (paritytech#1275)" (paritytech#1333) This reverts commit ffd25db.
…aritytech#1189)" (paritytech#1275)" (paritytech#1333) This reverts commit ffd25db.
…aritytech#1189)" (paritytech#1275)" (paritytech#1333) This reverts commit ffd25db.
…aritytech#1189)" (paritytech#1275)" (paritytech#1333) This reverts commit ffd25db.
## fixes [KILTprotocol/ticket#3439](KILTprotocol/ticket#3439) ### notable Changes - rust version 1.7.4 (Toolchain and gitlab runner are updated) - the preimage_pallet is no longer using deposits, instead it uses [consideration](paritytech/polkadot-sdk#1361), which is an abstration over the balance. The exact footprint of an storage entry is used to calculate the cost storing entries. Might be interesting for our current deposit model. - The pallet-xcm introduced a new benchmarking logic ### Pallets - Removed cumulus_pallet_dmp_queue (Replaced by pallet_message_queue). There is a lazy migration provided, which is running automatically. Once the the [Complete event](paritytech/polkadot-sdk#1246) is emitted, we can delete the pallet. - Treasur introduced a new [spending support](paritytech/polkadot-sdk#1333), which is currently disabled. Might be interesting at some point, if other currencies are available. - `transfer` extrinsic in `pallet_balances` is removed. Will be a breaking change for Sporran. For other new introduced extrinsics, please have a lookin the diffs below. - Tips: A max tip amount has to be specified, which is currently set to 1_000_000 KILT ### Emulated Tests I am quite unhappy with the current state of the emulated tests. I would like to refactor those tests as described in this [issue](KILTprotocol/ticket#3241 (comment)). For this PR, I only fixed problems arised by updating the dependencies. Since the polkadot-runtime is no longer part of the Polkadot-SDK, the relay chain for Spiritnet has been changed to Rococo. The purpose of these tests is to ensure that the expectations of the xcm-configuration match the implementation. The specific relay chain used should not matter. ### XCM - XCM version 4 is out which is also the LTS for XCM. - In version 4 a new instruction `Transfer` is introduced, which needed to be denied by the Barrier - renaming of paramters: The `Multi` is removed: MultiLocation -> Location, MultiAsset -> Asset, ... ### Try-runtime In version 1.7.0 additional try-runtime tests are introduced, where it is tried to decode the whole storage of the chain. This error should only occur for chains which are still running on an ancient SDK version and will be fixed automatically in the next runtime upgrade. ### Weights Since a lot of new extrinsics are introduced, I updated all weights. ### Todos - [x] execute Benchmarking ## Metadata Diff to Develop Branch <details> <summary>Peregrine Diff</summary> ``` !!! THE SUBWASM REDUCED DIFFER IS EXPERIMENTAL, DOUBLE CHECK THE RESULTS !!! [≠] pallet 0: System -> 8 change(s) - calls changes: [+] CallDesc { index: 9, name: "authorize_upgrade", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }] } } [+] CallDesc { index: 10, name: "authorize_upgrade_without_checks", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }] } } [+] CallDesc { index: 11, name: "apply_authorized_upgrade", signature: SignatureDesc { args: [ArgDesc { name: "code", ty: "Vec<u8>" }] } } - events changes: [+] EventDesc { index: 6, name: "UpgradeAuthorized", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }, ArgDesc { name: "check_version", ty: "bool" }] } } - errors changes: [+] ErrorDesc { index: 6, name: "NothingAuthorized" } [+] ErrorDesc { index: 7, name: "Unauthorized" } - constants changes: [≠] Version: [ 48, 109, 97, 115, 104, 110, 101, 116, 45, 110, 111, 100, 101, 48, 109, 97, 115, 104, 110, 101, 116, 45, 110, 111, 100, 101, 4, 0, 0, 0, 136, 44, ... ] [Value([Changed(38, U8Change(60, 68)), Changed(159, U8Change(234, 215)), Changed(160, U8Change(147, 189)), Changed(161, U8Change(227, 216)), Changed(162, U8Change(241, 162)), Changed(163, U8Change(111, 114)), Changed(164, U8Change(61, 202)), Changed(165, U8Change(105, 13)), Changed(166, U8Change(98, 101)), Changed(167, U8Change(2, 1)), Changed(171, U8Change(38, 234)), Changed(172, U8Change(96, 147)), Changed(173, U8Change(149, 227)), Changed(174, U8Change(85, 241)), Changed(175, U8Change(192, 111)), Changed(176, U8Change(101, 61)), Changed(177, U8Change(102, 105)), Changed(178, U8Change(3, 98)), Changed(183, U8Change(164, 38)), Changed(184, U8Change(123, 96)), Changed(185, U8Change(125, 149)), Changed(186, U8Change(84, 85)), Changed(187, U8Change(73, 192)), Changed(188, U8Change(148, 101)), Changed(189, U8Change(201, 102)), Changed(190, U8Change(155, 3)), Changed(191, U8Change(1, 2)), Changed(195, U8Change(69, 164)), Changed(196, U8Change(191, 123)), Changed(197, U8Change(186, 125)), Changed(198, U8Change(81, 84)), Changed(199, U8Change(163, 73)), Changed(200, U8Change(16, 148)), Changed(201, U8Change(178, 201)), Changed(202, U8Change(35, 155)), Changed(207, U8Change(195, 69)), Changed(208, U8Change(179, 191)), Changed(209, U8Change(232, 186)), Changed(210, U8Change(211, 81)), Changed(211, U8Change(50, 163)), Changed(212, U8Change(115, 16)), Changed(213, U8Change(153, 178)), Changed(214, U8Change(13, 35)), Changed(219, U8Change(8, 195)), Changed(220, U8Change(0, 179)), Changed(221, U8Change(0, 232)), Changed(222, U8Change(0, 211)), Changed(223, U8Change(0, 50)), Added(224, 115), Added(225, 153), Added(226, 13), Added(227, 1), Added(228, 0), Added(229, 0), Added(230, 0), Added(231, 251), Added(232, 197), Added(233, 119), Added(234, 185), Added(235, 215), Added(236, 71), Added(237, 239), Added(238, 214), Added(239, 1), Added(240, 0), Added(241, 0), Added(242, 0), Added(243, 8), Added(244, 0), Added(245, 0), Added(246, 0), Added(247, 0)])] - storages changes: [+] StorageDesc { name: "AuthorizedUpgrade", modifier: "Optional", default_value: [0] } [≠] pallet 6: Balances -> 7 change(s) - calls changes: [+] CallDesc { index: 9, name: "force_adjust_total_issuance", signature: SignatureDesc { args: [ArgDesc { name: "direction", ty: "AdjustmentDirection" }, ArgDesc { name: "delta", ty: "T::Balance" }] } } [-] "set_balance_deprecated" [-] "transfer" - events changes: [+] EventDesc { index: 21, name: "TotalIssuanceForced", signature: SignatureDesc { args: [ArgDesc { name: "old", ty: "T::Balance" }, ArgDesc { name: "new", ty: "T::Balance" }] } } - errors changes: [+] ErrorDesc { index: 10, name: "IssuanceDeactivated" } [+] ErrorDesc { index: 11, name: "DeltaZero" } - constants changes: [-] "MaxHolds" [≠] pallet 8: Sudo -> 4 change(s) - calls changes: [+] CallDesc { index: 4, name: "remove_key", signature: SignatureDesc { args: [] } } - events changes: [≠] 1: KeyChanged ( old_sudoer: Option<T::AccountId>, ) ) [Signature(SignatureChange { args: [Changed(0, [Name(StringChange("old_sudoer", "old"))]), Added(1, ArgDesc { name: "new", ty: "T::AccountId" })] })] [≠] 2: SudoAsDone ( sudo_result: DispatchResult, ) ) [Name(StringChange("SudoAsDone", "KeyRemoved")), Signature(SignatureChange { args: [Removed(0, ArgDesc { name: "sudo_result", ty: "DispatchResult" })] })] [+] EventDesc { index: 3, name: "SudoAsDone", signature: SignatureDesc { args: [ArgDesc { name: "sudo_result", ty: "DispatchResult" }] } } [≠] pallet 24: AuraExt -> 1 change(s) - storages changes: [+] StorageDesc { name: "SlotInfo", modifier: "Optional", default_value: [0] } [≠] pallet 30: Democracy -> 9 change(s) - calls changes: [≠] 7: fast_track ( proposal_hash: H256, voting_period: BlockNumberFor<T>, delay: BlockNumberFor<T>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })] [≠] 8: veto_external ( proposal_hash: H256, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })] [≠] 16: blacklist ( proposal_hash: H256, maybe_ref_index: Option<ReferendumIndex>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })] [≠] 18: set_metadata ( owner: MetadataOwner, maybe_hash: Option<PreimageHash>, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("Option<PreimageHash>", "Option<T::Hash>"))])] })] - events changes: [≠] 9: Vetoed ( who: T::AccountId, proposal_hash: H256, until: BlockNumberFor<T>, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("H256", "T::Hash"))])] })] [≠] 10: Blacklisted ( proposal_hash: H256, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })] [≠] 14: MetadataSet ( owner: MetadataOwner, hash: PreimageHash, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("PreimageHash", "T::Hash"))])] })] [≠] 15: MetadataCleared ( owner: MetadataOwner, hash: PreimageHash, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("PreimageHash", "T::Hash"))])] })] [≠] 16: MetadataTransferred ( prev_owner: MetadataOwner, owner: MetadataOwner, hash: PreimageHash, ) ) [Signature(SignatureChange { args: [Changed(2, [Ty(StringChange("PreimageHash", "T::Hash"))])] })] [≠] pallet 31: Council -> 1 change(s) - errors changes: [+] ErrorDesc { index: 10, name: "PrimeAccountNotMember" } [≠] pallet 32: TechnicalCommittee -> 1 change(s) - errors changes: [+] ErrorDesc { index: 10, name: "PrimeAccountNotMember" } [≠] pallet 35: Treasury -> 20 change(s) - calls changes: [≠] 3: spend ( amount: BalanceOf<T, I>, beneficiary: AccountIdLookupOf<T>, ) ) [Name(StringChange("spend", "spend_local"))] [+] CallDesc { index: 5, name: "spend", signature: SignatureDesc { args: [ArgDesc { name: "asset_kind", ty: "Box<T::AssetKind>" }, ArgDesc { name: "amount", ty: "AssetBalanceOf<T, I>" }, ArgDesc { name: "beneficiary", ty: "Box<BeneficiaryLookupOf<T, I>>" }, ArgDesc { name: "valid_from", ty: "Option<BlockNumberFor<T>>" }] } } [+] CallDesc { index: 6, name: "payout", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } } [+] CallDesc { index: 7, name: "check_status", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } } [+] CallDesc { index: 8, name: "void_spend", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } } - events changes: [+] EventDesc { index: 9, name: "AssetSpendApproved", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "asset_kind", ty: "T::AssetKind" }, ArgDesc { name: "amount", ty: "AssetBalanceOf<T, I>" }, ArgDesc { name: "beneficiary", ty: "T::Beneficiary" }, ArgDesc { name: "valid_from", ty: "BlockNumberFor<T>" }, ArgDesc { name: "expire_at", ty: "BlockNumberFor<T>" }] } } [+] EventDesc { index: 10, name: "AssetSpendVoided", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } } [+] EventDesc { index: 11, name: "Paid", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "payment_id", ty: "<T::Paymaster as Pay>::Id" }] } } [+] EventDesc { index: 12, name: "PaymentFailed", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "payment_id", ty: "<T::Paymaster as Pay>::Id" }] } } [+] EventDesc { index: 13, name: "SpendProcessed", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } } - errors changes: [+] ErrorDesc { index: 5, name: "FailedToConvertBalance" } [+] ErrorDesc { index: 6, name: "SpendExpired" } [+] ErrorDesc { index: 7, name: "EarlyPayout" } [+] ErrorDesc { index: 8, name: "AlreadyAttempted" } [+] ErrorDesc { index: 9, name: "PayoutError" } [+] ErrorDesc { index: 10, name: "NotAttempted" } [+] ErrorDesc { index: 11, name: "Inconclusive" } - constants changes: [+] ConstantDesc { name: "PayoutPeriod", value: [192, 75, 3, 0, 0, 0, 0, 0] } - storages changes: [+] StorageDesc { name: "SpendCount", modifier: "Default", default_value: [0, 0, 0, 0] } [+] StorageDesc { name: "Spends", modifier: "Optional", default_value: [0] } [≠] pallet 41: Vesting -> 1 change(s) - calls changes: [+] CallDesc { index: 5, name: "force_remove_vesting_schedule", signature: SignatureDesc { args: [ArgDesc { name: "target", ty: "<T::Lookup as StaticLookup>::Source" }, ArgDesc { name: "schedule_index", ty: "u32" }] } } [≠] pallet 44: Preimage -> 4 change(s) - calls changes: [+] CallDesc { index: 4, name: "ensure_updated", signature: SignatureDesc { args: [ArgDesc { name: "hashes", ty: "Vec<T::Hash>" }] } } - errors changes: [+] ErrorDesc { index: 6, name: "TooMany" } [+] ErrorDesc { index: 7, name: "TooFew" } - storages changes: [+] StorageDesc { name: "RequestStatusFor", modifier: "Optional", default_value: [0] } [≠] pallet 46: Tips -> 5 change(s) - errors changes: [≠] 3: NotFinder [Name(StringChange("NotFinder", "MaxTipAmountExceeded"))] [≠] 4: StillOpen [Name(StringChange("StillOpen", "NotFinder"))] [≠] 5: Premature [Name(StringChange("Premature", "StillOpen"))] [+] ErrorDesc { index: 6, name: "Premature" } - constants changes: [+] ConstantDesc { name: "MaxTipAmount", value: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } [≠] pallet 80: ParachainSystem -> 9 change(s) - events changes: [≠] 3: UpgradeAuthorized ( code_hash: T::Hash, ) ) [Name(StringChange("UpgradeAuthorized", "DownwardMessagesReceived")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("code_hash", "count")), Ty(StringChange("T::Hash", "u32"))])] })] [≠] 4: DownwardMessagesReceived ( count: u32, ) ) [Name(StringChange("DownwardMessagesReceived", "DownwardMessagesProcessed")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("count", "weight_used")), Ty(StringChange("u32", "Weight"))]), Added(1, ArgDesc { name: "dmq_head", ty: "relay_chain::Hash" })] })] [≠] 5: DownwardMessagesProcessed ( weight_used: Weight, dmq_head: relay_chain::Hash, ) ) [Name(StringChange("DownwardMessagesProcessed", "UpwardMessageSent")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("weight_used", "message_hash")), Ty(StringChange("Weight", "Option<XcmHash>"))]), Removed(1, ArgDesc { name: "dmq_head", ty: "relay_chain::Hash" })] })] [-] "UpwardMessageSent" - storages changes: [+] StorageDesc { name: "AggregatedUnincludedSegment", modifier: "Optional", default_value: [0] } [+] StorageDesc { name: "UnincludedSegment", modifier: "Default", default_value: [0] } [+] StorageDesc { name: "UpgradeGoAhead", modifier: "Default", default_value: [0] } [+] StorageDesc { name: "UpwardDeliveryFeeFactor", modifier: "Default", default_value: [0, 0, 100, 167, 179, 182, 224, 13, 0, 0, 0, 0, 0, 0, 0, 0] } [-] "AuthorizedUpgrade" [≠] pallet 82: XcmpQueue -> 25 change(s) - calls changes: [-] "service_overweight" [-] "update_threshold_weight" [-] "update_weight_restrict_decay" [-] "update_xcmp_max_individual_weight" - events changes: [≠] 0: Success ( message_hash: XcmHash, message_id: XcmHash, weight: Weight, ) ) [Name(StringChange("Success", "XcmpMessageSent")), Signature(SignatureChange { args: [Removed(1, ArgDesc { name: "message_id", ty: "XcmHash" }), Removed(2, ArgDesc { name: "weight", ty: "Weight" })] })] [-] "Fail" [-] "BadVersion" [-] "BadFormat" [-] "XcmpMessageSent" [-] "OverweightEnqueued" [-] "OverweightServiced" - errors changes: [≠] 0: FailedToSend [Name(StringChange("FailedToSend", "BadQueueConfig"))] [≠] 1: BadXcmOrigin [Name(StringChange("BadXcmOrigin", "AlreadySuspended"))] [≠] 2: BadXcm [Name(StringChange("BadXcm", "AlreadyResumed"))] [-] "BadOverweightIndex" [-] "WeightOverLimit" - constants changes: [+] ConstantDesc { name: "MaxInboundSuspended", value: [0, 0, 0, 0] } - storages changes: [+] StorageDesc { name: "DeliveryFeeFactor", modifier: "Default", default_value: [0, 0, 100, 167, 179, 182, 224, 13, 0, 0, 0, 0, 0, 0, 0, 0] } [+] StorageDesc { name: "InboundXcmpSuspended", modifier: "Default", default_value: [0] } [≠] Default QueueConfig: [2, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 130, 26, 6, 0, 0, 8, 0, 7, 0, 200, 23, 168, 4, 2, 0, 4, 0] [DefaultValue([Changed(0, U8Change(2, 32)), Changed(4, U8Change(5, 48)), Changed(8, U8Change(1, 8)), Removed(12, 130), Removed(13, 26), Removed(14, 6), Removed(15, 0), Removed(16, 0), Removed(17, 8), Removed(18, 0), Removed(19, 7), Removed(20, 0), Removed(21, 200), Removed(22, 23), Removed(23, 168), Removed(24, 4), Removed(25, 2), Removed(26, 0), Removed(27, 4), Removed(28, 0)])] [-] "CounterForOverweight" [-] "InboundXcmpMessages" [-] "InboundXcmpStatus" [-] "Overweight" [-] "OverweightCount" [≠] pallet 83: PolkadotXcm -> 35 change(s) - calls changes: [≠] 0: send ( dest: Box<VersionedMultiLocation>, message: Box<VersionedXcm<()>>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })] [≠] 1: teleport_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })] [≠] 2: reserve_transfer_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })] [≠] 3: execute ( message: Box<VersionedXcm<<T as SysConfig>::RuntimeCall>>, max_weight: Weight, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedXcm<<T as SysConfig>::RuntimeCall>>", "Box<VersionedXcm<<T as Config>::RuntimeCall>>"))])] })] [≠] 4: force_xcm_version ( location: Box<MultiLocation>, version: XcmVersion, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<MultiLocation>", "Box<Location>"))])] })] [≠] 6: force_subscribe_version_notify ( location: Box<VersionedMultiLocation>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })] [≠] 7: force_unsubscribe_version_notify ( location: Box<VersionedMultiLocation>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })] [≠] 8: limited_reserve_transfer_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, weight_limit: WeightLimit, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })] [≠] 9: limited_teleport_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, weight_limit: WeightLimit, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })] [+] CallDesc { index: 11, name: "transfer_assets", signature: SignatureDesc { args: [ArgDesc { name: "dest", ty: "Box<VersionedLocation>" }, ArgDesc { name: "beneficiary", ty: "Box<VersionedLocation>" }, ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "fee_asset_item", ty: "u32" }, ArgDesc { name: "weight_limit", ty: "WeightLimit" }] } } [+] CallDesc { index: 12, name: "claim_assets", signature: SignatureDesc { args: [ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "beneficiary", ty: "Box<VersionedLocation>" }] } } [+] CallDesc { index: 13, name: "transfer_assets_using_type_and_then", signature: SignatureDesc { args: [ArgDesc { name: "dest", ty: "Box<VersionedLocation>" }, ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "assets_transfer_type", ty: "Box<TransferType>" }, ArgDesc { name: "remote_fees_id", ty: "Box<VersionedAssetId>" }, ArgDesc { name: "fees_transfer_type", ty: "Box<TransferType>" }, ArgDesc { name: "custom_xcm_on_dest", ty: "Box<VersionedXcm<()>>" }, ArgDesc { name: "weight_limit", ty: "WeightLimit" }] } } - events changes: [≠] 1: Sent ( origin: MultiLocation, destination: MultiLocation, message: Xcm<()>, message_id: XcmHash, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 2: UnexpectedResponse ( origin: MultiLocation, query_id: QueryId, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 8: InvalidResponder ( origin: MultiLocation, query_id: QueryId, expected_location: Option<MultiLocation>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("Option<MultiLocation>", "Option<Location>"))])] })] [≠] 9: InvalidResponderVersion ( origin: MultiLocation, query_id: QueryId, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 11: AssetsTrapped ( hash: H256, origin: MultiLocation, assets: VersionedMultiAssets, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("VersionedMultiAssets", "VersionedAssets"))])] })] [≠] 12: VersionChangeNotified ( destination: MultiLocation, result: XcmVersion, cost: MultiAssets, message_id: XcmHash, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("MultiAssets", "Assets"))])] })] [≠] 13: SupportedVersionChanged ( location: MultiLocation, version: XcmVersion, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 14: NotifyTargetSendFail ( location: MultiLocation, query_id: QueryId, error: XcmError, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 15: NotifyTargetMigrationFail ( location: VersionedMultiLocation, query_id: QueryId, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("VersionedMultiLocation", "VersionedLocation"))])] })] [≠] 16: InvalidQuerierVersion ( origin: MultiLocation, query_id: QueryId, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 17: InvalidQuerier ( origin: MultiLocation, query_id: QueryId, expected_querier: MultiLocation, maybe_actual_querier: Option<MultiLocation>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("MultiLocation", "Location"))]), Changed(3, [Ty(StringChange("Option<MultiLocation>", "Option<Location>"))])] })] [≠] 18: VersionNotifyStarted ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })] [≠] 19: VersionNotifyRequested ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })] [≠] 20: VersionNotifyUnrequested ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })] [≠] 21: FeesPaid ( paying: MultiLocation, fees: MultiAssets, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })] [≠] 22: AssetsClaimed ( hash: H256, origin: MultiLocation, assets: VersionedMultiAssets, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("VersionedMultiAssets", "VersionedAssets"))])] })] [+] EventDesc { index: 23, name: "VersionMigrationFinished", signature: SignatureDesc { args: [ArgDesc { name: "version", ty: "XcmVersion" }] } } - errors changes: [≠] 13: InvalidAsset [Name(StringChange("InvalidAsset", "CannotCheckOutTeleport"))] [+] ErrorDesc { index: 20, name: "InvalidAssetNotConcrete" } [+] ErrorDesc { index: 21, name: "InvalidAssetUnknownReserve" } [+] ErrorDesc { index: 22, name: "InvalidAssetUnsupportedReserve" } [+] ErrorDesc { index: 23, name: "TooManyReserves" } [+] ErrorDesc { index: 24, name: "LocalExecutionIncomplete" } [+] id: 86 - new pallet: MessageQueue [-] pallet 9: Configuration [-] pallet 85: DmpQueue SUMMARY: - Compatible.......................: false - Require transaction_version bump.: true !!! THE SUBWASM REDUCED DIFFER IS EXPERIMENTAL, DOUBLE CHECK THE RESULTS !!! ``` </details> <details> <summary>Spiritnet Diff</summary> ``` !!! THE SUBWASM REDUCED DIFFER IS EXPERIMENTAL, DOUBLE CHECK THE RESULTS !!! [≠] pallet 0: System -> 8 change(s) - calls changes: [+] CallDesc { index: 9, name: "authorize_upgrade", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }] } } [+] CallDesc { index: 10, name: "authorize_upgrade_without_checks", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }] } } [+] CallDesc { index: 11, name: "apply_authorized_upgrade", signature: SignatureDesc { args: [ArgDesc { name: "code", ty: "Vec<u8>" }] } } - events changes: [+] EventDesc { index: 6, name: "UpgradeAuthorized", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }, ArgDesc { name: "check_version", ty: "bool" }] } } - errors changes: [+] ErrorDesc { index: 6, name: "NothingAuthorized" } [+] ErrorDesc { index: 7, name: "Unauthorized" } - constants changes: [≠] Version: [ 56, 107, 105, 108, 116, 45, 115, 112, 105, 114, 105, 116, 110, 101, 116, 56, 107, 105, 108, 116, 45, 115, 112, 105, 114, 105, 116, 110, 101, 116, 1, 0, ... ] [Value([Changed(42, U8Change(60, 68)), Changed(163, U8Change(234, 215)), Changed(164, U8Change(147, 189)), Changed(165, U8Change(227, 216)), Changed(166, U8Change(241, 162)), Changed(167, U8Change(111, 114)), Changed(168, U8Change(61, 202)), Changed(169, U8Change(105, 13)), Changed(170, U8Change(98, 101)), Changed(171, U8Change(2, 1)), Changed(175, U8Change(38, 234)), Changed(176, U8Change(96, 147)), Changed(177, U8Change(149, 227)), Changed(178, U8Change(85, 241)), Changed(179, U8Change(192, 111)), Changed(180, U8Change(101, 61)), Changed(181, U8Change(102, 105)), Changed(182, U8Change(3, 98)), Changed(187, U8Change(164, 38)), Changed(188, U8Change(123, 96)), Changed(189, U8Change(125, 149)), Changed(190, U8Change(84, 85)), Changed(191, U8Change(73, 192)), Changed(192, U8Change(148, 101)), Changed(193, U8Change(201, 102)), Changed(194, U8Change(155, 3)), Changed(195, U8Change(1, 2)), Changed(199, U8Change(69, 164)), Changed(200, U8Change(191, 123)), Changed(201, U8Change(186, 125)), Changed(202, U8Change(81, 84)), Changed(203, U8Change(163, 73)), Changed(204, U8Change(16, 148)), Changed(205, U8Change(178, 201)), Changed(206, U8Change(35, 155)), Changed(211, U8Change(195, 69)), Changed(212, U8Change(179, 191)), Changed(213, U8Change(232, 186)), Changed(214, U8Change(211, 81)), Changed(215, U8Change(50, 163)), Changed(216, U8Change(115, 16)), Changed(217, U8Change(153, 178)), Changed(218, U8Change(13, 35)), Changed(223, U8Change(8, 195)), Changed(224, U8Change(0, 179)), Changed(225, U8Change(0, 232)), Changed(226, U8Change(0, 211)), Changed(227, U8Change(0, 50)), Added(228, 115), Added(229, 153), Added(230, 13), Added(231, 1), Added(232, 0), Added(233, 0), Added(234, 0), Added(235, 251), Added(236, 197), Added(237, 119), Added(238, 185), Added(239, 215), Added(240, 71), Added(241, 239), Added(242, 214), Added(243, 1), Added(244, 0), Added(245, 0), Added(246, 0), Added(247, 8), Added(248, 0), Added(249, 0), Added(250, 0), Added(251, 0)])] - storages changes: [+] StorageDesc { name: "AuthorizedUpgrade", modifier: "Optional", default_value: [0] } [≠] pallet 6: Balances -> 7 change(s) - calls changes: [+] CallDesc { index: 9, name: "force_adjust_total_issuance", signature: SignatureDesc { args: [ArgDesc { name: "direction", ty: "AdjustmentDirection" }, ArgDesc { name: "delta", ty: "T::Balance" }] } } [-] "set_balance_deprecated" [-] "transfer" - events changes: [+] EventDesc { index: 21, name: "TotalIssuanceForced", signature: SignatureDesc { args: [ArgDesc { name: "old", ty: "T::Balance" }, ArgDesc { name: "new", ty: "T::Balance" }] } } - errors changes: [+] ErrorDesc { index: 10, name: "IssuanceDeactivated" } [+] ErrorDesc { index: 11, name: "DeltaZero" } - constants changes: [-] "MaxHolds" [≠] pallet 24: AuraExt -> 1 change(s) - storages changes: [+] StorageDesc { name: "SlotInfo", modifier: "Optional", default_value: [0] } [≠] pallet 30: Democracy -> 9 change(s) - calls changes: [≠] 7: fast_track ( proposal_hash: H256, voting_period: BlockNumberFor<T>, delay: BlockNumberFor<T>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })] [≠] 8: veto_external ( proposal_hash: H256, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })] [≠] 16: blacklist ( proposal_hash: H256, maybe_ref_index: Option<ReferendumIndex>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })] [≠] 18: set_metadata ( owner: MetadataOwner, maybe_hash: Option<PreimageHash>, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("Option<PreimageHash>", "Option<T::Hash>"))])] })] - events changes: [≠] 9: Vetoed ( who: T::AccountId, proposal_hash: H256, until: BlockNumberFor<T>, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("H256", "T::Hash"))])] })] [≠] 10: Blacklisted ( proposal_hash: H256, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })] [≠] 14: MetadataSet ( owner: MetadataOwner, hash: PreimageHash, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("PreimageHash", "T::Hash"))])] })] [≠] 15: MetadataCleared ( owner: MetadataOwner, hash: PreimageHash, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("PreimageHash", "T::Hash"))])] })] [≠] 16: MetadataTransferred ( prev_owner: MetadataOwner, owner: MetadataOwner, hash: PreimageHash, ) ) [Signature(SignatureChange { args: [Changed(2, [Ty(StringChange("PreimageHash", "T::Hash"))])] })] [≠] pallet 31: Council -> 1 change(s) - errors changes: [+] ErrorDesc { index: 10, name: "PrimeAccountNotMember" } [≠] pallet 32: TechnicalCommittee -> 1 change(s) - errors changes: [+] ErrorDesc { index: 10, name: "PrimeAccountNotMember" } [≠] pallet 35: Treasury -> 20 change(s) - calls changes: [≠] 3: spend ( amount: BalanceOf<T, I>, beneficiary: AccountIdLookupOf<T>, ) ) [Name(StringChange("spend", "spend_local"))] [+] CallDesc { index: 5, name: "spend", signature: SignatureDesc { args: [ArgDesc { name: "asset_kind", ty: "Box<T::AssetKind>" }, ArgDesc { name: "amount", ty: "AssetBalanceOf<T, I>" }, ArgDesc { name: "beneficiary", ty: "Box<BeneficiaryLookupOf<T, I>>" }, ArgDesc { name: "valid_from", ty: "Option<BlockNumberFor<T>>" }] } } [+] CallDesc { index: 6, name: "payout", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } } [+] CallDesc { index: 7, name: "check_status", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } } [+] CallDesc { index: 8, name: "void_spend", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } } - events changes: [+] EventDesc { index: 9, name: "AssetSpendApproved", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "asset_kind", ty: "T::AssetKind" }, ArgDesc { name: "amount", ty: "AssetBalanceOf<T, I>" }, ArgDesc { name: "beneficiary", ty: "T::Beneficiary" }, ArgDesc { name: "valid_from", ty: "BlockNumberFor<T>" }, ArgDesc { name: "expire_at", ty: "BlockNumberFor<T>" }] } } [+] EventDesc { index: 10, name: "AssetSpendVoided", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } } [+] EventDesc { index: 11, name: "Paid", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "payment_id", ty: "<T::Paymaster as Pay>::Id" }] } } [+] EventDesc { index: 12, name: "PaymentFailed", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "payment_id", ty: "<T::Paymaster as Pay>::Id" }] } } [+] EventDesc { index: 13, name: "SpendProcessed", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } } - errors changes: [+] ErrorDesc { index: 5, name: "FailedToConvertBalance" } [+] ErrorDesc { index: 6, name: "SpendExpired" } [+] ErrorDesc { index: 7, name: "EarlyPayout" } [+] ErrorDesc { index: 8, name: "AlreadyAttempted" } [+] ErrorDesc { index: 9, name: "PayoutError" } [+] ErrorDesc { index: 10, name: "NotAttempted" } [+] ErrorDesc { index: 11, name: "Inconclusive" } - constants changes: [+] ConstantDesc { name: "PayoutPeriod", value: [192, 75, 3, 0, 0, 0, 0, 0] } - storages changes: [+] StorageDesc { name: "SpendCount", modifier: "Default", default_value: [0, 0, 0, 0] } [+] StorageDesc { name: "Spends", modifier: "Optional", default_value: [0] } [≠] pallet 41: Vesting -> 1 change(s) - calls changes: [+] CallDesc { index: 5, name: "force_remove_vesting_schedule", signature: SignatureDesc { args: [ArgDesc { name: "target", ty: "<T::Lookup as StaticLookup>::Source" }, ArgDesc { name: "schedule_index", ty: "u32" }] } } [≠] pallet 44: Preimage -> 4 change(s) - calls changes: [+] CallDesc { index: 4, name: "ensure_updated", signature: SignatureDesc { args: [ArgDesc { name: "hashes", ty: "Vec<T::Hash>" }] } } - errors changes: [+] ErrorDesc { index: 6, name: "TooMany" } [+] ErrorDesc { index: 7, name: "TooFew" } - storages changes: [+] StorageDesc { name: "RequestStatusFor", modifier: "Optional", default_value: [0] } [≠] pallet 46: Tips -> 5 change(s) - errors changes: [≠] 3: NotFinder [Name(StringChange("NotFinder", "MaxTipAmountExceeded"))] [≠] 4: StillOpen [Name(StringChange("StillOpen", "NotFinder"))] [≠] 5: Premature [Name(StringChange("Premature", "StillOpen"))] [+] ErrorDesc { index: 6, name: "Premature" } - constants changes: [+] ConstantDesc { name: "MaxTipAmount", value: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } [≠] pallet 80: ParachainSystem -> 9 change(s) - events changes: [≠] 3: UpgradeAuthorized ( code_hash: T::Hash, ) ) [Name(StringChange("UpgradeAuthorized", "DownwardMessagesReceived")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("code_hash", "count")), Ty(StringChange("T::Hash", "u32"))])] })] [≠] 4: DownwardMessagesReceived ( count: u32, ) ) [Name(StringChange("DownwardMessagesReceived", "DownwardMessagesProcessed")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("count", "weight_used")), Ty(StringChange("u32", "Weight"))]), Added(1, ArgDesc { name: "dmq_head", ty: "relay_chain::Hash" })] })] [≠] 5: DownwardMessagesProcessed ( weight_used: Weight, dmq_head: relay_chain::Hash, ) ) [Name(StringChange("DownwardMessagesProcessed", "UpwardMessageSent")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("weight_used", "message_hash")), Ty(StringChange("Weight", "Option<XcmHash>"))]), Removed(1, ArgDesc { name: "dmq_head", ty: "relay_chain::Hash" })] })] [-] "UpwardMessageSent" - storages changes: [+] StorageDesc { name: "AggregatedUnincludedSegment", modifier: "Optional", default_value: [0] } [+] StorageDesc { name: "UnincludedSegment", modifier: "Default", default_value: [0] } [+] StorageDesc { name: "UpgradeGoAhead", modifier: "Default", default_value: [0] } [+] StorageDesc { name: "UpwardDeliveryFeeFactor", modifier: "Default", default_value: [0, 0, 100, 167, 179, 182, 224, 13, 0, 0, 0, 0, 0, 0, 0, 0] } [-] "AuthorizedUpgrade" [≠] pallet 82: XcmpQueue -> 25 change(s) - calls changes: [-] "service_overweight" [-] "update_threshold_weight" [-] "update_weight_restrict_decay" [-] "update_xcmp_max_individual_weight" - events changes: [≠] 0: Success ( message_hash: XcmHash, message_id: XcmHash, weight: Weight, ) ) [Name(StringChange("Success", "XcmpMessageSent")), Signature(SignatureChange { args: [Removed(1, ArgDesc { name: "message_id", ty: "XcmHash" }), Removed(2, ArgDesc { name: "weight", ty: "Weight" })] })] [-] "Fail" [-] "BadVersion" [-] "BadFormat" [-] "XcmpMessageSent" [-] "OverweightEnqueued" [-] "OverweightServiced" - errors changes: [≠] 0: FailedToSend [Name(StringChange("FailedToSend", "BadQueueConfig"))] [≠] 1: BadXcmOrigin [Name(StringChange("BadXcmOrigin", "AlreadySuspended"))] [≠] 2: BadXcm [Name(StringChange("BadXcm", "AlreadyResumed"))] [-] "BadOverweightIndex" [-] "WeightOverLimit" - constants changes: [+] ConstantDesc { name: "MaxInboundSuspended", value: [0, 0, 0, 0] } - storages changes: [+] StorageDesc { name: "DeliveryFeeFactor", modifier: "Default", default_value: [0, 0, 100, 167, 179, 182, 224, 13, 0, 0, 0, 0, 0, 0, 0, 0] } [+] StorageDesc { name: "InboundXcmpSuspended", modifier: "Default", default_value: [0] } [≠] Default QueueConfig: [2, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 130, 26, 6, 0, 0, 8, 0, 7, 0, 200, 23, 168, 4, 2, 0, 4, 0] [DefaultValue([Changed(0, U8Change(2, 32)), Changed(4, U8Change(5, 48)), Changed(8, U8Change(1, 8)), Removed(12, 130), Removed(13, 26), Removed(14, 6), Removed(15, 0), Removed(16, 0), Removed(17, 8), Removed(18, 0), Removed(19, 7), Removed(20, 0), Removed(21, 200), Removed(22, 23), Removed(23, 168), Removed(24, 4), Removed(25, 2), Removed(26, 0), Removed(27, 4), Removed(28, 0)])] [-] "CounterForOverweight" [-] "InboundXcmpMessages" [-] "InboundXcmpStatus" [-] "Overweight" [-] "OverweightCount" [≠] pallet 83: PolkadotXcm -> 35 change(s) - calls changes: [≠] 0: send ( dest: Box<VersionedMultiLocation>, message: Box<VersionedXcm<()>>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })] [≠] 1: teleport_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })] [≠] 2: reserve_transfer_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })] [≠] 3: execute ( message: Box<VersionedXcm<<T as SysConfig>::RuntimeCall>>, max_weight: Weight, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedXcm<<T as SysConfig>::RuntimeCall>>", "Box<VersionedXcm<<T as Config>::RuntimeCall>>"))])] })] [≠] 4: force_xcm_version ( location: Box<MultiLocation>, version: XcmVersion, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<MultiLocation>", "Box<Location>"))])] })] [≠] 6: force_subscribe_version_notify ( location: Box<VersionedMultiLocation>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })] [≠] 7: force_unsubscribe_version_notify ( location: Box<VersionedMultiLocation>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })] [≠] 8: limited_reserve_transfer_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, weight_limit: WeightLimit, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })] [≠] 9: limited_teleport_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, weight_limit: WeightLimit, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })] [+] CallDesc { index: 11, name: "transfer_assets", signature: SignatureDesc { args: [ArgDesc { name: "dest", ty: "Box<VersionedLocation>" }, ArgDesc { name: "beneficiary", ty: "Box<VersionedLocation>" }, ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "fee_asset_item", ty: "u32" }, ArgDesc { name: "weight_limit", ty: "WeightLimit" }] } } [+] CallDesc { index: 12, name: "claim_assets", signature: SignatureDesc { args: [ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "beneficiary", ty: "Box<VersionedLocation>" }] } } [+] CallDesc { index: 13, name: "transfer_assets_using_type_and_then", signature: SignatureDesc { args: [ArgDesc { name: "dest", ty: "Box<VersionedLocation>" }, ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "assets_transfer_type", ty: "Box<TransferType>" }, ArgDesc { name: "remote_fees_id", ty: "Box<VersionedAssetId>" }, ArgDesc { name: "fees_transfer_type", ty: "Box<TransferType>" }, ArgDesc { name: "custom_xcm_on_dest", ty: "Box<VersionedXcm<()>>" }, ArgDesc { name: "weight_limit", ty: "WeightLimit" }] } } - events changes: [≠] 1: Sent ( origin: MultiLocation, destination: MultiLocation, message: Xcm<()>, message_id: XcmHash, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 2: UnexpectedResponse ( origin: MultiLocation, query_id: QueryId, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 8: InvalidResponder ( origin: MultiLocation, query_id: QueryId, expected_location: Option<MultiLocation>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("Option<MultiLocation>", "Option<Location>"))])] })] [≠] 9: InvalidResponderVersion ( origin: MultiLocation, query_id: QueryId, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 11: AssetsTrapped ( hash: H256, origin: MultiLocation, assets: VersionedMultiAssets, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("VersionedMultiAssets", "VersionedAssets"))])] })] [≠] 12: VersionChangeNotified ( destination: MultiLocation, result: XcmVersion, cost: MultiAssets, message_id: XcmHash, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("MultiAssets", "Assets"))])] })] [≠] 13: SupportedVersionChanged ( location: MultiLocation, version: XcmVersion, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 14: NotifyTargetSendFail ( location: MultiLocation, query_id: QueryId, error: XcmError, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 15: NotifyTargetMigrationFail ( location: VersionedMultiLocation, query_id: QueryId, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("VersionedMultiLocation", "VersionedLocation"))])] })] [≠] 16: InvalidQuerierVersion ( origin: MultiLocation, query_id: QueryId, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 17: InvalidQuerier ( origin: MultiLocation, query_id: QueryId, expected_querier: MultiLocation, maybe_actual_querier: Option<MultiLocation>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("MultiLocation", "Location"))]), Changed(3, [Ty(StringChange("Option<MultiLocation>", "Option<Location>"))])] })] [≠] 18: VersionNotifyStarted ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })] [≠] 19: VersionNotifyRequested ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })] [≠] 20: VersionNotifyUnrequested ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })] [≠] 21: FeesPaid ( paying: MultiLocation, fees: MultiAssets, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })] [≠] 22: AssetsClaimed ( hash: H256, origin: MultiLocation, assets: VersionedMultiAssets, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("VersionedMultiAssets", "VersionedAssets"))])] })] [+] EventDesc { index: 23, name: "VersionMigrationFinished", signature: SignatureDesc { args: [ArgDesc { name: "version", ty: "XcmVersion" }] } } - errors changes: [≠] 13: InvalidAsset [Name(StringChange("InvalidAsset", "CannotCheckOutTeleport"))] [+] ErrorDesc { index: 20, name: "InvalidAssetNotConcrete" } [+] ErrorDesc { index: 21, name: "InvalidAssetUnknownReserve" } [+] ErrorDesc { index: 22, name: "InvalidAssetUnsupportedReserve" } [+] ErrorDesc { index: 23, name: "TooManyReserves" } [+] ErrorDesc { index: 24, name: "LocalExecutionIncomplete" } [+] id: 86 - new pallet: MessageQueue [-] pallet 85: DmpQueue SUMMARY: - Compatible.......................: false - Require transaction_version bump.: true !!! THE SUBWASM REDUCED DIFFER IS EXPERIMENTAL, DOUBLE CHECK THE RESULTS !!! ``` </details> ## Checklist: - [ ] I have verified that the code works - [ ] No panics! (checked arithmetic ops, no indexing `array[3]` use `get(3)`, ...) - [ ] I have verified that the code is easy to understand - [ ] If not, I have left a well-balanced amount of inline comments - [ ] I have [left the code in a better state](https://deviq.com/principles/boy-scout-rule) - [ ] I have documented the changes (where applicable) * Either PR or Ticket to update [the Docs](https://github.com/KILTprotocol/docs) * Link the PR/Ticket here
## fixes [KILTprotocol/ticket#3439](KILTprotocol/ticket#3439) ### notable Changes - rust version 1.7.4 (Toolchain and gitlab runner are updated) - the preimage_pallet is no longer using deposits, instead it uses [consideration](paritytech/polkadot-sdk#1361), which is an abstration over the balance. The exact footprint of an storage entry is used to calculate the cost storing entries. Might be interesting for our current deposit model. - The pallet-xcm introduced a new benchmarking logic ### Pallets - Removed cumulus_pallet_dmp_queue (Replaced by pallet_message_queue). There is a lazy migration provided, which is running automatically. Once the the [Complete event](paritytech/polkadot-sdk#1246) is emitted, we can delete the pallet. - Treasur introduced a new [spending support](paritytech/polkadot-sdk#1333), which is currently disabled. Might be interesting at some point, if other currencies are available. - `transfer` extrinsic in `pallet_balances` is removed. Will be a breaking change for Sporran. For other new introduced extrinsics, please have a lookin the diffs below. - Tips: A max tip amount has to be specified, which is currently set to 1_000_000 KILT ### Emulated Tests I am quite unhappy with the current state of the emulated tests. I would like to refactor those tests as described in this [issue](KILTprotocol/ticket#3241 (comment)). For this PR, I only fixed problems arised by updating the dependencies. Since the polkadot-runtime is no longer part of the Polkadot-SDK, the relay chain for Spiritnet has been changed to Rococo. The purpose of these tests is to ensure that the expectations of the xcm-configuration match the implementation. The specific relay chain used should not matter. ### XCM - XCM version 4 is out which is also the LTS for XCM. - In version 4 a new instruction `Transfer` is introduced, which needed to be denied by the Barrier - renaming of paramters: The `Multi` is removed: MultiLocation -> Location, MultiAsset -> Asset, ... ### Try-runtime In version 1.7.0 additional try-runtime tests are introduced, where it is tried to decode the whole storage of the chain. This error should only occur for chains which are still running on an ancient SDK version and will be fixed automatically in the next runtime upgrade. ### Weights Since a lot of new extrinsics are introduced, I updated all weights. ### Todos - [x] execute Benchmarking ## Metadata Diff to Develop Branch <details> <summary>Peregrine Diff</summary> ``` !!! THE SUBWASM REDUCED DIFFER IS EXPERIMENTAL, DOUBLE CHECK THE RESULTS !!! [≠] pallet 0: System -> 8 change(s) - calls changes: [+] CallDesc { index: 9, name: "authorize_upgrade", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }] } } [+] CallDesc { index: 10, name: "authorize_upgrade_without_checks", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }] } } [+] CallDesc { index: 11, name: "apply_authorized_upgrade", signature: SignatureDesc { args: [ArgDesc { name: "code", ty: "Vec<u8>" }] } } - events changes: [+] EventDesc { index: 6, name: "UpgradeAuthorized", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }, ArgDesc { name: "check_version", ty: "bool" }] } } - errors changes: [+] ErrorDesc { index: 6, name: "NothingAuthorized" } [+] ErrorDesc { index: 7, name: "Unauthorized" } - constants changes: [≠] Version: [ 48, 109, 97, 115, 104, 110, 101, 116, 45, 110, 111, 100, 101, 48, 109, 97, 115, 104, 110, 101, 116, 45, 110, 111, 100, 101, 4, 0, 0, 0, 136, 44, ... ] [Value([Changed(38, U8Change(60, 68)), Changed(159, U8Change(234, 215)), Changed(160, U8Change(147, 189)), Changed(161, U8Change(227, 216)), Changed(162, U8Change(241, 162)), Changed(163, U8Change(111, 114)), Changed(164, U8Change(61, 202)), Changed(165, U8Change(105, 13)), Changed(166, U8Change(98, 101)), Changed(167, U8Change(2, 1)), Changed(171, U8Change(38, 234)), Changed(172, U8Change(96, 147)), Changed(173, U8Change(149, 227)), Changed(174, U8Change(85, 241)), Changed(175, U8Change(192, 111)), Changed(176, U8Change(101, 61)), Changed(177, U8Change(102, 105)), Changed(178, U8Change(3, 98)), Changed(183, U8Change(164, 38)), Changed(184, U8Change(123, 96)), Changed(185, U8Change(125, 149)), Changed(186, U8Change(84, 85)), Changed(187, U8Change(73, 192)), Changed(188, U8Change(148, 101)), Changed(189, U8Change(201, 102)), Changed(190, U8Change(155, 3)), Changed(191, U8Change(1, 2)), Changed(195, U8Change(69, 164)), Changed(196, U8Change(191, 123)), Changed(197, U8Change(186, 125)), Changed(198, U8Change(81, 84)), Changed(199, U8Change(163, 73)), Changed(200, U8Change(16, 148)), Changed(201, U8Change(178, 201)), Changed(202, U8Change(35, 155)), Changed(207, U8Change(195, 69)), Changed(208, U8Change(179, 191)), Changed(209, U8Change(232, 186)), Changed(210, U8Change(211, 81)), Changed(211, U8Change(50, 163)), Changed(212, U8Change(115, 16)), Changed(213, U8Change(153, 178)), Changed(214, U8Change(13, 35)), Changed(219, U8Change(8, 195)), Changed(220, U8Change(0, 179)), Changed(221, U8Change(0, 232)), Changed(222, U8Change(0, 211)), Changed(223, U8Change(0, 50)), Added(224, 115), Added(225, 153), Added(226, 13), Added(227, 1), Added(228, 0), Added(229, 0), Added(230, 0), Added(231, 251), Added(232, 197), Added(233, 119), Added(234, 185), Added(235, 215), Added(236, 71), Added(237, 239), Added(238, 214), Added(239, 1), Added(240, 0), Added(241, 0), Added(242, 0), Added(243, 8), Added(244, 0), Added(245, 0), Added(246, 0), Added(247, 0)])] - storages changes: [+] StorageDesc { name: "AuthorizedUpgrade", modifier: "Optional", default_value: [0] } [≠] pallet 6: Balances -> 7 change(s) - calls changes: [+] CallDesc { index: 9, name: "force_adjust_total_issuance", signature: SignatureDesc { args: [ArgDesc { name: "direction", ty: "AdjustmentDirection" }, ArgDesc { name: "delta", ty: "T::Balance" }] } } [-] "set_balance_deprecated" [-] "transfer" - events changes: [+] EventDesc { index: 21, name: "TotalIssuanceForced", signature: SignatureDesc { args: [ArgDesc { name: "old", ty: "T::Balance" }, ArgDesc { name: "new", ty: "T::Balance" }] } } - errors changes: [+] ErrorDesc { index: 10, name: "IssuanceDeactivated" } [+] ErrorDesc { index: 11, name: "DeltaZero" } - constants changes: [-] "MaxHolds" [≠] pallet 8: Sudo -> 4 change(s) - calls changes: [+] CallDesc { index: 4, name: "remove_key", signature: SignatureDesc { args: [] } } - events changes: [≠] 1: KeyChanged ( old_sudoer: Option<T::AccountId>, ) ) [Signature(SignatureChange { args: [Changed(0, [Name(StringChange("old_sudoer", "old"))]), Added(1, ArgDesc { name: "new", ty: "T::AccountId" })] })] [≠] 2: SudoAsDone ( sudo_result: DispatchResult, ) ) [Name(StringChange("SudoAsDone", "KeyRemoved")), Signature(SignatureChange { args: [Removed(0, ArgDesc { name: "sudo_result", ty: "DispatchResult" })] })] [+] EventDesc { index: 3, name: "SudoAsDone", signature: SignatureDesc { args: [ArgDesc { name: "sudo_result", ty: "DispatchResult" }] } } [≠] pallet 24: AuraExt -> 1 change(s) - storages changes: [+] StorageDesc { name: "SlotInfo", modifier: "Optional", default_value: [0] } [≠] pallet 30: Democracy -> 9 change(s) - calls changes: [≠] 7: fast_track ( proposal_hash: H256, voting_period: BlockNumberFor<T>, delay: BlockNumberFor<T>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })] [≠] 8: veto_external ( proposal_hash: H256, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })] [≠] 16: blacklist ( proposal_hash: H256, maybe_ref_index: Option<ReferendumIndex>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })] [≠] 18: set_metadata ( owner: MetadataOwner, maybe_hash: Option<PreimageHash>, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("Option<PreimageHash>", "Option<T::Hash>"))])] })] - events changes: [≠] 9: Vetoed ( who: T::AccountId, proposal_hash: H256, until: BlockNumberFor<T>, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("H256", "T::Hash"))])] })] [≠] 10: Blacklisted ( proposal_hash: H256, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })] [≠] 14: MetadataSet ( owner: MetadataOwner, hash: PreimageHash, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("PreimageHash", "T::Hash"))])] })] [≠] 15: MetadataCleared ( owner: MetadataOwner, hash: PreimageHash, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("PreimageHash", "T::Hash"))])] })] [≠] 16: MetadataTransferred ( prev_owner: MetadataOwner, owner: MetadataOwner, hash: PreimageHash, ) ) [Signature(SignatureChange { args: [Changed(2, [Ty(StringChange("PreimageHash", "T::Hash"))])] })] [≠] pallet 31: Council -> 1 change(s) - errors changes: [+] ErrorDesc { index: 10, name: "PrimeAccountNotMember" } [≠] pallet 32: TechnicalCommittee -> 1 change(s) - errors changes: [+] ErrorDesc { index: 10, name: "PrimeAccountNotMember" } [≠] pallet 35: Treasury -> 20 change(s) - calls changes: [≠] 3: spend ( amount: BalanceOf<T, I>, beneficiary: AccountIdLookupOf<T>, ) ) [Name(StringChange("spend", "spend_local"))] [+] CallDesc { index: 5, name: "spend", signature: SignatureDesc { args: [ArgDesc { name: "asset_kind", ty: "Box<T::AssetKind>" }, ArgDesc { name: "amount", ty: "AssetBalanceOf<T, I>" }, ArgDesc { name: "beneficiary", ty: "Box<BeneficiaryLookupOf<T, I>>" }, ArgDesc { name: "valid_from", ty: "Option<BlockNumberFor<T>>" }] } } [+] CallDesc { index: 6, name: "payout", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } } [+] CallDesc { index: 7, name: "check_status", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } } [+] CallDesc { index: 8, name: "void_spend", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } } - events changes: [+] EventDesc { index: 9, name: "AssetSpendApproved", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "asset_kind", ty: "T::AssetKind" }, ArgDesc { name: "amount", ty: "AssetBalanceOf<T, I>" }, ArgDesc { name: "beneficiary", ty: "T::Beneficiary" }, ArgDesc { name: "valid_from", ty: "BlockNumberFor<T>" }, ArgDesc { name: "expire_at", ty: "BlockNumberFor<T>" }] } } [+] EventDesc { index: 10, name: "AssetSpendVoided", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } } [+] EventDesc { index: 11, name: "Paid", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "payment_id", ty: "<T::Paymaster as Pay>::Id" }] } } [+] EventDesc { index: 12, name: "PaymentFailed", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "payment_id", ty: "<T::Paymaster as Pay>::Id" }] } } [+] EventDesc { index: 13, name: "SpendProcessed", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } } - errors changes: [+] ErrorDesc { index: 5, name: "FailedToConvertBalance" } [+] ErrorDesc { index: 6, name: "SpendExpired" } [+] ErrorDesc { index: 7, name: "EarlyPayout" } [+] ErrorDesc { index: 8, name: "AlreadyAttempted" } [+] ErrorDesc { index: 9, name: "PayoutError" } [+] ErrorDesc { index: 10, name: "NotAttempted" } [+] ErrorDesc { index: 11, name: "Inconclusive" } - constants changes: [+] ConstantDesc { name: "PayoutPeriod", value: [192, 75, 3, 0, 0, 0, 0, 0] } - storages changes: [+] StorageDesc { name: "SpendCount", modifier: "Default", default_value: [0, 0, 0, 0] } [+] StorageDesc { name: "Spends", modifier: "Optional", default_value: [0] } [≠] pallet 41: Vesting -> 1 change(s) - calls changes: [+] CallDesc { index: 5, name: "force_remove_vesting_schedule", signature: SignatureDesc { args: [ArgDesc { name: "target", ty: "<T::Lookup as StaticLookup>::Source" }, ArgDesc { name: "schedule_index", ty: "u32" }] } } [≠] pallet 44: Preimage -> 4 change(s) - calls changes: [+] CallDesc { index: 4, name: "ensure_updated", signature: SignatureDesc { args: [ArgDesc { name: "hashes", ty: "Vec<T::Hash>" }] } } - errors changes: [+] ErrorDesc { index: 6, name: "TooMany" } [+] ErrorDesc { index: 7, name: "TooFew" } - storages changes: [+] StorageDesc { name: "RequestStatusFor", modifier: "Optional", default_value: [0] } [≠] pallet 46: Tips -> 5 change(s) - errors changes: [≠] 3: NotFinder [Name(StringChange("NotFinder", "MaxTipAmountExceeded"))] [≠] 4: StillOpen [Name(StringChange("StillOpen", "NotFinder"))] [≠] 5: Premature [Name(StringChange("Premature", "StillOpen"))] [+] ErrorDesc { index: 6, name: "Premature" } - constants changes: [+] ConstantDesc { name: "MaxTipAmount", value: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } [≠] pallet 80: ParachainSystem -> 9 change(s) - events changes: [≠] 3: UpgradeAuthorized ( code_hash: T::Hash, ) ) [Name(StringChange("UpgradeAuthorized", "DownwardMessagesReceived")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("code_hash", "count")), Ty(StringChange("T::Hash", "u32"))])] })] [≠] 4: DownwardMessagesReceived ( count: u32, ) ) [Name(StringChange("DownwardMessagesReceived", "DownwardMessagesProcessed")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("count", "weight_used")), Ty(StringChange("u32", "Weight"))]), Added(1, ArgDesc { name: "dmq_head", ty: "relay_chain::Hash" })] })] [≠] 5: DownwardMessagesProcessed ( weight_used: Weight, dmq_head: relay_chain::Hash, ) ) [Name(StringChange("DownwardMessagesProcessed", "UpwardMessageSent")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("weight_used", "message_hash")), Ty(StringChange("Weight", "Option<XcmHash>"))]), Removed(1, ArgDesc { name: "dmq_head", ty: "relay_chain::Hash" })] })] [-] "UpwardMessageSent" - storages changes: [+] StorageDesc { name: "AggregatedUnincludedSegment", modifier: "Optional", default_value: [0] } [+] StorageDesc { name: "UnincludedSegment", modifier: "Default", default_value: [0] } [+] StorageDesc { name: "UpgradeGoAhead", modifier: "Default", default_value: [0] } [+] StorageDesc { name: "UpwardDeliveryFeeFactor", modifier: "Default", default_value: [0, 0, 100, 167, 179, 182, 224, 13, 0, 0, 0, 0, 0, 0, 0, 0] } [-] "AuthorizedUpgrade" [≠] pallet 82: XcmpQueue -> 25 change(s) - calls changes: [-] "service_overweight" [-] "update_threshold_weight" [-] "update_weight_restrict_decay" [-] "update_xcmp_max_individual_weight" - events changes: [≠] 0: Success ( message_hash: XcmHash, message_id: XcmHash, weight: Weight, ) ) [Name(StringChange("Success", "XcmpMessageSent")), Signature(SignatureChange { args: [Removed(1, ArgDesc { name: "message_id", ty: "XcmHash" }), Removed(2, ArgDesc { name: "weight", ty: "Weight" })] })] [-] "Fail" [-] "BadVersion" [-] "BadFormat" [-] "XcmpMessageSent" [-] "OverweightEnqueued" [-] "OverweightServiced" - errors changes: [≠] 0: FailedToSend [Name(StringChange("FailedToSend", "BadQueueConfig"))] [≠] 1: BadXcmOrigin [Name(StringChange("BadXcmOrigin", "AlreadySuspended"))] [≠] 2: BadXcm [Name(StringChange("BadXcm", "AlreadyResumed"))] [-] "BadOverweightIndex" [-] "WeightOverLimit" - constants changes: [+] ConstantDesc { name: "MaxInboundSuspended", value: [0, 0, 0, 0] } - storages changes: [+] StorageDesc { name: "DeliveryFeeFactor", modifier: "Default", default_value: [0, 0, 100, 167, 179, 182, 224, 13, 0, 0, 0, 0, 0, 0, 0, 0] } [+] StorageDesc { name: "InboundXcmpSuspended", modifier: "Default", default_value: [0] } [≠] Default QueueConfig: [2, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 130, 26, 6, 0, 0, 8, 0, 7, 0, 200, 23, 168, 4, 2, 0, 4, 0] [DefaultValue([Changed(0, U8Change(2, 32)), Changed(4, U8Change(5, 48)), Changed(8, U8Change(1, 8)), Removed(12, 130), Removed(13, 26), Removed(14, 6), Removed(15, 0), Removed(16, 0), Removed(17, 8), Removed(18, 0), Removed(19, 7), Removed(20, 0), Removed(21, 200), Removed(22, 23), Removed(23, 168), Removed(24, 4), Removed(25, 2), Removed(26, 0), Removed(27, 4), Removed(28, 0)])] [-] "CounterForOverweight" [-] "InboundXcmpMessages" [-] "InboundXcmpStatus" [-] "Overweight" [-] "OverweightCount" [≠] pallet 83: PolkadotXcm -> 35 change(s) - calls changes: [≠] 0: send ( dest: Box<VersionedMultiLocation>, message: Box<VersionedXcm<()>>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })] [≠] 1: teleport_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })] [≠] 2: reserve_transfer_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })] [≠] 3: execute ( message: Box<VersionedXcm<<T as SysConfig>::RuntimeCall>>, max_weight: Weight, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedXcm<<T as SysConfig>::RuntimeCall>>", "Box<VersionedXcm<<T as Config>::RuntimeCall>>"))])] })] [≠] 4: force_xcm_version ( location: Box<MultiLocation>, version: XcmVersion, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<MultiLocation>", "Box<Location>"))])] })] [≠] 6: force_subscribe_version_notify ( location: Box<VersionedMultiLocation>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })] [≠] 7: force_unsubscribe_version_notify ( location: Box<VersionedMultiLocation>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })] [≠] 8: limited_reserve_transfer_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, weight_limit: WeightLimit, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })] [≠] 9: limited_teleport_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, weight_limit: WeightLimit, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })] [+] CallDesc { index: 11, name: "transfer_assets", signature: SignatureDesc { args: [ArgDesc { name: "dest", ty: "Box<VersionedLocation>" }, ArgDesc { name: "beneficiary", ty: "Box<VersionedLocation>" }, ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "fee_asset_item", ty: "u32" }, ArgDesc { name: "weight_limit", ty: "WeightLimit" }] } } [+] CallDesc { index: 12, name: "claim_assets", signature: SignatureDesc { args: [ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "beneficiary", ty: "Box<VersionedLocation>" }] } } [+] CallDesc { index: 13, name: "transfer_assets_using_type_and_then", signature: SignatureDesc { args: [ArgDesc { name: "dest", ty: "Box<VersionedLocation>" }, ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "assets_transfer_type", ty: "Box<TransferType>" }, ArgDesc { name: "remote_fees_id", ty: "Box<VersionedAssetId>" }, ArgDesc { name: "fees_transfer_type", ty: "Box<TransferType>" }, ArgDesc { name: "custom_xcm_on_dest", ty: "Box<VersionedXcm<()>>" }, ArgDesc { name: "weight_limit", ty: "WeightLimit" }] } } - events changes: [≠] 1: Sent ( origin: MultiLocation, destination: MultiLocation, message: Xcm<()>, message_id: XcmHash, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 2: UnexpectedResponse ( origin: MultiLocation, query_id: QueryId, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 8: InvalidResponder ( origin: MultiLocation, query_id: QueryId, expected_location: Option<MultiLocation>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("Option<MultiLocation>", "Option<Location>"))])] })] [≠] 9: InvalidResponderVersion ( origin: MultiLocation, query_id: QueryId, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 11: AssetsTrapped ( hash: H256, origin: MultiLocation, assets: VersionedMultiAssets, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("VersionedMultiAssets", "VersionedAssets"))])] })] [≠] 12: VersionChangeNotified ( destination: MultiLocation, result: XcmVersion, cost: MultiAssets, message_id: XcmHash, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("MultiAssets", "Assets"))])] })] [≠] 13: SupportedVersionChanged ( location: MultiLocation, version: XcmVersion, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 14: NotifyTargetSendFail ( location: MultiLocation, query_id: QueryId, error: XcmError, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 15: NotifyTargetMigrationFail ( location: VersionedMultiLocation, query_id: QueryId, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("VersionedMultiLocation", "VersionedLocation"))])] })] [≠] 16: InvalidQuerierVersion ( origin: MultiLocation, query_id: QueryId, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 17: InvalidQuerier ( origin: MultiLocation, query_id: QueryId, expected_querier: MultiLocation, maybe_actual_querier: Option<MultiLocation>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("MultiLocation", "Location"))]), Changed(3, [Ty(StringChange("Option<MultiLocation>", "Option<Location>"))])] })] [≠] 18: VersionNotifyStarted ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })] [≠] 19: VersionNotifyRequested ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })] [≠] 20: VersionNotifyUnrequested ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })] [≠] 21: FeesPaid ( paying: MultiLocation, fees: MultiAssets, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })] [≠] 22: AssetsClaimed ( hash: H256, origin: MultiLocation, assets: VersionedMultiAssets, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("VersionedMultiAssets", "VersionedAssets"))])] })] [+] EventDesc { index: 23, name: "VersionMigrationFinished", signature: SignatureDesc { args: [ArgDesc { name: "version", ty: "XcmVersion" }] } } - errors changes: [≠] 13: InvalidAsset [Name(StringChange("InvalidAsset", "CannotCheckOutTeleport"))] [+] ErrorDesc { index: 20, name: "InvalidAssetNotConcrete" } [+] ErrorDesc { index: 21, name: "InvalidAssetUnknownReserve" } [+] ErrorDesc { index: 22, name: "InvalidAssetUnsupportedReserve" } [+] ErrorDesc { index: 23, name: "TooManyReserves" } [+] ErrorDesc { index: 24, name: "LocalExecutionIncomplete" } [+] id: 86 - new pallet: MessageQueue [-] pallet 9: Configuration [-] pallet 85: DmpQueue SUMMARY: - Compatible.......................: false - Require transaction_version bump.: true !!! THE SUBWASM REDUCED DIFFER IS EXPERIMENTAL, DOUBLE CHECK THE RESULTS !!! ``` </details> <details> <summary>Spiritnet Diff</summary> ``` !!! THE SUBWASM REDUCED DIFFER IS EXPERIMENTAL, DOUBLE CHECK THE RESULTS !!! [≠] pallet 0: System -> 8 change(s) - calls changes: [+] CallDesc { index: 9, name: "authorize_upgrade", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }] } } [+] CallDesc { index: 10, name: "authorize_upgrade_without_checks", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }] } } [+] CallDesc { index: 11, name: "apply_authorized_upgrade", signature: SignatureDesc { args: [ArgDesc { name: "code", ty: "Vec<u8>" }] } } - events changes: [+] EventDesc { index: 6, name: "UpgradeAuthorized", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }, ArgDesc { name: "check_version", ty: "bool" }] } } - errors changes: [+] ErrorDesc { index: 6, name: "NothingAuthorized" } [+] ErrorDesc { index: 7, name: "Unauthorized" } - constants changes: [≠] Version: [ 56, 107, 105, 108, 116, 45, 115, 112, 105, 114, 105, 116, 110, 101, 116, 56, 107, 105, 108, 116, 45, 115, 112, 105, 114, 105, 116, 110, 101, 116, 1, 0, ... ] [Value([Changed(42, U8Change(60, 68)), Changed(163, U8Change(234, 215)), Changed(164, U8Change(147, 189)), Changed(165, U8Change(227, 216)), Changed(166, U8Change(241, 162)), Changed(167, U8Change(111, 114)), Changed(168, U8Change(61, 202)), Changed(169, U8Change(105, 13)), Changed(170, U8Change(98, 101)), Changed(171, U8Change(2, 1)), Changed(175, U8Change(38, 234)), Changed(176, U8Change(96, 147)), Changed(177, U8Change(149, 227)), Changed(178, U8Change(85, 241)), Changed(179, U8Change(192, 111)), Changed(180, U8Change(101, 61)), Changed(181, U8Change(102, 105)), Changed(182, U8Change(3, 98)), Changed(187, U8Change(164, 38)), Changed(188, U8Change(123, 96)), Changed(189, U8Change(125, 149)), Changed(190, U8Change(84, 85)), Changed(191, U8Change(73, 192)), Changed(192, U8Change(148, 101)), Changed(193, U8Change(201, 102)), Changed(194, U8Change(155, 3)), Changed(195, U8Change(1, 2)), Changed(199, U8Change(69, 164)), Changed(200, U8Change(191, 123)), Changed(201, U8Change(186, 125)), Changed(202, U8Change(81, 84)), Changed(203, U8Change(163, 73)), Changed(204, U8Change(16, 148)), Changed(205, U8Change(178, 201)), Changed(206, U8Change(35, 155)), Changed(211, U8Change(195, 69)), Changed(212, U8Change(179, 191)), Changed(213, U8Change(232, 186)), Changed(214, U8Change(211, 81)), Changed(215, U8Change(50, 163)), Changed(216, U8Change(115, 16)), Changed(217, U8Change(153, 178)), Changed(218, U8Change(13, 35)), Changed(223, U8Change(8, 195)), Changed(224, U8Change(0, 179)), Changed(225, U8Change(0, 232)), Changed(226, U8Change(0, 211)), Changed(227, U8Change(0, 50)), Added(228, 115), Added(229, 153), Added(230, 13), Added(231, 1), Added(232, 0), Added(233, 0), Added(234, 0), Added(235, 251), Added(236, 197), Added(237, 119), Added(238, 185), Added(239, 215), Added(240, 71), Added(241, 239), Added(242, 214), Added(243, 1), Added(244, 0), Added(245, 0), Added(246, 0), Added(247, 8), Added(248, 0), Added(249, 0), Added(250, 0), Added(251, 0)])] - storages changes: [+] StorageDesc { name: "AuthorizedUpgrade", modifier: "Optional", default_value: [0] } [≠] pallet 6: Balances -> 7 change(s) - calls changes: [+] CallDesc { index: 9, name: "force_adjust_total_issuance", signature: SignatureDesc { args: [ArgDesc { name: "direction", ty: "AdjustmentDirection" }, ArgDesc { name: "delta", ty: "T::Balance" }] } } [-] "set_balance_deprecated" [-] "transfer" - events changes: [+] EventDesc { index: 21, name: "TotalIssuanceForced", signature: SignatureDesc { args: [ArgDesc { name: "old", ty: "T::Balance" }, ArgDesc { name: "new", ty: "T::Balance" }] } } - errors changes: [+] ErrorDesc { index: 10, name: "IssuanceDeactivated" } [+] ErrorDesc { index: 11, name: "DeltaZero" } - constants changes: [-] "MaxHolds" [≠] pallet 24: AuraExt -> 1 change(s) - storages changes: [+] StorageDesc { name: "SlotInfo", modifier: "Optional", default_value: [0] } [≠] pallet 30: Democracy -> 9 change(s) - calls changes: [≠] 7: fast_track ( proposal_hash: H256, voting_period: BlockNumberFor<T>, delay: BlockNumberFor<T>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })] [≠] 8: veto_external ( proposal_hash: H256, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })] [≠] 16: blacklist ( proposal_hash: H256, maybe_ref_index: Option<ReferendumIndex>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })] [≠] 18: set_metadata ( owner: MetadataOwner, maybe_hash: Option<PreimageHash>, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("Option<PreimageHash>", "Option<T::Hash>"))])] })] - events changes: [≠] 9: Vetoed ( who: T::AccountId, proposal_hash: H256, until: BlockNumberFor<T>, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("H256", "T::Hash"))])] })] [≠] 10: Blacklisted ( proposal_hash: H256, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })] [≠] 14: MetadataSet ( owner: MetadataOwner, hash: PreimageHash, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("PreimageHash", "T::Hash"))])] })] [≠] 15: MetadataCleared ( owner: MetadataOwner, hash: PreimageHash, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("PreimageHash", "T::Hash"))])] })] [≠] 16: MetadataTransferred ( prev_owner: MetadataOwner, owner: MetadataOwner, hash: PreimageHash, ) ) [Signature(SignatureChange { args: [Changed(2, [Ty(StringChange("PreimageHash", "T::Hash"))])] })] [≠] pallet 31: Council -> 1 change(s) - errors changes: [+] ErrorDesc { index: 10, name: "PrimeAccountNotMember" } [≠] pallet 32: TechnicalCommittee -> 1 change(s) - errors changes: [+] ErrorDesc { index: 10, name: "PrimeAccountNotMember" } [≠] pallet 35: Treasury -> 20 change(s) - calls changes: [≠] 3: spend ( amount: BalanceOf<T, I>, beneficiary: AccountIdLookupOf<T>, ) ) [Name(StringChange("spend", "spend_local"))] [+] CallDesc { index: 5, name: "spend", signature: SignatureDesc { args: [ArgDesc { name: "asset_kind", ty: "Box<T::AssetKind>" }, ArgDesc { name: "amount", ty: "AssetBalanceOf<T, I>" }, ArgDesc { name: "beneficiary", ty: "Box<BeneficiaryLookupOf<T, I>>" }, ArgDesc { name: "valid_from", ty: "Option<BlockNumberFor<T>>" }] } } [+] CallDesc { index: 6, name: "payout", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } } [+] CallDesc { index: 7, name: "check_status", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } } [+] CallDesc { index: 8, name: "void_spend", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } } - events changes: [+] EventDesc { index: 9, name: "AssetSpendApproved", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "asset_kind", ty: "T::AssetKind" }, ArgDesc { name: "amount", ty: "AssetBalanceOf<T, I>" }, ArgDesc { name: "beneficiary", ty: "T::Beneficiary" }, ArgDesc { name: "valid_from", ty: "BlockNumberFor<T>" }, ArgDesc { name: "expire_at", ty: "BlockNumberFor<T>" }] } } [+] EventDesc { index: 10, name: "AssetSpendVoided", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } } [+] EventDesc { index: 11, name: "Paid", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "payment_id", ty: "<T::Paymaster as Pay>::Id" }] } } [+] EventDesc { index: 12, name: "PaymentFailed", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "payment_id", ty: "<T::Paymaster as Pay>::Id" }] } } [+] EventDesc { index: 13, name: "SpendProcessed", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } } - errors changes: [+] ErrorDesc { index: 5, name: "FailedToConvertBalance" } [+] ErrorDesc { index: 6, name: "SpendExpired" } [+] ErrorDesc { index: 7, name: "EarlyPayout" } [+] ErrorDesc { index: 8, name: "AlreadyAttempted" } [+] ErrorDesc { index: 9, name: "PayoutError" } [+] ErrorDesc { index: 10, name: "NotAttempted" } [+] ErrorDesc { index: 11, name: "Inconclusive" } - constants changes: [+] ConstantDesc { name: "PayoutPeriod", value: [192, 75, 3, 0, 0, 0, 0, 0] } - storages changes: [+] StorageDesc { name: "SpendCount", modifier: "Default", default_value: [0, 0, 0, 0] } [+] StorageDesc { name: "Spends", modifier: "Optional", default_value: [0] } [≠] pallet 41: Vesting -> 1 change(s) - calls changes: [+] CallDesc { index: 5, name: "force_remove_vesting_schedule", signature: SignatureDesc { args: [ArgDesc { name: "target", ty: "<T::Lookup as StaticLookup>::Source" }, ArgDesc { name: "schedule_index", ty: "u32" }] } } [≠] pallet 44: Preimage -> 4 change(s) - calls changes: [+] CallDesc { index: 4, name: "ensure_updated", signature: SignatureDesc { args: [ArgDesc { name: "hashes", ty: "Vec<T::Hash>" }] } } - errors changes: [+] ErrorDesc { index: 6, name: "TooMany" } [+] ErrorDesc { index: 7, name: "TooFew" } - storages changes: [+] StorageDesc { name: "RequestStatusFor", modifier: "Optional", default_value: [0] } [≠] pallet 46: Tips -> 5 change(s) - errors changes: [≠] 3: NotFinder [Name(StringChange("NotFinder", "MaxTipAmountExceeded"))] [≠] 4: StillOpen [Name(StringChange("StillOpen", "NotFinder"))] [≠] 5: Premature [Name(StringChange("Premature", "StillOpen"))] [+] ErrorDesc { index: 6, name: "Premature" } - constants changes: [+] ConstantDesc { name: "MaxTipAmount", value: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } [≠] pallet 80: ParachainSystem -> 9 change(s) - events changes: [≠] 3: UpgradeAuthorized ( code_hash: T::Hash, ) ) [Name(StringChange("UpgradeAuthorized", "DownwardMessagesReceived")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("code_hash", "count")), Ty(StringChange("T::Hash", "u32"))])] })] [≠] 4: DownwardMessagesReceived ( count: u32, ) ) [Name(StringChange("DownwardMessagesReceived", "DownwardMessagesProcessed")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("count", "weight_used")), Ty(StringChange("u32", "Weight"))]), Added(1, ArgDesc { name: "dmq_head", ty: "relay_chain::Hash" })] })] [≠] 5: DownwardMessagesProcessed ( weight_used: Weight, dmq_head: relay_chain::Hash, ) ) [Name(StringChange("DownwardMessagesProcessed", "UpwardMessageSent")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("weight_used", "message_hash")), Ty(StringChange("Weight", "Option<XcmHash>"))]), Removed(1, ArgDesc { name: "dmq_head", ty: "relay_chain::Hash" })] })] [-] "UpwardMessageSent" - storages changes: [+] StorageDesc { name: "AggregatedUnincludedSegment", modifier: "Optional", default_value: [0] } [+] StorageDesc { name: "UnincludedSegment", modifier: "Default", default_value: [0] } [+] StorageDesc { name: "UpgradeGoAhead", modifier: "Default", default_value: [0] } [+] StorageDesc { name: "UpwardDeliveryFeeFactor", modifier: "Default", default_value: [0, 0, 100, 167, 179, 182, 224, 13, 0, 0, 0, 0, 0, 0, 0, 0] } [-] "AuthorizedUpgrade" [≠] pallet 82: XcmpQueue -> 25 change(s) - calls changes: [-] "service_overweight" [-] "update_threshold_weight" [-] "update_weight_restrict_decay" [-] "update_xcmp_max_individual_weight" - events changes: [≠] 0: Success ( message_hash: XcmHash, message_id: XcmHash, weight: Weight, ) ) [Name(StringChange("Success", "XcmpMessageSent")), Signature(SignatureChange { args: [Removed(1, ArgDesc { name: "message_id", ty: "XcmHash" }), Removed(2, ArgDesc { name: "weight", ty: "Weight" })] })] [-] "Fail" [-] "BadVersion" [-] "BadFormat" [-] "XcmpMessageSent" [-] "OverweightEnqueued" [-] "OverweightServiced" - errors changes: [≠] 0: FailedToSend [Name(StringChange("FailedToSend", "BadQueueConfig"))] [≠] 1: BadXcmOrigin [Name(StringChange("BadXcmOrigin", "AlreadySuspended"))] [≠] 2: BadXcm [Name(StringChange("BadXcm", "AlreadyResumed"))] [-] "BadOverweightIndex" [-] "WeightOverLimit" - constants changes: [+] ConstantDesc { name: "MaxInboundSuspended", value: [0, 0, 0, 0] } - storages changes: [+] StorageDesc { name: "DeliveryFeeFactor", modifier: "Default", default_value: [0, 0, 100, 167, 179, 182, 224, 13, 0, 0, 0, 0, 0, 0, 0, 0] } [+] StorageDesc { name: "InboundXcmpSuspended", modifier: "Default", default_value: [0] } [≠] Default QueueConfig: [2, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 130, 26, 6, 0, 0, 8, 0, 7, 0, 200, 23, 168, 4, 2, 0, 4, 0] [DefaultValue([Changed(0, U8Change(2, 32)), Changed(4, U8Change(5, 48)), Changed(8, U8Change(1, 8)), Removed(12, 130), Removed(13, 26), Removed(14, 6), Removed(15, 0), Removed(16, 0), Removed(17, 8), Removed(18, 0), Removed(19, 7), Removed(20, 0), Removed(21, 200), Removed(22, 23), Removed(23, 168), Removed(24, 4), Removed(25, 2), Removed(26, 0), Removed(27, 4), Removed(28, 0)])] [-] "CounterForOverweight" [-] "InboundXcmpMessages" [-] "InboundXcmpStatus" [-] "Overweight" [-] "OverweightCount" [≠] pallet 83: PolkadotXcm -> 35 change(s) - calls changes: [≠] 0: send ( dest: Box<VersionedMultiLocation>, message: Box<VersionedXcm<()>>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })] [≠] 1: teleport_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })] [≠] 2: reserve_transfer_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })] [≠] 3: execute ( message: Box<VersionedXcm<<T as SysConfig>::RuntimeCall>>, max_weight: Weight, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedXcm<<T as SysConfig>::RuntimeCall>>", "Box<VersionedXcm<<T as Config>::RuntimeCall>>"))])] })] [≠] 4: force_xcm_version ( location: Box<MultiLocation>, version: XcmVersion, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<MultiLocation>", "Box<Location>"))])] })] [≠] 6: force_subscribe_version_notify ( location: Box<VersionedMultiLocation>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })] [≠] 7: force_unsubscribe_version_notify ( location: Box<VersionedMultiLocation>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })] [≠] 8: limited_reserve_transfer_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, weight_limit: WeightLimit, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })] [≠] 9: limited_teleport_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, weight_limit: WeightLimit, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })] [+] CallDesc { index: 11, name: "transfer_assets", signature: SignatureDesc { args: [ArgDesc { name: "dest", ty: "Box<VersionedLocation>" }, ArgDesc { name: "beneficiary", ty: "Box<VersionedLocation>" }, ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "fee_asset_item", ty: "u32" }, ArgDesc { name: "weight_limit", ty: "WeightLimit" }] } } [+] CallDesc { index: 12, name: "claim_assets", signature: SignatureDesc { args: [ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "beneficiary", ty: "Box<VersionedLocation>" }] } } [+] CallDesc { index: 13, name: "transfer_assets_using_type_and_then", signature: SignatureDesc { args: [ArgDesc { name: "dest", ty: "Box<VersionedLocation>" }, ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "assets_transfer_type", ty: "Box<TransferType>" }, ArgDesc { name: "remote_fees_id", ty: "Box<VersionedAssetId>" }, ArgDesc { name: "fees_transfer_type", ty: "Box<TransferType>" }, ArgDesc { name: "custom_xcm_on_dest", ty: "Box<VersionedXcm<()>>" }, ArgDesc { name: "weight_limit", ty: "WeightLimit" }] } } - events changes: [≠] 1: Sent ( origin: MultiLocation, destination: MultiLocation, message: Xcm<()>, message_id: XcmHash, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 2: UnexpectedResponse ( origin: MultiLocation, query_id: QueryId, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 8: InvalidResponder ( origin: MultiLocation, query_id: QueryId, expected_location: Option<MultiLocation>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("Option<MultiLocation>", "Option<Location>"))])] })] [≠] 9: InvalidResponderVersion ( origin: MultiLocation, query_id: QueryId, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 11: AssetsTrapped ( hash: H256, origin: MultiLocation, assets: VersionedMultiAssets, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("VersionedMultiAssets", "VersionedAssets"))])] })] [≠] 12: VersionChangeNotified ( destination: MultiLocation, result: XcmVersion, cost: MultiAssets, message_id: XcmHash, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("MultiAssets", "Assets"))])] })] [≠] 13: SupportedVersionChanged ( location: MultiLocation, version: XcmVersion, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 14: NotifyTargetSendFail ( location: MultiLocation, query_id: QueryId, error: XcmError, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 15: NotifyTargetMigrationFail ( location: VersionedMultiLocation, query_id: QueryId, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("VersionedMultiLocation", "VersionedLocation"))])] })] [≠] 16: InvalidQuerierVersion ( origin: MultiLocation, query_id: QueryId, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })] [≠] 17: InvalidQuerier ( origin: MultiLocation, query_id: QueryId, expected_querier: MultiLocation, maybe_actual_querier: Option<MultiLocation>, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("MultiLocation", "Location"))]), Changed(3, [Ty(StringChange("Option<MultiLocation>", "Option<Location>"))])] })] [≠] 18: VersionNotifyStarted ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })] [≠] 19: VersionNotifyRequested ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })] [≠] 20: VersionNotifyUnrequested ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })] [≠] 21: FeesPaid ( paying: MultiLocation, fees: MultiAssets, ) ) [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })] [≠] 22: AssetsClaimed ( hash: H256, origin: MultiLocation, assets: VersionedMultiAssets, ) ) [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("VersionedMultiAssets", "VersionedAssets"))])] })] [+] EventDesc { index: 23, name: "VersionMigrationFinished", signature: SignatureDesc { args: [ArgDesc { name: "version", ty: "XcmVersion" }] } } - errors changes: [≠] 13: InvalidAsset [Name(StringChange("InvalidAsset", "CannotCheckOutTeleport"))] [+] ErrorDesc { index: 20, name: "InvalidAssetNotConcrete" } [+] ErrorDesc { index: 21, name: "InvalidAssetUnknownReserve" } [+] ErrorDesc { index: 22, name: "InvalidAssetUnsupportedReserve" } [+] ErrorDesc { index: 23, name: "TooManyReserves" } [+] ErrorDesc { index: 24, name: "LocalExecutionIncomplete" } [+] id: 86 - new pallet: MessageQueue [-] pallet 85: DmpQueue SUMMARY: - Compatible.......................: false - Require transaction_version bump.: true !!! THE SUBWASM REDUCED DIFFER IS EXPERIMENTAL, DOUBLE CHECK THE RESULTS !!! ``` </details> ## Checklist: - [ ] I have verified that the code works - [ ] No panics! (checked arithmetic ops, no indexing `array[3]` use `get(3)`, ...) - [ ] I have verified that the code is easy to understand - [ ] If not, I have left a well-balanced amount of inline comments - [ ] I have [left the code in a better state](https://deviq.com/principles/boy-scout-rule) - [ ] I have documented the changes (where applicable) * Either PR or Ticket to update [the Docs](https://github.com/KILTprotocol/docs) * Link the PR/Ticket here
Summary
This PR introduces new dispatchables to the treasury pallet, allowing spends of various asset types. The enhanced features of the treasury pallet, in conjunction with the asset-rate pallet, are set up and enabled for Westend and Rococo.
Westend and Rococo runtimes.
Polkadot/Kusams/Rococo Treasury can accept proposals for
spends
of various asset kinds by specifying the asset's location and ID.Treasury Instance New Dispatchables:
spend(AssetKind, AssetBalance, Beneficiary, Option<ValidFrom>)
- propose and approve a spend;payout(SpendIndex)
- payout an approved spend or retry a failed payoutcheck_payment(SpendIndex)
- check the status of a payout;void_spend(SpendIndex)
- void previously approved spend;in this context, the
AssetKind
parameter contains the asset's location and it's correspondingasset_id
, for example:USDT
onAssetHub
,the
Beneficiary
parameter is aMultiLocation
in the context of the asset's location, for examplethe
AssetBalance
represents the amount of theAssetKind
to be transferred to theBeneficiary
. For permission checks, the asset amount is converted to the native amount and compared against the maximum spendable amount determined by the commanding spend origin.the
spend
dispatchable allows for batching spends with differentValidFrom
arguments, enabling milestone-based spending. If the expectations tied to an approved spend are not met, it is possible to void the spend later using thevoid_spend
dispatchable.Asset Rate Pallet provides the conversion rate from the
AssetKind
to the native balance.Asset Rate Instance Dispatchables:
create(AssetKind, Rate)
- initialize a conversion rate to the native balance for the given assetupdate(AssetKind, Rate)
- update the conversion rate to the native balance for the given assetremove(AssetKind)
- remove an existing conversion rate to the native balance for the given assetthe pallet's dispatchables can be executed by the Root or Treasurer origins.
Treasury Pallet
Treasury Pallet can accept proposals for
spends
of various asset kinds and pay them out through the implementation of thePay
trait.New Dispatchables:
spend(Config::AssetKind, AssetBalance, Config::Beneficiary, Option<ValidFrom>)
- propose and approve a spend;payout(SpendIndex)
- payout an approved spend or retry a failed payout;check_payment(SpendIndex)
- check the status of a payout;void_spend(SpendIndex)
- void previously approved spend;The parameters' types of the
spend
dispatchable exposed via the pallet'sConfig
and allows to propose and accept a spend of a certain amount.An approved spend can be claimed via the
payout
within theConfig::SpendPeriod
. Clients provide an implementation of thePay
trait which can pay an asset of theAssetKind
to theBeneficiary
inAssetBalance
units.The implementation of the Pay trait might not have an immediate final payment status, for example if implemented over
XCM
and the actual transfer happens on a remote chain.The
check_status
dispatchable can be executed to update the spend's payment state and retry thepayout
if the payment has failed.