Polkadot v1.9.0
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