[LF] make generic Dev interpretation error (#16859)

This commit is contained in:
Remy 2023-05-18 15:01:43 +02:00 committed by GitHub
parent 195ef9a95e
commit 912e9a9f33
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 485 additions and 376 deletions

View File

@ -18,7 +18,7 @@ if [[ "$(uname)" == "Darwin" ]]; then
tag_filter="$tag_filter,-dont-run-on-darwin,-scaladoc,-pdfdocs" tag_filter="$tag_filter,-dont-run-on-darwin,-scaladoc,-pdfdocs"
fi fi
SKIP_DEV_CANTON_TESTS=false SKIP_DEV_CANTON_TESTS=true
if [ "$SKIP_DEV_CANTON_TESTS" = "true" ]; then if [ "$SKIP_DEV_CANTON_TESTS" = "true" ]; then
tag_filter="$tag_filter,-dev-canton-test" tag_filter="$tag_filter,-dev-canton-test"
fi fi

View File

@ -307,6 +307,7 @@ class ScenarioService(
error.warningLog, error.warningLog,
error.currentSubmission.flatMap(_.commitLocation), error.currentSubmission.flatMap(_.commitLocation),
error.stackTrace, error.stackTrace,
context.devMode,
) )
.convertScenarioError(error.error) .convertScenarioError(error.error)
) )
@ -320,6 +321,7 @@ class ScenarioService(
success.warningLog, success.warningLog,
None, None,
ImmArray.Empty, ImmArray.Empty,
context.devMode,
) )
.convertScenarioResult(success.resultValue) .convertScenarioResult(success.resultValue)
) )

View File

