rococo_runtime/governance/
origins.rs1pub use pallet_custom_origins::*;
20
21#[frame_support::pallet]
22pub mod pallet_custom_origins {
23 use crate::{Balance, CENTS, GRAND};
24 use frame_support::pallet_prelude::*;
25
26 #[pallet::config]
27 pub trait Config: frame_system::Config {}
28
29 #[pallet::pallet]
30 pub struct Pallet<T>(_);
31
32 #[derive(
33 PartialEq,
34 Eq,
35 Clone,
36 MaxEncodedLen,
37 Encode,
38 Decode,
39 DecodeWithMemTracking,
40 TypeInfo,
41 RuntimeDebug,
42 )]
43 #[pallet::origin]
44 pub enum Origin {
45 StakingAdmin,
47 Treasurer,
49 FellowshipAdmin,
51 GeneralAdmin,
53 AuctionAdmin,
55 LeaseAdmin,
57 ReferendumCanceller,
59 ReferendumKiller,
61 SmallTipper,
63 BigTipper,
65 SmallSpender,
67 MediumSpender,
69 BigSpender,
71 WhitelistedCaller,
73 FellowshipInitiates,
75 Fellows,
77 FellowshipExperts,
79 FellowshipMasters,
81 Fellowship1Dan,
83 Fellowship2Dan,
85 Fellowship3Dan,
87 Fellowship4Dan,
89 Fellowship5Dan,
91 Fellowship6Dan,
93 Fellowship7Dan,
95 Fellowship8Dan,
97 Fellowship9Dan,
99 }
100
101 macro_rules! decl_unit_ensures {
102 ( $name:ident: $success_type:ty = $success:expr ) => {
103 pub struct $name;
104 impl<O: OriginTrait + From<Origin>> EnsureOrigin<O> for $name
105 where
106 for <'a> &'a O::PalletsOrigin: TryInto<&'a Origin>,
107 {
108 type Success = $success_type;
109 fn try_origin(o: O) -> Result<Self::Success, O> {
110 match o.caller().try_into() {
111 Ok(Origin::$name) => return Ok($success),
112 _ => (),
113 }
114
115 Err(o)
116 }
117 #[cfg(feature = "runtime-benchmarks")]
118 fn try_successful_origin() -> Result<O, ()> {
119 Ok(O::from(Origin::$name))
120 }
121 }
122 };
123 ( $name:ident ) => { decl_unit_ensures! { $name : () = () } };
124 ( $name:ident: $success_type:ty = $success:expr, $( $rest:tt )* ) => {
125 decl_unit_ensures! { $name: $success_type = $success }
126 decl_unit_ensures! { $( $rest )* }
127 };
128 ( $name:ident, $( $rest:tt )* ) => {
129 decl_unit_ensures! { $name }
130 decl_unit_ensures! { $( $rest )* }
131 };
132 () => {}
133 }
134 decl_unit_ensures!(
135 StakingAdmin,
136 Treasurer,
137 FellowshipAdmin,
138 GeneralAdmin,
139 AuctionAdmin,
140 LeaseAdmin,
141 ReferendumCanceller,
142 ReferendumKiller,
143 WhitelistedCaller,
144 FellowshipInitiates: u16 = 0,
145 Fellows: u16 = 3,
146 FellowshipExperts: u16 = 5,
147 FellowshipMasters: u16 = 7,
148 );
149
150 macro_rules! decl_ensure {
151 (
152 $vis:vis type $name:ident: EnsureOrigin<Success = $success_type:ty> {
153 $( $item:ident = $success:expr, )*
154 }
155 ) => {
156 $vis struct $name;
157 impl<O: OriginTrait + From<Origin>> EnsureOrigin<O> for $name
158 where
159 for <'a> &'a O::PalletsOrigin: TryInto<&'a Origin>,
160 {
161 type Success = $success_type;
162 fn try_origin(o: O) -> Result<Self::Success, O> {
163 match o.caller().try_into() {
164 $(
165 Ok(Origin::$item) => return Ok($success),
166 )*
167 _ => (),
168 }
169
170 Err(o)
171 }
172 #[cfg(feature = "runtime-benchmarks")]
173 fn try_successful_origin() -> Result<O, ()> {
174 let _result: Result<O, ()> = Err(());
177 $(
178 let _result: Result<O, ()> = Ok(O::from(Origin::$item));
179 )*
180 _result
181 }
182 }
183 }
184 }
185
186 decl_ensure! {
187 pub type Spender: EnsureOrigin<Success = Balance> {
188 SmallTipper = 250 * 3 * CENTS,
189 BigTipper = 1 * GRAND,
190 SmallSpender = 10 * GRAND,
191 MediumSpender = 100 * GRAND,
192 BigSpender = 1_000 * GRAND,
193 Treasurer = 10_000 * GRAND,
194 }
195 }
196
197 decl_ensure! {
198 pub type EnsureFellowship: EnsureOrigin<Success = u16> {
199 Fellowship1Dan = 1,
200 Fellowship2Dan = 2,
201 Fellowship3Dan = 3,
202 Fellowship4Dan = 4,
203 Fellowship5Dan = 5,
204 Fellowship6Dan = 6,
205 Fellowship7Dan = 7,
206 Fellowship8Dan = 8,
207 Fellowship9Dan = 9,
208 }
209 }
210}