Skip to content
This repository has been archived by the owner on Mar 13, 2023. It is now read-only.

Use Parity LockableCurrency #1187

Merged
merged 38 commits into from May 5, 2022
Merged

Use Parity LockableCurrency #1187

merged 38 commits into from May 5, 2022

Conversation

AurevoirXavier
Copy link
Member

@AurevoirXavier AurevoirXavier commented Apr 19, 2022

Balances

Knownledge

OldBalanceLock {
    id,
    lock_for: enum LockFor {
        Common { amount },
        Staking(StakingLock {
            staking_amount,
            unbondings: Vec<Unbondings>
        })
    },
    reasons
}

Solution

If the chain can afford a large migration, we can translate the OldBalanceLock struct to:

BalanceLock {
    id,
    amount,
    reasons
}

Otherwise, make a scheduled migration.

Staking

Knowledge

StakingLedger {
    active,
    lock: Lock {
        staking_amount: active,
        unbondings: u: vec![
            Unbonding { amount: y, expired },
            ..
        ]
    },
    ..
}
ledger.active == ledger.lock.staking_amount
x = if expired { 0 } else { y }

Solution

If the chain can afford a large migration, we can translate the StakingLedger struct to:

StakingLedger {
    // I suggest to bring the `total` field back. Otherwise, we need to loop the unbonding to calculate the total staking amount every time.
    total,
    active,
    unbondings: u: vec![
        Unbonding { amount: y, expired: if e.is_zero() { 0 } else { 1 } },
        ..
    ],
    ..
}

Otherwise, ignore the ledger.lock.staking_amount filed temporarily, until the next runtime upgrade.

Final Changes

  • Replacing darwinia_support::LockableCurrency with frame_support::LockableCurrency.
  • Replacing darwinia-vesting with pallet-vesting.
  • Replacing darwinia-democracy with pallet-democracy.
  • Replacing darwinia-election-phragmen with pallet-election-phragmen.
  • Migrate Balance::Lock - (optional).
  • Migrate Staking::Ledger - (optional).
  • Migrate Balance::AccountData, add *_frozen - (optional).
  • Add Staking::withdraw_unbonded, user need to withdraw their unbonded manually.
  • Staking::unbond won't touch the existed unbonding-items even if they are expired.
  • Staking::deposit_extra won't touch the existed deposited items even if they are expired. If we want to improve the UX. Apps -> deposit-again -> pallet_utility::batch(claim_mature_deposit, deposit).
  • Staking::try_claim_deposits_with_punish only focus on the target deposit which specifies by the id(timestamp).
  • StakingLedger.*_staking_lock.staking_amount are useless now. Plan to migrate in the next version.

@AurevoirXavier AurevoirXavier added BK-Storage [Break] This changes storage; next release should be major. BK-API [Break] This changes API; next release should be major. N-Crab N-Pangolin [Network] Pangolin S-Need Audit PR contains changes to fund-managing logic that should be properly reviewed and externally audited N-Pangoro [Network] Pangoro U-Note Worthy [Uncategorized] Note Worthy and removed N-Crab N-Pangolin [Network] Pangolin N-Pangoro [Network] Pangoro labels Apr 21, 2022
@AurevoirXavier
Copy link
Member Author

Please review the rewritten logic (without struct changes) first.
Then decide if we should make some migration.

@boundless-forest
Copy link
Member

What is the next plan for this pull request? I noticed you retain the OldBalanceLock in the balance module, does that mean no migration about balance lock storage in this pull request? (It's not a easy one for me to review, hh)

frame/bridge/relay-authorities/src/lib.rs Show resolved Hide resolved
frame/support/src/structs.rs Outdated Show resolved Hide resolved
frame/claims/src/lib.rs Show resolved Hide resolved
@AurevoirXavier
Copy link
Member Author

What is the next plan for this pull request? I noticed you retain the OldBalanceLock in the balance module, does that mean no migration about balance lock storage in this pull request? (It's not a easy one for me to review, hh)

Depending on the migration performance testing.

@github-actions
Copy link

github-actions bot commented May 4, 2022

Commit 25a4b46

Pangolin

Check Runtime Version

Check Storage Prefix

Pallet Balances:
+ 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 181, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }
- 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 181, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }

