diff --git a/CHANGELOG.md b/CHANGELOG.md index 988ddcbcc..47ba3fa21 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - Introduced Cis2Client for interfacing with CIS2 compliant smart contracts. - Support for deserializing contract update transactions. +- Fix a bug where contract invocations used wrong format for parameters. ## 6.1.0 - Purge remaining usages of V1 GRPC API. diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/ClientV2MapperExtensions.java b/concordium-sdk/src/main/java/com/concordium/sdk/ClientV2MapperExtensions.java index bd7fa1969..79251fb4f 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/ClientV2MapperExtensions.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/ClientV2MapperExtensions.java @@ -1652,7 +1652,7 @@ static com.concordium.grpc.v2.ReceiveName to(ReceiveName receiveName) { static com.concordium.grpc.v2.Parameter to(Parameter parameter) { return com.concordium.grpc.v2.Parameter.newBuilder() - .setValue(ByteString.copyFrom(parameter.getBytes())) + .setValue(ByteString.copyFrom(parameter.getBytesForContractInvocation())) .build(); } diff --git a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/Parameter.java b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/Parameter.java index e45cd2052..4f39076ba 100644 --- a/concordium-sdk/src/main/java/com/concordium/sdk/transactions/Parameter.java +++ b/concordium-sdk/src/main/java/com/concordium/sdk/transactions/Parameter.java @@ -1,5 +1,6 @@ package com.concordium.sdk.transactions; +import com.concordium.sdk.requests.smartcontracts.InvokeInstanceRequest; import com.concordium.sdk.responses.ProtocolVersion; import com.concordium.sdk.transactions.smartcontracts.SchemaParameter; import com.concordium.sdk.types.UInt16; @@ -52,6 +53,18 @@ public byte[] getBytes() { return buffer.array(); } + /** + * Get the parameter bytes for contract invocation i.e. off-chain operation. + * This differs from {@link Parameter#getBytes()} as this does not prepend the + * returned byte array with the length of the parameters. + * + * This function should be only be used for {@link com.concordium.sdk.ClientV2#invokeInstance(InvokeInstanceRequest)} calls. + * @return the parameters + */ + public byte[] getBytesForContractInvocation() { + return this.bytes; + } + /** * Constructs a {@link Parameter} from the provided {@link SchemaParameter}. * Provided {@link SchemaParameter} must be initialized using {@link SchemaParameter#initialize()} beforehand.