catch and check revert reasons

Ensure specific contract reverts are handled and returned as booleans or default values
This commit is contained in:
Eric Mastro 2022-09-20 13:24:28 +10:00
parent e36957faa3
commit 2ce5de352d
No known key found for this signature in database
GPG Key ID: 141E3048D95A4E63
3 changed files with 16 additions and 7 deletions

View File

@ -1,4 +1,6 @@
import std/strutils
import pkg/ethers import pkg/ethers
import pkg/ethers/testing
import pkg/upraises import pkg/upraises
import pkg/questionable import pkg/questionable
import ../market import ../market
@ -38,9 +40,10 @@ method getRequest(market: OnChainMarket,
id: RequestId): Future[?StorageRequest] {.async.} = id: RequestId): Future[?StorageRequest] {.async.} =
try: try:
return some await market.contract.getRequest(id) return some await market.contract.getRequest(id)
except ValueError: except JsonRpcProviderError as e:
# Unknown request if e.revertReason.contains("Unknown request"):
return none StorageRequest # Unknown request
return none StorageRequest
method getHost(market: OnChainMarket, method getHost(market: OnChainMarket,
requestId: RequestId, requestId: RequestId,

View File

@ -1,3 +1,4 @@
import std/strutils
import pkg/ethers import pkg/ethers
import pkg/ethers/testing import pkg/ethers/testing
import ../storageproofs/timing/proofs import ../storageproofs/timing/proofs
@ -28,7 +29,7 @@ method isProofRequired*(proofs: OnChainProofs,
try: try:
return await proofs.storage.isProofRequired(id) return await proofs.storage.isProofRequired(id)
except JsonRpcProviderError as e: except JsonRpcProviderError as e:
if e.revertReason == "Slot empty": if e.revertReason.contains("Slot empty"):
return false return false
raise e raise e
@ -37,13 +38,18 @@ method willProofBeRequired*(proofs: OnChainProofs,
try: try:
return await proofs.storage.willProofBeRequired(id) return await proofs.storage.willProofBeRequired(id)
except JsonRpcProviderError as e: except JsonRpcProviderError as e:
if e.revertReason == "Slot empty": if e.revertReason.contains("Slot empty"):
return false return false
raise e raise e
method getProofEnd*(proofs: OnChainProofs, method getProofEnd*(proofs: OnChainProofs,
id: SlotId): Future[UInt256] {.async.} = id: SlotId): Future[UInt256] {.async.} =
return await proofs.storage.proofEnd(id) try:
return await proofs.storage.proofEnd(id)
except JsonRpcProviderError as e:
if e.revertReason.contains("Slot empty"):
return 0.u256
raise e
method submitProof*(proofs: OnChainProofs, method submitProof*(proofs: OnChainProofs,
id: SlotId, id: SlotId,

2
vendor/nim-ethers vendored

@ -1 +1 @@
Subproject commit a4787aaf0a6635035cc19246e3dc063f661a48cb Subproject commit 90d432db56f74a15c4b5c734da6999cbfa18737f