olas-operate-middleware 0.13.2__tar.gz → 0.13.3__tar.gz

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.
Files changed (100) hide show
  1. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/PKG-INFO +8 -27
  2. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/bridge/providers/provider.py +23 -31
  3. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/cli.py +4 -17
  4. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/constants.py +1 -0
  5. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/dual_staking_token/contract.py +3 -3
  6. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/dual_staking_token/contract.yaml +2 -2
  7. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/foreign_omnibridge/contract.yaml +1 -1
  8. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/home_omnibridge/contract.py +2 -2
  9. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/home_omnibridge/contract.yaml +2 -2
  10. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/l1_standard_bridge/contract.yaml +1 -1
  11. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/l2_standard_bridge/contract.py +4 -4
  12. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/l2_standard_bridge/contract.yaml +2 -2
  13. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/mech_activity/contract.yaml +1 -1
  14. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/optimism_mintable_erc20/contract.yaml +1 -1
  15. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/recovery_module/contract.yaml +1 -1
  16. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/requester_activity_checker/contract.yaml +1 -1
  17. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/staking_token/contract.py +3 -3
  18. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/staking_token/contract.yaml +2 -2
  19. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/uniswap_v2_erc20/contract.yaml +3 -3
  20. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/uniswap_v2_erc20/tests/test_contract.py +5 -5
  21. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/keys.py +5 -3
  22. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/ledger/__init__.py +1 -7
  23. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/ledger/profiles.py +0 -1
  24. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/operate_http/__init__.py +0 -2
  25. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/operate_types.py +3 -93
  26. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/quickstart/run_service.py +63 -6
  27. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/quickstart/utils.py +8 -4
  28. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/resource.py +2 -2
  29. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/services/agent_runner.py +3 -3
  30. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/services/manage.py +14 -17
  31. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/services/protocol.py +122 -141
  32. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/services/utils/mech.py +3 -3
  33. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/services/utils/tendermint.py +5 -3
  34. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/utils/gnosis.py +76 -101
  35. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/wallet/master.py +42 -47
  36. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/wallet/wallet_recovery_manager.py +8 -6
  37. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/pyproject.toml +9 -27
  38. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/LICENSE +0 -0
  39. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/README.md +0 -0
  40. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/__init__.py +0 -0
  41. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/account/__init__.py +0 -0
  42. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/account/user.py +0 -0
  43. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/bridge/bridge_manager.py +0 -0
  44. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/bridge/providers/lifi_provider.py +0 -0
  45. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/bridge/providers/native_bridge_provider.py +0 -0
  46. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/bridge/providers/relay_provider.py +0 -0
  47. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/README.md +0 -0
  48. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/__init__.py +0 -0
  49. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/__init__.py +0 -0
  50. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/dual_staking_token/__init__.py +0 -0
  51. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/dual_staking_token/build/DualStakingToken.json +0 -0
  52. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/foreign_omnibridge/__init__.py +0 -0
  53. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/foreign_omnibridge/build/ForeignOmnibridge.json +0 -0
  54. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/foreign_omnibridge/contract.py +0 -0
  55. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/home_omnibridge/__init__.py +0 -0
  56. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/home_omnibridge/build/HomeOmnibridge.json +0 -0
  57. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/l1_standard_bridge/__init__.py +0 -0
  58. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/l1_standard_bridge/build/L1StandardBridge.json +0 -0
  59. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/l1_standard_bridge/contract.py +0 -0
  60. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/l2_standard_bridge/__init__.py +0 -0
  61. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/l2_standard_bridge/build/L2StandardBridge.json +0 -0
  62. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/mech_activity/__init__.py +0 -0
  63. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/mech_activity/build/MechActivity.json +0 -0
  64. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/mech_activity/contract.py +0 -0
  65. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/optimism_mintable_erc20/__init__.py +0 -0
  66. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/optimism_mintable_erc20/build/OptimismMintableERC20.json +0 -0
  67. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/optimism_mintable_erc20/contract.py +0 -0
  68. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/recovery_module/__init__.py +0 -0
  69. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/recovery_module/build/RecoveryModule.json +0 -0
  70. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/recovery_module/contract.py +0 -0
  71. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/requester_activity_checker/__init__.py +0 -0
  72. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/requester_activity_checker/build/RequesterActivityChecker.json +0 -0
  73. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/requester_activity_checker/contract.py +0 -0
  74. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/staking_token/__init__.py +0 -0
  75. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/staking_token/build/StakingToken.json +0 -0
  76. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/uniswap_v2_erc20/__init__.py +0 -0
  77. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/uniswap_v2_erc20/build/IUniswapV2ERC20.json +0 -0
  78. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/uniswap_v2_erc20/contract.py +0 -0
  79. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/data/contracts/uniswap_v2_erc20/tests/__init__.py +0 -0
  80. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/migration.py +0 -0
  81. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/operate_http/exceptions.py +0 -0
  82. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/pearl.py +0 -0
  83. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/quickstart/analyse_logs.py +0 -0
  84. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/quickstart/claim_staking_rewards.py +0 -0
  85. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/quickstart/reset_configs.py +0 -0
  86. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/quickstart/reset_password.py +0 -0
  87. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/quickstart/reset_staking.py +0 -0
  88. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/quickstart/stop_service.py +0 -0
  89. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/quickstart/terminate_on_chain_service.py +0 -0
  90. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/services/__init__.py +0 -0
  91. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/services/deployment_runner.py +0 -0
  92. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/services/funding_manager.py +0 -0
  93. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/services/health_checker.py +0 -0
  94. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/services/service.py +0 -0
  95. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/services/utils/__init__.py +0 -0
  96. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/settings.py +0 -0
  97. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/utils/__init__.py +0 -0
  98. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/utils/single_instance.py +0 -0
  99. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/utils/ssl.py +0 -0
  100. {olas_operate_middleware-0.13.2 → olas_operate_middleware-0.13.3}/operate/wallet/__init__.py +0 -0
