Release of Daml SDK 1.1.1

Daml SDK 1.1.1 has been released on 13th May 2020. You can install it using

daml install latest

If you're planning to upgrade your Daml SDK to take advantage of our newest features please note that some action may be required on your part. If you're not planning to upgrade then no change is necessary.

Note that we had to skip the 1.1.0 version number due to a glitch in our release process. The 1.1.1 release is the release of 1.1.0-snapshot.20200506.4107.0.7e448d81, which was the release candidate for SDK 1.1.0

Summary

  • New package management endpoints on the JSON API
  • Better TLS Support for the JSON API
    • Action required if you start the JSON API using daml json-api and do not run it behind a reverse proxy.

What’s New

New Package Management Endpoints on the JSON API

Background

The Ledger API’s package management service allows uploading, downloading and listing of Daml packages available on a Daml Ledger. For situations where connecting to the Ledger API is not possible or is inconvenient, these services are now available through the JSON API as well.

Specific Changes

  • The JSON API has three new endpoints
    • GET /v1/packages -- returns all package IDs
    • GET /v1/packages/<package ID> -- downloads a given DALF package
    • POST /v1/packages -- uploads a DAR file to the ledger

Impact and Migration

This is a purely additive change. Users who connect to gRPC from their applications for the sole purpose of managing Daml packages may switch over to the new endpoints to eliminate dependencies on gRPC or Ledger API language bindings.

Better TLS Support for the JSON API

Background

In addition to the numerous new TLS options introduced in SDK 1.0.0, the JSON API can now also connect to the Ledger API via TLS. To protect against insecure connections which may leak access tokens, it also adds a warning if not run behind a reverse proxy that terminates TLS connections. This warning will become an error in a future release

Specific changes

  • The JSON API accepts new command line parameters --pem, --crt, --cacrt, and --tls, which configure it to connect to the Ledger API using TLS.
  • By default, the JSON API now checks that connections are made through a reverse-proxy providing HTTPS, ensuring that JWT tokens don't leak. To disable this check, such as for development, pass --allow-insecure-tokens. A failed check currently results in a warning.

Impact and Migration

daml start automatically sets this flag so there is no migration needed. If you are starting the JSON API manually, we advise you to add the flag --allow-insecure-tokens for development environments, and to run the JSON API behind a TLS-enabled reverse proxy in production.

Minor Improvements

  • Faster Sandbox reset via the ResetService.
  • daml trigger and  daml script now default to wall clock time if  neither --wall-clock-time or --static-time is passed.
  • daml script now has an --output-file option that can be used to specify a file the result of the script should be  written to. Similar to --input-file the result will be output in the Daml-LF JSON encoding.
  • You can now disable implicit party allocation of the Sandbox by passing the flag --implicit-party-allocation=false. This makes it easier to test as you would against another ledger which does not support this feature.
  • The daml ledger commands no longer require the Bearer prefix in the access token file. This matches the behavior of Daml Script and other SDK tools.
  • Added --max-commands-in-flight to Sandbox CLI configs. This limits the maximum number of unconfirmed commands in flight in CommandService.

Improvements to Early Access Features

  • daml damlc visual now works properly in projects consisting of multiple packages.
  • Fix a bug where `exerciseByKey` was not properly recognized by daml damlc visual.
  • Daml REPL now produces better error messages on calls to  error and abort.

Bug Fixes

  • Fix a bug where scenarios with names containing special characters resulted in a crash in the scenario service.
  • The Sandbox properly respects the --log-level CLI parameter
  • The sandbox now properly delays command submissions using minLedgerTimeAbs or minLedgerTimeRel. See issue #5480.
  • Migrating from Sandbox 0.13.55 to Sandbox Classic 1.0.0 could have introduced contracts falsely reported as active when in fact they are not. Migrating to Sandbox Classic 1.1.0 will fix the issue. See issue #5659.

Changes to Ledger Integration Kit

These changes only affect ledger integrators and operators that consume the metrics emitted by the Daml Integration Kit. We have introduced new metrics and adjusted the naming of existing metrics to be consolidated. If you have built a dashboard for a ledger built using the integration kit, then you will need to adapt that dashboard. The changes are as follows.

  • We have introduced these new metrics:
    • a timing metric for the commit at daml.kvutils.writer.commit.
    • a metric for command validation upon submission, daml.commands.validation.
    • daml.commands.submissions is a new timer that measures all submissions.
    • daml.commands.valid_submissions is a new meter that counts valid (unique, interpretable) submissions.
    • daml.kvutils.reader.parse_updates is a new timer that measures the translation time of ledger log entries when serving state updates to the indexer
    • daml.kvutils.reader.open_envelope is a new timer that measures the deserialization time of ledger log entries when serving state updates to the indexer
    • daml.ledger.log.append is a new timer that measures the time for writing new log entries
    • daml.ledger.state.read is a new timer that measures reading from the ledger state
    • daml.ledger.state.write is a new timer that measures writing to the ledger state
  • We have renamed these metrics:
    • daml.lapi.command_submission_service.failed_command_interpretations has been renamed to daml.commands.failed_command_interpretations.
    • daml.lapi.command_submission_service.deduplicated_commands has been renamed to daml.commands.deduplicated_commands.
    • daml.lapi.command_submission_service.delayed_submissions has been renamed to daml.commands.delayed_submissions.
    • daml.lapi.command_submission_service.submitted_transactions has been renamed to daml.services.write.submit_transaction.
  • The metrics registry should now be passed using the new com.daml.metrics.Metrics type, which wraps/replaces com.codahale.metrics.MetricsRegistry
  • maxDeduplicationTime configuration (the maximum time window during which commands can be deduplicated) has moved from SubmissionConfiguration to the Configuration class
  • Engine is now mandatory in several  participant api server related constructors to avoid running multiple interpretation engines.