diff --git a/nitro.nimble b/nitro.nimble index 983a6dc..b6f62c0 100644 --- a/nitro.nimble +++ b/nitro.nimble @@ -5,6 +5,7 @@ description = "Nitro state channels" requires "nim >= 1.2.6 & < 2.0.0" requires "nimcrypto >= 0.5.4 & < 0.6.0" +requires "questionable >= 0.2.0 & < 0.3.0" requires "secp256k1" requires "stint" requires "stew" diff --git a/nitro/helpers.nim b/nitro/helpers.nim deleted file mode 100644 index 1c58b6a..0000000 --- a/nitro/helpers.nim +++ /dev/null @@ -1,13 +0,0 @@ -import std/options -import pkg/stew/results - -include ./noerrors - -export options -export results - -proc toOption*[T, E](res: Result[T, E]): Option[T] = - if res.isOk: - res.unsafeGet().some - else: - T.none diff --git a/nitro/noerrors.nim b/nitro/noerrors.nim deleted file mode 100644 index d2becfc..0000000 --- a/nitro/noerrors.nim +++ /dev/null @@ -1,8 +0,0 @@ -## Include this file to indicate that your module does not raise Errors. -## Disables compiler hints about unused declarations in Nim < 1.4.0 - -when (NimMajor, NimMinor, NimPatch) >= (1, 4, 0): - {.push raises:[].} -else: - {.push raises: [Defect].} - {.hint[XDeclaredButNotUsed]: off.} diff --git a/nitro/protocol/abi.nim b/nitro/protocol/abi.nim index 92e936b..b481c28 100644 --- a/nitro/protocol/abi.nim +++ b/nitro/protocol/abi.nim @@ -2,7 +2,7 @@ import pkg/stew/endians2 import pkg/stint import ../types -include ../noerrors +include questionable/errorban export types diff --git a/nitro/protocol/channel.nim b/nitro/protocol/channel.nim index 7e61eff..2136608 100644 --- a/nitro/protocol/channel.nim +++ b/nitro/protocol/channel.nim @@ -2,7 +2,7 @@ import pkg/nimcrypto import ../types import ./abi -include ../noerrors +include questionable/errorban export types diff --git a/nitro/protocol/outcome.nim b/nitro/protocol/outcome.nim index f9889ee..7c419e5 100644 --- a/nitro/protocol/outcome.nim +++ b/nitro/protocol/outcome.nim @@ -2,7 +2,7 @@ import pkg/nimcrypto import ../types import ./abi -include ../noerrors +include questionable/errorban export types diff --git a/nitro/protocol/signature.nim b/nitro/protocol/signature.nim index 75d9059..10ffb09 100644 --- a/nitro/protocol/signature.nim +++ b/nitro/protocol/signature.nim @@ -1,13 +1,13 @@ -import std/options +import pkg/questionable +import pkg/questionable/results import pkg/nimcrypto import pkg/secp256k1 import pkg/stew/byteutils -import ../helpers import ./state -include ../noerrors +include questionable/errorban -export options +export questionable export toPublicKey type @@ -24,7 +24,7 @@ proc random*(_: type PrivateKey): PrivateKey = proc `$`*(key: PrivateKey): string = key.toHex() -proc parse*(_: type PrivateKey, s: string): Option[PrivateKey] = +proc parse*(_: type PrivateKey, s: string): ?PrivateKey = SkSecretKey.fromHex(s).toOption() proc sign(key: PrivateKey, data: openArray[byte]): Signature = @@ -47,10 +47,9 @@ proc `$`*(signature: Signature): string = bytes[64] += 27 bytes.toHex() -proc parse*(_: type Signature, s: string): Option[Signature] = - try: +proc parse*(_: type Signature, s: string): ?Signature = + let signature = catch: var bytes = array[65, byte].fromHex(s) bytes[64] = bytes[64] - 27 - SkRecoverableSignature.fromRaw(bytes).toOption() - except ValueError: - Signature.none + SkRecoverableSignature.fromRaw(bytes).get() + signature.toOption() diff --git a/nitro/protocol/state.nim b/nitro/protocol/state.nim index e20d77f..bb3db25 100644 --- a/nitro/protocol/state.nim +++ b/nitro/protocol/state.nim @@ -4,7 +4,7 @@ import ./channel import ./outcome import ./abi -include ../noerrors +include questionable/errorban export types export channel diff --git a/nitro/types.nim b/nitro/types.nim index 0d6032f..2a67084 100644 --- a/nitro/types.nim +++ b/nitro/types.nim @@ -1,12 +1,12 @@ import std/math -import std/options +import pkg/questionable import pkg/stint import pkg/stew/byteutils -include ./noerrors +include questionable/errorban export stint -export options +export questionable type UInt48* = range[0'u64..2'u64^48-1] @@ -15,7 +15,7 @@ type proc toArray*(address: EthAddress): array[20, byte] = array[20, byte](address) -proc fromHex*(_: type EthAddress, hex: string): Option[EthAddress] = +proc fromHex*(_: type EthAddress, hex: string): ?EthAddress = try: EthAddress(array[20, byte].fromHex(hex)).some except ValueError: