Expand description
Pallet State Trie Migration
Reads and writes all keys and values in the entire state in a systematic way. This is useful for
upgrading a chain to [sp-core::StateVersion::V1
], where all keys need to be touched.
Migration Types
This pallet provides 2 ways to do this, each of which is suited for a particular use-case, and can be enabled independently.
Auto migration
This system will try and migrate all keys by continuously using on_initialize
. It is only
sensible for a relay chain or a solo chain, where going slightly over weight is not a problem.
It can be configured so that the migration takes at most n
items and tries to not go over x
bytes, but the latter is not guaranteed.
For example, if a chain contains keys of 1 byte size, the on_initialize
could read up to x - 1
bytes from n
different keys, while the next key is suddenly :code:
, and there is no way
to bail out of this.
Signed migration
As a backup, the migration process can be set in motion via signed transactions that basically say in advance how many items and how many bytes they will consume, and pay for it as well. This can be a good safe alternative, if the former system is not desirable.
The (minor) caveat of this approach is that we cannot know in advance how many bytes reading a
certain number of keys will incur. To overcome this, the runtime needs to configure this pallet
with a SignedDepositPerItem
. This is the per-item deposit that the origin of the signed
migration transactions need to have in their account (on top of the normal fee) and if the size
witness data that they claim is incorrect, this deposit is slashed.
Initially, this pallet does not contain any auto migration. They must be manually enabled by the
ControlOrigin
.
Re-exports
pub use pallet::*;
Modules
- The
pallet
module in each FRAME pallet hosts the most important items needed to construct this pallet. - Autogenerated weights for pallet_state_trie_migration