nim-ethers/ethers/testing.nim

41 lines
1013 B
Nim

import std/json
import std/strutils
import pkg/ethers
proc revertReason*(e: ref JsonRpcProviderError): string =
try:
var msg = e.msg
const revertPrefixes = @[
# hardhat
"Error: VM Exception while processing transaction: reverted with " &
"reason string ",
# ganache
"VM Exception while processing transaction: revert "
]
for prefix in revertPrefixes.items:
msg = msg.replace(prefix)
msg = msg.replace("\'")
return msg
except JsonParsingError:
return ""
proc reverts*[T](call: Future[T]): Future[bool] {.async.} =
try:
when T is void:
await call
else:
discard await call # TODO test this
return false
except JsonRpcProviderError:
return true
proc reverts*[T](call: Future[T], reason: string): Future[bool] {.async.} =
try:
when T is void:
await call
else:
discard await call # TODO test this
return false
except JsonRpcProviderError as error:
return reason == error.revertReason