olas-operate-middleware 0.10.11__py3-none-any.whl → 0.10.13__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: olas-operate-middleware
3
- Version: 0.10.11
3
+ Version: 0.10.13
4
4
  Summary:
5
5
  Author: David Vilela
6
6
  Author-email: dvilelaf@gmail.com
@@ -15,14 +15,14 @@ Requires-Dist: clea (==0.1.0rc4)
15
15
  Requires-Dist: cytoolz (==0.12.3)
16
16
  Requires-Dist: deepdiff (>=8.0.1,<9.0.0)
17
17
  Requires-Dist: docker (==6.1.2)
18
- Requires-Dist: eth-abi (==5.1.0)
18
+ Requires-Dist: eth-abi (==4.0.0)
19
19
  Requires-Dist: eth-account (==0.8.0)
20
20
  Requires-Dist: eth-hash (==0.7.0)
21
21
  Requires-Dist: eth-keyfile (==0.6.1)
22
22
  Requires-Dist: eth-keys (==0.4.0)
23
23
  Requires-Dist: eth-rlp (==0.3.0)
24
24
  Requires-Dist: eth-typing (==3.5.2)
25
- Requires-Dist: eth-utils (==2.3.1)
25
+ Requires-Dist: eth-utils (==2.2.0)
26
26
  Requires-Dist: fastapi (==0.110.3)
27
27
  Requires-Dist: frozenlist (==1.4.1)
28
28
  Requires-Dist: halo (==0.0.31)
@@ -6,8 +6,8 @@ operate/bridge/providers/lifi_provider.py,sha256=FpAlBAA_gOt-oOHKhGaOQhhTZIL-hgY
6
6
  operate/bridge/providers/native_bridge_provider.py,sha256=gG8bSyxUoAVEF6_J9tn1qKRv1PnXuMJdMwUAVJ4GJz8,24647
7
7
  operate/bridge/providers/provider.py,sha256=i54RL7m4wMSADM_D_V_quQump_ipPTmByUc-c-AOLPQ,19687
8
8
  operate/bridge/providers/relay_provider.py,sha256=L7D-PKepsuBadarJmrNneZk0bsrh88u05uD6_2MSss4,17341
9
- operate/cli.py,sha256=REHgtFvaSs7jm7B0K1tPkEKco7Bmd06KQvYAQstFPyw,55783
10
- operate/constants.py,sha256=ilmLiv0H_xKZyfqmfEdqMci-TlLQyNPp9rrxxqtkqFI,2992
9
+ operate/cli.py,sha256=J5k9RGX-VH2aLMJ6N8iut2hSlwTdKF2VJksLHkKZ-SA,56012
10
+ operate/constants.py,sha256=p_kYu4YyMnoZKHVrhhSjJlCCjWxRdSIzWfvQQeO8Ud4,3030
11
11
  operate/data/README.md,sha256=jGPyZTvg2LCGdllvmYxmFMkkkiXb6YWatbqIkcX3kv4,879
12
12
  operate/data/__init__.py,sha256=ttC51Yqk9c4ehpIgs1Qbe7aJvzkrbbdZ1ClaCxJYByE,864
13
13
  operate/data/contracts/__init__.py,sha256=_th54_WvL0ibGy-b6St0Ne9DX-fyjsh-tNOKDn-cWrg,809
@@ -58,7 +58,7 @@ operate/data/contracts/uniswap_v2_erc20/contract.yaml,sha256=XUdz-XtKtmZgLfItbO8
58
58
  operate/data/contracts/uniswap_v2_erc20/tests/__init__.py,sha256=3Arw8dsCsJz6hVOl0t9UjFASHXbV9yp3hw6x4HqgXpU,847
59
59
  operate/data/contracts/uniswap_v2_erc20/tests/test_contract.py,sha256=FzZbw9OTcr_yvjOXpk9YcO-K40eyDARyybcfSHDg2Ps,13392
60
60
  operate/keys.py,sha256=mPZ2KZujPjHZ1RNVD2vkLzK_3q6J32o9q0WCB6Raxs4,5237
61
- operate/ledger/__init__.py,sha256=s8GEcV-VtKdBQb9DqW7uf-tj_NpFNn13aNHCh0eqfaQ,3037
61
+ operate/ledger/__init__.py,sha256=hGTrWaPBRCodIFYUKVzfx_t_kpDa7SYyFjat8OhNRqA,3026
62
62
  operate/ledger/profiles.py,sha256=LaYPyz-1Cy-KRRuXk60W0ZXQJ2cwoWmDxYrL_psIdKo,11993
63
63
  operate/migration.py,sha256=mh921s8FG48XMfDu63ojrdhU7j_RZsdl5E2BvxsbkWE,16937
64
64
  operate/operate_http/__init__.py,sha256=dxCIVSUos23M4R-PFZZG6k5QrOlEiK0SxhCYSFNxh7U,4711
@@ -78,10 +78,10 @@ operate/resource.py,sha256=E59oIVqf6B6nN4LTmf_o2iCgLFAogTLPjm_cK6kMVxg,6305
78
78
  operate/services/__init__.py,sha256=isrThS-Ccu5Sc15JZgkN4uTAVaSg-NwUUSDeTyJEqLk,855
79
79
  operate/services/agent_runner.py,sha256=6tJePUJmlRxlIugT2fDaCJHSrQlDnl1t9pbg3-7EmCQ,7560
80
80
  operate/services/deployment_runner.py,sha256=Su73o7cdH6fkQfj468K77J04a_TWiokJwbMyVQ25xko,27067
81
- operate/services/health_checker.py,sha256=2KSEDxG3YmGolUDU--648ny0UJpTAAKvxkcr_VZQv-I,9654
82
- operate/services/manage.py,sha256=5yUZPOFZYHVBV8KSZfGQf9JGsoTFZgfaCUsYbQdPlSw,118137
81
+ operate/services/health_checker.py,sha256=MuGZ0pQ7zyJVbNU9FJR5gR8zTE7z7kCH1h5Ampv9IC0,9837
82
+ operate/services/manage.py,sha256=XzT9y29x_3kaHEwziIP6uDoKxtsmufwSiwdQP3bJUy8,118147
83
83
  operate/services/protocol.py,sha256=FoJmHz5nukI01-VYtReMsIl3JT5RgZZSLX-mf9EXQ90,62903
84
- operate/services/service.py,sha256=ZbkTryuK3kBkdvhxd9QDyXRxRFsGGG9WZqbLGOUPloc,39301
84
+ operate/services/service.py,sha256=1gjBu3yzwFKX54xEeyRZ_NzRjuYk_gpfWzS8JWTQ2xs,39319
85
85
  operate/services/utils/__init__.py,sha256=TvioaZ1mfTRUSCtrQoLNAp4WMVXyqEJqFJM4PxSQCRU,24
86
86
  operate/services/utils/mech.py,sha256=W2x4dqodivNKXjWU-Brp40QhoUHsIMyNAO7-caMoR0Q,3821
87
87
  operate/services/utils/tendermint.py,sha256=3h9nDb2Z89T0RwUr_AaVjqtymQmsu3u6DAVCfL_k1U0,25591
@@ -91,8 +91,8 @@ operate/utils/ssl.py,sha256=O5DrDoZD4T4qQuHP8GLwWUVxQ-1qXeefGp6uDJiF2lM,4308
91
91
  operate/wallet/__init__.py,sha256=NGiozD3XhvkBi7_FaOWQ8x1thZPK4uGpokJaeDY_o2w,813
92
92
  operate/wallet/master.py,sha256=jLFLcRgO6ADok2DigpK59PFJ4mnc_0H9a4RRioYzlvw,30811
93
93
  operate/wallet/wallet_recovery_manager.py,sha256=sXEZyvFMePxQKf9NJg4HT90mPg4-7ZcTbvggMnKKzhA,7795
94
- olas_operate_middleware-0.10.11.dist-info/LICENSE,sha256=mdBDB-mWKV5Cz4ejBzBiKqan6Z8zVLAh9xwM64O2FW4,11339
95
- olas_operate_middleware-0.10.11.dist-info/METADATA,sha256=xwCWaxrKY3mwm1EYluGPODMlj_fdPGyPdoU7xt6m7_U,2036
96
- olas_operate_middleware-0.10.11.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
97
- olas_operate_middleware-0.10.11.dist-info/entry_points.txt,sha256=dM1g2I7ODApKQFcgl5J4NGA7pfBTo6qsUTXM-j2OLlw,44
98
- olas_operate_middleware-0.10.11.dist-info/RECORD,,
94
+ olas_operate_middleware-0.10.13.dist-info/LICENSE,sha256=mdBDB-mWKV5Cz4ejBzBiKqan6Z8zVLAh9xwM64O2FW4,11339
95
+ olas_operate_middleware-0.10.13.dist-info/METADATA,sha256=EmIBE2jBrbkVwIrf9EzjUuq4gIDw3htcxDRU-AISWLY,2036
96
+ olas_operate_middleware-0.10.13.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
97
+ olas_operate_middleware-0.10.13.dist-info/entry_points.txt,sha256=dM1g2I7ODApKQFcgl5J4NGA7pfBTo6qsUTXM-j2OLlw,44
98
+ olas_operate_middleware-0.10.13.dist-info/RECORD,,
operate/cli.py CHANGED
@@ -1325,6 +1325,7 @@ def _daemon(
1325
1325
  {
1326
1326
  "ssl_keyfile": ssl_keyfile,
1327
1327
  "ssl_certfile": ssl_certfile,
1328
+ "ssl_version": 2,
1328
1329
  }
1329
1330
  )
1330
1331
 
