olas-operate-middleware 0.1.0rc59__py3-none-any.whl → 0.13.2__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.
Files changed (98) hide show
  1. olas_operate_middleware-0.13.2.dist-info/METADATA +75 -0
  2. olas_operate_middleware-0.13.2.dist-info/RECORD +101 -0
  3. {olas_operate_middleware-0.1.0rc59.dist-info → olas_operate_middleware-0.13.2.dist-info}/WHEEL +1 -1
  4. operate/__init__.py +17 -0
  5. operate/account/user.py +35 -9
  6. operate/bridge/bridge_manager.py +470 -0
  7. operate/bridge/providers/lifi_provider.py +377 -0
  8. operate/bridge/providers/native_bridge_provider.py +677 -0
  9. operate/bridge/providers/provider.py +469 -0
  10. operate/bridge/providers/relay_provider.py +457 -0
  11. operate/cli.py +1565 -417
  12. operate/constants.py +60 -12
  13. operate/data/README.md +19 -0
  14. operate/data/contracts/{service_staking_token → dual_staking_token}/__init__.py +2 -2
  15. operate/data/contracts/dual_staking_token/build/DualStakingToken.json +443 -0
  16. operate/data/contracts/dual_staking_token/contract.py +132 -0
  17. operate/data/contracts/dual_staking_token/contract.yaml +23 -0
  18. operate/{ledger/base.py → data/contracts/foreign_omnibridge/__init__.py} +2 -19
  19. operate/data/contracts/foreign_omnibridge/build/ForeignOmnibridge.json +1372 -0
  20. operate/data/contracts/foreign_omnibridge/contract.py +130 -0
  21. operate/data/contracts/foreign_omnibridge/contract.yaml +23 -0
  22. operate/{ledger/solana.py → data/contracts/home_omnibridge/__init__.py} +2 -20
  23. operate/data/contracts/home_omnibridge/build/HomeOmnibridge.json +1421 -0
  24. operate/data/contracts/home_omnibridge/contract.py +80 -0
  25. operate/data/contracts/home_omnibridge/contract.yaml +23 -0
  26. operate/data/contracts/l1_standard_bridge/__init__.py +20 -0
  27. operate/data/contracts/l1_standard_bridge/build/L1StandardBridge.json +831 -0
  28. operate/data/contracts/l1_standard_bridge/contract.py +158 -0
  29. operate/data/contracts/l1_standard_bridge/contract.yaml +23 -0
  30. operate/data/contracts/l2_standard_bridge/__init__.py +20 -0
  31. operate/data/contracts/l2_standard_bridge/build/L2StandardBridge.json +626 -0
  32. operate/data/contracts/l2_standard_bridge/contract.py +130 -0
  33. operate/data/contracts/l2_standard_bridge/contract.yaml +23 -0
  34. operate/data/contracts/mech_activity/__init__.py +20 -0
  35. operate/data/contracts/mech_activity/build/MechActivity.json +111 -0
  36. operate/data/contracts/mech_activity/contract.py +44 -0
  37. operate/data/contracts/mech_activity/contract.yaml +23 -0
  38. operate/data/contracts/optimism_mintable_erc20/__init__.py +20 -0
  39. operate/data/contracts/optimism_mintable_erc20/build/OptimismMintableERC20.json +491 -0
  40. operate/data/contracts/optimism_mintable_erc20/contract.py +45 -0
  41. operate/data/contracts/optimism_mintable_erc20/contract.yaml +23 -0
  42. operate/data/contracts/recovery_module/__init__.py +20 -0
  43. operate/data/contracts/recovery_module/build/RecoveryModule.json +811 -0
  44. operate/data/contracts/recovery_module/contract.py +61 -0
  45. operate/data/contracts/recovery_module/contract.yaml +23 -0
  46. operate/data/contracts/requester_activity_checker/__init__.py +20 -0
  47. operate/data/contracts/requester_activity_checker/build/RequesterActivityChecker.json +111 -0
  48. operate/data/contracts/requester_activity_checker/contract.py +33 -0
  49. operate/data/contracts/requester_activity_checker/contract.yaml +23 -0
  50. operate/data/contracts/staking_token/__init__.py +20 -0
  51. operate/data/contracts/staking_token/build/StakingToken.json +1336 -0
  52. operate/data/contracts/{service_staking_token → staking_token}/contract.py +27 -13
  53. operate/data/contracts/staking_token/contract.yaml +23 -0
  54. operate/data/contracts/uniswap_v2_erc20/contract.yaml +3 -1
  55. operate/data/contracts/uniswap_v2_erc20/tests/__init__.py +20 -0
  56. operate/data/contracts/uniswap_v2_erc20/tests/test_contract.py +363 -0
  57. operate/keys.py +118 -33
  58. operate/ledger/__init__.py +159 -56
  59. operate/ledger/profiles.py +321 -18
  60. operate/migration.py +555 -0
  61. operate/{http → operate_http}/__init__.py +3 -2
  62. operate/{http → operate_http}/exceptions.py +6 -4
  63. operate/operate_types.py +544 -0
  64. operate/pearl.py +13 -1
  65. operate/quickstart/analyse_logs.py +118 -0
  66. operate/quickstart/claim_staking_rewards.py +104 -0
  67. operate/quickstart/reset_configs.py +106 -0
  68. operate/quickstart/reset_password.py +70 -0
  69. operate/quickstart/reset_staking.py +145 -0
  70. operate/quickstart/run_service.py +726 -0
  71. operate/quickstart/stop_service.py +72 -0
  72. operate/quickstart/terminate_on_chain_service.py +83 -0
  73. operate/quickstart/utils.py +298 -0
  74. operate/resource.py +62 -3
  75. operate/services/agent_runner.py +202 -0
  76. operate/services/deployment_runner.py +868 -0
  77. operate/services/funding_manager.py +929 -0
  78. operate/services/health_checker.py +280 -0
  79. operate/services/manage.py +2356 -620
  80. operate/services/protocol.py +1246 -340
  81. operate/services/service.py +756 -391
  82. operate/services/utils/mech.py +103 -0
  83. operate/services/utils/tendermint.py +86 -12
  84. operate/settings.py +70 -0
  85. operate/utils/__init__.py +135 -0
  86. operate/utils/gnosis.py +407 -80
  87. operate/utils/single_instance.py +226 -0
  88. operate/utils/ssl.py +133 -0
  89. operate/wallet/master.py +708 -123
  90. operate/wallet/wallet_recovery_manager.py +507 -0
  91. olas_operate_middleware-0.1.0rc59.dist-info/METADATA +0 -304
  92. olas_operate_middleware-0.1.0rc59.dist-info/RECORD +0 -41
  93. operate/data/contracts/service_staking_token/build/ServiceStakingToken.json +0 -1273
  94. operate/data/contracts/service_staking_token/contract.yaml +0 -23
  95. operate/ledger/ethereum.py +0 -48
  96. operate/types.py +0 -260
  97. {olas_operate_middleware-0.1.0rc59.dist-info → olas_operate_middleware-0.13.2.dist-info}/entry_points.txt +0 -0
  98. {olas_operate_middleware-0.1.0rc59.dist-info → olas_operate_middleware-0.13.2.dist-info/licenses}/LICENSE +0 -0
@@ -0,0 +1,158 @@
1
+ # -*- coding: utf-8 -*-
2
+ # ------------------------------------------------------------------------------
3
+ #
4
+ # Copyright 2024 Valory AG
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ # ------------------------------------------------------------------------------
19
+
20
+ """This module contains the class to connect to the `L1StandardBridge` contract."""
21
+
22
+ from math import ceil
23
+
24
+ from aea.common import JSONLike
25
+ from aea.configurations.base import PublicId
26
+ from aea.contracts.base import Contract
27
+ from aea.crypto.base import LedgerApi
28
+
29
+
30
+ PLACEHOLDER_NATIVE_TOKEN_ADDRESS = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" # nosec
31
+
32
+ # Minimum gas required for L2 execution when bridging from L1.
33
+ # Prevents underfunded messages that could fail on L2.
34
+ DEFAULT_BRIDGE_MIN_GAS_LIMIT = 300_000
35
+
36
+ DEFAULT_GAS_BRIDGE_ETH_TO = 800_000
37
+ DEFAULT_GAS_BRIDGE_ERC20_TO = 800_000
38
+
39
+ # By simulations, nonzero-ERC20-bridge gas ~ 1.05 zero-ERC20-bridge gas
40
+ NONZERO_ERC20_GAS_FACTOR = 1.15
41
+
42
+
43
+ class L1StandardBridge(Contract):
44
+ """Optimism L1StandardBridge."""
45
+
46
+ contract_id = PublicId.from_str("valory/l1_standard_bridge:0.1.0")
47
+
48
+ @classmethod
49
+ def supports_bridge_eth_to(
50
+ cls,
51
+ ledger_api: LedgerApi,
52
+ contract_address: str,
53
+ ) -> bool:
54
+ """Checks if native ETH bridging via `bridgeETHTo` is supported."""
55
+ contract_instance = cls.get_instance(
56
+ ledger_api=ledger_api, contract_address=contract_address
57
+ )
58
+ try:
59
+ contract_instance.functions.bridgeETHTo(
60
+ "0x0000000000000000000000000000000000000000",
61
+ 0,
62
+ b""
63
+ ).call({"from": PLACEHOLDER_NATIVE_TOKEN_ADDRESS, "value": 0})
64
+ return True
65
+ except Exception: # pylint: disable=broad-except
66
+ return False
67
+
68
+ @classmethod
69
+ def build_bridge_eth_to_tx(
70
+ cls,
71
+ ledger_api: LedgerApi,
72
+ contract_address: str,
73
+ sender: str,
74
+ to: str,
75
+ amount: int,
76
+ min_gas_limit: int,
77
+ extra_data: bytes,
78
+ raise_on_try: bool = False,
79
+ ) -> JSONLike:
80
+ """Build bridgeETHTo tx."""
81
+ contract_instance = cls.get_instance(
82
+ ledger_api=ledger_api, contract_address=contract_address
83
+ )
84
+ tx = contract_instance.functions.bridgeETHTo(
85
+ to, min_gas_limit, extra_data
86
+ ).build_transaction(
87
+ {
88
+ "from": sender,
89
+ "value": amount,
90
+ "gas": DEFAULT_GAS_BRIDGE_ETH_TO,
91
+ "gasPrice": ledger_api.api.eth.gas_price,
92
+ "nonce": ledger_api.api.eth.get_transaction_count(sender),
93
+ }
94
+ )
95
+ return ledger_api.update_with_gas_estimate(
96
+ transaction=tx,
97
+ raise_on_try=raise_on_try,
98
+ )
99
+
100
+ @classmethod
101
+ def build_bridge_erc20_to_tx(
102
+ cls,
103
+ ledger_api: LedgerApi,
104
+ contract_address: str,
105
+ sender: str,
106
+ local_token: str,
107
+ remote_token: str,
108
+ to: str,
109
+ amount: int,
110
+ min_gas_limit: int,
111
+ extra_data: bytes,
112
+ raise_on_try: bool = False,
113
+ ) -> JSONLike:
114
+ """Build bridgeERC20To tx."""
115
+ contract_instance = cls.get_instance(
116
+ ledger_api=ledger_api, contract_address=contract_address
117
+ )
118
+ tx = contract_instance.functions.bridgeERC20To(
119
+ local_token, remote_token, to, amount, min_gas_limit, extra_data
120
+ ).build_transaction(
121
+ {
122
+ "from": sender,
123
+ "gas": 1,
124
+ "gasPrice": ledger_api.api.eth.gas_price,
125
+ "nonce": ledger_api.api.eth.get_transaction_count(sender),
126
+ }
127
+ )
128
+
129
+ ledger_api.update_with_gas_estimate(
130
+ transaction=tx,
131
+ raise_on_try=raise_on_try,
132
+ )
133
+
134
+ if tx["gas"] > 1:
135
+ return tx
136
+
137
+ tx_zero = contract_instance.functions.bridgeERC20To(
138
+ local_token, remote_token, to, 0, min_gas_limit, extra_data
139
+ ).build_transaction(
140
+ {
141
+ "from": PLACEHOLDER_NATIVE_TOKEN_ADDRESS,
142
+ "gas": 1,
143
+ "gasPrice": ledger_api.api.eth.gas_price,
144
+ "nonce": ledger_api.api.eth.get_transaction_count(sender),
145
+ }
146
+ )
147
+
148
+ ledger_api.update_with_gas_estimate(
149
+ transaction=tx_zero,
150
+ raise_on_try=raise_on_try,
151
+ )
152
+
153
+ if tx_zero["gas"] > 1:
154
+ tx["gas"] = ceil(tx_zero["gas"] * NONZERO_ERC20_GAS_FACTOR)
155
+ return tx
156
+
157
+ tx["gas"] = DEFAULT_GAS_BRIDGE_ERC20_TO
158
+ return tx
@@ -0,0 +1,23 @@
1
+ name: l1_standard_bridge
2
+ author: valory
3
+ version: 0.1.0
4
+ type: contract
5
+ description: Optimism L1 Standard Bridge
6
+ license: Apache-2.0
7
+ aea_version: '>=1.0.0, <2.0.0'
8
+ fingerprint:
9
+ __init__.py: bafybeifsbxn6hlccnpgqnpvaz3ph6ajl4is4mcyerr6aqp7heggagcphye
10
+ build/L1StandardBridge.json: bafybeidq6jt7zmedtuxbbyggiqhu7w6543bunyd2vrbibg6y2svxsi2q5m
11
+ contract.py: bafybeienitro6gds2ny7guziwdu3uapmj3xxuzmqyvsect4zqmrouity2e
12
+ fingerprint_ignore_patterns: []
13
+ contracts: []
14
+ class_name: L1StandardBridge
15
+ contract_interface_paths:
16
+ ethereum: build/L1StandardBridge.json
17
+ dependencies:
18
+ open-aea-ledger-ethereum:
19
+ version: ==1.60.0
20
+ open-aea-test-autonomy:
21
+ version: ==0.18.3
22
+ web3:
23
+ version: <7,>=6.0.0
@@ -0,0 +1,20 @@
1
+ # -*- coding: utf-8 -*-
2
+ # ------------------------------------------------------------------------------
3
+ #
4
+ # Copyright 2025 Valory AG
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ # ------------------------------------------------------------------------------
19
+
20
+ """This module contains the support resources for the `L2StandardBridge` contract."""