From d789ca6fee668345bcf76e57bf9d36cf98dbd664 Mon Sep 17 00:00:00 2001 From: coffeepots Date: Fri, 15 Jun 2018 20:33:29 +0100 Subject: [PATCH] Utilities for validating ethereum values --- tests/ethutils.nim | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 tests/ethutils.nim diff --git a/tests/ethutils.nim b/tests/ethutils.nim new file mode 100644 index 0000000..22e8a61 --- /dev/null +++ b/tests/ethutils.nim @@ -0,0 +1,43 @@ +template stripLeadingZeros(value: string): string = + var cidx = 0 + # ignore the last character so we retain '0' on zero value + while cidx < value.len - 1 and value[cidx] == '0': + cidx.inc + value[cidx .. ^1] + +proc encodeQuantity*(value: SomeUnsignedInt): string = + var hValue = value.toHex.stripLeadingZeros + result = "0x" & hValue + +template hasHexHeader*(value: string): bool = + if value[0] == '0' and value[1] in {'x', 'X'} and value.len > 2: true + else: false + +template isHexChar*(c: char): bool = + if c notin {'0'..'9'} and + c notin {'a'..'f'} and + c notin {'A'..'F'}: false + else: true + +proc validateHexQuantity*(value: string): bool = + if not value.hasHexHeader: + return false + # No leading zeros + if value[2] == '0': return false + for i in 2..