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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
use super::pallet::{Config, Pallet};
use common::{fixed, Fixed, XSTUSD};
use frame_support::pallet_prelude::{Get, StorageVersion, ValueQuery};
use frame_support::traits::OnRuntimeUpgrade;
use frame_support::{log::info, traits::GetStorageVersion as _, weights::Weight};
use sp_std::collections::btree_set::BTreeSet;
#[cfg(feature = "try-runtime")]
use sp_std::prelude::Vec;
use crate::{EnabledSymbols, EnabledSynthetics as NewEnabledSynthetics, SyntheticInfo};
#[frame_support::storage_alias]
type BaseFee<T: Config> = StorageValue<Pallet<T>, Fixed, ValueQuery>;
#[frame_support::storage_alias]
type PermissionedTechAccount<T: Config> =
StorageValue<Pallet<T>, <T as technical::Config>::TechAccountId, ValueQuery>;
#[frame_support::storage_alias]
type EnabledSynthetics<T: Config> =
StorageValue<Pallet<T>, BTreeSet<<T as assets::Config>::AssetId>, ValueQuery>;
pub struct CustomSyntheticsUpgrade<T>(core::marker::PhantomData<T>);
impl<T> OnRuntimeUpgrade for CustomSyntheticsUpgrade<T>
where
T: crate::Config,
<T as frame_system::Config>::AccountId: From<[u8; 32]>,
{
fn on_runtime_upgrade() -> Weight {
if Pallet::<T>::on_chain_storage_version() >= 2 {
info!("Migration to version 2 has already been applied");
return Weight::zero();
}
if BaseFee::<T>::exists() {
BaseFee::<T>::kill();
}
if PermissionedTechAccount::<T>::exists() {
PermissionedTechAccount::<T>::kill();
}
if EnabledSynthetics::<T>::exists() {
EnabledSynthetics::<T>::kill();
}
let xstusd_symbol = T::Symbol::from(common::SymbolName::usd());
NewEnabledSynthetics::<T>::insert(
T::AssetId::from(XSTUSD),
SyntheticInfo {
reference_symbol: xstusd_symbol.clone(),
fee_ratio: fixed!(0.00666),
},
);
EnabledSymbols::<T>::insert(xstusd_symbol, T::AssetId::from(XSTUSD));
StorageVersion::new(2).put::<Pallet<T>>();
T::DbWeight::get().reads_writes(0, 2)
}
#[cfg(feature = "try-runtime")]
fn pre_upgrade() -> Result<Vec<u8>, &'static str> {
frame_support::ensure!(
Pallet::<T>::on_chain_storage_version() == 1,
"must upgrade linearly"
);
Ok(Vec::new())
}
#[cfg(feature = "try-runtime")]
fn post_upgrade(_state: Vec<u8>) -> Result<(), &'static str> {
frame_support::ensure!(
Pallet::<T>::on_chain_storage_version() == 2,
"should be upgraded to version 2"
);
Ok(())
}
}
#[cfg(test)]
mod tests;