multiversx_sc/types/interaction/system_proxy/
delegation_sc_proxy.rs

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
12/// Proxy for the Delegation smart contract.
13pub 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
29/// Method container of the Delegation smart contract proxy.
30pub 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    /// The minimum value for creating a new delegation contract is 1 EGLD
184    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    /// The minimum value for undelegating is 1 EGLD
222    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}