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

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

Macros