From d179f9a11db7da8bdfa41936dd940d6b26ea7d15 Mon Sep 17 00:00:00 2001 From: Mark Spanbroek Date: Thu, 7 Apr 2022 14:39:46 +0200 Subject: [PATCH] Fix solidity type for byte arrays greater than 32 bytes --- contractabi/selector.nim | 5 ++++- tests/contractabi/testSelector.nim | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/contractabi/selector.nim b/contractabi/selector.nim index 8cdfa3c..42f827f 100644 --- a/contractabi/selector.nim +++ b/contractabi/selector.nim @@ -40,7 +40,10 @@ solidityType Address, "address" func solidityType*[N: static int, T](_: type array[N, T]): string = when T is byte: - "bytes" & $N + when 0 < N and N <= 32: + "bytes" & $N + else: + "bytes1[" & $N & "]" else: solidityType(T) & "[" & $N & "]" diff --git a/tests/contractabi/testSelector.nim b/tests/contractabi/testSelector.nim index 808d067..913371b 100644 --- a/tests/contractabi/testSelector.nim +++ b/tests/contractabi/testSelector.nim @@ -22,6 +22,9 @@ suite "function selector": check solidityType(Address) == "address" check solidityType(array[4, byte]) == "bytes4" check solidityType(array[16, byte]) == "bytes16" + check solidityType(array[32, byte]) == "bytes32" + check solidityType(array[0, byte]) == "bytes1[0]" + check solidityType(array[33, byte]) == "bytes1[33]" check solidityType(seq[byte]) == "bytes" check solidityType(array[4, string]) == "string[4]" check solidityType(seq[string]) == "string[]"