iwa 0.0.26__py3-none-any.whl → 0.0.27__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -59,9 +59,12 @@ class DrainManagerMixin:
59
59
 
60
60
  logger.info(f"Claiming {accrued_rewards / 1e18:.4f} OLAS rewards for service {service_id}")
61
61
 
62
+ # Use service owner which holds the reward rights (not necessarily master)
63
+ owner_address = self.service.service_owner_address or self.wallet.master_account.address
64
+
62
65
  # Prepare and send claim transaction
63
66
  claim_tx = staking_contract.prepare_claim_tx(
64
- from_address=self.wallet.master_account.address,
67
+ from_address=owner_address,
65
68
  service_id=service_id,
66
69
  )
67
70
 
@@ -71,7 +74,7 @@ class DrainManagerMixin:
71
74
 
72
75
  success, receipt = self.wallet.sign_and_send_transaction(
73
76
  claim_tx,
74
- signer_address_or_tag=self.wallet.master_account.address,
77
+ signer_address_or_tag=owner_address,
75
78
  chain_name=self.chain_name,
76
79
  tags=["olas_claim_rewards"],
77
80
  )
@@ -522,9 +522,14 @@ class LifecycleManagerMixin:
522
522
  f"activation_value={activation_value} wei"
523
523
  )
524
524
 
525
- logger.debug(f"[ACTIVATE] Preparing tx: service_id={service_id}, value={activation_value}")
525
+ # Use service owner which holds the NFT (not necessarily master)
526
+ owner_address = self.service.service_owner_address or self.wallet.master_account.address
527
+
528
+ logger.debug(
529
+ f"[ACTIVATE] Preparing tx from {owner_address}: service_id={service_id}, value={activation_value}"
530
+ )
526
531
  activate_tx = self.manager.prepare_activate_registration_tx(
527
- from_address=self.wallet.master_account.address,
532
+ from_address=owner_address,
528
533
  service_id=service_id,
529
534
  value=activation_value,
530
535
  )
@@ -532,7 +537,7 @@ class LifecycleManagerMixin:
532
537
 
533
538
  success, receipt = self.wallet.sign_and_send_transaction(
534
539
  transaction=activate_tx,
535
- signer_address_or_tag=self.wallet.master_account.address,
540
+ signer_address_or_tag=owner_address,
536
541
  chain_name=self.chain_name,
537
542
  )
538
543
 
@@ -720,13 +725,16 @@ class LifecycleManagerMixin:
720
725
  f"total_value={total_value} wei"
721
726
  )
722
727
 
728
+ # Use service owner which holds the NFT (not necessarily master)
729
+ owner_address = self.service.service_owner_address or self.wallet.master_account.address
730
+
723
731
  logger.debug(
724
- f"[REGISTER] Preparing tx: agent={agent_account_address}, "
732
+ f"[REGISTER] Preparing tx from {owner_address}: agent={agent_account_address}, "
725
733
  f"agent_ids={self.service.agent_ids}, value={total_value}"
726
734
  )
727
735
 
