This release contains the changes from polkadot-v1.8.0
to polkadot-v1.9.0
.
Changelog
Changelog for Node Dev
[#3187]: Retrying an execution on failed runtime construction
If a runtime construction error happened during the execution request, then the artifact is re-prepared and the execution request is retried at most once. See also the related issue.
[#3233]: provisioner: allow multiple cores assigned to the same para
Enable supplying multiple backable candidates to the paras_inherent pallet for the same paraid.
[#3447]: Use generic hash for runtime wasm in resolve_state_version_from_wasm
Changes the runtime hash algorithm used in resolve_state_version_from_wasm from DefaultHasher to a caller-provided one (usually HashingFor<Block>
). Fixes a bug where the runtime wasm was being compiled again when it was not needed, because the hash did not match.
Changelog for Node Operator
[#3523]: Fix crash of synced parachain node run with --sync=warp
Fix crash of SyncingEngine
when an already synced parachain node is run with --sync=warp
(issue #3496).
The issue manifests itself by errors in the logs:
[Parachain] Cannot set warp sync target block: no warp sync strategy is active.
[Parachain] Failed to set warp sync target block header, terminating `SyncingEngine`.
Followed by a stream of messages:
[Parachain] Protocol command streams have been shut down
[#3231]: Allow parachain which acquires multiple coretime cores to make progress
Adds the needed changes so that parachains which acquire multiple coretime cores can still make progress.
Only one of the cores will be able to be occupied at a time.
Only works if the ElasticScalingMVP node feature is enabled in the runtime and the block author validator is updated to include this change.
[#3510]: Fix multi-collator parachain transition to async backing
The dynamic Aura slot duration, introduced in PR#3211, didn't take the block import pipeline into account. The result was the parachain backed by multiple collators not being able to keep producing blocks after its runtime was upgraded to support async backing, requiring to
restart all the collator nodes. This change fixes the issue, introducing the dynamic Aura slot duration into the block import pipeline.
[#3504]: add prometheus label "is_rate_limited" to rpc calls
This PR adds a label "is_rate_limited" to the prometheus metrics "substrate_rpc_calls_time" and "substrate_rpc_calls_finished" than can be used to distinguish rate-limited RPC calls from other RPC calls. Because rate-limited RPC calls may take tens of seconds.
Changelog for Runtime Dev
[#3491]: Remove Deprecated OldWeight
Removed deprecated sp_weights::OldWeight type. Use [weight_v2::Weight
] instead.
[#3002]: PoV Reclaim Runtime Side
Adds a mechanism to reclaim proof size weight.
- Introduces a new
SignedExtension
that reclaims the difference
between benchmarked proof size weight and actual consumed proof size weight. - Introduces a manual mechanism,
StorageWeightReclaimer
, to reclaim excess storage weight for situations
that require manual weight management. The most prominent case is theon_idle
hook. - Adds the
storage_proof_size
host function to the PVF. Parachain nodes should add it to ensure compatibility.
To enable proof size reclaiming, add the host storage_proof_size
host function to the parachain node. Add the
StorageWeightReclaim
SignedExtension
to your runtime and enable proof recording during block import.
[#3378]: Remove deprecated GenesisConfig
Removes deprecated type GenesisConfig
, it was replaced by RuntimeGenesisConfig
on May 24 of 2023. The type GenesisConfig
was deprecated on May 24 of 2023 #14210
[#1554]: Runtime Upgrade ref docs and Single Block Migration example pallet
frame_support::traits::GetStorageVersion::current_storage_version
has been renamed frame_support::traits::GetStorageVersion::in_code_storage_version
.
A simple find-replace is sufficient to handle this change.
[#3456]: Removed pallet::getter
usage from pallet-collective
This PR removes pallet::getter
usage from pallet-collective
, and updates dependant code accordingly.
The syntax StorageItem::<T, I>::get()
should be used instead.
[#1781]: Multi-Block-Migrations, poll
hook and new System Callbacks
The major things that this MR touches are:
Multi-Block-Migrations: pallet-migrations
is introduced that can be configured in the System
of a runtime to act as multi-block migrator. The migrations
pallet then in turn receives the list of MBMs as config parameter. The list of migrations can be an aggregated
tuple of SteppedMigration
trait implementation.
It is paramount that the migrations
pallet is configured in System
once it is deployed. A test is in place to double check this.
To integrate this into your runtime, it is only necessary to change the return type of initialize_block
to RuntimeExecutiveMode
. For extended info please see #1781.
poll: a new pallet hook named poll
is added. This can be used for places where the code that should be executed is not deadline critical. Runtime devs are advised to skim their usage of on_initialize
and on_finalize
to see whether they can be replace with poll
. poll
is not guaranteed to be called each block. In fact it will not be called when MBMs are ongoing.
System Callbacks: The system
pallet gets five new config items - all of which can be safely set to ()
as default. They are:
SingleBlockMigrations
: replaces theExecutive
now for configuring migrations.MultiBlockMigrator
: thepallet-migrations
would be set here, if deployed.PreInherents
: a hook that runs before any inherent.PostInherents
: a hook to run between inherents andpoll
/MBM logic.PostTransactions
: a hook to run after all transactions but beforeon_idle
.
[#3377]: Permissioned contract deployment
This PR introduces two new config types that specify the origins allowed to upload and instantiate contract code. However, this check is not enforced when a contract instantiates another contract.
[#3532]: Remove deprecated trait Store
The deprecated trait Store
feature has been removed from the codebase. Please remove usages of generate_store
macro from your pallets and access the storage through generics. For example, <Self as Store>::StoredRange::mutate
will need to be updated to StoredRange::<T>::mutate
.
[#2393]: [XCMP] Use the number of 'ready' pages in XCMP suspend logic
Semantics of the suspension logic in the XCMP queue pallet change from using the number of total pages to the number of 'ready' pages. The number of ready pages is now also exposed by the MessageQueue
pallet to downstream via the queue footprint
.
[#3505]: Removes as [disambiguation_path]
from the required syntax in derive_impl
This PR removes the need to specify as [disambiguation_path]
for cases where the trait definition resides within the same scope as default impl path.
For example, in the following macro invocation
#[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)]
impl frame_system::Config for Runtime {
...
}
the trait DefaultConfig
lies within the frame_system
scope and TestDefaultConfig
impls the DefaultConfig
trait.
Using this information, we can compute the disambiguation path internally, thus removing the need of an explicit specification:
#[derive_impl(frame_system::config_preludes::TestDefaultConfig)]
impl frame_system::Config for Runtime {
...
}
In cases where the trait lies outside this scope, we would still need to specify it explicitly, but this should take care of most (if not all) uses of derive_impl
within FRAME's context.
[#3460]: Repot all templates
This PR moves all templates into a single folder in the polkadot-sdk repo (/templates
) and unifies their crate names as well. Most notably, the crate name for what was formerly known as node-template
is no solochain-template-node
. The other two crates in the template are
consequently called: solochain-runtime-template
and pallet-solochain-template
. The other two template crate names follow a similar patter, just replacing solochain
with parachain
or minimal
.
This PR is part of a bigger step toward automating the template repositories, see the following: #3155
[#3643]: Fix weight refund for pallet_collator_selection::set_candidacy_bond
This PR implements the weight refund of pallet_collator_selection::set_candidacy_bond
to account for no iterations over the candidate list when the candidacy bond is decreased.
[#3665]: Revert "FRAME Create TransactionExtension as a replacement for SignedExtension (#2280)"
This PR reverts the PR which introduced TransactionExtension
to replace SignedExtension
.
[#3371]: removed pallet::getter
from example pallets
This PR removes all the pallet::getter
usages from the template pallets found in the Substrate and Cumulus template nodes, and from the Substrate example pallets.
The purpose is to discourage developers to use this macro, that is currently being removed and soon will be deprecated.
[#3574]: Generate test functions for each benchmark with benchmarking v2
This PR fixes an issue where using impl_benchmark_test_suite
macro within modules that use the benchmarking v2 macros (#[benchmarks]
and #[instance_benchmarks]
) always produced a single test called test_benchmarks
instead of a separate benchmark test for every benchmark (noted with the #[benchmark]
macro).
By using this macro from now on, new tests will be created named test_benchmark_{name}
where name
is the name of the benchmark function. Those tests will be nested inside the module intended for benchmark functions.
Also, when using impl_benchmark_test_suite
inside the module, the import of such marco will not be necessary, so any explicit import of it will be marked as unused, the same way it works for v1 macros so far.
[#3453]: [pallet-nomination-pools]: chill
is permissionless if depositor's stake is less than min_nominator_bond
Nomination pools currently have an issue whereby member funds cannot be unbonded if the depositor bonded amount is less than MinNominatorBond
.
This PR makes the chill
function permissionless if this condition is met.
Consequently, nominate
function also checks for depositor
to have at least MinNominatorBond
, and returns MinimumBondNotMet
error if not.
[#3606]: [pallet_contracts] mark lock/unlock_delegate_dependency as stable
Lock and unlock delegate dependency are stable now, so we can mark them as such.
[#3589]: Removed pallet::getter
usage from pallet-im-online
This PR removes pallet::getter
usage from pallet-im-online
, and updates dependant code accordingly.
The syntax StorageItem::<T, I>::get()
should be used instead.
[#3411]: add Encointer as trusted teleporter for Westend
add Encointer as trusted teleporter for Westend with ParaId 1003
[#3454]: Introduce storage attr macro #[disable_try_decode_storage] and set it on System::Events and ParachainSystem::HostConfiguration
Allows marking storage items with #[disable_try_decode_storage], which disables that storage item from being decoded during try_decode_entire_state calls.
Applied the attribute to System::Events to close #2560.
Applied the attribute to ParachainSystem::HostConfiguration to resolve periodic issues with it.
[#1378]: Construct Runtime V2 - An outer macro approach to define the runtime
Introduces #[frame_support::runtime]
that can be attached to a mod to define a runtime. The items in this mod can be attached to the following attributes to define the key components of the runtime.
#[runtime::runtime]
attached to a struct defines the main runtime#[runtime::derive]
attached to the runtime struct defines the types generated by the runtime#[runtime::pallet_index]
must be attached to a pallet to define its index#[runtime::disable_call]
can be optionally attached to a pallet to disable its calls#[runtime::disable_unsigned]
can be optionally attached to a pallet to disable unsigned calls- A pallet instance can be defined as
TemplateModule: pallet_template<Instance>
An optional attribute can be defined as#[frame_support::runtime(legacy_ordering)]
to ensure that the order of hooks is same as the order of pallets (and not based on the pallet_index). This is to support legacy runtimes and should be avoided for new ones.
[#3636]: [pallet_broker] Fix Linear::adapt_price
behavior at zero
This fixes the behaviour of Linear
which is the default implementation of the AdaptPrice
trait in the broker pallet. Previously if cores were offered but not sold in only one sale, the price would be set to zero and due to the logic being purely multiplicative, the price would stay at 0 indefinitely.
[#3540]: [pallet-contracts] Only allow non-deterministic code to be uploaded with Determinism::Relaxed
The upload_code
extrinsic, will now only allow non-deterministic code to be uploaded with the Determinism::Relaxed
flag.
This prevent an attacker from uploading "deterministic" code with the Determinism::Relaxed
flag, preventing the code to be instantiated for on-chain execution.
[#3403]: Add claim_assets
extrinsic to pallet-xcm
There's a new extrinsic in pallet-xcm
that needs a new configuration item for its benchmarks.
It's a simple function in pallet_xcm::benchmarking::Config
, get_asset
, that returns a valid asset handled by the AssetTransactor of the chain.
If you're already using pallet-xcm-benchmarks
, then you already have this function there and can just copy and paste it.
[#3412]: [FRAME] Add genesis test and remove some checks
The construct_runtime macro now generates a test to assert that all GenesisConfig
s of all pallets can be build within the runtime. This ensures that the BuildGenesisConfig
runtime API works.
Further, some checks from a few pallets were removed to make this pass.
[#3324]: Fix weight calculation and event emission in pallet-membership
Bug fix for the membership pallet to use correct weights. Also no event will be emitted anymore when change_key
is called with identical accounts.
[#3513]: Fix call enum's metadata regression
This PR fixes an issue where in the metadata of all FRAME-based chains, the documentation for all extrinsic/call/transactions has been replaced by a single line saying "see Pallet::name".
Many wallets display the metadata of transactions to the user before signing, and this bug might have affected this process.
Changelog for Runtime User
[#3403]: Add claim_assets
extrinsic to pallet-xcm
There's a new extrinsic in pallet-xcm
for claiming assets.
This means that if your assets ever get trapped while teleporting or doing reserve asset transfers, you can easily claim them by calling this new extrinsic.
[#3639]: Prevents staking controllers from becoming stashes of different ledgers; Ensures that no ledger in bad state is mutated.
This PR introduces a fix to the staking logic which prevents an existing controller from bonding as a stash of another ledger, which lead to staking ledger inconsistencies down the line. In addition, it adds a few (temporary) gates to prevent ledgers that are already in a bad state from mutating its state.
In summary:
- Checks if stash is already a controller when calling
Call::bond
and fails if that's the case; - Ensures that all fetching ledgers from storage are done through the
StakingLedger
API; - Ensures that a
Error::BadState
is returned if the ledger bonding is in a bad state. This prevents bad ledgers from mutating (e.g.bond_extra
,set_controller
, etc) its state and avoid further data inconsistencies. - Prevents stashes which are controllers or another ledger from calling
set_controller
, since that may lead to a bad state. - Adds further try-state runtime checks that check if there are ledgers in a bad state based on their bonded metadata.
[#3513]: Fix call enum's metadata regression
This PR fixes an issue where in the metadata of all FRAME-based chains, the documentation for all extrinsic/call/transactions has been replaced by a single line saying "see Pallet::name".
Many wallets display the metadata of transactions to the user before signing, and this bug might have affected this process.
Rust compiler versions
This release was built and tested against the following versions of rustc.
Other versions may work.
Rust Stable: rustc 1.75.0 (82e1608df 2023-12-21)
Rust Nightly: rustc 1.77.0-nightly (ef71f1047 2024-01-21)
Runtimes
Westend
🏋️ Runtime size: 1.757 MB (1,842,646 bytes)
🗜 Compressed: Yes, 79.19%
✨ Reserved meta: OK - [6D, 65, 74, 61]
🎁 Metadata version: V14
🔥 Core version: westend-1009000 (parity-westend-0.tx24.au2)
🗳️ system.setCode hash: 0x701d8f5af35d2788db7406852b7b9c31fc43a3c643475ecba7b7d39962e170e7
🗳️ authorizeUpgrade hash: 0xef9b696bb7fb109542b07b4f11cf6ae78181ffa644347d30d06f50d23c30cbca
🗳️ Blake2-256 hash: 0xfc05f1863c0050bac8cb117c094232576bf63b8315415e95c77d506ef656a960
📦 IPFS: https://www.ipfs.io/ipfs/QmYwmvhKKryNv5VAAdX8uA8cdoM2qpYZt5rDsCrGhs5DTx
Westend AssetHub
🏋️ Runtime size: 1.269 MB (1,331,063 bytes)
🗜 Compressed: Yes, 80.34%
✨ Reserved meta: OK - [6D, 65, 74, 61]
🎁 Metadata version: V14
🔥 Core version: westmint-1009000 (westmint-0.tx14.au1)
🗳️ system.setCode hash: 0x7da5685a7412845f68817e71792e7220ad560312875142575892e355567c837f
🗳️ authorizeUpgrade hash: 0x56270c019b5d6c8806937b34c4d64a0d7e4875ed208dbf6a09d711aca3a9d7a7
🗳️ Blake2-256 hash: 0x80a9c31324a26e22639b3a79d6c3662c6aa0a718a537bd8472277155b8bbb104
📦 IPFS: https://www.ipfs.io/ipfs/QmXLQBjCzre6RyhoEtRiT3BnXqZ7h7BS1Jx8rmXZQapcoW
Westend BridgeHub
🏋️ Runtime size: 1.039 MB (1,089,313 bytes)
🗜 Compressed: Yes, 78.85%
✨ Reserved meta: OK - [6D, 65, 74, 61]
🎁 Metadata version: V14
🔥 Core version: bridge-hub-westend-1009000 (bridge-hub-westend-0.tx4.au1)
🗳️ system.setCode hash: 0xe7322884b8de41a1cdf0442d8f085963facf3f7a436310c8d11c85d50dc173e1
🗳️ authorizeUpgrade hash: 0xb7e6b2c5a97d893bfe7edf0c3c921a559597e8a697daa91846a9cce09204c9c1
🗳️ Blake2-256 hash: 0x65b5e41a926fd4fcc07c99feee2695081b92f89b0f66f8302234ee4d9b5cd8d1
📦 IPFS: https://www.ipfs.io/ipfs/QmUHja1UXwwgFSGT2z9PY8rKkWdni6ewYSxbZtqy1MQuC8
Westend Collectives
🏋️ Runtime size: 1.114 MB (1,167,964 bytes)
🗜 Compressed: Yes, 80.00%
✨ Reserved meta: OK - [6D, 65, 74, 61]
🎁 Metadata version: V14
🔥 Core version: collectives-westend-1009000 (collectives-westend-0.tx5.au1)
🗳️ system.setCode hash: 0x57a82d883cac7decbb13bac4b285120684631c69bf895ee2b277950915959acd
🗳️ authorizeUpgrade hash: 0x0af556ed32430a8719965d175a2cca671ab9e26415ecbfe11d96838107f258ed
🗳️ Blake2-256 hash: 0xdbe90c603ba6a766a4c1f51c8759512550b4a9c0ec0a2a7d228f453ab0bc2e72
📦 IPFS: https://www.ipfs.io/ipfs/QmXre8D1LAA9QZSg58j6AsYtefkR4ASjjjXvwPYAC5WNsj
Westend Coretime
🏋️ Runtime size: 0.935 MB (980,253 bytes)
🗜 Compressed: Yes, 79.12%
✨ Reserved meta: OK - [6D, 65, 74, 61]
🎁 Metadata version: V14
🔥 Core version: coretime-westend-1009000 (coretime-westend-0.tx0.au1)
🗳️ system.setCode hash: 0xec597998dab53e6fffe963dbbe1854598e6f51a81b13609e61167d015a75910e
🗳️ authorizeUpgrade hash: 0x432e4453c5a7ac3872fdcb97c3d642d1e41e37509fa1aa32858e1681407e6638
🗳️ Blake2-256 hash: 0x03eaab8eedbc97b35b211ab6af2954b4f17ec13d27386b4da3790b109c62ec63
📦 IPFS: https://www.ipfs.io/ipfs/QmfGU5rtbkYW1ua25ff9mcJtFpPRsfd7DULNZA6JWgdMtZ
Westend Glutton
🏋️ Runtime size: 0.576 MB (603,629 bytes)
🗜 Compressed: Yes, 76.17%
✨ Reserved meta: OK - [6D, 65, 74, 61]
🎁 Metadata version: V14
🔥 Core version: glutton-westend-1009000 (glutton-westend-0.tx1.au1)
🗳️ system.setCode hash: 0x7193243316a9883819b555eb91910c6564e3721d8880ed17d1a17eae243949be
🗳️ authorizeUpgrade hash: 0x6bfeb46ffe9eb9aecbaf928dc6049b8e3197a65cfcb51e31e8740b1a0ecb084a
🗳️ Blake2-256 hash: 0xa75c2d0d45f22571a7e9564411fa4af45beabdc7124c7ecb2074ee40e1195bea
📦 IPFS: https://www.ipfs.io/ipfs/QmVWRMnumAjt9DwagjphHB8fFYqtbwo5nwhdPkPiV7KV2u
Westend People
🏋️ Runtime size: 0.938 MB (983,363 bytes)
🗜 Compressed: Yes, 79.14%
✨ Reserved meta: OK - [6D, 65, 74, 61]
🎁 Metadata version: V14
🔥 Core version: people-westend-1009000 (people-westend-0.tx0.au1)
🗳️ system.setCode hash: 0x34a20df5ac6f7582fd844108466dfe9c0d31cf6a73352e10f8b875e37ee8c9b2
🗳️ authorizeUpgrade hash: 0xeb6b3fd2fde1c67c2b4f0cccda9785c3ba7109eebe8973947ec8f64ff1d1a224
🗳️ Blake2-256 hash: 0xd6a0dcf6172aa84c8e4d850815cef8e622629b970f67dd08ec38cdf65680e394
📦 IPFS: https://www.ipfs.io/ipfs/QmTHtnfWLk28JdUYQJ8zaFVpCNbqp3DvBKhtQYYhB5Zyb4
Rococo
🏋️ Runtime size: 1.610 MB (1,687,924 bytes)
🗜 Compressed: Yes, 79.69%
✨ Reserved meta: OK - [6D, 65, 74, 61]
🎁 Metadata version: V14
🔥 Core version: rococo-1009000 (parity-rococo-v2.0-0.tx24.au0)
🗳️ system.setCode hash: 0x6816e625e4bbe14e034cdaccf231a3089c22f2feeb41d9685f82db0a53310e8d
🗳️ authorizeUpgrade hash: 0x50c6d0acf0b0138e44e0d8622fa7d68505f69ab14c3ad0465f99d5c9b32f0c56
🗳️ Blake2-256 hash: 0xb0e7f8643af6be330798d8e9a228c77adc4232a39a9f78c2e3099230665cfd69
📦 IPFS: https://www.ipfs.io/ipfs/QmfJNgagapjtjeyyReSffy8pHsrS4ruocPQXUP1VCrwPsE
Rococo AssetHub
🏋️ Runtime size: 1.256 MB (1,317,340 bytes)
🗜 Compressed: Yes, 80.44%
✨ Reserved meta: OK - [6D, 65, 74, 61]
🎁 Metadata version: V14
🔥 Core version: statemine-1009000 (statemine-0.tx14.au1)
🗳️ system.setCode hash: 0x0fdf5ece8dee4a5ba1843a35162ff189eb01da5269348c59c612c21891d6c54b
🗳️ authorizeUpgrade hash: 0x7bf464a80759214d869d8881406eef2fd1bdb8b348a2e245dea439434536bad9
🗳️ Blake2-256 hash: 0xc10a3135772b7509ff55bfb597f8da238d2b96292a9310db636c54994bb928b2
📦 IPFS: https://www.ipfs.io/ipfs/QmRVvp1KqyC4rxmtpbAhNFwX42soWzmq6LGv3CjdTx9GhT
Rococo BridgeHub
🏋️ Runtime size: 1.320 MB (1,384,500 bytes)
🗜 Compressed: Yes, 78.48%
✨ Reserved meta: OK - [6D, 65, 74, 61]
🎁 Metadata version: V14
🔥 Core version: bridge-hub-rococo-1009000 (bridge-hub-rococo-0.tx4.au1)
🗳️ system.setCode hash: 0x67951cf2ba12574ea4c0ea39101f8636592a3bee96192bc2041b43c6275238a0
🗳️ authorizeUpgrade hash: 0x09fc3e588ed056ac33b8e61db068102927896f81577a690b1736de73026c318b
🗳️ Blake2-256 hash: 0x86e87b03a8c7e35ccf41d45db71dfc3b9cb050240f82cd016886cd1fb40cb270
📦 IPFS: https://www.ipfs.io/ipfs/QmVoCMcqU8fviekBgjPbrjR1NkNXhCDA4ECQPVXd7XzGZ1
Rococo Contracts
🏋️ Runtime size: 1.259 MB (1,319,676 bytes)
🗜 Compressed: Yes, 79.73%
✨ Reserved meta: OK - [6D, 65, 74, 61]
🎁 Metadata version: V14
🔥 Core version: contracts-rococo-1009000 (contracts-rococo-0.tx6.au1)
🗳️ system.setCode hash: 0xacb85de0cc955734eaa1042e261216f7fd9099a0543022f218bb1347cad60c9b
🗳️ authorizeUpgrade hash: 0xacf7394c3a2b069da76e90f937eb5ad7b74115de74ca03ada594516bcd203204
🗳️ Blake2-256 hash: 0xbb72adf22822f80092bffc193728d6ab592793e99136ae4ed63e021ad0cbc3f0
📦 IPFS: https://www.ipfs.io/ipfs/QmbVMENwGyZTwtWGmLTxeXzPrEf1cdQhy8guNYV8yNyGAu
Rococo Coretime
🏋️ Runtime size: 0.940 MB (986,141 bytes)
🗜 Compressed: Yes, 79.08%
✨ Reserved meta: OK - [6D, 65, 74, 61]
🎁 Metadata version: V14
🔥 Core version: coretime-rococo-1009000 (coretime-rococo-0.tx0.au1)
🗳️ system.setCode hash: 0xad73d11fa61eda0ca0f14f89181a5f913181e86b9cbf6d0f0262acfc870376a7
🗳️ authorizeUpgrade hash: 0x14326845e49b7aabcce6a1b6b734adbbdd7fc0e1259edc267b3f4897f1115df5
🗳️ Blake2-256 hash: 0x0ad916eb630842eab648adae6be05297b89e134899064f447c768db811eb351d
📦 IPFS: https://www.ipfs.io/ipfs/Qmd4RdgSmaP5shtELMnrzUhEMHJDDRnEFLe19MrfSUbSq5
Rococo People
🏋️ Runtime size: 0.936 MB (981,117 bytes)
🗜 Compressed: Yes, 79.18%
✨ Reserved meta: OK - [6D, 65, 74, 61]
🎁 Metadata version: V14
🔥 Core version: people-rococo-1009000 (people-rococo-0.tx0.au1)
🗳️ system.setCode hash: 0x0d933218a2b0a6fd7ce1949e336db1f850d9c41c316871ce651134b1170b3673
🗳️ authorizeUpgrade hash: 0x7021f2e39278b7cd1caa751c01a888a94b4d33b5e506d636ec294e69598d9c56
🗳️ Blake2-256 hash: 0x351b1acb5278c62caea851be964058c21de7da2025473a80047d1e5ad73a9cfb
📦 IPFS: https://www.ipfs.io/ipfs/QmS1uW8KgWDREdgmvMneWBM22Ts7Ev5MmdMADNLPfjfgse