feat: expose underlying nim-ethers errors to logs

This commit is contained in:
Adam Uhlíř 2024-11-04 07:28:10 +01:00
parent 2b5a40559e
commit e0c94e672c
No known key found for this signature in database
GPG Key ID: 33AA754229A3F189
6 changed files with 74 additions and 23 deletions

View File

@ -1,5 +1,6 @@
import std/times import std/times
import pkg/ethers import pkg/ethers
import pkg/questionable
import pkg/chronos import pkg/chronos
import pkg/stint import pkg/stint
import ../clock import ../clock
@ -45,7 +46,11 @@ method start*(clock: OnChainClock) {.async.} =
if clock.started: if clock.started:
return 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 # ignore block parameter; hardhat may call this with pending blocks
asyncSpawn clock.update() asyncSpawn clock.update()

View File

@ -277,7 +277,11 @@ method canReserveSlot*(
method subscribeRequests*(market: OnChainMarket, method subscribeRequests*(market: OnChainMarket,
callback: OnRequest): callback: OnRequest):
Future[MarketSubscription] {.async.} = 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, callback(event.requestId,
event.ask, event.ask,
event.expiry) event.expiry)
@ -289,7 +293,11 @@ method subscribeRequests*(market: OnChainMarket,
method subscribeSlotFilled*(market: OnChainMarket, method subscribeSlotFilled*(market: OnChainMarket,
callback: OnSlotFilled): callback: OnSlotFilled):
Future[MarketSubscription] {.async.} = 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) callback(event.requestId, event.slotIndex)
convertEthersError: convertEthersError:
@ -311,7 +319,11 @@ method subscribeSlotFilled*(market: OnChainMarket,
method subscribeSlotFreed*(market: OnChainMarket, method subscribeSlotFreed*(market: OnChainMarket,
callback: OnSlotFreed): callback: OnSlotFreed):
Future[MarketSubscription] {.async.} = 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) callback(event.requestId, event.slotIndex)
convertEthersError: convertEthersError:
@ -322,7 +334,11 @@ method subscribeSlotReservationsFull*(
market: OnChainMarket, market: OnChainMarket,
callback: OnSlotReservationsFull): Future[MarketSubscription] {.async.} = 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) callback(event.requestId, event.slotIndex)
convertEthersError: convertEthersError:
@ -332,7 +348,11 @@ method subscribeSlotReservationsFull*(
method subscribeFulfillment(market: OnChainMarket, method subscribeFulfillment(market: OnChainMarket,
callback: OnFulfillment): callback: OnFulfillment):
Future[MarketSubscription] {.async.} = 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) callback(event.requestId)
convertEthersError: convertEthersError:
@ -343,7 +363,11 @@ method subscribeFulfillment(market: OnChainMarket,
requestId: RequestId, requestId: RequestId,
callback: OnFulfillment): callback: OnFulfillment):
Future[MarketSubscription] {.async.} = 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: if event.requestId == requestId:
callback(event.requestId) callback(event.requestId)
@ -354,7 +378,11 @@ method subscribeFulfillment(market: OnChainMarket,
method subscribeRequestCancelled*(market: OnChainMarket, method subscribeRequestCancelled*(market: OnChainMarket,
callback: OnRequestCancelled): callback: OnRequestCancelled):
Future[MarketSubscription] {.async.} = 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) callback(event.requestId)
convertEthersError: convertEthersError:
@ -365,7 +393,11 @@ method subscribeRequestCancelled*(market: OnChainMarket,
requestId: RequestId, requestId: RequestId,
callback: OnRequestCancelled): callback: OnRequestCancelled):
Future[MarketSubscription] {.async.} = 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: if event.requestId == requestId:
callback(event.requestId) callback(event.requestId)
@ -376,7 +408,11 @@ method subscribeRequestCancelled*(market: OnChainMarket,
method subscribeRequestFailed*(market: OnChainMarket, method subscribeRequestFailed*(market: OnChainMarket,
callback: OnRequestFailed): callback: OnRequestFailed):
Future[MarketSubscription] {.async.} = 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) callback(event.requestId)
convertEthersError: convertEthersError:
@ -387,7 +423,11 @@ method subscribeRequestFailed*(market: OnChainMarket,
requestId: RequestId, requestId: RequestId,
callback: OnRequestFailed): callback: OnRequestFailed):
Future[MarketSubscription] {.async.} = 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: if event.requestId == requestId:
callback(event.requestId) callback(event.requestId)
@ -398,7 +438,11 @@ method subscribeRequestFailed*(market: OnChainMarket,
method subscribeProofSubmission*(market: OnChainMarket, method subscribeProofSubmission*(market: OnChainMarket,
callback: OnProofSubmitted): callback: OnProofSubmitted):
Future[MarketSubscription] {.async.} = 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) callback(event.id)
convertEthersError: convertEthersError:

View File

@ -33,8 +33,9 @@ marketplacesuite "Bug #821 - node crashes during erasure coding":
let cid = clientApi.upload(data).get let cid = clientApi.upload(data).get
var requestId = none RequestId var requestId = none RequestId
proc onStorageRequested(event: StorageRequested) {.raises:[].} = proc onStorageRequested(eventRes: ?!StorageRequested)=
requestId = event.requestId.some if event =? eventRes:
requestId = event.requestId.some
let subscription = await marketplace.subscribe(StorageRequested, onStorageRequested) let subscription = await marketplace.subscribe(StorageRequested, onStorageRequested)

View File

@ -132,8 +132,9 @@ marketplacesuite "Marketplace payouts":
let cid = clientApi.upload(data).get let cid = clientApi.upload(data).get
var slotIdxFilled = none UInt256 var slotIdxFilled = none UInt256
proc onSlotFilled(event: SlotFilled) = proc onSlotFilled(eventRes: ?!SlotFilled) =
slotIdxFilled = some event.slotIndex if event =? eventRes:
slotIdxFilled = some event.slotIndex
let subscription = await marketplace.subscribe(SlotFilled, onSlotFilled) let subscription = await marketplace.subscribe(SlotFilled, onSlotFilled)

View File

@ -54,8 +54,8 @@ marketplacesuite "Hosts submit regular proofs":
check eventually(client0.purchaseStateIs(purchaseId, "started"), timeout = expiry.int * 1000) check eventually(client0.purchaseStateIs(purchaseId, "started"), timeout = expiry.int * 1000)
var proofWasSubmitted = false var proofWasSubmitted = false
proc onProofSubmitted(event: ProofSubmitted) = proc onProofSubmitted(event: ?!ProofSubmitted) =
proofWasSubmitted = true proofWasSubmitted = event.isOk
let subscription = await marketplace.subscribe(ProofSubmitted, onProofSubmitted) 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) check eventually(client0.purchaseStateIs(purchaseId, "started"), timeout = expiry.int * 1000)
var slotWasFreed = false var slotWasFreed = false
proc onSlotFreed(event: SlotFreed) = proc onSlotFreed(event: ?!SlotFreed) =
if event.requestId == requestId: if event.isOk and event.value.requestId == requestId:
slotWasFreed = true slotWasFreed = true
let subscription = await marketplace.subscribe(SlotFreed, onSlotFreed) 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) check eventually(client0.purchaseStateIs(purchaseId, "started"), timeout = expiry.int * 1000)
var slotWasFreed = false var slotWasFreed = false
proc onSlotFreed(event: SlotFreed) = proc onSlotFreed(event: ?!SlotFreed) =
if event.requestId == requestId: if event.isOk and event.value.requestId == requestId:
slotWasFreed = true slotWasFreed = true
let subscription = await marketplace.subscribe(SlotFreed, onSlotFreed) let subscription = await marketplace.subscribe(SlotFreed, onSlotFreed)

2
vendor/nim-ethers vendored

@ -1 +1 @@
Subproject commit 6523e70eafecc3b9728a491058818e685bd384fb Subproject commit 39f648992b2c42fc6f0148e5570b0deb9b4a373b