@ -58,6 +58,8 @@ class Context(
import Context._ import Context._
def devMode: Boolean = languageVersion == LanguageVersion.v1_dev
/** The package identifier to use for modules added to the context. /** The package identifier to use for modules added to the context.
* When decoding LF modules this package identifier should be used to rewrite * When decoding LF modules this package identifier should be used to rewrite
* self-references. We only care that the identifier is disjunct from the package ids * self-references. We only care that the identifier is disjunct from the package ids

View File

@ -29,6 +29,7 @@ final class Conversions(
warningLog: WarningLog, warningLog: WarningLog,
commitLocation: Option[Ref.Location], commitLocation: Option[Ref.Location],
stackTrace: ImmArray[Ref.Location], stackTrace: ImmArray[Ref.Location],
devMode: Boolean,
) { ) {
private val empty: proto.Empty = proto.Empty.newBuilder.build private val empty: proto.Empty = proto.Empty.newBuilder.build
@ -247,25 +248,29 @@ final class Conversions(
builder.setCrash(s"Contract Id comparability Error") builder.setCrash(s"Contract Id comparability Error")
case NonComparableValues => case NonComparableValues =>
builder.setComparableValueError(proto.Empty.newBuilder) builder.setComparableValueError(proto.Empty.newBuilder)
case Limit(limitError) => case Dev(_, devError) if devMode =>
limitError match { devError match {
case Limit.ValueNesting(_) => case Dev.Limit(limitError) =>
builder.setValueExceedsMaxNesting(proto.Empty.newBuilder) limitError match {
// TODO https://github.com/digital-asset/daml/issues/11691 case Dev.Limit.ValueNesting(_) =>
// Handle the other cases properly. builder.setValueExceedsMaxNesting(proto.Empty.newBuilder)
case _ => // TODO https://github.com/digital-asset/daml/issues/11691
builder.setCrash(s"A limit was overpass when building the transaction") // Handle the other cases properly.
case _ =>
builder.setCrash(s"A limit was overpassed when building the transaction")
}
case Dev.ChoiceGuardFailed(coid, templateId, choiceName, byInterface) =>
val cgfBuilder =
proto.ScenarioError.ChoiceGuardFailed.newBuilder
.setContractRef(mkContractRef(coid, templateId))
.setChoiceId(choiceName)
byInterface.foreach(ifaceId =>
cgfBuilder.setByInterface(convertIdentifier(ifaceId))
)
builder.setChoiceGuardFailed(cgfBuilder.build)
} }
case err @ Dev(_, _) =>
case ChoiceGuardFailed(coid, templateId, choiceName, byInterface) => builder.setCrash(s"Unexpected Dev error: " + err.toString)
val cgfBuilder =
proto.ScenarioError.ChoiceGuardFailed.newBuilder
.setContractRef(mkContractRef(coid, templateId))
.setChoiceId(choiceName)
byInterface.foreach(ifaceId =>
cgfBuilder.setByInterface(convertIdentifier(ifaceId))
)
builder.setChoiceGuardFailed(cgfBuilder.build)
} }
} }
case Error.ContractNotEffective(coid, tid, effectiveAt) => case Error.ContractNotEffective(coid, tid, effectiveAt) =>

View File

@ -151,64 +151,71 @@ private[lf] object Pretty {
case ContractIdInContractKey(key) => case ContractIdInContractKey(key) =>
text("Contract IDs are not supported in contract keys:") & text("Contract IDs are not supported in contract keys:") &
prettyContractId(key.cids.head) prettyContractId(key.cids.head)
case Limit(error) => case Dev(_, error) =>
error match { error match {
case Limit.ValueNesting(limit) => case Dev.Limit(error) =>
text(s"Value exceeds maximum nesting value of $limit") error match {
case Limit.ContractSignatories(cid @ _, templateId, arg @ _, signatories, limit) => case Dev.Limit.ValueNesting(limit) =>
text( text(s"Value exceeds maximum nesting value of $limit")
s"Create Fetch or exercise a Contract of type $templateId with ${signatories.size} signatories but the limit is $limit" case Dev.Limit.ContractSignatories(
) cid @ _,
case Limit.ContractObservers(cid @ _, templateId, arg @ _, observers, limit) => templateId,
text( arg @ _,
s"Create Fetch or exercise a Contract of type $templateId ${observers.size} observes but the limit is $limit" signatories,
) limit,
case Limit.ChoiceControllers( ) =>
cid @ _, text(
templateId, s"Create Fetch or exercise a Contract of type $templateId with ${signatories.size} signatories but the limit is $limit"
choiceName, )
arg @ _, case Dev.Limit.ContractObservers(cid @ _, templateId, arg @ _, observers, limit) =>
controllers, text(
limit, s"Create Fetch or exercise a Contract of type $templateId ${observers.size} observes but the limit is $limit"
) => )
text( case Dev.Limit.ChoiceControllers(
s"Exercise the choice $templateId:$choiceName with ${controllers.size} controllers but the limit is $limit" cid @ _,
) templateId,
case Limit.ChoiceObservers( choiceName,
cid @ _, arg @ _,
templateId, controllers,
choiceName, limit,
arg @ _, ) =>
observers, text(
limit, s"Exercise the choice $templateId:$choiceName with ${controllers.size} controllers but the limit is $limit"
) => )
text( case Dev.Limit.ChoiceObservers(
s"Exercise the choice $templateId:$choiceName with ${observers.size} observers but the limit is $limit" cid @ _,
) templateId,
case Limit.ChoiceAuthorizers( choiceName,
cid @ _, arg @ _,
templateId, observers,
choiceName, limit,
arg @ _, ) =>
authorizers, text(
limit, s"Exercise the choice $templateId:$choiceName with ${observers.size} observers but the limit is $limit"
) => )
text( case Dev.Limit.ChoiceAuthorizers(
s"Exercise the choice $templateId:$choiceName with ${authorizers.size} authorizers but the limit is $limit" cid @ _,
) templateId,
case Limit.TransactionInputContracts(limit) => choiceName,
text(s"Transaction exceeds maximum input contract number of $limit") arg @ _,
authorizers,
limit,
) =>
text(
s"Exercise the choice $templateId:$choiceName with ${authorizers.size} authorizers but the limit is $limit"
)
case Dev.Limit.TransactionInputContracts(limit) =>
text(s"Transaction exceeds maximum input contract number of $limit")
}
case Dev.ChoiceGuardFailed(cid, templateId, choiceName, byInterface) =>
text(s"Choice guard failed for") & prettyTypeConName(templateId) &
text(s"contract") & prettyContractId(cid) &
text(s"when exercising choice $choiceName") &
(byInterface match {
case None => text("by template")
case Some(interfaceId) => text("by interface") & prettyTypeConName(interfaceId)
})
} }
case ChoiceGuardFailed(cid, templateId, choiceName, byInterface) => (
text(s"Choice guard failed for") & prettyTypeConName(templateId) &
text(s"contract") & prettyContractId(cid) &
text(s"when exercising choice $choiceName") &
(byInterface match {
case None => text("by template")
case Some(interfaceId) => text("by interface") & prettyTypeConName(interfaceId)
})
)
} }
} }

View File

@ -57,9 +57,11 @@ sealed abstract class SValue {
def go(v: SValue, maxNesting: Int = V.MAXIMUM_NESTING): V = { def go(v: SValue, maxNesting: Int = V.MAXIMUM_NESTING): V = {
if (maxNesting < 0) if (maxNesting < 0)
throw SError.SErrorDamlException( Speedy.throwLimitError(
interpretation.Error.Limit(interpretation.Error.Limit.ValueNesting(V.MAXIMUM_NESTING)) NameOf.qualifiedNameOfCurrentFunc,
interpretation.Error.Dev.Limit.ValueNesting(V.MAXIMUM_NESTING),
) )
val nextMaxNesting = maxNesting - 1 val nextMaxNesting = maxNesting - 1
v match { v match {
case SInt64(x) => V.ValueInt64(x) case SInt64(x) => V.ValueInt64(x)

View File

@ -147,9 +147,16 @@ private[lf] object Speedy {
) )
} }
private[this] def enforceLimit(actual: Int, limit: Int, error: Int => IError.Limit.Error): Unit = private[speedy] def throwLimitError(location: String, error: IError.Dev.Limit.Error): Nothing =
if (actual > limit) throw SError.SErrorDamlException(interpretation.Error.Dev(location, IError.Dev.Limit(error)))
throw SError.SErrorDamlException(IError.Limit(error(limit)))
private[this] def enforceLimit(
location: String,
actual: Int,
limit: Int,
error: Int => IError.Dev.Limit.Error,
): Unit =
if (actual > limit) throwLimitError(location, error(limit))
final class UpdateMachine( final class UpdateMachine(
override val sexpr: SExpr, override val sexpr: SExpr,
@ -274,9 +281,10 @@ private[lf] object Speedy {
private[speedy] def updateCachedContracts(cid: V.ContractId, contract: CachedContract): Unit = { private[speedy] def updateCachedContracts(cid: V.ContractId, contract: CachedContract): Unit = {
enforceLimit( enforceLimit(
NameOf.qualifiedNameOfCurrentFunc,
contract.signatories.size, contract.signatories.size,
limits.contractSignatories, limits.contractSignatories,
IError.Limit IError.Dev.Limit
.ContractSignatories( .ContractSignatories(
cid, cid,
contract.templateId, contract.templateId,
@ -286,9 +294,10 @@ private[lf] object Speedy {
), ),
) )
enforceLimit( enforceLimit(
NameOf.qualifiedNameOfCurrentFunc,
contract.observers.size, contract.observers.size,
limits.contractObservers, limits.contractObservers,
IError.Limit IError.Dev.Limit
.ContractObservers( .ContractObservers(
cid, cid,
contract.templateId, contract.templateId,
@ -303,9 +312,10 @@ private[lf] object Speedy {
private[speedy] def addGlobalContract(coid: V.ContractId, contract: CachedContract): Unit = { private[speedy] def addGlobalContract(coid: V.ContractId, contract: CachedContract): Unit = {
numInputContracts += 1 numInputContracts += 1
enforceLimit( enforceLimit(
NameOf.qualifiedNameOfCurrentFunc,
numInputContracts, numInputContracts,
limits.transactionInputContracts, limits.transactionInputContracts,
IError.Limit.TransactionInputContracts, IError.Dev.Limit.TransactionInputContracts,
) )
updateCachedContracts(coid, contract) updateCachedContracts(coid, contract)
} }
@ -318,9 +328,10 @@ private[lf] object Speedy {
arg: V, arg: V,
): Unit = ): Unit =
enforceLimit( enforceLimit(
NameOf.qualifiedNameOfCurrentFunc,
controllers.size, controllers.size,
limits.choiceControllers, limits.choiceControllers,
IError.Limit.ChoiceControllers(cid, templateId, choiceName, arg, controllers, _), IError.Dev.Limit.ChoiceControllers(cid, templateId, choiceName, arg, controllers, _),
) )
private[speedy] def enforceChoiceObserversLimit( private[speedy] def enforceChoiceObserversLimit(
@ -331,9 +342,10 @@ private[lf] object Speedy {
arg: V, arg: V,
): Unit = ): Unit =
enforceLimit( enforceLimit(
NameOf.qualifiedNameOfCurrentFunc,
observers.size, observers.size,
limits.choiceObservers, limits.choiceObservers,
IError.Limit.ChoiceObservers(cid, templateId, choiceName, arg, observers, _), IError.Dev.Limit.ChoiceObservers(cid, templateId, choiceName, arg, observers, _),
) )
private[speedy] def enforceChoiceAuthorizersLimit( private[speedy] def enforceChoiceAuthorizersLimit(
@ -344,9 +356,10 @@ private[lf] object Speedy {
arg: V, arg: V,
): Unit = ): Unit =
enforceLimit( enforceLimit(
NameOf.qualifiedNameOfCurrentFunc,
authorizers.size, authorizers.size,
limits.choiceAuthorizers, limits.choiceAuthorizers,
IError.Limit.ChoiceAuthorizers(cid, templateId, choiceName, arg, authorizers, _), IError.Dev.Limit.ChoiceAuthorizers(cid, templateId, choiceName, arg, authorizers, _),
) )
// The set of create events for the disclosed contracts that are used by the generated transaction. // The set of create events for the disclosed contracts that are used by the generated transaction.
@ -1748,7 +1761,12 @@ private[lf] object Speedy {
byInterface: Option[TypeConName], byInterface: Option[TypeConName],
) extends Kont { ) extends Kont {
def abort(): Nothing = def abort(): Nothing =
throw SErrorDamlException(IError.ChoiceGuardFailed(coid, templateId, choiceName, byInterface)) throw SErrorDamlException(
IError.Dev(
NameOf.qualifiedNameOfCurrentFunc,
IError.Dev.ChoiceGuardFailed(coid, templateId, choiceName, byInterface),
)
)
override def execute[Q](machine: Machine[Q], v: SValue): Control.Value = { override def execute[Q](machine: Machine[Q], v: SValue): Control.Value = {
v match { v match {

View File

@ -615,16 +615,19 @@ class EvaluationOrderTest extends AnyFreeSpec with Matchers with Inside {
Array(SParty(alice), SParty(bob)), Array(SParty(alice), SParty(bob)),
Set(alice), Set(alice),
) )
inside(res) { case Success(Left(SErrorDamlException(IE.Limit(IE.Limit.ValueNesting(_))))) => inside(res) {
msgs shouldBe Seq( case Success(
"starts test", Left(SErrorDamlException(IE.Dev(_, IE.Dev.Limit(IE.Dev.Limit.ValueNesting(_)))))
"precondition", ) =>
"contract agreement", msgs shouldBe Seq(
"contract signatories", "starts test",
"contract observers", "precondition",
"key", "contract agreement",
"maintainers", "contract signatories",
) "contract observers",
"key",
"maintainers",
)
} }
} }
@ -639,16 +642,19 @@ class EvaluationOrderTest extends AnyFreeSpec with Matchers with Inside {
Array(SParty(alice), SParty(bob)), Array(SParty(alice), SParty(bob)),
Set(alice), Set(alice),
) )
inside(res) { case Success(Left(SErrorDamlException(IE.Limit(IE.Limit.ValueNesting(_))))) => inside(res) {
msgs shouldBe Seq( case Success(
"starts test", Left(SErrorDamlException(IE.Dev(_, IE.Dev.Limit(IE.Dev.Limit.ValueNesting(_)))))
"precondition", ) =>
"contract agreement", msgs shouldBe Seq(
"contract signatories", "starts test",
"contract observers", "precondition",
"key", "contract agreement",
"maintainers", "contract signatories",
) "contract observers",
"key",
"maintainers",
)
} }
} }
} }
@ -809,16 +815,19 @@ class EvaluationOrderTest extends AnyFreeSpec with Matchers with Inside {
Array(SParty(alice), SParty(bob)), Array(SParty(alice), SParty(bob)),
Set(alice), Set(alice),
) )
inside(res) { case Success(Left(SErrorDamlException(IE.Limit(IE.Limit.ValueNesting(_))))) => inside(res) {
msgs shouldBe Seq( case Success(
"starts test", Left(SErrorDamlException(IE.Dev(_, IE.Dev.Limit(IE.Dev.Limit.ValueNesting(_)))))
"precondition", ) =>
"contract agreement", msgs shouldBe Seq(
"contract signatories", "starts test",
"contract observers", "precondition",
"key", "contract agreement",
"maintainers", "contract signatories",
) "contract observers",
"key",
"maintainers",
)
} }
} }
@ -833,16 +842,19 @@ class EvaluationOrderTest extends AnyFreeSpec with Matchers with Inside {
Array(SParty(alice), SParty(bob)), Array(SParty(alice), SParty(bob)),
Set(alice), Set(alice),
) )
inside(res) { case Success(Left(SErrorDamlException(IE.Limit(IE.Limit.ValueNesting(_))))) => inside(res) {
msgs shouldBe Seq( case Success(
"starts test", Left(SErrorDamlException(IE.Dev(_, IE.Dev.Limit(IE.Dev.Limit.ValueNesting(_)))))
"precondition", ) =>
"contract agreement", msgs shouldBe Seq(
"contract signatories", "starts test",
"contract observers", "precondition",
"key", "contract agreement",
"maintainers", "contract signatories",
) "contract observers",
"key",
"maintainers",
)
} }
} }
} }
@ -1183,19 +1195,22 @@ class EvaluationOrderTest extends AnyFreeSpec with Matchers with Inside {
Set(alice), Set(alice),
getContract = getContract, getContract = getContract,
) )
inside(res) { case Success(Left(SErrorDamlException(IE.Limit(IE.Limit.ValueNesting(_))))) => inside(res) {
msgs shouldBe Seq( case Success(
"starts test", Left(SErrorDamlException(IE.Dev(_, IE.Dev.Limit(IE.Dev.Limit.ValueNesting(_)))))
"queries contract", ) =>
"contract agreement", msgs shouldBe Seq(
"contract signatories", "starts test",
"contract observers", "queries contract",
"key", "contract agreement",
"maintainers", "contract signatories",
"template choice controllers", "contract observers",
"template choice observers", "key",
"template choice authorizers", "maintainers",
) "template choice controllers",
"template choice observers",
"template choice authorizers",
)
} }
} }
@ -1208,20 +1223,23 @@ class EvaluationOrderTest extends AnyFreeSpec with Matchers with Inside {
Set(alice), Set(alice),
getContract = getContract, getContract = getContract,
) )
inside(res) { case Success(Left(SErrorDamlException(IE.Limit(IE.Limit.ValueNesting(_))))) => inside(res) {
msgs shouldBe Seq( case Success(
"starts test", Left(SErrorDamlException(IE.Dev(_, IE.Dev.Limit(IE.Dev.Limit.ValueNesting(_)))))
"queries contract", ) =>
"contract agreement", msgs shouldBe Seq(
"contract signatories", "starts test",
"contract observers", "queries contract",
"key", "contract agreement",
"maintainers", "contract signatories",
"template choice controllers", "contract observers",
"template choice observers", "key",
"template choice authorizers", "maintainers",
"choice body", "template choice controllers",
) "template choice observers",
"template choice authorizers",
"choice body",
)
} }
} }
} }
@ -1573,19 +1591,22 @@ class EvaluationOrderTest extends AnyFreeSpec with Matchers with Inside {
getContract = getContract, getContract = getContract,
getKey = getKey, getKey = getKey,
) )
inside(res) { case Success(Left(SErrorDamlException(IE.Limit(IE.Limit.ValueNesting(_))))) => inside(res) {
msgs shouldBe Seq( case Success(
"starts test", Left(SErrorDamlException(IE.Dev(_, IE.Dev.Limit(IE.Dev.Limit.ValueNesting(_)))))
"maintainers", ) =>
"queries key", msgs shouldBe Seq(
"queries contract", "starts test",
"contract agreement", "maintainers",
"contract signatories", "queries key",
"contract observers", "queries contract",
"template choice controllers", "contract agreement",
"template choice observers", "contract signatories",
"template choice authorizers", "contract observers",
) "template choice controllers",
"template choice observers",
"template choice authorizers",
)
} }
} }
@ -1599,20 +1620,23 @@ class EvaluationOrderTest extends AnyFreeSpec with Matchers with Inside {
getContract = getContract, getContract = getContract,
getKey = getKey, getKey = getKey,
) )
inside(res) { case Success(Left(SErrorDamlException(IE.Limit(IE.Limit.ValueNesting(_))))) => inside(res) {
msgs shouldBe Seq( case Success(
"starts test", Left(SErrorDamlException(IE.Dev(_, IE.Dev.Limit(IE.Dev.Limit.ValueNesting(_)))))
"maintainers", ) =>
"queries key", msgs shouldBe Seq(
"queries contract", "starts test",
"contract agreement", "maintainers",
"contract signatories", "queries key",
"contract observers", "queries contract",
"template choice controllers", "contract agreement",
"template choice observers", "contract signatories",
"template choice authorizers", "contract observers",
"choice body", "template choice controllers",
) "template choice observers",
"template choice authorizers",
"choice body",
)
} }
} }
@ -2561,8 +2585,11 @@ class EvaluationOrderTest extends AnyFreeSpec with Matchers with Inside {
Array(SParty(alice), SParty(alice)), Array(SParty(alice), SParty(alice)),
Set(alice), Set(alice),
) )
inside(res) { case Success(Left(SErrorDamlException(IE.Limit(IE.Limit.ValueNesting(_))))) => inside(res) {
msgs shouldBe Seq("starts test", "maintainers") case Success(
Left(SErrorDamlException(IE.Dev(_, IE.Dev.Limit(IE.Dev.Limit.ValueNesting(_)))))
) =>
msgs shouldBe Seq("starts test", "maintainers")
} }
} }
} }
@ -3121,8 +3148,11 @@ class EvaluationOrderTest extends AnyFreeSpec with Matchers with Inside {
Array(SParty(alice), SParty(alice)), Array(SParty(alice), SParty(alice)),
Set(alice), Set(alice),
) )
inside(res) { case Success(Left(SErrorDamlException(IE.Limit(IE.Limit.ValueNesting(_))))) => inside(res) {
msgs shouldBe Seq("starts test", "maintainers") case Success(
Left(SErrorDamlException(IE.Dev(_, IE.Dev.Limit(IE.Dev.Limit.ValueNesting(_)))))
) =>
msgs shouldBe Seq("starts test", "maintainers")
} }
} }
} }

View File

@ -82,7 +82,12 @@ class LimitsSpec extends AnyWordSpec with Matchers with Inside with TableDrivenP
inside(result) { inside(result) {
case Left( case Left(
SError.SErrorDamlException( SError.SErrorDamlException(
IE.Limit(IE.Limit.ContractSignatories(_, templateId, _, parties, reportedlimit)) IE.Dev(
_,
IE.Dev.Limit(
IE.Dev.Limit.ContractSignatories(_, templateId, _, parties, reportedlimit)
),
)
) )
) => ) =>
templateId shouldBe T templateId shouldBe T
@ -106,7 +111,12 @@ class LimitsSpec extends AnyWordSpec with Matchers with Inside with TableDrivenP
inside(result) { inside(result) {
case Left( case Left(
SError.SErrorDamlException( SError.SErrorDamlException(
IE.Limit(IE.Limit.ContractSignatories(_, templateId, _, parties, reportedlimit)) IE.Dev(
_,
IE.Dev.Limit(
IE.Dev.Limit.ContractSignatories(_, templateId, _, parties, reportedlimit)
),
)
) )
) => ) =>
templateId shouldBe T templateId shouldBe T
@ -140,7 +150,12 @@ class LimitsSpec extends AnyWordSpec with Matchers with Inside with TableDrivenP
inside(result) { inside(result) {
case Left( case Left(
SError.SErrorDamlException( SError.SErrorDamlException(
IE.Limit(IE.Limit.ContractSignatories(_, templateId, _, parties, reportedlimit)) IE.Dev(
_,
IE.Dev.Limit(
IE.Dev.Limit.ContractSignatories(_, templateId, _, parties, reportedlimit)
),
)
) )
) => ) =>
templateId shouldBe T templateId shouldBe T
@ -169,7 +184,12 @@ class LimitsSpec extends AnyWordSpec with Matchers with Inside with TableDrivenP
inside(result) { inside(result) {
case Left( case Left(
SError.SErrorDamlException( SError.SErrorDamlException(
IE.Limit(IE.Limit.ContractObservers(_, templateId, _, parties, reportedlimit)) IE.Dev(
_,
IE.Dev.Limit(
IE.Dev.Limit.ContractObservers(_, templateId, _, parties, reportedlimit)
),
)
) )
) => ) =>
templateId shouldBe T templateId shouldBe T
@ -194,7 +214,12 @@ class LimitsSpec extends AnyWordSpec with Matchers with Inside with TableDrivenP
inside(result) { inside(result) {
case Left( case Left(
SError.SErrorDamlException( SError.SErrorDamlException(
IE.Limit(IE.Limit.ContractObservers(_, templateId, _, parties, reportedlimit)) IE.Dev(
_,
IE.Dev.Limit(
IE.Dev.Limit.ContractObservers(_, templateId, _, parties, reportedlimit)
),
)
) )
) => ) =>
templateId shouldBe T templateId shouldBe T
@ -228,7 +253,12 @@ class LimitsSpec extends AnyWordSpec with Matchers with Inside with TableDrivenP
inside(result) { inside(result) {
case Left( case Left(
SError.SErrorDamlException( SError.SErrorDamlException(
IE.Limit(IE.Limit.ContractObservers(_, templateId, _, parties, reportedlimit)) IE.Dev(
_,
IE.Dev.Limit(
IE.Dev.Limit.ContractObservers(_, templateId, _, parties, reportedlimit)
),
)
) )
) => ) =>
templateId shouldBe T templateId shouldBe T
@ -261,15 +291,18 @@ class LimitsSpec extends AnyWordSpec with Matchers with Inside with TableDrivenP
inside(result) { inside(result) {
case Left( case Left(
SError.SErrorDamlException( SError.SErrorDamlException(
IE.Limit( IE.Dev(
IE.Limit.ChoiceControllers( _,
_, IE.Dev.Limit(
templateId, IE.Dev.Limit.ChoiceControllers(
choiceName, _,
_, templateId,
parties, choiceName,
reportedlimit, _,
) parties,
reportedlimit,
)
),
) )
) )
) => ) =>
@ -313,8 +346,18 @@ class LimitsSpec extends AnyWordSpec with Matchers with Inside with TableDrivenP
inside(result) { inside(result) {
case Left( case Left(
SError.SErrorDamlException( SError.SErrorDamlException(
IE.Limit( IE.Dev(
IE.Limit.ChoiceObservers(_, templateId, choiceName, _, parties, reportedlimit) _,
IE.Dev.Limit(
IE.Dev.Limit.ChoiceObservers(
_,
templateId,
choiceName,
_,
parties,
reportedlimit,
)
),
) )
) )
) => ) =>
@ -343,7 +386,7 @@ class LimitsSpec extends AnyWordSpec with Matchers with Inside with TableDrivenP
inside(result) { inside(result) {
case Left( case Left(
SError.SErrorDamlException( SError.SErrorDamlException(
IE.Limit(IE.Limit.TransactionInputContracts(reportedlimit)) IE.Dev(_, IE.Dev.Limit(IE.Dev.Limit.TransactionInputContracts(reportedlimit)))
) )
) => ) =>
reportedlimit shouldBe limit reportedlimit shouldBe limit

View File

@ -35,10 +35,9 @@ class SValueTest extends AnyWordSpec with Inside with Matchers with TableDrivenP
// Because Z has a nesting of 1, toNat(Value.MAXIMUM_NESTING) has a nesting of // Because Z has a nesting of 1, toNat(Value.MAXIMUM_NESTING) has a nesting of
// Value.MAXIMUM_NESTING + 1 // Value.MAXIMUM_NESTING + 1
val x = Try(toNat(Value.MAXIMUM_NESTING).toUnnormalizedValue) val x = Try(toNat(Value.MAXIMUM_NESTING).toUnnormalizedValue)
x shouldBe inside(x) { case Failure(SError.SErrorDamlException(IError.Dev(_, error))) =>
Failure( error shouldBe IError.Dev.Limit(IError.Dev.Limit.ValueNesting(Value.MAXIMUM_NESTING))
SError.SErrorDamlException(IError.Limit(IError.Limit.ValueNesting(Value.MAXIMUM_NESTING))) }
)
} }
"accepts just right nesting" in { "accepts just right nesting" in {

View File

@ -160,69 +160,75 @@ object Error {
final case class ContractIdInContractKey(key: Value) extends Error final case class ContractIdInContractKey(key: Value) extends Error
@deprecated("use Limit.ValueNesting", since = "2.0.0") // Error that can be thrown by dev or PoC feature only
val ValueExceedsMaxNesting: Limit.ValueNesting.type = Limit.ValueNesting final case class Dev(location: String, error: Dev.Error) extends Error
/** A choice guard returned false, invalidating some expectation. */ object Dev {
final case class ChoiceGuardFailed(
coid: ContractId,
templateId: TypeConName,
choiceName: ChoiceName,
byInterface: Option[TypeConName],
) extends Error
final case class Limit(error: Limit.Error) extends Error
object Limit {
sealed abstract class Error extends Serializable with Product sealed abstract class Error extends Serializable with Product
final case class ValueNesting(limit: Int) extends Error /** A choice guard returned false, invalidating some expectation. */
final case class ChoiceGuardFailed(
final case class ContractSignatories( coid: ContractId,
coid: Value.ContractId,
templateId: TypeConName,
arg: Value,
signatories: Set[Party],
limit: Int,
) extends Error
final case class ContractObservers(
coid: Value.ContractId,
templateId: TypeConName,
arg: Value,
observers: Set[Party],
limit: Int,
) extends Error
final case class ChoiceControllers(
cid: Value.ContractId,
templateId: TypeConName, templateId: TypeConName,
choiceName: ChoiceName, choiceName: ChoiceName,
arg: Value, byInterface: Option[TypeConName],
controllers: Set[Party],
limit: Int,
) extends Error ) extends Error
final case class ChoiceObservers( final case class Limit(error: Limit.Error) extends Error
cid: Value.ContractId,
templateId: TypeConName,
choiceName: ChoiceName,
arg: Value,
observers: Set[Party],
limit: Int,
) extends Error
final case class ChoiceAuthorizers( object Limit {
cid: Value.ContractId,
templateId: TypeConName, sealed abstract class Error extends Serializable with Product
choiceName: ChoiceName,
arg: Value, final case class ValueNesting(limit: Int) extends Error
observers: Set[Party],
limit: Int, final case class ContractSignatories(
) extends Error coid: Value.ContractId,
templateId: TypeConName,
arg: Value,
signatories: Set[Party],
limit: Int,
) extends Error
final case class ContractObservers(
coid: Value.ContractId,
templateId: TypeConName,
arg: Value,
observers: Set[Party],
limit: Int,
) extends Error
final case class ChoiceControllers(
cid: Value.ContractId,
templateId: TypeConName,
choiceName: ChoiceName,
arg: Value,
controllers: Set[Party],
limit: Int,
) extends Error
final case class ChoiceObservers(
cid: Value.ContractId,
templateId: TypeConName,
choiceName: ChoiceName,
arg: Value,
observers: Set[Party],
limit: Int,
) extends Error
final case class ChoiceAuthorizers(
cid: Value.ContractId,
templateId: TypeConName,
choiceName: ChoiceName,
arg: Value,
observers: Set[Party],
limit: Int,
) extends Error
final case class TransactionInputContracts(limit: Int) extends Error
}
final case class TransactionInputContracts(limit: Int) extends Error
} }
} }

View File

@ -130,17 +130,12 @@ object RejectionGenerators {
.Error( .Error(
renderedMessage renderedMessage
) )
case LfInterpretationError.Limit(_) =>
LedgerApiErrors.CommandExecution.Interpreter.InvalidArgumentInterpretationError
.Error(
renderedMessage
)
case _: LfInterpretationError.ContractIdComparability => case _: LfInterpretationError.ContractIdComparability =>
LedgerApiErrors.CommandExecution.Interpreter.InvalidArgumentInterpretationError LedgerApiErrors.CommandExecution.Interpreter.InvalidArgumentInterpretationError
.Error( .Error(
renderedMessage renderedMessage
) )
case _: LfInterpretationError.ChoiceGuardFailed => case LfInterpretationError.Dev(_, _) =>
LedgerApiErrors.CommandExecution.Interpreter.InvalidArgumentInterpretationError LedgerApiErrors.CommandExecution.Interpreter.InvalidArgumentInterpretationError
.Error( .Error(
renderedMessage renderedMessage

View File

@ -37,122 +37,122 @@
## Integrity: ## Integrity:
- Evaluation order of create with authorization failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L558) - Evaluation order of create with authorization failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L558)
- Evaluation order of create with contract ID in contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L581) - Evaluation order of create with contract ID in contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L581)
- Evaluation order of create with contract key exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L631) - Evaluation order of create with contract key exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L634)
- Evaluation order of create with create argument exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L608) - Evaluation order of create with create argument exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L608)
- Evaluation order of create with duplicate contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L509) - Evaluation order of create with duplicate contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L509)
- Evaluation order of create with empty contract key maintainers: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L534) - Evaluation order of create with empty contract key maintainers: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L534)
- Evaluation order of create with failed precondition: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L491) - Evaluation order of create with failed precondition: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L491)
- Evaluation order of create_interface with authorization failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L752) - Evaluation order of create_interface with authorization failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L758)
- Evaluation order of create_interface with contract ID in contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L775) - Evaluation order of create_interface with contract ID in contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L781)
- Evaluation order of create_interface with contract key exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L825) - Evaluation order of create_interface with contract key exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L834)
- Evaluation order of create_interface with create argument exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L802) - Evaluation order of create_interface with create argument exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L808)
- Evaluation order of create_interface with duplicate contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L701) - Evaluation order of create_interface with duplicate contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L707)
- Evaluation order of create_interface with empty contract key maintainers: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L726) - Evaluation order of create_interface with empty contract key maintainers: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L732)
- Evaluation order of create_interface with failed precondition: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L683) - Evaluation order of create_interface with failed precondition: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L689)
- Evaluation order of exercise by interface of a cached global contract that does not implement the interface.: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1777) - Evaluation order of exercise by interface of a cached global contract that does not implement the interface.: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1801)
- Evaluation order of exercise by interface of an inactive global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1759) - Evaluation order of exercise by interface of an inactive global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1783)
- Evaluation order of exercise by interface of cached global contract with failed authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1817) - Evaluation order of exercise by interface of cached global contract with failed authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1841)
- Evaluation order of exercise of a cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1138) - Evaluation order of exercise of a cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1150)
- Evaluation order of exercise of a non-cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L896) - Evaluation order of exercise of a non-cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L908)
- Evaluation order of exercise of a non-cached global contract with inconsistent key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L922) - Evaluation order of exercise of a non-cached global contract with inconsistent key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L934)
- Evaluation order of exercise of a wrongly typed cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L996) - Evaluation order of exercise of a wrongly typed cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1008)
- Evaluation order of exercise of a wrongly typed non-cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L881) - Evaluation order of exercise of a wrongly typed non-cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L893)
- Evaluation order of exercise of an inactive global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L979) - Evaluation order of exercise of an inactive global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L991)
- Evaluation order of exercise of an inactive local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1080) - Evaluation order of exercise of an inactive local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1092)
- Evaluation order of exercise of an unknown contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1163) - Evaluation order of exercise of an unknown contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1175)
- Evaluation order of exercise of an wrongly typed local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1099) - Evaluation order of exercise of an wrongly typed local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1111)
- Evaluation order of exercise of cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1032) - Evaluation order of exercise of cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1044)
- Evaluation order of exercise with argument exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1177) - Evaluation order of exercise with argument exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1189)
- Evaluation order of exercise with output exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1202) - Evaluation order of exercise with output exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1217)
- Evaluation order of exercise-by-key of a cached global contract with visibility failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1424) - Evaluation order of exercise-by-key of a cached global contract with visibility failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1442)
- Evaluation order of exercise-by-key of a non-cached global contract with visibility failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1304) - Evaluation order of exercise-by-key of a non-cached global contract with visibility failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1322)
- Evaluation order of exercise_by_key of a cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1492) - Evaluation order of exercise_by_key of a cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1510)
- Evaluation order of exercise_by_key of a local contract with visibility failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1516) - Evaluation order of exercise_by_key of a local contract with visibility failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1534)
- Evaluation order of exercise_by_key of a non-cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1277) - Evaluation order of exercise_by_key of a non-cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1295)
- Evaluation order of exercise_by_key of a wrongly typed cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1380) - Evaluation order of exercise_by_key of a wrongly typed cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1398)
- Evaluation order of exercise_by_key of an inactive global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1361) - Evaluation order of exercise_by_key of an inactive global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1379)
- Evaluation order of exercise_by_key of an inactive local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1472) - Evaluation order of exercise_by_key of an inactive local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1490)
- Evaluation order of exercise_by_key of an unknown contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1551) - Evaluation order of exercise_by_key of an unknown contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1569)
- Evaluation order of exercise_by_key of cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1399) - Evaluation order of exercise_by_key of cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1417)
- Evaluation order of exercise_by_key with argument exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1566) - Evaluation order of exercise_by_key with argument exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1584)
- Evaluation order of exercise_by_key with contract ID in contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1633) - Evaluation order of exercise_by_key with contract ID in contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1657)
- Evaluation order of exercise_by_key with result exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1592) - Evaluation order of exercise_by_key with result exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1613)
- Evaluation order of exercise_interface of a cached local contract with failed authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1929) - Evaluation order of exercise_interface of a cached local contract with failed authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1953)
- Evaluation order of exercise_interface of a non-cached global contract with failed authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1704) - Evaluation order of exercise_interface of a non-cached global contract with failed authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1728)
- Evaluation order of exercise_interface of an inactive local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1867) - Evaluation order of exercise_interface of an inactive local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1891)
- Evaluation order of exercise_interface of an local contract not implementing the interface: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1886) - Evaluation order of exercise_interface of an local contract not implementing the interface: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1910)
- Evaluation order of exercise_vy_key with empty contract key maintainers: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1619) - Evaluation order of exercise_vy_key with empty contract key maintainers: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1643)
- Evaluation order of fetch of a cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2214) - Evaluation order of fetch of a cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2238)
- Evaluation order of fetch of a non-cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2007) - Evaluation order of fetch of a non-cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2031)
- Evaluation order of fetch of a non-cached global contract with inconsistent key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2030) - Evaluation order of fetch of a non-cached global contract with inconsistent key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2054)
- Evaluation order of fetch of a wrongly typed cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2093) - Evaluation order of fetch of a wrongly typed cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2117)
- Evaluation order of fetch of a wrongly typed disclosed contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2234) - Evaluation order of fetch of a wrongly typed disclosed contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2258)
- Evaluation order of fetch of a wrongly typed non-cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1992) - Evaluation order of fetch of a wrongly typed non-cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2016)
- Evaluation order of fetch of an inactive global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2077) - Evaluation order of fetch of an inactive global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2101)
- Evaluation order of fetch of an inactive local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2162) - Evaluation order of fetch of an inactive local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2186)
- Evaluation order of fetch of an unknown contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2253) - Evaluation order of fetch of an unknown contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2277)
- Evaluation order of fetch of an wrongly typed local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2179) - Evaluation order of fetch of an wrongly typed local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2203)
- Evaluation order of fetch of cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2127) - Evaluation order of fetch of cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2151)
- Evaluation order of fetch-by-key of a cached global contract with visibility failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2424) - Evaluation order of fetch-by-key of a cached global contract with visibility failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2448)
- Evaluation order of fetch-by-key of a non-cached global contract with visibility failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2340) - Evaluation order of fetch-by-key of a non-cached global contract with visibility failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2364)
- Evaluation order of fetch_by_key of a cached global contract with authorization failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2407) - Evaluation order of fetch_by_key of a cached global contract with authorization failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2431)
- Evaluation order of fetch_by_key of a local contract with authorization failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2483) - Evaluation order of fetch_by_key of a local contract with authorization failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2507)
- Evaluation order of fetch_by_key of a non-cached global contract with authorization failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2317) - Evaluation order of fetch_by_key of a non-cached global contract with authorization failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2341)
- Evaluation order of fetch_by_key of an inactive global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2388) - Evaluation order of fetch_by_key of an inactive global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2412)
- Evaluation order of fetch_by_key of an inactive global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2465) - Evaluation order of fetch_by_key of an inactive global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2489)
- Evaluation order of fetch_by_key of an unknown contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2512) - Evaluation order of fetch_by_key of an unknown contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2536)
- Evaluation order of fetch_by_key with contract ID in contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2542) - Evaluation order of fetch_by_key with contract ID in contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2566)
- Evaluation order of fetch_by_key with contract key exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2556) - Evaluation order of fetch_by_key with contract key exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2580)
- Evaluation order of fetch_by_key with empty contract key maintainers: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2528) - Evaluation order of fetch_by_key with empty contract key maintainers: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2552)
- Evaluation order of fetch_interface of a cached global contract not implementing the interface.: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2676) - Evaluation order of fetch_interface of a cached global contract not implementing the interface.: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2703)
- Evaluation order of fetch_interface of a cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2800) - Evaluation order of fetch_interface of a cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2827)
- Evaluation order of fetch_interface of a non-cached global contract that doesn't implement interface.: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2598) - Evaluation order of fetch_interface of a non-cached global contract that doesn't implement interface.: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2625)
- Evaluation order of fetch_interface of a non-cached global contract with failed authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2615) - Evaluation order of fetch_interface of a non-cached global contract with failed authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2642)
- Evaluation order of fetch_interface of an inactive global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2659) - Evaluation order of fetch_interface of an inactive global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2686)
- Evaluation order of fetch_interface of an inactive local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2747) - Evaluation order of fetch_interface of an inactive local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2774)
- Evaluation order of fetch_interface of an local contract not implementing the interface: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2764) - Evaluation order of fetch_interface of an local contract not implementing the interface: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2791)
- Evaluation order of fetch_interface of an unknown contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2818) - Evaluation order of fetch_interface of an unknown contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2845)
- Evaluation order of fetch_interface of cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2712) - Evaluation order of fetch_interface of cached global contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2739)
- Evaluation order of lookup of a cached global contract with visibility failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2968) - Evaluation order of lookup of a cached global contract with visibility failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2995)
- Evaluation order of lookup of a non-cached global contract with visibility failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2885) - Evaluation order of lookup of a non-cached global contract with visibility failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2912)
- Evaluation order of lookup_by_key of a cached global contract with authorization failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2951) - Evaluation order of lookup_by_key of a cached global contract with authorization failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2978)
- Evaluation order of lookup_by_key of a local contract with authorization failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L3042) - Evaluation order of lookup_by_key of a local contract with authorization failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L3069)
- Evaluation order of lookup_by_key of a local contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L3026) - Evaluation order of lookup_by_key of a local contract with failure authorization: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L3053)
- Evaluation order of lookup_by_key of a non-cached global contract with authorization failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2862) - Evaluation order of lookup_by_key of a non-cached global contract with authorization failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2889)
- Evaluation order of lookup_by_key of an inactive global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2933) - Evaluation order of lookup_by_key of an inactive global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2960)
- Evaluation order of lookup_by_key of an inactive local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L3009) - Evaluation order of lookup_by_key of an inactive local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L3036)
- Evaluation order of lookup_by_key of an unknown contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L3072) - Evaluation order of lookup_by_key of an unknown contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L3099)
- Evaluation order of lookup_by_key with contract ID in contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L3102) - Evaluation order of lookup_by_key with contract ID in contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L3129)
- Evaluation order of lookup_by_key with contract key exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L3116) - Evaluation order of lookup_by_key with contract key exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L3143)
- Evaluation order of lookup_by_key with empty contract key maintainers: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L3088) - Evaluation order of lookup_by_key with empty contract key maintainers: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L3115)
- Evaluation order of successful create: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L467) - Evaluation order of successful create: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L467)
- Evaluation order of successful create_interface: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L658) - Evaluation order of successful create_interface: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L664)
- Evaluation order of successful exercise by interface of a non-cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1658) - Evaluation order of successful exercise by interface of a non-cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1682)
- Evaluation order of successful exercise of a cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L955) - Evaluation order of successful exercise of a cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L967)
- Evaluation order of successful exercise of a local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1057) - Evaluation order of successful exercise of a local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1069)
- Evaluation order of successful exercise of a non-cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L854) - Evaluation order of successful exercise of a non-cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L866)
- Evaluation order of successful exercise_by_key of a cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1335) - Evaluation order of successful exercise_by_key of a cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1353)
- Evaluation order of successful exercise_by_key of a local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1448) - Evaluation order of successful exercise_by_key of a local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1466)
- Evaluation order of successful exercise_by_key of a non-cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1233) - Evaluation order of successful exercise_by_key of a non-cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1251)
- Evaluation order of successful exercise_interface of a cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1734) - Evaluation order of successful exercise_interface of a cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1758)
- Evaluation order of successful exercise_interface of a local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1843) - Evaluation order of successful exercise_interface of a local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1867)
- Evaluation order of successful fetch of a cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2060) - Evaluation order of successful fetch of a cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2084)
- Evaluation order of successful fetch of a local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2147) - Evaluation order of successful fetch of a local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2171)
- Evaluation order of successful fetch of a non-cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1969) - Evaluation order of successful fetch of a non-cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1993)
- Evaluation order of successful fetch_by_key of a cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2371) - Evaluation order of successful fetch_by_key of a cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2395)
- Evaluation order of successful fetch_by_key of a local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2449) - Evaluation order of successful fetch_by_key of a local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2473)
- Evaluation order of successful fetch_by_key of a non-cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2272) - Evaluation order of successful fetch_by_key of a non-cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2296)
- Evaluation order of successful fetch_interface of a cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2642) - Evaluation order of successful fetch_interface of a cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2669)
- Evaluation order of successful fetch_interface of a local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2732) - Evaluation order of successful fetch_interface of a local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2759)
- Evaluation order of successful fetch_interface of a non-cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2574) - Evaluation order of successful fetch_interface of a non-cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2601)
- Evaluation order of successful lookup_by_key of a cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2916) - Evaluation order of successful lookup_by_key of a cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2943)
- Evaluation order of successful lookup_by_key of a local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2993) - Evaluation order of successful lookup_by_key of a local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L3020)
- Evaluation order of successful lookup_by_key of a non-cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2838) - Evaluation order of successful lookup_by_key of a non-cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2865)
- Exceptions, throw/catch.: [ExceptionTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/ExceptionTest.scala#L26) - Exceptions, throw/catch.: [ExceptionTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/ExceptionTest.scala#L26)
- Rollback creates cannot be exercise: [EngineTest.scala](daml-lf/engine/src/test/scala/com/digitalasset/daml/lf/engine/EngineTest.scala#L2175) - Rollback creates cannot be exercise: [EngineTest.scala](daml-lf/engine/src/test/scala/com/digitalasset/daml/lf/engine/EngineTest.scala#L2175)
- This checks that type checking in exercise_interface is done after checking activeness.: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1909) - This checks that type checking in exercise_interface is done after checking activeness.: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1933)
- This checks that type checking is done after checking activeness.: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1799) - This checks that type checking is done after checking activeness.: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1823)
- This checks that type checking is done after checking activeness.: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2782) - This checks that type checking is done after checking activeness.: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2809)
- contract key behaviour (non-unique mode): [ContractKeySpec.scala](daml-lf/engine/src/test/scala/com/digitalasset/daml/lf/engine/ContractKeySpec.scala#L410) - contract key behaviour (non-unique mode): [ContractKeySpec.scala](daml-lf/engine/src/test/scala/com/digitalasset/daml/lf/engine/ContractKeySpec.scala#L410)
- contract key behaviour (unique mode): [ContractKeySpec.scala](daml-lf/engine/src/test/scala/com/digitalasset/daml/lf/engine/ContractKeySpec.scala#L420) - contract key behaviour (unique mode): [ContractKeySpec.scala](daml-lf/engine/src/test/scala/com/digitalasset/daml/lf/engine/ContractKeySpec.scala#L420)
- contract keys must have a non-empty set of maintainers: [ContractKeySpec.scala](daml-lf/engine/src/test/scala/com/digitalasset/daml/lf/engine/ContractKeySpec.scala#L218) - contract keys must have a non-empty set of maintainers: [ContractKeySpec.scala](daml-lf/engine/src/test/scala/com/digitalasset/daml/lf/engine/ContractKeySpec.scala#L218)
@ -161,7 +161,7 @@
- ensure builtin operators have the correct type: [TypingSpec.scala](daml-lf/validation/src/test/scala/com/digitalasset/daml/lf/validation/TypingSpec.scala#L48) - ensure builtin operators have the correct type: [TypingSpec.scala](daml-lf/validation/src/test/scala/com/digitalasset/daml/lf/validation/TypingSpec.scala#L48)
- ensure expression forms have the correct type: [TypingSpec.scala](daml-lf/validation/src/test/scala/com/digitalasset/daml/lf/validation/TypingSpec.scala#L108) - ensure expression forms have the correct type: [TypingSpec.scala](daml-lf/validation/src/test/scala/com/digitalasset/daml/lf/validation/TypingSpec.scala#L108)
- exercise-by-interface command is rejected for a: [ApiCommandPreprocessorSpec.scala](daml-lf/engine/src/test/scala/com/digitalasset/daml/lf/engine/ApiCommandPreprocessorSpec.scala#L171) - exercise-by-interface command is rejected for a: [ApiCommandPreprocessorSpec.scala](daml-lf/engine/src/test/scala/com/digitalasset/daml/lf/engine/ApiCommandPreprocessorSpec.scala#L171)
- exercise_interface with a contract instance that does not implement the interface fails.: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1686) - exercise_interface with a contract instance that does not implement the interface fails.: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1710)
- ill-formed create API command is rejected: [ApiCommandPreprocessorSpec.scala](daml-lf/engine/src/test/scala/com/digitalasset/daml/lf/engine/ApiCommandPreprocessorSpec.scala#L159) - ill-formed create API command is rejected: [ApiCommandPreprocessorSpec.scala](daml-lf/engine/src/test/scala/com/digitalasset/daml/lf/engine/ApiCommandPreprocessorSpec.scala#L159)
- ill-formed create replay command is rejected: [ReplayCommandPreprocessorSpec.scala](daml-lf/engine/src/test/scala/com/digitalasset/daml/lf/engine/ReplayCommandPreprocessorSpec.scala#L109) - ill-formed create replay command is rejected: [ReplayCommandPreprocessorSpec.scala](daml-lf/engine/src/test/scala/com/digitalasset/daml/lf/engine/ReplayCommandPreprocessorSpec.scala#L109)
- ill-formed create-and-exercise API command is rejected: [ApiCommandPreprocessorSpec.scala](daml-lf/engine/src/test/scala/com/digitalasset/daml/lf/engine/ApiCommandPreprocessorSpec.scala#L184) - ill-formed create-and-exercise API command is rejected: [ApiCommandPreprocessorSpec.scala](daml-lf/engine/src/test/scala/com/digitalasset/daml/lf/engine/ApiCommandPreprocessorSpec.scala#L184)