728
736
  register_tx = self.manager.prepare_register_agents_tx(
729
- from_address=self.wallet.master_account.address,
737
+ from_address=owner_address,
730
738
  service_id=service_id,
731
739
  agent_instances=[agent_account_address],
732
740
  agent_ids=self.service.agent_ids,
@@ -736,7 +744,7 @@ class LifecycleManagerMixin:
736
744
 
737
745
  success, receipt = self.wallet.sign_and_send_transaction(
738
746
  transaction=register_tx,
739
- signer_address_or_tag=self.wallet.master_account.address,
747
+ signer_address_or_tag=owner_address,
740
748
  chain_name=self.chain_name,
741
749
  tags=["olas_register_agent"],
742
750
  )
@@ -408,17 +408,20 @@ class StakingManagerMixin:
408
408
  True if approval succeeded, False otherwise.
409
409
 
410
410
  """
411
+ # Use service owner which holds the NFT (not necessarily master)
412
+ owner_address = self.service.service_owner_address or self.wallet.master_account.address
413
+
411
414
  # Approve service NFT - this is an ERC-721 approval, not ERC-20
412
- logger.debug("[STAKE] Approving service NFT for staking contract...")
415
+ logger.debug(f"[STAKE] Approving service NFT for staking contract from {owner_address}...")
413
416
  approve_tx = self.registry.prepare_approve_tx(
414
- from_address=self.wallet.master_account.address,
417
+ from_address=owner_address,
415
418
  spender=staking_contract.address,
416
419
  id_=self.service.service_id,
417
420
  )
418
421
 
419
422
  success, receipt = self.wallet.sign_and_send_transaction(
420
423
  transaction=approve_tx,
421
- signer_address_or_tag=self.wallet.master_account.address,
424
+ signer_address_or_tag=owner_address,
422
425
  chain_name=self.chain_name,
423
426
  tags=["olas_approve_service_nft"],
424
427
  )
@@ -452,16 +455,19 @@ class StakingManagerMixin:
452
455
  True if stake succeeded and ServiceStaked event was found.
453
456
 
454
457
  """
455
- logger.debug("[STAKE] Preparing stake transaction...")
458
+ # Use service owner which holds the NFT (not necessarily master)
459
+ owner_address = self.service.service_owner_address or self.wallet.master_account.address
460
+
461
+ logger.debug(f"[STAKE] Preparing stake transaction from {owner_address}...")
456
462
  stake_tx = staking_contract.prepare_stake_tx(
457
- from_address=self.wallet.master_account.address,
463
+ from_address=owner_address,
458
464
  service_id=self.service.service_id,
459
465
  )
460
466
  logger.debug(f"[STAKE] TX prepared: to={stake_tx.get('to')}")
461
467
 
462
468
  success, receipt = self.wallet.sign_and_send_transaction(
463
469
  transaction=stake_tx,
464
- signer_address_or_tag=self.wallet.master_account.address,
470
+ signer_address_or_tag=owner_address,
465
471
  chain_name=self.chain_name,
466
472
  tags=["olas_stake_service"],
467
473
  )
@@ -541,11 +547,16 @@ class StakingManagerMixin:
541
547
  except Exception as e:
542
548
  logger.warning(f"Could not verify staking duration: {e}. Proceeding with caution.")
543
549
 
550
+ # Use service owner which holds the NFT (not necessarily master)
551
+ owner_address = self.service.service_owner_address or self.wallet.master_account.address
552
+
544
553
  # Unstake the service
545
554
  try:
546
- logger.info(f"Preparing unstake transaction for service {self.service.service_id}")
555
+ logger.info(
556
+ f"Preparing unstake transaction for service {self.service.service_id} from {owner_address}"
557
+ )
547
558
  unstake_tx = staking_contract.prepare_unstake_tx(
548
- from_address=self.wallet.master_account.address,
559
+ from_address=owner_address,
549
560
  service_id=self.service.service_id,
550
561
  )
551
562
  logger.info("Unstake transaction prepared successfully")
@@ -556,7 +567,7 @@ class StakingManagerMixin:
556
567
 
557
568
  success, receipt = self.wallet.sign_and_send_transaction(
558
569
  transaction=unstake_tx,
559
- signer_address_or_tag=self.wallet.master_account.address,
570
+ signer_address_or_tag=owner_address,
560
571
  chain_name=self.chain_name,
561
572
  tags=["olas_unstake_service"],
562
573
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iwa
3
- Version: 0.0.26
3
+ Version: 0.0.27
4
4
  Summary: A secure, modular, and plugin-based framework for crypto agents and ops
5
5
  Requires-Python: <4.0,>=3.12
6
6
  Description-Content-Type: text/markdown
@@ -86,10 +86,10 @@ iwa/plugins/olas/scripts/test_full_mech_flow.py,sha256=Fqoq5bn7Z_3YyRrnuqNAZy9cw
86
86
  iwa/plugins/olas/scripts/test_simple_lifecycle.py,sha256=8T50tOZx3afeECSfCNAb0rAHNtYOsBaeXlMwKXElCk8,2099
87
87
  iwa/plugins/olas/service_manager/__init__.py,sha256=GXiThMEY3nPgHUl1i-DLrF4h96z9jPxxI8Jepo2E1PM,1926
88
88
  iwa/plugins/olas/service_manager/base.py,sha256=EBPg0ymqgtAb7ZvVSfTt31QYgv_6gp4UAc6je00NLAg,5009
89
- iwa/plugins/olas/service_manager/drain.py,sha256=IS7YYKuQdkULcNdxfHVzjcq95pXKdpajolzLL78u4jc,12430
90
- iwa/plugins/olas/service_manager/lifecycle.py,sha256=Lr2O3Vmv8dLlzwUVt_Ga8bFRQD3TbrM6LGs5kKeiAOE,48410
89
+ iwa/plugins/olas/service_manager/drain.py,sha256=1Ku7axThwLtKxaNTkwhP4j1yjIXbFXAqNFDrCSmgfto,12569
90
+ iwa/plugins/olas/service_manager/lifecycle.py,sha256=Aibd4D-R_UjFEqSTEsVaMFKbrtEOY8fo0Td0eFYjcDI,48732
91
91
  iwa/plugins/olas/service_manager/mech.py,sha256=NVzVbEmyOe3wK92VEzCCOSuy3HDkEP1MSoVt7Av8Psk,27949
92
- iwa/plugins/olas/service_manager/staking.py,sha256=7REp_HziKtqF9uSvbcq01C9XiaxgVT3gCimuLAAdNnM,28219
92
+ iwa/plugins/olas/service_manager/staking.py,sha256=4WS1m1E1ddX5EbQuvNnNswZjT20nc7I9IKzjrBuUCFw,28701
93
93
  iwa/plugins/olas/tests/conftest.py,sha256=4vM7EI00SrTGyeP0hNzsGSQHEj2-iznVgzlNh2_OGfo,739
94
94
  iwa/plugins/olas/tests/test_importer.py,sha256=i9LKov7kNRECB3hmRnhKBwcfx3uxtjWe4BB77bOOpeo,4282
95
95
  iwa/plugins/olas/tests/test_importer_error_handling.py,sha256=O5yd7w_eURtkJb8_IwAGkz8fyHLTzYfI5c2JxWl3oOo,12081
@@ -157,7 +157,7 @@ iwa/web/tests/test_web_endpoints.py,sha256=C264MH-CTyDW4GLUrTXBgLJKUk4-89pFAScBd
157
157
  iwa/web/tests/test_web_olas.py,sha256=0CVSsrncOeJ3x0ECV7mVLQV_CXZRrOqGiVjgLIi6hZ8,16308
158
158
  iwa/web/tests/test_web_swap.py,sha256=7A4gBJFL01kIXPtW1E1J17SCsVc_0DmUn-R8kKrnnVA,2974
159
159
  iwa/web/tests/test_web_swap_coverage.py,sha256=zGNrzlhZ_vWDCvWmLcoUwFgqxnrp_ACbo49AtWBS_Kw,5584
160
- iwa-0.0.26.dist-info/licenses/LICENSE,sha256=eIubm_IlBHPYRQlLNZKbBNKhJUUP3JH0A2miZUhAVfI,1078
160
+ iwa-0.0.27.dist-info/licenses/LICENSE,sha256=eIubm_IlBHPYRQlLNZKbBNKhJUUP3JH0A2miZUhAVfI,1078
161
161
  tests/legacy_cow.py,sha256=oOkZvIxL70ReEoD9oHQbOD5GpjIr6AGNHcOCgfPlerU,8389
162
162
  tests/legacy_safe.py,sha256=AssM2g13E74dNGODu_H0Q0y412lgqsrYnEzI97nm_Ts,2972
163
163
  tests/legacy_transaction_retry_logic.py,sha256=D9RqZ7DBu61Xr2djBAodU2p9UE939LL-DnQXswX5iQk,1497
@@ -210,8 +210,8 @@ tests/test_utils.py,sha256=vkP49rYNI8BRzLpWR3WnKdDr8upeZjZcs7Rx0pjbQMo,1292
210
210
  tests/test_workers.py,sha256=MInwdkFY5LdmFB3o1odIaSD7AQZb3263hNafO1De5PE,2793
211
211
  tools/create_and_stake_service.py,sha256=1xwy_bJQI1j9yIQ968Oc9Db_F6mk1659LuuZntTASDE,3742
212
212
  tools/verify_drain.py,sha256=PkMjblyOOAuQge88FwfEzRtCYeEtJxXhPBmtQYCoQ-8,6743
213
- iwa-0.0.26.dist-info/METADATA,sha256=Wqiy2X1x-bMEyAb6hYzuWfhXhSp65n4HnCD5lK4GO5c,7295
214
- iwa-0.0.26.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
215
- iwa-0.0.26.dist-info/entry_points.txt,sha256=nwB6kscrfA7M00pYmL2j-sBH6eF6h2ga9IK1BZxdiyQ,241
216
- iwa-0.0.26.dist-info/top_level.txt,sha256=kedS9cRUbm4JE2wYeabIXilhHjN8KCw0IGbqqqsw0Bs,16
217
- iwa-0.0.26.dist-info/RECORD,,
213
+ iwa-0.0.27.dist-info/METADATA,sha256=vCUmE_RYSF6v1ahopD9eTY58p9kkWivsmwwv5dFMKO8,7295
214
+ iwa-0.0.27.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
215
+ iwa-0.0.27.dist-info/entry_points.txt,sha256=nwB6kscrfA7M00pYmL2j-sBH6eF6h2ga9IK1BZxdiyQ,241
216
+ iwa-0.0.27.dist-info/top_level.txt,sha256=kedS9cRUbm4JE2wYeabIXilhHjN8KCw0IGbqqqsw0Bs,16
217
+ iwa-0.0.27.dist-info/RECORD,,
File without changes