1use multiversx_chain_core::types::{BLSKey, BLSSignature};
2use multiversx_sc_codec::{
3 multi_types::{MultiValue2, MultiValueVec},
4 MultiValueLength,
5};
6
7use crate::types::{
8 BigUint, EgldPayment, ManagedAddress, ManagedBuffer, NotPayable, ProxyArg, Tx, TxEnv, TxFrom,
9 TxGas, TxProxyTrait, TxTo, TxTypedCall,
10};
11
12pub struct DelegationSCProxy;
14
15impl<Env, From, To, Gas> TxProxyTrait<Env, From, To, Gas> for DelegationSCProxy
16where
17 Env: TxEnv,
18 From: TxFrom<Env>,
19 To: TxTo<Env>,
20 Gas: TxGas<Env>,
21{
22 type TxProxyMethods = DelegationSCProxyMethods<Env, From, To, Gas>;
23
24 fn proxy_methods(self, tx: Tx<Env, From, To, (), Gas, (), ()>) -> Self::TxProxyMethods {
25 DelegationSCProxyMethods { wrapped_tx: tx }
26 }
27}
28
29pub struct DelegationSCProxyMethods<Env, From, To, Gas>
31where
32 Env: TxEnv,
33 From: TxFrom<Env>,
34 To: TxTo<Env>,
35 Gas: TxGas<Env>,
36{
37 wrapped_tx: Tx<Env, From, To, (), Gas, (), ()>,
38}
39
40impl<Env, From, To, Gas> DelegationSCProxyMethods<Env, From, To, Gas>
41where
42 Env: TxEnv,
43 From: TxFrom<Env>,
44 To: TxTo<Env>,
45 Gas: TxGas<Env>,
46{
47 pub fn set_metadata<
48 Arg0: ProxyArg<ManagedBuffer<Env::Api>>,
49 Arg1: ProxyArg<ManagedBuffer<Env::Api>>,
50 Arg2: ProxyArg<ManagedBuffer<Env::Api>>,
51 >(
52 self,
53 name: Arg0,
54 website: Arg1,
55 identifier: Arg2,
56 ) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
57 self.wrapped_tx
58 .raw_call("setMetaData")
59 .payment(NotPayable)
60 .argument(&name)
61 .argument(&website)
62 .argument(&identifier)
63 .original_result()
64 }
65
66 pub fn change_service_fee<Arg0: ProxyArg<BigUint<Env::Api>>>(
67 self,
68 service_fee: Arg0,
69 ) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
70 self.wrapped_tx
71 .raw_call("changeServiceFee")
72 .payment(NotPayable)
73 .argument(&service_fee)
74 .original_result()
75 }
76
77 pub fn set_automatic_activation(
78 self,
79 automatic_activation: bool,
80 ) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
81 let automatic_activation_str = if automatic_activation {
82 "true"
83 } else {
84 "false"
85 };
86
87 self.wrapped_tx
88 .raw_call("setAutomaticActivation")
89 .payment(NotPayable)
90 .argument(&automatic_activation_str)
91 .original_result()
92 }
93
94 pub fn modify_total_delegation_cap<Arg0: ProxyArg<BigUint<Env::Api>>>(
95 self,
96 new_total_delegation_cap: Arg0,
97 ) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
98 self.wrapped_tx
99 .raw_call("modifyTotalDelegationCap")
100 .payment(NotPayable)
101 .argument(&new_total_delegation_cap)
102 .original_result()
103 }
104
105 pub fn add_nodes<Arg0: ProxyArg<MultiValueVec<MultiValue2<BLSKey, BLSSignature>>>>(
106 self,
107 bls_keys_signatures: Arg0,
108 ) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
109 self.wrapped_tx
110 .payment(NotPayable)
111 .raw_call("addNodes")
112 .argument(&bls_keys_signatures)
113 .original_result()
114 }
115
116 pub fn stake_nodes<Arg0: ProxyArg<MultiValueVec<BLSKey>>>(
117 self,
118 bls_keys: Arg0,
119 ) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
120 self.wrapped_tx
121 .raw_call("stakeNodes")
122 .payment(NotPayable)
123 .argument(&bls_keys)
124 .original_result()
125 }
126
127 pub fn unstake_nodes<Arg0: ProxyArg<MultiValueVec<BLSKey>>>(
128 self,
129 bls_keys: Arg0,
130 ) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
131 self.wrapped_tx
132 .raw_call("unStakeNodes")
133 .payment(NotPayable)
134 .argument(&bls_keys)
135 .original_result()
136 }
137
138 pub fn restake_unstaked_nodes<Arg0: ProxyArg<MultiValueVec<BLSKey>>>(
139 self,
140 bls_keys: Arg0,
141 ) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
142 self.wrapped_tx
143 .raw_call("reStakeUnStakedNodes")
144 .payment(NotPayable)
145 .argument(&bls_keys)
146 .original_result()
147 }
148
149 pub fn unbond_nodes<Arg0: ProxyArg<MultiValueVec<BLSKey>>>(
150 self,
151 bls_keys: Arg0,
152 ) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
153 self.wrapped_tx
154 .raw_call("unBondNodes")
155 .payment(NotPayable)
156 .argument(&bls_keys)
157 .original_result()
158 }
159
160 pub fn remove_nodes<Arg0: ProxyArg<MultiValueVec<BLSKey>>>(
161 self,
162 bls_keys: Arg0,
163 ) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
164 self.wrapped_tx
165 .raw_call("removeNodes")
166 .payment(NotPayable)
167 .argument(&bls_keys)
168 .original_result()
169 }
170
171 pub fn unjail_nodes<Arg0: ProxyArg<MultiValueVec<BLSKey>> + MultiValueLength>(
172 self,
173 bls_keys: Arg0,
174 ) -> TxTypedCall<Env, From, To, EgldPayment<<Env as TxEnv>::Api>, Gas, ()> {
175 let num_keys = bls_keys.multi_value_len();
176 self.wrapped_tx
177 .raw_call("unJailNodes")
178 .egld(BigUint::from(2500000000000000000u128) * num_keys as u64)
179 .argument(&bls_keys)
180 .original_result()
181 }
182
183 pub fn delegate(
185 self,
186 egld_value: BigUint<Env::Api>,
187 ) -> TxTypedCall<Env, From, To, EgldPayment<<Env as TxEnv>::Api>, Gas, ()> {
188 self.wrapped_tx
189 .raw_call("delegate")
190 .egld(egld_value)
191 .original_result()
192 }
193
194 pub fn claim_rewards(self) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
195 self.wrapped_tx
196 .raw_call("claimRewards")
197 .payment(NotPayable)
198 .original_result()
199 }
200
201 pub fn redelegate_rewards(self) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
202 self.wrapped_tx
203 .raw_call("reDelegateRewards")
204 .payment(NotPayable)
205 .original_result()
206 }
207
208 pub fn set_check_cap_on_redelegate_rewards(
209 self,
210 state: bool,
211 ) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
212 let state_str = if state { "true" } else { "false" };
213
214 self.wrapped_tx
215 .raw_call("setCheckCapOnReDelegateRewards")
216 .payment(NotPayable)
217 .argument(&state_str)
218 .original_result()
219 }
220
221 pub fn undelegate<Arg0: ProxyArg<BigUint<Env::Api>>>(
223 self,
224 undelegate_egld_amount: Arg0,
225 ) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
226 self.wrapped_tx
227 .raw_call("unDelegate")
228 .payment(NotPayable)
229 .argument(&undelegate_egld_amount)
230 .original_result()
231 }
232
233 pub fn withdraw(self) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
234 self.wrapped_tx
235 .raw_call("withdraw")
236 .payment(NotPayable)
237 .original_result()
238 }
239
240 pub fn get_all_node_states(
241 self,
242 ) -> TxTypedCall<Env, From, To, NotPayable, Gas, ManagedBuffer<Env::Api>> {
243 self.wrapped_tx
244 .payment(NotPayable)
245 .raw_call("getAllNodeStates")
246 .original_result()
247 }
248
249 pub fn get_total_active_stake(
250 self,
251 ) -> TxTypedCall<Env, From, To, NotPayable, Gas, BigUint<Env::Api>> {
252 self.wrapped_tx
253 .payment(NotPayable)
254 .raw_call("getTotalActiveStake")
255 .original_result()
256 }
257
258 pub fn get_user_active_stake(
259 self,
260 owner: &ManagedAddress<Env::Api>,
261 ) -> TxTypedCall<Env, From, To, NotPayable, Gas, BigUint<Env::Api>> {
262 self.wrapped_tx
263 .payment(NotPayable)
264 .raw_call("getUserActiveStake")
265 .argument(owner)
266 .original_result()
267 }
268}