From e0c94e672c6642a0309c7017ca564d11caba6876 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Uhl=C3=AD=C5=99?= Date: Mon, 4 Nov 2024 07:28:10 +0100 Subject: [PATCH] feat: expose underlying nim-ethers errors to logs --- codex/contracts/clock.nim | 7 ++- codex/contracts/market.nim | 66 ++++++++++++++++++++++----- tests/integration/testecbug.nim | 5 +- tests/integration/testmarketplace.nim | 5 +- tests/integration/testproofs.nim | 12 ++--- vendor/nim-ethers | 2 +- 6 files changed, 74 insertions(+), 23 deletions(-) diff --git a/codex/contracts/clock.nim b/codex/contracts/clock.nim index 937745bf..284996ff 100644 --- a/codex/contracts/clock.nim +++ b/codex/contracts/clock.nim @@ -1,5 +1,6 @@ import std/times import pkg/ethers +import pkg/questionable import pkg/chronos import pkg/stint import ../clock @@ -45,7 +46,11 @@ method start*(clock: OnChainClock) {.async.} = if clock.started: return - proc onBlock(_: Block) = + proc onBlock(blckResult: ?!Block) = + if eventError =? blckResult.errorOption: + error "There was an error in block subscription", msg=eventError.msg + return + # ignore block parameter; hardhat may call this with pending blocks asyncSpawn clock.update() diff --git a/codex/contracts/market.nim b/codex/contracts/market.nim index b8d1da68..19418b7b 100644 --- a/codex/contracts/market.nim +++ b/codex/contracts/market.nim @@ -277,7 +277,11 @@ method canReserveSlot*( method subscribeRequests*(market: OnChainMarket, callback: OnRequest): Future[MarketSubscription] {.async.} = - proc onEvent(event: StorageRequested) {.upraises:[].} = + proc onEvent(eventResult: ?!StorageRequested) {.upraises:[].} = + without event =? eventResult, eventErr: + error "There was an error in Request subscription", msg = eventErr.msg + return + callback(event.requestId, event.ask, event.expiry) @@ -289,7 +293,11 @@ method subscribeRequests*(market: OnChainMarket, method subscribeSlotFilled*(market: OnChainMarket, callback: OnSlotFilled): Future[MarketSubscription] {.async.} = - proc onEvent(event: SlotFilled) {.upraises:[].} = + proc onEvent(eventResult: ?!SlotFilled) {.upraises:[].} = + without event =? eventResult, eventErr: + error "There was an error in SlotFilled subscription", msg = eventErr.msg + return + callback(event.requestId, event.slotIndex) convertEthersError: @@ -311,7 +319,11 @@ method subscribeSlotFilled*(market: OnChainMarket, method subscribeSlotFreed*(market: OnChainMarket, callback: OnSlotFreed): Future[MarketSubscription] {.async.} = - proc onEvent(event: SlotFreed) {.upraises:[].} = + proc onEvent(eventResult: ?!SlotFreed) {.upraises:[].} = + without event =? eventResult, eventErr: + error "There was an error in SlotFreed subscription", msg = eventErr.msg + return + callback(event.requestId, event.slotIndex) convertEthersError: @@ -322,7 +334,11 @@ method subscribeSlotReservationsFull*( market: OnChainMarket, callback: OnSlotReservationsFull): Future[MarketSubscription] {.async.} = - proc onEvent(event: SlotReservationsFull) {.upraises:[].} = + proc onEvent(eventResult: ?!SlotReservationsFull) {.upraises:[].} = + without event =? eventResult, eventErr: + error "There was an error in SlotReservationsFull subscription", msg = eventErr.msg + return + callback(event.requestId, event.slotIndex) convertEthersError: @@ -332,7 +348,11 @@ method subscribeSlotReservationsFull*( method subscribeFulfillment(market: OnChainMarket, callback: OnFulfillment): Future[MarketSubscription] {.async.} = - proc onEvent(event: RequestFulfilled) {.upraises:[].} = + proc onEvent(eventResult: ?!RequestFulfilled) {.upraises:[].} = + without event =? eventResult, eventErr: + error "There was an error in RequestFulfillment subscription", msg = eventErr.msg + return + callback(event.requestId) convertEthersError: @@ -343,7 +363,11 @@ method subscribeFulfillment(market: OnChainMarket, requestId: RequestId, callback: OnFulfillment): Future[MarketSubscription] {.async.} = - proc onEvent(event: RequestFulfilled) {.upraises:[].} = + proc onEvent(eventResult: ?!RequestFulfilled) {.upraises:[].} = + without event =? eventResult, eventErr: + error "There was an error in RequestFulfillment subscription", msg = eventErr.msg + return + if event.requestId == requestId: callback(event.requestId) @@ -354,7 +378,11 @@ method subscribeFulfillment(market: OnChainMarket, method subscribeRequestCancelled*(market: OnChainMarket, callback: OnRequestCancelled): Future[MarketSubscription] {.async.} = - proc onEvent(event: RequestCancelled) {.upraises:[].} = + proc onEvent(eventResult: ?!RequestCancelled) {.upraises:[].} = + without event =? eventResult, eventErr: + error "There was an error in RequestCancelled subscription", msg = eventErr.msg + return + callback(event.requestId) convertEthersError: @@ -365,7 +393,11 @@ method subscribeRequestCancelled*(market: OnChainMarket, requestId: RequestId, callback: OnRequestCancelled): Future[MarketSubscription] {.async.} = - proc onEvent(event: RequestCancelled) {.upraises:[].} = + proc onEvent(eventResult: ?!RequestCancelled) {.upraises:[].} = + without event =? eventResult, eventErr: + error "There was an error in RequestCancelled subscription", msg = eventErr.msg + return + if event.requestId == requestId: callback(event.requestId) @@ -376,7 +408,11 @@ method subscribeRequestCancelled*(market: OnChainMarket, method subscribeRequestFailed*(market: OnChainMarket, callback: OnRequestFailed): Future[MarketSubscription] {.async.} = - proc onEvent(event: RequestFailed) {.upraises:[]} = + proc onEvent(eventResult: ?!RequestFailed) {.upraises:[]} = + without event =? eventResult, eventErr: + error "There was an error in RequestFailed subscription", msg = eventErr.msg + return + callback(event.requestId) convertEthersError: @@ -387,7 +423,11 @@ method subscribeRequestFailed*(market: OnChainMarket, requestId: RequestId, callback: OnRequestFailed): Future[MarketSubscription] {.async.} = - proc onEvent(event: RequestFailed) {.upraises:[]} = + proc onEvent(eventResult: ?!RequestFailed) {.upraises:[]} = + without event =? eventResult, eventErr: + error "There was an error in RequestFailed subscription", msg = eventErr.msg + return + if event.requestId == requestId: callback(event.requestId) @@ -398,7 +438,11 @@ method subscribeRequestFailed*(market: OnChainMarket, method subscribeProofSubmission*(market: OnChainMarket, callback: OnProofSubmitted): Future[MarketSubscription] {.async.} = - proc onEvent(event: ProofSubmitted) {.upraises: [].} = + proc onEvent(eventResult: ?!ProofSubmitted) {.upraises: [].} = + without event =? eventResult, eventErr: + error "There was an error in ProofSubmitted subscription", msg = eventErr.msg + return + callback(event.id) convertEthersError: diff --git a/tests/integration/testecbug.nim b/tests/integration/testecbug.nim index 1e078a41..2095df35 100644 --- a/tests/integration/testecbug.nim +++ b/tests/integration/testecbug.nim @@ -33,8 +33,9 @@ marketplacesuite "Bug #821 - node crashes during erasure coding": let cid = clientApi.upload(data).get var requestId = none RequestId - proc onStorageRequested(event: StorageRequested) {.raises:[].} = - requestId = event.requestId.some + proc onStorageRequested(eventRes: ?!StorageRequested)= + if event =? eventRes: + requestId = event.requestId.some let subscription = await marketplace.subscribe(StorageRequested, onStorageRequested) diff --git a/tests/integration/testmarketplace.nim b/tests/integration/testmarketplace.nim index 1db98433..1597fe7d 100644 --- a/tests/integration/testmarketplace.nim +++ b/tests/integration/testmarketplace.nim @@ -132,8 +132,9 @@ marketplacesuite "Marketplace payouts": let cid = clientApi.upload(data).get var slotIdxFilled = none UInt256 - proc onSlotFilled(event: SlotFilled) = - slotIdxFilled = some event.slotIndex + proc onSlotFilled(eventRes: ?!SlotFilled) = + if event =? eventRes: + slotIdxFilled = some event.slotIndex let subscription = await marketplace.subscribe(SlotFilled, onSlotFilled) diff --git a/tests/integration/testproofs.nim b/tests/integration/testproofs.nim index 057d7f46..1c87bc1c 100644 --- a/tests/integration/testproofs.nim +++ b/tests/integration/testproofs.nim @@ -54,8 +54,8 @@ marketplacesuite "Hosts submit regular proofs": check eventually(client0.purchaseStateIs(purchaseId, "started"), timeout = expiry.int * 1000) var proofWasSubmitted = false - proc onProofSubmitted(event: ProofSubmitted) = - proofWasSubmitted = true + proc onProofSubmitted(event: ?!ProofSubmitted) = + proofWasSubmitted = event.isOk let subscription = await marketplace.subscribe(ProofSubmitted, onProofSubmitted) @@ -120,8 +120,8 @@ marketplacesuite "Simulate invalid proofs": check eventually(client0.purchaseStateIs(purchaseId, "started"), timeout = expiry.int * 1000) var slotWasFreed = false - proc onSlotFreed(event: SlotFreed) = - if event.requestId == requestId: + proc onSlotFreed(event: ?!SlotFreed) = + if event.isOk and event.value.requestId == requestId: slotWasFreed = true let subscription = await marketplace.subscribe(SlotFreed, onSlotFreed) @@ -179,8 +179,8 @@ marketplacesuite "Simulate invalid proofs": check eventually(client0.purchaseStateIs(purchaseId, "started"), timeout = expiry.int * 1000) var slotWasFreed = false - proc onSlotFreed(event: SlotFreed) = - if event.requestId == requestId: + proc onSlotFreed(event: ?!SlotFreed) = + if event.isOk and event.value.requestId == requestId: slotWasFreed = true let subscription = await marketplace.subscribe(SlotFreed, onSlotFreed) diff --git a/vendor/nim-ethers b/vendor/nim-ethers index 6523e70e..39f64899 160000 --- a/vendor/nim-ethers +++ b/vendor/nim-ethers @@ -1 +1 @@ -Subproject commit 6523e70eafecc3b9728a491058818e685bd384fb +Subproject commit 39f648992b2c42fc6f0148e5570b0deb9b4a373b