Skip to content

Commit e448c66

Browse files
committed
refactor: ♻️ Simplify the configs into one
1 parent e3cf418 commit e448c66

File tree

4 files changed

+44
-67
lines changed

4 files changed

+44
-67
lines changed

src/hl_api/evm/client.py

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,11 @@
3434
from .bridge import CCTPBridge
3535
from .config import (
3636
DEFAULT_CCTP_FINALITY_THRESHOLD,
37-
DEFAULT_FLEXIBLE_VAULT_PROOF_URL,
3837
DEFAULT_IRIS_MAX_POLLS,
3938
DEFAULT_IRIS_POLL_INTERVAL,
4039
DEFAULT_RECEIPT_TIMEOUT,
4140
DEFAULT_REQUEST_TIMEOUT,
4241
EVMClientConfig,
43-
FlexibleVaultConfig,
4442
)
4543
from .connections import Web3Connections
4644
from .metadata import AssetMetadataCache
@@ -71,26 +69,12 @@ def __init__(
7169
hyperliquid_domain: int | None = None,
7270
mainnet_domain: int | None = None,
7371
cctp_finality_threshold: int = DEFAULT_CCTP_FINALITY_THRESHOLD,
74-
flexible_vault: FlexibleVaultConfig | None = None,
7572
flexible_vault_proof_blob: Mapping[str, Any] | None = None,
7673
disable_call_verification: bool = False,
7774
) -> None:
7875
hl_address = Web3.to_checksum_address(hl_strategy_address)
7976
bridge_address = Web3.to_checksum_address(bridge_strategy_address)
8077

