Skip to content

Commit 05681af

Browse files
kwon-tPaul Kwon
andauthored
Fix a revert error (#3)
Co-authored-by: Paul Kwon <[email protected]>
1 parent a5e952e commit 05681af

1 file changed

Lines changed: 42 additions & 32 deletions

File tree

src/collateral_sdk/collateral.py

Lines changed: 42 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ def deposit(
328328
break
329329

330330
try:
331-
call: GenericCall = self.subtensor_api._subtensor.substrate.compose_call(
331+
move_call: GenericCall = self.subtensor_api._subtensor.substrate.compose_call(
332332
call_module="SubtensorModule",
333333
call_function="move_stake",
334334
call_params={
@@ -341,7 +341,7 @@ def deposit(
341341
)
342342

343343
move_extrinsic: GenericExtrinsic = self.subtensor_api._subtensor.substrate.create_signed_extrinsic(
344-
call=call,
344+
call=move_call,
345345
keypair=vault_wallet.coldkey,
346346
)
347347

@@ -350,14 +350,6 @@ def deposit(
350350
wait_for_inclusion=True,
351351
)
352352

353-
stake_added_event: dict = list(
354-
filter(lambda ev: ev["event"]["event_id"] == "StakeAdded", result.triggered_events)
355-
)[0]["event"]
356-
stake_added = Balance.from_rao(
357-
stake_added_event["attributes"][3] - 1, # -1 is temporary fix for accuracy,
358-
netuid=self.network.netuid,
359-
)
360-
361353
if result.is_success:
362354
break
363355
else:
@@ -371,30 +363,42 @@ def deposit(
371363
# 3. Revert the stake transfer if the stake move fails.
372364
for j in range(max_reverts):
373365
try:
374-
success = self.subtensor_api.extrinsics.transfer_stake(
375-
wallet=vault_wallet,
376-
destination_coldkey_ss58=sender,
377-
hotkey_ss58=origin_hotkey,
378-
origin_netuid=self.network.netuid,
379-
destination_netuid=self.network.netuid,
380-
amount=stake_added,
366+
revert_extrinsic: GenericExtrinsic = self.create_stake_transfer_extrinsic(
367+
amount=stake_added.rao,
368+
source_stake=origin_hotkey,
369+
source_wallet=vault_wallet,
370+
dest=sender,
371+
)
372+
373+
result: ExtrinsicReceipt = self.subtensor_api._subtensor.substrate.submit_extrinsic(
374+
revert_extrinsic,
381375
wait_for_inclusion=True,
382376
)
383377

384-
if success:
378+
if result.is_success:
385379
break
386380
else:
387-
raise RuntimeError("Failed transfer the stake back to the source address.")
381+
raise ChainError.from_error(result.error_message)
388382

389383
except BaseException as e:
390384
if j < max_reverts - 1:
391385
time.sleep(max(2**j, max_backoff))
392386
continue
393387
else:
388+
# When the revert fails, raise a critical error.
394389
raise CriticalError(f"Failed to revert the stake transfer: {e}") from e
395390

391+
# After reverting the stake transfer, raise an error for the stake move failure.
396392
raise SubtensorError(f"Failed to move the stake to the vault's stake address: {e}") from e
397393

394+
stake_added_event: dict = list(
395+
filter(lambda ev: ev["event"]["event_id"] == "StakeAdded", result.triggered_events) # pyright: ignore[reportPossiblyUnboundVariable]
396+
)[0]["event"]
397+
stake_added = Balance.from_rao(
398+
stake_added_event["attributes"][3] - 1, # -1 is temporary fix for accuracy,
399+
netuid=self.network.netuid,
400+
)
401+
398402
# 4. Deposit the collateral into the EVM contract.
399403
for i in range(max_retries):
400404
try:
@@ -428,28 +432,32 @@ def deposit(
428432
# 4. Revert the stake transfer if deposit in the EVM fails.
429433
for j in range(max_reverts):
430434
try:
431-
success = self.subtensor_api.extrinsics.transfer_stake(
432-
wallet=vault_wallet,
433-
destination_coldkey_ss58=sender,
434-
hotkey_ss58=vault_stake,
435-
origin_netuid=self.network.netuid,
436-
destination_netuid=self.network.netuid,
437-
amount=stake_added,
435+
revert_extrinsic: GenericExtrinsic = self.create_stake_transfer_extrinsic(
436+
amount=stake_added.rao,
437+
source_stake=vault_stake,
438+
source_wallet=vault_wallet,
439+
dest=sender,
440+
)
441+
442+
result: ExtrinsicReceipt = self.subtensor_api._subtensor.substrate.submit_extrinsic(
443+
revert_extrinsic,
438444
wait_for_inclusion=True,
439445
)
440446

441-
if success:
447+
if result.is_success:
442448
break
443449
else:
444-
raise RuntimeError("Failed transfer the stake back to the source address.")
450+
raise ChainError.from_error(result.error_message)
445451

446452
except BaseException as e:
447453
if j < max_reverts - 1:
448454
time.sleep(max(2**j, max_backoff))
449455
continue
450456
else:
457+
# When the revert fails, raise a critical error.
451458
raise CriticalError(f"Failed to revert the stake transfer: {e}") from e
452459

460+
# After reverting the stake transfer, raise an error for the deposit failure.
453461
raise EVMError(f"Failed to deposit into the EVM contract: {e}") from e
454462

455463
return stake_added
@@ -751,22 +759,22 @@ def withdraw(
751759
# 2. Transfer the stake to the destination address.
752760
for i in range(max_retries):
753761
try:
754-
extrinsic: GenericExtrinsic = self.create_stake_transfer_extrinsic(
755-
amount=amount.tao, # pyright: ignore[reportArgumentType]
762+
transfer_extrinsic: GenericExtrinsic = self.create_stake_transfer_extrinsic(
763+
amount=amount.rao,
756764
source_stake=vault_stake,
757765
source_wallet=vault_wallet,
758766
dest=dest,
759767
)
760768

761769
result: ExtrinsicReceipt = self.subtensor_api._subtensor.substrate.submit_extrinsic(
762-
extrinsic,
770+
transfer_extrinsic,
763771
wait_for_inclusion=True,
764772
)
765773

766774
if result.is_success:
767775
break
768776
else:
769-
ChainError.from_error(result.error_message)
777+
raise ChainError.from_error(result.error_message)
770778

771779
except BaseException as e:
772780
if i < max_retries - 1:
@@ -789,10 +797,12 @@ def withdraw(
789797
time.sleep(max(2**j, max_backoff))
790798
continue
791799
else:
800+
# When the revert fails, raise a critical error.
792801
raise CriticalError(
793802
f"Failed to revert the withdrawal from the EVM contract: {e}"
794803
) from e
795804

805+
# After reverting the withdrawal, raise an error for the stake transfer failure.
796806
raise SubtensorError(f"Failed to transfer the stake to the destination wallet: {e}") from e
797807

798808
return amount

0 commit comments

Comments
 (0)