Pallet Democracy:
+ 	Entry: StorageEntryMetadata { name: "NextExternal", modifier: Optional, ty: Plain(UntrackedSymbol { id: 397, marker: PhantomData }), default: [0], docs: [" The referendum to be tabled whenever it would be valid to table an external proposal.", " This happens when a referendum needs to be tabled and one of two conditions are met:", " - `LastTabledWasExternal` is `false`; or", " - `PublicProps` is empty."] }
- 	Entry: StorageEntryMetadata { name: "NextExternal", modifier: Optional, ty: Plain(UntrackedSymbol { id: 397, marker: PhantomData }), default: [0], docs: [" The referendum to be tabled whenever it would be valid to table an external proposal.", " This happens when a referendum needs to be tabled and one of two conditions are met:", " - `LastTabledWasExternal` is `false`; or", " - `PublicProps` is empty."] }
+ 	Entry: StorageEntryMetadata { name: "Preimages", modifier: Optional, ty: Map { hashers: [Identity], key: UntrackedSymbol { id: 9, marker: PhantomData }, value: UntrackedSymbol { id: 385, marker: PhantomData } }, default: [0], docs: [" Map of hashes to the proposal preimage, along with who registered it and their deposit.", " The block number is the block at which it was deposited."] }
- 	Entry: StorageEntryMetadata { name: "Preimages", modifier: Optional, ty: Map { hashers: [Identity], key: UntrackedSymbol { id: 9, marker: PhantomData }, value: UntrackedSymbol { id: 385, marker: PhantomData } }, default: [0], docs: [" Map of hashes to the proposal preimage, along with who registered it and their deposit.", " The block number is the block at which it was deposited."] }
+ 	Entry: StorageEntryMetadata { name: "ReferendumInfoOf", modifier: Optional, ty: Map { hashers: [Twox64Concat], key: UntrackedSymbol { id: 4, marker: PhantomData }, value: UntrackedSymbol { id: 386, marker: PhantomData } }, default: [0], docs: [" Information concerning any given referendum.", "", " TWOX-NOTE: SAFE as indexes are not under an attacker’s control."] }
- 	Entry: StorageEntryMetadata { name: "ReferendumInfoOf", modifier: Optional, ty: Map { hashers: [Twox64Concat], key: UntrackedSymbol { id: 4, marker: PhantomData }, value: UntrackedSymbol { id: 386, marker: PhantomData } }, default: [0], docs: [" Information concerning any given referendum.", "", " TWOX-NOTE: SAFE as indexes are not under an attacker’s control."] }
+ 	Entry: StorageEntryMetadata { name: "StorageVersion", modifier: Optional, ty: Plain(UntrackedSymbol { id: 399, marker: PhantomData }), default: [0], docs: [" Storage version of the pallet.", "", " New networks start with last version."] }
- 	Entry: StorageEntryMetadata { name: "StorageVersion", modifier: Optional, ty: Plain(UntrackedSymbol { id: 399, marker: PhantomData }), default: [0], docs: [" Storage version of the pallet.", "", " New networks start with last version."] }
+ 	Entry: StorageEntryMetadata { name: "VotingOf", modifier: Default, ty: Map { hashers: [Twox64Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 389, marker: PhantomData } }, default: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], docs: [" All votes for a particular voter. We store the balance for the number of votes that we", " have recorded. The second item is the total amount of delegations, that will be added.", "", " TWOX-NOTE: SAFE as `AccountId`s are crypto hashes anyway."] }
- 	Entry: StorageEntryMetadata { name: "VotingOf", modifier: Default, ty: Map { hashers: [Twox64Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 389, marker: PhantomData } }, default: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], docs: [" All votes for a particular voter. We store the balance for the number of votes that we", " have recorded. The second item is the total amount of delegations, that will be added.", "", " TWOX-NOTE: SAFE as `AccountId`s are crypto hashes anyway."] }

Pallet Kton:
+ 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 181, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }
- 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 181, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }

Pallet PhragmenElection:
+ 	Entry: StorageEntryMetadata { name: "Members", modifier: Default, ty: Plain(UntrackedSymbol { id: 537, marker: PhantomData }), default: [0], docs: [" The current elected members.", "", " Invariant: Always sorted based on account id."] }
- 	Entry: StorageEntryMetadata { name: "Members", modifier: Default, ty: Plain(UntrackedSymbol { id: 537, marker: PhantomData }), default: [0], docs: [" The current elected members.", "", " Invariant: Always sorted based on account id."] }
+ 	Entry: StorageEntryMetadata { name: "RunnersUp", modifier: Default, ty: Plain(UntrackedSymbol { id: 537, marker: PhantomData }), default: [0], docs: [" The current reserved runners-up.", "", " Invariant: Always sorted based on rank (worse to best). Upon removal of a member, the", " last (i.e. _best_) runner-up will be replaced."] }
- 	Entry: StorageEntryMetadata { name: "RunnersUp", modifier: Default, ty: Plain(UntrackedSymbol { id: 537, marker: PhantomData }), default: [0], docs: [" The current reserved runners-up.", "", " Invariant: Always sorted based on rank (worse to best). Upon removal of a member, the", " last (i.e. _best_) runner-up will be replaced."] }
+ 	Entry: StorageEntryMetadata { name: "Voting", modifier: Default, ty: Map { hashers: [Twox64Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 539, marker: PhantomData } }, default: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], docs: [" Votes and locked stake of a particular voter.", "", " TWOX-NOTE: SAFE as `AccountId` is a crypto hash."] }
- 	Entry: StorageEntryMetadata { name: "Voting", modifier: Default, ty: Map { hashers: [Twox64Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 539, marker: PhantomData } }, default: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], docs: [" Votes and locked stake of a particular voter.", "", " TWOX-NOTE: SAFE as `AccountId` is a crypto hash."] }

