Skip to content

Polimec 0.6.0

Compare
Choose a tag to compare
@lrazovic lrazovic released this 17 Apr 13:42
· 177 commits to main since this release
ced567b

Few notes for Node Operators

  • Starting from this release, the release binary will be built using the new production profile, enhancing speed and optimizing memory usage. We've also renamed the default binary from polimec-parachain-node to polimec-node.

  • If you're compiling the node yourself, you can compile the node using the command cargo b --profile production -p polimec-node. You'll find the binary in target/production/polimec-node.

  • This release also simplifies configuration by including the production chainspec directly in the binary, enabling you to start the node with the --chain polimec flag instead of using a raw chainspec. You can now start a Polimec RPC node by simply running:

./polimec-node \
  --name="RPC 1" \
  --chain polimec \
  --pruning archive \
  --database=paritydb \
  --rpc-methods=safe \
  --rpc-cors=all \
  --rpc-max-connections=10000 \
  -- \
  --database=paritydb \
  --sync=warp 
  • Additionally, the polimec-node-experimental binary is attached, compiled with the async-backing feature. Please note, this version is experimental and should not be used in production settings.

What's Changed

  • Feature/plmc 472 remove ct deposit fix bug with hold and reserve by @vstam1 in #201
  • Feat/plmc 458 community round gatekeep based on did winning bid not account by @JuaniRios in #196
  • feature/plmc-408-prevent-spam-on-project-creation by @JuaniRios in #198
  • Feature/plmc 138 rename runtimes by @JuaniRios in #194
  • Feature/plmc 460 upgrade to sdk 16 by @vstam1 in #181
  • chore: first round of cleaning by @lrazovic in #204
  • feature/plmc-468-limit-multipliers-based-on-credential-type by @JuaniRios in #199
  • feature/plmc-470-add-credential-to-decide_project_outcome by @JuaniRios in #205
  • remove dupl test by @JuaniRios in #211
  • Feature/plmc 474 add extrinsic to remove project before evaluation started by @JuaniRios in #208
  • Feature/plmc 466 research if storage layers dont get dropped when calling by @JuaniRios in #214
  • Feature/plmc 473 change edit metadata extrinsic to edit the whole metadata by @JuaniRios in #207
  • feature/plmc-480-rename-create-extrinsic-to-create_project by @JuaniRios in #215
  • feature/plmc-486-change-is_funded-to-use-usd-amounts-of-evaluations-instead by @JuaniRios in #216
  • Feat/refactor politest by @lrazovic in #212
  • add plmc price to oracle by @vstam1 in #219
  • fix live node storage by @vstam1 in #220
  • Feature/settlement rewrite by @vstam1 in #202
  • Feat/millis timestamp by @lrazovic in #217
  • feature/plmc-483-write-missing-unit-tests-on-pallet-funding-based-on-the by @JuaniRios in #218
  • Feature/plmc 163 events refactor + extra by @vstam1 in #221
  • Politest Upgrade 0.6.3 by @JuaniRios in #223
  • Feature: Dispenser Pallet by @vstam1 in #226
  • chore: add missing pallets in define_benchmarks! by @lrazovic in #227
  • Feature/plmc 512 comprehensive auction round tests by @JuaniRios in #224
  • Fix/Identity benchmarks by @JuaniRios in #231
  • Fix/assets benchmarks by @JuaniRios in #232

Full Changelog: v0.5.7...v0.6.0

This runtime was built with rustc 1.75.0 (82e1608df 2023-12-21) using a forked srtool v0.14.0 due to a known bug in the original version

  • Generated using srtool
== Compressed
 Version          : polimec-mainnet-6000 (polimec-mainnet-0.tx2.au1)
 Metadata         : V14
 Size             : 1.09 MB (1140751 bytes)
 Compression      : 74.84%
 setCode          : 0x3d81fe158c932b49b576a05f6798fb25d22cc09f35d5afaa143db1b2530e76a4
 authorizeUpgrade : 0x9d07823f57feef4f248936522324ef3eafe9fd256c75dab3142baf2966f14e4c
 IPFS             : QmSVmgauc9QMGMKQBgpWcm4e7VHo2R7NJHSufX76dft5Yf
 BLAKE2_256       : 0x31e2cf61cadfa5f1bf876928eb241ae6c0462f27a5b461cb94fe14c2a5a1058d
 Wasm             : runtimes/polimec/target/srtool/production/wbuild/polimec-runtime/polimec_runtime.compact.compressed.wasm
  • Generated using subwasm info
🏋️  Runtime size:             1.088 MB (1,140,751 bytes)
🗜  Compressed:               Yes, 74.84%
✨ Reserved meta:            OK - [6D, 65, 74, 61]
🎁 Metadata version:         V14
🔥 Core version:             polimec-mainnet-6000 (polimec-mainnet-0.tx2.au1)
🗳️  system.setCode hash:      0x3d81fe158c932b49b576a05f6798fb25d22cc09f35d5afaa143db1b2530e76a4
🗳️  authorizeUpgrade hash:    0x9d07823f57feef4f248936522324ef3eafe9fd256c75dab3142baf2966f14e4c
🗳️  Blake2-256 hash:          0x31e2cf61cadfa5f1bf876928eb241ae6c0462f27a5b461cb94fe14c2a5a1058d
📦 IPFS:                     https://www.ipfs.io/ipfs/QmSVmgauc9QMGMKQBgpWcm4e7VHo2R7NJHSufX76dft5Yf
  • Generated using subwasm diff
[≠] 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: [ 60, 112, 111, 108, 105, 109, 101, 99, 45, 109, 97, 105, 110, 110, 101, 116, 60, 112, 111, 108, 105, 109, 101, 99, 45, 109, 97, 105, 110, 110, 101, 116, ... ]
        [Value([Changed(36, U8Change(143, 112)), Changed(37, U8Change(19, 23)), Changed(44, U8Change(44, 48)), Changed(177, U8Change(1, 251)), Changed(178, U8Change(0, 197)), Changed(179, U8Change(0, 119)), Changed(180, U8Change(0, 185)), Changed(181, U8Change(1, 215)), Added(182, 71), Added(183, 239), Added(184, 214), Added(185, 1), Added(186, 0), Added(187, 0), Added(188, 0), Added(189, 2), Added(190, 0), Added(191, 0), Added(192, 0), Added(193, 1)])]

  - storages changes:
    [+] StorageDesc { name: "AuthorizedUpgrade", modifier: "Optional", default_value: [0] }

