1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
use super::*;
pub mod v1 {
use super::*;
#[cfg(feature = "try-runtime")]
pub fn pre_migrate<T: Config>() -> Result<(), &'static str> {
assert!(StorageVersion::<T>::get() == Releases::V0, "Storage version too high.");
log::debug!(
target: "runtime::vesting",
"migration: Vesting storage version v1 PRE migration checks succesful!"
);
Ok(())
}
pub fn migrate<T: Config>() -> Weight {
let mut reads_writes = 0;
Vesting::<T>::translate::<VestingInfo<BalanceOf<T>, T::BlockNumber>, _>(
|_key, vesting_info| {
reads_writes += 1;
let v: Option<
BoundedVec<
VestingInfo<BalanceOf<T>, T::BlockNumber>,
MaxVestingSchedulesGet<T>,
>,
> = vec![vesting_info].try_into().ok();
if v.is_none() {
log::warn!(
target: "runtime::vesting",
"migration: Failed to move a vesting schedule into a BoundedVec"
);
}
v
},
);
T::DbWeight::get().reads_writes(reads_writes, reads_writes)
}
#[cfg(feature = "try-runtime")]
pub fn post_migrate<T: Config>() -> Result<(), &'static str> {
assert_eq!(StorageVersion::<T>::get(), Releases::V1);
for (_key, schedules) in Vesting::<T>::iter() {
assert!(
schedules.len() >= 1,
"A bounded vec with incorrect count of items was created."
);
for s in schedules {
if !s.is_valid() {
log::warn!(
target: "runtime::vesting",
"migration: A schedule does not pass new validation logic.",
)
}
}
}
log::debug!(
target: "runtime::vesting",
"migration: Vesting storage version v1 POST migration checks successful!"
);
Ok(())
}
}