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