[≠] pallet 1: 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 8: Identity -> 40 change(s)
  - calls changes:
    [≠]  1: set_identity ( info: Box<IdentityInfo<T::MaxAdditionalFields>>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<IdentityInfo<T::MaxAdditionalFields>>", "Box<T::IdentityInformation>"))])] })]
    [≠]  8: set_fields ( index: RegistrarIndex, fields: IdentityFields, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("IdentityFields", "<T::IdentityInformation as IdentityInformationProvider>::\nFieldsIdentifier"))])] })]
    [+] CallDesc { index: 15, name: "add_username_authority", signature: SignatureDesc { args: [ArgDesc { name: "authority", ty: "AccountIdLookupOf<T>" }, ArgDesc { name: "suffix", ty: "Vec<u8>" }, ArgDesc { name: "allocation", ty: "u32" }] } }
    [+] CallDesc { index: 16, name: "remove_username_authority", signature: SignatureDesc { args: [ArgDesc { name: "authority", ty: "AccountIdLookupOf<T>" }] } }
    [+] CallDesc { index: 17, name: "set_username_for", signature: SignatureDesc { args: [ArgDesc { name: "who", ty: "AccountIdLookupOf<T>" }, ArgDesc { name: "username", ty: "Vec<u8>" }, ArgDesc { name: "signature", ty: "Option<T::OffchainSignature>" }] } }
    [+] CallDesc { index: 18, name: "accept_username", signature: SignatureDesc { args: [ArgDesc { name: "username", ty: "Username<T>" }] } }
    [+] CallDesc { index: 19, name: "remove_expired_approval", signature: SignatureDesc { args: [ArgDesc { name: "username", ty: "Username<T>" }] } }
    [+] CallDesc { index: 20, name: "set_primary_username", signature: SignatureDesc { args: [ArgDesc { name: "username", ty: "Username<T>" }] } }
    [+] CallDesc { index: 21, name: "remove_dangling_username", signature: SignatureDesc { args: [ArgDesc { name: "username", ty: "Username<T>" }] } }

  - events changes:
    [+] EventDesc { index: 10, name: "AuthorityAdded", signature: SignatureDesc { args: [ArgDesc { name: "authority", ty: "T::AccountId" }] } }
    [+] EventDesc { index: 11, name: "AuthorityRemoved", signature: SignatureDesc { args: [ArgDesc { name: "authority", ty: "T::AccountId" }] } }
    [+] EventDesc { index: 12, name: "UsernameSet", signature: SignatureDesc { args: [ArgDesc { name: "who", ty: "T::AccountId" }, ArgDesc { name: "username", ty: "Username<T>" }] } }
    [+] EventDesc { index: 13, name: "UsernameQueued", signature: SignatureDesc { args: [ArgDesc { name: "who", ty: "T::AccountId" }, ArgDesc { name: "username", ty: "Username<T>" }, ArgDesc { name: "expiration", ty: "BlockNumberFor<T>" }] } }
    [+] EventDesc { index: 14, name: "PreapprovalExpired", signature: SignatureDesc { args: [ArgDesc { name: "whose", ty: "T::AccountId" }] } }
    [+] EventDesc { index: 15, name: "PrimaryUsernameSet", signature: SignatureDesc { args: [ArgDesc { name: "who", ty: "T::AccountId" }, ArgDesc { name: "username", ty: "Username<T>" }] } }
    [+] EventDesc { index: 16, name: "DanglingUsernameRemoved", signature: SignatureDesc { args: [ArgDesc { name: "who", ty: "T::AccountId" }, ArgDesc { name: "username", ty: "Username<T>" }] } }

  - errors changes:
    [≠] 11: TooManyFields
        [Name(StringChange("TooManyFields", "TooManyRegistrars"))]
    [≠] 12: TooManyRegistrars
        [Name(StringChange("TooManyRegistrars", "AlreadyClaimed"))]
    [≠] 13: AlreadyClaimed
        [Name(StringChange("AlreadyClaimed", "NotSub"))]
    [≠] 14: NotSub
        [Name(StringChange("NotSub", "NotOwned"))]
    [≠] 15: NotOwned
        [Name(StringChange("NotOwned", "JudgementForDifferentIdentity"))]
    [≠] 16: JudgementForDifferentIdentity
        [Name(StringChange("JudgementForDifferentIdentity", "JudgementPaymentFailed"))]
    [≠] 17: JudgementPaymentFailed
        [Name(StringChange("JudgementPaymentFailed", "InvalidSuffix"))]
    [+] ErrorDesc { index: 18, name: "NotUsernameAuthority" }
    [+] ErrorDesc { index: 19, name: "NoAllocation" }
    [+] ErrorDesc { index: 20, name: "InvalidSignature" }
    [+] ErrorDesc { index: 21, name: "RequiresSignature" }
    [+] ErrorDesc { index: 22, name: "InvalidUsername" }
    [+] ErrorDesc { index: 23, name: "UsernameTaken" }
    [+] ErrorDesc { index: 24, name: "NoUsername" }
    [+] ErrorDesc { index: 25, name: "NotExpired" }

  - constants changes:
    [+] ConstantDesc { name: "ByteDeposit", value: [16, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }
    [+] ConstantDesc { name: "MaxSuffixLength", value: [0, 0, 0, 0] }
    [+] ConstantDesc { name: "MaxUsernameLength", value: [0, 0, 0, 0] }
    [+] ConstantDesc { name: "PendingUsernameExpiration", value: [0, 0, 0, 0] }
    [-] "FieldDeposit"
    [-] "MaxAdditionalFields"

  - storages changes:
    [+] StorageDesc { name: "AccountOfUsername", modifier: "Optional", default_value: [0] }
    [+] StorageDesc { name: "PendingUsernames", modifier: "Optional", default_value: [0] }
    [+] StorageDesc { name: "UsernameAuthorities", modifier: "Optional", default_value: [0] }

[≠] pallet 10: Balances -> 2 change(s)
  - calls changes:
    [-] "set_balance_deprecated"
    [-] "transfer"

[≠] pallet 12: 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 24: AuraExt -> 1 change(s)
  - storages changes:
    [+] StorageDesc { name: "SlotInfo", modifier: "Optional", default_value: [0] }

[≠] pallet 30: 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: [232, 3, 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 31: PolkadotXcm -> 8 change(s)
  - calls changes:
    [≠]  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>>"))])] })]
    [+] CallDesc { index: 11, name: "transfer_assets", signature: SignatureDesc { args: [ArgDesc { name: "dest", ty: "Box<VersionedMultiLocation>" }, ArgDesc { name: "beneficiary", ty: "Box<VersionedMultiLocation>" }, ArgDesc { name: "assets", ty: "Box<VersionedMultiAssets>" }, ArgDesc { name: "fee_asset_item", ty: "u32" }, ArgDesc { name: "weight_limit", ty: "WeightLimit" }] } }

  - 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" }

[≠] pallet 33: DmpQueue -> 20 change(s)
  - calls changes:
    [-] "service_overweight"

  - events changes:
    [≠]  0: InvalidFormat ( message_hash: XcmHash, )  )
        [Name(StringChange("InvalidFormat", "StartedExport")), Signature(SignatureChange { args: [Removed(0, ArgDesc { name: "message_hash", ty: "XcmHash" })] })]
    [≠]  1: UnsupportedVersion ( message_hash: XcmHash, )  )
        [Name(StringChange("UnsupportedVersion", "Exported")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("message_hash", "page")), Ty(StringChange("XcmHash", "PageCounter"))])] })]
    [≠]  2: ExecutedDownward ( message_hash: XcmHash, message_id: XcmHash, outcome: Outcome, )  )
        [Name(StringChange("ExecutedDownward", "ExportFailed")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("message_hash", "page")), Ty(StringChange("XcmHash", "PageCounter"))]), Removed(1, ArgDesc { name: "message_id", ty: "XcmHash" }), Removed(2, ArgDesc { name: "outcome", ty: "Outcome" })] })]
    [≠]  3: WeightExhausted ( message_hash: XcmHash, message_id: XcmHash, remaining_weight: Weight, required_weight: Weight, )  )
        [Name(StringChange("WeightExhausted", "CompletedExport")), Signature(SignatureChange { args: [Removed(0, ArgDesc { name: "message_hash", ty: "XcmHash" }), Removed(1, ArgDesc { name: "message_id", ty: "XcmHash" }), Removed(2, ArgDesc { name: "remaining_weight", ty: "Weight" }), Removed(3, ArgDesc { name: "required_weight", ty: "Weight" })] })]
    [≠]  4: OverweightEnqueued ( message_hash: XcmHash, message_id: XcmHash, overweight_index: OverweightIndex, required_weight: Weight, )  )
        [Name(StringChange("OverweightEnqueued", "StartedOverweightExport")), Signature(SignatureChange { args: [Removed(0, ArgDesc { name: "message_hash", ty: "XcmHash" }), Removed(1, ArgDesc { name: "message_id", ty: "XcmHash" }), Removed(2, ArgDesc { name: "overweight_index", ty: "OverweightIndex" }), Removed(3, ArgDesc { name: "required_weight", ty: "Weight" })] })]
    [≠]  5: OverweightServiced ( overweight_index: OverweightIndex, weight_used: Weight, )  )
        [Name(StringChange("OverweightServiced", "ExportedOverweight")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("overweight_index", "index"))]), Removed(1, ArgDesc { name: "weight_used", ty: "Weight" })] })]
    [≠]  6: MaxMessagesExhausted ( message_hash: XcmHash, )  )
        [Name(StringChange("MaxMessagesExhausted", "ExportOverweightFailed")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("message_hash", "index")), Ty(StringChange("XcmHash", "OverweightIndex"))])] })]
    [+] EventDesc { index: 7, name: "CompletedOverweightExport", signature: SignatureDesc { args: [] } }
    [+] EventDesc { index: 8, name: "StartedCleanup", signature: SignatureDesc { args: [] } }
    [+] EventDesc { index: 9, name: "CleanedSome", signature: SignatureDesc { args: [ArgDesc { name: "keys_removed", ty: "u32" }] } }
    [+] EventDesc { index: 10, name: "Completed", signature: SignatureDesc { args: [ArgDesc { name: "error", ty: "bool" }] } }

  - errors changes:
    [-] "Unknown"
    [-] "OverLimit"

  - storages changes:
    [+] StorageDesc { name: "MigrationStatus", modifier: "Default", default_value: [0] }
    [-] "Configuration"
    [-] "CounterForOverweight"
    [-] "Overweight"
    [-] "PageIndex"
    [-] "Pages"

[+] id: 34 - new pallet: MessageQueue
[≠] pallet 40: 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: [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: Democracy -> 9 change(s)
  - calls changes:
    [≠]  7: fast_track ( proposal_hash: PreimageHash, voting_period: BlockNumberFor<T>, delay: BlockNumberFor<T>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("PreimageHash", "T::Hash"))])] })]
    [≠]  8: veto_external ( proposal_hash: PreimageHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("PreimageHash", "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<H256>, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("Option<H256>", "Option<T::Hash>"))])] })]

  - events changes:
    [≠]  9: Vetoed ( who: T::AccountId, proposal_hash: PreimageHash, until: BlockNumberFor<T>, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("PreimageHash", "T::Hash"))])] })]
    [≠] 10: Blacklisted ( proposal_hash: PreimageHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("PreimageHash", "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 42: Council -> 1 change(s)
  - errors changes:
    [+] ErrorDesc { index: 10, name: "PrimeAccountNotMember" }

[≠] pallet 43: TechnicalCommittee -> 1 change(s)
  - errors changes:
    [+] ErrorDesc { index: 10, name: "PrimeAccountNotMember" }

[≠] pallet 45: 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] }

SUMMARY:
- Compatible.......................: false
- Require transaction_version bump.: true