Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

kvutils: Refined transaction validation [KVL-1015] #10066

Merged
merged 20 commits into from
Jul 21, 2021

Conversation

hubert-da
Copy link
Collaborator

@hubert-da hubert-da commented Jun 21, 2021

Implements transaction validation as described in the comment: #10066 (comment)

Pull Request Checklist

  • Read and understand the contribution guidelines
  • Include appropriate tests
  • Set a descriptive title and thorough description
  • Add a reference to the issue this PR will solve, if appropriate
  • Include changelog additions in one or more commit message bodies between the CHANGELOG_BEGIN and CHANGELOG_END tags
  • Normal production system change, include purpose of change in description

NOTE: CI is not automatically run on non-members pull-requests for security
reasons. The reviewer will have to comment with /AzurePipelines run to
trigger the build.

@hubert-da hubert-da marked this pull request as ready for review June 22, 2021 15:20
@hubert-da hubert-da requested review from a user and cocreature June 22, 2021 15:20
@@ -42,18 +42,18 @@ private[transaction] object ContractKeysValidation {
contractKeyDamlStateKeysToContractIds.map(m => m._1.getContractKey -> m._2)

for {
stateAfterMonotonicityCheck <- checkContractKeysCausalMonotonicity(
stateAfterConsistencyChecks <- performTraversalContractKeysChecks(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As far as I can tell with this change our checks are now ordered as follows:

  1. Check key consistency for all nodes that have a key
  2. Check key monotonicity
  3. Reinterpret with the keys & cid lookups being checked via contractIsActive which not only checks activeness but also monotonicity. However, here we do not blow up with a monotonicity error. Instead we blow up with Disputed.

I think this is fine if you have an honest submitter and will only produce bad error messages but there are a few points that worry me:

  1. You do checks on inputs before checking that the transaction is okay, e.g., well authorized. This seems potentially leaky. E.g., I send you a negative lookup by key that is ill-authorized. You tell me that there is a mismatch and the key actually exists. Similarly you can leak activeness checks. If you trust your participant that may be not an issue but it’s at least sketchy.
  2. You report monotonicity errors differently for keys & contract ids. For keys there is a dedicated error. For contract ids they are folded under general "transaction mismatch" so Disputed afaict. Not necessarily an issue I think but at least confusing.
  3. You mix up activeness of contract ids with monotonicity afaict and both are handled implicitly during reinterpretation. That seems potentially problematic. Activeness can be a race. Monotonicity is a malicious participant.Both are reported the same way.

As mentioned above, I’m not sure you can exploit any of this without a malicious participant but I think the same was also true for the previous order of the checks so if we fix this it might be worth fixing it properly.

I’m by no means an expert on kvutils validation so take all of this with a grain of salt. I might just be missing something and this is all perfectly sensible but until someone explains it to me I’m at least not comfortable approving it.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, @cocreature. I had a strong conviction that the model conformance was checked before contract key consistency that I read past it.

For this PR: The order of the steps validate_contract_keys and validate_model_conformance should be changed.

For a later review: I think there should be a single monotonicity check for both contracts and keys after the model validation, and the contract lookup during interpretation shouldn't do a ledger effective time check.

Copy link
Contributor

@cocreature cocreature Jun 23, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you do model conformance before contract keys validation but keep the consistency check during interpretation, then the example that produced causal monotonicity violation will fail with Disputed I believe which seems arguably worse.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah no I think works for the case we encountered but breaks others. This is what we saw:

  1. During submission, the key is inactive.
  2. During model conformance during validation the key is active. The arguably incorrectly placed ledger effective time check however saves you and means interpretation will still treat the key as inactive.
  3. So because of that you get past model conformance and than we fail with InconsistentKeys.

However now consider a case where in 2 the key is active and passes the monotonicity check. This will now blow up with Disputed even though it was just a race.

What seems questionable here to me (and I could just be missing something) is that you check model conformance with the current ledger state instead of the one during submission. If you look at the ledger model, model conformance does not depend on the ledger state. It is a property of a transaction.

So I think the checks maybe should look like the following:

  1. Check conformance against the ledger state at submission. Reinterpret using that state, diff. Monotonicity checks can be done here but again they should be done against the legder state at submission not the one during validation.
  2. Assuming the transaction is conformant, check consistency of key & contract ids.

Copy link
Contributor

@gerolf-da gerolf-da Jul 6, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary of a conversation with @cocreature, @hubert-da, @gerolf-da:

We need to do two types of checks:

  1. check the conformance of the transaction with the Daml model purely in terms of the transaction inputs itself.
    A violation in this category generally falls into the Disputed class of errors.
  2. check that the transaction is consistent with the current ledger state
    A violation in this category generally falls into the Inconsistent class of errors.

Transaction model conformance

  1. Validate model conformance of the transaction

    • use the contract keys of the transaction (Transaction#contractKeyInput) as input to TransactionCommitter#lookupKey instead of the contract keys from the commit context
    • because fetch nodes don't actually contain the contract, we still need to get the contracts from the commit context, but we must not check for activeness or causal monotonicity in TransactionCommitter#lookupContract during re-interpretation.
    • Any error in validation should result in Disputed.
  2. check causal monotonicity based on contracts used in the transaction (GenTransaction#inputContracts, contains contracts used in exercise, fetch, lookupByKey)

    • violations of causal monotonicity should result in InvalidLedgerTime.

Check that transaction is still valid given the ledger state

  1. check consistency of keys
    • check that keys in the transaction are the same as keys in state (already done in ContractKeysValidation#performTraversalContractKeysChecks)
  2. check consistency of contracts
    • all contracts used in the transaction (GenTransaction#inputContracts) are still active. A violation results in the error Inconsistent.

Cleanup

  • Remove KeyMonotonicityValidation, it is superseded by the causal monotonicity check during model conformance validation.

Ledger API Test Tool

The above changes will result in different errors than what the ledger api test tool currently checks.
We should also document in the release notes in which cases the error is now different.


@andreaslochbihler-da, @cocreature, @miklos-da: Could you please review this summary and point out any issues or give a 👍?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think they should be InvalidLedgerTime at least until we fixed the issue around divulged contracts I mentioned above. Otherwise you can get disputed from an honest submitter which is bad imho. Once that is fixed I agree with you that they can be treated the same.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the reminder, @cocreature.
There is a scenario where a participant could submit a transaction that violates causal monotonicity:

  1. The participant's system clock lags behind in time of the committer's system clock.
  2. The transaction only references divulged contracts, for which the participant doesn't (yet) keep a "substitute" ledger effective time (e.g. the LET from the divulging transaction), that were created and divulged within the window of the participants clock drift.
  3. Therefore the participant will use its (lagging) system clock to determine LET and the contract's actual LET will be in the "future" compared to the submitted ledger effective time of the transaction.

I don't think we should fix this issue as part of KVL-990. And it already happens currently as well. So technically the situation doesn't get worse.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fine to leave it out as long as we don’t report is as Disputed which would be worse or at least different from the current state.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a scenario where a participant could submit a transaction that violates causal monotonicity:

Oh right. I forgot that the participant server doesn't keep track of ledger create time for divulged contracts (something we do in Canton).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fine to leave it out as long as we don’t report is as Disputed which would be worse or at least different from the current state.

Currently, prior to the change described above, this case would also end up with a Disputed error.

@hubert-da hubert-da marked this pull request as draft July 8, 2021 09:27
@hubert-da hubert-da changed the title Check contract key consistency before causal monotonicity [KVL-990] kvutils: Refined transaction validation [KVL-1015] Jul 8, 2021
@hubert-da hubert-da force-pushed the hubert-da/key-validation-fix branch 2 times, most recently from 40cec9a to 26c412c Compare July 14, 2021 08:05
@hubert-da hubert-da force-pushed the hubert-da/key-validation-fix branch from c59cffa to d8e5f4b Compare July 14, 2021 12:50
@hubert-da hubert-da marked this pull request as ready for review July 14, 2021 13:51
@hubert-da
Copy link
Collaborator Author

hubert-da commented Jul 15, 2021

@gerolf-da @cocreature @fabiotudone-da JFYI I addressed the review comments

@hubert-da hubert-da requested a review from nicu-da as a code owner July 19, 2021 12:07
# Conflicts:
#	ledger/participant-state/kvutils/src/main/scala/com/daml/ledger/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Copy link
Contributor

@cocreature cocreature left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work, thank you!

# Conflicts:
#	ledger/participant-state/kvutils/src/main/scala/com/daml/ledger/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
@hubert-da hubert-da merged commit 628aa22 into main Jul 21, 2021
@hubert-da hubert-da deleted the hubert-da/key-validation-fix branch July 21, 2021 12:20
azure-pipelines bot pushed a commit that referenced this pull request Jul 28, 2021
This PR has been created by a script, which is not very smart
and does not have all the context. Please do double-check that
the version prefix is correct before merging.

@remyhaemmerle-da is in charge of this release.

Commit log:
```
b5e9d86 Moved DamlSubmission* into separate proto file [KVL-980] (#10362)
0da814d Let stable packages bypass LF version restrictions. (#10377)
c97cbca [JSON-API] Validate schema version & add minimal options for schema creation (#10374)
ebb8fab Add a ContractDao benchmark for payload queries (#10426)
85af078 LF: parser for LF versions (#10424)
b976c9c Disable autocommit for hikariCP for http-json-api db conn (#10427)
3ca46a4 Removed unused import. (#10425)
4d12493 Introduce buf checks [KVL-980] (#10411)
1c4ae50 Revert "Upgrade hikari to latest jdk8 version (#10406)" (#10421)
fe1b642 Don't fail if logs directory exists already (#10423)
7c88b56 participant-integration-api: Fix completion debug log output. (#10415)
fc305e6 [JSON-API] Shutdown on startup if the db connection is invalid (#10360)
6db5869 Update vcredist (#10417)
4b55f1a Connection pool for Contract Dao (#10359)
72cf2f3 LF: replace bazel keyword stable by default (#10410)
2bdcb7b update NOTICES file (#10414)
39c6e0b Fix oracle message too long error (#10413)
2094e24 Indexer ValidateAndWaitOnly startup mode for canton participant HA (#10290)
ad13a86 Windows dev-env Powershell 7 compatibility (#10408)
3cedd83 Easy to parse ledger-api-bench-tool logs (#10320)
16ff20c Fix links in changelog (#10409)
b325e8a participant-state: Remove `WriteService#rejectSubmission`. (#10407)
9be520c Keep the participant-state API prefixed. [KVL-1002] (#10405)
d88dc71 Upgrade hikari to latest jdk8 version (#10406)
8b337bd Publish ledger-indexer-benchmark (#10401)
9e05f38 ledger-api-domain: Store the deduplication duration in `Commands`. [KVL-1002] (#10403)
9c064da Allow imports of internal modules (#10397)
b9518ce participant-state-metrics: Add wrappers for v2. (#10404)
c3a3d60 don't call Gary, he's on holiday (#10400)
221d0a0 use doobie 0.9.0 Fragment-in-Fragment interpolation in json-api db-backend (#10399)
17709b5 use a single SQL query for any number of json-api query pairs (#10344)
6a16684 Stop publishing the db-backend artifact (#10396)
1bed05f Treat KeyWithMaintainers field structurally in all node types. (#10392)
d7077e1 Introduce locally-defined `Rejection` reasons instead of the participant-state rejection reason type. [KVL-1002] (#10376)
96f0483 [Divulgence pruning] Conformance tests implementation [DPP-484] (#10385)
28c5e9a update NOTICES file (#10386)
3879452 fix cut&paste typo bug; there are no insig lookup tweaks! (#10389)
7df9758 Daml export: make paths relative to daml.yaml (#10388)
90c3582 treat exerciseResult structurally for isReplayedBy (#10381)
27a0c69 Stop swallowing error message in non-repudiation conformance tests (#10387)
22b6101 rotate release duty after 1.16.0-snapshot.20210720.7404.0.b7cf42d1 (#10346)
5242e2c LF: drop old serializability check for Values (#10382)
ee75530 LF: Specify nesting constraint for serialized values. (#10375)
4a33c03 LF: Add check of nesting in SValue.toValue (#10370)
91529ee clear up record specifications in http-json integration tests (#10366)
e8247af update compat versions for 1.16.0-snapshot.20210720.7404.0.b7cf42d1 (#10354)
74751ba Populate workflow-id in the test-tool scenarios (#10372)
da9f8e3 clean-up perf tests (#10355)
42b70ad Fetch actingParties always non-empty for supported versions (>=1.6) (#10357)
37ff1a6 ledger-configuration: Return a structured error from checkTime. [KVL-1002] (#10373)
66284c1 Limit length of package ids to 64 characters (#10368)
a56cfea even earlier mount failure detection (#10371)
1bc0ccd update NOTICES file (#10367)
9c9b91e Support deletion of a large number of contracts (#10353)
1b5f99e Stop printing stacktrace on logging setup failures (#10364)
c0a24fe HA PoC behind a feature flag [DPP-426] (#10227)
63739fa Add conformance test for deeply nested values (#10319)
faf479e LF: add context in LookupError (#10314)
68dcda0 Drop unused textType from JSON API Oracle queries (#10356)
49745f6 Re-add `application_id` to `DamlCommandDedupKey` [KVL-1000] (#10341)
27d439d LF: Compile netsed ELets using constant stack (#10337)
628aa22 kvutils: Refined transaction validation [KVL-1015] (#10066)
d1e84c8 participant-integration-api: Fill out stubs in ApiSubmissionServiceSpec. (#10349)
905d8ad remove duplicated rule in create-daml-app dlint (#10352)
bdc3e50 Separate ledger export related message from other kvutils messages [KVL-980] (#10343)
70e8ff4 participant-integration-api: De-spacify PostCommitValidationSpec. (#10350)
186d279 release 1.16.0-snapshot.20210720.7404.0.b7cf42d1 (#10345)
e58c7ba fix template dot-files (#10342)
cf2b61e participant-state: Remove the aliases to `Ref.LedgerString`. (#10325)
8148137 [JSON-API] Include the logging context in the ledger client for consistent logging (#10332)
c9666c7 Drop unnecessary mutability from speedy OnLedger state (#10340)
60dd96a update NOTICES file (#10347)
```
Changelog:
```
[Integration Kit] Moved definitions of `DamlSubmission` and `DamlSubmissionBatch` to a separate proto file under the package `com.daml.ledger.participant.state.kvutils.wire`. In case you are directly referencing these messages you will have to update your imports.

- [JSON-API] Schema versioning was introduced to the db schema. Because of this the field `createSchema` in the jdbcConfig was deprecated. Via the field `start-mode` you can specify:
   1. `create-only`: This is equal to the behaviour of `createSchema=true` so the db schema is created and then the application terminates.
   2. `start-only`: With this the schema version is checked and if no version or an version was found which is not equal to the internal schema version then the application terminates. This is also the replacement of `createsSchema=false`.
   3. `create-if-needed-and-start`: With this the schema version is checked and if no version or an version was found which is not equal to the internal schema version then the schema will be created/updated and the application proceeds with the startup.
   4. `create-and-start`: Similar to the first option but instead of terminating the application proceeds with the startup.

- [JSON-API] The json api now correctly shutdowns at startup if the provided db connection is invalid in case of `createSchema=false`

simplify oracle migration scripts
- [Daml Compiler] Imports of internal modules from stable packages are
  no longer illegal. Previously, the compiler raised an error when it
  encountered imports of internal modules such as
  `DA.Internal.Template`. Such imports are now accepted by the compiler.
  Note, however, that internal modules are still not part of the stable
  API. Fixes #10379
[Integration kit] Extended the Ledger API test tool with tests for the pruning of all divulgence events.
- [Daml export] The generated paths to data-dependencies DALFs are now
  relative to the generated daml.yaml. Fixes
  #10378.
- [JSON API] Fix an error where transactions that delete a large
  number of contracts resulted in stackoverflows with the PostgreSQL
  backend and database errors with Oracle.
[Integration Kit] The command de-duplication key now also includes the daml application ID
* [Integration Kit] Made `daml_kvutils.proto`'s location follow its proto package and moved `LedgerExportEntry` into a separate proto file. You may have to update your proto import statements in case you are directly importing proto files from the kvutils library.

- [JSON-API] Connection tries from the json api to the ledger now include the logging context, more specifically the instance_uuid is included in each logging statement.

```

CHANGELOG_BEGIN
CHANGELOG_END
remyhaemmerle-da pushed a commit that referenced this pull request Jul 28, 2021
This PR has been created by a script, which is not very smart
and does not have all the context. Please do double-check that
the version prefix is correct before merging.

@remyhaemmerle-da is in charge of this release.

Commit log:
```
b5e9d86 Moved DamlSubmission* into separate proto file [KVL-980] (#10362)
0da814d Let stable packages bypass LF version restrictions. (#10377)
c97cbca [JSON-API] Validate schema version & add minimal options for schema creation (#10374)
ebb8fab Add a ContractDao benchmark for payload queries (#10426)
85af078 LF: parser for LF versions (#10424)
b976c9c Disable autocommit for hikariCP for http-json-api db conn (#10427)
3ca46a4 Removed unused import. (#10425)
4d12493 Introduce buf checks [KVL-980] (#10411)
1c4ae50 Revert "Upgrade hikari to latest jdk8 version (#10406)" (#10421)
fe1b642 Don't fail if logs directory exists already (#10423)
7c88b56 participant-integration-api: Fix completion debug log output. (#10415)
fc305e6 [JSON-API] Shutdown on startup if the db connection is invalid (#10360)
6db5869 Update vcredist (#10417)
4b55f1a Connection pool for Contract Dao (#10359)
72cf2f3 LF: replace bazel keyword stable by default (#10410)
2bdcb7b update NOTICES file (#10414)
39c6e0b Fix oracle message too long error (#10413)
2094e24 Indexer ValidateAndWaitOnly startup mode for canton participant HA (#10290)
ad13a86 Windows dev-env Powershell 7 compatibility (#10408)
3cedd83 Easy to parse ledger-api-bench-tool logs (#10320)
16ff20c Fix links in changelog (#10409)
b325e8a participant-state: Remove `WriteService#rejectSubmission`. (#10407)
9be520c Keep the participant-state API prefixed. [KVL-1002] (#10405)
d88dc71 Upgrade hikari to latest jdk8 version (#10406)
8b337bd Publish ledger-indexer-benchmark (#10401)
9e05f38 ledger-api-domain: Store the deduplication duration in `Commands`. [KVL-1002] (#10403)
9c064da Allow imports of internal modules (#10397)
b9518ce participant-state-metrics: Add wrappers for v2. (#10404)
c3a3d60 don't call Gary, he's on holiday (#10400)
221d0a0 use doobie 0.9.0 Fragment-in-Fragment interpolation in json-api db-backend (#10399)
17709b5 use a single SQL query for any number of json-api query pairs (#10344)
6a16684 Stop publishing the db-backend artifact (#10396)
1bed05f Treat KeyWithMaintainers field structurally in all node types. (#10392)
d7077e1 Introduce locally-defined `Rejection` reasons instead of the participant-state rejection reason type. [KVL-1002] (#10376)
96f0483 [Divulgence pruning] Conformance tests implementation [DPP-484] (#10385)
28c5e9a update NOTICES file (#10386)
3879452 fix cut&paste typo bug; there are no insig lookup tweaks! (#10389)
7df9758 Daml export: make paths relative to daml.yaml (#10388)
90c3582 treat exerciseResult structurally for isReplayedBy (#10381)
27a0c69 Stop swallowing error message in non-repudiation conformance tests (#10387)
22b6101 rotate release duty after 1.16.0-snapshot.20210720.7404.0.b7cf42d1 (#10346)
5242e2c LF: drop old serializability check for Values (#10382)
ee75530 LF: Specify nesting constraint for serialized values. (#10375)
4a33c03 LF: Add check of nesting in SValue.toValue (#10370)
91529ee clear up record specifications in http-json integration tests (#10366)
e8247af update compat versions for 1.16.0-snapshot.20210720.7404.0.b7cf42d1 (#10354)
74751ba Populate workflow-id in the test-tool scenarios (#10372)
da9f8e3 clean-up perf tests (#10355)
42b70ad Fetch actingParties always non-empty for supported versions (>=1.6) (#10357)
37ff1a6 ledger-configuration: Return a structured error from checkTime. [KVL-1002] (#10373)
66284c1 Limit length of package ids to 64 characters (#10368)
a56cfea even earlier mount failure detection (#10371)
1bc0ccd update NOTICES file (#10367)
9c9b91e Support deletion of a large number of contracts (#10353)
1b5f99e Stop printing stacktrace on logging setup failures (#10364)
c0a24fe HA PoC behind a feature flag [DPP-426] (#10227)
63739fa Add conformance test for deeply nested values (#10319)
faf479e LF: add context in LookupError (#10314)
68dcda0 Drop unused textType from JSON API Oracle queries (#10356)
49745f6 Re-add `application_id` to `DamlCommandDedupKey` [KVL-1000] (#10341)
27d439d LF: Compile netsed ELets using constant stack (#10337)
628aa22 kvutils: Refined transaction validation [KVL-1015] (#10066)
d1e84c8 participant-integration-api: Fill out stubs in ApiSubmissionServiceSpec. (#10349)
905d8ad remove duplicated rule in create-daml-app dlint (#10352)
bdc3e50 Separate ledger export related message from other kvutils messages [KVL-980] (#10343)
70e8ff4 participant-integration-api: De-spacify PostCommitValidationSpec. (#10350)
186d279 release 1.16.0-snapshot.20210720.7404.0.b7cf42d1 (#10345)
e58c7ba fix template dot-files (#10342)
cf2b61e participant-state: Remove the aliases to `Ref.LedgerString`. (#10325)
8148137 [JSON-API] Include the logging context in the ledger client for consistent logging (#10332)
c9666c7 Drop unnecessary mutability from speedy OnLedger state (#10340)
60dd96a update NOTICES file (#10347)
```
Changelog:
```
[Integration Kit] Moved definitions of `DamlSubmission` and `DamlSubmissionBatch` to a separate proto file under the package `com.daml.ledger.participant.state.kvutils.wire`. In case you are directly referencing these messages you will have to update your imports.

- [JSON-API] Schema versioning was introduced to the db schema. Because of this the field `createSchema` in the jdbcConfig was deprecated. Via the field `start-mode` you can specify:
   1. `create-only`: This is equal to the behaviour of `createSchema=true` so the db schema is created and then the application terminates.
   2. `start-only`: With this the schema version is checked and if no version or an version was found which is not equal to the internal schema version then the application terminates. This is also the replacement of `createsSchema=false`.
   3. `create-if-needed-and-start`: With this the schema version is checked and if no version or an version was found which is not equal to the internal schema version then the schema will be created/updated and the application proceeds with the startup.
   4. `create-and-start`: Similar to the first option but instead of terminating the application proceeds with the startup.

- [JSON-API] The json api now correctly shutdowns at startup if the provided db connection is invalid in case of `createSchema=false`

simplify oracle migration scripts
- [Daml Compiler] Imports of internal modules from stable packages are
  no longer illegal. Previously, the compiler raised an error when it
  encountered imports of internal modules such as
  `DA.Internal.Template`. Such imports are now accepted by the compiler.
  Note, however, that internal modules are still not part of the stable
  API. Fixes #10379
[Integration kit] Extended the Ledger API test tool with tests for the pruning of all divulgence events.
- [Daml export] The generated paths to data-dependencies DALFs are now
  relative to the generated daml.yaml. Fixes
  #10378.
- [JSON API] Fix an error where transactions that delete a large
  number of contracts resulted in stackoverflows with the PostgreSQL
  backend and database errors with Oracle.
[Integration Kit] The command de-duplication key now also includes the daml application ID
* [Integration Kit] Made `daml_kvutils.proto`'s location follow its proto package and moved `LedgerExportEntry` into a separate proto file. You may have to update your proto import statements in case you are directly importing proto files from the kvutils library.

- [JSON-API] Connection tries from the json api to the ledger now include the logging context, more specifically the instance_uuid is included in each logging statement.

```

CHANGELOG_BEGIN
CHANGELOG_END

Co-authored-by: Azure Pipelines DAML Build <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants