Skip to content

Commit 0c8f916

Browse files
committed
fix: specify ChainscanClientError for API failure handling in SmartContract
1 parent 806c963 commit 0c8f916

2 files changed

Lines changed: 4 additions & 2 deletions

File tree

aiochainscan/domain/contract.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
from ..core.method import Method
1717
from ..decode import decode_log_data, decode_transaction_input
18+
from ..exceptions import ChainscanClientError
1819

1920

2021
class SmartContract:
@@ -163,7 +164,7 @@ async def from_address(
163164
if implementation_address:
164165
implementation_address = implementation_address.lower()
165166

166-
except Exception: # noqa: BLE001 - Any API failure should fallback to regular ABI fetch
167+
except ChainscanClientError:
167168
# If CONTRACT_SOURCE fails, continue with regular ABI fetch
168169
pass
169170

tests/test_contract_api.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from aiochainscan.core.client import ChainscanClient
1414
from aiochainscan.core.method import Method
1515
from aiochainscan.domain.contract import DecodedEvent, DecodedTransaction, SmartContract
16+
from aiochainscan.exceptions import ChainscanClientError
1617

1718
# Sample ERC20 ABI (minimal for testing)
1819
SAMPLE_ERC20_ABI = [
@@ -176,7 +177,7 @@ async def test_from_address_source_fails(self, mock_client):
176177
"""Test graceful fallback when CONTRACT_SOURCE fails."""
177178
# Mock CONTRACT_SOURCE to fail, but ABI succeeds
178179
mock_client.call.side_effect = [
179-
Exception('Source not available'), # CONTRACT_SOURCE fails
180+
ChainscanClientError('Source not available'), # CONTRACT_SOURCE fails
180181
json.dumps(SAMPLE_ERC20_ABI), # CONTRACT_ABI succeeds
181182
]
182183

0 commit comments

Comments
 (0)