diff --git a/sdk/bazel_tools/client_server/client_server_test.bzl b/sdk/bazel_tools/client_server/client_server_test.bzl index f4f04ec23155..6fd27a390db5 100644 --- a/sdk/bazel_tools/client_server/client_server_test.bzl +++ b/sdk/bazel_tools/client_server/client_server_test.bzl @@ -98,3 +98,85 @@ $$runner $$client "$$client_args" $$server "$$server_args" "$$runner_args" ), **kwargs ) + +def client_server_test_canton_sh( + name, data, src, + additional_canton_args = [], + server_files = [], + tags = [], +): + native.genrule( + name = name + "-client-sh", + outs = [name + "-client.sh"], + tools = data, + cmd = """\ +cat >$(OUTS) <<'EOF' +#!/usr/bin/env bash +set -euo pipefail +canonicalize_rlocation() {{ + # Note (MK): This is a fun one: Let's say $$TEST_WORKSPACE is "compatibility" + # and the argument points to a target from an external workspace, e.g., + # @daml-sdk-0.0.0//:daml. Then the short path will point to + # ../daml-sdk-0.0.0/daml. Putting things together we end up with + # compatibility/../daml-sdk-0.0.0/daml. On Linux and MacOS this works + # just fine. However, on windows we need to normalize the path + # or rlocation will fail to find the path in the manifest file. + rlocation $$(realpath -L -s -m --relative-to=$$PWD $$TEST_WORKSPACE/$$1) +}} + +get_exe() {{ + if [[ %os% = windows ]]; then + for arg in "$$@"; do + if [[ $$arg = *.exe ]]; then + echo "$$arg" + return + fi + done + echo "$$1" + else + echo "$$1" + fi +}} + +trap 'status=$$?; kill -TERM $$PID; wait $$PID; exit $$status' INT TERM + +timeout=60 +while [ ! -e _port_file ]; do + if [ "$$timeout" = 0 ]; then + echo "Timed out waiting for Canton startup" >&2 + exit 1 + fi + sleep 1 + timeout=$$((timeout - 1)) +done + +{src} +EOF +chmod +x $(OUTS) +""".format(src = src), + ) + + native.sh_binary( + name = name + "-client", + srcs = [name + "-client.sh"], + data = data, + ) + + server = "@daml-sdk-0.0.0//:daml" + server_args = ["sandbox", "--canton-port-file", "_port_file"] + additional_canton_args + server_files_prefix = "--dar=" + + client_server_test( + name = name, + client = "{}-client".format(name), + client_args = [], + client_files = [], + data = [], + runner = "//bazel_tools/client_server:runner", + runner_args = ["6865"], + server = server, + server_args = server_args, + server_files = server_files, + server_files_prefix = server_files_prefix, + tags = tags + ["exclusive"], + ) diff --git a/sdk/compatibility/BUILD b/sdk/compatibility/BUILD index 6910c17e1b26..4326ea7e8223 100644 --- a/sdk/compatibility/BUILD +++ b/sdk/compatibility/BUILD @@ -13,6 +13,7 @@ load( "data_dependencies_coins", "data_dependencies_daml_script_test", "data_dependencies_upgrade_test", + "data_dependencies_codegen_test", ) load("//bazel_tools:versions.bzl", "versions") load("//:versions.bzl", "platform_versions", "sdk_versions", "stable_versions") @@ -108,7 +109,7 @@ head = "0.0.0" # Test that the Daml script runner can run DARs built with an older SDK # version. I.e. where the runner version is at least the SDK version or # more recent. - if versions.is_at_least(sdk_version, platform_version) + if versions.is_at_least(sdk_version, platform_version) and versions.is_at_least("3.0.0", sdk_version) ] if not is_windows else None [ @@ -130,19 +131,28 @@ head = "0.0.0" if versions.is_at_least(old_sdk_version, new_sdk_version) ] +[ + data_dependencies_codegen_test( + new_sdk_version = new_sdk_version, + old_sdk_version = old_sdk_version, + ) + for new_sdk_version in sdk_versions + for old_sdk_version in sdk_versions + # Tests that we can build a package with a newer SDK version that has + # data-dependencies on packages built with an older SDK version. + if versions.is_at_least(old_sdk_version, new_sdk_version) and old_sdk_version != new_sdk_version +] + [ data_dependencies_daml_script_test( + new_sdk_version = new_sdk_version, old_sdk_version = old_sdk_version, ) + for new_sdk_version in sdk_versions for old_sdk_version in sdk_versions - # Tests that we can run a daml script from a package built with an older - # SDK version even when exposed through an import in a package built with - # the latest SDK version. - # (regression test for https://github.com/digital-asset/daml/issues/14291) - if old_sdk_version != "0.0.0" - # These tests use data-dependency reexports (#11147), so the earliest - # supported SDK is 1.18.0 - if versions.is_at_least("3.0.0", old_sdk_version) + # Tests that we can build a package with a newer SDK version that has + # data-dependencies on packages built with an older SDK version. + if versions.is_at_least(old_sdk_version, new_sdk_version) and old_sdk_version != new_sdk_version ] os_name = "linux" if not is_windows else "windows" diff --git a/sdk/compatibility/WORKSPACE b/sdk/compatibility/WORKSPACE index 079678753288..3f0c228a0a08 100644 --- a/sdk/compatibility/WORKSPACE +++ b/sdk/compatibility/WORKSPACE @@ -66,7 +66,7 @@ build_bazel_rules_nodejs_dependencies() load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories", "yarn_install") node_repositories( - node_version = "18.12.1", + node_version = "18.17.0", ) load( @@ -307,7 +307,7 @@ nixpkgs_package( ) if not is_windows else None node_repositories( - node_version = "18.12.1", + node_version = "18.17.0", ) nixpkgs_package( diff --git a/sdk/compatibility/bazel_tools/daml_script/daml_script.bzl b/sdk/compatibility/bazel_tools/daml_script/daml_script.bzl index fdb30f42178c..adb3b41ec89c 100644 --- a/sdk/compatibility/bazel_tools/daml_script/daml_script.bzl +++ b/sdk/compatibility/bazel_tools/daml_script/daml_script.bzl @@ -3,7 +3,7 @@ load( "@daml//bazel_tools/client_server:client_server_test.bzl", - "client_server_test", + "client_server_test_canton_sh", ) load("//bazel_tools:versions.bzl", "version_to_name", "versions") load("//bazel_tools:testing.bzl", "extra_tags") @@ -62,44 +62,17 @@ def daml_script_test( daml_runner = "@daml-sdk-{version}//:daml".format( version = runner_version, ) - - server = daml_runner - server_args = ["sandbox", "--canton-port-file", "_port_file"] - server_files = ["$(rootpath {})".format(compiled_dar)] - server_files_prefix = "--dar=" - - native.genrule( - name = "{}-client-sh".format(name), - outs = ["{}-client.sh".format(name)], - cmd = """\ -cat >$(OUTS) <<'EOF' -#!/usr/bin/env bash -set -euo pipefail -canonicalize_rlocation() {{ - # Note (MK): This is a fun one: Let's say $$TEST_WORKSPACE is "compatibility" - # and the argument points to a target from an external workspace, e.g., - # @daml-sdk-0.0.0//:daml. Then the short path will point to - # ../daml-sdk-0.0.0/daml. Putting things together we end up with - # compatibility/../daml-sdk-0.0.0/daml. On Linux and MacOS this works - # just fine. However, on windows we need to normalize the path - # or rlocation will fail to find the path in the manifest file. - rlocation $$(realpath -L -s -m --relative-to=$$PWD $$TEST_WORKSPACE/$$1) -}} + client_server_test_canton_sh( + name = name, + data = [ + compiled_dar, + daml_runner, + ], + server_files = ["$(rootpath {})".format(compiled_dar)], + tags = extra_tags(compiler_version, runner_version), + src = """\ runner=$$(canonicalize_rlocation $(rootpath {runner})) -# Cleanup the trigger runner process but maintain the script runner exit code. -trap 'status=$$?; kill -TERM $$PID; wait $$PID; exit $$status' INT TERM -if [ {wait_for_port_file} -eq 1 ]; then - timeout=60 - while [ ! -e _port_file ]; do - if [ "$$timeout" = 0 ]; then - echo "Timed out waiting for Canton startup" >&2 - exit 1 - fi - sleep 1 - timeout=$$((timeout - 1)) - done -fi if [ {upload_dar} -eq 1 ] ; then $$runner ledger upload-dar \\ --host localhost \\ @@ -113,8 +86,6 @@ $$runner script \\ --wall-clock-time \\ --dar $$(canonicalize_rlocation $(rootpath {dar})) \\ --script-name {script_name} -EOF -chmod +x $(OUTS) """.format( dar = compiled_dar, runner = daml_runner, @@ -122,48 +93,18 @@ chmod +x $(OUTS) upload_dar = "0", wait_for_port_file = "1", ), - tools = [ - compiled_dar, - daml_runner, - ], - ) - native.sh_binary( - name = "{}-client".format(name), - srcs = ["{}-client.sh".format(name)], - data = [ - compiled_dar, - daml_runner, - ], - ) - - client_server_test( - name = name, - client = "{}-client".format(name), - client_args = [], - client_files = [], - data = [ - compiled_dar, - ], - runner = "//bazel_tools/client_server:runner", - runner_args = ["6865"], - server = server, - server_args = server_args, - server_files = server_files, - server_files_prefix = server_files_prefix, - tags = extra_tags(compiler_version, runner_version) + ["exclusive"], ) def daml_script_example_test(compiler_version, runner_version): - if versions.is_at_least("3.0.0", compiler_version): - daml_script_test( - name = "daml-script-test-compiler-{compiler_version}-runner-{runner_version}".format( - compiler_version = version_to_name(compiler_version), - runner_version = version_to_name(runner_version), - ), - compiler_version = compiler_version, - runner_version = runner_version, - compiled_dar = "//:script-example-dar-{version}".format( - version = version_to_name(compiler_version), - ), - script_name = "ScriptExample:test", - ) + daml_script_test( + name = "daml-script-test-compiler-{compiler_version}-runner-{runner_version}".format( + compiler_version = version_to_name(compiler_version), + runner_version = version_to_name(runner_version), + ), + compiler_version = compiler_version, + runner_version = runner_version, + compiled_dar = "//:script-example-dar-{version}".format( + version = version_to_name(compiler_version), + ), + script_name = "ScriptExample:test", + ) diff --git a/sdk/compatibility/bazel_tools/data_dependencies/BUILD.bazel b/sdk/compatibility/bazel_tools/data_dependencies/BUILD.bazel index a30ffcbf0430..b7647767bf2c 100644 --- a/sdk/compatibility/bazel_tools/data_dependencies/BUILD.bazel +++ b/sdk/compatibility/bazel_tools/data_dependencies/BUILD.bazel @@ -5,4 +5,5 @@ exports_files(glob([ "validate_dar.sh", "example/**", "daml_script_test/**", + "codegen_test/**", ])) diff --git a/sdk/compatibility/bazel_tools/data_dependencies/codegen_test/dep/Dep.daml b/sdk/compatibility/bazel_tools/data_dependencies/codegen_test/dep/Dep.daml new file mode 100644 index 000000000000..3f453e84494e --- /dev/null +++ b/sdk/compatibility/bazel_tools/data_dependencies/codegen_test/dep/Dep.daml @@ -0,0 +1,16 @@ +-- Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. +-- SPDX-License-Identifier: Apache-2.0 + +module Dep where + +template DepData with + depParty: Party + value: Int + where + signatory depParty + + choice Consume : Int + controller depParty + do + pure value + diff --git a/sdk/compatibility/bazel_tools/data_dependencies/codegen_test/index.ts b/sdk/compatibility/bazel_tools/data_dependencies/codegen_test/index.ts new file mode 100644 index 000000000000..f84cd5880608 --- /dev/null +++ b/sdk/compatibility/bazel_tools/data_dependencies/codegen_test/index.ts @@ -0,0 +1,183 @@ +// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import createClient from "openapi-fetch"; +import {ContractTypeCompanion, Choice} from "@daml/types"; +import type {paths, components} from "../codegen/api/ledger-api"; +import {Main, packageId as mainPackageId} from "../codegen/codegen-main-0.0.1/lib"; +import {Dep, packageId as depPackageId} from "../codegen/codegen-dep-0.0.1/lib"; +import * as fs from 'fs' + +const client = createClient({baseUrl: "http://localhost:7575"}); + +async function createUser(user: string, party: string): Promise { + let res = await client.POST("/v2/users", { + body: { + user: { + id: user, + primaryParty: party, + isDeactivated: false, + identityProviderId: "" + }, + rights: [ + { + kind: { + CanActAs: { + value: { + party: party + } + }, + CanReadAs: { + value: { + party: party + } + } + } + } + ] + } + }); + + return assertDefined(`createUser(${user})`, res, res.data?.user?.primaryParty); +} + +async function createContract( + t: ContractTypeCompanion, + party: string, userId: string, + payload: any, +): Promise { + let submitCreate = await client.POST("/v2/commands/submit-and-wait-for-transaction", { + body: { + commands: { + commands: [ + { + CreateCommand: { + createArguments: payload, + templateId: t.templateId + } + } + ], + commandId: `id-${randomId(16)}`, + userId: userId, + actAs: [party], + readAs: [party], + } + } + }); + + let submitCreateEvent = assertDefined("submitCreate", submitCreate, (submitCreate.data?.transaction.events ?? [])[0]); + return assertCreate<{ contractId: string }>("submitCreateEvent", submitCreateEvent).contractId; +} + +async function exerciseChoice( + t: ContractTypeCompanion, + c: Choice, + party: string, userId: string, + contractId: string, + payload: any, +): Promise<(components["schemas"]["Event"])[]> { + let submitExercise = await client.POST("/v2/commands/submit-and-wait-for-transaction", { + body: { + commands: { + commands: [ + { + ExerciseCommand: { + contractId: contractId, + choice: c.choiceName, + choiceArgument: payload, + templateId: t.templateId, + } + } + ], + commandId: `id-${randomId(16)}`, + userId: userId, + actAs: [party], + readAs: [party], + } + }, + transactionFormat: { + transactionShape: "TRANSACTION_SHAPE_LEDGER_EFFECTS", + }, + }); + + return assertDefined("submitExercise", submitExercise, submitExercise.data?.transaction.events); +} + +function assertDefined(name: string, alt: any, x: A | undefined): A { + if (x != undefined) + return x + else + throw [`'${name}' is not defined`, alt] +} + +function assertCreate(name: string, ev: components["schemas"]["Event"]): components["schemas"]["CreatedEvent"] { + if ('CreatedEvent' in ev) + return ev.CreatedEvent + else + throw [`'${name}' is not a CreatedEvent`, ev] +} + +function randomId(len: number): string { + return [...Array(len).keys()].map(_ => "0123456789abcdef"[Math.floor(16 * Math.random())]).join(""); +} + +function assertArchived(contractId: string, events: (components["schemas"]["Event"])[]): string { + let event = events.find(ev => { + if ('ArchivedEvent' in ev) return ev.ArchivedEvent.contractId == contractId + return false; + }); + if (event != null) + return (event as { ArchivedEvent: components["schemas"]["ArchivedEvent"] }).ArchivedEvent.contractId; + else + throw [`${contractId} was not archived.`, events]; +} + +(async () => { + let listResPre = await client.GET("/v2/packages"); + let pre = new Set(assertDefined("listResPre", listResPre, listResPre.data?.packageIds)); + + let uploadRes = await client.POST("/v2/dars", { + body: "./target.dar", + bodySerializer: body => fs.readFileSync(body), + params: { + query: { + vetAllPackages: true, + }, + }, + }); + + let listResPost = await client.GET("/v2/packages"); + let post = assertDefined("listResPost", listResPost, listResPost.data?.packageIds); + + let aliceSuffix = randomId(16); + let allocateParty = await client.POST("/v2/parties", { + body: { + partyIdHint: `alice-${aliceSuffix}`, + identityProviderId: "", + synchronizerId: "", + userId: "", + } + }); + + let alice: string = assertDefined("allocateParty(alice)", allocateParty, allocateParty.data?.partyDetails?.party); + let aliceUser = await createUser(`Alice-${aliceSuffix}`, alice); + + let depContractId = await createContract(Dep.DepData, alice, aliceUser, { + depParty: alice, + value: 5, + }); + + let mainContractId = await createContract(Main.MainData, alice, aliceUser, { + mainParty: alice, + value: 7, + dep: depContractId, + }); + + let exerciseEvents = await exerciseChoice(Main.MainData, Main.MainData.Consume, alice, aliceUser, mainContractId, {}); + assertArchived(mainContractId, exerciseEvents); + assertArchived(depContractId, exerciseEvents); +})().catch(e => { + console.log("Error", e); + throw e; +}); + diff --git a/sdk/compatibility/bazel_tools/data_dependencies/codegen_test/main/Main.daml b/sdk/compatibility/bazel_tools/data_dependencies/codegen_test/main/Main.daml new file mode 100644 index 000000000000..3539d09ceae2 --- /dev/null +++ b/sdk/compatibility/bazel_tools/data_dependencies/codegen_test/main/Main.daml @@ -0,0 +1,20 @@ +-- Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. +-- SPDX-License-Identifier: Apache-2.0 + +module Main where + +import qualified Dep + +template MainData with + mainParty: Party + value: Int + dep: ContractId Dep.DepData + where + signatory mainParty + + choice Consume : Int + controller mainParty + do + depValue <- exercise dep Dep.Consume + pure (value * depValue) + diff --git a/sdk/compatibility/bazel_tools/data_dependencies/codegen_test/openapi.yaml b/sdk/compatibility/bazel_tools/data_dependencies/codegen_test/openapi.yaml new file mode 100644 index 000000000000..27bc9e20e01e --- /dev/null +++ b/sdk/compatibility/bazel_tools/data_dependencies/codegen_test/openapi.yaml @@ -0,0 +1,7322 @@ +# Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +openapi: 3.0.3 +info: + title: JSON Ledger API HTTP endpoints + version: 3.5.0-SNAPSHOT +paths: + /v2/commands/submit-and-wait: + post: + description: Submit a batch of commands and wait for the completion details + operationId: postV2CommandsSubmit-and-wait + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JsCommands' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/SubmitAndWaitResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/commands/submit-and-wait-for-transaction: + post: + description: Submit a batch of commands and wait for the transaction response + operationId: postV2CommandsSubmit-and-wait-for-transaction + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JsSubmitAndWaitForTransactionRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsSubmitAndWaitForTransactionResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/commands/submit-and-wait-for-reassignment: + post: + description: Submit a batch of reassignment commands and wait for the reassignment + response + operationId: postV2CommandsSubmit-and-wait-for-reassignment + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SubmitAndWaitForReassignmentRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsSubmitAndWaitForReassignmentResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/commands/submit-and-wait-for-transaction-tree: + post: + description: Submit a batch of commands and wait for the transaction trees response. + Provided for backwards compatibility, it will be removed in the Canton version + 3.5.0, use submit-and-wait-for-transaction instead. + operationId: postV2CommandsSubmit-and-wait-for-transaction-tree + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JsCommands' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsSubmitAndWaitForTransactionTreeResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + deprecated: true + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/commands/async/submit: + post: + description: Submit a command asynchronously + operationId: postV2CommandsAsyncSubmit + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JsCommands' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/SubmitResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/commands/async/submit-reassignment: + post: + description: Submit reassignment command asynchronously + operationId: postV2CommandsAsyncSubmit-reassignment + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SubmitReassignmentRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/SubmitReassignmentResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/commands/completions: + post: + description: |- + Query completions list (blocking call) + Notice: This endpoint should be used for small results set. + When number of results exceeded node configuration limit (`http-list-max-elements-limit`) + there will be an error (`413 Content Too Large`) returned. + Increasing this limit may lead to performance issues and high memory consumption. + Consider using websockets (asyncapi) for better efficiency with larger results. + operationId: postV2CommandsCompletions + parameters: + - name: limit + in: query + description: maximum number of elements to return, this param is ignored if + is bigger than server setting + required: false + schema: + type: integer + format: int64 + - name: stream_idle_timeout_ms + in: query + description: timeout to complete and send result if no new elements are received + (for open ended streams) + required: false + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CompletionStreamRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/CompletionStreamResponse' + '400': + description: 'Invalid value for: body, Invalid value for: query parameter + limit, Invalid value for: query parameter stream_idle_timeout_ms, Invalid + value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/events/events-by-contract-id: + post: + description: Get events by contract Id + operationId: postV2EventsEvents-by-contract-id + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventsByContractIdRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsGetEventsByContractIdResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/version: + get: + description: Get the version details of the participant node + operationId: getV2Version + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/GetLedgerApiVersionResponse' + '400': + description: 'Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/dars/validate: + post: + description: Validates a DAR for upgrade-compatibility against the current vetting + state on the target synchronizer + operationId: postV2DarsValidate + parameters: + - name: synchronizerId + in: query + required: false + schema: + type: string + requestBody: + content: + application/octet-stream: + schema: + type: string + format: binary + required: true + responses: + '200': + description: '' + '400': + description: 'Invalid value for: body, Invalid value for: query parameter + synchronizerId, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/dars: + post: + description: Upload a DAR to the participant node + operationId: postV2Dars + parameters: + - name: vetAllPackages + in: query + required: false + schema: + type: boolean + - name: synchronizerId + in: query + required: false + schema: + type: string + requestBody: + content: + application/octet-stream: + schema: + type: string + format: binary + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/UploadDarFileResponse' + '400': + description: 'Invalid value for: body, Invalid value for: query parameter + vetAllPackages, Invalid value for: query parameter synchronizerId, Invalid + value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/packages: + get: + description: List all packages uploaded on the participant node + operationId: getV2Packages + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ListPackagesResponse' + '400': + description: 'Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + post: + description: Upload a DAR to the participant node. Behaves the same as /dars. + This endpoint will be deprecated and removed in a future release. + operationId: postV2Packages + parameters: + - name: vetAllPackages + in: query + required: false + schema: + type: boolean + - name: synchronizerId + in: query + required: false + schema: + type: string + requestBody: + content: + application/octet-stream: + schema: + type: string + format: binary + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/UploadDarFileResponse' + '400': + description: 'Invalid value for: body, Invalid value for: query parameter + vetAllPackages, Invalid value for: query parameter synchronizerId, Invalid + value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/packages/{package-id}: + get: + description: Download the package for the requested package-id + operationId: getV2PackagesPackage-id + parameters: + - name: package-id + in: path + required: true + schema: + type: string + responses: + '200': + description: '' + headers: + Canton-Package-Hash: + required: true + schema: + type: string + content: + application/octet-stream: + schema: + type: string + format: binary + '400': + description: 'Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/packages/{package-id}/status: + get: + description: Get package status + operationId: getV2PackagesPackage-idStatus + parameters: + - name: package-id + in: path + required: true + schema: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/GetPackageStatusResponse' + '400': + description: 'Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/package-vetting: + get: + description: List vetted packages + operationId: getV2Package-vetting + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ListVettedPackagesRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ListVettedPackagesResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + post: + description: Update vetted packages + operationId: postV2Package-vetting + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateVettedPackagesRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateVettedPackagesResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/parties: + get: + description: List all known parties. + operationId: getV2Parties + parameters: + - name: pageSize + in: query + description: maximum number of elements in a returned page + required: false + schema: + type: integer + format: int32 + - name: pageToken + in: query + description: token - to continue results from a given page, leave empty to + start from the beginning of the list, obtain token from the result of previous + page + required: false + schema: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ListKnownPartiesResponse' + '400': + description: 'Invalid value for: query parameter pageSize, Invalid value + for: query parameter pageToken, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + post: + description: Allocate a new party to the participant node + operationId: postV2Parties + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AllocatePartyRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/AllocatePartyResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/parties/external/allocate: + post: + description: Allocate a new external party + operationId: postV2PartiesExternalAllocate + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AllocateExternalPartyRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/AllocateExternalPartyResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/parties/participant-id: + get: + description: Get participant id + operationId: getV2PartiesParticipant-id + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/GetParticipantIdResponse' + '400': + description: 'Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/parties/{party}: + get: + description: Get party details + operationId: getV2PartiesParty + parameters: + - name: party + in: path + required: true + schema: + type: string + - name: identity-provider-id + in: query + required: false + schema: + type: string + - name: parties + in: query + required: false + schema: + type: array + items: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/GetPartiesResponse' + '400': + description: 'Invalid value for: query parameter identity-provider-id, Invalid + value for: query parameter parties, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + patch: + description: Allocate a new party to the participant node + operationId: patchV2PartiesParty + parameters: + - name: party + in: path + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdatePartyDetailsRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/UpdatePartyDetailsResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/parties/external/generate-topology: + post: + description: Generate a topology for an external party + operationId: postV2PartiesExternalGenerate-topology + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GenerateExternalPartyTopologyRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/GenerateExternalPartyTopologyResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/state/active-contracts: + post: + description: |- + Query active contracts list (blocking call). + Querying active contracts is an expensive operation and if possible should not be repeated often. + Consider querying active contracts initially (for a given offset) + and then repeatedly call one of `/v2/updates/...`endpoints to get subsequent modifications. + You can also use websockets to get updates with better performance. + + Notice: This endpoint should be used for small results set. + When number of results exceeded node configuration limit (`http-list-max-elements-limit`) + there will be an error (`413 Content Too Large`) returned. + Increasing this limit may lead to performance issues and high memory consumption. + Consider using websockets (asyncapi) for better efficiency with larger results. + operationId: postV2StateActive-contracts + parameters: + - name: limit + in: query + description: maximum number of elements to return, this param is ignored if + is bigger than server setting + required: false + schema: + type: integer + format: int64 + - name: stream_idle_timeout_ms + in: query + description: timeout to complete and send result if no new elements are received + (for open ended streams) + required: false + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GetActiveContractsRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/JsGetActiveContractsResponse' + '400': + description: 'Invalid value for: body, Invalid value for: query parameter + limit, Invalid value for: query parameter stream_idle_timeout_ms, Invalid + value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/state/connected-synchronizers: + get: + description: Get connected synchronizers + operationId: getV2StateConnected-synchronizers + parameters: + - name: party + in: query + required: false + schema: + type: string + - name: participantId + in: query + required: false + schema: + type: string + - name: identityProviderId + in: query + required: false + schema: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/GetConnectedSynchronizersResponse' + '400': + description: 'Invalid value for: query parameter party, Invalid value for: + query parameter participantId, Invalid value for: query parameter identityProviderId, + Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/state/ledger-end: + get: + description: Get ledger end + operationId: getV2StateLedger-end + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/GetLedgerEndResponse' + '400': + description: 'Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/state/latest-pruned-offsets: + get: + description: Get latest pruned offsets + operationId: getV2StateLatest-pruned-offsets + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/GetLatestPrunedOffsetsResponse' + '400': + description: 'Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/updates: + post: + description: |- + Query updates list (blocking call) + Notice: This endpoint should be used for small results set. + When number of results exceeded node configuration limit (`http-list-max-elements-limit`) + there will be an error (`413 Content Too Large`) returned. + Increasing this limit may lead to performance issues and high memory consumption. + Consider using websockets (asyncapi) for better efficiency with larger results. + operationId: postV2Updates + parameters: + - name: limit + in: query + description: maximum number of elements to return, this param is ignored if + is bigger than server setting + required: false + schema: + type: integer + format: int64 + - name: stream_idle_timeout_ms + in: query + description: timeout to complete and send result if no new elements are received + (for open ended streams) + required: false + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GetUpdatesRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/JsGetUpdatesResponse' + '400': + description: 'Invalid value for: body, Invalid value for: query parameter + limit, Invalid value for: query parameter stream_idle_timeout_ms, Invalid + value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/updates/flats: + post: + description: |- + Query flat transactions update list (blocking call). Provided for backwards compatibility, it will be removed in the Canton version 3.5.0, use v2/updates instead. + Notice: This endpoint should be used for small results set. + When number of results exceeded node configuration limit (`http-list-max-elements-limit`) + there will be an error (`413 Content Too Large`) returned. + Increasing this limit may lead to performance issues and high memory consumption. + Consider using websockets (asyncapi) for better efficiency with larger results. + operationId: postV2UpdatesFlats + parameters: + - name: limit + in: query + description: maximum number of elements to return, this param is ignored if + is bigger than server setting + required: false + schema: + type: integer + format: int64 + - name: stream_idle_timeout_ms + in: query + description: timeout to complete and send result if no new elements are received + (for open ended streams) + required: false + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GetUpdatesRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/JsGetUpdatesResponse' + '400': + description: 'Invalid value for: body, Invalid value for: query parameter + limit, Invalid value for: query parameter stream_idle_timeout_ms, Invalid + value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + deprecated: true + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/updates/trees: + post: + description: |- + Query update transactions tree list (blocking call). Provided for backwards compatibility, it will be removed in the Canton version 3.5.0, use v2/updates instead. + Notice: This endpoint should be used for small results set. + When number of results exceeded node configuration limit (`http-list-max-elements-limit`) + there will be an error (`413 Content Too Large`) returned. + Increasing this limit may lead to performance issues and high memory consumption. + Consider using websockets (asyncapi) for better efficiency with larger results. + operationId: postV2UpdatesTrees + parameters: + - name: limit + in: query + description: maximum number of elements to return, this param is ignored if + is bigger than server setting + required: false + schema: + type: integer + format: int64 + - name: stream_idle_timeout_ms + in: query + description: timeout to complete and send result if no new elements are received + (for open ended streams) + required: false + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GetUpdatesRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/JsGetUpdateTreesResponse' + '400': + description: 'Invalid value for: body, Invalid value for: query parameter + limit, Invalid value for: query parameter stream_idle_timeout_ms, Invalid + value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + deprecated: true + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/updates/transaction-tree-by-offset/{offset}: + get: + description: Get transaction tree by offset. Provided for backwards compatibility, + it will be removed in the Canton version 3.5.0, use v2/updates/update-by-offset + instead. + operationId: getV2UpdatesTransaction-tree-by-offsetOffset + parameters: + - name: offset + in: path + required: true + schema: + type: integer + format: int64 + - name: parties + in: query + required: false + schema: + type: array + items: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsGetTransactionTreeResponse' + '400': + description: 'Invalid value for: path parameter offset, Invalid value for: + query parameter parties, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + deprecated: true + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/updates/transaction-by-offset: + post: + description: Get transaction by offset. Provided for backwards compatibility, + it will be removed in the Canton version 3.5.0, use v2/updates/update-by-offset + instead. + operationId: postV2UpdatesTransaction-by-offset + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GetTransactionByOffsetRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsGetTransactionResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + deprecated: true + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/updates/update-by-offset: + post: + description: Get update by offset + operationId: postV2UpdatesUpdate-by-offset + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GetUpdateByOffsetRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsGetUpdateResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/updates/transaction-by-id: + post: + description: Get transaction by id. Provided for backwards compatibility, it + will be removed in the Canton version 3.5.0, use v2/updates/update-by-id instead. + operationId: postV2UpdatesTransaction-by-id + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GetTransactionByIdRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsGetTransactionResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + deprecated: true + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/updates/update-by-id: + post: + description: Get update by id + operationId: postV2UpdatesUpdate-by-id + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GetUpdateByIdRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsGetUpdateResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/updates/transaction-tree-by-id/{update-id}: + get: + description: Get transaction tree by id. Provided for backwards compatibility, + it will be removed in the Canton version 3.5.0, use v2/updates/update-by-id + instead. + operationId: getV2UpdatesTransaction-tree-by-idUpdate-id + parameters: + - name: update-id + in: path + required: true + schema: + type: string + - name: parties + in: query + required: false + schema: + type: array + items: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsGetTransactionTreeResponse' + '400': + description: 'Invalid value for: query parameter parties, Invalid value + for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + deprecated: true + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/users: + get: + description: List all users. + operationId: getV2Users + parameters: + - name: pageSize + in: query + description: maximum number of elements in a returned page + required: false + schema: + type: integer + format: int32 + - name: pageToken + in: query + description: token - to continue results from a given page, leave empty to + start from the beginning of the list, obtain token from the result of previous + page + required: false + schema: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ListUsersResponse' + '400': + description: 'Invalid value for: query parameter pageSize, Invalid value + for: query parameter pageToken, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + post: + description: Create user. + operationId: postV2Users + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateUserRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/CreateUserResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/users/{user-id}: + get: + description: Get user details. + operationId: getV2UsersUser-id + parameters: + - name: user-id + in: path + required: true + schema: + type: string + - name: identity-provider-id + in: query + required: false + schema: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/GetUserResponse' + '400': + description: 'Invalid value for: query parameter identity-provider-id, Invalid + value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + delete: + description: Delete user. + operationId: deleteV2UsersUser-id + parameters: + - name: user-id + in: path + required: true + schema: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + type: object + '400': + description: 'Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + patch: + description: Update user. + operationId: patchV2UsersUser-id + parameters: + - name: user-id + in: path + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateUserRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateUserResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/authenticated-user: + get: + description: Get current user details (uses user for JWT). + operationId: getV2Authenticated-user + parameters: + - name: identity-provider-id + in: query + required: false + schema: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/GetUserResponse' + '400': + description: 'Invalid value for: query parameter identity-provider-id, Invalid + value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/users/{user-id}/rights: + get: + description: List user rights. + operationId: getV2UsersUser-idRights + parameters: + - name: user-id + in: path + required: true + schema: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ListUserRightsResponse' + '400': + description: 'Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + post: + description: Grant user rights. + operationId: postV2UsersUser-idRights + parameters: + - name: user-id + in: path + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GrantUserRightsRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/GrantUserRightsResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + patch: + description: Revoke user rights. + operationId: patchV2UsersUser-idRights + parameters: + - name: user-id + in: path + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RevokeUserRightsRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/RevokeUserRightsResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/users/{user-id}/identity-provider-id: + patch: + description: Update user identity provider. + operationId: patchV2UsersUser-idIdentity-provider-id + parameters: + - name: user-id + in: path + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateUserIdentityProviderIdRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateUserIdentityProviderIdResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/idps: + get: + description: List all identity provider configs + operationId: getV2Idps + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ListIdentityProviderConfigsResponse' + '400': + description: 'Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + post: + description: Create identity provider configs + operationId: postV2Idps + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateIdentityProviderConfigRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/CreateIdentityProviderConfigResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/idps/{idp-id}: + get: + description: Get identity provider config + operationId: getV2IdpsIdp-id + parameters: + - name: idp-id + in: path + required: true + schema: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/GetIdentityProviderConfigResponse' + '400': + description: 'Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + delete: + description: Delete identity provider config + operationId: deleteV2IdpsIdp-id + parameters: + - name: idp-id + in: path + required: true + schema: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/DeleteIdentityProviderConfigResponse' + '400': + description: 'Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + patch: + description: Update identity provider config + operationId: patchV2IdpsIdp-id + parameters: + - name: idp-id + in: path + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateIdentityProviderConfigRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateIdentityProviderConfigResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/interactive-submission/prepare: + post: + description: Prepare commands for signing + operationId: postV2Interactive-submissionPrepare + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JsPrepareSubmissionRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsPrepareSubmissionResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/interactive-submission/execute: + post: + description: Execute a signed transaction + operationId: postV2Interactive-submissionExecute + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JsExecuteSubmissionRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ExecuteSubmissionResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/interactive-submission/executeAndWait: + post: + description: Execute a signed transaction and wait for its completion + operationId: postV2Interactive-submissionExecuteandwait + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JsExecuteSubmissionAndWaitRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ExecuteSubmissionAndWaitResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/interactive-submission/executeAndWaitForTransaction: + post: + description: Execute a signed transaction and wait for the transaction response + operationId: postV2Interactive-submissionExecuteandwaitfortransaction + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JsExecuteSubmissionAndWaitForTransactionRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsExecuteSubmissionAndWaitForTransactionResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/interactive-submission/preferred-package-version: + get: + description: Get the preferred package version for constructing a command submission + operationId: getV2Interactive-submissionPreferred-package-version + parameters: + - name: parties + in: query + required: false + schema: + type: array + items: + type: string + - name: package-name + in: query + required: true + schema: + type: string + - name: vetting_valid_at + in: query + required: false + schema: + type: string + format: date-time + - name: synchronizer-id + in: query + required: false + schema: + type: string + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/GetPreferredPackageVersionResponse' + '400': + description: 'Invalid value for: query parameter parties, Invalid value + for: query parameter package-name, Invalid value for: query parameter + vetting_valid_at, Invalid value for: query parameter synchronizer-id, + Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] + /v2/interactive-submission/preferred-packages: + post: + description: Get the version of preferred packages for constructing a command + submission + operationId: postV2Interactive-submissionPreferred-packages + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GetPreferredPackagesRequest' + required: true + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/GetPreferredPackagesResponse' + '400': + description: 'Invalid value for: body, Invalid value for: headers' + content: + text/plain: + schema: + type: string + default: + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/JsCantonError' + security: + - httpAuth: [] + - apiKeyAuth: [] +components: + schemas: + AllocateExternalPartyRequest: + title: AllocateExternalPartyRequest + description: 'Required authorization: ``HasRight(ParticipantAdmin) OR IsAuthenticatedIdentityProviderAdmin(identity_provider_id)``' + type: object + required: + - synchronizer + - identityProviderId + properties: + synchronizer: + description: |- + TODO(#27670) support synchronizer aliases + Synchronizer ID on which to onboard the party + Required + type: string + onboardingTransactions: + description: |- + TopologyTransactions to onboard the external party + Can contain: + - A namespace for the party. + This can be either a single NamespaceDelegation, + or DecentralizedNamespaceDefinition along with its authorized namespace owners in the form of NamespaceDelegations. + May be provided, if so it must be fully authorized by the signatures in this request combined with the existing topology state. + - A PartyToKeyMapping to register the party's signing keys. + May be provided, if so it must be fully authorized by the signatures in this request combined with the existing topology state. + - A PartyToParticipant to register the hosting relationship of the party. + Must be provided. + Required + type: array + items: + $ref: '#/components/schemas/SignedTransaction' + multiHashSignatures: + description: |- + Optional signatures of the combined hash of all onboarding_transactions + This may be used instead of providing signatures on each individual transaction + type: array + items: + $ref: '#/components/schemas/Signature' + identityProviderId: + description: |- + The id of the ``Identity Provider`` + If not set, assume the party is managed by the default identity provider. + Optional + type: string + AllocateExternalPartyResponse: + title: AllocateExternalPartyResponse + type: object + required: + - partyId + properties: + partyId: + description: '' + type: string + AllocatePartyRequest: + title: AllocatePartyRequest + description: 'Required authorization: ``HasRight(ParticipantAdmin) OR IsAuthenticatedIdentityProviderAdmin(identity_provider_id)``' + type: object + required: + - partyIdHint + - identityProviderId + - synchronizerId + - userId + properties: + partyIdHint: + description: |- + A hint to the participant which party ID to allocate. It can be + ignored. + Must be a valid PartyIdString (as described in ``value.proto``). + Optional + type: string + localMetadata: + $ref: '#/components/schemas/ObjectMeta' + description: |- + Formerly "display_name" + Participant-local metadata to be stored in the ``PartyDetails`` of this newly allocated party. + Optional + identityProviderId: + description: |- + The id of the ``Identity Provider`` + Optional, if not set, assume the party is managed by the default identity provider or party is not hosted by the participant. + type: string + synchronizerId: + description: |- + The synchronizer, on which the party should be allocated. + For backwards compatibility, this field may be omitted, if the participant is connected to only one synchronizer. + Otherwise a synchronizer must be specified. + Optional + type: string + userId: + description: |- + The user who will get the act_as rights to the newly allocated party. + If set to an empty string (the default), no user will get rights to the party. + Optional + type: string + AllocatePartyResponse: + title: AllocatePartyResponse + type: object + properties: + partyDetails: + $ref: '#/components/schemas/PartyDetails' + description: '' + ArchivedEvent: + title: ArchivedEvent + description: Records that a contract has been archived, and choices may no longer + be exercised on it. + type: object + required: + - offset + - nodeId + - contractId + - templateId + - packageName + properties: + offset: + description: |- + The offset of origin. + Offsets are managed by the participant nodes. + Transactions can thus NOT be assumed to have the same offsets on different participant nodes. + Required, it is a valid absolute offset (positive integer) + type: integer + format: int64 + nodeId: + description: |- + The position of this event in the originating transaction or reassignment. + Node IDs are not necessarily equal across participants, + as these may see different projections/parts of transactions. + Required, must be valid node ID (non-negative integer) + type: integer + format: int32 + contractId: + description: |- + The ID of the archived contract. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + templateId: + description: |- + Identifies the template that defines the choice that archived the contract. + This template's package-id may differ from the target contract's package-id + if the target contract has been upgraded or downgraded. + + The identifier uses the package-id reference format. + + Required + type: string + witnessParties: + description: |- + The parties that are notified of this event. For an ``ArchivedEvent``, + these are the intersection of the stakeholders of the contract in + question and the parties specified in the ``TransactionFilter``. The + stakeholders are the union of the signatories and the observers of + the contract. + Each one of its elements must be a valid PartyIdString (as described + in ``value.proto``). + Required + type: array + items: + type: string + packageName: + description: |- + The package name of the contract. + Required + type: string + implementedInterfaces: + description: |- + The interfaces implemented by the target template that have been + matched from the interface filter query. + Populated only in case interface filters with include_interface_view set. + + If defined, the identifier uses the package-id reference format. + + Optional + type: array + items: + type: string + AssignCommand: + title: AssignCommand + description: Assign a contract + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/AssignCommand1' + AssignCommand1: + title: AssignCommand + description: Assign a contract + type: object + required: + - reassignmentId + - source + - target + properties: + reassignmentId: + description: |- + The ID from the unassigned event to be completed by this assignment. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + source: + description: |- + The ID of the source synchronizer + Must be a valid synchronizer id + Required + type: string + target: + description: |- + The ID of the target synchronizer + Must be a valid synchronizer id + Required + type: string + CanActAs: + title: CanActAs + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/CanActAs1' + CanActAs1: + title: CanActAs + type: object + required: + - party + properties: + party: + type: string + CanExecuteAs: + title: CanExecuteAs + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/CanExecuteAs1' + CanExecuteAs1: + title: CanExecuteAs + type: object + required: + - party + properties: + party: + type: string + CanExecuteAsAnyParty: + title: CanExecuteAsAnyParty + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/CanExecuteAsAnyParty1' + CanExecuteAsAnyParty1: + title: CanExecuteAsAnyParty + type: object + CanReadAs: + title: CanReadAs + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/CanReadAs1' + CanReadAs1: + title: CanReadAs + type: object + required: + - party + properties: + party: + type: string + CanReadAsAnyParty: + title: CanReadAsAnyParty + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/CanReadAsAnyParty1' + CanReadAsAnyParty1: + title: CanReadAsAnyParty + type: object + Command: + title: Command + description: A command can either create a new contract or exercise a choice + on an existing contract. + oneOf: + - type: object + required: + - CreateAndExerciseCommand + properties: + CreateAndExerciseCommand: + $ref: '#/components/schemas/CreateAndExerciseCommand' + - type: object + required: + - CreateCommand + properties: + CreateCommand: + $ref: '#/components/schemas/CreateCommand' + - type: object + required: + - ExerciseByKeyCommand + properties: + ExerciseByKeyCommand: + $ref: '#/components/schemas/ExerciseByKeyCommand' + - type: object + required: + - ExerciseCommand + properties: + ExerciseCommand: + $ref: '#/components/schemas/ExerciseCommand' + Command1: + title: Command + description: A command can either create a new contract or exercise a choice + on an existing contract. + oneOf: + - type: object + required: + - AssignCommand + properties: + AssignCommand: + $ref: '#/components/schemas/AssignCommand' + - type: object + required: + - Empty + properties: + Empty: + $ref: '#/components/schemas/Empty2' + - type: object + required: + - UnassignCommand + properties: + UnassignCommand: + $ref: '#/components/schemas/UnassignCommand' + Completion: + title: Completion + description: 'A completion represents the status of a submitted command on the + ledger: it can be successful or failed.' + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/Completion1' + Completion1: + title: Completion + description: 'A completion represents the status of a submitted command on the + ledger: it can be successful or failed.' + type: object + required: + - commandId + - updateId + - userId + - submissionId + - deduplicationPeriod + - offset + properties: + commandId: + description: |- + The ID of the succeeded or failed command. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + status: + $ref: '#/components/schemas/JsStatus' + description: |- + Identifies the exact type of the error. + It uses the same format of conveying error details as it is used for the RPC responses of the APIs. + Optional + updateId: + description: |- + The update_id of the transaction or reassignment that resulted from the command with command_id. + Only set for successfully executed commands. + Must be a valid LedgerString (as described in ``value.proto``). + type: string + userId: + description: |- + The user-id that was used for the submission, as described in ``commands.proto``. + Must be a valid UserIdString (as described in ``value.proto``). + Optional for historic completions where this data is not available. + type: string + actAs: + description: |- + The set of parties on whose behalf the commands were executed. + Contains the ``act_as`` parties from ``commands.proto`` + filtered to the requesting parties in CompletionStreamRequest. + The order of the parties need not be the same as in the submission. + Each element must be a valid PartyIdString (as described in ``value.proto``). + Optional for historic completions where this data is not available. + type: array + items: + type: string + submissionId: + description: |- + The submission ID this completion refers to, as described in ``commands.proto``. + Must be a valid LedgerString (as described in ``value.proto``). + Optional + type: string + deduplicationPeriod: + $ref: '#/components/schemas/DeduplicationPeriod1' + traceContext: + $ref: '#/components/schemas/TraceContext' + description: |- + Optional; ledger API trace context + + The trace context transported in this message corresponds to the trace context supplied + by the client application in a HTTP2 header of the original command submission. + We typically use a header to transfer this type of information. Here we use message + body, because it is used in gRPC streams which do not support per message headers. + This field will be populated with the trace context contained in the original submission. + If that was not provided, a unique ledger-api-server generated trace context will be used + instead. + offset: + description: |- + May be used in a subsequent CompletionStreamRequest to resume the consumption of this stream at a later time. + Required, must be a valid absolute offset (positive integer). + type: integer + format: int64 + synchronizerTime: + $ref: '#/components/schemas/SynchronizerTime' + description: |- + The synchronizer along with its record time. + The synchronizer id provided, in case of + + - successful/failed transactions: identifies the synchronizer of the transaction + - for successful/failed unassign commands: identifies the source synchronizer + - for successful/failed assign commands: identifies the target synchronizer + + Required + CompletionResponse: + title: CompletionResponse + oneOf: + - type: object + required: + - Completion + properties: + Completion: + $ref: '#/components/schemas/Completion' + - type: object + required: + - Empty + properties: + Empty: + $ref: '#/components/schemas/Empty4' + - type: object + required: + - OffsetCheckpoint + properties: + OffsetCheckpoint: + $ref: '#/components/schemas/OffsetCheckpoint' + CompletionStreamRequest: + title: CompletionStreamRequest + type: object + required: + - userId + - beginExclusive + properties: + userId: + description: |- + Only completions of commands submitted with the same user_id will be visible in the stream. + Must be a valid UserIdString (as described in ``value.proto``). + Required unless authentication is used with a user token. + In that case, the token's user-id will be used for the request's user_id. + type: string + parties: + description: |- + Non-empty list of parties whose data should be included. + The stream shows only completions of commands for which at least one of the ``act_as`` parties is in the given set of parties. + Must be a valid PartyIdString (as described in ``value.proto``). + Required + type: array + items: + type: string + beginExclusive: + description: |- + This optional field indicates the minimum offset for completions. This can be used to resume an earlier completion stream. + If not set the ledger uses the ledger begin offset instead. + If specified, it must be a valid absolute offset (positive integer) or zero (ledger begin offset). + If the ledger has been pruned, this parameter must be specified and greater than the pruning offset. + type: integer + format: int64 + CompletionStreamResponse: + title: CompletionStreamResponse + type: object + required: + - completionResponse + properties: + completionResponse: + $ref: '#/components/schemas/CompletionResponse' + ConnectedSynchronizer: + title: ConnectedSynchronizer + type: object + required: + - synchronizerAlias + - synchronizerId + - permission + properties: + synchronizerAlias: + type: string + synchronizerId: + type: string + permission: + type: string + enum: + - PARTICIPANT_PERMISSION_UNSPECIFIED + - PARTICIPANT_PERMISSION_SUBMISSION + - PARTICIPANT_PERMISSION_CONFIRMATION + - PARTICIPANT_PERMISSION_OBSERVATION + CostEstimation: + title: CostEstimation + description: |- + Estimation of the cost of submitting the prepared transaction + The estimation is done against the synchronizer chosen during preparation of the transaction + (or the one explicitly requested). + The cost of re-assigning contracts to another synchronizer when necessary is not included in the estimation. + type: object + required: + - confirmationRequestTrafficCostEstimation + - confirmationResponseTrafficCostEstimation + - totalTrafficCostEstimation + properties: + estimationTimestamp: + description: Timestamp at which the estimation was made + type: string + confirmationRequestTrafficCostEstimation: + description: Estimated traffic cost of the confirmation request associated + with the transaction + type: integer + format: int64 + confirmationResponseTrafficCostEstimation: + description: |- + Estimated traffic cost of the confirmation response associated with the transaction + This field can also be used as an indication of the cost that other potential confirming nodes + of the party will incur to approve or reject the transaction + type: integer + format: int64 + totalTrafficCostEstimation: + description: Sum of the fields above + type: integer + format: int64 + CostEstimationHints: + title: CostEstimationHints + description: Hints to improve cost estimation precision of a prepared transaction + type: object + required: + - disabled + properties: + disabled: + description: |- + Disable cost estimation + Default (not set) is false + type: boolean + expectedSignatures: + description: |- + Details on the keys that will be used to sign the transaction (how many and of which type). + Signature size impacts the cost of the transaction. + If empty, the signature sizes will be approximated with threshold-many signatures (where threshold is defined + in the PartyToKeyMapping of the external party), using keys in the order they are registered. + Optional (empty list is equivalent to not providing this field) + type: array + items: + type: string + enum: + - SIGNING_ALGORITHM_SPEC_UNSPECIFIED + - SIGNING_ALGORITHM_SPEC_ED25519 + - SIGNING_ALGORITHM_SPEC_EC_DSA_SHA_256 + - SIGNING_ALGORITHM_SPEC_EC_DSA_SHA_384 + CreateAndExerciseCommand: + title: CreateAndExerciseCommand + description: Create a contract and exercise a choice on it in the same transaction. + type: object + required: + - templateId + - createArguments + - choice + - choiceArgument + properties: + templateId: + description: |- + The template of the contract the client wants to create. + Both package-name and package-id reference identifier formats for the template-id are supported. + Note: The package-id reference identifier format is deprecated. We plan to end support for this format in version 3.4. + + Required + type: string + createArguments: + description: |- + The arguments required for creating a contract from this template. + Required + choice: + description: |- + The name of the choice the client wants to exercise. + Must be a valid NameString (as described in ``value.proto``). + Required + type: string + choiceArgument: + description: |- + The argument for this choice. + Required + CreateCommand: + title: CreateCommand + description: Create a new contract instance based on a template. + type: object + required: + - templateId + - createArguments + properties: + templateId: + description: |- + The template of contract the client wants to create. + Both package-name and package-id reference identifier formats for the template-id are supported. + Note: The package-id reference identifier format is deprecated. We plan to end support for this format in version 3.4. + + Required + type: string + createArguments: + description: |- + The arguments required for creating a contract from this template. + Required + CreateIdentityProviderConfigRequest: + title: CreateIdentityProviderConfigRequest + type: object + properties: + identityProviderConfig: + $ref: '#/components/schemas/IdentityProviderConfig' + description: Required + CreateIdentityProviderConfigResponse: + title: CreateIdentityProviderConfigResponse + type: object + properties: + identityProviderConfig: + $ref: '#/components/schemas/IdentityProviderConfig' + description: '' + CreateUserRequest: + title: CreateUserRequest + description: |2- + RPC requests and responses + /////////////////////////// + Required authorization: ``HasRight(ParticipantAdmin) OR IsAuthenticatedIdentityProviderAdmin(user.identity_provider_id)`` + type: object + properties: + user: + $ref: '#/components/schemas/User' + description: |- + The user to create. + Required + rights: + description: |- + The rights to be assigned to the user upon creation, + which SHOULD include appropriate rights for the ``user.primary_party``. + Optional + type: array + items: + $ref: '#/components/schemas/Right' + CreateUserResponse: + title: CreateUserResponse + type: object + properties: + user: + $ref: '#/components/schemas/User' + description: Created user. + CreatedEvent: + title: CreatedEvent + description: Records that a contract has been created, and choices may now be + exercised on it. + type: object + required: + - offset + - nodeId + - contractId + - templateId + - createdEventBlob + - createdAt + - packageName + - representativePackageId + - acsDelta + properties: + offset: + description: |- + The offset of origin, which has contextual meaning, please see description at messages that include a CreatedEvent. + Offsets are managed by the participant nodes. + Transactions can thus NOT be assumed to have the same offsets on different participant nodes. + Required, it is a valid absolute offset (positive integer) + type: integer + format: int64 + nodeId: + description: |- + The position of this event in the originating transaction or reassignment. + The origin has contextual meaning, please see description at messages that include a CreatedEvent. + Node IDs are not necessarily equal across participants, + as these may see different projections/parts of transactions. + Required, must be valid node ID (non-negative integer) + type: integer + format: int32 + contractId: + description: |- + The ID of the created contract. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + templateId: + description: |- + The template of the created contract. + The identifier uses the package-id reference format. + + Required + type: string + contractKey: + description: |- + The key of the created contract. + This will be set if and only if ``template_id`` defines a contract key. + Optional + createArgument: {} + createdEventBlob: + description: |- + Opaque representation of contract create event payload intended for forwarding + to an API server as a contract disclosed as part of a command + submission. + Optional + type: string + interfaceViews: + description: |- + Interface views specified in the transaction filter. + Includes an ``InterfaceView`` for each interface for which there is a ``InterfaceFilter`` with + + - its party in the ``witness_parties`` of this event, + - and which is implemented by the template of this event, + - and which has ``include_interface_view`` set. + + Optional + type: array + items: + $ref: '#/components/schemas/JsInterfaceView' + witnessParties: + description: |- + The parties that are notified of this event. When a ``CreatedEvent`` + is returned as part of a transaction tree or ledger-effects transaction, this will include all + the parties specified in the ``TransactionFilter`` that are witnesses of the event + (the stakeholders of the contract and all informees of all the ancestors + of this create action that this participant knows about). + If served as part of a ACS delta transaction those will + be limited to all parties specified in the ``TransactionFilter`` that + are stakeholders of the contract (i.e. either signatories or observers). + If the ``CreatedEvent`` is returned as part of an AssignedEvent, + ActiveContract or IncompleteUnassigned (so the event is related to + an assignment or unassignment): this will include all parties of the + ``TransactionFilter`` that are stakeholders of the contract. + + The behavior of reading create events visible to parties not hosted + on the participant node serving the Ledger API is undefined. Concretely, + there is neither a guarantee that the participant node will serve all their + create events on the ACS stream, nor is there a guarantee that matching archive + events are delivered for such create events. + + For most clients this is not a problem, as they only read events for parties + that are hosted on the participant node. If you need to read events + for parties that may not be hosted at all times on the participant node, + subscribe to the ``TopologyEvent``s for that party by setting a corresponding + ``UpdateFormat``. Using these events, query the ACS as-of an offset where the + party is hosted on the participant node, and ignore create events at offsets + where the party is not hosted on the participant node. + Required + type: array + items: + type: string + signatories: + description: |- + The signatories for this contract as specified by the template. + Required + type: array + items: + type: string + observers: + description: |- + The observers for this contract as specified explicitly by the template or implicitly as choice controllers. + This field never contains parties that are signatories. + Required + type: array + items: + type: string + createdAt: + description: |- + Ledger effective time of the transaction that created the contract. + Required + type: string + packageName: + description: |- + The package name of the created contract. + Required + type: string + representativePackageId: + description: |- + A package-id present in the participant package store that typechecks the contract's argument. + This may differ from the package-id of the template used to create the contract. + For contracts created before Canton 3.4, this field matches the contract's creation package-id. + + NOTE: Experimental, server internal concept, not for client consumption. Subject to change without notice. + + Required + type: string + acsDelta: + description: |- + Whether this event would be part of respective ACS_DELTA shaped stream, + and should therefore considered when tracking contract activeness on the client-side. + Required + type: boolean + CreatedTreeEvent: + title: CreatedTreeEvent + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/CreatedEvent' + CumulativeFilter: + title: CumulativeFilter + description: |- + A filter that matches all contracts that are either an instance of one of + the ``template_filters`` or that match one of the ``interface_filters``. + type: object + required: + - identifierFilter + properties: + identifierFilter: + $ref: '#/components/schemas/IdentifierFilter' + DeduplicationDuration: + title: DeduplicationDuration + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/Duration' + DeduplicationDuration1: + title: DeduplicationDuration + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/Duration' + DeduplicationDuration2: + title: DeduplicationDuration + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/Duration' + DeduplicationOffset: + title: DeduplicationOffset + type: object + required: + - value + properties: + value: + type: integer + format: int64 + DeduplicationOffset1: + title: DeduplicationOffset + type: object + required: + - value + properties: + value: + type: integer + format: int64 + DeduplicationOffset2: + title: DeduplicationOffset + type: object + required: + - value + properties: + value: + type: integer + format: int64 + DeduplicationPeriod: + title: DeduplicationPeriod + description: |- + Specifies the deduplication period for the change ID. + If omitted, the participant will assume the configured maximum deduplication time. + oneOf: + - type: object + required: + - DeduplicationDuration + properties: + DeduplicationDuration: + $ref: '#/components/schemas/DeduplicationDuration' + - type: object + required: + - DeduplicationOffset + properties: + DeduplicationOffset: + $ref: '#/components/schemas/DeduplicationOffset' + - type: object + required: + - Empty + properties: + Empty: + $ref: '#/components/schemas/Empty' + DeduplicationPeriod1: + title: DeduplicationPeriod + description: |- + The actual deduplication window used for the submission, which is derived from + ``Commands.deduplication_period``. The ledger may convert the deduplication period into other + descriptions and extend the period in implementation-specified ways. + + Used to audit the deduplication guarantee described in ``commands.proto``. + + Optional; the deduplication guarantee applies even if the completion omits this field. + oneOf: + - type: object + required: + - DeduplicationDuration + properties: + DeduplicationDuration: + $ref: '#/components/schemas/DeduplicationDuration1' + - type: object + required: + - DeduplicationOffset + properties: + DeduplicationOffset: + $ref: '#/components/schemas/DeduplicationOffset1' + - type: object + required: + - Empty + properties: + Empty: + $ref: '#/components/schemas/Empty3' + DeduplicationPeriod2: + title: DeduplicationPeriod + oneOf: + - type: object + required: + - DeduplicationDuration + properties: + DeduplicationDuration: + $ref: '#/components/schemas/DeduplicationDuration2' + - type: object + required: + - DeduplicationOffset + properties: + DeduplicationOffset: + $ref: '#/components/schemas/DeduplicationOffset2' + - type: object + required: + - Empty + properties: + Empty: + $ref: '#/components/schemas/Empty10' + DeleteIdentityProviderConfigResponse: + title: DeleteIdentityProviderConfigResponse + description: Does not (yet) contain any data. + type: object + DisclosedContract: + title: DisclosedContract + description: |- + An additional contract that is used to resolve + contract & contract key lookups. + type: object + required: + - contractId + - createdEventBlob + - synchronizerId + properties: + templateId: + description: |- + The template id of the contract. + The identifier uses the package-id reference format. + + If provided, used to validate the template id of the contract serialized in the created_event_blob. + Optional + type: string + contractId: + description: |- + The contract id + + If provided, used to validate the contract id of the contract serialized in the created_event_blob. + Optional + type: string + createdEventBlob: + description: |- + Opaque byte string containing the complete payload required by the Daml engine + to reconstruct a contract not known to the receiving participant. + Required + type: string + synchronizerId: + description: |- + The ID of the synchronizer where the contract is currently assigned + Optional + type: string + Duration: + title: Duration + type: object + required: + - seconds + - nanos + properties: + seconds: + type: integer + format: int64 + nanos: + type: integer + format: int32 + unknownFields: + $ref: '#/components/schemas/UnknownFieldSet' + description: This field is automatically added as part of protobuf to json + mapping + Empty: + title: Empty + type: object + Empty1: + title: Empty + type: object + Empty10: + title: Empty + type: object + Empty2: + title: Empty + type: object + Empty3: + title: Empty + type: object + Empty4: + title: Empty + type: object + Empty5: + title: Empty + type: object + Empty6: + title: Empty + type: object + Empty7: + title: Empty + type: object + Empty8: + title: Empty + type: object + Empty9: + title: Empty + type: object + Event: + title: Event + description: |- + Events in transactions can have two primary shapes: + + - ACS delta: events can be CreatedEvent or ArchivedEvent + - ledger effects: events can be CreatedEvent or ExercisedEvent + + In the update service the events are restricted to the events + visible for the parties specified in the transaction filter. Each + event message type below contains a ``witness_parties`` field which + indicates the subset of the requested parties that can see the event + in question. + oneOf: + - type: object + required: + - ArchivedEvent + properties: + ArchivedEvent: + $ref: '#/components/schemas/ArchivedEvent' + - type: object + required: + - CreatedEvent + properties: + CreatedEvent: + $ref: '#/components/schemas/CreatedEvent' + - type: object + required: + - ExercisedEvent + properties: + ExercisedEvent: + $ref: '#/components/schemas/ExercisedEvent' + EventFormat: + title: EventFormat + description: |- + A format for events which defines both which events should be included + and what data should be computed and included for them. + + Note that some of the filtering behavior depends on the `TransactionShape`, + which is expected to be specified alongside usages of `EventFormat`. + type: object + required: + - filtersByParty + - verbose + properties: + filtersByParty: + $ref: '#/components/schemas/Map_Filters' + description: |- + Each key must be a valid PartyIdString (as described in ``value.proto``). + The interpretation of the filter depends on the transaction-shape being filtered: + + 1. For **ledger-effects** create and exercise events are returned, for which the witnesses include at least one of + the listed parties and match the per-party filter. + 2. For **transaction and active-contract-set streams** create and archive events are returned for all contracts whose + stakeholders include at least one of the listed parties and match the per-party filter. + + Optional + filtersForAnyParty: + $ref: '#/components/schemas/Filters' + description: |- + Wildcard filters that apply to all the parties existing on the participant. The interpretation of the filters is the same + with the per-party filter as described above. + Optional + verbose: + description: |- + If enabled, values served over the API will contain more information than strictly necessary to interpret the data. + In particular, setting the verbose flag to true triggers the ledger to include labels for record fields. + Optional + type: boolean + ExecuteSubmissionAndWaitResponse: + title: ExecuteSubmissionAndWaitResponse + type: object + required: + - updateId + - completionOffset + properties: + updateId: + description: |- + The id of the transaction that resulted from the submitted command. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + completionOffset: + description: |- + The details of the offset field are described in ``community/ledger-api/README.md``. + Required + type: integer + format: int64 + ExecuteSubmissionResponse: + title: ExecuteSubmissionResponse + type: object + ExerciseByKeyCommand: + title: ExerciseByKeyCommand + description: Exercise a choice on an existing contract specified by its key. + type: object + required: + - templateId + - contractKey + - choice + - choiceArgument + properties: + templateId: + description: |- + The template of contract the client wants to exercise. + Both package-name and package-id reference identifier formats for the template-id are supported. + Note: The package-id reference identifier format is deprecated. We plan to end support for this format in version 3.4. + + Required + type: string + contractKey: + description: |- + The key of the contract the client wants to exercise upon. + Required + choice: + description: |- + The name of the choice the client wants to exercise. + Must be a valid NameString (as described in ``value.proto``) + Required + type: string + choiceArgument: + description: |- + The argument for this choice. + Required + ExerciseCommand: + title: ExerciseCommand + description: Exercise a choice on an existing contract. + type: object + required: + - templateId + - contractId + - choice + - choiceArgument + properties: + templateId: + description: |- + The template or interface of the contract the client wants to exercise. + Both package-name and package-id reference identifier formats for the template-id are supported. + Note: The package-id reference identifier format is deprecated. We plan to end support for this format in version 3.4. + To exercise a choice on an interface, specify the interface identifier in the template_id field. + + Required + type: string + contractId: + description: |- + The ID of the contract the client wants to exercise upon. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + choice: + description: |- + The name of the choice the client wants to exercise. + Must be a valid NameString (as described in ``value.proto``) + Required + type: string + choiceArgument: + description: |- + The argument for this choice. + Required + ExercisedEvent: + title: ExercisedEvent + description: Records that a choice has been exercised on a target contract. + type: object + required: + - offset + - nodeId + - contractId + - templateId + - choice + - choiceArgument + - consuming + - lastDescendantNodeId + - exerciseResult + - packageName + - acsDelta + properties: + offset: + description: |- + The offset of origin. + Offsets are managed by the participant nodes. + Transactions can thus NOT be assumed to have the same offsets on different participant nodes. + Required, it is a valid absolute offset (positive integer) + type: integer + format: int64 + nodeId: + description: |- + The position of this event in the originating transaction or reassignment. + Node IDs are not necessarily equal across participants, + as these may see different projections/parts of transactions. + Required, must be valid node ID (non-negative integer) + type: integer + format: int32 + contractId: + description: |- + The ID of the target contract. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + templateId: + description: |- + Identifies the template that defines the executed choice. + This template's package-id may differ from the target contract's package-id + if the target contract has been upgraded or downgraded. + + The identifier uses the package-id reference format. + + Required + type: string + interfaceId: + description: |- + The interface where the choice is defined, if inherited. + If defined, the identifier uses the package-id reference format. + + Optional + type: string + choice: + description: |- + The choice that was exercised on the target contract. + Must be a valid NameString (as described in ``value.proto``). + Required + type: string + choiceArgument: + description: |- + The argument of the exercised choice. + Required + actingParties: + description: |- + The parties that exercised the choice. + Each element must be a valid PartyIdString (as described in ``value.proto``). + Required + type: array + items: + type: string + consuming: + description: |- + If true, the target contract may no longer be exercised. + Required + type: boolean + witnessParties: + description: |- + The parties that are notified of this event. The witnesses of an exercise + node will depend on whether the exercise was consuming or not. + If consuming, the witnesses are the union of the stakeholders, + the actors and all informees of all the ancestors of this event this + participant knows about. + If not consuming, the witnesses are the union of the signatories, + the actors and all informees of all the ancestors of this event this + participant knows about. + In both cases the witnesses are limited to the querying parties, or not + limited in case anyParty filters are used. + Note that the actors might not necessarily be observers + and thus stakeholders. This is the case when the controllers of a + choice are specified using "flexible controllers", using the + ``choice ... controller`` syntax, and said controllers are not + explicitly marked as observers. + Each element must be a valid PartyIdString (as described in ``value.proto``). + Required + type: array + items: + type: string + lastDescendantNodeId: + description: |- + Specifies the upper boundary of the node ids of the events in the same transaction that appeared as a result of + this ``ExercisedEvent``. This allows unambiguous identification of all the members of the subtree rooted at this + node. A full subtree can be constructed when all descendant nodes are present in the stream. If nodes are heavily + filtered, it is only possible to determine if a node is in a consequent subtree or not. + Required + type: integer + format: int32 + exerciseResult: + description: |- + The result of exercising the choice. + Required + packageName: + description: |- + The package name of the contract. + Required + type: string + implementedInterfaces: + description: |- + If the event is consuming, the interfaces implemented by the target template that have been + matched from the interface filter query. + Populated only in case interface filters with include_interface_view set. + + The identifier uses the package-id reference format. + + Optional + type: array + items: + type: string + acsDelta: + description: |- + Whether this event would be part of respective ACS_DELTA shaped stream, + and should therefore considered when tracking contract activeness on the client-side. + Required + type: boolean + ExercisedTreeEvent: + title: ExercisedTreeEvent + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/ExercisedEvent' + ExperimentalCommandInspectionService: + title: ExperimentalCommandInspectionService + description: Whether the Ledger API supports command inspection service + type: object + required: + - supported + properties: + supported: + description: '' + type: boolean + ExperimentalFeatures: + title: ExperimentalFeatures + description: See the feature message definitions for descriptions. + type: object + properties: + staticTime: + $ref: '#/components/schemas/ExperimentalStaticTime' + description: '' + commandInspectionService: + $ref: '#/components/schemas/ExperimentalCommandInspectionService' + description: '' + ExperimentalStaticTime: + title: ExperimentalStaticTime + description: Ledger is in the static time mode and exposes a time service. + type: object + required: + - supported + properties: + supported: + description: '' + type: boolean + FeaturesDescriptor: + title: FeaturesDescriptor + type: object + properties: + experimental: + $ref: '#/components/schemas/ExperimentalFeatures' + description: |- + Features under development or features that are used + for ledger implementation testing purposes only. + + Daml applications SHOULD not depend on these in production. + userManagement: + $ref: '#/components/schemas/UserManagementFeature' + description: |- + If set, then the Ledger API server supports user management. + It is recommended that clients query this field to gracefully adjust their behavior for + ledgers that do not support user management. + partyManagement: + $ref: '#/components/schemas/PartyManagementFeature' + description: |- + If set, then the Ledger API server supports party management configurability. + It is recommended that clients query this field to gracefully adjust their behavior to + maximum party page size. + offsetCheckpoint: + $ref: '#/components/schemas/OffsetCheckpointFeature' + description: It contains the timeouts related to the periodic offset checkpoint + emission + packageFeature: + $ref: '#/components/schemas/PackageFeature' + description: |- + If set, then the Ledger API server supports package listing + configurability. It is recommended that clients query this field to + gracefully adjust their behavior to maximum package listing page size. + Field: + title: Field + type: object + properties: + varint: + type: array + items: + type: integer + format: int64 + fixed64: + type: array + items: + type: integer + format: int64 + fixed32: + type: array + items: + type: integer + format: int32 + lengthDelimited: + type: array + items: + type: string + FieldMask: + title: FieldMask + type: object + required: + - unknownFields + properties: + paths: + type: array + items: + type: string + unknownFields: + $ref: '#/components/schemas/UnknownFieldSet' + Filters: + title: Filters + description: The union of a set of template filters, interface filters, or a + wildcard. + type: object + properties: + cumulative: + description: |- + Every filter in the cumulative list expands the scope of the resulting stream. Each interface, + template or wildcard filter means additional events that will match the query. + The impact of include_interface_view and include_created_event_blob fields in the filters will + also be accumulated. + A template or an interface SHOULD NOT appear twice in the accumulative field. + A wildcard filter SHOULD NOT be defined more than once in the accumulative field. + Optional, if no ``CumulativeFilter`` defined, the default of a single ``WildcardFilter`` with + include_created_event_blob unset is used. + type: array + items: + $ref: '#/components/schemas/CumulativeFilter' + GenerateExternalPartyTopologyRequest: + title: GenerateExternalPartyTopologyRequest + type: object + required: + - synchronizer + - partyHint + - localParticipantObservationOnly + - confirmationThreshold + properties: + synchronizer: + description: |- + TODO(#27670) support synchronizer aliases + Required: synchronizer-id for which we are building this request. + type: string + partyHint: + description: 'Required: the actual party id will be constructed from this + hint and a fingerprint of the public key' + type: string + publicKey: + $ref: '#/components/schemas/SigningPublicKey' + description: 'Required: public key' + localParticipantObservationOnly: + description: 'Optional: if true, then the local participant will only be + observing, not confirming. Default false.' + type: boolean + otherConfirmingParticipantUids: + description: 'Optional: other participant ids which should be confirming + for this party' + type: array + items: + type: string + confirmationThreshold: + description: 'Optional: Confirmation threshold >= 1 for the party. Defaults + to all available confirmers (or if set to 0).' + type: integer + format: int32 + observingParticipantUids: + description: 'Optional: other observing participant ids for this party' + type: array + items: + type: string + GenerateExternalPartyTopologyResponse: + title: GenerateExternalPartyTopologyResponse + description: Response message with topology transactions and the multi-hash + to be signed. + type: object + required: + - partyId + - publicKeyFingerprint + - multiHash + properties: + partyId: + description: the generated party id + type: string + publicKeyFingerprint: + description: the fingerprint of the supplied public key + type: string + topologyTransactions: + description: |- + The serialized topology transactions which need to be signed and submitted as part of the allocate party process + Note that the serialization includes the versioning information. Therefore, the transaction here is serialized + as an `UntypedVersionedMessage` which in turn contains the serialized `TopologyTransaction` in the version + supported by the synchronizer. + type: array + items: + type: string + multiHash: + description: the multi-hash which may be signed instead of each individual + transaction + type: string + GetActiveContractsRequest: + title: GetActiveContractsRequest + description: |- + If the given offset is different than the ledger end, and there are (un)assignments in-flight at the given offset, + the snapshot may fail with "FAILED_PRECONDITION/PARTICIPANT_PRUNED_DATA_ACCESSED". + Note that it is ok to request acs snapshots for party migration with offsets other than ledger end, because party + migration is not concerned with incomplete (un)assignments. + type: object + required: + - verbose + - activeAtOffset + properties: + filter: + $ref: '#/components/schemas/TransactionFilter' + description: |- + Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. + Templates to include in the served snapshot, per party. + Optional, if specified event_format must be unset, if not specified event_format must be set. + verbose: + description: |- + Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. + If enabled, values served over the API will contain more information than strictly necessary to interpret the data. + In particular, setting the verbose flag to true triggers the ledger to include labels for record fields. + Optional, if specified event_format must be unset. + type: boolean + activeAtOffset: + description: |- + The offset at which the snapshot of the active contracts will be computed. + Must be no greater than the current ledger end offset. + Must be greater than or equal to the last pruning offset. + Required, must be a valid absolute offset (positive integer) or ledger begin offset (zero). + If zero, the empty set will be returned. + type: integer + format: int64 + eventFormat: + $ref: '#/components/schemas/EventFormat' + description: |- + Format of the contract_entries in the result. In case of CreatedEvent the presentation will be of + TRANSACTION_SHAPE_ACS_DELTA. + Optional for backwards compatibility, defaults to an EventFormat where: + + - filters_by_party is the filter.filters_by_party from this request + - filters_for_any_party is the filter.filters_for_any_party from this request + - verbose is the verbose field from this request + GetConnectedSynchronizersResponse: + title: GetConnectedSynchronizersResponse + type: object + properties: + connectedSynchronizers: + description: '' + type: array + items: + $ref: '#/components/schemas/ConnectedSynchronizer' + GetEventsByContractIdRequest: + title: GetEventsByContractIdRequest + type: object + required: + - contractId + properties: + contractId: + description: |- + The contract id being queried. + Required + type: string + eventFormat: + $ref: '#/components/schemas/EventFormat' + description: |- + Format of the events in the result, the presentation will be of TRANSACTION_SHAPE_ACS_DELTA. + Required + GetIdentityProviderConfigResponse: + title: GetIdentityProviderConfigResponse + type: object + properties: + identityProviderConfig: + $ref: '#/components/schemas/IdentityProviderConfig' + description: '' + GetLatestPrunedOffsetsResponse: + title: GetLatestPrunedOffsetsResponse + type: object + required: + - participantPrunedUpToInclusive + - allDivulgedContractsPrunedUpToInclusive + properties: + participantPrunedUpToInclusive: + description: |- + It will always be a non-negative integer. + If positive, the absolute offset up to which the ledger has been pruned, + disregarding the state of all divulged contracts pruning. + If zero, the ledger has not been pruned yet. + type: integer + format: int64 + allDivulgedContractsPrunedUpToInclusive: + description: |- + It will always be a non-negative integer. + If positive, the absolute offset up to which all divulged events have been pruned on the ledger. + It can be at or before the ``participant_pruned_up_to_inclusive`` offset. + For more details about all divulged events pruning, + see ``PruneRequest.prune_all_divulged_contracts`` in ``participant_pruning_service.proto``. + If zero, the divulged events have not been pruned yet. + type: integer + format: int64 + GetLedgerApiVersionResponse: + title: GetLedgerApiVersionResponse + type: object + required: + - version + properties: + version: + description: The version of the ledger API. + type: string + features: + $ref: '#/components/schemas/FeaturesDescriptor' + description: |- + The features supported by this Ledger API endpoint. + + Daml applications CAN use the feature descriptor on top of + version constraints on the Ledger API version to determine + whether a given Ledger API endpoint supports the features + required to run the application. + + See the feature descriptions themselves for the relation between + Ledger API versions and feature presence. + GetLedgerEndResponse: + title: GetLedgerEndResponse + type: object + required: + - offset + properties: + offset: + description: |- + It will always be a non-negative integer. + If zero, the participant view of the ledger is empty. + If positive, the absolute offset of the ledger as viewed by the participant. + type: integer + format: int64 + GetPackageStatusResponse: + title: GetPackageStatusResponse + type: object + required: + - packageStatus + properties: + packageStatus: + description: The status of the package. + type: string + enum: + - PACKAGE_STATUS_UNSPECIFIED + - PACKAGE_STATUS_REGISTERED + GetParticipantIdResponse: + title: GetParticipantIdResponse + type: object + required: + - participantId + properties: + participantId: + description: |- + Identifier of the participant, which SHOULD be globally unique. + Must be a valid LedgerString (as describe in ``value.proto``). + type: string + GetPartiesResponse: + title: GetPartiesResponse + type: object + properties: + partyDetails: + description: |- + The details of the requested Daml parties by the participant, if known. + The party details may not be in the same order as requested. + Required + type: array + items: + $ref: '#/components/schemas/PartyDetails' + GetPreferredPackageVersionResponse: + title: GetPreferredPackageVersionResponse + type: object + properties: + packagePreference: + $ref: '#/components/schemas/PackagePreference' + description: |- + Not populated when no preferred package is found + Optional + GetPreferredPackagesRequest: + title: GetPreferredPackagesRequest + type: object + required: + - synchronizerId + properties: + packageVettingRequirements: + description: |- + The package-name vetting requirements for which the preferred packages should be resolved. + + Generally it is enough to provide the requirements for the intended command's root package-names. + Additional package-name requirements can be provided when additional Daml transaction informees need to use + package dependencies of the command's root packages. + + Required + type: array + items: + $ref: '#/components/schemas/PackageVettingRequirement' + synchronizerId: + description: |- + The synchronizer whose vetting state should be used for resolving this query. + If not specified, the vetting states of all synchronizers to which the participant is connected are used. + Optional + type: string + vettingValidAt: + description: |- + The timestamp at which the package vetting validity should be computed + on the latest topology snapshot as seen by the participant. + If not provided, the participant's current clock time is used. + Optional + type: string + GetPreferredPackagesResponse: + title: GetPreferredPackagesResponse + type: object + required: + - synchronizerId + properties: + packageReferences: + description: |- + The package references of the preferred packages. + Must contain one package reference for each requested package-name. + + If you build command submissions whose content depends on the returned + preferred packages, then we recommend submitting the preferred package-ids + in the ``package_id_selection_preference`` of the command submission to + avoid race conditions with concurrent changes of the on-ledger package vetting state. + + Required + type: array + items: + $ref: '#/components/schemas/PackageReference' + synchronizerId: + description: |- + The synchronizer for which the package preferences are computed. + If the synchronizer_id was specified in the request, then it matches the request synchronizer_id. + Required + type: string + GetTransactionByIdRequest: + title: GetTransactionByIdRequest + description: Provided for backwards compatibility, it will be removed in the + Canton version 3.5.0. + type: object + required: + - updateId + properties: + updateId: + description: |- + The ID of a particular transaction. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + requestingParties: + description: |- + Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. + The parties whose events the client expects to see. + Events that are not visible for the parties in this collection will not be present in the response. + Each element must be a valid PartyIdString (as described in ``value.proto``). + Optional for backwards compatibility for GetTransactionById request: if defined transaction_format must be + unset (falling back to defaults). + type: array + items: + type: string + transactionFormat: + $ref: '#/components/schemas/TransactionFormat' + description: |- + Optional for GetTransactionById request for backwards compatibility: defaults to a transaction_format, where: + + - event_format.filters_by_party will have template-wildcard filters for all the requesting_parties + - event_format.filters_for_any_party is unset + - event_format.verbose = true + - transaction_shape = TRANSACTION_SHAPE_ACS_DELTA + GetTransactionByOffsetRequest: + title: GetTransactionByOffsetRequest + description: Provided for backwards compatibility, it will be removed in the + Canton version 3.5.0. + type: object + required: + - offset + properties: + offset: + description: |- + The offset of the transaction being looked up. + Must be a valid absolute offset (positive integer). + Required + type: integer + format: int64 + requestingParties: + description: |- + Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. + The parties whose events the client expects to see. + Events that are not visible for the parties in this collection will not be present in the response. + Each element must be a valid PartyIdString (as described in ``value.proto``). + Optional for backwards compatibility for GetTransactionByOffset request: if defined transaction_format must be + unset (falling back to defaults). + type: array + items: + type: string + transactionFormat: + $ref: '#/components/schemas/TransactionFormat' + description: |- + Optional for GetTransactionByOffset request for backwards compatibility: defaults to a TransactionFormat, where: + + - event_format.filters_by_party will have template-wildcard filters for all the requesting_parties + - event_format.filters_for_any_party is unset + - event_format.verbose = true + - transaction_shape = TRANSACTION_SHAPE_ACS_DELTA + GetUpdateByIdRequest: + title: GetUpdateByIdRequest + type: object + required: + - updateId + properties: + updateId: + description: |- + The ID of a particular update. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + updateFormat: + $ref: '#/components/schemas/UpdateFormat' + description: |- + The format for the update. + Required + GetUpdateByOffsetRequest: + title: GetUpdateByOffsetRequest + type: object + required: + - offset + properties: + offset: + description: |- + The offset of the update being looked up. + Must be a valid absolute offset (positive integer). + Required + type: integer + format: int64 + updateFormat: + $ref: '#/components/schemas/UpdateFormat' + description: |- + The format for the update. + Required + GetUpdatesRequest: + title: GetUpdatesRequest + type: object + required: + - beginExclusive + - verbose + properties: + beginExclusive: + description: |- + Beginning of the requested ledger section (non-negative integer). + The response will only contain transactions whose offset is strictly greater than this. + If zero, the stream will start from the beginning of the ledger. + If positive, the streaming will start after this absolute offset. + If the ledger has been pruned, this parameter must be specified and be greater than the pruning offset. + type: integer + format: int64 + endInclusive: + description: |- + End of the requested ledger section. + The response will only contain transactions whose offset is less than or equal to this. + Optional, if empty, the stream will not terminate. + If specified, the stream will terminate after this absolute offset (positive integer) is reached. + type: integer + format: int64 + filter: + $ref: '#/components/schemas/TransactionFilter' + description: |- + Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. + Requesting parties with template filters. + Template filters must be empty for GetUpdateTrees requests. + Optional for backwards compatibility, if defined update_format must be unset + verbose: + description: |- + Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. + If enabled, values served over the API will contain more information than strictly necessary to interpret the data. + In particular, setting the verbose flag to true triggers the ledger to include labels, record and variant type ids + for record fields. + Optional for backwards compatibility, if defined update_format must be unset + type: boolean + updateFormat: + $ref: '#/components/schemas/UpdateFormat' + description: |- + Must be unset for GetUpdateTrees request. + Optional for backwards compatibility for GetUpdates request: defaults to an UpdateFormat where: + + - include_transactions.event_format.filters_by_party = the filter.filters_by_party on this request + - include_transactions.event_format.filters_for_any_party = the filter.filters_for_any_party on this request + - include_transactions.event_format.verbose = the same flag specified on this request + - include_transactions.transaction_shape = TRANSACTION_SHAPE_ACS_DELTA + - include_reassignments.filter = the same filter specified on this request + - include_reassignments.verbose = the same flag specified on this request + - include_topology_events.include_participant_authorization_events.parties = all the parties specified in filter + GetUserResponse: + title: GetUserResponse + type: object + properties: + user: + $ref: '#/components/schemas/User' + description: Retrieved user. + GrantUserRightsRequest: + title: GrantUserRightsRequest + description: |- + Add the rights to the set of rights granted to the user. + + Required authorization: ``HasRight(ParticipantAdmin) OR IsAuthenticatedIdentityProviderAdmin(identity_provider_id)`` + type: object + required: + - userId + - identityProviderId + properties: + userId: + description: |- + The user to whom to grant rights. + Required + type: string + rights: + description: |- + The rights to grant. + Optional + type: array + items: + $ref: '#/components/schemas/Right' + identityProviderId: + description: |- + The id of the ``Identity Provider`` + Optional, if not set, assume the user is managed by the default identity provider. + type: string + GrantUserRightsResponse: + title: GrantUserRightsResponse + type: object + properties: + newlyGrantedRights: + description: The rights that were newly granted by the request. + type: array + items: + $ref: '#/components/schemas/Right' + Identifier: + title: Identifier + type: object + required: + - packageId + - moduleName + - entityName + properties: + packageId: + type: string + moduleName: + type: string + entityName: + type: string + IdentifierFilter: + title: IdentifierFilter + oneOf: + - type: object + required: + - Empty + properties: + Empty: + $ref: '#/components/schemas/Empty1' + - type: object + required: + - InterfaceFilter + properties: + InterfaceFilter: + $ref: '#/components/schemas/InterfaceFilter' + - type: object + required: + - TemplateFilter + properties: + TemplateFilter: + $ref: '#/components/schemas/TemplateFilter' + - type: object + required: + - WildcardFilter + properties: + WildcardFilter: + $ref: '#/components/schemas/WildcardFilter' + IdentityProviderAdmin: + title: IdentityProviderAdmin + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/IdentityProviderAdmin1' + IdentityProviderAdmin1: + title: IdentityProviderAdmin + type: object + IdentityProviderConfig: + title: IdentityProviderConfig + type: object + required: + - identityProviderId + - isDeactivated + - issuer + - jwksUrl + - audience + properties: + identityProviderId: + description: |- + The identity provider identifier + Must be a valid LedgerString (as describe in ``value.proto``). + Required + type: string + isDeactivated: + description: |- + When set, the callers using JWT tokens issued by this identity provider are denied all access + to the Ledger API. + Optional, + Modifiable + type: boolean + issuer: + description: |- + Specifies the issuer of the JWT token. + The issuer value is a case sensitive URL using the https scheme that contains scheme, host, + and optionally, port number and path components and no query or fragment components. + Required + Modifiable + type: string + jwksUrl: + description: |- + The JWKS (JSON Web Key Set) URL. + The Ledger API uses JWKs (JSON Web Keys) from the provided URL to verify that the JWT has been + signed with the loaded JWK. Only RS256 (RSA Signature with SHA-256) signing algorithm is supported. + Required + Modifiable + type: string + audience: + description: |- + Specifies the audience of the JWT token. + When set, the callers using JWT tokens issued by this identity provider are allowed to get an access + only if the "aud" claim includes the string specified here + Optional, + Modifiable + type: string + InterfaceFilter: + title: InterfaceFilter + description: This filter matches contracts that implement a specific interface. + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/InterfaceFilter1' + InterfaceFilter1: + title: InterfaceFilter + description: This filter matches contracts that implement a specific interface. + type: object + required: + - includeInterfaceView + - includeCreatedEventBlob + properties: + interfaceId: + description: |- + The interface that a matching contract must implement. + The ``interface_id`` needs to be valid: corresponding interface should be defined in + one of the available packages at the time of the query. + Both package-name and package-id reference formats for the identifier are supported. + Note: The package-id reference identifier format is deprecated. We plan to end support for this format in version 3.4. + + Required + type: string + includeInterfaceView: + description: |- + Whether to include the interface view on the contract in the returned ``CreatedEvent``. + Use this to access contract data in a uniform manner in your API client. + Optional + type: boolean + includeCreatedEventBlob: + description: |- + Whether to include a ``created_event_blob`` in the returned ``CreatedEvent``. + Use this to access the contract create event payload in your API client + for submitting it as a disclosed contract with future commands. + Optional + type: boolean + JsActiveContract: + title: JsActiveContract + type: object + required: + - createdEvent + - synchronizerId + - reassignmentCounter + properties: + createdEvent: + $ref: '#/components/schemas/CreatedEvent' + description: |- + Required + The event as it appeared in the context of its last update (i.e. daml transaction or + reassignment). In particular, the last offset, node_id pair is preserved. + The last update is the most recent update created or assigned this contract on synchronizer_id synchronizer. + The offset of the CreatedEvent might point to an already pruned update, therefore it cannot necessarily be used + for lookups. + synchronizerId: + description: |- + A valid synchronizer id + Required + type: string + reassignmentCounter: + description: |- + Each corresponding assigned and unassigned event has the same reassignment_counter. This strictly increases + with each unassign command for the same contract. Creation of the contract corresponds to reassignment_counter + equals zero. + This field will be the reassignment_counter of the latest observable activation event on this synchronizer, which is + before the active_at_offset. + Required + type: integer + format: int64 + JsArchived: + title: JsArchived + type: object + required: + - archivedEvent + - synchronizerId + properties: + archivedEvent: + $ref: '#/components/schemas/ArchivedEvent' + description: Required + synchronizerId: + description: |- + Required + The synchronizer which sequenced the archival of the contract + type: string + JsAssignedEvent: + title: JsAssignedEvent + description: Records that a contract has been assigned, and it can be used on + the target synchronizer. + type: object + required: + - source + - target + - reassignmentId + - submitter + - reassignmentCounter + - createdEvent + properties: + source: + description: |- + The ID of the source synchronizer. + Must be a valid synchronizer id. + Required + type: string + target: + description: |- + The ID of the target synchronizer. + Must be a valid synchronizer id. + Required + type: string + reassignmentId: + description: |- + The ID from the unassigned event. + For correlation capabilities. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + submitter: + description: |- + Party on whose behalf the assign command was executed. + Empty if the assignment happened offline via the repair service. + Must be a valid PartyIdString (as described in ``value.proto``). + Optional + type: string + reassignmentCounter: + description: |- + Each corresponding assigned and unassigned event has the same reassignment_counter. This strictly increases + with each unassign command for the same contract. Creation of the contract corresponds to reassignment_counter + equals zero. + Required + type: integer + format: int64 + createdEvent: + $ref: '#/components/schemas/CreatedEvent' + description: |- + Required + The offset of this event refers to the offset of the assignment, + while the node_id is the index of within the batch. + JsAssignmentEvent: + title: JsAssignmentEvent + type: object + required: + - source + - target + - reassignmentId + - submitter + - reassignmentCounter + - createdEvent + properties: + source: + type: string + target: + type: string + reassignmentId: + type: string + submitter: + type: string + reassignmentCounter: + type: integer + format: int64 + createdEvent: + $ref: '#/components/schemas/CreatedEvent' + JsCantonError: + title: JsCantonError + type: object + required: + - code + - cause + - context + - errorCategory + properties: + code: + type: string + cause: + type: string + correlationId: + type: string + traceId: + type: string + context: + $ref: '#/components/schemas/Map_String' + resources: + type: array + items: + $ref: '#/components/schemas/Tuple2_String_String' + errorCategory: + type: integer + format: int32 + grpcCodeValue: + type: integer + format: int32 + retryInfo: + type: string + definiteAnswer: + type: boolean + JsCommands: + title: JsCommands + description: A composite command that groups multiple commands together. + type: object + required: + - commandId + properties: + commands: + description: |- + Individual elements of this atomic command. Must be non-empty. + Required + type: array + items: + $ref: '#/components/schemas/Command' + commandId: + description: |- + Uniquely identifies the command. + The triple (user_id, act_as, command_id) constitutes the change ID for the intended ledger change, + where act_as is interpreted as a set of party names. + The change ID can be used for matching the intended ledger changes with all their completions. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + actAs: + description: |- + Set of parties on whose behalf the command should be executed. + If ledger API authorization is enabled, then the authorization metadata must authorize the sender of the request + to act on behalf of each of the given parties. + Each element must be a valid PartyIdString (as described in ``value.proto``). + Required, must be non-empty. + type: array + items: + type: string + userId: + description: |- + Uniquely identifies the participant user that issued the command. + Must be a valid UserIdString (as described in ``value.proto``). + Required unless authentication is used with a user token. + In that case, the token's user-id will be used for the request's user_id. + type: string + readAs: + description: |- + Set of parties on whose behalf (in addition to all parties listed in ``act_as``) contracts can be retrieved. + This affects Daml operations such as ``fetch``, ``fetchByKey``, ``lookupByKey``, ``exercise``, and ``exerciseByKey``. + Note: A participant node of a Daml network can host multiple parties. Each contract present on the participant + node is only visible to a subset of these parties. A command can only use contracts that are visible to at least + one of the parties in ``act_as`` or ``read_as``. This visibility check is independent from the Daml authorization + rules for fetch operations. + If ledger API authorization is enabled, then the authorization metadata must authorize the sender of the request + to read contract data on behalf of each of the given parties. + Optional + type: array + items: + type: string + workflowId: + description: |- + Identifier of the on-ledger workflow that this command is a part of. + Must be a valid LedgerString (as described in ``value.proto``). + Optional + type: string + deduplicationPeriod: + $ref: '#/components/schemas/DeduplicationPeriod' + minLedgerTimeAbs: + description: |- + Lower bound for the ledger time assigned to the resulting transaction. + Note: The ledger time of a transaction is assigned as part of command interpretation. + Use this property if you expect that command interpretation will take a considerate amount of time, such that by + the time the resulting transaction is sequenced, its assigned ledger time is not valid anymore. + Must not be set at the same time as min_ledger_time_rel. + Optional + type: string + minLedgerTimeRel: + $ref: '#/components/schemas/Duration' + description: |- + Same as min_ledger_time_abs, but specified as a duration, starting from the time the command is received by the server. + Must not be set at the same time as min_ledger_time_abs. + Optional + submissionId: + description: |- + A unique identifier to distinguish completions for different submissions with the same change ID. + Typically a random UUID. Applications are expected to use a different UUID for each retry of a submission + with the same change ID. + Must be a valid LedgerString (as described in ``value.proto``). + + If omitted, the participant or the committer may set a value of their choice. + Optional + type: string + disclosedContracts: + description: |- + Additional contracts used to resolve contract & contract key lookups. + Optional + type: array + items: + $ref: '#/components/schemas/DisclosedContract' + synchronizerId: + description: |- + Must be a valid synchronizer id + Optional + type: string + packageIdSelectionPreference: + description: |- + The package-id selection preference of the client for resolving + package names and interface instances in command submission and interpretation + type: array + items: + type: string + prefetchContractKeys: + description: |- + Fetches the contract keys into the caches to speed up the command processing. + Should only contain contract keys that are expected to be resolved during interpretation of the commands. + Keys of disclosed contracts do not need prefetching. + + Optional + type: array + items: + $ref: '#/components/schemas/PrefetchContractKey' + JsContractEntry: + title: JsContractEntry + description: |- + For a contract there could be multiple contract_entry-s in the entire snapshot. These together define + the state of one contract in the snapshot. + A contract_entry is included in the result, if and only if there is at least one stakeholder party of the contract + that is hosted on the synchronizer at the time of the event and the party satisfies the + ``TransactionFilter`` in the query. + oneOf: + - type: object + required: + - JsActiveContract + properties: + JsActiveContract: + $ref: '#/components/schemas/JsActiveContract' + - type: object + required: + - JsEmpty + properties: + JsEmpty: + $ref: '#/components/schemas/JsEmpty' + - type: object + required: + - JsIncompleteAssigned + properties: + JsIncompleteAssigned: + $ref: '#/components/schemas/JsIncompleteAssigned' + - type: object + required: + - JsIncompleteUnassigned + properties: + JsIncompleteUnassigned: + $ref: '#/components/schemas/JsIncompleteUnassigned' + JsCreated: + title: JsCreated + type: object + required: + - createdEvent + - synchronizerId + properties: + createdEvent: + $ref: '#/components/schemas/CreatedEvent' + description: |- + Required + The event as it appeared in the context of its original update (i.e. daml transaction or + reassignment) on this participant node. You can use its offset and node_id to find the + corresponding update and the node within it. + synchronizerId: + description: |- + The synchronizer which sequenced the creation of the contract + Required + type: string + JsEmpty: + title: JsEmpty + type: object + JsExecuteSubmissionAndWaitForTransactionRequest: + title: JsExecuteSubmissionAndWaitForTransactionRequest + type: object + required: + - deduplicationPeriod + - submissionId + - userId + - hashingSchemeVersion + properties: + preparedTransaction: + description: |- + the prepared transaction + Typically this is the value of the `prepared_transaction` field in `PrepareSubmissionResponse` + obtained from calling `prepareSubmission`. + Required + type: string + partySignatures: + $ref: '#/components/schemas/PartySignatures' + description: |- + The party(ies) signatures that authorize the prepared submission to be executed by this node. + Each party can provide one or more signatures.. + and one or more parties can sign. + Note that currently, only single party submissions are supported. + Required + deduplicationPeriod: + $ref: '#/components/schemas/DeduplicationPeriod2' + submissionId: + description: |- + A unique identifier to distinguish completions for different submissions with the same change ID. + Typically a random UUID. Applications are expected to use a different UUID for each retry of a submission + with the same change ID. + Must be a valid LedgerString (as described in ``value.proto``). + + Required + type: string + userId: + description: |- + See [PrepareSubmissionRequest.user_id] + Optional + type: string + hashingSchemeVersion: + description: |- + The hashing scheme version used when building the hash + Required + type: string + enum: + - HASHING_SCHEME_VERSION_UNSPECIFIED + - HASHING_SCHEME_VERSION_V2 + minLedgerTime: + $ref: '#/components/schemas/MinLedgerTime' + description: |- + If set will influence the chosen ledger effective time but will not result in a submission delay so any override + should be scheduled to executed within the window allowed by synchronizer. + Optional + 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. + When the ``transaction_shape`` TRANSACTION_SHAPE_ACS_DELTA shape is used (explicitly or is defaulted to as explained above), + events will only be returned if the submitting party is hosted on this node. + Optional + JsExecuteSubmissionAndWaitForTransactionResponse: + title: JsExecuteSubmissionAndWaitForTransactionResponse + type: object + required: + - transaction + properties: + transaction: + $ref: '#/components/schemas/JsTransaction' + description: |- + The transaction that resulted from the submitted command. + The transaction might contain no events (request conditions result in filtering out all of them). + Required + JsExecuteSubmissionAndWaitRequest: + title: JsExecuteSubmissionAndWaitRequest + type: object + required: + - deduplicationPeriod + - submissionId + - userId + - hashingSchemeVersion + properties: + preparedTransaction: + description: |- + the prepared transaction + Typically this is the value of the `prepared_transaction` field in `PrepareSubmissionResponse` + obtained from calling `prepareSubmission`. + Required + type: string + partySignatures: + $ref: '#/components/schemas/PartySignatures' + description: |- + The party(ies) signatures that authorize the prepared submission to be executed by this node. + Each party can provide one or more signatures.. + and one or more parties can sign. + Note that currently, only single party submissions are supported. + Required + deduplicationPeriod: + $ref: '#/components/schemas/DeduplicationPeriod2' + submissionId: + description: |- + A unique identifier to distinguish completions for different submissions with the same change ID. + Typically a random UUID. Applications are expected to use a different UUID for each retry of a submission + with the same change ID. + Must be a valid LedgerString (as described in ``value.proto``). + + Required + type: string + userId: + description: |- + See [PrepareSubmissionRequest.user_id] + Optional + type: string + hashingSchemeVersion: + description: |- + The hashing scheme version used when building the hash + Required + type: string + enum: + - HASHING_SCHEME_VERSION_UNSPECIFIED + - HASHING_SCHEME_VERSION_V2 + minLedgerTime: + $ref: '#/components/schemas/MinLedgerTime' + description: |- + If set will influence the chosen ledger effective time but will not result in a submission delay so any override + should be scheduled to executed within the window allowed by synchronizer. + Optional + JsExecuteSubmissionRequest: + title: JsExecuteSubmissionRequest + type: object + required: + - deduplicationPeriod + - submissionId + - userId + - hashingSchemeVersion + properties: + preparedTransaction: + description: |- + the prepared transaction + Typically this is the value of the `prepared_transaction` field in `PrepareSubmissionResponse` + obtained from calling `prepareSubmission`. + Required + type: string + partySignatures: + $ref: '#/components/schemas/PartySignatures' + description: |- + The party(ies) signatures that authorize the prepared submission to be executed by this node. + Each party can provide one or more signatures.. + and one or more parties can sign. + Note that currently, only single party submissions are supported. + Required + deduplicationPeriod: + $ref: '#/components/schemas/DeduplicationPeriod2' + submissionId: + description: |- + A unique identifier to distinguish completions for different submissions with the same change ID. + Typically a random UUID. Applications are expected to use a different UUID for each retry of a submission + with the same change ID. + Must be a valid LedgerString (as described in ``value.proto``). + + Required + type: string + userId: + description: |- + See [PrepareSubmissionRequest.user_id] + Optional + type: string + hashingSchemeVersion: + description: |- + The hashing scheme version used when building the hash + Required + type: string + enum: + - HASHING_SCHEME_VERSION_UNSPECIFIED + - HASHING_SCHEME_VERSION_V2 + minLedgerTime: + $ref: '#/components/schemas/MinLedgerTime' + description: |- + If set will influence the chosen ledger effective time but will not result in a submission delay so any override + should be scheduled to executed within the window allowed by synchronizer. + Optional + JsGetActiveContractsResponse: + title: JsGetActiveContractsResponse + type: object + required: + - workflowId + - contractEntry + properties: + workflowId: + description: |- + The workflow ID used in command submission which corresponds to the contract_entry. Only set if + the ``workflow_id`` for the command was set. + Must be a valid LedgerString (as described in ``value.proto``). + Optional + type: string + contractEntry: + $ref: '#/components/schemas/JsContractEntry' + JsGetEventsByContractIdResponse: + title: JsGetEventsByContractIdResponse + type: object + properties: + created: + $ref: '#/components/schemas/JsCreated' + description: |- + The create event for the contract with the ``contract_id`` given in the request + provided it exists and has not yet been pruned. + Optional + archived: + $ref: '#/components/schemas/JsArchived' + description: |- + The archive event for the contract with the ``contract_id`` given in the request + provided such an archive event exists and it has not yet been pruned. + Optional + JsGetTransactionResponse: + title: JsGetTransactionResponse + description: Provided for backwards compatibility, it will be removed in the + Canton version 3.5.0. + type: object + required: + - transaction + properties: + transaction: + $ref: '#/components/schemas/JsTransaction' + description: Required + JsGetTransactionTreeResponse: + title: JsGetTransactionTreeResponse + description: Provided for backwards compatibility, it will be removed in the + Canton version 3.5.0. + type: object + required: + - transaction + properties: + transaction: + $ref: '#/components/schemas/JsTransactionTree' + description: Required + JsGetUpdateResponse: + title: JsGetUpdateResponse + type: object + required: + - update + properties: + update: + $ref: '#/components/schemas/Update' + JsGetUpdateTreesResponse: + title: JsGetUpdateTreesResponse + description: Provided for backwards compatibility, it will be removed in the + Canton version 3.5.0. + type: object + required: + - update + properties: + update: + $ref: '#/components/schemas/Update1' + JsGetUpdatesResponse: + title: JsGetUpdatesResponse + type: object + required: + - update + properties: + update: + $ref: '#/components/schemas/Update' + JsIncompleteAssigned: + title: JsIncompleteAssigned + type: object + required: + - assignedEvent + properties: + assignedEvent: + $ref: '#/components/schemas/JsAssignedEvent' + description: Required + JsIncompleteUnassigned: + title: JsIncompleteUnassigned + type: object + required: + - createdEvent + - unassignedEvent + properties: + createdEvent: + $ref: '#/components/schemas/CreatedEvent' + description: |- + Required + The event as it appeared in the context of its last activation update (i.e. daml transaction or + reassignment). In particular, the last activation offset, node_id pair is preserved. + The last activation update is the most recent update created or assigned this contract on synchronizer_id synchronizer before + the unassigned_event. + The offset of the CreatedEvent might point to an already pruned update, therefore it cannot necessarily be used + for lookups. + unassignedEvent: + $ref: '#/components/schemas/UnassignedEvent' + description: Required + JsInterfaceView: + title: JsInterfaceView + description: View of a create event matched by an interface filter. + type: object + required: + - interfaceId + - viewStatus + properties: + interfaceId: + description: |- + The interface implemented by the matched event. + The identifier uses the package-id reference format. + + Required + type: string + viewStatus: + $ref: '#/components/schemas/JsStatus' + description: |- + Whether the view was successfully computed, and if not, + the reason for the error. The error is reported using the same rules + for error codes and messages as the errors returned for API requests. + Required + viewValue: + description: |- + The value of the interface's view method on this event. + Set if it was requested in the ``InterfaceFilter`` and it could be + successfully computed. + Optional + JsPrepareSubmissionRequest: + title: JsPrepareSubmissionRequest + type: object + required: + - userId + - commandId + - synchronizerId + - verboseHashing + properties: + userId: + description: |- + Uniquely identifies the participant user that prepares the transaction. + Must be a valid UserIdString (as described in ``value.proto``). + Required unless authentication is used with a user token. + In that case, the token's user-id will be used for the request's user_id. + Optional + type: string + commandId: + description: |- + Uniquely identifies the command. + The triple (user_id, act_as, command_id) constitutes the change ID for the intended ledger change, + where act_as is interpreted as a set of party names. + The change ID can be used for matching the intended ledger changes with all their completions. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + commands: + description: |- + Individual elements of this atomic command. Must be non-empty. + Limitation: Only single command transaction are currently supported by the API. + The field is marked as repeated in preparation for future support of multiple commands. + Required + type: array + items: + $ref: '#/components/schemas/Command' + minLedgerTime: + $ref: '#/components/schemas/MinLedgerTime' + description: Optional + actAs: + description: |- + Set of parties on whose behalf the command should be executed, if submitted. + If ledger API authorization is enabled, then the authorization metadata must authorize the sender of the request + to **read** (not act) on behalf of each of the given parties. This is because this RPC merely prepares a transaction + and does not execute it. Therefore read authorization is sufficient even for actAs parties. + Note: This may change, and more specific authorization scope may be introduced in the future. + Each element must be a valid PartyIdString (as described in ``value.proto``). + Required, must be non-empty. + type: array + items: + type: string + readAs: + description: |- + Set of parties on whose behalf (in addition to all parties listed in ``act_as``) contracts can be retrieved. + This affects Daml operations such as ``fetch``, ``fetchByKey``, ``lookupByKey``, ``exercise``, and ``exerciseByKey``. + Note: A command can only use contracts that are visible to at least + one of the parties in ``act_as`` or ``read_as``. This visibility check is independent from the Daml authorization + rules for fetch operations. + If ledger API authorization is enabled, then the authorization metadata must authorize the sender of the request + to read contract data on behalf of each of the given parties. + Optional + type: array + items: + type: string + disclosedContracts: + description: |- + Additional contracts used to resolve contract & contract key lookups. + Optional + type: array + items: + $ref: '#/components/schemas/DisclosedContract' + synchronizerId: + description: |- + Must be a valid synchronizer id + If not set, a suitable synchronizer that this node is connected to will be chosen + Optional + type: string + packageIdSelectionPreference: + description: |- + The package-id selection preference of the client for resolving + package names and interface instances in command submission and interpretation + Optional + type: array + items: + type: string + verboseHashing: + description: |- + When true, the response will contain additional details on how the transaction was encoded and hashed + This can be useful for troubleshooting of hash mismatches. Should only be used for debugging. + Optional, default to false + type: boolean + prefetchContractKeys: + description: |- + Fetches the contract keys into the caches to speed up the command processing. + Should only contain contract keys that are expected to be resolved during interpretation of the commands. + Keys of disclosed contracts do not need prefetching. + + Optional + type: array + items: + $ref: '#/components/schemas/PrefetchContractKey' + maxRecordTime: + description: |- + Maximum timestamp at which the transaction can be recorded onto the ledger via the synchronizer specified in the `PrepareSubmissionResponse`. + If submitted after it will be rejected even if otherwise valid, in which case it needs to be prepared and signed again + with a new valid max_record_time. + Use this to limit the time-to-life of a prepared transaction, + which is useful to know when it can definitely not be accepted + anymore and resorting to preparing another transaction for the same + intent is safe again. + Optional + type: string + estimateTrafficCost: + $ref: '#/components/schemas/CostEstimationHints' + description: |- + Hints to improve the accuracy of traffic cost estimation. + The estimation logic assumes that this node will be used for the execution of the transaction + If another node is used instead, the estimation may be less precise. + Request amplification is not accounted for in the estimation: each amplified request will + result in the cost of the confirmation request to be charged additionally. + + Optional - Traffic cost estimation is enabled by default if this field is not set + To turn off cost estimation, set the CostEstimationHints#disabled field to true + JsPrepareSubmissionResponse: + title: JsPrepareSubmissionResponse + description: '[docs-entry-end: HashingSchemeVersion]' + type: object + required: + - preparedTransactionHash + - hashingSchemeVersion + properties: + preparedTransaction: + description: |- + The interpreted transaction, it represents the ledger changes necessary to execute the commands specified in the request. + Clients MUST display the content of the transaction to the user for them to validate before signing the hash if the preparing participant is not trusted. + type: string + preparedTransactionHash: + description: |- + Hash of the transaction, this is what needs to be signed by the party to authorize the transaction. + Only provided for convenience, clients MUST recompute the hash from the raw transaction if the preparing participant is not trusted. + May be removed in future versions + type: string + hashingSchemeVersion: + description: The hashing scheme version used when building the hash + type: string + enum: + - HASHING_SCHEME_VERSION_UNSPECIFIED + - HASHING_SCHEME_VERSION_V2 + hashingDetails: + description: |- + Optional additional details on how the transaction was encoded and hashed. Only set if verbose_hashing = true in the request + Note that there are no guarantees on the stability of the format or content of this field. + Its content should NOT be parsed and should only be used for troubleshooting purposes. + type: string + costEstimation: + $ref: '#/components/schemas/CostEstimation' + description: |- + Traffic cost estimation of the prepared transaction + Optional + JsReassignment: + title: JsReassignment + description: Complete view of an on-ledger reassignment. + type: object + required: + - updateId + - commandId + - workflowId + - offset + - recordTime + - synchronizerId + properties: + updateId: + description: |- + Assigned by the server. Useful for correlating logs. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + commandId: + description: |- + The ID of the command which resulted in this reassignment. Missing for everyone except the submitting party on the submitting participant. + Must be a valid LedgerString (as described in ``value.proto``). + Optional + type: string + workflowId: + description: |- + The workflow ID used in reassignment command submission. Only set if the ``workflow_id`` for the command was set. + Must be a valid LedgerString (as described in ``value.proto``). + Optional + type: string + offset: + description: |- + The participant's offset. The details of this field are described in ``community/ledger-api/README.md``. + Required, must be a valid absolute offset (positive integer). + type: integer + format: int64 + events: + description: The collection of reassignment events. Required. + type: array + items: + $ref: '#/components/schemas/JsReassignmentEvent' + traceContext: + $ref: '#/components/schemas/TraceContext' + description: |- + Optional; ledger API trace context + + The trace context transported in this message corresponds to the trace context supplied + by the client application in a HTTP2 header of the original command submission. + We typically use a header to transfer this type of information. Here we use message + body, because it is used in gRPC streams which do not support per message headers. + This field will be populated with the trace context contained in the original submission. + If that was not provided, a unique ledger-api-server generated trace context will be used + instead. + recordTime: + description: |- + The time at which the reassignment was recorded. The record time refers to the source/target + synchronizer for an unassign/assign event respectively. + Required + type: string + synchronizerId: + description: |- + A valid synchronizer id. + Identifies the synchronizer that synchronized this Reassignment. + Required + type: string + JsReassignmentEvent: + title: JsReassignmentEvent + oneOf: + - type: object + required: + - JsAssignmentEvent + properties: + JsAssignmentEvent: + $ref: '#/components/schemas/JsAssignmentEvent' + - type: object + required: + - JsUnassignedEvent + properties: + JsUnassignedEvent: + $ref: '#/components/schemas/JsUnassignedEvent' + JsStatus: + title: JsStatus + type: object + required: + - code + - message + properties: + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + $ref: '#/components/schemas/ProtoAny' + JsSubmitAndWaitForReassignmentResponse: + title: JsSubmitAndWaitForReassignmentResponse + type: object + required: + - reassignment + properties: + reassignment: + $ref: '#/components/schemas/JsReassignment' + description: |- + The reassignment that resulted from the submitted reassignment command. + The reassignment might contain no events (request conditions result in filtering out all of them). + Required + 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 + JsSubmitAndWaitForTransactionResponse: + title: JsSubmitAndWaitForTransactionResponse + type: object + required: + - transaction + properties: + transaction: + $ref: '#/components/schemas/JsTransaction' + description: |- + The transaction that resulted from the submitted command. + The transaction might contain no events (request conditions result in filtering out all of them). + Required + JsSubmitAndWaitForTransactionTreeResponse: + title: JsSubmitAndWaitForTransactionTreeResponse + description: Provided for backwards compatibility, it will be removed in the + Canton version 3.5.0. + type: object + required: + - transactionTree + properties: + transactionTree: + $ref: '#/components/schemas/JsTransactionTree' + JsTopologyTransaction: + title: JsTopologyTransaction + type: object + required: + - updateId + - offset + - synchronizerId + properties: + updateId: + description: |- + Assigned by the server. Useful for correlating logs. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + offset: + description: |- + The absolute offset. The details of this field are described in ``community/ledger-api/README.md``. + Required, it is a valid absolute offset (positive integer). + type: integer + format: int64 + synchronizerId: + description: |- + A valid synchronizer id. + Identifies the synchronizer that synchronized the topology transaction. + Required + type: string + recordTime: + description: |- + The time at which the changes in the topology transaction become effective. There is a small delay between a + topology transaction being sequenced and the changes it contains becoming effective. Topology transactions appear + in order relative to a synchronizer based on their effective time rather than their sequencing time. + Required + type: string + events: + description: |- + A non-empty list of topology events. + Required + type: array + items: + $ref: '#/components/schemas/TopologyEvent' + traceContext: + $ref: '#/components/schemas/TraceContext' + description: |- + Optional; ledger API trace context + + The trace context transported in this message corresponds to the trace context supplied + by the client application in a HTTP2 header of the original command submission. + We typically use a header to transfer this type of information. Here we use message + body, because it is used in gRPC streams which do not support per message headers. + This field will be populated with the trace context contained in the original submission. + If that was not provided, a unique ledger-api-server generated trace context will be used + instead. + JsTransaction: + title: JsTransaction + description: Filtered view of an on-ledger transaction's create and archive + events. + type: object + required: + - updateId + - commandId + - workflowId + - effectiveAt + - offset + - synchronizerId + - recordTime + properties: + updateId: + description: |- + Assigned by the server. Useful for correlating logs. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + commandId: + description: |- + The ID of the command which resulted in this transaction. Missing for everyone except the submitting party. + Must be a valid LedgerString (as described in ``value.proto``). + Optional + type: string + workflowId: + description: |- + The workflow ID used in command submission. + Must be a valid LedgerString (as described in ``value.proto``). + Optional + type: string + effectiveAt: + description: |- + Ledger effective time. + Required + type: string + events: + description: |- + The collection of events. + Contains: + + - ``CreatedEvent`` or ``ArchivedEvent`` in case of ACS_DELTA transaction shape + - ``CreatedEvent`` or ``ExercisedEvent`` in case of LEDGER_EFFECTS transaction shape + + Required + type: array + items: + $ref: '#/components/schemas/Event' + offset: + description: |- + The absolute offset. The details of this field are described in ``community/ledger-api/README.md``. + Required, it is a valid absolute offset (positive integer). + type: integer + format: int64 + synchronizerId: + description: |- + A valid synchronizer id. + Identifies the synchronizer that synchronized the transaction. + Required + type: string + traceContext: + $ref: '#/components/schemas/TraceContext' + description: |- + Optional; ledger API trace context + + The trace context transported in this message corresponds to the trace context supplied + by the client application in a HTTP2 header of the original command submission. + We typically use a header to transfer this type of information. Here we use message + body, because it is used in gRPC streams which do not support per message headers. + This field will be populated with the trace context contained in the original submission. + If that was not provided, a unique ledger-api-server generated trace context will be used + instead. + recordTime: + description: |- + The time at which the transaction was recorded. The record time refers to the synchronizer + which synchronized the transaction. + Required + type: string + externalTransactionHash: + description: |- + For transaction externally signed, contains the external transaction hash + signed by the external party. Can be used to correlate an external submission with a committed transaction. + Optional + type: string + JsTransactionTree: + title: JsTransactionTree + description: |- + Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. + Complete view of an on-ledger transaction. + type: object + required: + - updateId + - commandId + - workflowId + - offset + - eventsById + - synchronizerId + - recordTime + properties: + updateId: + description: |- + Assigned by the server. Useful for correlating logs. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + commandId: + description: |- + The ID of the command which resulted in this transaction. Missing for everyone except the submitting party. + Must be a valid LedgerString (as described in ``value.proto``). + Optional + type: string + workflowId: + description: |- + The workflow ID used in command submission. Only set if the ``workflow_id`` for the command was set. + Must be a valid LedgerString (as described in ``value.proto``). + Optional + type: string + effectiveAt: + description: |- + Ledger effective time. + Required + type: string + offset: + description: |- + The absolute offset. The details of this field are described in ``community/ledger-api/README.md``. + Required, it is a valid absolute offset (positive integer). + type: integer + format: int64 + eventsById: + $ref: '#/components/schemas/Map_Int_TreeEvent' + description: |- + Changes to the ledger that were caused by this transaction. Nodes of the transaction tree. + Each key must be a valid node ID (non-negative integer). + Required + synchronizerId: + description: |- + A valid synchronizer id. + Identifies the synchronizer that synchronized the transaction. + Required + type: string + traceContext: + $ref: '#/components/schemas/TraceContext' + description: |- + Optional; ledger API trace context + + The trace context transported in this message corresponds to the trace context supplied + by the client application in a HTTP2 header of the original command submission. + We typically use a header to transfer this type of information. Here we use message + body, because it is used in gRPC streams which do not support per message headers. + This field will be populated with the trace context contained in the original submission. + If that was not provided, a unique ledger-api-server generated trace context will be used + instead. + recordTime: + description: |- + The time at which the transaction was recorded. The record time refers to the synchronizer + which synchronized the transaction. + Required + type: string + JsUnassignedEvent: + title: JsUnassignedEvent + description: Records that a contract has been unassigned, and it becomes unusable + on the source synchronizer + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/UnassignedEvent' + Kind: + title: Kind + description: Required + oneOf: + - type: object + required: + - CanActAs + properties: + CanActAs: + $ref: '#/components/schemas/CanActAs' + - type: object + required: + - CanExecuteAs + properties: + CanExecuteAs: + $ref: '#/components/schemas/CanExecuteAs' + - type: object + required: + - CanExecuteAsAnyParty + properties: + CanExecuteAsAnyParty: + $ref: '#/components/schemas/CanExecuteAsAnyParty' + - type: object + required: + - CanReadAs + properties: + CanReadAs: + $ref: '#/components/schemas/CanReadAs' + - type: object + required: + - CanReadAsAnyParty + properties: + CanReadAsAnyParty: + $ref: '#/components/schemas/CanReadAsAnyParty' + - type: object + required: + - Empty + properties: + Empty: + $ref: '#/components/schemas/Empty8' + - type: object + required: + - IdentityProviderAdmin + properties: + IdentityProviderAdmin: + $ref: '#/components/schemas/IdentityProviderAdmin' + - type: object + required: + - ParticipantAdmin + properties: + ParticipantAdmin: + $ref: '#/components/schemas/ParticipantAdmin' + ListIdentityProviderConfigsResponse: + title: ListIdentityProviderConfigsResponse + type: object + properties: + identityProviderConfigs: + description: '' + type: array + items: + $ref: '#/components/schemas/IdentityProviderConfig' + ListKnownPartiesResponse: + title: ListKnownPartiesResponse + type: object + required: + - nextPageToken + properties: + partyDetails: + description: |- + The details of all Daml parties known by the participant. + Required + type: array + items: + $ref: '#/components/schemas/PartyDetails' + nextPageToken: + description: |- + Pagination token to retrieve the next page. + Empty, if there are no further results. + type: string + ListPackagesResponse: + title: ListPackagesResponse + type: object + properties: + packageIds: + description: |- + The IDs of all Daml-LF packages supported by the server. + Each element must be a valid PackageIdString (as described in ``value.proto``). + Required + type: array + items: + type: string + ListUserRightsResponse: + title: ListUserRightsResponse + type: object + properties: + rights: + description: All rights of the user. + type: array + items: + $ref: '#/components/schemas/Right' + ListUsersResponse: + title: ListUsersResponse + type: object + required: + - nextPageToken + properties: + users: + description: A subset of users of the participant node that fit into this + page. + type: array + items: + $ref: '#/components/schemas/User' + nextPageToken: + description: |- + Pagination token to retrieve the next page. + Empty, if there are no further results. + type: string + ListVettedPackagesRequest: + title: ListVettedPackagesRequest + type: object + required: + - pageToken + - pageSize + properties: + packageMetadataFilter: + $ref: '#/components/schemas/PackageMetadataFilter' + description: |- + The package metadata filter the returned vetted packages set must satisfy. + Optional + topologyStateFilter: + $ref: '#/components/schemas/TopologyStateFilter' + description: |- + The topology filter the returned vetted packages set must satisfy. + Optional + pageToken: + description: |- + Pagination token to determine the specific page to fetch. Using the token + guarantees that ``VettedPackages`` on a subsequent page are all greater + (``VettedPackages`` are sorted by synchronizer ID then participant ID) than + the last ``VettedPackages`` on a previous page. + + The server does not store intermediate results between calls chained by a + series of page tokens. As a consequence, if new vetted packages are being + added and a page is requested twice using the same token, more packages can + be returned on the second call. + + Leave unspecified (i.e. as empty string) to fetch the first page. + + Optional + type: string + pageSize: + description: |- + Maximum number of ``VettedPackages`` results to return in a single page. + + If the page_size is unspecified (i.e. left as 0), the server will decide + the number of results to be returned. + + If the page_size exceeds the maximum supported by the server, an + error will be returned. + + To obtain the server's maximum consult the PackageService descriptor + available in the VersionService. + + Optional + type: integer + format: int32 + ListVettedPackagesResponse: + title: ListVettedPackagesResponse + type: object + required: + - nextPageToken + properties: + vettedPackages: + description: |- + All ``VettedPackages`` that contain at least one ``VettedPackage`` matching + both a ``PackageMetadataFilter`` and a ``TopologyStateFilter``. + Sorted by synchronizer_id then participant_id. + type: array + items: + $ref: '#/components/schemas/VettedPackages' + nextPageToken: + description: |- + Pagination token to retrieve the next page. + Empty string if there are no further results. + type: string + Map_Filters: + title: Map_Filters + type: object + additionalProperties: + $ref: '#/components/schemas/Filters' + Map_Int_Field: + title: Map_Int_Field + type: object + additionalProperties: + $ref: '#/components/schemas/Field' + Map_Int_TreeEvent: + title: Map_Int_TreeEvent + type: object + additionalProperties: + $ref: '#/components/schemas/TreeEvent' + Map_String: + title: Map_String + type: object + additionalProperties: + type: string + MinLedgerTime: + title: MinLedgerTime + type: object + required: + - time + properties: + time: + $ref: '#/components/schemas/Time' + MinLedgerTimeAbs: + title: MinLedgerTimeAbs + type: object + required: + - value + properties: + value: + type: string + MinLedgerTimeRel: + title: MinLedgerTimeRel + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/Duration' + NoPrior: + title: NoPrior + type: object + ObjectMeta: + title: ObjectMeta + description: |- + Represents metadata corresponding to a participant resource (e.g. a participant user or participant local information about a party). + + Based on ``ObjectMeta`` meta used in Kubernetes API. + See https://github.com/kubernetes/apimachinery/blob/master/pkg/apis/meta/v1/generated.proto#L640 + type: object + required: + - resourceVersion + - annotations + properties: + resourceVersion: + description: |- + An opaque, non-empty value, populated by a participant server which represents the internal version of the resource + this ``ObjectMeta`` message is attached to. The participant server will change it to a unique value each time the corresponding resource is updated. + You must not rely on the format of resource version. The participant server might change it without notice. + You can obtain the newest resource version value by issuing a read request. + You may use it for concurrent change detection by passing it back unmodified in an update request. + The participant server will then compare the passed value with the value maintained by the system to determine + if any other updates took place since you had read the resource version. + Upon a successful update you are guaranteed that no other update took place during your read-modify-write sequence. + However, if another update took place during your read-modify-write sequence then your update will fail with an appropriate error. + Concurrent change control is optional. It will be applied only if you include a resource version in an update request. + When creating a new instance of a resource you must leave the resource version empty. + Its value will be populated by the participant server upon successful resource creation. + Optional + type: string + annotations: + $ref: '#/components/schemas/Map_String' + description: |- + A set of modifiable key-value pairs that can be used to represent arbitrary, client-specific metadata. + Constraints: + + 1. The total size over all keys and values cannot exceed 256kb in UTF-8 encoding. + 2. Keys are composed of an optional prefix segment and a required name segment such that: + + - key prefix, when present, must be a valid DNS subdomain with at most 253 characters, followed by a '/' (forward slash) character, + - name segment must have at most 63 characters that are either alphanumeric ([a-z0-9A-Z]), or a '.' (dot), '-' (dash) or '_' (underscore); + and it must start and end with an alphanumeric character. + + 3. Values can be any non-empty strings. + + Keys with empty prefix are reserved for end-users. + Properties set by external tools or internally by the participant server must use non-empty key prefixes. + Duplicate keys are disallowed by the semantics of the protobuf3 maps. + See: https://developers.google.com/protocol-buffers/docs/proto3#maps + Annotations may be a part of a modifiable resource. + Use the resource's update RPC to update its annotations. + In order to add a new annotation or update an existing one using an update RPC, provide the desired annotation in the update request. + In order to remove an annotation using an update RPC, provide the target annotation's key but set its value to the empty string in the update request. + Optional + Modifiable + OffsetCheckpoint: + title: OffsetCheckpoint + description: |- + OffsetCheckpoints may be used to: + + - detect time out of commands. + - provide an offset which can be used to restart consumption. + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/OffsetCheckpoint1' + OffsetCheckpoint1: + title: OffsetCheckpoint + description: |- + OffsetCheckpoints may be used to: + + - detect time out of commands. + - provide an offset which can be used to restart consumption. + type: object + required: + - offset + properties: + offset: + description: |- + The participant's offset, the details of the offset field are described in ``community/ledger-api/README.md``. + Required, must be a valid absolute offset (positive integer). + type: integer + format: int64 + synchronizerTimes: + description: '' + type: array + items: + $ref: '#/components/schemas/SynchronizerTime' + OffsetCheckpoint2: + title: OffsetCheckpoint + description: |- + OffsetCheckpoints may be used to: + + - detect time out of commands. + - provide an offset which can be used to restart consumption. + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/OffsetCheckpoint1' + OffsetCheckpoint3: + title: OffsetCheckpoint + description: |- + OffsetCheckpoints may be used to: + + - detect time out of commands. + - provide an offset which can be used to restart consumption. + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/OffsetCheckpoint1' + OffsetCheckpointFeature: + title: OffsetCheckpointFeature + type: object + properties: + maxOffsetCheckpointEmissionDelay: + $ref: '#/components/schemas/Duration' + description: The maximum delay to emmit a new OffsetCheckpoint if it exists + Operation: + title: Operation + oneOf: + - type: object + required: + - Empty + properties: + Empty: + $ref: '#/components/schemas/Empty5' + - type: object + required: + - Unvet + properties: + Unvet: + $ref: '#/components/schemas/Unvet' + - type: object + required: + - Vet + properties: + Vet: + $ref: '#/components/schemas/Vet' + PackageFeature: + title: PackageFeature + type: object + required: + - maxVettedPackagesPageSize + properties: + maxVettedPackagesPageSize: + description: |- + The maximum number of vetted packages the server can return in a single + response (page) when listing them. + type: integer + format: int32 + PackageMetadataFilter: + title: PackageMetadataFilter + description: |- + Filter the VettedPackages by package metadata. + + A PackageMetadataFilter without package_ids and without package_name_prefixes + matches any vetted package. + + Non-empty fields specify candidate values of which at least one must match. + If both fields are set, then a candidate is returned if it matches one of the fields. + type: object + properties: + packageIds: + description: |- + If this list is non-empty, any vetted package with a package ID in this + list will match the filter. + type: array + items: + type: string + packageNamePrefixes: + description: |- + If this list is non-empty, any vetted package with a name matching at least + one prefix in this list will match the filter. + type: array + items: + type: string + PackagePreference: + title: PackagePreference + type: object + required: + - synchronizerId + properties: + packageReference: + $ref: '#/components/schemas/PackageReference' + description: |- + The package reference of the preferred package. + Required + synchronizerId: + description: |- + The synchronizer for which the preferred package was computed. + If the synchronizer_id was specified in the request, then it matches the request synchronizer_id. + Required + type: string + PackageReference: + title: PackageReference + type: object + required: + - packageId + - packageName + - packageVersion + properties: + packageId: + description: Required + type: string + packageName: + description: Required + type: string + packageVersion: + description: Required + type: string + PackageVettingRequirement: + title: PackageVettingRequirement + description: Defines a package-name for which the commonly vetted package with + the highest version must be found. + type: object + required: + - packageName + properties: + parties: + description: |- + The parties whose participants' vetting state should be considered when resolving the preferred package. + Required + type: array + items: + type: string + packageName: + description: |- + The package-name for which the preferred package should be resolved. + Required + type: string + ParticipantAdmin: + title: ParticipantAdmin + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/ParticipantAdmin1' + ParticipantAdmin1: + title: ParticipantAdmin + type: object + ParticipantAuthorizationAdded: + title: ParticipantAuthorizationAdded + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/ParticipantAuthorizationAdded1' + ParticipantAuthorizationAdded1: + title: ParticipantAuthorizationAdded + type: object + required: + - partyId + - participantId + - participantPermission + properties: + partyId: + description: Required + type: string + participantId: + description: Required + type: string + participantPermission: + description: Required + type: string + enum: + - PARTICIPANT_PERMISSION_UNSPECIFIED + - PARTICIPANT_PERMISSION_SUBMISSION + - PARTICIPANT_PERMISSION_CONFIRMATION + - PARTICIPANT_PERMISSION_OBSERVATION + ParticipantAuthorizationChanged: + title: ParticipantAuthorizationChanged + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/ParticipantAuthorizationChanged1' + ParticipantAuthorizationChanged1: + title: ParticipantAuthorizationChanged + type: object + required: + - partyId + - participantId + - participantPermission + properties: + partyId: + description: Required + type: string + participantId: + description: Required + type: string + participantPermission: + description: Required + type: string + enum: + - PARTICIPANT_PERMISSION_UNSPECIFIED + - PARTICIPANT_PERMISSION_SUBMISSION + - PARTICIPANT_PERMISSION_CONFIRMATION + - PARTICIPANT_PERMISSION_OBSERVATION + ParticipantAuthorizationRevoked: + title: ParticipantAuthorizationRevoked + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/ParticipantAuthorizationRevoked1' + ParticipantAuthorizationRevoked1: + title: ParticipantAuthorizationRevoked + type: object + required: + - partyId + - participantId + properties: + partyId: + description: Required + type: string + participantId: + description: Required + type: string + ParticipantAuthorizationTopologyFormat: + title: ParticipantAuthorizationTopologyFormat + description: A format specifying which participant authorization topology transactions + to include and how to render them. + type: object + properties: + parties: + description: |- + List of parties for which the topology transactions should be sent. + Empty means: for all parties. + type: array + items: + type: string + PartyDetails: + title: PartyDetails + type: object + required: + - party + - isLocal + - identityProviderId + properties: + party: + description: |- + The stable unique identifier of a Daml party. + Must be a valid PartyIdString (as described in ``value.proto``). + Required + type: string + isLocal: + description: |- + true if party is hosted by the participant and the party shares the same identity provider as the user issuing the request. + Optional + type: boolean + localMetadata: + $ref: '#/components/schemas/ObjectMeta' + description: |- + Participant-local metadata of this party. + Optional, + Modifiable + identityProviderId: + description: |- + The id of the ``Identity Provider`` + Optional, if not set, there could be 3 options: + + 1. the party is managed by the default identity provider. + 2. party is not hosted by the participant. + 3. party is hosted by the participant, but is outside of the user's identity provider. + type: string + PartyManagementFeature: + title: PartyManagementFeature + type: object + required: + - maxPartiesPageSize + properties: + maxPartiesPageSize: + description: The maximum number of parties the server can return in a single + response (page). + type: integer + format: int32 + PartySignatures: + title: PartySignatures + description: Additional signatures provided by the submitting parties + type: object + properties: + signatures: + description: |- + Additional signatures provided by all individual parties + Required + type: array + items: + $ref: '#/components/schemas/SinglePartySignatures' + PrefetchContractKey: + title: PrefetchContractKey + description: Preload contracts + type: object + required: + - contractKey + properties: + templateId: + description: |- + The template of contract the client wants to prefetch. + Both package-name and package-id reference identifier formats for the template-id are supported. + Note: The package-id reference identifier format is deprecated. We plan to end support for this format in version 3.4. + + Required + type: string + contractKey: + description: |- + The key of the contract the client wants to prefetch. + Required + Prior: + title: Prior + type: object + required: + - value + properties: + value: + type: integer + format: int32 + PriorTopologySerial: + title: PriorTopologySerial + description: |- + The serial of last ``VettedPackages`` topology transaction on a given + participant and synchronizer. + type: object + required: + - serial + properties: + serial: + $ref: '#/components/schemas/Serial' + ProtoAny: + title: ProtoAny + type: object + required: + - typeUrl + - value + - unknownFields + properties: + typeUrl: + type: string + value: + type: string + unknownFields: + $ref: '#/components/schemas/UnknownFieldSet' + valueDecoded: + type: string + Reassignment: + title: Reassignment + description: Complete view of an on-ledger reassignment. + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/JsReassignment' + Reassignment1: + title: Reassignment + description: Complete view of an on-ledger reassignment. + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/JsReassignment' + ReassignmentCommand: + title: ReassignmentCommand + type: object + required: + - command + properties: + command: + $ref: '#/components/schemas/Command1' + ReassignmentCommands: + title: ReassignmentCommands + type: object + required: + - workflowId + - userId + - commandId + - submitter + - submissionId + properties: + workflowId: + description: |- + Identifier of the on-ledger workflow that this command is a part of. + Must be a valid LedgerString (as described in ``value.proto``). + Optional + type: string + userId: + description: |- + Uniquely identifies the participant user that issued the command. + Must be a valid UserIdString (as described in ``value.proto``). + Required unless authentication is used with a user token. + In that case, the token's user-id will be used for the request's user_id. + type: string + commandId: + description: |- + Uniquely identifies the command. + The triple (user_id, submitter, command_id) constitutes the change ID for the intended ledger change. + The change ID can be used for matching the intended ledger changes with all their completions. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + submitter: + description: |- + Party on whose behalf the command should be executed. + If ledger API authorization is enabled, then the authorization metadata must authorize the sender of the request + to act on behalf of the given party. + Must be a valid PartyIdString (as described in ``value.proto``). + Required + type: string + submissionId: + description: |- + A unique identifier to distinguish completions for different submissions with the same change ID. + Typically a random UUID. Applications are expected to use a different UUID for each retry of a submission + with the same change ID. + Must be a valid LedgerString (as described in ``value.proto``). + + If omitted, the participant or the committer may set a value of their choice. + Optional + type: string + commands: + description: Individual elements of this reassignment. Must be non-empty. + type: array + items: + $ref: '#/components/schemas/ReassignmentCommand' + RevokeUserRightsRequest: + title: RevokeUserRightsRequest + description: |- + Remove the rights from the set of rights granted to the user. + + Required authorization: ``HasRight(ParticipantAdmin) OR IsAuthenticatedIdentityProviderAdmin(identity_provider_id)`` + type: object + required: + - userId + - identityProviderId + properties: + userId: + description: |- + The user from whom to revoke rights. + Required + type: string + rights: + description: |- + The rights to revoke. + Optional + type: array + items: + $ref: '#/components/schemas/Right' + identityProviderId: + description: |- + The id of the ``Identity Provider`` + Optional, if not set, assume the user is managed by the default identity provider. + type: string + RevokeUserRightsResponse: + title: RevokeUserRightsResponse + type: object + properties: + newlyRevokedRights: + description: The rights that were actually revoked by the request. + type: array + items: + $ref: '#/components/schemas/Right' + Right: + title: Right + description: A right granted to a user. + type: object + required: + - kind + properties: + kind: + $ref: '#/components/schemas/Kind' + Serial: + title: Serial + oneOf: + - type: object + required: + - Empty + properties: + Empty: + $ref: '#/components/schemas/Empty6' + - type: object + required: + - NoPrior + properties: + NoPrior: + $ref: '#/components/schemas/NoPrior' + - type: object + required: + - Prior + properties: + Prior: + $ref: '#/components/schemas/Prior' + Signature: + title: Signature + type: object + required: + - format + - signature + - signedBy + - signingAlgorithmSpec + properties: + format: + description: '' + type: string + signature: + description: '' + type: string + signedBy: + description: The fingerprint/id of the keypair used to create this signature + and needed to verify. + type: string + signingAlgorithmSpec: + description: The signing algorithm specification used to produce this signature + type: string + SignedTransaction: + title: SignedTransaction + type: object + required: + - transaction + properties: + transaction: + type: string + signatures: + type: array + items: + $ref: '#/components/schemas/Signature' + SigningPublicKey: + title: SigningPublicKey + type: object + required: + - format + - keyData + - keySpec + properties: + format: + description: The serialization format of the public key + example: CRYPTO_KEY_FORMAT_DER_X509_SUBJECT_PUBLIC_KEY_INFO + type: string + keyData: + description: Serialized public key in the format specified above + type: string + keySpec: + description: The key specification + example: SIGNING_KEY_SPEC_EC_CURVE25519 + type: string + SinglePartySignatures: + title: SinglePartySignatures + description: Signatures provided by a single party + type: object + required: + - party + properties: + party: + description: |- + Submitting party + Required + type: string + signatures: + description: |- + Signatures + Required + type: array + items: + $ref: '#/components/schemas/Signature' + SubmitAndWaitForReassignmentRequest: + title: SubmitAndWaitForReassignmentRequest + description: This reassignment is executed as a single atomic update. + type: object + properties: + reassignmentCommands: + $ref: '#/components/schemas/ReassignmentCommands' + description: |- + The reassignment commands to be submitted. + Required + eventFormat: + $ref: '#/components/schemas/EventFormat' + description: |- + Optional + If no event_format provided, the result will contain no events. + The events in the result, will take shape TRANSACTION_SHAPE_ACS_DELTA. + SubmitAndWaitResponse: + title: SubmitAndWaitResponse + type: object + required: + - updateId + - completionOffset + properties: + updateId: + description: |- + The id of the transaction that resulted from the submitted command. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + completionOffset: + description: |- + The details of the offset field are described in ``community/ledger-api/README.md``. + Required + type: integer + format: int64 + SubmitReassignmentRequest: + title: SubmitReassignmentRequest + type: object + properties: + reassignmentCommands: + $ref: '#/components/schemas/ReassignmentCommands' + description: |- + The reassignment command to be submitted. + Required + SubmitReassignmentResponse: + title: SubmitReassignmentResponse + type: object + SubmitResponse: + title: SubmitResponse + type: object + SynchronizerTime: + title: SynchronizerTime + type: object + required: + - synchronizerId + properties: + synchronizerId: + description: |- + The id of the synchronizer. + Required + type: string + recordTime: + description: |- + All commands with a maximum record time below this value MUST be considered lost if their completion has not arrived before this checkpoint. + Required + type: string + TemplateFilter: + title: TemplateFilter + description: This filter matches contracts of a specific template. + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/TemplateFilter1' + TemplateFilter1: + title: TemplateFilter + description: This filter matches contracts of a specific template. + type: object + required: + - includeCreatedEventBlob + properties: + templateId: + description: |- + A template for which the payload should be included in the response. + The ``template_id`` needs to be valid: corresponding template should be defined in + one of the available packages at the time of the query. + Both package-name and package-id reference formats for the identifier are supported. + Note: The package-id reference identifier format is deprecated. We plan to end support for this format in version 3.4. + + Required + type: string + includeCreatedEventBlob: + description: |- + Whether to include a ``created_event_blob`` in the returned ``CreatedEvent``. + Use this to access the contract event payload in your API client + for submitting it as a disclosed contract with future commands. + Optional + type: boolean + Time: + title: Time + oneOf: + - type: object + required: + - Empty + properties: + Empty: + $ref: '#/components/schemas/Empty9' + - type: object + required: + - MinLedgerTimeAbs + properties: + MinLedgerTimeAbs: + $ref: '#/components/schemas/MinLedgerTimeAbs' + - type: object + required: + - MinLedgerTimeRel + properties: + MinLedgerTimeRel: + $ref: '#/components/schemas/MinLedgerTimeRel' + TopologyEvent: + title: TopologyEvent + type: object + required: + - event + properties: + event: + $ref: '#/components/schemas/TopologyEventEvent' + TopologyEventEvent: + title: TopologyEventEvent + oneOf: + - type: object + required: + - Empty + properties: + Empty: + $ref: '#/components/schemas/Empty7' + - type: object + required: + - ParticipantAuthorizationAdded + properties: + ParticipantAuthorizationAdded: + $ref: '#/components/schemas/ParticipantAuthorizationAdded' + - type: object + required: + - ParticipantAuthorizationChanged + properties: + ParticipantAuthorizationChanged: + $ref: '#/components/schemas/ParticipantAuthorizationChanged' + - type: object + required: + - ParticipantAuthorizationRevoked + properties: + ParticipantAuthorizationRevoked: + $ref: '#/components/schemas/ParticipantAuthorizationRevoked' + TopologyFormat: + title: TopologyFormat + description: A format specifying which topology transactions to include and + how to render them. + type: object + properties: + includeParticipantAuthorizationEvents: + $ref: '#/components/schemas/ParticipantAuthorizationTopologyFormat' + description: |- + Include participant authorization topology events in streams. + Optional, if unset no participant authorization topology events are emitted in the stream. + TopologyStateFilter: + title: TopologyStateFilter + description: |- + Filter the vetted packages by the participant and synchronizer that they are + hosted on. + + Empty fields are ignored, such that a ``TopologyStateFilter`` without + participant_ids and without synchronizer_ids matches a vetted package hosted + on any participant and synchronizer. + + Non-empty fields specify candidate values of which at least one must match. + If both fields are set then at least one candidate value must match from each + field. + type: object + properties: + participantIds: + description: |- + If this list is non-empty, only vetted packages hosted on participants + listed in this field match the filter. + Query the current Ledger API's participant's ID via the public + ``GetParticipantId`` command in ``PartyManagementService``. + type: array + items: + type: string + synchronizerIds: + description: |- + If this list is non-empty, only vetted packages from the topology state of + the synchronizers in this list match the filter. + type: array + items: + type: string + TopologyTransaction: + title: TopologyTransaction + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/JsTopologyTransaction' + TraceContext: + title: TraceContext + type: object + properties: + traceparent: + description: https://www.w3.org/TR/trace-context/ + type: string + tracestate: + description: '' + type: string + Transaction: + title: Transaction + description: Filtered view of an on-ledger transaction's create and archive + events. + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/JsTransaction' + TransactionFilter: + title: TransactionFilter + description: |- + Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. + Used both for filtering create and archive events as well as for filtering transaction trees. + type: object + required: + - filtersByParty + properties: + filtersByParty: + $ref: '#/components/schemas/Map_Filters' + description: |- + Each key must be a valid PartyIdString (as described in ``value.proto``). + The interpretation of the filter depends on the transaction-shape being filtered: + + 1. For **transaction trees** (used in GetUpdateTreesResponse for backwards compatibility) all party keys used as + wildcard filters, and all subtrees whose root has one of the listed parties as an informee are returned. + If there are ``CumulativeFilter``s, those will control returned ``CreatedEvent`` fields where applicable, but will + not be used for template/interface filtering. + 2. For **ledger-effects** create and exercise events are returned, for which the witnesses include at least one of + the listed parties and match the per-party filter. + 3. For **transaction and active-contract-set streams** create and archive events are returned for all contracts whose + stakeholders include at least one of the listed parties and match the per-party filter. + filtersForAnyParty: + $ref: '#/components/schemas/Filters' + description: |- + Wildcard filters that apply to all the parties existing on the participant. The interpretation of the filters is the same + with the per-party filter as described above. + TransactionFormat: + title: TransactionFormat + description: |- + A format that specifies what events to include in Daml transactions + and what data to compute and include for them. + type: object + required: + - transactionShape + properties: + eventFormat: + $ref: '#/components/schemas/EventFormat' + description: Required + transactionShape: + description: |- + What transaction shape to use for interpreting the filters of the event format. + Required + type: string + enum: + - TRANSACTION_SHAPE_UNSPECIFIED + - TRANSACTION_SHAPE_ACS_DELTA + - TRANSACTION_SHAPE_LEDGER_EFFECTS + TransactionTree: + title: TransactionTree + description: |- + Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. + Complete view of an on-ledger transaction. + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/JsTransactionTree' + TreeEvent: + title: TreeEvent + description: |- + Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. + Each tree event message type below contains a ``witness_parties`` field which + indicates the subset of the requested parties that can see the event + in question. + + Note that transaction trees might contain events with + _no_ witness parties, which were included simply because they were + children of events which have witnesses. + oneOf: + - type: object + required: + - CreatedTreeEvent + properties: + CreatedTreeEvent: + $ref: '#/components/schemas/CreatedTreeEvent' + - type: object + required: + - ExercisedTreeEvent + properties: + ExercisedTreeEvent: + $ref: '#/components/schemas/ExercisedTreeEvent' + Tuple2_String_String: + title: Tuple2_String_String + type: array + maxItems: 2 + minItems: 2 + items: + type: string + UnassignCommand: + title: UnassignCommand + description: Unassign a contract + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/UnassignCommand1' + UnassignCommand1: + title: UnassignCommand + description: Unassign a contract + type: object + required: + - contractId + - source + - target + properties: + contractId: + description: |- + The ID of the contract the client wants to unassign. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + source: + description: |- + The ID of the source synchronizer + Must be a valid synchronizer id + Required + type: string + target: + description: |- + The ID of the target synchronizer + Must be a valid synchronizer id + Required + type: string + UnassignedEvent: + title: UnassignedEvent + description: Records that a contract has been unassigned, and it becomes unusable + on the source synchronizer + type: object + required: + - reassignmentId + - contractId + - source + - target + - submitter + - reassignmentCounter + - packageName + - offset + - nodeId + properties: + reassignmentId: + description: |- + The ID of the unassignment. This needs to be used as an input for a assign ReassignmentCommand. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + contractId: + description: |- + The ID of the reassigned contract. + Must be a valid LedgerString (as described in ``value.proto``). + Required + type: string + templateId: + description: |- + The template of the reassigned contract. + The identifier uses the package-id reference format. + + Required + type: string + source: + description: |- + The ID of the source synchronizer + Must be a valid synchronizer id + Required + type: string + target: + description: |- + The ID of the target synchronizer + Must be a valid synchronizer id + Required + type: string + submitter: + description: |- + Party on whose behalf the unassign command was executed. + Empty if the unassignment happened offline via the repair service. + Must be a valid PartyIdString (as described in ``value.proto``). + Optional + type: string + reassignmentCounter: + description: |- + Each corresponding assigned and unassigned event has the same reassignment_counter. This strictly increases + with each unassign command for the same contract. Creation of the contract corresponds to reassignment_counter + equals zero. + Required + type: integer + format: int64 + assignmentExclusivity: + description: |- + Assignment exclusivity + Before this time (measured on the target synchronizer), only the submitter of the unassignment can initiate the assignment + Defined for reassigning participants. + Optional + type: string + witnessParties: + description: |- + The parties that are notified of this event. + Required + type: array + items: + type: string + packageName: + description: |- + The package name of the contract. + Required + type: string + offset: + description: |- + The offset of origin. + Offsets are managed by the participant nodes. + Reassignments can thus NOT be assumed to have the same offsets on different participant nodes. + Required, it is a valid absolute offset (positive integer) + type: integer + format: int64 + nodeId: + description: |- + The position of this event in the originating reassignment. + Node IDs are not necessarily equal across participants, + as these may see different projections/parts of reassignments. + Required, must be valid node ID (non-negative integer) + type: integer + format: int32 + UnknownFieldSet: + title: UnknownFieldSet + type: object + required: + - fields + properties: + fields: + $ref: '#/components/schemas/Map_Int_Field' + Unvet: + title: Unvet + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/Unvet1' + Unvet1: + title: Unvet + type: object + properties: + packages: + type: array + items: + $ref: '#/components/schemas/VettedPackagesRef' + Update: + title: Update + oneOf: + - type: object + required: + - OffsetCheckpoint + properties: + OffsetCheckpoint: + $ref: '#/components/schemas/OffsetCheckpoint2' + - type: object + required: + - Reassignment + properties: + Reassignment: + $ref: '#/components/schemas/Reassignment' + - type: object + required: + - TopologyTransaction + properties: + TopologyTransaction: + $ref: '#/components/schemas/TopologyTransaction' + - type: object + required: + - Transaction + properties: + Transaction: + $ref: '#/components/schemas/Transaction' + Update1: + title: Update + oneOf: + - type: object + required: + - OffsetCheckpoint + properties: + OffsetCheckpoint: + $ref: '#/components/schemas/OffsetCheckpoint3' + - type: object + required: + - Reassignment + properties: + Reassignment: + $ref: '#/components/schemas/Reassignment1' + - type: object + required: + - TransactionTree + properties: + TransactionTree: + $ref: '#/components/schemas/TransactionTree' + UpdateFormat: + title: UpdateFormat + description: A format specifying what updates to include and how to render them. + type: object + properties: + includeTransactions: + $ref: '#/components/schemas/TransactionFormat' + description: |- + Include Daml transactions in streams. + Optional, if unset, no transactions are emitted in the stream. + includeReassignments: + $ref: '#/components/schemas/EventFormat' + description: |- + Include (un)assignments in the stream. + The events in the result take the shape TRANSACTION_SHAPE_ACS_DELTA. + Optional, if unset, no (un)assignments are emitted in the stream. + includeTopologyEvents: + $ref: '#/components/schemas/TopologyFormat' + description: |- + Include topology events in streams. + Optional, if unset no topology events are emitted in the stream. + UpdateIdentityProviderConfigRequest: + title: UpdateIdentityProviderConfigRequest + type: object + properties: + identityProviderConfig: + $ref: '#/components/schemas/IdentityProviderConfig' + description: |- + The identity provider config to update. + Required, + Modifiable + updateMask: + $ref: '#/components/schemas/FieldMask' + description: |- + An update mask specifies how and which properties of the ``IdentityProviderConfig`` message are to be updated. + An update mask consists of a set of update paths. + A valid update path points to a field or a subfield relative to the ``IdentityProviderConfig`` message. + A valid update mask must: + + 1. contain at least one update path, + 2. contain only valid update paths. + + Fields that can be updated are marked as ``Modifiable``. + For additional information see the documentation for standard protobuf3's ``google.protobuf.FieldMask``. + Required + UpdateIdentityProviderConfigResponse: + title: UpdateIdentityProviderConfigResponse + type: object + properties: + identityProviderConfig: + $ref: '#/components/schemas/IdentityProviderConfig' + description: Updated identity provider config + UpdatePartyDetailsRequest: + title: UpdatePartyDetailsRequest + description: 'Required authorization: ``HasRight(ParticipantAdmin) OR IsAuthenticatedIdentityProviderAdmin(party_details.identity_provider_id)``' + type: object + properties: + partyDetails: + $ref: '#/components/schemas/PartyDetails' + description: |- + Party to be updated + Required, + Modifiable + updateMask: + $ref: '#/components/schemas/FieldMask' + description: |- + An update mask specifies how and which properties of the ``PartyDetails`` message are to be updated. + An update mask consists of a set of update paths. + A valid update path points to a field or a subfield relative to the ``PartyDetails`` message. + A valid update mask must: + + 1. contain at least one update path, + 2. contain only valid update paths. + + Fields that can be updated are marked as ``Modifiable``. + An update path can also point to non-``Modifiable`` fields such as 'party' and 'local_metadata.resource_version' + because they are used: + + 1. to identify the party details resource subject to the update, + 2. for concurrent change control. + + An update path can also point to non-``Modifiable`` fields such as 'is_local' + as long as the values provided in the update request match the server values. + Examples of update paths: 'local_metadata.annotations', 'local_metadata'. + For additional information see the documentation for standard protobuf3's ``google.protobuf.FieldMask``. + For similar Ledger API see ``com.daml.ledger.api.v2.admin.UpdateUserRequest``. + Required + UpdatePartyDetailsResponse: + title: UpdatePartyDetailsResponse + type: object + properties: + partyDetails: + $ref: '#/components/schemas/PartyDetails' + description: Updated party details + UpdateUserIdentityProviderIdRequest: + title: UpdateUserIdentityProviderIdRequest + description: 'Required authorization: ``HasRight(ParticipantAdmin)``' + type: object + required: + - userId + - sourceIdentityProviderId + - targetIdentityProviderId + properties: + userId: + description: User to update + type: string + sourceIdentityProviderId: + description: Current identity provider ID of the user + type: string + targetIdentityProviderId: + description: Target identity provider ID of the user + type: string + UpdateUserIdentityProviderIdResponse: + title: UpdateUserIdentityProviderIdResponse + type: object + UpdateUserRequest: + title: UpdateUserRequest + description: 'Required authorization: ``HasRight(ParticipantAdmin) OR IsAuthenticatedIdentityProviderAdmin(user.identity_provider_id)``' + type: object + properties: + user: + $ref: '#/components/schemas/User' + description: |- + The user to update. + Required, + Modifiable + updateMask: + $ref: '#/components/schemas/FieldMask' + description: |- + An update mask specifies how and which properties of the ``User`` message are to be updated. + An update mask consists of a set of update paths. + A valid update path points to a field or a subfield relative to the ``User`` message. + A valid update mask must: + + 1. contain at least one update path, + 2. contain only valid update paths. + + Fields that can be updated are marked as ``Modifiable``. + An update path can also point to a non-``Modifiable`` fields such as 'id' and 'metadata.resource_version' + because they are used: + + 1. to identify the user resource subject to the update, + 2. for concurrent change control. + + Examples of valid update paths: 'primary_party', 'metadata', 'metadata.annotations'. + For additional information see the documentation for standard protobuf3's ``google.protobuf.FieldMask``. + For similar Ledger API see ``com.daml.ledger.api.v2.admin.UpdatePartyDetailsRequest``. + Required + UpdateUserResponse: + title: UpdateUserResponse + type: object + properties: + user: + $ref: '#/components/schemas/User' + description: Updated user + UpdateVettedPackagesRequest: + title: UpdateVettedPackagesRequest + type: object + required: + - dryRun + - synchronizerId + properties: + changes: + description: |- + Changes to apply to the current vetting state of the participant on the + specified synchronizer. The changes are applied in order. + Any package not changed will keep their previous vetting state. + type: array + items: + $ref: '#/components/schemas/VettedPackagesChange' + dryRun: + description: |- + If dry_run is true, then the changes are only prepared, but not applied. If + a request would trigger an error when run (e.g. TOPOLOGY_DEPENDENCIES_NOT_VETTED), + it will also trigger an error when dry_run. + + Use this flag to preview a change before applying it. + type: boolean + synchronizerId: + description: |- + If set, the requested changes will take place on the specified + synchronizer. If synchronizer_id is unset and the participant is only + connected to a single synchronizer, that synchronizer will be used by + default. If synchronizer_id is unset and the participant is connected to + multiple synchronizers, the request will error out with + PACKAGE_SERVICE_CANNOT_AUTODETECT_SYNCHRONIZER. + + Optional + type: string + expectedTopologySerial: + $ref: '#/components/schemas/PriorTopologySerial' + description: |- + The serial of the last ``VettedPackages`` topology transaction of this + participant and on this synchronizer. + + Execution of the request fails if this is not correct. Use this to guard + against concurrent changes. + + If left unspecified, no validation is done against the last transaction's + serial. + + Optional + updateVettedPackagesForceFlags: + description: |- + Controls whether potentially unsafe vetting updates are allowed. + + Optional, defaults to FORCE_FLAG_UNSPECIFIED. + type: array + items: + type: string + enum: + - UPDATE_VETTED_PACKAGES_FORCE_FLAG_UNSPECIFIED + - UPDATE_VETTED_PACKAGES_FORCE_FLAG_ALLOW_VET_INCOMPATIBLE_UPGRADES + - UPDATE_VETTED_PACKAGES_FORCE_FLAG_ALLOW_UNVETTED_DEPENDENCIES + UpdateVettedPackagesResponse: + title: UpdateVettedPackagesResponse + type: object + properties: + pastVettedPackages: + $ref: '#/components/schemas/VettedPackages' + description: |- + All vetted packages on this participant and synchronizer, before the + specified changes. Empty if no vetting state existed beforehand. + newVettedPackages: + $ref: '#/components/schemas/VettedPackages' + description: All vetted packages on this participant and synchronizer, after + the specified changes. + UploadDarFileResponse: + title: UploadDarFileResponse + description: A message that is received when the upload operation succeeded. + type: object + User: + title: User + description: |2- + Users and rights + ///////////////// + Users are used to dynamically manage the rights given to Daml applications. + They are stored and managed per participant node. + type: object + required: + - id + - primaryParty + - isDeactivated + - identityProviderId + properties: + id: + description: |- + The user identifier, which must be a non-empty string of at most 128 + characters that are either alphanumeric ASCII characters or one of the symbols "@^$.!`-#+'~_|:". + Required + type: string + primaryParty: + description: |- + The primary party as which this user reads and acts by default on the ledger + *provided* it has the corresponding ``CanReadAs(primary_party)`` or + ``CanActAs(primary_party)`` rights. + Ledger API clients SHOULD set this field to a non-empty value for all users to + enable the users to act on the ledger using their own Daml party. + Users for participant administrators MAY have an associated primary party. + Optional, + Modifiable + type: string + isDeactivated: + description: |- + When set, then the user is denied all access to the Ledger API. + Otherwise, the user has access to the Ledger API as per the user's rights. + Optional, + Modifiable + type: boolean + metadata: + $ref: '#/components/schemas/ObjectMeta' + description: |- + The metadata of this user. + Note that the ``metadata.resource_version`` tracks changes to the properties described by the ``User`` message and not the user's rights. + Optional, + Modifiable + identityProviderId: + description: |- + The ID of the identity provider configured by ``Identity Provider Config`` + Optional, if not set, assume the user is managed by the default identity provider. + type: string + UserManagementFeature: + title: UserManagementFeature + type: object + required: + - supported + - maxRightsPerUser + - maxUsersPageSize + properties: + supported: + description: Whether the Ledger API server provides the user management + service. + type: boolean + maxRightsPerUser: + description: |- + The maximum number of rights that can be assigned to a single user. + Servers MUST support at least 100 rights per user. + A value of 0 means that the server enforces no rights per user limit. + type: integer + format: int32 + maxUsersPageSize: + description: |- + The maximum number of users the server can return in a single response (page). + Servers MUST support at least a 100 users per page. + A value of 0 means that the server enforces no page size limit. + type: integer + format: int32 + Vet: + title: Vet + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/Vet1' + Vet1: + title: Vet + type: object + properties: + packages: + type: array + items: + $ref: '#/components/schemas/VettedPackagesRef' + newValidFromInclusive: + type: string + newValidUntilExclusive: + type: string + VettedPackage: + title: VettedPackage + description: |- + A package that is vetting on a given participant and synchronizer, + modelled after ``VettedPackage`` in `topology.proto `_, + enriched with the package name and version. + type: object + required: + - packageId + - packageName + - packageVersion + properties: + packageId: + description: Package ID of this package. Always present. + type: string + validFromInclusive: + description: |- + The time from which this package is vetted. Empty if vetting time has no + lower bound. + type: string + validUntilExclusive: + description: |- + The time until which this package is vetted. Empty if vetting time has no + upper bound. + type: string + packageName: + description: |- + Name of this package. + Only available if the package has been uploaded to the current participant. + If unavailable, is empty string. + type: string + packageVersion: + description: |- + Version of this package. + Only available if the package has been uploaded to the current participant. + If unavailable, is empty string. + type: string + VettedPackages: + title: VettedPackages + description: |- + The list of packages vetted on a given participant and synchronizer, modelled + after ``VettedPackages`` in `topology.proto `_. + The list only contains packages that matched a filter in the query that + originated it. + type: object + required: + - participantId + - synchronizerId + - topologySerial + properties: + packages: + description: |- + Sorted by package_name and package_version where known, and package_id as a + last resort. + type: array + items: + $ref: '#/components/schemas/VettedPackage' + participantId: + description: Participant on which these packages are vetted. Always present. + type: string + synchronizerId: + description: Synchronizer on which these packages are vetted. Always present. + type: string + topologySerial: + description: |- + Serial of last ``VettedPackages`` topology transaction of this participant + and on this synchronizer. Always present. + type: integer + format: int32 + VettedPackagesChange: + title: VettedPackagesChange + description: A change to the set of vetted packages. + type: object + required: + - operation + properties: + operation: + $ref: '#/components/schemas/Operation' + VettedPackagesRef: + title: VettedPackagesRef + description: |- + A reference to identify one or more packages. + + A reference matches a package if its ``package_id`` matches the package's ID, + its ``package_name`` matches the package's name, and its ``package_version`` + matches the package's version. If an attribute in the reference is left + unspecified (i.e. as an empty string), that attribute is treated as a + wildcard. At a minimum, ``package_id`` or the ``package_name`` must be + specified. + + If a reference does not match any package, the reference is considered + unresolved and the entire update request is rejected. + type: object + required: + - packageId + - packageName + - packageVersion + properties: + packageId: + description: |- + Package's package id must be the same as this field. + Optional + type: string + packageName: + description: |- + Package's name must be the same as this field. + Optional + type: string + packageVersion: + description: |- + Package's version must be the same as this field. + Optional + type: string + WildcardFilter: + title: WildcardFilter + description: This filter matches all templates. + type: object + required: + - value + properties: + value: + $ref: '#/components/schemas/WildcardFilter1' + WildcardFilter1: + title: WildcardFilter + description: This filter matches all templates. + type: object + required: + - includeCreatedEventBlob + properties: + includeCreatedEventBlob: + description: |- + Whether to include a ``created_event_blob`` in the returned ``CreatedEvent``. + Use this to access the contract create event payload in your API client + for submitting it as a disclosed contract with future commands. + Optional + type: boolean + securitySchemes: + apiKeyAuth: + type: apiKey + description: Ledger API standard JWT token (websocket) + name: Sec-WebSocket-Protocol + in: header + httpAuth: + type: http + description: Ledger API standard JWT token + scheme: bearer + diff --git a/sdk/compatibility/bazel_tools/data_dependencies/codegen_test/package.json b/sdk/compatibility/bazel_tools/data_dependencies/codegen_test/package.json new file mode 100644 index 000000000000..5859838764ef --- /dev/null +++ b/sdk/compatibility/bazel_tools/data_dependencies/codegen_test/package.json @@ -0,0 +1,27 @@ +{ + "name": "typescript", + "version": "1.0.0", + "main": "index.js", + "scripts": { + "build": "openapi-typescript openapi.yaml -o ./codegen/api/ledger-api.d.ts && tsc" + }, + "keywords": [], + "author": "", + "description": "", + "devDependencies": { + "@types/node": "^22.13.13", + "openapi-typescript": "^7.6.1", + "typescript": "^5.8.2" + }, + "dependencies": { + "@daml/types": "^2.10.0", + "@types/lodash": "^4.17.16", + "cli-table3": "^0.6.5", + "lodash": "^4.17.21", + "openapi-fetch": "^0.13.5", + "tsconfig-paths": "^4.2.0", + "@daml.js/codegen-dep-0.0.1": "file:./codegen/codegen-dep-0.0.1", + "@daml.js/codegen-main-0.0.1": "file:./codegen/codegen-main-0.0.1", + "@daml.js/ghc-stdlib-DA-Internal-Template-1.0.0": "file:./codegen//ghc-stdlib-DA-Internal-Template-1.0.0" + } +} diff --git a/sdk/compatibility/bazel_tools/data_dependencies/codegen_test/tsconfig.json b/sdk/compatibility/bazel_tools/data_dependencies/codegen_test/tsconfig.json new file mode 100644 index 000000000000..25476e0a670a --- /dev/null +++ b/sdk/compatibility/bazel_tools/data_dependencies/codegen_test/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "es2016", + "module": "commonjs", + "rootDir": "./src", + "paths": { + "@daml.js/*": [ + "./codegen/*" + ] + }, + "outDir": "./dist/", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true + } +} diff --git a/sdk/compatibility/bazel_tools/data_dependencies/data_dependencies.bzl b/sdk/compatibility/bazel_tools/data_dependencies/data_dependencies.bzl index 12663b8278f9..5cbd6bd799fd 100644 --- a/sdk/compatibility/bazel_tools/data_dependencies/data_dependencies.bzl +++ b/sdk/compatibility/bazel_tools/data_dependencies/data_dependencies.bzl @@ -2,6 +2,13 @@ # SPDX-License-Identifier: Apache-2.0 load("//bazel_tools/daml_script:daml_script.bzl", "daml_script_test") +load("//bazel_tools:testing.bzl", "extra_tags") +load("@daml//bazel_tools/sh:sh.bzl", "sh_inline_test") +load( + "@daml//bazel_tools/client_server:client_server_test.bzl", + "client_server_test", + "client_server_test_canton_sh", +) def _build_dar( name, @@ -130,17 +137,106 @@ def data_dependencies_upgrade_test(old_sdk_version, new_sdk_version): sdk_version = new_sdk_version, ) -# regression test for https://github.com/digital-asset/daml/issues/14291 -def data_dependencies_daml_script_test(old_sdk_version): - data_dep_name = "data-dependencies-script1-{old_sdk_version}".format( +def data_dependencies_codegen_test(new_sdk_version, old_sdk_version): + name = "data-dependencies-codegen-{new_sdk_version}-depends-on-{old_sdk_version}".format( old_sdk_version = old_sdk_version, + new_sdk_version = new_sdk_version, + ) + + _build_dar( + name = name + "-main", + package_name = "codegen-main", + data_dependencies = [ + ":" + name + "-dep", + ], + sdk_version = new_sdk_version, + srcs = ["//bazel_tools/data_dependencies:codegen_test/main/Main.daml"], + ) + + _build_dar( + name = name + "-dep", + package_name = "codegen-dep", + data_dependencies = [], + sdk_version = old_sdk_version, + srcs = ["//bazel_tools/data_dependencies:codegen_test/dep/Dep.daml"], + ) + + daml_new = "@daml-sdk-{new_sdk_version}//:daml".format( + new_sdk_version = new_sdk_version, + ) + + client_server_test_canton_sh( + name = name, + data = [ + daml_new, + ":" + name + "-main.dar", + "//bazel_tools/data_dependencies:codegen_test/openapi.yaml", + "//bazel_tools/data_dependencies:codegen_test/package.json", + "//bazel_tools/data_dependencies:codegen_test/tsconfig.json", + "//bazel_tools/data_dependencies:codegen_test/index.ts", + "@yarn//:yarn", + "@nodejs//:node", + "@nodejs//:npm", + "@head_sdk//:community_app_deploy.jar", + ], + additional_canton_args = ["--json-api-port", "7575"], + tags = extra_tags(old_sdk_version, new_sdk_version), + src = """\ +yarn=$$(canonicalize_rlocation $$(get_exe $(rootpaths {yarn}))) +node=$$(canonicalize_rlocation $$(get_exe $(rootpaths {node}))) +npm=$$(canonicalize_rlocation $$(get_exe $(rootpaths {npm}))) +canton_jar=$$(canonicalize_rlocation $$(get_exe $(rootpaths {community_app_deploy}))) + +daml_new=$$(canonicalize_rlocation $$(get_exe $(rootpaths {daml_new}))) + +openapi=$$(canonicalize_rlocation $$(get_exe $(rootpaths {openapi}))) +packagejson=$$(canonicalize_rlocation $$(get_exe $(rootpaths {packagejson}))) +tsconfig=$$(canonicalize_rlocation $$(get_exe $(rootpaths {tsconfig}))) +indexts=$$(canonicalize_rlocation $$(get_exe $(rootpaths {indexts}))) + +mkdir -p ./client/src +cp $$openapi ./client +cp $$packagejson ./client +cp $$tsconfig ./client + +cp $$indexts ./client/src +cp $$(canonicalize_rlocation $(rootpaths {dar})) ./client/target.dar + +$$daml_new codegen js -o ./client/codegen ./client/target.dar + +cd client +rm -rf dist +$$yarn install +$$npm run build +$$node dist/index.js +""".format( + daml_new = daml_new, + dar = ":" + name + "-main.dar", + old_sdk_version = old_sdk_version, + new_sdk_version = new_sdk_version, + openapi = "//bazel_tools/data_dependencies:codegen_test/openapi.yaml", + packagejson = "//bazel_tools/data_dependencies:codegen_test/package.json", + tsconfig = "//bazel_tools/data_dependencies:codegen_test/tsconfig.json", + indexts = "//bazel_tools/data_dependencies:codegen_test/index.ts", + yarn = "@yarn//:yarn", + node = "@nodejs//:node", + npm = "@nodejs//:npm", + npx = "@nodejs//:npx_bin", + community_app_deploy = "@head_sdk//:community_app_deploy.jar", + ), ) - main_name = "data-dependencies-script2-from-{old_sdk_version}".format( + +# regression test for https://github.com/digital-asset/daml/issues/14291 +def data_dependencies_daml_script_test(old_sdk_version, new_sdk_version): + name = "data-dependencies-daml-script-{new_sdk_version}-depends-on-{old_sdk_version}".format( old_sdk_version = old_sdk_version, + new_sdk_version = new_sdk_version, ) + main_name = name + "-main" + dep_name = name + "-dep" _build_dar( - name = data_dep_name, + name = dep_name, package_name = "data-dependencies-script1", srcs = ["//bazel_tools/data_dependencies:daml_script_test/Dep.daml"], sdk_version = old_sdk_version, @@ -152,33 +248,29 @@ def data_dependencies_daml_script_test(old_sdk_version): package_name = "data-dependencies-script2", srcs = ["//bazel_tools/data_dependencies:daml_script_test/Main.daml"], data_dependencies = [ - data_dep_name, + dep_name, ], - sdk_version = "0.0.0", + sdk_version = new_sdk_version, ) _validate_dar( name = main_name + "-validate", dar_name = main_name, - sdk_version = "0.0.0", + sdk_version = new_sdk_version, ) daml_script_test( - name = "data-dependencies-daml-script-from-{old_sdk_version}-test-1".format( - old_sdk_version = old_sdk_version, - ), - runner_version = "0.0.0", - compiler_version = "0.0.0", + name = name + "-test-1", + runner_version = new_sdk_version, + compiler_version = new_sdk_version, compiled_dar = main_name, script_name = "Main:run1", ) daml_script_test( - name = "data-dependencies-daml-script-from-{old_sdk_version}-test-2".format( - old_sdk_version = old_sdk_version, - ), - runner_version = "0.0.0", - compiler_version = "0.0.0", + name = name + "-test-2", + runner_version = new_sdk_version, + compiler_version = new_sdk_version, compiled_dar = main_name, script_name = "Main:run2", ) diff --git a/sdk/compatibility/build-release-artifacts.sh b/sdk/compatibility/build-release-artifacts.sh index 4a9c1727da20..02ff91030e62 100755 --- a/sdk/compatibility/build-release-artifacts.sh +++ b/sdk/compatibility/build-release-artifacts.sh @@ -24,7 +24,9 @@ bazel build \ --tool_java_runtime_version=nixpkgs_java_17 \ --tool_java_language_version=17 \ //release:sdk-release-tarball \ - //daml-assistant:daml + //daml-assistant:daml \ + //canton:community_app_deploy.jar +cp -f bazel-bin/canton/community_app_deploy.jar "$HEAD_TARGET_DIR" cp -f bazel-bin/release/sdk-release-tarball-ce.tar.gz "$HEAD_TARGET_DIR" cp -f bazel-bin/daml-assistant/daml "$HEAD_TARGET_DIR" diff --git a/sdk/compatibility/head_sdk/BUILD b/sdk/compatibility/head_sdk/BUILD index ea1410d68917..c314b824c03e 100644 --- a/sdk/compatibility/head_sdk/BUILD +++ b/sdk/compatibility/head_sdk/BUILD @@ -1,6 +1,7 @@ load("@os_info//:os_info.bzl", "is_windows") exports_files([ + "community_app_deploy.jar", "daml" if not is_windows else "daml.exe", "sdk-release-tarball-ce.tar.gz", ])