pallet_staking_async_parachain_runtime/governance/
origins.rs1pub use pallet_custom_origins::*;
21
22#[frame_support::pallet]
23pub mod pallet_custom_origins {
24 use crate::{Balance, CENTS, GRAND};
25 use frame_support::pallet_prelude::*;
26
27 #[pallet::config]
28 pub trait Config: frame_system::Config {}
29
30 #[pallet::pallet]
31 pub struct Pallet<T>(_);
32
33 #[derive(
34 PartialEq,
35 Eq,
36 Clone,
37 MaxEncodedLen,
38 Encode,
39 Decode,
40 DecodeWithMemTracking,
41 TypeInfo,
42 RuntimeDebug,
43 )]
44 #[pallet::origin]
45 pub enum Origin {
46 StakingAdmin,
48 Treasurer,
50 FellowshipAdmin,
52 GeneralAdmin,
54 AuctionAdmin,
56 LeaseAdmin,
58 ReferendumCanceller,
60 ReferendumKiller,
62 SmallTipper,
64 BigTipper,
66 SmallSpender,
68 MediumSpender,
70 BigSpender,
72 WhitelistedCaller,
74 FellowshipInitiates,
76 Fellows,
78 FellowshipExperts,
80 FellowshipMasters,
82 Fellowship1Dan,
84 Fellowship2Dan,
86 Fellowship3Dan,
88 Fellowship4Dan,
90 Fellowship5Dan,
92 Fellowship6Dan,
94 Fellowship7Dan,
96 Fellowship8Dan,
98 Fellowship9Dan,
100 }
101
102 macro_rules! decl_unit_ensures {
103 ( $name:ident: $success_type:ty = $success:expr ) => {
104 pub struct $name;
105 impl<O: Into<Result<Origin, O>> + From<Origin>>
106 EnsureOrigin<O> for $name
107 {
108 type Success = $success_type;
109 fn try_origin(o: O) -> Result<Self::Success, O> {
110 o.into().and_then(|o| match o {
111 Origin::$name => Ok($success),
112 r => Err(O::from(r)),
113 })
114 }
115 #[cfg(feature = "runtime-benchmarks")]
116 fn try_successful_origin() -> Result<O, ()> {
117 Ok(O::from(Origin::$name))
118 }
119 }
120 };
121 ( $name:ident ) => { decl_unit_ensures! { $name : () = () } };
122 ( $name:ident: $success_type:ty = $success:expr, $( $rest:tt )* ) => {
123 decl_unit_ensures! { $name: $success_type = $success }
124 decl_unit_ensures! { $( $rest )* }
125 };
126 ( $name:ident, $( $rest:tt )* ) => {
127 decl_unit_ensures! { $name }
128 decl_unit_ensures! { $( $rest )* }
129 };
130 () => {}
131 }
132 decl_unit_ensures!(
133 StakingAdmin,
134 Treasurer,
135 FellowshipAdmin,
136 GeneralAdmin,
137 AuctionAdmin,
138 LeaseAdmin,
139 ReferendumCanceller,
140 ReferendumKiller,
141 WhitelistedCaller,
142 FellowshipInitiates: u16 = 0,
143 Fellows: u16 = 3,
144 FellowshipExperts: u16 = 5,
145 FellowshipMasters: u16 = 7,
146 );
147
148 macro_rules! decl_ensure {
149 (
150 $vis:vis type $name:ident: EnsureOrigin<Success = $success_type:ty> {
151 $( $item:ident = $success:expr, )*
152 }
153 ) => {
154 $vis struct $name;
155 impl<O: Into<Result<Origin, O>> + From<Origin>>
156 EnsureOrigin<O> for $name
157 {
158 type Success = $success_type;
159 fn try_origin(o: O) -> Result<Self::Success, O> {
160 o.into().and_then(|o| match o {
161 $(
162 Origin::$item => Ok($success),
163 )*
164 r => Err(O::from(r)),
165 })
166 }
167 #[cfg(feature = "runtime-benchmarks")]
168 fn try_successful_origin() -> Result<O, ()> {
169 let _result: Result<O, ()> = Err(());
172 $(
173 let _result: Result<O, ()> = Ok(O::from(Origin::$item));
174 )*
175 _result
176 }
177 }
178 }
179 }
180
181 decl_ensure! {
182 pub type Spender: EnsureOrigin<Success = Balance> {
183 SmallTipper = 250 * 3 * CENTS,
184 BigTipper = 1 * GRAND,
185 SmallSpender = 10 * GRAND,
186 MediumSpender = 100 * GRAND,
187 BigSpender = 1_000 * GRAND,
188 Treasurer = 10_000 * GRAND,
189 }
190 }
191
192 decl_ensure! {
193 pub type EnsureFellowship: EnsureOrigin<Success = u16> {
194 Fellowship1Dan = 1,
195 Fellowship2Dan = 2,
196 Fellowship3Dan = 3,
197 Fellowship4Dan = 4,
198 Fellowship5Dan = 5,
199 Fellowship6Dan = 6,
200 Fellowship7Dan = 7,
201 Fellowship8Dan = 8,
202 Fellowship9Dan = 9,
203 }
204 }
205}