Release 0.75.0

Analysis improvement: reduction of where-expressions

In the “next-events” analysis, the where-clause expressions are now simplified using a “normalization by evaluation” algorithm. In cases where the calculations in the where-clause do not depend on the event, many calculations can be simplified away, making it easier for consuming applications to interpret the constraints on the expected event.

Bugfix: TypeScript code generated by sic can now handle Corda contract ids

The TypeScript-embedding of contract ids that sic builds now handles Corda contract ids as well. The generated code still only interacts with the REST interface, which doesn’t support Corda, so the output of instantiating a contract is still simply a string contract id. However, having a representation of the Corda contract id is necessary because they may appear as data in, e.g., events, and application code can use sic interfaces while also getting event data from a Corda backend via other means.

CSL improvement: Module-relative references

The CSL scoping rules have been updated such that references to definitions in the current module do not require explicit paths. In other words,

module A {
  module B {
    val a = 1
    val b = A::B::a + 1
  }
}

can be replaced by

module A {
  module B {
    val a = 1
    val b = a + 1
  }
}

but

module A {
  val a = 1
  module B {
    val b = A::a + 1
  }
}

cannot be replaced by

module A {
  val a = 1
  module B {
    val b = a + 1
  }
}

because a is not defined in the same module as b.

Contract novation available on DbLedger and Corda

A novation is an atomic operation that terminates a contract and creates a new one. It requires the id of an existing contract, instantiation information to create a new contract, a timestamp and a description of why the novation was carried through. The terminated contract have a link to newly created one in TerminationDetails. The newly created contract have a link to the terminated contract in InstantiationDetails.

External declarations in CSL

It is now possible to extend the CSL expression language with functions defined in Kotlin through the use of “external declarations”.

See the relevant section in the language guide for more info.