@@ -1,50 +1,31 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: olas-operate-middleware
3
- Version: 0.13.2
3
+ Version: 0.13.3
4
4
  Summary:
5
5
  License-File: LICENSE
6
6
  Author: David Vilela
7
7
  Author-email: dvilelaf@gmail.com
8
- Requires-Python: >=3.9,<3.12
8
+ Requires-Python: >=3.10,<3.12
9
9
  Classifier: Programming Language :: Python :: 3
10
- Classifier: Programming Language :: Python :: 3.9
11
10
  Classifier: Programming Language :: Python :: 3.10
12
11
  Classifier: Programming Language :: Python :: 3.11
13
- Requires-Dist: aiohttp (==3.9.5)
14
12
  Requires-Dist: argon2-cffi (==23.1.0)
15
13
  Requires-Dist: clea (==0.1.0rc4)
14
+ Requires-Dist: cryptography (>=46.0.3,<47.0.0)
16
15
  Requires-Dist: cytoolz (==0.12.3)
17
16
  Requires-Dist: deepdiff (>=8.6.1,<9.0.0)
18
- Requires-Dist: docker (==6.1.2)
19
- Requires-Dist: eth-abi (==4.0.0)
20
- Requires-Dist: eth-account (==0.8.0)
21
- Requires-Dist: eth-hash (==0.7.0)
22
- Requires-Dist: eth-keyfile (==0.6.1)
23
- Requires-Dist: eth-keys (==0.4.0)
24
- Requires-Dist: eth-rlp (==0.3.0)
25
- Requires-Dist: eth-typing (==3.5.2)
26
- Requires-Dist: eth-utils (==2.2.0)
27
17
  Requires-Dist: fastapi (==0.110.3)
28
- Requires-Dist: frozenlist (==1.4.1)
29
18
  Requires-Dist: halo (==0.0.31)
30
- Requires-Dist: hexbytes (==0.3.1)
31
- Requires-Dist: ipfshttpclient (==0.8.0a2)
32
- Requires-Dist: jsonschema (==4.3.3)
33
19
  Requires-Dist: multiaddr (==0.0.9)
34
- Requires-Dist: multidict (==6.0.5)
35
- Requires-Dist: open-aea-cli-ipfs (==1.65.0)
36
- Requires-Dist: open-aea-ledger-cosmos (==1.65.0)
37
- Requires-Dist: open-aea-ledger-ethereum (==1.65.0)
38
- Requires-Dist: open-aea-ledger-ethereum-flashbots (==1.65.0)
39
- Requires-Dist: open-autonomy (>=0.20.2,<0.21.0)
20
+ Requires-Dist: open-aea-cli-ipfs (>=2.0.6,<3.0.0)
21
+ Requires-Dist: open-aea-ledger-cosmos (>=2.0.6,<3.0.0)
22
+ Requires-Dist: open-aea-ledger-ethereum (>=2.0.6,<3.0.0)
23
+ Requires-Dist: open-aea-ledger-ethereum-flashbots (>=2.0.6,<3.0.0)
24
+ Requires-Dist: open-autonomy (>=0.21.4,<0.22.0)
40
25
  Requires-Dist: psutil (>=5.9.8,<6.0.0)
41
26
  Requires-Dist: pyinstaller (>=6.8.0,<7.0.0)
42
27
  Requires-Dist: requests-mock (>=1.12.1,<2.0.0)
43
- Requires-Dist: requests-toolbelt (==1.0.0)
44
- Requires-Dist: starlette (==0.37.2)
45
- Requires-Dist: twikit (==2.2.0)
46
28
  Requires-Dist: uvicorn (==0.27.0)
47
- Requires-Dist: web3 (==6.20.4)
48
29
  Description-Content-Type: text/markdown
49
30
 
50
31
  <h1 align="center">
@@ -27,11 +27,13 @@ import time
27
27
  import typing as t
28
28
  import uuid
29
29
  from abc import ABC, abstractmethod
30
+ from contextlib import suppress
30
31
  from dataclasses import dataclass
31
32
 
32
33
  from aea.crypto.base import LedgerApi
33
34
  from autonomy.chain.tx import TxSettler
34
35
  from web3 import Web3
36
+ from web3.exceptions import TimeExhausted
35
37
 
36
38
  from operate.constants import (
37
39
  ON_CHAIN_INTERACT_RETRIES,
@@ -58,7 +60,7 @@ MESSAGE_EXECUTION_FAILED_SETTLEMENT = (
58
60
  )
59
61
  MESSAGE_REQUIREMENTS_QUOTE_FAILED = "Cannot compute requirements for failed quote."
60
62
 
61
- ERC20_APPROVE_SELECTOR = "0x095ea7b3" # First 4 bytes of Web3.keccak(text='approve(address,uint256)').hex()[:10]
63
+ ERC20_APPROVE_SELECTOR = "0x095ea7b3" # First 4 bytes of Web3.keccak(text='approve(address,uint256)').to_0x_hex()[:10]
62
64
 
63
65
 
64
66
  @dataclass
@@ -370,48 +372,38 @@ class Provider(ABC):
370
372
  from_address = provider_request.params["from"]["address"]
371
373
  wallet = self.wallet_manager.load(chain.ledger_type)
372
374
  from_ledger_api = self._from_ledger_api(provider_request)
373
- tx_settler = TxSettler(
374
- ledger_api=from_ledger_api,
375
- crypto=wallet.crypto,
376
- chain_type=Chain(provider_request.params["from"]["chain"]),
377
- timeout=ON_CHAIN_INTERACT_TIMEOUT,
378
- retries=ON_CHAIN_INTERACT_RETRIES,
379
- sleep=ON_CHAIN_INTERACT_SLEEP,
380
- )
381
- tx_hashes = []
382
375
 
383
376
  for tx_label, tx in txs:
384
377
  self.logger.info(f"[PROVIDER] Executing transaction {tx_label}.")
385
- nonce = from_ledger_api.api.eth.get_transaction_count(from_address)
386
- tx["nonce"] = nonce # TODO: backport to TxSettler
387
- setattr( # noqa: B010
388
- tx_settler, "build", lambda *args, **kwargs: tx # noqa: B023
389
- )
390
- tx_receipt = tx_settler.transact(
391
- method=lambda: {},
392
- contract="",
393
- kwargs={},
394
- dry_run=False,
395
- )
396
- self.logger.info(f"[PROVIDER] Transaction {tx_label} settled.")
397
- tx_hashes.append(tx_receipt.get("transactionHash", "").hex())
378
+ tx_settler = TxSettler(
379
+ ledger_api=from_ledger_api,
380
+ crypto=wallet.crypto,
381
+ chain_type=Chain(provider_request.params["from"]["chain"]),
382
+ timeout=ON_CHAIN_INTERACT_TIMEOUT,
383
+ retries=ON_CHAIN_INTERACT_RETRIES,
384
+ sleep=ON_CHAIN_INTERACT_SLEEP,
385
+ tx_builder=lambda: {
386
+ **tx, # noqa: B023
387
+ "nonce": from_ledger_api.api.eth.get_transaction_count(
388
+ from_address
389
+ ),
390
+ },
391
+ ).transact()
392
+
393
+ with suppress(TimeExhausted):
394
+ tx_settler.settle()
395
+ self.logger.info(f"[PROVIDER] Transaction {tx_label} settled.")
398
396
 
399
397
  execution_data = ExecutionData(
400
398
  elapsed_time=time.time() - timestamp,
401
399
  message=None,
402
400
  timestamp=int(timestamp),
403
- from_tx_hash=tx_hashes[-1],
401
+ from_tx_hash=tx_settler.tx_hash,
404
402
  to_tx_hash=None,
405
403
  provider_data=None,
406
404
  )
407
405
  provider_request.execution_data = execution_data
408
- if len(tx_hashes) == len(txs):
409
- provider_request.status = ProviderRequestStatus.EXECUTION_PENDING
410
- else:
411
- provider_request.execution_data.message = (
412
- MESSAGE_EXECUTION_FAILED_SETTLEMENT
413
- )
414
- provider_request.status = ProviderRequestStatus.EXECUTION_FAILED
406
+ provider_request.status = ProviderRequestStatus.EXECUTION_PENDING
415
407
 
416
408
  except Exception as e: # pylint: disable=broad-except
417
409
  self.logger.error(f"[PROVIDER] Error executing request: {e}")
@@ -101,22 +101,7 @@ from operate.wallet.wallet_recovery_manager import (
101
101
 
102
102
 
103
103
  # TODO Backport to Open Autonomy
104
- def should_rebuild(error: str) -> bool:
105
- """Check if we should rebuild the transaction."""
106
- for _error in (
107
- "wrong transaction nonce",
108
- "OldNonce",
109
- "nonce too low",
110
- "replacement transaction underpriced",
111
- ):
112
- if _error in error:
113
- return True
114
- return False
115
-
116
-
117
- autonomy.chain.tx.ERRORS_TO_RETRY += ("replacement transaction underpriced",)
118
- autonomy.chain.tx.should_rebuild = should_rebuild
119
- # End backport to Open Autonomy
104
+ autonomy.chain.tx.ERRORS_TO_RETRY |= {"replacement transaction underpriced"}
120
105
 
121
106
 
122
107
  DEFAULT_MAX_RETRIES = 3
@@ -414,7 +399,9 @@ def create_app( # pylint: disable=too-many-locals, unused-argument, too-many-st
414
399
  return
415
400
 
416
401
  status = funding_job.cancel()
417
- if not status:
402
+ if status:
403
+ funding_job = None
404
+ else:
418
405
  logger.info("Funding job cancellation failed")
419
406
 
420
407
  def pause_all_services_on_startup() -> None:
@@ -53,6 +53,7 @@ AGENT_RUNNER_PREFIX = "agent_runner"
53
53
 
54
54
  ZERO_ADDRESS = "0x0000000000000000000000000000000000000000"
55
55
 
56
+ DEFAULT_TIMEOUT = 30
56
57
  MIN_AGENT_BOND = 1
57
58
  MIN_SECURITY_DEPOSIT = 1
58
59
 
@@ -39,7 +39,7 @@ class DualStakingTokenContract(Contract):
39
39
  ) -> JSONLike:
40
40
  """Build stake tx."""
41
41
  contract_instance = cls.get_instance(ledger_api, contract_address)
42
- data = contract_instance.encodeABI("stake", args=[service_id])
42
+ data = contract_instance.encode_abi("stake", args=[service_id])
43
43
  return dict(data=bytes.fromhex(data[2:]))
44
44
 
45
45
  @classmethod
@@ -50,7 +50,7 @@ class DualStakingTokenContract(Contract):
50
50
  ) -> JSONLike:
51
51
  """Build checkpoint tx."""
52
52
  contract_instance = cls.get_instance(ledger_api, contract_address)
53
- data = contract_instance.encodeABI("checkpoint")
53
+ data = contract_instance.encode_abi("checkpoint")
54
54
  return dict(data=bytes.fromhex(data[2:]))
55
55
 
56
56
  @classmethod
@@ -62,7 +62,7 @@ class DualStakingTokenContract(Contract):
62
62
  ) -> JSONLike:
63
63
  """Build unstake tx."""
64
64
  contract_instance = cls.get_instance(ledger_api, contract_address)
65
- data = contract_instance.encodeABI("unstake", args=[service_id])
65
+ data = contract_instance.encode_abi("unstake", args=[service_id])
66
66
  return dict(data=bytes.fromhex(data[2:]))
67
67
 
68
68
  @classmethod
@@ -4,11 +4,11 @@ version: 0.1.0
4
4
  type: contract
5
5
  description: Dual staking token contract
6
6
  license: Apache-2.0
7
- aea_version: '>=1.0.0, <2.0.0'
7
+ aea_version: '>=2.0.0, <3.0.0'
8
8
  fingerprint:
9
9
  __init__.py: bafybeickx6ot3syhywbaewl3mmnowa75dd5rogqy7pmmc5ctk4yd74pvoa
10
10
  build/DualStakingToken.json: bafybeibvh3lcvo242jqtyrfrbezgziedlymjlr7bmttvezhgjjxlgklcxa
11
- contract.py: bafybeiftspqmbq23cjifektsgwtxfcf7uaeywwdbsdvp67a7yi3wqc3pnm
11
+ contract.py: bafybeihkaxtx36c2yka2bzisj72zsmugbpyse2g7snq3shokjerr35rpse
12
12
  fingerprint_ignore_patterns: []
13
13
  contracts: []
14
14
  class_name: DualStakingTokenContract
@@ -4,7 +4,7 @@ version: 0.1.0
4
4
  type: contract
5
5
  description: ForeignOmnibridge
6
6
  license: Apache-2.0
7
- aea_version: '>=1.0.0, <2.0.0'
7
+ aea_version: '>=2.0.0, <3.0.0'
8
8
  fingerprint:
9
9
  __init__.py: bafybeibsmumov3s36vfo24xp2niilcp3ywju2d4yqfadllyjncqtgtndly
10
10
  build/ForeignOmnibridge.json: bafybeibmcflt7w5p5szgii7glbtrvjahweclowz2k7e6qjq7yfbvszy6em
@@ -50,7 +50,7 @@ class HomeOmnibridge(Contract):
50
50
  """Return the transaction hash of the matching TokensBridged event in the given block range."""
51
51
  ledger_api = cast(EthereumApi, ledger_api)
52
52
  event_signature = "TokensBridged(address,address,uint256,bytes32)"
53
- event_signature_hash = Web3.keccak(text=event_signature).hex()
53
+ event_signature_hash = Web3.keccak(text=event_signature).to_0x_hex()
54
54
 
55
55
  topics = [
56
56
  event_signature_hash, # TokensBridged
@@ -75,6 +75,6 @@ class HomeOmnibridge(Contract):
75
75
  for log in logs:
76
76
  decoded = eth_abi.decode(non_indexed_types, log["data"])
77
77
  if all(a == b for a, b in zip(decoded, non_indexed_values)):
78
- return log["transactionHash"].hex()
78
+ return log["transactionHash"].to_0x_hex()
79
79
 
80
80
  return None
@@ -4,11 +4,11 @@ version: 0.1.0
4
4
  type: contract
5
5
  description: HomeOmnibridge
6
6
  license: Apache-2.0
7
- aea_version: '>=1.0.0, <2.0.0'
7
+ aea_version: '>=2.0.0, <3.0.0'
8
8
  fingerprint:
9
9
  __init__.py: bafybeigrlrmwk3dhnoe4o5ovygtmudik7ybhsx2etqqjpvdi65rtlfpuhe
10
10
  build/HomeOmnibridge.json: bafybeihm4ff4mhoca2iwcogg5srqe2x6p674uxxc3v5dcci4emxfgc7qpm
11
- contract.py: bafybeifitn7z4oqvycixw56lvrzvifydqyhwtph3nlaivzcm22ogn4rmfq
11
+ contract.py: bafybeickvhwco3ccqfe3usnzvvxayvbpuhv2aoiryroehqqpfylap7h2f4
12
12
  fingerprint_ignore_patterns: []
13
13
  contracts: []
14
14
  class_name: HomeOmnibridge
@@ -4,7 +4,7 @@ version: 0.1.0
4
4
  type: contract
5
5
  description: Optimism L1 Standard Bridge
6
6
  license: Apache-2.0
7
- aea_version: '>=1.0.0, <2.0.0'
7
+ aea_version: '>=2.0.0, <3.0.0'
8
8
  fingerprint:
9
9
  __init__.py: bafybeifsbxn6hlccnpgqnpvaz3ph6ajl4is4mcyerr6aqp7heggagcphye
10
10
  build/L1StandardBridge.json: bafybeidq6jt7zmedtuxbbyggiqhu7w6543bunyd2vrbibg6y2svxsi2q5m
@@ -50,7 +50,7 @@ class L2StandardBridge(Contract):
50
50
  """Return the transaction hash of the matching ETHBridgeFinalized event in the given block range."""
51
51
  ledger_api = cast(EthereumApi, ledger_api)
52
52
  event_signature = "ETHBridgeFinalized(address,address,uint256,bytes)"
53
- event_signature_hash = Web3.keccak(text=event_signature).hex()
53
+ event_signature_hash = Web3.keccak(text=event_signature).to_0x_hex()
54
54
 
55
55
  topics = [
56
56
  event_signature_hash, # ETHBridgeFinalized
@@ -75,7 +75,7 @@ class L2StandardBridge(Contract):
75
75
  for log in logs:
76
76
  decoded = eth_abi.decode(non_indexed_types, log["data"])
77
77
  if all(a == b for a, b in zip(decoded, non_indexed_values)):
78
- return log["transactionHash"].hex()
78
+ return log["transactionHash"].to_0x_hex()
79
79
 
80
80
  return None
81
81
 
@@ -98,7 +98,7 @@ class L2StandardBridge(Contract):
98
98
  event_signature = (
99
99
  "ERC20BridgeFinalized(address,address,address,address,uint256,bytes)"
100
100
  )
101
- event_signature_hash = Web3.keccak(text=event_signature).hex()
101
+ event_signature_hash = Web3.keccak(text=event_signature).to_0x_hex()
102
102
 
103
103
  topics = [
104
104
  event_signature_hash, # ERC20BridgeFinalized
@@ -125,6 +125,6 @@ class L2StandardBridge(Contract):
125
125
  for log in logs:
126
126
  decoded = eth_abi.decode(non_indexed_types, log["data"])
127
127
  if all(a == b for a, b in zip(decoded, non_indexed_values)):
128
- return log["transactionHash"].hex()
128
+ return log["transactionHash"].to_0x_hex()
129
129
 
130
130
  return None
@@ -4,11 +4,11 @@ version: 0.1.0
4
4
  type: contract
5
5
  description: Optimism L2 Standard Bridge
6
6
  license: Apache-2.0
7
- aea_version: '>=1.0.0, <2.0.0'
7
+ aea_version: '>=2.0.0, <3.0.0'
8
8
  fingerprint:
9
9
  __init__.py: bafybeihp3ucqaxnuozotqcmvm6bjdds4rfbtr56sj7jeb6sbxlzikvtxyq
10
10
  build/L2StandardBridge.json: bafybeid2zqptx4awocztkhmifqsdnqrqcib73hbsp53snmfd24u7k3q6me
11
- contract.py: bafybeifah3y4wr4mkqdu4yuv364gxssdybuqf32wcszvrgwc33lucrjdw4
11
+ contract.py: bafybeiehyezv2ijyt5onme6ttbp5bmncarcoktsk3f3qxwmedjbhknjifi
12
12
  fingerprint_ignore_patterns: []
13
13
  contracts: []
14
14
  class_name: L2StandardBridge
@@ -4,7 +4,7 @@ version: 0.1.0
4
4
  type: contract
5
5
  description: Mech activity checker contract
6
6
  license: Apache-2.0
7
- aea_version: '>=1.0.0, <2.0.0'
7
+ aea_version: '>=2.0.0, <3.0.0'
8
8
  fingerprint:
9
9
  __init__.py: bafybeid4hg5rx75ltdjmekmxdddwqzbvblygmvlhws5samjxfirnkp666i
10
10
  build/MechActivity.json: bafybeiagrufcoljrlo2zklc7kxwh7eyrf67usos2bqnf7hss47hgm6low4
@@ -4,7 +4,7 @@ version: 0.1.0
4
4
  type: contract
5
5
  description: Optimism Mintable ERC20
6
6
  license: Apache-2.0
7
- aea_version: '>=1.0.0, <2.0.0'
7
+ aea_version: '>=2.0.0, <3.0.0'
8
8
  fingerprint:
9
9
  __init__.py: bafybeiffqotbwpjde3htgfuplg62x4btoekvitqrkrlx2vkjpciwzov6sy
10
10
  build/OptimismMintableERC20.json: bafybeieuzn55dh5zlg4ygtuifqso6hwbhsjvidxkjkh2vnah5psxqup62i
@@ -4,7 +4,7 @@ version: 0.1.0
4
4
  type: contract
5
5
  description: Recovery module
6
6
  license: Apache-2.0
7
- aea_version: '>=1.0.0, <2.0.0'
7
+ aea_version: '>=2.0.0, <3.0.0'
8
8
  fingerprint:
9
9
  __init__.py: bafybeicjlkmxs5ikpgdtgndifstpmmpaixwcbgouvmt6gowuhf5dy3dpgu
10
10
  build/RecoveryModule.json: bafybeifsyjdbprcp4kxpijlpqfovxcf7cv2ujapt3d5zn34wby26ldv4ky
@@ -4,7 +4,7 @@ version: 0.1.0
4
4
  type: contract
5
5
  description: Requester activity checker contract
6
6
  license: Apache-2.0
7
- aea_version: '>=1.0.0, <2.0.0'
7
+ aea_version: '>=2.0.0, <3.0.0'
8
8
  fingerprint:
9
9
  __init__.py: bafybeihibyzldqy5ecqvxdhnpejol5hkophsu53slyfmtpobts55zvyoba
10
10
  build/RequesterActivityChecker.json: bafybeiaaklcnrqr3tmxq3vdf3hqqbodknqaa2xfx7ltnp22bcjcfaj2yku
@@ -53,7 +53,7 @@ class StakingTokenContract(Contract):
53
53
  ) -> JSONLike:
54
54
  """Build stake tx."""
55
55
  contract_instance = cls.get_instance(ledger_api, contract_address)
56
- data = contract_instance.encodeABI("stake", args=[service_id])
56
+ data = contract_instance.encode_abi("stake", args=[service_id])
57
57
  return dict(data=bytes.fromhex(data[2:]))
58
58
 
59
59
  @classmethod
@@ -64,7 +64,7 @@ class StakingTokenContract(Contract):
64
64
  ) -> JSONLike:
65
65
  """Build checkpoint tx."""
66
66
  contract_instance = cls.get_instance(ledger_api, contract_address)
67
- data = contract_instance.encodeABI("checkpoint")
67
+ data = contract_instance.encode_abi("checkpoint")
68
68
  return dict(data=bytes.fromhex(data[2:]))
69
69
 
70
70
  @classmethod
@@ -76,7 +76,7 @@ class StakingTokenContract(Contract):
76
76
  ) -> JSONLike:
77
77
  """Build unstake tx."""
78
78
  contract_instance = cls.get_instance(ledger_api, contract_address)
79
- data = contract_instance.encodeABI("unstake", args=[service_id])
79
+ data = contract_instance.encode_abi("unstake", args=[service_id])
80
80
  return dict(data=bytes.fromhex(data[2:]))
81
81
 
82
82
  @classmethod
@@ -4,11 +4,11 @@ version: 0.1.0
4
4
  type: contract
5
5
  description: Service staking token contract
6
6
  license: Apache-2.0
7
- aea_version: '>=1.0.0, <2.0.0'
7
+ aea_version: '>=2.0.0, <3.0.0'
8
8
  fingerprint:
9
9
  __init__.py: bafybeicmgkagyhgwn2ktcdjbprijalbdyj26cvza4d3b7uvmehvy4mmr3i
10
10
  build/StakingToken.json: bafybeibhcwyawq377innrpq4ytpw5kotufjqo7cyd2rjhyit34mnbks5b4
11
- contract.py: bafybeigjt7a2biiorp4vmj4d3qkm3xbbohnawoetywojye5akhavlvkrxm
11
+ contract.py: bafybeickf3qfsscyieceoxxjoqkmecymkgkeqnarmcblprsowvubbqf7am
12
12
  fingerprint_ignore_patterns: []