@@ -1333,10 +1334,15 @@ def _daemon(
1333
1334
  url = f"http{'s' if ssl_keyfile and ssl_certfile else ''}://{host}:{port}/shutdown"
1334
1335
  logger.info(f"trying to stop previous instance with {url}")
1335
1336
  try:
1336
- requests.get(url, timeout=3, verify=False) # nosec
1337
- logger.info("previous instance stopped")
1338
- except Exception: # pylint: disable=broad-except
1339
- logger.exception("failed to stop previous instance. probably not running")
1337
+ requests.get(
1338
+ f"https://{host}:{port}/shutdown", timeout=3, verify=False # nosec
1339
+ )
1340
+ except requests.exceptions.SSLError:
1341
+ logger.warning("SSL failed, trying HTTP fallback...")
1342
+ try:
1343
+ requests.get(f"http://{host}:{port}/shutdown", timeout=3)
1344
+ except Exception: # pylint: disable=broad-except
1345
+ logger.exception("Failed to stop previous instance")
1340
1346
 
1341
1347
  server = Server(Config(**config_kwargs))
1342
1348
  app._server = server # pylint: disable=protected-access
operate/constants.py CHANGED
@@ -32,6 +32,7 @@ DEPLOYMENT_DIR = "deployment"
32
32
  DEPLOYMENT_JSON = "deployment.json"
33
33
  CONFIG_JSON = "config.json"
34
34
  USER_JSON = "user.json"
35
+ HEALTHCHECK_JSON = "healthcheck.json"
35
36
 
36
37
  AGENT_PERSISTENT_STORAGE_DIR = "persistent_data"
37
38
  AGENT_PERSISTENT_STORAGE_ENV_VAR = "STORE_PATH"
@@ -40,8 +40,8 @@ ARBITRUM_ONE_RPC = os.environ.get("ARBITRUM_ONE_RPC", "https://arb1.arbitrum.io/
40
40
  BASE_RPC = os.environ.get("BASE_RPC", "https://mainnet.base.org")
41
41
  CELO_RPC = os.environ.get("CELO_RPC", "https://forno.celo.org")
42
42
  ETHEREUM_RPC = os.environ.get("ETHEREUM_RPC", "https://ethereum.publicnode.com")
43
- GNOSIS_RPC = os.environ.get("GNOSIS_RPC", "https://rpc-gate.autonolas.tech/gnosis-rpc/")
44
- MODE_RPC = os.environ.get("MODE_RPC", "https://mainnet.mode.network/")
43
+ GNOSIS_RPC = os.environ.get("GNOSIS_RPC", "https://gnosis-rpc.publicnode.com")
44
+ MODE_RPC = os.environ.get("MODE_RPC", "https://mainnet.mode.network")
45
45
  OPTIMISM_RPC = os.environ.get("OPTIMISM_RPC", "https://mainnet.optimism.io")
46
46
  POLYGON_RPC = os.environ.get("POLYGON_RPC", "https://polygon-rpc.com")
47
47
  SOLANA_RPC = os.environ.get("SOLANA_RPC", "https://api.mainnet-beta.solana.com")
@@ -29,7 +29,7 @@ from traceback import print_exc
29
29
 
30
30
  import aiohttp # type: ignore
31
31
 
32
- from operate.constants import HEALTH_CHECK_URL
32
+ from operate.constants import HEALTHCHECK_JSON, HEALTH_CHECK_URL
33
33
  from operate.services.manage import ServiceManager # type: ignore
34
34
 
35
35
 
@@ -107,12 +107,14 @@ class HealthChecker:
107
107
  response_json = await resp.json()
108
108
 
109
109
  if service_path:
110
- healthcheck_json_path = service_path / "healthcheck.json"
110
+ healthcheck_json_path = service_path / HEALTHCHECK_JSON
111
111
  healthcheck_json_path.write_text(
112
112
  json.dumps(response_json, indent=2), encoding="utf-8"
113
113
  )
114
114
 
115
- return response_json.get("is_transitioning_fast", False)
115
+ return response_json.get(
116
+ "is_healthy", response_json.get("is_transitioning_fast", False)
117
+ ) # TODO: remove is_transitioning_fast after all the services start reporting is_healthy
116
118
  except Exception as e: # pylint: disable=broad-except
117
119
  self.logger.error(
118
120
  f"[HEALTH_CHECKER] error {e}. set not healthy!", exc_info=True
@@ -1267,7 +1267,7 @@ class ServiceManager:
1267
1267
  chain=chain,
1268
1268
  staking_program_id=current_staking_program,
1269
1269
  )
1270
- else:
1270
+ elif is_staked:
1271
1271
  # at least claim the rewards if we cannot unstake yet
1272
1272
  self.claim_on_chain_from_safe(
1273
1273
  service_config_id=service_config_id,
@@ -68,6 +68,7 @@ from operate.constants import (
68
68
  CONFIG_JSON,
69
69
  DEPLOYMENT_DIR,
70
70
  DEPLOYMENT_JSON,
71
+ HEALTHCHECK_JSON,
71
72
  )
72
73
  from operate.keys import KeysManager
73
74
  from operate.operate_http.exceptions import NotAllowed
@@ -911,7 +912,7 @@ class Service(LocalResource):
911
912
 
912
913
  def get_latest_healthcheck(self) -> t.Dict:
913
914
  """Return the latest stored healthcheck.json"""
914
- healthcheck_json_path = self.path / "healthcheck.json"
915
+ healthcheck_json_path = self.path / HEALTHCHECK_JSON
915
916
 
916
917
  if not healthcheck_json_path.exists():
917
918
  return {}
@@ -924,7 +925,7 @@ class Service(LocalResource):
924
925
 
925
926
  def remove_latest_healthcheck(self) -> None:
926
927
  """Remove the latest healthcheck.json, if it exists"""
927
- healthcheck_json_path = self.path / "healthcheck.json"
928
+ healthcheck_json_path = self.path / HEALTHCHECK_JSON
928
929
 
929
930
  if healthcheck_json_path.exists():
930
931
  try: