-
Notifications
You must be signed in to change notification settings - Fork 205
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
Conversation
@@ -42,18 +42,18 @@ private[transaction] object ContractKeysValidation { | |||
contractKeyDamlStateKeysToContractIds.map(m => m._1.getContractKey -> m._2) | |||
|
|||
for { | |||
stateAfterMonotonicityCheck <- checkContractKeysCausalMonotonicity( | |||
stateAfterConsistencyChecks <- performTraversalContractKeysChecks( |
There was a problem hiding this comment.
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:
- Check key consistency for all nodes that have a key
- Check key monotonicity
- 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 withDisputed
.
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:
- 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.
- 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. - 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.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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:
- During submission, the key is inactive.
- 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.
- 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:
- 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.
- Assuming the transaction is conformant, check consistency of key & contract ids.
There was a problem hiding this comment.
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:
- 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 theDisputed
class of errors. - check that the transaction is consistent with the current ledger state
A violation in this category generally falls into theInconsistent
class of errors.
Transaction model conformance
-
Validate model conformance of the transaction
- use the contract keys of the transaction (
Transaction#contractKeyInput
) as input toTransactionCommitter#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
.
- use the contract keys of the transaction (
-
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
.
- violations of causal monotonicity should result in
Check that transaction is still valid given the ledger state
- check consistency of keys
- check that keys in the transaction are the same as keys in state (already done in
ContractKeysValidation#performTraversalContractKeysChecks
)
- check that keys in the transaction are the same as keys in state (already done in
- check consistency of contracts
- all contracts used in the transaction (
GenTransaction#inputContracts
) are still active. A violation results in the errorInconsistent
.
- all contracts used in the transaction (
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 👍?
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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:
- The participant's system clock lags behind in time of the committer's system clock.
- 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.
- 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.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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).
There was a problem hiding this comment.
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.
40cec9a
to
26c412c
Compare
CHANGELOG_BEGIN CHANGELOG_END
c59cffa
to
d8e5f4b
Compare
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Show resolved
Hide resolved
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Outdated
Show resolved
Hide resolved
...rticipant/state/kvutils/committer/transaction/validation/ModelConformanceValidatorSpec.scala
Show resolved
Hide resolved
...rticipant/state/kvutils/committer/transaction/validation/ModelConformanceValidatorSpec.scala
Show resolved
Hide resolved
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Show resolved
Hide resolved
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Outdated
Show resolved
Hide resolved
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Show resolved
Hide resolved
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Show resolved
Hide resolved
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Outdated
Show resolved
Hide resolved
...icipant/state/kvutils/committer/transaction/validation/TransactionConsistencyValidator.scala
Show resolved
Hide resolved
...rticipant/state/kvutils/committer/transaction/validation/ModelConformanceValidatorSpec.scala
Outdated
Show resolved
Hide resolved
...rticipant/state/kvutils/committer/transaction/validation/ModelConformanceValidatorSpec.scala
Show resolved
Hide resolved
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Outdated
Show resolved
Hide resolved
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Show resolved
Hide resolved
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Outdated
Show resolved
Hide resolved
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Outdated
Show resolved
Hide resolved
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Show resolved
Hide resolved
...icipant/state/kvutils/committer/transaction/validation/TransactionConsistencyValidator.scala
Show resolved
Hide resolved
...ant/state/kvutils/committer/transaction/validation/TransactionConsistencyValidatorSpec.scala
Outdated
Show resolved
Hide resolved
...rticipant/state/kvutils/committer/transaction/validation/ModelConformanceValidatorSpec.scala
Outdated
Show resolved
Hide resolved
...rticipant/state/kvutils/committer/transaction/validation/ModelConformanceValidatorSpec.scala
Outdated
Show resolved
Hide resolved
...rticipant/state/kvutils/committer/transaction/validation/ModelConformanceValidatorSpec.scala
Outdated
Show resolved
Hide resolved
...icipant/state/kvutils/committer/transaction/validation/TransactionConsistencyValidator.scala
Show resolved
Hide resolved
@gerolf-da @cocreature @fabiotudone-da JFYI I addressed the review comments |
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Outdated
Show resolved
Hide resolved
...icipant/state/kvutils/committer/transaction/validation/TransactionConsistencyValidator.scala
Show resolved
Hide resolved
# Conflicts: # ledger/participant-state/kvutils/src/main/scala/com/daml/ledger/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
There was a problem hiding this 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!
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Show resolved
Hide resolved
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Outdated
Show resolved
Hide resolved
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Outdated
Show resolved
Hide resolved
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Outdated
Show resolved
Hide resolved
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Outdated
Show resolved
Hide resolved
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Show resolved
Hide resolved
...icipant/state/kvutils/committer/transaction/validation/TransactionConsistencyValidator.scala
Show resolved
Hide resolved
...ant/state/kvutils/committer/transaction/validation/TransactionConsistencyValidatorSpec.scala
Outdated
Show resolved
Hide resolved
...rticipant/state/kvutils/committer/transaction/validation/ModelConformanceValidatorSpec.scala
Show resolved
Hide resolved
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Show resolved
Hide resolved
# Conflicts: # ledger/participant-state/kvutils/src/main/scala/com/daml/ledger/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
...r/participant/state/kvutils/committer/transaction/validation/ModelConformanceValidator.scala
Outdated
Show resolved
Hide resolved
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
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]>
Implements transaction validation as described in the comment: #10066 (comment)
Pull Request Checklist
CHANGELOG_BEGIN
andCHANGELOG_END
tagsNOTE: CI is not automatically run on non-members pull-requests for security
reasons. The reviewer will have to comment with
/AzurePipelines run
totrigger the build.