Skip to content

Commit c9b6349

Browse files
authored
Merge pull request #12 from Arkiv-Network/rvdp/abi
Fix error due to new Arkiv ABI events
2 parents 454543b + 1ac2a10 commit c9b6349

File tree

3 files changed

+1160
-848
lines changed

3 files changed

+1160
-848
lines changed

arkiv_sdk/__init__.py

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from eth_typing import ChecksumAddress, HexStr
2020
from web3 import AsyncWeb3, WebSocketProvider
2121
from web3.contract import AsyncContract
22-
from web3.exceptions import ProviderConnectionError, Web3RPCError
22+
from web3.exceptions import ProviderConnectionError, Web3RPCError, Web3ValueError
2323
from web3.method import Method, default_root_munger
2424
from web3.middleware import SignAndSendRawMiddlewareBuilder
2525
from web3.types import LogReceipt, RPCEndpoint, TxParams, TxReceipt, Wei
@@ -153,13 +153,13 @@ async def get_entity_metadata(self, entity_key: EntityKey) -> EntityMetadata:
153153
string_annotations=list(
154154
map(
155155
lambda ann: Annotation(key=ann["key"], value=ann["value"]),
156-
metadata.stringAnnotations,
156+
metadata.stringAnnotations or list(),
157157
)
158158
),
159159
numeric_annotations=list(
160160
map(
161161
lambda ann: Annotation(key=ann["key"], value=ann["value"]),
162-
metadata.numericAnnotations,
162+
metadata.numericAnnotations or list(),
163163
)
164164
),
165165
)
@@ -367,18 +367,19 @@ async def log_handler(
367367
logger.debug("New log: %s", log_receipt)
368368
res = await self._process_arkiv_log_receipt(log_receipt)
369369

370-
if create_callback:
371-
for create in res.creates:
372-
create_callback(create)
373-
if update_callback:
374-
for update in res.updates:
375-
update_callback(update)
376-
if delete_callback:
377-
for key in res.deletes:
378-
delete_callback(key)
379-
if extend_callback:
380-
for extension in res.extensions:
381-
extend_callback(extension)
370+
if res:
371+
if create_callback:
372+
for create in res.creates:
373+
create_callback(create)
374+
if update_callback:
375+
for update in res.updates:
376+
update_callback(update)
377+
if delete_callback:
378+
for key in res.deletes:
379+
delete_callback(key)
380+
if extend_callback:
381+
for extension in res.extensions:
382+
extend_callback(extension)
382383

383384
def create_subscription(topic: HexStr) -> LogsSubscription:
384385
return LogsSubscription(
@@ -442,15 +443,19 @@ def task_done(task: asyncio.Task[None]) -> None:
442443
async def _process_arkiv_log_receipt(
443444
self,
444445
log_receipt: LogReceipt,
445-
) -> ArkivTransactionReceipt:
446+
) -> ArkivTransactionReceipt | None:
446447
# Read the first entry of the topics array,
447448
# which is the hash of the event signature, identifying the event
448449
topic = AsyncWeb3.to_hex(log_receipt["topics"][0])
449-
# Look up the corresponding event
450-
# If there is no such event in the ABI, it probably needs to be added
451-
event = self.arkiv_contract.get_event_by_topic(topic)
452-
# Use the event to process the whole log
453-
event_data = event.process_log(log_receipt)
450+
try:
451+
# Look up the corresponding event
452+
# If there is no such event in the ABI, it probably needs to be added
453+
event = self.arkiv_contract.get_event_by_topic(topic)
454+
455+
# Use the event to process the whole log
456+
event_data = event.process_log(log_receipt)
457+
except Web3ValueError:
458+
return None
454459

455460
creates: list[CreateEntityReturnType] = []
456461
updates: list[UpdateEntityReturnType] = []
@@ -521,7 +526,9 @@ async def process_receipt(
521526
receipt: TxReceipt,
522527
) -> AsyncGenerator[ArkivTransactionReceipt, None]:
523528
for log in receipt["logs"]:
524-
yield await self._process_arkiv_log_receipt(log)
529+
processed = await self._process_arkiv_log_receipt(log)
530+
if processed:
531+
yield processed
525532

526533
creates: list[CreateEntityReturnType] = []
527534
updates: list[UpdateEntityReturnType] = []

flake.lock

Lines changed: 13 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)