Get Contract ID
I am also working on our initial implementation and also can’t figure out how to get the contract id after creating the contract. Was wondering if you could point me in the right direction.
I am currently using the Ledger API v2, submit-and-wait and am able to create the contract. I don’t know how to use the update id and completion offset to get the contract id.
I tried streaming events but it seems there are no js/ts packages for the 3.3-snapshot DSK. I also looked for an example but could only find Java examples.
I also tried using submit, but I was getting 500 errors and no details.
I don’t think it makes sense to post source/errors as I don’t know if my approach is way off.
Cheers!
It looks like /v2/commands/submit-and-wait-for-transaction includes the contract id(s) of the created contract(s).
Payload
{
"commands": {
"commandId": "command01",
"userId": "Alice",
"actAs": [ "Alice::1220f6829fc4e86f8f0632bfc4efb1887939828f4f48e9fd425239cefa4419ef5033" ],
"commands": [
{
"CreateCommand": {
"templateId": "#getcontractid:Main:Asset",
"createArguments": {
"issuer": "Alice::1220f6829fc4e86f8f0632bfc4efb1887939828f4f48e9fd425239cefa4419ef5033",
"owner": "Bob::1220f6829fc4e86f8f0632bfc4efb1887939828f4f48e9fd425239cefa4419ef5033",
"name": "Asset 0001"
}
}
}
]
}
}
Response
{
"transaction": {
"updateId": "1220ebae900711ff06c1268db49d3824fe358af7f6b2869a41fe6f748f9c77aa074c",
"commandId": "command01",
"workflowId": "",
"effectiveAt": "2025-06-06T16:27:15.209058Z",
"events": [
{
"CreatedEvent": {
"offset": 44,
"nodeId": 0,
"contractId": "00909a0ed452ff5e50d1145bf23cd26d128a3f5075f6705cfb085560c64e10a1b0ca111220b0604df7ff4c6aaed636ca90bb384f0d1425cfd8985019d34f79801d41afb27d",
"templateId": "26dfa3676763576f3ec81b111337e5582d036eaae2bffba25bde72e0a061f974:Main:Asset",
"contractKey": null,
"createArgument": {
"issuer": "Alice::1220f6829fc4e86f8f0632bfc4efb1887939828f4f48e9fd425239cefa4419ef5033",
"owner": "Bob::1220f6829fc4e86f8f0632bfc4efb1887939828f4f48e9fd425239cefa4419ef5033",
"name": "Asset 0001"
},
"createdEventBlob": "",
"interfaceViews": [],
"witnessParties": [
"Alice::1220f6829fc4e86f8f0632bfc4efb1887939828f4f48e9fd425239cefa4419ef5033"
],
"signatories": [
"Alice::1220f6829fc4e86f8f0632bfc4efb1887939828f4f48e9fd425239cefa4419ef5033"
],
"observers": [
"Bob::1220f6829fc4e86f8f0632bfc4efb1887939828f4f48e9fd425239cefa4419ef5033"
],
"createdAt": "2025-06-06T16:27:15.209058Z",
"packageName": "getcontractid"
}
}
],
"offset": 44,
"synchronizerId": "mysynchronizer::1220e7570b68dc555fb7d87ec9c679b2e0b6e1a6cea758d90cf2c3da43c4004d8849",
"traceContext": {
"traceparent": "00-6ea825d5051d6e6bc356b50ccbc3b938-068ae460e8f998e0-01",
"tracestate": null
},
"recordTime": "2025-06-06T16:27:15.325118Z"
}
}
submit-and-wait-for-transaction
Do you have a link? I can’t find docs for submit-and-wait-for-transaction anywhere.
You can find it in the JSON Ledger API OpenAPI definition. But it may be easier and more illustrative to look at an example of creating a contract using JSON Ledger API.
Thanks for this. I had not seen that documentation.
I tried their example and I’m not sure what I’m doing wrong.
I’m getting
Token verified successfully
Submitting body: {
"commands": {
"commandId": "command01",
"userId": "Alice",
"actAs": [
"Alice::1220f6829fc4e86f8f0632bfc4efb1887939828f4f48e9fd425239cefa4419ef5033"
],
"commands": [
{
"CreateCommand": {
"templateId": "#getcontractid:Main:Asset",
"createArguments": {
"issuer": "Alice::1220f6829fc4e86f8f0632bfc4efb1887939828f4f48e9fd425239cefa4419ef5033",
"owner": "Bob::1220f6829fc4e86f8f0632bfc4efb1887939828f4f48e9fd425239cefa4419ef5033",
"name": "Asset 0001"
}
}
}
]
}
}
Failed to create contract: Error: Request failed with HTTP status code 400
Response body: Invalid value for: body (Missing required field at 'transactionFormat')
at /Users/paulwilkinson/projects/deploi/cn-quickstart/quickstart/deploi-server/src/routes/contracts.routes.ts:118:15
at processTicksAndRejections (node:internal/process/task_queues:95:5)
Full error details: {
message: 'Request failed with HTTP status code 400\n' +
"Response body: Invalid value for: body (Missing required field at 'transactionFormat')",
code: undefined,
details: undefined,
stack: 'Error: Request failed with HTTP status code 400\n' +
"Response body: Invalid value for: body (Missing required field at 'transactionFormat')\n" +
' at /Users/paulwilkinson/projects/deploi/cn-quickstart/quickstart/deploi-server/src/routes/contracts.routes.ts:118:15\n' +
' at processTicksAndRejections (node:internal/process/task_queues:95:5)'
}
The code looks like this:
const example = {
commands: {
commandId: "command01",
userId: "Alice",
actAs: ["Alice::1220f6829fc4e86f8f0632bfc4efb1887939828f4f48e9fd425239cefa4419ef5033"],
commands: [
{
CreateCommand: {
templateId: "#getcontractid:Main:Asset",
createArguments: {
issuer: "Alice::1220f6829fc4e86f8f0632bfc4efb1887939828f4f48e9fd425239cefa4419ef5033",
owner: "Bob::1220f6829fc4e86f8f0632bfc4efb1887939828f4f48e9fd425239cefa4419ef5033",
name: "Asset 0001",
},
},
},
],
},
};
const userToken = await TokenGenerator.generateUserValidatorToken();
console.log("Submitting body:", JSON.stringify(example, null, 2));
try {
const response = await fetch(`http://localhost:27575/v2/commands/submit-and-wait-for-transaction`, {
method: "POST",
headers: {
Authorization: `Bearer ${userToken}`,
"Content-Type": "application/json",
},
body: JSON.stringify(example),
});
if (!response.ok) {
const responseBody = await response.text();
throw new Error(`Request failed with HTTP status code ${response.status}\nResponse body: ${responseBody}`);
}
If I add a transactionFormat like this:
const example = {
actAs: ["Alice::1220f6829fc4e86f8f0632bfc4efb1887939828f4f48e9fd425239cefa4419ef5033"],
userId: "app1", // Or "Alice::1220..." if that's your Keycloak user ID
commandId: "somecommandid2",
commands: [
{
CreateCommand: {
// <--- Direct command type as key
createArguments: {
// <--- Arguments under 'createArguments'
observers: [], // From their example
issuer: "Alice::1220f6829fc4e86f8f0632bfc4efb1887939828f4f48e9fd425239cefa4419ef5033",
amount: "999.99",
currency: "USD",
owner: "Bob::1220f6829fc4e86f8f0632bfc4efb1887939828f4f48e9fd425239cefa4419ef5033", // Adjusted to your Bob ID
},
templateId: "#Main:Asset", // <--- Shorthand templateId
},
},
],
transactionFormat: {
eventFormat: {
filtersByParty: {
"Alice::1220f6829fc4e86f8f0632bfc4efb1887939828f4f48e9fd425239cefa4419ef5033": {},
},
verbose: true,
},
transactionShape: "TRANSACTION_SHAPE_ACS_DELTA",
},
};
then the error message seems to come from a bit deeper:
Full error details: {
message: 'Request failed with HTTP status code 400\n' +
"Response body: Invalid value for: body (Missing required field at 'commands.commands', Missing required field at 'commands.commandId', Missing required field at 'commands.actAs', JSON decoding to CNil should never happen at 'transactionShape')",
code: undefined,
details: undefined,
stack: 'Error: Request failed with HTTP status code 400\n' +
"Response body: Invalid value for: body (Missing required field at 'commands.commands', Missing required field at 'commands.commandId', Missing required field at 'commands.actAs', JSON decoding to CNil should never happen at 'transactionShape')\n" +
' at /Users/paulwilkinson/projects/deploi/cn-quickstart/quickstart/deploi-server/src/routes/contracts.routes.ts:129:15\n' +
' at processTicksAndRejections (node:internal/process/task_queues:95:5)'
}
@WallaceKelly @a_putkov Any chance you could post the full body of a submit-and-wait-for-transaction that includes the transactionFormat? Or @WallaceKelly if that is the full body then lmk if you can think of anything else I might be doing wrong, or anything I might have installed incorrectly. I’m on the 3.3-snapshot.
if that is the full body then lmk if you can think of anything else I might be doing wrong, or anything I might have installed incorrectly. I’m on the 3.3-snapshot.
I posted the full bodies for my request and the response above. The docs say that the transactionFormat field is optional. And I did not include it. So the error message, “Missing required field at ‘transactionFormat’” is currently a mystery for me.
Let’s compare snapshots. I’m using sdk-version: 3.3.0-snapshot.20250603.0. You?
I’m on 3.3.0-snapshot.20250410.0.
The docs that Curis and I were looking at said that transactionFormat is required. I will see if I can dig it up again.
➜ quickstart git:(feature/investment-ui) daml version
SDK versions:
0.13.41
2.8.0
2.10.0
3.3.0-snapshot.20250410.0 (default SDK version for new projects)
➜ quickstart git:(feature/investment-ui) ✗
I’m on 3.3.0-snapshot.20250410.0.
That explains it.
- Run
daml install 3.3.0-snapshot.20250603.0 - Edit
daml.yamltosdk-version: 3.3.0-snapshot.20250603.0. - Rebuild the Daml and restart the ledger.
The latest version correctly marks transactionFormat as optional.
Yep, from the openapi.yaml it looks like it’s supposed to be optional. But I still get that error if I leave it out.
JsSubmitAndWaitForTransactionRequest:
title: JsSubmitAndWaitForTransactionRequest
description: These commands are executed as a single atomic transaction.
type: object
required:
- commands
properties:
commands:
$ref: "#/components/schemas/JsCommands"
description: |-
The commands to be submitted.
Required
transactionFormat:
$ref: "#/components/schemas/TransactionFormat"
description: |-
If no ``transaction_format`` is provided, a default will be used where ``transaction_shape`` is set to
TRANSACTION_SHAPE_ACS_DELTA, ``event_format`` is defined with ``filters_by_party`` containing wildcard-template
filter for all original ``act_as`` and ``read_as`` parties and the ``verbose`` flag is set.
Optional
Just to be clear…
- In
3.3.0-snapshot.20250410.0, thetransactionFormatwas required.JsSubmitAndWaitForTransactionRequest: title: JsSubmitAndWaitForTransactionRequest description: These commands are executed as a single atomic transaction. type: object required: - commands - transactionFormat : - In
3.3.0-snapshot.20250603.0, thetransactionFormatis optional.JsSubmitAndWaitForTransactionRequest: title: JsSubmitAndWaitForTransactionRequest description: These commands are executed as a single atomic transaction. type: object required: - commands :
You can get the Open API spec from the currently running ledger:
curl -s http://localhost:7575/docs/openapi > openapi.20250603.yaml
The following payload, including the optional transactionFormat, is successful on 3.3.0-snapshot.20250603.0.
{
"commands": {
"commandId": "command01",
"userId": "Alice",
"actAs": [ "Alice::1220363cb139ae9913f5ca84d56e6f22eb75773870f1e65c59812aaa0e6d996c014c" ],
"commands": [
{
"CreateCommand": {
"templateId": "#getcontractid:Main:Asset",
"createArguments": {
"issuer": "Alice::1220363cb139ae9913f5ca84d56e6f22eb75773870f1e65c59812aaa0e6d996c014c",
"owner": "Bob::1220363cb139ae9913f5ca84d56e6f22eb75773870f1e65c59812aaa0e6d996c014c",
"name": "Asset 0001"
}
}
}
]
},
"transactionFormat": {
"eventFormat": {
"filtersByParty": {
"Alice::1220363cb139ae9913f5ca84d56e6f22eb75773870f1e65c59812aaa0e6d996c014c": {}
},
"verbose": true
},
"transactionShape": "TRANSACTION_SHAPE_ACS_DELTA"
}
}
1220363cb139ae9913f5ca84d56e6f22eb75773870f1e65c59812aaa0e6d996c014c
Thanks again, I will try upgrading to the same SDK version.
What token are you sending with the request?
To discuss this with you, I’ve been using daml start to start a sandbox ledger. The sandbox ledger does not require an authentication token. Consequently, I have not been passing one with my requests.
If your participant has auth enabled, you will need to get a token from the auth service which the participant is connected to.
By the way, I noticed that you quoted 1220363cb139ae9913f5ca84d56e6f22eb75773870f1e65c59812aaa0e6d996c014c in your reply. That was the party namespace fingerprint assigned by my local sandbox when I created the parties. It is different every time I restart the sandbox.
The full party id consists of an identifier (e.g., Alice), two colons (::), and the party namespace fingerprint. The fingerprint associates it with the participant node on which the party was allocated.
You can get the list of parties on your node using something like:
curl -s http://localhost:27575/v2/parties
I will upgrade
We are on the same version of the SDK now. Thanks for the upgrade instructions.
➜ quickstart git:(feature/investment-ui) ✗ daml version
SDK versions:
0.13.41
2.8.0
2.10.0
3.3.0-snapshot.20250410.0
3.3.0-snapshot.20250603.0 (default SDK version for new projects)
➜ quickstart git:(feature/investment-ui) ✗
The easiest way to reproduce the issue is to modify create-app-install-request.sh to use submit-and-wait-for-transaction instead of submit-and-wait. This way I know the parties are correct and that it most likely an issue with the format of the request body. It gives me the same error.
#!/bin/bash
# Copyright (c) 2025, Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
# SPDX-License-Identifier: 0BSD
set -eo pipefail
APP_PROVIDER_PARTY=$1
APP_USER_PARTY=$2
DSO_PARTY=$3
APP_USER_WALLET_ADMIN_TOKEN=$4
source /app/utils.sh
create_app_install_request() {
local token=$1
local dsoParty=$2
local appUserParty=$3
local appProviderParty=$4
local participantUserId=$5
local participant=$6
# Add a timestamp for a unique command ID to allow resubmission
local time="$(date +%s%N)"
echo "hi from create_app_install_request" >&2
echo "create_app_install_request $dsoParty $appUserParty $appProviderParty $participant" >&2
curl_check "http://$participant/v2/commands/submit-and-wait-for-transaction" "$token" "application/json" \
--data-raw '{
"commands": {
"commands": [
{
"CreateCommand": {
"templateId": "#quickstart-licensing:Licensing.AppInstall:AppInstallRequest",
"createArguments": {
"dso": "'$dsoParty'",
"provider": "'$appProviderParty'",
"user": "'$appUserParty'",
"meta": {
"values": []
}
}
}
}
],
"workflowId": "create-app-install-request",
"applicationId": "'$participantUserId'",
"commandId": "create-app-install-request-'$time'",
"deduplicationPeriod": {
"Empty": {}
},
"actAs": [
"'$appUserParty'"
],
"readAs": [
"'$appUserParty'"
],
"submissionId": "create-app-install-request",
"disclosedContracts": [],
"domainId": "",
"packageIdSelectionPreference": []
},
"transactionFormat": {
"eventFormat": {
"filtersByParty": {
"'$appUserParty'": {}
},
"verbose": true
},
"transactionShape": "TRANSACTION_SHAPE_ACS_DELTA"
}
}'
}
create_app_install_request "$APP_USER_WALLET_ADMIN_TOKEN" $DSO_PARTY $APP_USER_PARTY $APP_PROVIDER_PARTY $AUTH_APP_USER_WALLET_ADMIN_USER_ID "canton:2${PARTICIPANT_JSON_API_PORT}"
I had to surround commands in another commands to match the swagger file:
The result is the same error that I get in my code. It complains if I don’t add the transactionFormat tag.
Invalid value for: body (JSON decoding to CNil should never happen at 'transactionShape')
I get the same error with your request body BTW.
Response body: Invalid value for: body (JSON decoding to CNil should never happen at ‘transactionShape’)
Your input looks correct.
I checked with version:
3.3.0-snapshot.20250603.0 and example model:
daml sandbox --json-api-port 7575 --dar model/.daml/dist/model-tests-1.0.0.dar
when I run the command as above (with changed fields due to different model) it worked ok:
EBUG: http://localhost:7575/v2/commands/submit-and-wait-for-transaction
DEBUG: --data-raw {
"commands": {
"commands" : [
{"CreateCommand": {
"createArguments": {
"observers": [],
"issuer": "Alice::12202d382c731c453772927e96340cfc2b09953f931a8c3c028cb78cf7cc9d324980",
"amount": "999.99",
"currency": "USD",
"owner": "Alice::12202d382c731c453772927e96340cfc2b09953f931a8c3c028cb78cf7cc9d324980"
},
"templateId": "#model-tests:Iou:Iou"
}
}
],
"userId": "ledger-api-user",
"commandId": "example-app-create-16425",
"actAs": ["Alice::12202d382c731c453772927e96340cfc2b09953f931a8c3c028cb78cf7cc9d324980"],
"readAs": ["Alice::12202d382c731c453772927e96340cfc2b09953f931a8c3c028cb78cf7cc9d324980"]
},
"transactionFormat": {
"eventFormat": {
"filtersByParty": {
"Alice::12202d382c731c453772927e96340cfc2b09953f931a8c3c028cb78cf7cc9d324980": {}
},
"verbose": true
},
"transactionShape": "TRANSACTION_SHAPE_ACS_DELTA"
}
}
DEBUG: Request HTTP status code 200
DEBUG: Response body: {"transaction":{"updateId":"1220d34f2815aa9c9c5f18c12efa885dcc9065c763d532df6c39bdf377a5cfb3cea6","commandId":"example-app-create-16425","workflowId":"","effectiveAt":"2025-06-10T09:50:57.290950Z","events":[{"CreatedEvent":{"offset":19,"nodeId":0,"contractId":"001e1f058f5b57a2507156c40c6307a94176f606129212c85c6950253ac27632ccca111220b94eb10d7944e10ceebdc522d5a621d28277ec07ddc92c77fa4403a9af338d46","templateId":"47fc5f9bf30bdc147465d7b5fe170a0bc26b3677b45b005573130d951fdaebed:Iou:Iou","contractKey":null,"createArgument":{"issuer":"Alice::12202d382c731c453772927e96340cfc2b09953f931a8c3c028cb78cf7cc9d324980","owner":"Alice::12202d382c731c453772927e96340cfc2b09953f931a8c3c028cb78cf7cc9d324980","currency":"USD","amount":"999.9900000000","observers":[]},"createdEventBlob":"","interfaceViews":[],"witnessParties":["Alice::12202d382c731c453772927e96340cfc2b09953f931a8c3c028cb78cf7cc9d324980"],"signatories":["Alice::12202d382c731c453772927e96340cfc2b09953f931a8c3c028cb78cf7cc9d324980"],"observers":[],"createdAt":"2025-06-10T09:50:57.290950Z","packageName":"model-tests"}}],"offset":19,"synchronizerId":"mysynchronizer::1220f00e66a5e50c26346c053c9db7f549ea389a6282daadd659be7156f95cb37215","traceContext":{"traceparent":"00-e46411347741df38191c52ffe67baa40-374ddddcf2a77f14-01","tracestate":null},"recordTime":"2025-06-10T09:50:57.920759Z"}}
Hi Jarek,
I followed your example carefully and still get the error
"Response body: Invalid value for: body (JSON decoding to CNil should never happen at 'transactionShape')"
Can I get you to try this version of create-app-install-request.sh? It’s part of the Quickstart. Just paste it over yours and run make create-app-install-request. That should reproduce my issue.
#!/bin/bash
# Copyright (c) 2025, Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
# SPDX-License-Identifier: 0BSD
set -eo pipefail
APP_PROVIDER_PARTY=$1
APP_USER_PARTY=$2
DSO_PARTY=$3
APP_USER_WALLET_ADMIN_TOKEN=$4
source /app/utils.sh
create_app_install_request() {
local token=$1
local dsoParty=$2
local appUserParty=$3
local appProviderParty=$4
local participantUserId=$5
local participant=$6
# Add a timestamp for a unique command ID to allow resubmission
local time="$(date +%s%N)"
echo "Hi from create_app_install_request" >&2
echo "--------------------------------" >&2
echo "dsoParty: $dsoParty" >&2
echo "appUserParty: $appUserParty" >&2
echo "appProviderParty: $appProviderParty" >&2
echo "participant: $participant" >&2
echo "participantUserId: $participantUserId" >&2
echo "create_app_install_request $dsoParty $appUserParty $appProviderParty $participant" >&2
curl_check "http://$participant/v2/commands/submit-and-wait-for-transaction" "$token" "application/json" \
--data-raw '{
"commands": {
"commands": [
{
"CreateCommand": {
"templateId": "#quickstart-licensing:Licensing.AppInstall:AppInstallRequest",
"createArguments": {
"dso": "'$dsoParty'",
"provider": "'$appProviderParty'",
"user": "'$appUserParty'",
"meta": {
"values": []
}
}
}
}
],
"workflowId": "create-app-install-request",
"applicationId": "'$participantUserId'",
"commandId": "create-app-install-request-'$time'",
"deduplicationPeriod": {
"Empty": {}
},
"actAs": [
"'$appUserParty'"
],
"readAs": [
"'$appUserParty'"
],
"submissionId": "create-app-install-request",
"disclosedContracts": [],
"domainId": "",
"packageIdSelectionPreference": []
},
"transactionFormat": {
"eventFormat": {
"filtersByParty": {
"'$appUserParty'": {}
},
"verbose": true
},
"transactionShape": "TRANSACTION_SHAPE_ACS_DELTA"
}
}'
}
create_app_install_request "$APP_USER_WALLET_ADMIN_TOKEN" $DSO_PARTY $APP_USER_PARTY $APP_PROVIDER_PARTY $AUTH_APP_USER_WALLET_ADMIN_USER_ID "canton:2${PARTICIPANT_JSON_API_PORT}"
Hi,
I just tried with fresh cn-quickstart installation (from git),
replaced the file and got this as a result of make create-app-install-request:
{"transaction":{"updateId":"1220355b47ee13feb41d8194d0f1f0890dab8ca76662791fc383b7c0ff3e72229829","commandId":"create-app-install-request-1749575814","workflowId":"create-app-install-request","effectiveAt":"2025-06-10T17:16:54.948486Z","events":[{"CreatedEvent":{"offset":61,"nodeId":0,"contractId":"00200092b8250e432508ba37aae51c6f5f3eec5e975cd55840f39df6c16240d5caca111220bf5b752f73daa66ea4f98d3013406b740024bc7440f84477b79b7ca18ddc843f","templateId":"37d1b3b9cde478027535d62449a61ee816bd1eeabcf396ff0688de17caa2b261:Licensing.AppInstall:AppInstallRequest","contractKey":null,"createArgument":{"dso":"DSO::122090e2b3ff4cca85e4163ebec51785495d0221fdcd4f7c453ef7e3f2e4293a8945","provider":"app_provider_quickstart-jarek-1::122012b1a27ca0ea5034876c3d43f84ce1989beede9db8c1525a29636612a957d6cc","user":"app_user_quickstart-jarek-1::12209648d3f741142e83cd67b9f77eb800e470a2a49f20f3820bea35ff3f4caede9b","meta":{"values":[]}},"createdEventBlob":"","interfaceViews":[],"witnessParties":["app_user_quickstart-jarek-1::12209648d3f741142e83cd67b9f77eb800e470a2a49f20f3820bea35ff3f4caede9b"],"signatories":["app_user_quickstart-jarek-1::12209648d3f741142e83cd67b9f77eb800e470a2a49f20f3820bea35ff3f4caede9b"],"observers":["app_provider_quickstart-jarek-1::122012b1a27ca0ea5034876c3d43f84ce1989beede9db8c1525a29636612a957d6cc"],"createdAt":"2025-06-10T17:16:54.948486Z","packageName":"quickstart-licensing"}}],"offset":61,"synchronizerId":"global-domain::122090e2b3ff4cca85e4163ebec51785495d0221fdcd4f7c453ef7e3f2e4293a8945","traceContext":{"traceparent":"00-0e0421d692c43c01511a0a225ec6eb56-2e7e85ee712a32ca-01","tracestate":null},"recordTime":"2025-06-10T17:16:55.202557Z"}}
~/dev/cn-quickstart/quickstart>
maybe make stop && make clean-all
then git pull
and starting from make build can help?
We have made a change in transactionShape encoding few weeks ago. It looks like you have still traces of our old code somehow.
I updated the sdk and sync’d my fork and then without any changes I was able to send the request and get a response that includes the contract id. Thanks all!