13
13
  contracts: []
14
14
  class_name: StakingTokenContract
@@ -4,13 +4,13 @@ version: 0.1.0
4
4
  type: contract
5
5
  description: Uniswap V2 ERC20 contract
6
6
  license: Apache-2.0
7
- aea_version: '>=1.0.0, <2.0.0'
7
+ aea_version: '>=2.0.0, <3.0.0'
8
8
  fingerprint:
9
9
  __init__.py: bafybeia75xbvf6zogcloppdcu2zrwcl6d46ebj2zmm6dkge6eno3k6ysw4
10
10
  build/IUniswapV2ERC20.json: bafybeid45gy6x5ah5ub5p2obdhph36skpoy5qdhikwwfso7f3655iqnpc4
11
- contract.py: bafybeidxnb72n5xz4fvvxogbk2xk2vz4jvtsqa3berolr34v7cug3snism
11
+ contract.py: bafybeiarfpumhdmxh24xuiv6jprjq5f6qlrfrlxisz5enbvvbhotafp37e
12
12
  tests/__init__.py: bafybeigj3ngmfmyy4nw4xipxbqnx4nd42aqidqmmduwpx6hurssjqqkirq
13
- tests/test_contract.py: bafybeigaf7kyhuy4qn5dww2r62hffhytab3uhmjummsaiazzvqetvomyi4
13
+ tests/test_contract.py: bafybeic6ttl2zbcr5tfrfw6mwdumjw7lwjdy5pgeafacp6ch2sxstwd3lm
14
14
  fingerprint_ignore_patterns: []
15
15
  contracts: []
16
16
  class_name: UniswapV2ERC20Contract
@@ -68,7 +68,7 @@ class TestUniswapV2ERC20Contract(BaseContractTestCase):
68
68
  approval_value = 100
69
69
  data = self.contract.get_instance(
70
70
  self.ledger_api, self.contract_address
71
- ).encodeABI(fn_name="approve", args=[spender_address, approval_value])
71
+ ).encode_abi(abi_element_identifier="approve", args=[spender_address, approval_value])
72
72
  with mock.patch.object(
73
73
  self.ledger_api.api.eth, "get_transaction_count", return_value=NONCE
74
74
  ):
@@ -102,7 +102,7 @@ class TestUniswapV2ERC20Contract(BaseContractTestCase):
102
102
  value = 100
103
103
  data = self.contract.get_instance(
104
104
  self.ledger_api, self.contract_address
105
- ).encodeABI(fn_name="transfer", args=[spender_address, value])
105
+ ).encode_abi(abi_element_identifier="transfer", args=[spender_address, value])
106
106
  with mock.patch.object(
107
107
  self.ledger_api.api.eth, "get_transaction_count", return_value=NONCE
108
108
  ):
@@ -137,7 +137,7 @@ class TestUniswapV2ERC20Contract(BaseContractTestCase):
137
137
  value = 100
138
138
  data = self.contract.get_instance(
139
139
  self.ledger_api, self.contract_address
140
- ).encodeABI(fn_name="transferFrom", args=[from_address, to_address, value])
140
+ ).encode_abi(abi_element_identifier="transferFrom", args=[from_address, to_address, value])
141
141
  with mock.patch.object(
142
142
  self.ledger_api.api.eth, "get_transaction_count", return_value=NONCE
143
143
  ):
@@ -177,8 +177,8 @@ class TestUniswapV2ERC20Contract(BaseContractTestCase):
177
177
  s = b""
178
178
  data = self.contract.get_instance(
179
179
  self.ledger_api, self.contract_address
180
- ).encodeABI(
181
- fn_name="permit",
180
+ ).encode_abi(
181
+ abi_element_identifier="permit",
182
182
  args=[owner_address, spender_address, value, deadline, v, r, s],
183
183
  )
184
184
  with mock.patch.object(
@@ -144,9 +144,11 @@ class KeysManager:
144
144
  key = Key(
145
145
  ledger=LedgerType.ETHEREUM,
146
146
  address=crypto.address,
147
- private_key=crypto.encrypt(password=self.password)
148
- if self.password is not None
149
- else crypto.private_key,
147
+ private_key=(
148
+ crypto.encrypt(password=self.password)
149
+ if self.password is not None
150
+ else crypto.private_key
151
+ ),
150
152
  )
151
153
  for path in (
152
154
  self.path / f"{crypto.address}.bak",
@@ -27,7 +27,6 @@ from math import ceil
27
27
  from aea.crypto.base import LedgerApi
28
28
  from aea.crypto.registries import make_ledger_api
29
29
  from aea_ledger_ethereum import DEFAULT_GAS_PRICE_STRATEGIES, EIP1559, GWEI, to_wei
30
- from web3.middleware import geth_poa_middleware
31
30
 
32
31
  from operate.operate_types import Chain
33
32
 
@@ -133,12 +132,9 @@ def make_chain_ledger_api(
133
132
  address=rpc or get_default_rpc(chain=chain),
134
133
  chain_id=chain.id,
135
134
  gas_price_strategies=gas_price_strategies,
136
- poa_chain=chain == Chain.POLYGON,
135
+ poa_chain=chain in (Chain.OPTIMISM, Chain.POLYGON),
137
136
  )
138
137
 
139
- if chain == Chain.OPTIMISM:
140
- ledger_api.api.middleware_onion.inject(geth_poa_middleware, layer=0)
141
-
142
138
  return ledger_api
143
139
 
144
140
 
@@ -183,7 +179,6 @@ def update_tx_with_gas_pricing(tx: t.Dict, ledger_api: LedgerApi) -> None:
183
179
  # TODO This gas management should be done at a lower level in the library
184
180
  def update_tx_with_gas_estimate(tx: t.Dict, ledger_api: LedgerApi) -> None:
185
181
  """Update transaction with gas estimate."""
186
- print(f"[LEDGER] Trying to update transaction gas {tx['from']=} {tx['gas']=}.")
187
182
  original_from = tx["from"]
188
183
  original_gas = tx.get("gas", 1)
189
184
 
@@ -192,7 +187,6 @@ def update_tx_with_gas_estimate(tx: t.Dict, ledger_api: LedgerApi) -> None:
192
187
  tx["gas"] = 1
193
188
  ledger_api.update_with_gas_estimate(tx)
194
189
  if tx["gas"] > 1:
195
- print(f"[LEDGER] Gas estimated successfully {tx['from']=} {tx['gas']=}.")
196
190
  break
197
191
 
198
192
  tx["from"] = original_from
@@ -46,7 +46,6 @@ for _chain in CHAINS:
46
46
  "service_registry_token_utility": profile[
47
47
  "service_registry_token_utility"
48
48
  ],
49
- "service_manager": profile["service_manager_token"],
50
49
  "gnosis_safe_proxy_factory": profile["gnosis_safe_proxy_factory"],
51
50
  "gnosis_safe_same_address_multisig": profile[
52
51
  "gnosis_safe_same_address_multisig"
@@ -32,8 +32,6 @@ from starlette.types import Receive, Scope, Send
32
32
  from operate.operate_http.exceptions import NotAllowed, ResourceException
33
33
 
34
34
 
35
- # pylint: disable=no-self-use
36
-
37
35
  GenericResource = t.TypeVar("GenericResource")
38
36
  PostPayload = t.TypeVar("PostPayload")
39
37
  PostResponse = t.TypeVar("PostResponse")