11from pathlib import Path
22from typing import Any
33
4- from multiversx_sdk import Address , ValidatorPublicKey , ValidatorsSigners
4+ from multiversx_sdk import (
5+ Address ,
6+ Transaction ,
7+ ValidatorPublicKey ,
8+ ValidatorsController ,
9+ ValidatorsSigners ,
10+ )
511
612from multiversx_sdk_cli import cli_shared , utils
713from multiversx_sdk_cli .args_validation import (
1016 validate_nonce_args ,
1117 validate_receiver_args ,
1218)
13- from multiversx_sdk_cli .validators import ValidatorsController
19+ from multiversx_sdk_cli .guardian_relayer_data import GuardianRelayerData
20+ from multiversx_sdk_cli .interfaces import IAccount
21+ from multiversx_sdk_cli .signing_wrapper import SigningWrapper
1422
1523
1624def setup_parser (args : list [str ], subparsers : Any ) -> Any :
@@ -151,8 +159,18 @@ def validate_args(args: Any) -> None:
151159 validate_chain_id_args (args )
152160
153161
162+ def _sign_transaction (transaction : Transaction , sender : IAccount , guardian_and_relayer_data : GuardianRelayerData ):
163+ signer = SigningWrapper ()
164+ signer .sign_transaction (
165+ transaction = transaction ,
166+ sender = sender ,
167+ guardian_and_relayer = guardian_and_relayer_data ,
168+ )
169+
170+
154171def do_stake (args : Any ):
155172 validate_args (args )
173+
156174 sender = cli_shared .prepare_sender (args )
157175 guardian_and_relayer_data = cli_shared .get_guardian_and_relayer_data (
158176 sender = sender .address .to_bech32 (),
@@ -167,37 +185,35 @@ def do_stake(args: Any):
167185 if args .top_up :
168186 tx = controller .create_transaction_for_topping_up (
169187 sender = sender ,
170- native_amount = native_amount ,
188+ nonce = sender .nonce ,
189+ amount = native_amount ,
190+ guardian = guardian_and_relayer_data .guardian_address if guardian_and_relayer_data .guardian_address else None ,
191+ relayer = guardian_and_relayer_data .relayer_address if guardian_and_relayer_data .relayer_address else None ,
171192 gas_limit = args .gas_limit ,
172193 gas_price = args .gas_price ,
173- nonce = sender .nonce ,
174- version = args .version ,
175- options = args .options ,
176- guardian_and_relayer_data = guardian_and_relayer_data ,
177194 )
178195 else :
179196 validators_signers = _load_validators_signers (args .validators_pem )
180197 tx = controller .create_transaction_for_staking (
181198 sender = sender ,
182- validators = validators_signers ,
183- native_amount = native_amount ,
184- gas_limit = args .gas_limit ,
185- gas_price = args .gas_price ,
186199 nonce = sender .nonce ,
187- version = args . version ,
188- options = args . options ,
200+ validators_file = validators_signers ,
201+ amount = native_amount ,
189202 rewards_address = rewards_address ,
190- guardian_and_relayer_data = guardian_and_relayer_data ,
203+ guardian = guardian_and_relayer_data .guardian_address if guardian_and_relayer_data .guardian_address else None ,
204+ relayer = guardian_and_relayer_data .relayer_address if guardian_and_relayer_data .relayer_address else None ,
205+ gas_limit = args .gas_limit ,
206+ gas_price = args .gas_price ,
191207 )
192208
209+ _sign_transaction (tx , sender , guardian_and_relayer_data )
193210 cli_shared .send_or_simulate (tx , args )
194211
195212
196- def _get_validators_controller (args : Any ):
213+ def _get_validators_controller (args : Any ) -> ValidatorsController :
197214 chain_id = cli_shared .get_chain_id (args .proxy , args .chain )
198215 gas_estimator = cli_shared .initialize_gas_limit_estimator (args )
199- validators = ValidatorsController (chain_id = chain_id , gas_limit_estimator = gas_estimator )
200- return validators
216+ return ValidatorsController (chain_id = chain_id , gas_limit_estimator = gas_estimator )
201217
202218
203219def _load_validators_signers (validators_pem : str ) -> ValidatorsSigners :
@@ -224,22 +240,20 @@ def do_unstake(args: Any):
224240 args = args ,
225241 )
226242
227- native_amount = int (args .value )
228243 keys = _parse_public_bls_keys (args .nodes_public_keys )
229-
230244 controller = _get_validators_controller (args )
245+
231246 tx = controller .create_transaction_for_unstaking (
232247 sender = sender ,
233- keys = keys ,
234- native_amount = native_amount ,
248+ nonce = sender .nonce ,
249+ public_keys = keys ,
250+ guardian = guardian_and_relayer_data .guardian_address if guardian_and_relayer_data .guardian_address else None ,
251+ relayer = guardian_and_relayer_data .relayer_address if guardian_and_relayer_data .relayer_address else None ,
235252 gas_limit = args .gas_limit ,
236253 gas_price = args .gas_price ,
237- nonce = sender .nonce ,
238- version = args .version ,
239- options = args .options ,
240- guardian_and_relayer_data = guardian_and_relayer_data ,
241254 )
242255
256+ _sign_transaction (tx , sender , guardian_and_relayer_data )
243257 cli_shared .send_or_simulate (tx , args )
244258
245259
@@ -258,16 +272,16 @@ def do_unjail(args: Any):
258272 controller = _get_validators_controller (args )
259273 tx = controller .create_transaction_for_unjailing (
260274 sender = sender ,
261- keys = keys ,
262- native_amount = native_amount ,
275+ nonce = sender .nonce ,
276+ public_keys = keys ,
277+ amount = native_amount ,
278+ guardian = guardian_and_relayer_data .guardian_address if guardian_and_relayer_data .guardian_address else None ,
279+ relayer = guardian_and_relayer_data .relayer_address if guardian_and_relayer_data .relayer_address else None ,
263280 gas_limit = args .gas_limit ,
264281 gas_price = args .gas_price ,
265- nonce = sender .nonce ,
266- version = args .version ,
267- options = args .options ,
268- guardian_and_relayer_data = guardian_and_relayer_data ,
269282 )
270283
284+ _sign_transaction (tx , sender , guardian_and_relayer_data )
271285 cli_shared .send_or_simulate (tx , args )
272286
273287
@@ -280,22 +294,20 @@ def do_unbond(args: Any):
280294 args = args ,
281295 )
282296
283- native_amount = int (args .value )
284297 keys = _parse_public_bls_keys (args .nodes_public_keys )
285-
286298 controller = _get_validators_controller (args )
299+
287300 tx = controller .create_transaction_for_unbonding (
288301 sender = sender ,
289- keys = keys ,
290- native_amount = native_amount ,
302+ nonce = sender .nonce ,
303+ public_keys = keys ,
304+ guardian = guardian_and_relayer_data .guardian_address if guardian_and_relayer_data .guardian_address else None ,
305+ relayer = guardian_and_relayer_data .relayer_address if guardian_and_relayer_data .relayer_address else None ,
291306 gas_limit = args .gas_limit ,
292307 gas_price = args .gas_price ,
293- nonce = sender .nonce ,
294- version = args .version ,
295- options = args .options ,
296- guardian_and_relayer_data = guardian_and_relayer_data ,
297308 )
298309
310+ _sign_transaction (tx , sender , guardian_and_relayer_data )
299311 cli_shared .send_or_simulate (tx , args )
300312
301313
@@ -308,22 +320,20 @@ def change_reward_address(args: Any):
308320 args = args ,
309321 )
310322
311- native_amount = int (args .value )
312323 rewards_address = Address .new_from_bech32 (args .reward_address )
313-
314324 controller = _get_validators_controller (args )
325+
315326 tx = controller .create_transaction_for_changing_rewards_address (
316327 sender = sender ,
328+ nonce = sender .nonce ,
317329 rewards_address = rewards_address ,
318- native_amount = native_amount ,
330+ guardian = guardian_and_relayer_data .guardian_address if guardian_and_relayer_data .guardian_address else None ,
331+ relayer = guardian_and_relayer_data .relayer_address if guardian_and_relayer_data .relayer_address else None ,
319332 gas_limit = args .gas_limit ,
320333 gas_price = args .gas_price ,
321- nonce = sender .nonce ,
322- version = args .version ,
323- options = args .options ,
324- guardian_and_relayer_data = guardian_and_relayer_data ,
325334 )
326335
336+ _sign_transaction (tx , sender , guardian_and_relayer_data )
327337 cli_shared .send_or_simulate (tx , args )
328338
329339
@@ -336,20 +346,17 @@ def do_claim(args: Any):
336346 args = args ,
337347 )
338348
339- native_amount = int (args .value )
340-
341349 controller = _get_validators_controller (args )
342350 tx = controller .create_transaction_for_claiming (
343351 sender = sender ,
344- native_amount = native_amount ,
352+ nonce = sender .nonce ,
353+ guardian = guardian_and_relayer_data .guardian_address if guardian_and_relayer_data .guardian_address else None ,
354+ relayer = guardian_and_relayer_data .relayer_address if guardian_and_relayer_data .relayer_address else None ,
345355 gas_limit = args .gas_limit ,
346356 gas_price = args .gas_price ,
347- nonce = sender .nonce ,
348- version = args .version ,
349- options = args .options ,
350- guardian_and_relayer_data = guardian_and_relayer_data ,
351357 )
352358
359+ _sign_transaction (tx , sender , guardian_and_relayer_data )
353360 cli_shared .send_or_simulate (tx , args )
354361
355362
@@ -362,22 +369,20 @@ def do_unstake_nodes(args: Any):
362369 args = args ,
363370 )
364371
365- native_amount = int (args .value )
366372 keys = _parse_public_bls_keys (args .nodes_public_keys )
367-
368373 controller = _get_validators_controller (args )
374+
369375 tx = controller .create_transaction_for_unstaking_nodes (
370376 sender = sender ,
371- keys = keys ,
372- native_amount = native_amount ,
377+ nonce = sender .nonce ,
378+ public_keys = keys ,
379+ guardian = guardian_and_relayer_data .guardian_address if guardian_and_relayer_data .guardian_address else None ,
380+ relayer = guardian_and_relayer_data .relayer_address if guardian_and_relayer_data .relayer_address else None ,
373381 gas_limit = args .gas_limit ,
374382 gas_price = args .gas_price ,
375- nonce = sender .nonce ,
376- version = args .version ,
377- options = args .options ,
378- guardian_and_relayer_data = guardian_and_relayer_data ,
379383 )
380384
385+ _sign_transaction (tx , sender , guardian_and_relayer_data )
381386 cli_shared .send_or_simulate (tx , args )
382387
383388
@@ -390,22 +395,20 @@ def do_unstake_tokens(args: Any):
390395 args = args ,
391396 )
392397
393- native_amount = int (args .value )
394398 value = int (args .unstake_value )
395-
396399 controller = _get_validators_controller (args )
400+
397401 tx = controller .create_transaction_for_unstaking_tokens (
398402 sender = sender ,
399- value = value ,
400- native_amount = native_amount ,
403+ nonce = sender .nonce ,
404+ amount = value ,
405+ guardian = guardian_and_relayer_data .guardian_address if guardian_and_relayer_data .guardian_address else None ,
406+ relayer = guardian_and_relayer_data .relayer_address if guardian_and_relayer_data .relayer_address else None ,
401407 gas_limit = args .gas_limit ,
402408 gas_price = args .gas_price ,
403- nonce = sender .nonce ,
404- version = args .version ,
405- options = args .options ,
406- guardian_and_relayer_data = guardian_and_relayer_data ,
407409 )
408410
411+ _sign_transaction (tx , sender , guardian_and_relayer_data )
409412 cli_shared .send_or_simulate (tx , args )
410413
411414
@@ -418,22 +421,20 @@ def do_unbond_nodes(args: Any):
418421 args = args ,
419422 )
420423
421- native_amount = int (args .value )
422424 keys = _parse_public_bls_keys (args .nodes_public_keys )
423-
424425 controller = _get_validators_controller (args )
426+
425427 tx = controller .create_transaction_for_unbonding_nodes (
426428 sender = sender ,
427- keys = keys ,
428- native_amount = native_amount ,
429+ nonce = sender .nonce ,
430+ public_keys = keys ,
431+ guardian = guardian_and_relayer_data .guardian_address if guardian_and_relayer_data .guardian_address else None ,
432+ relayer = guardian_and_relayer_data .relayer_address if guardian_and_relayer_data .relayer_address else None ,
429433 gas_limit = args .gas_limit ,
430434 gas_price = args .gas_price ,
431- nonce = sender .nonce ,
432- version = args .version ,
433- options = args .options ,
434- guardian_and_relayer_data = guardian_and_relayer_data ,
435435 )
436436
437+ _sign_transaction (tx , sender , guardian_and_relayer_data )
437438 cli_shared .send_or_simulate (tx , args )
438439
439440
@@ -446,22 +447,20 @@ def do_unbond_tokens(args: Any):
446447 args = args ,
447448 )
448449
449- native_amount = int (args .value )
450450 value = int (args .unbond_value )
451-
452451 controller = _get_validators_controller (args )
452+
453453 tx = controller .create_transaction_for_unbonding_tokens (
454454 sender = sender ,
455- value = value ,
456- native_amount = native_amount ,
455+ nonce = sender .nonce ,
456+ amount = value ,
457+ guardian = guardian_and_relayer_data .guardian_address if guardian_and_relayer_data .guardian_address else None ,
458+ relayer = guardian_and_relayer_data .relayer_address if guardian_and_relayer_data .relayer_address else None ,
457459 gas_limit = args .gas_limit ,
458460 gas_price = args .gas_price ,
459- nonce = sender .nonce ,
460- version = args .version ,
461- options = args .options ,
462- guardian_and_relayer_data = guardian_and_relayer_data ,
463461 )
464462
463+ _sign_transaction (tx , sender , guardian_and_relayer_data )
465464 cli_shared .send_or_simulate (tx , args )
466465
467466
@@ -474,20 +473,17 @@ def do_clean_registered_data(args: Any):
474473 args = args ,
475474 )
476475
477- native_amount = int (args .value )
478-
479476 controller = _get_validators_controller (args )
480477 tx = controller .create_transaction_for_cleaning_registered_data (
481478 sender = sender ,
482- native_amount = native_amount ,
479+ nonce = sender .nonce ,
480+ guardian = guardian_and_relayer_data .guardian_address if guardian_and_relayer_data .guardian_address else None ,
481+ relayer = guardian_and_relayer_data .relayer_address if guardian_and_relayer_data .relayer_address else None ,
483482 gas_limit = args .gas_limit ,
484483 gas_price = args .gas_price ,
485- nonce = sender .nonce ,
486- version = args .version ,
487- options = args .options ,
488- guardian_and_relayer_data = guardian_and_relayer_data ,
489484 )
490485
486+ _sign_transaction (tx , sender , guardian_and_relayer_data )
491487 cli_shared .send_or_simulate (tx , args )
492488
493489
@@ -500,20 +496,18 @@ def do_restake_unstaked_nodes(args: Any):
500496 args = args ,
501497 )
502498
503- native_amount = int (args .value )
504499 keys = _parse_public_bls_keys (args .nodes_public_keys )
505-
506500 controller = _get_validators_controller (args )
501+
507502 tx = controller .create_transaction_for_restaking_unstaked_nodes (
508503 sender = sender ,
509- keys = keys ,
510- native_amount = native_amount ,
504+ nonce = sender .nonce ,
505+ public_keys = keys ,
506+ guardian = guardian_and_relayer_data .guardian_address if guardian_and_relayer_data .guardian_address else None ,
507+ relayer = guardian_and_relayer_data .relayer_address if guardian_and_relayer_data .relayer_address else None ,
511508 gas_limit = args .gas_limit ,
512509 gas_price = args .gas_price ,
513- nonce = sender .nonce ,
514- version = args .version ,
515- options = args .options ,
516- guardian_and_relayer_data = guardian_and_relayer_data ,
517510 )
518511
512+ _sign_transaction (tx , sender , guardian_and_relayer_data )
519513 cli_shared .send_or_simulate (tx , args )
0 commit comments