81-
if flexible_vault and not disable_call_verification:
82-
vault_proof_url = flexible_vault.proof_url
83-
vault_verifier = flexible_vault.verifier_address
84-
vault_network = flexible_vault.verifier_network
85-
vault_check_root = flexible_vault.check_merkle_root
86-
vault_blob = flexible_vault_proof_blob or flexible_vault.proof_blob
87-
else:
88-
vault_proof_url = DEFAULT_FLEXIBLE_VAULT_PROOF_URL
89-
vault_verifier = None
90-
vault_network = "hyper"
91-
vault_check_root = False
92-
vault_blob = flexible_vault_proof_blob
93-
9478
config = EVMClientConfig(
9579
private_key=private_key,
9680
hl_rpc_url=hl_rpc_url,
@@ -107,11 +91,7 @@ def __init__(
10791
hyperliquid_domain=hyperliquid_domain,
10892
mainnet_domain=mainnet_domain,
10993
cctp_finality_threshold=cctp_finality_threshold,
110-
flexible_vault_proof_url=vault_proof_url,
111-
flexible_vault_verifier_address=vault_verifier,
112-
flexible_vault_verifier_network=vault_network,
113-
flexible_vault_check_merkle_root=vault_check_root,
114-
flexible_vault_proof_blob=vault_blob,
94+
flexible_vault_proof_blob=flexible_vault_proof_blob,
11595
)
11696

11797
self._config = config
@@ -124,18 +104,10 @@ def __init__(
124104
receipt_timeout=config.receipt_timeout,
125105
)
126106
self._call_verification_disabled = disable_call_verification
127-
# Create a temporary FlexibleVaultConfig for the resolver if needed
128107
self._flexible_proof_resolver: FlexibleVaultProofResolver | None
129108
if not self._call_verification_disabled and config.flexible_vault_proof_blob:
130-
vault_config = FlexibleVaultConfig(
131-
proof_url=config.flexible_vault_proof_url,
132-
verifier_address=config.flexible_vault_verifier_address,
133-
verifier_network=config.flexible_vault_verifier_network,
134-
check_merkle_root=config.flexible_vault_check_merkle_root,
135-
proof_blob=config.flexible_vault_proof_blob,
136-
)
137109
self._flexible_proof_resolver = FlexibleVaultProofResolver(
138-
vault_config,
110+
config,
139111
self._connections,
140112
self._session,
141113
request_timeout=config.request_timeout,

src/hl_api/evm/config.py

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,15 @@
88

99
from web3.types import ChecksumAddress
1010

11-
DEFAULT_FLEXIBLE_VAULT_PROOF_URL = (
12-
"https://raw.githubusercontent.com/mellow-finance/flexible-vaults/"
13-
"test-deployments/scripts/jsons/ethereum%3AtqETH%3Asubvault0.json"
14-
)
15-
16-
17-
@dataclass(frozen=True)
18-
class FlexibleVaultConfig:
19-
"""Configuration for fetching Mellow flexible vault proof blobs."""
20-
21-
proof_url: str = DEFAULT_FLEXIBLE_VAULT_PROOF_URL
22-
verifier_address: str | None = None
23-
verifier_network: str = "hyper"
24-
check_merkle_root: bool = False
25-
proof_blob: Mapping[str, Any] | None = None
26-
27-
2811
DEFAULT_REQUEST_TIMEOUT = 10.0
2912
DEFAULT_RECEIPT_TIMEOUT = 120.0
3013
DEFAULT_IRIS_POLL_INTERVAL = 2.0
3114
DEFAULT_IRIS_MAX_POLLS = 100
3215
DEFAULT_CCTP_FINALITY_THRESHOLD = 1000
16+
DEFAULT_FLEXIBLE_VAULT_PROOF_URL = (
17+
"https://raw.githubusercontent.com/mellow-finance/flexible-vaults/"
18+
"test-deployments/scripts/jsons/ethereum%3AtqETH%3Asubvault0.json"
19+
)
3320
IRIS_API_SANDBOX = "https://iris-api-sandbox.circle.com"
3421
IRIS_API_PROD = "https://iris-api.circle.com"
3522

src/hl_api/evm/proofs.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
from ..exceptions import NetworkError, ValidationError
1414
from ..types import VerificationPayload
15-
from .config import FlexibleVaultConfig
15+
from .config import EVMClientConfig
1616
from .connections import Web3Connections
1717

1818
logger = logging.getLogger(__name__)
@@ -48,8 +48,8 @@ def __init__(self, session: requests.Session, *, request_timeout: float) -> None
4848
self._cache: dict[str, ProofDataset] = {}
4949
self._validated_roots: set[str] = set()
5050

51-
def fetch(self, config: FlexibleVaultConfig) -> ProofDataset:
52-
blob = config.proof_blob
51+
def fetch(self, config: EVMClientConfig) -> ProofDataset:
52+
blob = config.flexible_vault_proof_blob
5353
if blob is not None:
5454
if not isinstance(blob, Mapping):
5555
raise ValidationError(
@@ -58,7 +58,7 @@ def fetch(self, config: FlexibleVaultConfig) -> ProofDataset:
5858
value=blob,
5959
)
6060

61-
source_label = config.proof_url or "<inline>"
61+
source_label = config.flexible_vault_proof_url or "<inline>"
6262
if source_label == "<inline>":
6363
logger.debug("Loading flexible vault proof set from inline blob")
6464
else:
@@ -67,11 +67,11 @@ def fetch(self, config: FlexibleVaultConfig) -> ProofDataset:
6767
source_label,
6868
)
6969
dataset = _build_dataset(blob, source_label=source_label)
70-
if config.proof_url:
71-
self._cache.setdefault(config.proof_url, dataset)
70+
if config.flexible_vault_proof_url:
71+
self._cache.setdefault(config.flexible_vault_proof_url, dataset)
7272
return dataset
7373

74-
url = config.proof_url
74+
url = config.flexible_vault_proof_url
7575
if not url:
7676
raise ValidationError(
7777
"Flexible vault proof URL is required when no blob is provided",
@@ -119,17 +119,17 @@ def fetch(self, config: FlexibleVaultConfig) -> ProofDataset:
119119
return dataset
120120

121121
def ensure_merkle_root(
122-
self, config: FlexibleVaultConfig, dataset: ProofDataset, connections: Web3Connections
122+
self, config: EVMClientConfig, dataset: ProofDataset, connections: Web3Connections
123123
) -> None:
124-
verifier = config.verifier_address
125-
if not verifier or not config.check_merkle_root:
124+
verifier = config.flexible_vault_verifier_address
125+
if not verifier or not config.flexible_vault_check_merkle_root:
126126
return
127127

128128
cache_key = f"{dataset.url}|{verifier.lower()}"
129129
if cache_key in self._validated_roots:
130130
return
131131

132-
web3 = _select_web3(connections, config.verifier_network)
132+
web3 = _select_web3(connections, config.flexible_vault_verifier_network)
133133
address = Web3.to_checksum_address(verifier)
134134
try:
135135
contract = web3.eth.contract(address=address, abi=_VERIFIER_ABI)
@@ -189,7 +189,7 @@ class FlexibleVaultProofResolver:
189189

190190
def __init__(
191191
self,
192-
config: FlexibleVaultConfig,
192+
config: EVMClientConfig,
193193
connections: Web3Connections,
194194
session: requests.Session,
195195
*,

tests/test_flexible_vault.py

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55

66
import pytest
77
from requests import Session
8+
from web3 import Web3
89

9-
from hl_api.evm.config import FlexibleVaultConfig
10+
from hl_api.evm.config import EVMClientConfig
1011
from hl_api.evm.connections import Web3Connections
1112
from hl_api.evm.proofs import FlexibleVaultProofResolver, ProofManager
1213
from hl_api.exceptions import ValidationError
@@ -83,7 +84,14 @@ def _example_payload() -> dict[str, Any]:
8384

8485

8586
def test_fetch_requires_https() -> None:
86-
config = FlexibleVaultConfig(proof_url="http://example.com/proof.json")
87+
config = EVMClientConfig(
88+
private_key="0x" + "0" * 64,
89+
hl_rpc_url="https://example.com",
90+
mn_rpc_url="https://example.com",
91+
hl_strategy_address=Web3.to_checksum_address("0x" + "0" * 40),
92+
bridge_strategy_address=Web3.to_checksum_address("0x" + "0" * 40),
93+
flexible_vault_proof_url="http://example.com/proof.json",
94+
)
8795
session = DummySession(DummyResponse({}))
8896
manager = ProofManager(session, request_timeout=1.0)
8997

@@ -104,10 +112,15 @@ def test_resolver_loads_payload(monkeypatch: pytest.MonkeyPatch) -> None:
104112
),
105113
)
106114

107-
config = FlexibleVaultConfig(
108-
proof_url="https://example.com/proof.json",
109-
verifier_address="0x0000000000000000000000000000000000000001",
110-
check_merkle_root=True,
115+
config = EVMClientConfig(
116+
private_key="0x" + "0" * 64,
117+
hl_rpc_url="https://example.com",
118+
mn_rpc_url="https://example.com",
119+
hl_strategy_address=Web3.to_checksum_address("0x" + "0" * 40),
120+
bridge_strategy_address=Web3.to_checksum_address("0x" + "0" * 40),
121+
flexible_vault_proof_url="https://example.com/proof.json",
122+
flexible_vault_verifier_address="0x0000000000000000000000000000000000000001",
123+
flexible_vault_check_merkle_root=True,
111124
)
112125

113126
resolver = FlexibleVaultProofResolver(
@@ -134,8 +147,13 @@ def test_resolver_missing_description_raises(monkeypatch: pytest.MonkeyPatch) ->
134147
),
135148
)
136149

137-
config = FlexibleVaultConfig(
138-
proof_url="https://example.com/proof.json",
150+
config = EVMClientConfig(
151+
private_key="0x" + "0" * 64,
152+
hl_rpc_url="https://example.com",
153+
mn_rpc_url="https://example.com",
154+
hl_strategy_address=Web3.to_checksum_address("0x" + "0" * 40),
155+
bridge_strategy_address=Web3.to_checksum_address("0x" + "0" * 40),
156+
flexible_vault_proof_url="https://example.com/proof.json",
139157
)
140158

141159
resolver = FlexibleVaultProofResolver(

0 commit comments

Comments
 (0)