mirror of
https://github.com/logos-storage/nim-ethers.git
synced 2026-01-05 07:03:14 +00:00
- Enables postfix syntax: `call().reverts(reason)` - Removes doesNotRevert etc; uses `check not` instead - Removes waitFor(); return Future instead
42 lines
1.1 KiB
Nim
42 lines
1.1 KiB
Nim
import std/json
|
|
import std/strutils
|
|
import pkg/ethers
|
|
|
|
proc revertReason*(e: ref JsonRpcProviderError): string =
|
|
try:
|
|
let json = parseJson(e.msg)
|
|
var msg = json{"message"}.getStr
|
|
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 # TODO: check that error started with revert prefix
|
|
|
|
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
|