pallet_recovery/migrations/
v0.rs1use codec::{Decode, Encode, MaxEncodedLen};
23use frame::{
24 deps::{
25 sp_io::hashing::blake2_256,
26 sp_runtime::traits::{One, TrailingZeroInput},
27 },
28 traits::BlockNumberProvider,
29};
30use frame_support::{
31 storage_alias,
32 traits::{Currency, ReservableCurrency},
33 Blake2_128Concat, BoundedVec, Twox64Concat,
34};
35use scale_info::TypeInfo;
36
37pub trait MigrationConfig: crate::pallet::Config {
39 type Currency: ReservableCurrency<Self::AccountId, Balance = crate::BalanceOf<Self>>;
41}
42
43pub fn multi_account_id<AccountId: Encode + Decode>(
50 who: &[AccountId],
51 threshold: u16,
52) -> AccountId {
53 let entropy = (b"modlpy/utilisuba", who, threshold).using_encoded(blake2_256);
54 Decode::decode(&mut TrailingZeroInput::new(entropy.as_ref()))
55 .expect("infinite length input; no invalid inputs for type; qed")
56}
57
58pub type BalanceOf<T> =
60 <<T as MigrationConfig>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance;
61
62pub type BlockNumberFromProviderOf<T> =
64 <<T as crate::pallet::Config>::BlockNumberProvider as BlockNumberProvider>::BlockNumber;
65
66pub type FriendsOf<T> = BoundedVec<
68 <T as frame_system::Config>::AccountId,
69 <T as crate::pallet::Config>::MaxFriendsPerConfig,
70>;
71
72#[derive(Clone, Eq, PartialEq, Encode, Decode, Default, TypeInfo, MaxEncodedLen)]
74pub struct RecoveryConfig<BlockNumber, Balance, Friends> {
75 pub delay_period: BlockNumber,
78 pub deposit: Balance,
81 pub friends: Friends,
83 pub threshold: u16,
85}
86
87impl<BlockNumber: Clone + Ord + One, Balance, Friends>
88 RecoveryConfig<BlockNumber, Balance, Friends>
89{
90 pub fn into_v1_friend_group<AccountId>(
92 self,
93 inheritor: AccountId,
94 ) -> crate::FriendGroup<BlockNumber, AccountId, Friends> {
95 crate::FriendGroup {
96 friends: self.friends,
97 friends_needed: self.threshold as u32,
98 inheritor,
99 inheritance_delay: self.delay_period.clone(),
100 inheritance_priority: 0,
101 cancel_delay: self.delay_period.max(One::one()),
103 }
104 }
105}
106
107#[derive(Clone, Eq, PartialEq, Encode, Decode, Default, TypeInfo, MaxEncodedLen)]
109pub struct ActiveRecovery<BlockNumber, Balance, Friends> {
110 pub created: BlockNumber,
112 pub deposit: Balance,
115 pub friends: Friends,
117}
118
119#[storage_alias]
121pub type Recoverable<T: MigrationConfig> = StorageMap<
122 crate::pallet::Pallet<T>,
123 Twox64Concat,
124 <T as frame_system::Config>::AccountId,
125 RecoveryConfig<BlockNumberFromProviderOf<T>, BalanceOf<T>, FriendsOf<T>>,
126>;
127
128#[storage_alias]
133pub type ActiveRecoveries<T: MigrationConfig> = StorageDoubleMap<
134 crate::pallet::Pallet<T>,
135 Twox64Concat,
136 <T as frame_system::Config>::AccountId,
137 Twox64Concat,
138 <T as frame_system::Config>::AccountId,
139 ActiveRecovery<BlockNumberFromProviderOf<T>, BalanceOf<T>, FriendsOf<T>>,
140>;
141
142#[storage_alias]
146pub type Proxy<T: MigrationConfig> = StorageMap<
147 crate::pallet::Pallet<T>,
148 Blake2_128Concat,
149 <T as frame_system::Config>::AccountId,
150 <T as frame_system::Config>::AccountId,
151>;