From 1f06e850636a9ef3d87f0a0b1aa32d5c71b7bf58 Mon Sep 17 00:00:00 2001 From: abdrasulov Date: Mon, 2 Jun 2025 17:38:31 +0600 Subject: [PATCH] Implement ABI encoding for string --- .../contracts/ContractMethodHelper.kt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/ethereumkit/src/main/java/io/horizontalsystems/ethereumkit/contracts/ContractMethodHelper.kt b/ethereumkit/src/main/java/io/horizontalsystems/ethereumkit/contracts/ContractMethodHelper.kt index 0a3519bb..9fa7297a 100644 --- a/ethereumkit/src/main/java/io/horizontalsystems/ethereumkit/contracts/ContractMethodHelper.kt +++ b/ethereumkit/src/main/java/io/horizontalsystems/ethereumkit/contracts/ContractMethodHelper.kt @@ -47,6 +47,11 @@ object ContractMethodHelper { data += pad(unsignedBigIntergerToByteArray(BigInteger.valueOf(arguments.size * 32L + arraysData.size))) arraysData += pad(BigInteger.valueOf(argument.size.toLong()).toByteArray()) + argument } + is String -> { + data += pad(unsignedBigIntergerToByteArray(BigInteger.valueOf(arguments.size * 32L + arraysData.size))) + arraysData += encode(argument) + } + else -> throw IllegalArgumentException("encoding for $argument") } } return data + arraysData @@ -149,4 +154,18 @@ object ContractMethodHelper { } return data } + + fun encode(string: String): ByteArray { + val stringData = string.toByteArray(Charsets.UTF_8) + val count = stringData.size + + var res = pad(byteArrayOf(count.toByte())) + stringData + + val remainder = count % 32 + if (remainder > 0) { + res += ByteArray(32 - remainder) + } + + return res + } } \ No newline at end of file