Pallet Staking:
+ 	Entry: StorageEntryMetadata { name: "ChillThreshold", modifier: Optional, ty: Plain(UntrackedSymbol { id: 328, marker: PhantomData }), default: [0], docs: [" The threshold for when users can start calling `chill_other` for other validators /", " nominators. The threshold is compared to the actual number of validators / nominators", " (`CountFor*`) in the system compared to the configured max (`Max*Count`)."] }
- 	Entry: StorageEntryMetadata { name: "ChillThreshold", modifier: Optional, ty: Plain(UntrackedSymbol { id: 328, marker: PhantomData }), default: [0], docs: [" The threshold for when users can start calling `chill_other` for other validators / nominators.", " The threshold is compared to the actual number of validators / nominators (`CountFor*`) in", " the system compared to the configured max (`Max*Count`)."] }

Pallet Vesting:
+ 	Entry: StorageEntryMetadata { name: "StorageVersion", modifier: Default, ty: Plain(UntrackedSymbol { id: 556, marker: PhantomData }), default: [0], docs: [" Storage version of the pallet.", "", " New networks start with latest version, as determined by the genesis build."] }
- 	Entry: StorageEntryMetadata { name: "StorageVersion", modifier: Default, ty: Plain(UntrackedSymbol { id: 556, marker: PhantomData }), default: [0], docs: [" Storage version of the pallet.", "", " New networks start with latest version, as determined by the genesis build."] }
+ 	Entry: StorageEntryMetadata { name: "Vesting", modifier: Optional, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 554, marker: PhantomData } }, default: [0], docs: [" Information regarding the vesting of a given account."] }
- 	Entry: StorageEntryMetadata { name: "Vesting", modifier: Optional, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 554, marker: PhantomData } }, default: [0], docs: [" Information regarding the vesting of a given account."] }​

Pangoro

Check Runtime Version

Check Storage Prefix

Pallet Balances:
+ 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 134, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }
- 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 134, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }

Pallet Bsc:
+ 	Entry: StorageEntryMetadata { name: "Authorities", modifier: Default, ty: Plain(UntrackedSymbol { id: 411, marker: PhantomData }), default: [0], docs: [" [`Authorities`] is the set of qualified authorities that currently active or activated in", " previous rounds this was added to track the older qualified authorities, to make sure we can", " verify a older header"] }
- 	Entry: StorageEntryMetadata { name: "Authorities", modifier: Default, ty: Plain(UntrackedSymbol { id: 411, marker: PhantomData }), default: [0], docs: [" [`Authorities`] is the set of qualified authorities that currently active or activated in previous rounds", " this was added to track the older qualified authorities, to make sure we can verify a older header"] }
+ 	Entry: StorageEntryMetadata { name: "AuthoritiesOfRound", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 8, marker: PhantomData }, value: UntrackedSymbol { id: 239, marker: PhantomData } }, default: [0], docs: [" [`AuthoritiesOfRound`] use a `Map<u64, Vec<u32>>` structure to track the active authorities", " in every epoch the key is `checkpoint.number / epoch_length`", " the value is the index of authorities which extracted from checkpoint block header", " So the the order of authorities vector **MUST** be stable."] }
- 	Entry: StorageEntryMetadata { name: "AuthoritiesOfRound", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 8, marker: PhantomData }, value: UntrackedSymbol { id: 239, marker: PhantomData } }, default: [0], docs: [" [`AuthoritiesOfRound`] use a `Map<u64, Vec<u32>>` structure to track the active authorities in every epoch", " the key is `checkpoint.number / epoch_length`", " the value is the index of authorities which extracted from checkpoint block header", " So the the order of authorities vector **MUST** be stable."] }

Pallet Kton:
+ 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 134, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }
- 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 134, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }

Pallet Staking:
+ 	Entry: StorageEntryMetadata { name: "ChillThreshold", modifier: Optional, ty: Plain(UntrackedSymbol { id: 260, marker: PhantomData }), default: [0], docs: [" The threshold for when users can start calling `chill_other` for other validators /", " nominators. The threshold is compared to the actual number of validators / nominators", " (`CountFor*`) in the system compared to the configured max (`Max*Count`)."] }
- 	Entry: StorageEntryMetadata { name: "ChillThreshold", modifier: Optional, ty: Plain(UntrackedSymbol { id: 260, marker: PhantomData }), default: [0], docs: [" The threshold for when users can start calling `chill_other` for other validators / nominators.", " The threshold is compared to the actual number of validators / nominators (`CountFor*`) in", " the system compared to the configured max (`Max*Count`)."] }​
Commit 9999095

Pangolin

Check Runtime Version

Check Storage Prefix

Pallet Balances:
+ 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 181, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }
- 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 181, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }

Pallet Democracy:
+ 	Entry: StorageEntryMetadata { name: "NextExternal", modifier: Optional, ty: Plain(UntrackedSymbol { id: 397, marker: PhantomData }), default: [0], docs: [" The referendum to be tabled whenever it would be valid to table an external proposal.", " This happens when a referendum needs to be tabled and one of two conditions are met:", " - `LastTabledWasExternal` is `false`; or", " - `PublicProps` is empty."] }
- 	Entry: StorageEntryMetadata { name: "NextExternal", modifier: Optional, ty: Plain(UntrackedSymbol { id: 397, marker: PhantomData }), default: [0], docs: [" The referendum to be tabled whenever it would be valid to table an external proposal.", " This happens when a referendum needs to be tabled and one of two conditions are met:", " - `LastTabledWasExternal` is `false`; or", " - `PublicProps` is empty."] }
+ 	Entry: StorageEntryMetadata { name: "Preimages", modifier: Optional, ty: Map { hashers: [Identity], key: UntrackedSymbol { id: 9, marker: PhantomData }, value: UntrackedSymbol { id: 385, marker: PhantomData } }, default: [0], docs: [" Map of hashes to the proposal preimage, along with who registered it and their deposit.", " The block number is the block at which it was deposited."] }
- 	Entry: StorageEntryMetadata { name: "Preimages", modifier: Optional, ty: Map { hashers: [Identity], key: UntrackedSymbol { id: 9, marker: PhantomData }, value: UntrackedSymbol { id: 385, marker: PhantomData } }, default: [0], docs: [" Map of hashes to the proposal preimage, along with who registered it and their deposit.", " The block number is the block at which it was deposited."] }
+ 	Entry: StorageEntryMetadata { name: "ReferendumInfoOf", modifier: Optional, ty: Map { hashers: [Twox64Concat], key: UntrackedSymbol { id: 4, marker: PhantomData }, value: UntrackedSymbol { id: 386, marker: PhantomData } }, default: [0], docs: [" Information concerning any given referendum.", "", " TWOX-NOTE: SAFE as indexes are not under an attacker’s control."] }
- 	Entry: StorageEntryMetadata { name: "ReferendumInfoOf", modifier: Optional, ty: Map { hashers: [Twox64Concat], key: UntrackedSymbol { id: 4, marker: PhantomData }, value: UntrackedSymbol { id: 386, marker: PhantomData } }, default: [0], docs: [" Information concerning any given referendum.", "", " TWOX-NOTE: SAFE as indexes are not under an attacker’s control."] }
+ 	Entry: StorageEntryMetadata { name: "StorageVersion", modifier: Optional, ty: Plain(UntrackedSymbol { id: 399, marker: PhantomData }), default: [0], docs: [" Storage version of the pallet.", "", " New networks start with last version."] }
- 	Entry: StorageEntryMetadata { name: "StorageVersion", modifier: Optional, ty: Plain(UntrackedSymbol { id: 399, marker: PhantomData }), default: [0], docs: [" Storage version of the pallet.", "", " New networks start with last version."] }
+ 	Entry: StorageEntryMetadata { name: "VotingOf", modifier: Default, ty: Map { hashers: [Twox64Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 389, marker: PhantomData } }, default: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], docs: [" All votes for a particular voter. We store the balance for the number of votes that we", " have recorded. The second item is the total amount of delegations, that will be added.", "", " TWOX-NOTE: SAFE as `AccountId`s are crypto hashes anyway."] }
- 	Entry: StorageEntryMetadata { name: "VotingOf", modifier: Default, ty: Map { hashers: [Twox64Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 389, marker: PhantomData } }, default: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], docs: [" All votes for a particular voter. We store the balance for the number of votes that we", " have recorded. The second item is the total amount of delegations, that will be added.", "", " TWOX-NOTE: SAFE as `AccountId`s are crypto hashes anyway."] }

Pallet Kton:
+ 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 181, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }
- 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 181, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }

Pallet PhragmenElection:
+ 	Entry: StorageEntryMetadata { name: "Members", modifier: Default, ty: Plain(UntrackedSymbol { id: 537, marker: PhantomData }), default: [0], docs: [" The current elected members.", "", " Invariant: Always sorted based on account id."] }
- 	Entry: StorageEntryMetadata { name: "Members", modifier: Default, ty: Plain(UntrackedSymbol { id: 537, marker: PhantomData }), default: [0], docs: [" The current elected members.", "", " Invariant: Always sorted based on account id."] }
+ 	Entry: StorageEntryMetadata { name: "RunnersUp", modifier: Default, ty: Plain(UntrackedSymbol { id: 537, marker: PhantomData }), default: [0], docs: [" The current reserved runners-up.", "", " Invariant: Always sorted based on rank (worse to best). Upon removal of a member, the", " last (i.e. _best_) runner-up will be replaced."] }
- 	Entry: StorageEntryMetadata { name: "RunnersUp", modifier: Default, ty: Plain(UntrackedSymbol { id: 537, marker: PhantomData }), default: [0], docs: [" The current reserved runners-up.", "", " Invariant: Always sorted based on rank (worse to best). Upon removal of a member, the", " last (i.e. _best_) runner-up will be replaced."] }
+ 	Entry: StorageEntryMetadata { name: "Voting", modifier: Default, ty: Map { hashers: [Twox64Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 539, marker: PhantomData } }, default: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], docs: [" Votes and locked stake of a particular voter.", "", " TWOX-NOTE: SAFE as `AccountId` is a crypto hash."] }
- 	Entry: StorageEntryMetadata { name: "Voting", modifier: Default, ty: Map { hashers: [Twox64Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 539, marker: PhantomData } }, default: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], docs: [" Votes and locked stake of a particular voter.", "", " TWOX-NOTE: SAFE as `AccountId` is a crypto hash."] }

Pallet Staking:
+ 	Entry: StorageEntryMetadata { name: "ChillThreshold", modifier: Optional, ty: Plain(UntrackedSymbol { id: 328, marker: PhantomData }), default: [0], docs: [" The threshold for when users can start calling `chill_other` for other validators /", " nominators. The threshold is compared to the actual number of validators / nominators", " (`CountFor*`) in the system compared to the configured max (`Max*Count`)."] }
- 	Entry: StorageEntryMetadata { name: "ChillThreshold", modifier: Optional, ty: Plain(UntrackedSymbol { id: 328, marker: PhantomData }), default: [0], docs: [" The threshold for when users can start calling `chill_other` for other validators / nominators.", " The threshold is compared to the actual number of validators / nominators (`CountFor*`) in", " the system compared to the configured max (`Max*Count`)."] }

Pallet Vesting:
+ 	Entry: StorageEntryMetadata { name: "StorageVersion", modifier: Default, ty: Plain(UntrackedSymbol { id: 556, marker: PhantomData }), default: [0], docs: [" Storage version of the pallet.", "", " New networks start with latest version, as determined by the genesis build."] }
- 	Entry: StorageEntryMetadata { name: "StorageVersion", modifier: Default, ty: Plain(UntrackedSymbol { id: 556, marker: PhantomData }), default: [0], docs: [" Storage version of the pallet.", "", " New networks start with latest version, as determined by the genesis build."] }
+ 	Entry: StorageEntryMetadata { name: "Vesting", modifier: Optional, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 554, marker: PhantomData } }, default: [0], docs: [" Information regarding the vesting of a given account."] }
- 	Entry: StorageEntryMetadata { name: "Vesting", modifier: Optional, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 554, marker: PhantomData } }, default: [0], docs: [" Information regarding the vesting of a given account."] }​

Pangoro

Check Runtime Version

Check Storage Prefix

Pallet Balances:
+ 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 134, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }
- 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 134, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }

Pallet Bsc:
+ 	Entry: StorageEntryMetadata { name: "Authorities", modifier: Default, ty: Plain(UntrackedSymbol { id: 411, marker: PhantomData }), default: [0], docs: [" [`Authorities`] is the set of qualified authorities that currently active or activated in", " previous rounds this was added to track the older qualified authorities, to make sure we can", " verify a older header"] }
- 	Entry: StorageEntryMetadata { name: "Authorities", modifier: Default, ty: Plain(UntrackedSymbol { id: 411, marker: PhantomData }), default: [0], docs: [" [`Authorities`] is the set of qualified authorities that currently active or activated in previous rounds", " this was added to track the older qualified authorities, to make sure we can verify a older header"] }
+ 	Entry: StorageEntryMetadata { name: "AuthoritiesOfRound", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 8, marker: PhantomData }, value: UntrackedSymbol { id: 239, marker: PhantomData } }, default: [0], docs: [" [`AuthoritiesOfRound`] use a `Map<u64, Vec<u32>>` structure to track the active authorities", " in every epoch the key is `checkpoint.number / epoch_length`", " the value is the index of authorities which extracted from checkpoint block header", " So the the order of authorities vector **MUST** be stable."] }
- 	Entry: StorageEntryMetadata { name: "AuthoritiesOfRound", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 8, marker: PhantomData }, value: UntrackedSymbol { id: 239, marker: PhantomData } }, default: [0], docs: [" [`AuthoritiesOfRound`] use a `Map<u64, Vec<u32>>` structure to track the active authorities in every epoch", " the key is `checkpoint.number / epoch_length`", " the value is the index of authorities which extracted from checkpoint block header", " So the the order of authorities vector **MUST** be stable."] }

Pallet Kton:
+ 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 134, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }
- 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 134, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }

Pallet Staking:
+ 	Entry: StorageEntryMetadata { name: "ChillThreshold", modifier: Optional, ty: Plain(UntrackedSymbol { id: 260, marker: PhantomData }), default: [0], docs: [" The threshold for when users can start calling `chill_other` for other validators /", " nominators. The threshold is compared to the actual number of validators / nominators", " (`CountFor*`) in the system compared to the configured max (`Max*Count`)."] }
- 	Entry: StorageEntryMetadata { name: "ChillThreshold", modifier: Optional, ty: Plain(UntrackedSymbol { id: 260, marker: PhantomData }), default: [0], docs: [" The threshold for when users can start calling `chill_other` for other validators / nominators.", " The threshold is compared to the actual number of validators / nominators (`CountFor*`) in", " the system compared to the configured max (`Max*Count`)."] }​
Commit d78be05

Pangolin

Check Runtime Version

Check Storage Prefix

Pallet Balances:
+ 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 181, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }
- 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 181, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }

Pallet Democracy:
+ 	Entry: StorageEntryMetadata { name: "NextExternal", modifier: Optional, ty: Plain(UntrackedSymbol { id: 396, marker: PhantomData }), default: [0], docs: [" The referendum to be tabled whenever it would be valid to table an external proposal.", " This happens when a referendum needs to be tabled and one of two conditions are met:", " - `LastTabledWasExternal` is `false`; or", " - `PublicProps` is empty."] }
- 	Entry: StorageEntryMetadata { name: "NextExternal", modifier: Optional, ty: Plain(UntrackedSymbol { id: 397, marker: PhantomData }), default: [0], docs: [" The referendum to be tabled whenever it would be valid to table an external proposal.", " This happens when a referendum needs to be tabled and one of two conditions are met:", " - `LastTabledWasExternal` is `false`; or", " - `PublicProps` is empty."] }
+ 	Entry: StorageEntryMetadata { name: "Preimages", modifier: Optional, ty: Map { hashers: [Identity], key: UntrackedSymbol { id: 9, marker: PhantomData }, value: UntrackedSymbol { id: 384, marker: PhantomData } }, default: [0], docs: [" Map of hashes to the proposal preimage, along with who registered it and their deposit.", " The block number is the block at which it was deposited."] }
- 	Entry: StorageEntryMetadata { name: "Preimages", modifier: Optional, ty: Map { hashers: [Identity], key: UntrackedSymbol { id: 9, marker: PhantomData }, value: UntrackedSymbol { id: 385, marker: PhantomData } }, default: [0], docs: [" Map of hashes to the proposal preimage, along with who registered it and their deposit.", " The block number is the block at which it was deposited."] }
+ 	Entry: StorageEntryMetadata { name: "ReferendumInfoOf", modifier: Optional, ty: Map { hashers: [Twox64Concat], key: UntrackedSymbol { id: 4, marker: PhantomData }, value: UntrackedSymbol { id: 385, marker: PhantomData } }, default: [0], docs: [" Information concerning any given referendum.", "", " TWOX-NOTE: SAFE as indexes are not under an attacker’s control."] }
- 	Entry: StorageEntryMetadata { name: "ReferendumInfoOf", modifier: Optional, ty: Map { hashers: [Twox64Concat], key: UntrackedSymbol { id: 4, marker: PhantomData }, value: UntrackedSymbol { id: 386, marker: PhantomData } }, default: [0], docs: [" Information concerning any given referendum.", "", " TWOX-NOTE: SAFE as indexes are not under an attacker’s control."] }
+ 	Entry: StorageEntryMetadata { name: "StorageVersion", modifier: Optional, ty: Plain(UntrackedSymbol { id: 398, marker: PhantomData }), default: [0], docs: [" Storage version of the pallet.", "", " New networks start with last version."] }
- 	Entry: StorageEntryMetadata { name: "StorageVersion", modifier: Optional, ty: Plain(UntrackedSymbol { id: 399, marker: PhantomData }), default: [0], docs: [" Storage version of the pallet.", "", " New networks start with last version."] }
+ 	Entry: StorageEntryMetadata { name: "VotingOf", modifier: Default, ty: Map { hashers: [Twox64Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 388, marker: PhantomData } }, default: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], docs: [" All votes for a particular voter. We store the balance for the number of votes that we", " have recorded. The second item is the total amount of delegations, that will be added.", "", " TWOX-NOTE: SAFE as `AccountId`s are crypto hashes anyway."] }
- 	Entry: StorageEntryMetadata { name: "VotingOf", modifier: Default, ty: Map { hashers: [Twox64Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 389, marker: PhantomData } }, default: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], docs: [" All votes for a particular voter. We store the balance for the number of votes that we", " have recorded. The second item is the total amount of delegations, that will be added.", "", " TWOX-NOTE: SAFE as `AccountId`s are crypto hashes anyway."] }

Pallet Kton:
+ 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 181, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }
- 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 181, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }

Pallet PhragmenElection:
+ 	Entry: StorageEntryMetadata { name: "Members", modifier: Default, ty: Plain(UntrackedSymbol { id: 536, marker: PhantomData }), default: [0], docs: [" The current elected members.", "", " Invariant: Always sorted based on account id."] }
- 	Entry: StorageEntryMetadata { name: "Members", modifier: Default, ty: Plain(UntrackedSymbol { id: 537, marker: PhantomData }), default: [0], docs: [" The current elected members.", "", " Invariant: Always sorted based on account id."] }
+ 	Entry: StorageEntryMetadata { name: "RunnersUp", modifier: Default, ty: Plain(UntrackedSymbol { id: 536, marker: PhantomData }), default: [0], docs: [" The current reserved runners-up.", "", " Invariant: Always sorted based on rank (worse to best). Upon removal of a member, the", " last (i.e. _best_) runner-up will be replaced."] }
- 	Entry: StorageEntryMetadata { name: "RunnersUp", modifier: Default, ty: Plain(UntrackedSymbol { id: 537, marker: PhantomData }), default: [0], docs: [" The current reserved runners-up.", "", " Invariant: Always sorted based on rank (worse to best). Upon removal of a member, the", " last (i.e. _best_) runner-up will be replaced."] }
+ 	Entry: StorageEntryMetadata { name: "Voting", modifier: Default, ty: Map { hashers: [Twox64Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 538, marker: PhantomData } }, default: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], docs: [" Votes and locked stake of a particular voter.", "", " TWOX-NOTE: SAFE as `AccountId` is a crypto hash."] }
- 	Entry: StorageEntryMetadata { name: "Voting", modifier: Default, ty: Map { hashers: [Twox64Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 539, marker: PhantomData } }, default: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], docs: [" Votes and locked stake of a particular voter.", "", " TWOX-NOTE: SAFE as `AccountId` is a crypto hash."] }

Pallet Staking:
+ 	Entry: StorageEntryMetadata { name: "ChillThreshold", modifier: Optional, ty: Plain(UntrackedSymbol { id: 327, marker: PhantomData }), default: [0], docs: [" The threshold for when users can start calling `chill_other` for other validators /", " nominators. The threshold is compared to the actual number of validators / nominators", " (`CountFor*`) in the system compared to the configured max (`Max*Count`)."] }
- 	Entry: StorageEntryMetadata { name: "ChillThreshold", modifier: Optional, ty: Plain(UntrackedSymbol { id: 328, marker: PhantomData }), default: [0], docs: [" The threshold for when users can start calling `chill_other` for other validators / nominators.", " The threshold is compared to the actual number of validators / nominators (`CountFor*`) in", " the system compared to the configured max (`Max*Count`)."] }

Pallet Vesting:
+ 	Entry: StorageEntryMetadata { name: "StorageVersion", modifier: Default, ty: Plain(UntrackedSymbol { id: 555, marker: PhantomData }), default: [0], docs: [" Storage version of the pallet.", "", " New networks start with latest version, as determined by the genesis build."] }
- 	Entry: StorageEntryMetadata { name: "StorageVersion", modifier: Default, ty: Plain(UntrackedSymbol { id: 556, marker: PhantomData }), default: [0], docs: [" Storage version of the pallet.", "", " New networks start with latest version, as determined by the genesis build."] }
+ 	Entry: StorageEntryMetadata { name: "Vesting", modifier: Optional, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 553, marker: PhantomData } }, default: [0], docs: [" Information regarding the vesting of a given account."] }
- 	Entry: StorageEntryMetadata { name: "Vesting", modifier: Optional, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 554, marker: PhantomData } }, default: [0], docs: [" Information regarding the vesting of a given account."] }​

Pangoro

Check Runtime Version

Check Storage Prefix

Pallet Balances:
+ 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 134, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }
- 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 134, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }

Pallet Bsc:
+ 	Entry: StorageEntryMetadata { name: "Authorities", modifier: Default, ty: Plain(UntrackedSymbol { id: 410, marker: PhantomData }), default: [0], docs: [" [`Authorities`] is the set of qualified authorities that currently active or activated in", " previous rounds this was added to track the older qualified authorities, to make sure we can", " verify a older header"] }
- 	Entry: StorageEntryMetadata { name: "Authorities", modifier: Default, ty: Plain(UntrackedSymbol { id: 411, marker: PhantomData }), default: [0], docs: [" [`Authorities`] is the set of qualified authorities that currently active or activated in previous rounds", " this was added to track the older qualified authorities, to make sure we can verify a older header"] }
+ 	Entry: StorageEntryMetadata { name: "AuthoritiesOfRound", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 8, marker: PhantomData }, value: UntrackedSymbol { id: 238, marker: PhantomData } }, default: [0], docs: [" [`AuthoritiesOfRound`] use a `Map<u64, Vec<u32>>` structure to track the active authorities", " in every epoch the key is `checkpoint.number / epoch_length`", " the value is the index of authorities which extracted from checkpoint block header", " So the the order of authorities vector **MUST** be stable."] }
- 	Entry: StorageEntryMetadata { name: "AuthoritiesOfRound", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 8, marker: PhantomData }, value: UntrackedSymbol { id: 239, marker: PhantomData } }, default: [0], docs: [" [`AuthoritiesOfRound`] use a `Map<u64, Vec<u32>>` structure to track the active authorities in every epoch", " the key is `checkpoint.number / epoch_length`", " the value is the index of authorities which extracted from checkpoint block header", " So the the order of authorities vector **MUST** be stable."] }

Pallet Kton:
+ 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 134, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }
- 	Entry: StorageEntryMetadata { name: "Locks", modifier: Default, ty: Map { hashers: [Blake2_128Concat], key: UntrackedSymbol { id: 0, marker: PhantomData }, value: UntrackedSymbol { id: 134, marker: PhantomData } }, default: [0], docs: [" Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock."] }

Pallet Staking:
+ 	Entry: StorageEntryMetadata { name: "ChillThreshold", modifier: Optional, ty: Plain(UntrackedSymbol { id: 259, marker: PhantomData }), default: [0], docs: [" The threshold for when users can start calling `chill_other` for other validators /", " nominators. The threshold is compared to the actual number of validators / nominators", " (`CountFor*`) in the system compared to the configured max (`Max*Count`)."] }
- 	Entry: StorageEntryMetadata { name: "ChillThreshold", modifier: Optional, ty: Plain(UntrackedSymbol { id: 260, marker: PhantomData }), default: [0], docs: [" The threshold for when users can start calling `chill_other` for other validators / nominators.", " The threshold is compared to the actual number of validators / nominators (`CountFor*`) in", " the system compared to the configured max (`Max*Count`)."] }​

@hackfisher
Copy link
Contributor

Let's do the OldBalanceLock migration first, and leave other migrations to later runtime upgrade.

@hackfisher hackfisher merged commit 3bc659d into main May 5, 2022
@hackfisher hackfisher deleted the xavier-currency branch May 5, 2022 14:01
@AurevoirXavier AurevoirXavier added S-Audited [Security] Audited and removed S-Need Audit PR contains changes to fund-managing logic that should be properly reviewed and externally audited labels May 5, 2022
@AurevoirXavier AurevoirXavier linked an issue May 17, 2022 that may be closed by this pull request
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
BK-API [Break] This changes API; next release should be major. BK-Storage [Break] This changes storage; next release should be major. S-Audited [Security] Audited U-Note Worthy [Uncategorized] Note Worthy
Projects
No open projects
Status: Done/No Companion
3 participants