Release of Daml 2.5.1

 Daml 2.5.1 has been released. You can install it using:

daml install 2.5.1


This is a maintenance release, addressing a couple of issues.

What’s new



  • In version 2.5.0, the size of messages exchanged between participants and domains was decreased. While significantly reducing bandwidth consumption, this change increased the number of nodes in the tree, increasing in turn the time to perform blinding. In this release, the blinding algorithm is optimized to perform in O(N * log N) instead of O(N * N), so that the execution time of large batches of transactions remains close to linear.

Daml Compiler

  • New error which reports when a wildcard is used on a non-record type:
    “The syntax `..' can only be used with a record constructor.”
  • Daml Studio no longer suggests internal functions to autocomplete in Code Lenses and Code Actions.
  • When expecting the wrong return type from exercising a choice, `damlc` used to report that the choice didn’t exist. It now correctly reports that such a choice exists but has the wrong return type.
  • Distinguish “non-existent method” errors from “wrong method return type” errors in interface implementations. The errors are detected even when implemented on a type synonym.
    Non-existent method: Tried to implement method ‘getValueNonexistent’, but interface ‘I’ does not have a method with that name. Method ‘getValueNonexistent’ is only a method on the following interfaces: ‘J’
    Wrong method return type: Implementation of method ‘getValueBad’ on interface ‘I’ should return ‘Int’ but instead returns ‘Text’
  • Daml-specific errors thrown by the GHC typechecker now display alongside the original Haskell type error that originated them. This should make it easier to diagnose complex errors where the type checker may have the wrong suggestion.

Java Bindings

  • Deprecated the method `CommandClient#submitAndWait(CommandSubmission, Update)` because the second parameter was never actually used. Use the new method CommandClient#submitAndWait(CommandSubmission)` instead.

Ledger API

  • The ability for participant administrators to update the details of non-local parties has been removed. Non-local parties refer to parties that are not hosted by this participant. Attempting to update non-local party details will now result in a 'record not found' error.
    The metric `current_record_time_lag` now captures the correct value.


  • In case of heavy load, several messages can be processed by the `updateState` function between subsequent trigger rule evaluations. In case of low load, messages are processed independently as soon as they are received by the trigger . The maximum number of messages to be processed between subsequent trigger rule evaluations can be configured through the new flag `--max-batch-size`.  Legacy behaviour can be recovered by using  `--max-batch-size 1`. This feature requires the trigger code to be compiled with 2.5.1 or later.


  • Fixed a bug in the JSON-API when using websocket queries that leaks connections to the Ledger API on the participant. This would eventually lead to new connections being rejected with the MAXIMUM_NUMBER_OF_STREAMS errors on Canton 2.5.0 or later. The gRPC connections weren’t properly closed on closure of the websocket.