mirror of
https://github.com/digital-asset/daml.git
synced 2024-09-20 01:07:18 +03:00
[Speedy] move compilation of disclosure outside of the Machine. (#16453)
Machine is not supposed to compile anything.
This commit is contained in:
parent
518248425a
commit
39d816f657
@ -279,7 +279,7 @@ class Engine(val config: EngineConfig = Engine.StableConfig) {
|
||||
for {
|
||||
sexpr <- runCompilerSafely(
|
||||
NameOf.qualifiedNameOfCurrentFunc,
|
||||
compiledPackages.compiler.unsafeCompile(commands),
|
||||
compiledPackages.compiler.unsafeCompile(commands, disclosures),
|
||||
)
|
||||
result <- interpretExpression(
|
||||
validating,
|
||||
@ -322,7 +322,6 @@ class Engine(val config: EngineConfig = Engine.StableConfig) {
|
||||
validating = validating,
|
||||
contractKeyUniqueness = config.contractKeyUniqueness,
|
||||
limits = config.limits,
|
||||
disclosedContracts = disclosures,
|
||||
)
|
||||
interpretLoop(machine, ledgerTime, disclosures)
|
||||
}
|
||||
|
@ -61,7 +61,6 @@ da_scala_library(
|
||||
"//daml-lf/validation",
|
||||
"//libs-scala/contextualized-logging",
|
||||
"//libs-scala/scala-utils",
|
||||
"@maven//:com_google_protobuf_protobuf_java",
|
||||
],
|
||||
)
|
||||
|
||||
|
@ -124,15 +124,8 @@ private[lf] final class Compiler(
|
||||
|
||||
@throws[PackageNotFound]
|
||||
@throws[CompilationError]
|
||||
def unsafeCompile(cmds: ImmArray[Command]): t.SExpr = compileCommands(cmds)
|
||||
|
||||
@throws[PackageNotFound]
|
||||
@throws[CompilationError]
|
||||
def unsafeCompileWithContractDisclosures(
|
||||
compiledCommands: t.SExpr,
|
||||
disclosures: ImmArray[DisclosedContract],
|
||||
): t.SExpr =
|
||||
compileWithContractDisclosures(compiledCommands, disclosures)
|
||||
def unsafeCompile(cmds: ImmArray[Command], disclosures: ImmArray[DisclosedContract]): t.SExpr =
|
||||
compileCommands(cmds, disclosures)
|
||||
|
||||
@throws[PackageNotFound]
|
||||
@throws[CompilationError]
|
||||
@ -332,21 +325,16 @@ private[lf] final class Compiler(
|
||||
private[this] def compileExp(expr: Expr): t.SExpr =
|
||||
pipeline(translateExp(Env.Empty, expr))
|
||||
|
||||
private[this] def compileCommands(cmds: ImmArray[Command]): t.SExpr =
|
||||
pipeline(translateCommands(Env.Empty, cmds))
|
||||
|
||||
private[this] def compileWithContractDisclosures(
|
||||
sexpr: t.SExpr,
|
||||
private[this] def compileCommands(
|
||||
cmds: ImmArray[Command],
|
||||
disclosures: ImmArray[DisclosedContract],
|
||||
): t.SExpr = {
|
||||
val disclosuresExpr = pipeline(
|
||||
translateContractDisclosures(Env.Empty, disclosures)
|
||||
): t.SExpr =
|
||||
pipeline(
|
||||
let(
|
||||
Env.Empty,
|
||||
translateContractDisclosures(Env.Empty, disclosures),
|
||||
)((_, env) => translateCommands(env, cmds))
|
||||
)
|
||||
t.SELet1(
|
||||
disclosuresExpr,
|
||||
sexpr,
|
||||
)
|
||||
}
|
||||
|
||||
private[this] def compileCommandForReinterpretation(cmd: Command): t.SExpr =
|
||||
pipeline(translateCommandForReinterpretation(cmd))
|
||||
|
@ -446,13 +446,9 @@ private[lf] object Speedy {
|
||||
contractKeyUniqueness: ContractKeyUniquenessMode = ContractKeyUniquenessMode.Strict,
|
||||
commitLocation: Option[Location] = None,
|
||||
limits: interpretation.Limits = interpretation.Limits.Lenient,
|
||||
disclosedContracts: ImmArray[speedy.DisclosedContract],
|
||||
)(implicit loggingContext: LoggingContext): UpdateMachine = {
|
||||
val exprWithDisclosures =
|
||||
compiledPackages.compiler.unsafeCompileWithContractDisclosures(expr, disclosedContracts)
|
||||
|
||||
)(implicit loggingContext: LoggingContext): UpdateMachine =
|
||||
new UpdateMachine(
|
||||
sexpr = exprWithDisclosures,
|
||||
sexpr = expr,
|
||||
validating = validating,
|
||||
submissionTime = submissionTime,
|
||||
ptx = PartialTransaction
|
||||
@ -473,7 +469,6 @@ private[lf] object Speedy {
|
||||
iterationsBetweenInterruptions = iterationsBetweenInterruptions,
|
||||
compiledPackages = compiledPackages,
|
||||
)
|
||||
}
|
||||
|
||||
private[lf] final case class Result(
|
||||
tx: SubmittedTransaction,
|
||||
@ -1129,7 +1124,6 @@ private[lf] object Speedy {
|
||||
updateE: Expr,
|
||||
committers: Set[Party],
|
||||
authorizationChecker: AuthorizationChecker = DefaultAuthorizationChecker,
|
||||
disclosedContracts: ImmArray[speedy.DisclosedContract] = ImmArray.Empty,
|
||||
limits: interpretation.Limits = interpretation.Limits.Lenient,
|
||||
)(implicit loggingContext: LoggingContext): UpdateMachine = {
|
||||
val updateSE: SExpr = compiledPackages.compiler.unsafeCompile(updateE)
|
||||
@ -1139,7 +1133,6 @@ private[lf] object Speedy {
|
||||
updateSE,
|
||||
committers,
|
||||
authorizationChecker,
|
||||
disclosedContracts,
|
||||
limits,
|
||||
)
|
||||
}
|
||||
@ -1153,7 +1146,6 @@ private[lf] object Speedy {
|
||||
updateSE: SExpr,
|
||||
committers: Set[Party],
|
||||
authorizationChecker: AuthorizationChecker = DefaultAuthorizationChecker,
|
||||
disclosedContracts: ImmArray[speedy.DisclosedContract] = ImmArray.Empty,
|
||||
limits: interpretation.Limits = interpretation.Limits.Lenient,
|
||||
traceLog: TraceLog = newTraceLog,
|
||||
)(implicit loggingContext: LoggingContext): UpdateMachine = {
|
||||
@ -1166,7 +1158,6 @@ private[lf] object Speedy {
|
||||
readAs = Set.empty,
|
||||
limits = limits,
|
||||
traceLog = traceLog,
|
||||
disclosedContracts = disclosedContracts,
|
||||
authorizationChecker = authorizationChecker,
|
||||
iterationsBetweenInterruptions = 10000,
|
||||
)
|
||||
|
@ -33,7 +33,7 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
.fill(10 * 1000)(Command.Create(recordCon, contract()))
|
||||
.toImmArray
|
||||
|
||||
compiledPackages.compiler.unsafeCompile(cmds) shouldBe a[SExpr]
|
||||
compiledPackages.compiler.unsafeCompile(cmds, ImmArray.Empty) shouldBe a[SExpr]
|
||||
}
|
||||
|
||||
"compile deeply nested lets" in {
|
||||
@ -81,9 +81,8 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
)
|
||||
|
||||
"accept disclosed contracts with a valid precondition" in {
|
||||
val sexpr = compiledPackages.compiler.unsafeCompileWithContractDisclosures(
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray.Empty)),
|
||||
ImmArray(disclosedContract1),
|
||||
val sexpr = tokenApp(
|
||||
compiledPackages.compiler.unsafeCompile(ImmArray.Empty, ImmArray(disclosedContract1))
|
||||
)
|
||||
|
||||
inside(evalSExpr(sexpr, getContract = Map(cid1 -> versionedContract1))) {
|
||||
@ -94,9 +93,8 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
}
|
||||
|
||||
"reject disclosed contracts with an invalid precondition" in {
|
||||
val sexpr = compiledPackages.compiler.unsafeCompileWithContractDisclosures(
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray.Empty)),
|
||||
ImmArray(disclosedContract2),
|
||||
val sexpr = tokenApp(
|
||||
compiledPackages.compiler.unsafeCompile(ImmArray.Empty, ImmArray(disclosedContract2))
|
||||
)
|
||||
|
||||
inside(evalSExpr(sexpr, getContract = Map(cid2 -> versionedContract2))) {
|
||||
@ -126,10 +124,7 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
"with no commands" should {
|
||||
"contract cache empty with no disclosures" in {
|
||||
val sexpr =
|
||||
compiledPackages.compiler.unsafeCompileWithContractDisclosures(
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray.Empty)),
|
||||
ImmArray.Empty,
|
||||
)
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray.Empty, ImmArray.Empty))
|
||||
|
||||
inside(evalSExpr(sexpr)) {
|
||||
case Right((SValue.SUnit, contractCache, disclosedContracts)) =>
|
||||
@ -139,9 +134,8 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
}
|
||||
|
||||
"contract cache contains single disclosure" in {
|
||||
val sexpr = compiledPackages.compiler.unsafeCompileWithContractDisclosures(
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray.Empty)),
|
||||
ImmArray(disclosedContract1),
|
||||
val sexpr = tokenApp(
|
||||
compiledPackages.compiler.unsafeCompile(ImmArray.Empty, ImmArray(disclosedContract1))
|
||||
)
|
||||
|
||||
inside(evalSExpr(sexpr, getContract = Map(cid1 -> versionedContract1))) {
|
||||
@ -152,9 +146,9 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
}
|
||||
|
||||
"contract cache contains multiple disclosures" in {
|
||||
val sexpr = compiledPackages.compiler.unsafeCompileWithContractDisclosures(
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray.Empty)),
|
||||
ImmArray(disclosedContract1, disclosedContract2),
|
||||
val sexpr = tokenApp(
|
||||
compiledPackages.compiler
|
||||
.unsafeCompile(ImmArray.Empty, ImmArray(disclosedContract1, disclosedContract2))
|
||||
)
|
||||
|
||||
inside(
|
||||
@ -173,10 +167,8 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
val command = Command.Create(templateId, contract())
|
||||
|
||||
"contract cache contains created contract with no disclosures" in {
|
||||
val sexpr = compiledPackages.compiler.unsafeCompileWithContractDisclosures(
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray(command))),
|
||||
ImmArray.Empty,
|
||||
)
|
||||
val sexpr =
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray(command), ImmArray.Empty))
|
||||
|
||||
inside(evalSExpr(sexpr, committers = Set(alice))) {
|
||||
case Right((SValue.SUnit, contractCache, disclosedContracts)) =>
|
||||
@ -186,9 +178,8 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
}
|
||||
|
||||
"contract cache contains created contract and single disclosure" in {
|
||||
val sexpr = compiledPackages.compiler.unsafeCompileWithContractDisclosures(
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray(command))),
|
||||
ImmArray(disclosedContract1),
|
||||
val sexpr = tokenApp(
|
||||
compiledPackages.compiler.unsafeCompile(ImmArray(command), ImmArray(disclosedContract1))
|
||||
)
|
||||
|
||||
inside(
|
||||
@ -205,9 +196,9 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
}
|
||||
|
||||
"contract cache contains created contract and multiple disclosures" in {
|
||||
val sexpr = compiledPackages.compiler.unsafeCompileWithContractDisclosures(
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray(command))),
|
||||
ImmArray(disclosedContract1, disclosedContract2),
|
||||
val sexpr = tokenApp(
|
||||
compiledPackages.compiler
|
||||
.unsafeCompile(ImmArray(command), ImmArray(disclosedContract1, disclosedContract2))
|
||||
)
|
||||
|
||||
inside(
|
||||
@ -230,9 +221,8 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
val command2 = Command.Create(templateId, contract())
|
||||
|
||||
"contract cache contains all created contracts with no disclosures" in {
|
||||
val sexpr = compiledPackages.compiler.unsafeCompileWithContractDisclosures(
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray(command1, command2))),
|
||||
ImmArray.Empty,
|
||||
val sexpr = tokenApp(
|
||||
compiledPackages.compiler.unsafeCompile(ImmArray(command1, command2), ImmArray.Empty)
|
||||
)
|
||||
|
||||
inside(evalSExpr(sexpr, committers = Set(alice))) {
|
||||
@ -243,9 +233,9 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
}
|
||||
|
||||
"contract cache contains all created contracts and single disclosure" in {
|
||||
val sexpr = compiledPackages.compiler.unsafeCompileWithContractDisclosures(
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray(command1, command2))),
|
||||
ImmArray(disclosedContract1),
|
||||
val sexpr = tokenApp(
|
||||
compiledPackages.compiler
|
||||
.unsafeCompile(ImmArray(command1, command2), ImmArray(disclosedContract1))
|
||||
)
|
||||
|
||||
inside(
|
||||
@ -263,9 +253,11 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
}
|
||||
|
||||
"contract cache contains all created contracts and multiple disclosures" in {
|
||||
val sexpr = compiledPackages.compiler.unsafeCompileWithContractDisclosures(
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray(command1, command2))),
|
||||
ImmArray(disclosedContract1, disclosedContract2),
|
||||
val sexpr = tokenApp(
|
||||
compiledPackages.compiler.unsafeCompile(
|
||||
ImmArray(command1, command2),
|
||||
ImmArray(disclosedContract1, disclosedContract2),
|
||||
)
|
||||
)
|
||||
|
||||
inside(
|
||||
@ -304,10 +296,7 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
"with no commands" should {
|
||||
"contract cache is empty with no disclosures" in {
|
||||
val sexpr =
|
||||
compiledPackages.compiler.unsafeCompileWithContractDisclosures(
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray.Empty)),
|
||||
ImmArray.Empty,
|
||||
)
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray.Empty, ImmArray.Empty))
|
||||
|
||||
inside(evalSExpr(sexpr)) {
|
||||
case Right((SValue.SUnit, contractCache, disclosedContracts)) =>
|
||||
@ -317,9 +306,8 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
}
|
||||
|
||||
"contract cache contains single disclosure" in {
|
||||
val sexpr = compiledPackages.compiler.unsafeCompileWithContractDisclosures(
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray.Empty)),
|
||||
ImmArray(disclosedContract1),
|
||||
val sexpr = tokenApp(
|
||||
compiledPackages.compiler.unsafeCompile(ImmArray.Empty, ImmArray(disclosedContract1))
|
||||
)
|
||||
|
||||
inside(evalSExpr(sexpr, getContract = Map(cid1 -> versionedContract1))) {
|
||||
@ -330,9 +318,9 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
}
|
||||
|
||||
"contract cache contains multiple disclosures" in {
|
||||
val sexpr = compiledPackages.compiler.unsafeCompileWithContractDisclosures(
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray.Empty)),
|
||||
ImmArray(disclosedContract1, disclosedContract2),
|
||||
val sexpr = tokenApp(
|
||||
compiledPackages.compiler
|
||||
.unsafeCompile(ImmArray.Empty, ImmArray(disclosedContract1, disclosedContract2))
|
||||
)
|
||||
|
||||
inside(
|
||||
@ -351,10 +339,8 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
val command = Command.Create(templateId, contract("test-label"))
|
||||
|
||||
"contract cache contains created contract with no disclosures" in {
|
||||
val sexpr = compiledPackages.compiler.unsafeCompileWithContractDisclosures(
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray(command))),
|
||||
ImmArray.Empty,
|
||||
)
|
||||
val sexpr =
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray(command), ImmArray.Empty))
|
||||
|
||||
inside(evalSExpr(sexpr, committers = Set(alice))) {
|
||||
case Right((SValue.SUnit, contractCache, disclosedContracts)) =>
|
||||
@ -364,9 +350,8 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
}
|
||||
|
||||
"contract cache contains created contract and single disclosure" in {
|
||||
val sexpr = compiledPackages.compiler.unsafeCompileWithContractDisclosures(
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray(command))),
|
||||
ImmArray(disclosedContract1),
|
||||
val sexpr = tokenApp(
|
||||
compiledPackages.compiler.unsafeCompile(ImmArray(command), ImmArray(disclosedContract1))
|
||||
)
|
||||
|
||||
inside(
|
||||
@ -383,9 +368,9 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
}
|
||||
|
||||
"contract cache contains created contract and multiple disclosures" in {
|
||||
val sexpr = compiledPackages.compiler.unsafeCompileWithContractDisclosures(
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray(command))),
|
||||
ImmArray(disclosedContract1, disclosedContract2),
|
||||
val sexpr = tokenApp(
|
||||
compiledPackages.compiler
|
||||
.unsafeCompile(ImmArray(command), ImmArray(disclosedContract1, disclosedContract2))
|
||||
)
|
||||
|
||||
inside(
|
||||
@ -408,9 +393,8 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
val command2 = Command.Create(templateId, contract("test-label-2"))
|
||||
|
||||
"contract cache contains all created contracts with no disclosures" in {
|
||||
val sexpr = compiledPackages.compiler.unsafeCompileWithContractDisclosures(
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray(command1, command2))),
|
||||
ImmArray.Empty,
|
||||
val sexpr = tokenApp(
|
||||
compiledPackages.compiler.unsafeCompile(ImmArray(command1, command2), ImmArray.Empty)
|
||||
)
|
||||
|
||||
inside(evalSExpr(sexpr, committers = Set(alice))) {
|
||||
@ -421,9 +405,9 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
}
|
||||
|
||||
"contract cache contains all created contracts and single disclosure" in {
|
||||
val sexpr = compiledPackages.compiler.unsafeCompileWithContractDisclosures(
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray(command1, command2))),
|
||||
ImmArray(disclosedContract1),
|
||||
val sexpr = tokenApp(
|
||||
compiledPackages.compiler
|
||||
.unsafeCompile(ImmArray(command1, command2), ImmArray(disclosedContract1))
|
||||
)
|
||||
|
||||
inside(
|
||||
@ -440,9 +424,11 @@ class CompilerTest extends AnyWordSpec with Matchers with Inside {
|
||||
}
|
||||
|
||||
"contract cache contains all created contracts and multiple disclosures" in {
|
||||
val sexpr = compiledPackages.compiler.unsafeCompileWithContractDisclosures(
|
||||
tokenApp(compiledPackages.compiler.unsafeCompile(ImmArray(command1, command2))),
|
||||
ImmArray(disclosedContract1, disclosedContract2),
|
||||
val sexpr = tokenApp(
|
||||
compiledPackages.compiler.unsafeCompile(
|
||||
ImmArray(command1, command2),
|
||||
ImmArray(disclosedContract1, disclosedContract2),
|
||||
)
|
||||
)
|
||||
|
||||
inside(
|
||||
@ -543,7 +529,6 @@ object CompilerTest {
|
||||
initialSeeding = InitialSeeding.TransactionSeed(crypto.Hash.hashPrivateKey("CompilerTest")),
|
||||
expr = sexpr,
|
||||
committers = committers,
|
||||
disclosedContracts = ImmArray.Empty,
|
||||
readAs = Set.empty,
|
||||
)
|
||||
|
||||
|
@ -4,8 +4,7 @@
|
||||
package com.daml.lf
|
||||
package speedy
|
||||
|
||||
import com.daml.lf.command.ContractMetadata
|
||||
import com.daml.lf.data.{Bytes, FrontStack, ImmArray, Ref, Time}
|
||||
import com.daml.lf.data.{FrontStack, ImmArray, Ref}
|
||||
import com.daml.lf.data.Ref.{Location, Party}
|
||||
import com.daml.lf.interpretation.{Error => IE}
|
||||
import com.daml.lf.language.Ast._
|
||||
@ -349,20 +348,24 @@ class EvaluationOrderTest extends AnyFreeSpec with Matchers with Inside {
|
||||
),
|
||||
)
|
||||
|
||||
private[this] def buildDisclosedContract(signatory: Party): Versioned[DisclosedContract] =
|
||||
Versioned(
|
||||
TransactionVersion.minExplicitDisclosure,
|
||||
DisclosedContract(
|
||||
Dummy,
|
||||
SContractId(cId),
|
||||
SRecord(
|
||||
private[this] def buildDisclosedContract(
|
||||
signatory: Party
|
||||
): (Value.ContractId, Speedy.CachedContract) = {
|
||||
cId ->
|
||||
Speedy.CachedContract(
|
||||
version = TransactionVersion.minExplicitDisclosure,
|
||||
templateId = Dummy,
|
||||
value = SRecord(
|
||||
Dummy,
|
||||
ImmArray(Ref.Name.assertFromString("signatory")),
|
||||
ArrayList(SParty(signatory)),
|
||||
),
|
||||
ContractMetadata(Time.Timestamp.now(), None, Bytes.Empty),
|
||||
),
|
||||
)
|
||||
agreementText = "",
|
||||
signatories = Set(signatory),
|
||||
observers = Set.empty,
|
||||
keyOpt = None,
|
||||
)
|
||||
}
|
||||
|
||||
private[this] val visibleContract = buildContract(bob)
|
||||
private[this] val nonVisibleContract = buildContract(alice)
|
||||
@ -418,24 +421,27 @@ class EvaluationOrderTest extends AnyFreeSpec with Matchers with Inside {
|
||||
e: Expr,
|
||||
args: Array[SValue],
|
||||
parties: Set[Party],
|
||||
disclosedContracts: ImmArray[Versioned[DisclosedContract]] = ImmArray.Empty,
|
||||
disclosedContracts: Iterable[(Value.ContractId, Speedy.CachedContract)] = Iterable.empty,
|
||||
getContract: PartialFunction[Value.ContractId, Value.VersionedContractInstance] =
|
||||
PartialFunction.empty,
|
||||
getKey: PartialFunction[GlobalKeyWithMaintainers, Value.ContractId] = PartialFunction.empty,
|
||||
): (Try[Either[SError, SValue]], Seq[String]) = {
|
||||
val se = pkgs.compiler.unsafeCompile(e)
|
||||
val traceLog = new TestTraceLog()
|
||||
val machine = Speedy.Machine
|
||||
.fromUpdateSExpr(
|
||||
pkgs,
|
||||
seed,
|
||||
if (args.isEmpty) se else SEApp(se, args),
|
||||
parties,
|
||||
traceLog = traceLog,
|
||||
)
|
||||
disclosedContracts.foreach { case (cid, contract) =>
|
||||
machine.addDisclosedContracts(cid, contract)
|
||||
}
|
||||
val res = Try(
|
||||
SpeedyTestLib.run(
|
||||
Speedy.Machine
|
||||
.fromUpdateSExpr(
|
||||
pkgs,
|
||||
seed,
|
||||
if (args.isEmpty) se else SEApp(se, args),
|
||||
parties,
|
||||
disclosedContracts = disclosedContracts.map(_.unversioned),
|
||||
traceLog = traceLog,
|
||||
),
|
||||
machine,
|
||||
getContract = traceLog.tracePF("queries contract", getContract),
|
||||
getKey = traceLog.tracePF("queries key", getKey),
|
||||
)
|
||||
@ -2214,7 +2220,7 @@ class EvaluationOrderTest extends AnyFreeSpec with Matchers with Inside {
|
||||
in Test:fetch_by_id fetchingParty cId2""",
|
||||
Array(SParty(alice), SParty(alice), SContractId(cId)),
|
||||
Set(alice),
|
||||
disclosedContracts = ImmArray(buildDisclosedContract(alice)),
|
||||
disclosedContracts = List(buildDisclosedContract(alice)),
|
||||
)
|
||||
|
||||
inside(result) {
|
||||
|
@ -4,13 +4,11 @@
|
||||
package com.daml.lf
|
||||
package speedy
|
||||
|
||||
import com.daml.lf.command.ContractMetadata
|
||||
import com.daml.lf.crypto.Hash
|
||||
import com.daml.lf.data.Ref.{IdString, Party}
|
||||
import com.daml.lf.data.{Bytes, FrontStack, ImmArray, Ref, Struct, Time}
|
||||
import com.daml.lf.data.{FrontStack, ImmArray, Ref, Struct}
|
||||
import com.daml.lf.language.Ast
|
||||
import com.daml.lf.speedy.SExpr.SEMakeClo
|
||||
import com.daml.lf.speedy.SValue.{SContractId, SToken}
|
||||
import com.daml.lf.speedy.SValue.SToken
|
||||
import com.daml.lf.speedy.Speedy.{CachedContract, CachedKey}
|
||||
import com.daml.lf.transaction.{GlobalKey, GlobalKeyWithMaintainers, TransactionVersion, Versioned}
|
||||
import com.daml.lf.value.Value
|
||||
@ -96,63 +94,76 @@ object ExplicitDisclosureLib {
|
||||
val caveTemplateType: Ref.TypeConName = Ref.TypeConName.assertFromString("-pkgId-:TestMod:Cave")
|
||||
val keyType: Ref.TypeConName = Ref.TypeConName.assertFromString("-pkgId-:TestMod:Key")
|
||||
val contractKey: GlobalKey = buildContractKey(maintainerParty)
|
||||
val contractSKey: SValue = buildContractSKey(maintainerParty)
|
||||
val contractSStructKey: SValue =
|
||||
SValue.SStruct(
|
||||
fieldNames =
|
||||
Struct.assertFromNameSeq(Seq("globalKey", "maintainers").map(Ref.Name.assertFromString)),
|
||||
values = ArrayList(
|
||||
buildContractSKey(maintainerParty),
|
||||
SValue.SList(FrontStack.from(ImmArray(SValue.SParty(maintainerParty)))),
|
||||
),
|
||||
)
|
||||
val ledgerContractKey: GlobalKey = buildContractKey(ledgerParty)
|
||||
val ledgerHouseContract: Value.VersionedContractInstance =
|
||||
buildContract(ledgerParty, maintainerParty)
|
||||
val ledgerCaveContract: Value.VersionedContractInstance =
|
||||
buildContract(ledgerParty, maintainerParty, caveTemplateId)
|
||||
val disclosedCaveContractNoHash: DisclosedContract =
|
||||
buildDisclosedCaveContract(contractId, disclosureParty)
|
||||
val disclosedHouseContract: DisclosedContract =
|
||||
buildDisclosedHouseContract(disclosureContractId, disclosureParty, maintainerParty)
|
||||
val disclosedCaveContract: DisclosedContract =
|
||||
buildDisclosedCaveContract(contractId, disclosureParty)
|
||||
val disclosedCaveContractNoHash: (Value.ContractId, Speedy.CachedContract) =
|
||||
contractId -> buildDisclosedCaveContract(disclosureParty)
|
||||
val disclosedHouseContract: (Value.ContractId, Speedy.CachedContract) =
|
||||
disclosureContractId -> buildDisclosedHouseContract(disclosureParty, maintainerParty)
|
||||
val disclosedCaveContract: (Value.ContractId, Speedy.CachedContract) =
|
||||
contractId -> buildDisclosedCaveContract(disclosureParty)
|
||||
|
||||
def buildDisclosedHouseContract(
|
||||
contractId: ContractId,
|
||||
owner: Party,
|
||||
maintainer: Party,
|
||||
templateId: Ref.Identifier = houseTemplateId,
|
||||
withHash: Boolean = true,
|
||||
withKey: Boolean = true,
|
||||
label: String = testKeyName,
|
||||
): DisclosedContract = {
|
||||
val key = Value.ValueRecord(
|
||||
None,
|
||||
ImmArray(
|
||||
None -> Value.ValueText(label),
|
||||
None -> Value.ValueList(FrontStack.from(ImmArray(Value.ValueParty(maintainer)))),
|
||||
),
|
||||
)
|
||||
val keyHash: Option[Hash] =
|
||||
if (withHash) Some(crypto.Hash.assertHashContractKey(houseTemplateType, key)) else None
|
||||
|
||||
DisclosedContract(
|
||||
templateId,
|
||||
SContractId(contractId),
|
||||
SValue.SRecord(
|
||||
): Speedy.CachedContract = {
|
||||
val cachedKey: Option[Speedy.CachedKey] =
|
||||
if (withKey)
|
||||
Some(
|
||||
Speedy.CachedKey(
|
||||
globalKeyWithMaintainers =
|
||||
GlobalKeyWithMaintainers(buildContractKey(maintainer, label), Set(maintainer)),
|
||||
key = buildContractSKey(maintainer),
|
||||
)
|
||||
)
|
||||
else
|
||||
None
|
||||
Speedy.CachedContract(
|
||||
version = TransactionVersion.maxVersion,
|
||||
templateId = templateId,
|
||||
value = SValue.SRecord(
|
||||
templateId,
|
||||
ImmArray(Ref.Name.assertFromString("owner"), Ref.Name.assertFromString("key_maintainer")),
|
||||
ArrayList(SValue.SParty(owner), SValue.SParty(maintainer)),
|
||||
),
|
||||
ContractMetadata(Time.Timestamp.now(), keyHash, Bytes.Empty),
|
||||
agreementText = "",
|
||||
signatories = Set(owner, maintainer),
|
||||
observers = Set.empty,
|
||||
keyOpt = cachedKey,
|
||||
)
|
||||
}
|
||||
|
||||
def buildDisclosedCaveContract(
|
||||
contractId: ContractId,
|
||||
owner: Party,
|
||||
templateId: Ref.Identifier = caveTemplateId,
|
||||
): DisclosedContract = {
|
||||
DisclosedContract(
|
||||
templateId,
|
||||
SContractId(contractId),
|
||||
SValue.SRecord(
|
||||
): Speedy.CachedContract = {
|
||||
Speedy.CachedContract(
|
||||
version = TransactionVersion.maxVersion,
|
||||
templateId = templateId,
|
||||
value = SValue.SRecord(
|
||||
templateId,
|
||||
ImmArray(Ref.Name.assertFromString("owner")),
|
||||
ArrayList(SValue.SParty(owner)),
|
||||
),
|
||||
ContractMetadata(Time.Timestamp.now(), None, Bytes.Empty),
|
||||
agreementText = "",
|
||||
signatories = Set(owner),
|
||||
observers = Set.empty,
|
||||
keyOpt = None,
|
||||
)
|
||||
}
|
||||
|
||||
@ -172,18 +183,11 @@ object ExplicitDisclosureLib {
|
||||
)
|
||||
|
||||
def buildContractSKey(maintainer: Party, label: String = testKeyName): SValue =
|
||||
SValue.SStruct(
|
||||
fieldNames =
|
||||
Struct.assertFromNameSeq(Seq("globalKey", "maintainers").map(Ref.Name.assertFromString)),
|
||||
values = ArrayList(
|
||||
SValue.SRecord(
|
||||
keyType,
|
||||
ImmArray("label", "maintainers").map(Ref.Name.assertFromString),
|
||||
ArrayList(
|
||||
SValue.SText(label),
|
||||
SValue.SList(FrontStack.from(ImmArray(SValue.SParty(maintainer)))),
|
||||
),
|
||||
),
|
||||
SValue.SRecord(
|
||||
keyType,
|
||||
ImmArray("label", "maintainers").map(Ref.Name.assertFromString),
|
||||
ArrayList(
|
||||
SValue.SText(label),
|
||||
SValue.SList(FrontStack.from(ImmArray(SValue.SParty(maintainer)))),
|
||||
),
|
||||
)
|
||||
@ -272,7 +276,7 @@ object ExplicitDisclosureLib {
|
||||
)(
|
||||
sexpr: SExpr.SExpr,
|
||||
committers: Set[Party] = Set.empty,
|
||||
disclosedContracts: ImmArray[DisclosedContract] = ImmArray.Empty,
|
||||
disclosures: Iterable[(Value.ContractId, CachedContract)] = Iterable.empty,
|
||||
getContract: PartialFunction[Value.ContractId, Value.VersionedContractInstance] =
|
||||
PartialFunction.empty,
|
||||
getKey: PartialFunction[GlobalKeyWithMaintainers, Value.ContractId] = PartialFunction.empty,
|
||||
@ -289,16 +293,21 @@ object ExplicitDisclosureLib {
|
||||
if (setupArgs.isEmpty) contextSExpr
|
||||
else SExpr.SEApp(contextSExpr, setupArgs),
|
||||
committers = committers,
|
||||
disclosedContracts = disclosedContracts,
|
||||
)
|
||||
disclosures.foreach { case (cid, contract) => machine.addDisclosedContracts(cid, contract) }
|
||||
val setupResult = SpeedyTestLib.run(
|
||||
machine = machine,
|
||||
getContract = getContract,
|
||||
getKey = getKey,
|
||||
)
|
||||
|
||||
assert(setupResult.isRight)
|
||||
|
||||
setupResult match {
|
||||
case Right(_) => ()
|
||||
case Left(SError.SErrorCrash(loc, err)) =>
|
||||
throw new Exception(s"$loc: $err")
|
||||
case Left(SError.SErrorDamlException(error)) =>
|
||||
throw new Exception(s"$error")
|
||||
}
|
||||
machine.setExpressionToEvaluate(SExpr.SEApp(runUpdateSExpr(sexpr), Array(SToken)))
|
||||
|
||||
val result = SpeedyTestLib.run(
|
||||
@ -313,7 +322,7 @@ object ExplicitDisclosureLib {
|
||||
def evaluateSExpr(
|
||||
sexpr: SExpr.SExpr,
|
||||
committers: Set[Party] = Set.empty,
|
||||
disclosedContracts: ImmArray[DisclosedContract] = ImmArray.Empty,
|
||||
disclosures: Iterable[(Value.ContractId, CachedContract)] = Iterable.empty,
|
||||
getContract: PartialFunction[Value.ContractId, Value.VersionedContractInstance] =
|
||||
PartialFunction.empty,
|
||||
getKey: PartialFunction[GlobalKeyWithMaintainers, Value.ContractId] = PartialFunction.empty,
|
||||
@ -326,8 +335,8 @@ object ExplicitDisclosureLib {
|
||||
transactionSeed = crypto.Hash.hashPrivateKey("ExplicitDisclosureLib"),
|
||||
updateSE = runUpdateSExpr(sexpr),
|
||||
committers = committers,
|
||||
disclosedContracts = disclosedContracts,
|
||||
)
|
||||
disclosures.foreach { case (cid, contract) => machine.addDisclosedContracts(cid, contract) }
|
||||
val result = SpeedyTestLib.run(
|
||||
machine = machine,
|
||||
getContract = getContract,
|
||||
@ -358,14 +367,12 @@ object ExplicitDisclosureLib {
|
||||
}
|
||||
|
||||
def haveDisclosedContracts(
|
||||
disclosedContracts: DisclosedContract*
|
||||
disclosures: (Value.ContractId, CachedContract)*
|
||||
): Matcher[Speedy.UpdateMachine] =
|
||||
Matcher { machine =>
|
||||
val expectedResult = disclosedContracts.iterator
|
||||
.map(c =>
|
||||
c.contractId.value -> c.argument.toNormalizedValue(machine.tmplId2TxVersion(c.templateId))
|
||||
)
|
||||
.toMap
|
||||
val expectedResult = disclosures.iterator.map { case (coid, contract) =>
|
||||
coid -> contract.arg
|
||||
}.toMap
|
||||
val actualResult = machine.disclosedContracts.transform((_, c) => c.arg)
|
||||
|
||||
val debugMessage = {
|
||||
|
@ -4,9 +4,7 @@
|
||||
package com.daml.lf
|
||||
package speedy
|
||||
|
||||
import com.daml.lf.command.ContractMetadata
|
||||
import com.daml.lf.data.Ref.Party
|
||||
import com.daml.lf.data.{Bytes, Ref, ImmArray, Time}
|
||||
import com.daml.lf.interpretation.Error.{ContractKeyNotFound, ContractNotActive}
|
||||
import com.daml.lf.speedy.SExpr.SEValue
|
||||
import com.daml.lf.value.Value
|
||||
@ -16,7 +14,8 @@ import org.scalatest.freespec.AnyFreeSpec
|
||||
import org.scalatest.matchers.should.Matchers
|
||||
import com.daml.lf.speedy.SBuiltin.{SBUFetchKey, SBFetchAny, SBULookupKey}
|
||||
import com.daml.lf.speedy.SValue.SContractId
|
||||
import com.daml.lf.transaction.{GlobalKeyWithMaintainers, GlobalKey}
|
||||
import com.daml.lf.speedy.Speedy.CachedContract
|
||||
import com.daml.lf.transaction.GlobalKeyWithMaintainers
|
||||
import com.daml.lf.testing.parser.Implicits._
|
||||
|
||||
class ExplicitDisclosureTest extends ExplicitDisclosureTestMethods {
|
||||
@ -30,8 +29,9 @@ class ExplicitDisclosureTest extends ExplicitDisclosureTestMethods {
|
||||
ledgerParty should not be maintainerParty
|
||||
disclosureParty should not be maintainerParty
|
||||
getOwner(ledgerCaveContract.unversioned.arg) shouldBe Some(ledgerParty)
|
||||
disclosedCaveContract.contractId shouldBe SContractId(contractId)
|
||||
getOwner(disclosedCaveContract.argument.toUnnormalizedValue) shouldBe Some(disclosureParty)
|
||||
inside(disclosedCaveContract) { case (`contractId`, contract) =>
|
||||
getOwner(contract.arg) shouldBe Some(disclosureParty)
|
||||
}
|
||||
}
|
||||
|
||||
"ledger queried when contract ID is not disclosed" in {
|
||||
@ -51,7 +51,7 @@ class ExplicitDisclosureTest extends ExplicitDisclosureTestMethods {
|
||||
disclosureTableQueriedWhenContractDisclosed(
|
||||
SBFetchAny(SEValue(SContractId(contractId)), SEValue.None),
|
||||
disclosedCaveContract,
|
||||
disclosedContracts = ImmArray(disclosedCaveContract),
|
||||
disclosures = List(disclosedCaveContract),
|
||||
)(result =>
|
||||
inside(result) {
|
||||
case Right(SValue.SAny(_, contract @ SValue.SRecord(`caveTemplateId`, _, _))) =>
|
||||
@ -65,7 +65,7 @@ class ExplicitDisclosureTest extends ExplicitDisclosureTestMethods {
|
||||
SBFetchAny(SEValue(SContractId(contractId)), SEValue.None),
|
||||
disclosedCaveContract,
|
||||
getContract = Map(contractId -> ledgerCaveContract),
|
||||
disclosedContracts = ImmArray(disclosedCaveContract),
|
||||
disclosures = List(disclosedCaveContract),
|
||||
)(result =>
|
||||
inside(result) {
|
||||
case Right(SValue.SAny(_, contract @ SValue.SRecord(`caveTemplateId`, _, _))) =>
|
||||
@ -101,7 +101,7 @@ class ExplicitDisclosureTest extends ExplicitDisclosureTestMethods {
|
||||
contractId,
|
||||
"TestMod:destroyCave",
|
||||
committers = Set(disclosureParty),
|
||||
disclosedContracts = ImmArray(disclosedCaveContract),
|
||||
disclosures = List(disclosedCaveContract),
|
||||
)(result =>
|
||||
inside(result) {
|
||||
case Left(
|
||||
@ -122,7 +122,7 @@ class ExplicitDisclosureTest extends ExplicitDisclosureTestMethods {
|
||||
"TestMod:destroyCave",
|
||||
committers = Set(disclosureParty, ledgerParty),
|
||||
getContract = Map(contractId -> ledgerCaveContract),
|
||||
disclosedContracts = ImmArray(disclosedCaveContract),
|
||||
disclosures = List(disclosedCaveContract),
|
||||
)(result =>
|
||||
inside(result) {
|
||||
case Left(
|
||||
@ -144,16 +144,15 @@ class ExplicitDisclosureTest extends ExplicitDisclosureTestMethods {
|
||||
ledgerParty should not be maintainerParty
|
||||
disclosureParty should not be maintainerParty
|
||||
ledgerContractId should not be disclosureContractId
|
||||
disclosedHouseContract.contractId shouldBe SContractId(disclosureContractId)
|
||||
getOwner(disclosedHouseContract.argument.toUnnormalizedValue) shouldBe Some(disclosureParty)
|
||||
getMaintainer(disclosedHouseContract.argument.toUnnormalizedValue) shouldBe Some(
|
||||
maintainerParty
|
||||
)
|
||||
inside(disclosedHouseContract) { case (`disclosureContractId`, contract) =>
|
||||
getOwner(contract.arg) shouldBe Some(disclosureParty)
|
||||
getMaintainer(contract.arg) shouldBe Some(maintainerParty)
|
||||
}
|
||||
}
|
||||
|
||||
"ledger queried when contract key is not disclosed" in {
|
||||
ledgerQueriedWhenContractNotDisclosed(
|
||||
SBUFetchKey(houseTemplateId)(SEValue(contractSKey)),
|
||||
SBUFetchKey(houseTemplateId)(SEValue(contractSStructKey)),
|
||||
committers = Set(ledgerParty),
|
||||
getKey = Map(
|
||||
GlobalKeyWithMaintainers(contractKey, Set(maintainerParty)) -> ledgerContractId
|
||||
@ -165,23 +164,23 @@ class ExplicitDisclosureTest extends ExplicitDisclosureTestMethods {
|
||||
"disclosure table queried when contract key is disclosed" - {
|
||||
"contract key in disclosure table only" in {
|
||||
disclosureTableQueriedWhenContractDisclosed(
|
||||
SBUFetchKey(houseTemplateId)(SEValue(contractSKey)),
|
||||
SBUFetchKey(houseTemplateId)(SEValue(contractSStructKey)),
|
||||
disclosedHouseContract,
|
||||
committers = Set(disclosureParty),
|
||||
disclosedContracts = ImmArray(disclosedHouseContract),
|
||||
disclosures = List(disclosedHouseContract),
|
||||
)(_ shouldBe Right(SValue.SContractId(disclosureContractId)))
|
||||
}
|
||||
|
||||
"contract key in ledger and disclosure table" in {
|
||||
disclosureTableQueriedWhenContractDisclosed(
|
||||
SBUFetchKey(houseTemplateId)(SEValue(contractSKey)),
|
||||
SBUFetchKey(houseTemplateId)(SEValue(contractSStructKey)),
|
||||
disclosedHouseContract,
|
||||
committers = Set(disclosureParty, ledgerParty),
|
||||
getKey = Map(
|
||||
GlobalKeyWithMaintainers(contractKey, Set(maintainerParty)) -> ledgerContractId
|
||||
),
|
||||
getContract = Map(ledgerContractId -> ledgerHouseContract),
|
||||
disclosedContracts = ImmArray(disclosedHouseContract),
|
||||
disclosures = List(disclosedHouseContract),
|
||||
)(_ shouldBe Right(SValue.SContractId(disclosureContractId)))
|
||||
}
|
||||
}
|
||||
@ -189,7 +188,7 @@ class ExplicitDisclosureTest extends ExplicitDisclosureTestMethods {
|
||||
"disclosed contract keys that are inactive" - {
|
||||
"ledger query fails when contract key is not disclosed" in {
|
||||
ledgerQueryFailsWhenContractNotDisclosed(
|
||||
SBUFetchKey(houseTemplateId)(SEValue(contractSKey)),
|
||||
SBUFetchKey(houseTemplateId)(SEValue(contractSStructKey)),
|
||||
ledgerContractId,
|
||||
"TestMod:destroyHouse",
|
||||
committers = Set(ledgerParty),
|
||||
@ -208,12 +207,12 @@ class ExplicitDisclosureTest extends ExplicitDisclosureTestMethods {
|
||||
"disclosure table query fails when contract key is disclosed" - {
|
||||
"contract key in disclosure table only" in {
|
||||
disclosureTableQueryFailsWhenContractDisclosed(
|
||||
SBUFetchKey(houseTemplateId)(SEValue(contractSKey)),
|
||||
SBUFetchKey(houseTemplateId)(SEValue(contractSStructKey)),
|
||||
disclosedHouseContract,
|
||||
disclosureContractId,
|
||||
"TestMod:destroyHouse",
|
||||
committers = Set(disclosureParty, maintainerParty),
|
||||
disclosedContracts = ImmArray(disclosedHouseContract),
|
||||
disclosures = List(disclosedHouseContract),
|
||||
)(result =>
|
||||
inside(result) {
|
||||
case Left(SError.SErrorDamlException(ContractKeyNotFound(`contractKey`))) =>
|
||||
@ -226,7 +225,7 @@ class ExplicitDisclosureTest extends ExplicitDisclosureTestMethods {
|
||||
for (contractIdToBurn <- Set(ledgerContractId, disclosureContractId)) {
|
||||
// Exercising a single contract ID is sufficient to make the key inactive
|
||||
disclosureTableQueryFailsWhenContractDisclosed(
|
||||
SBUFetchKey(houseTemplateId)(SEValue(contractSKey)),
|
||||
SBUFetchKey(houseTemplateId)(SEValue(contractSStructKey)),
|
||||
disclosedHouseContract,
|
||||
contractIdToBurn,
|
||||
"TestMod:destroyHouse",
|
||||
@ -238,7 +237,7 @@ class ExplicitDisclosureTest extends ExplicitDisclosureTestMethods {
|
||||
) -> ledgerContractId
|
||||
),
|
||||
getContract = Map(ledgerContractId -> ledgerHouseContract),
|
||||
disclosedContracts = ImmArray(disclosedHouseContract),
|
||||
disclosures = List(disclosedHouseContract),
|
||||
)(result =>
|
||||
inside(result) {
|
||||
case Left(SError.SErrorDamlException(ContractKeyNotFound(`contractKey`))) =>
|
||||
@ -249,16 +248,6 @@ class ExplicitDisclosureTest extends ExplicitDisclosureTestMethods {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
"wrongly typed contract disclosures are not found" in {
|
||||
wronglyTypedDisclosedContractsRejected(
|
||||
SBUFetchKey(houseTemplateType)(SEValue(contractSKey))
|
||||
) { result =>
|
||||
inside(result) { case Left(SError.SErrorDamlException(ContractKeyNotFound(_))) =>
|
||||
succeed
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
"looking up contract keys" - {
|
||||
@ -267,16 +256,15 @@ class ExplicitDisclosureTest extends ExplicitDisclosureTestMethods {
|
||||
ledgerParty should not be maintainerParty
|
||||
disclosureParty should not be maintainerParty
|
||||
ledgerContractId should not be disclosureContractId
|
||||
disclosedHouseContract.contractId shouldBe SContractId(disclosureContractId)
|
||||
getOwner(disclosedHouseContract.argument.toUnnormalizedValue) shouldBe Some(disclosureParty)
|
||||
getMaintainer(disclosedHouseContract.argument.toUnnormalizedValue) shouldBe Some(
|
||||
maintainerParty
|
||||
)
|
||||
inside(disclosedHouseContract) { case (`disclosureContractId`, contract) =>
|
||||
getOwner(contract.arg) shouldBe Some(disclosureParty)
|
||||
getMaintainer(contract.arg) shouldBe Some(maintainerParty)
|
||||
}
|
||||
}
|
||||
|
||||
"ledger queried when contract key is not disclosed" in {
|
||||
ledgerQueriedWhenContractNotDisclosed(
|
||||
SBULookupKey(houseTemplateId)(SEValue(contractSKey)),
|
||||
SBULookupKey(houseTemplateId)(SEValue(contractSStructKey)),
|
||||
committers = Set(ledgerParty),
|
||||
getKey = Map(
|
||||
GlobalKeyWithMaintainers(contractKey, Set(maintainerParty)) -> ledgerContractId
|
||||
@ -288,23 +276,23 @@ class ExplicitDisclosureTest extends ExplicitDisclosureTestMethods {
|
||||
"disclosure table queried when contract key is disclosed" - {
|
||||
"contract key in disclosure table only" in {
|
||||
disclosureTableQueriedWhenContractDisclosed(
|
||||
SBULookupKey(houseTemplateId)(SEValue(contractSKey)),
|
||||
SBULookupKey(houseTemplateId)(SEValue(contractSStructKey)),
|
||||
disclosedHouseContract,
|
||||
committers = Set(disclosureParty),
|
||||
disclosedContracts = ImmArray(disclosedHouseContract),
|
||||
disclosures = List(disclosedHouseContract),
|
||||
)(_ shouldBe Right(SValue.SOptional(Some(SValue.SContractId(disclosureContractId)))))
|
||||
}
|
||||
|
||||
"contract key in ledger and disclosure table" in {
|
||||
disclosureTableQueriedWhenContractDisclosed(
|
||||
SBULookupKey(houseTemplateId)(SEValue(contractSKey)),
|
||||
SBULookupKey(houseTemplateId)(SEValue(contractSStructKey)),
|
||||
disclosedHouseContract,
|
||||
committers = Set(disclosureParty, ledgerParty),
|
||||
getKey = Map(
|
||||
GlobalKeyWithMaintainers(contractKey, Set(maintainerParty)) -> ledgerContractId
|
||||
),
|
||||
getContract = Map(ledgerContractId -> ledgerHouseContract),
|
||||
disclosedContracts = ImmArray(disclosedHouseContract),
|
||||
disclosures = List(disclosedHouseContract),
|
||||
)(_ shouldBe Right(SValue.SOptional(Some(SValue.SContractId(disclosureContractId)))))
|
||||
}
|
||||
}
|
||||
@ -312,7 +300,7 @@ class ExplicitDisclosureTest extends ExplicitDisclosureTestMethods {
|
||||
"disclosed contract keys that are inactive" - {
|
||||
"ledger query fails when contract key is not disclosed" in {
|
||||
ledgerQueryFailsWhenContractNotDisclosed(
|
||||
SBULookupKey(houseTemplateId)(SEValue(contractSKey)),
|
||||
SBULookupKey(houseTemplateId)(SEValue(contractSStructKey)),
|
||||
ledgerContractId,
|
||||
"TestMod:destroyHouse",
|
||||
committers = Set(ledgerParty),
|
||||
@ -330,12 +318,12 @@ class ExplicitDisclosureTest extends ExplicitDisclosureTestMethods {
|
||||
"disclosure table query fails when contract key is disclosed" - {
|
||||
"contract key in disclosure table only" in {
|
||||
disclosureTableQueryFailsWhenContractDisclosed(
|
||||
SBULookupKey(houseTemplateId)(SEValue(contractSKey)),
|
||||
SBULookupKey(houseTemplateId)(SEValue(contractSStructKey)),
|
||||
disclosedHouseContract,
|
||||
disclosureContractId,
|
||||
"TestMod:destroyHouse",
|
||||
committers = Set(disclosureParty, maintainerParty),
|
||||
disclosedContracts = ImmArray(disclosedHouseContract),
|
||||
disclosures = List(disclosedHouseContract),
|
||||
)(result =>
|
||||
inside(result) { case Right(SValue.SOptional(None)) =>
|
||||
succeed
|
||||
@ -347,7 +335,7 @@ class ExplicitDisclosureTest extends ExplicitDisclosureTestMethods {
|
||||
for (contractIdToBurn <- Set(ledgerContractId, disclosureContractId)) {
|
||||
// Exercising a single contract ID is sufficient to make the key inactive
|
||||
disclosureTableQueryFailsWhenContractDisclosed(
|
||||
SBULookupKey(houseTemplateId)(SEValue(contractSKey)),
|
||||
SBULookupKey(houseTemplateId)(SEValue(contractSStructKey)),
|
||||
disclosedHouseContract,
|
||||
contractIdToBurn,
|
||||
"TestMod:destroyHouse",
|
||||
@ -359,7 +347,7 @@ class ExplicitDisclosureTest extends ExplicitDisclosureTestMethods {
|
||||
) -> ledgerContractId
|
||||
),
|
||||
getContract = Map(ledgerContractId -> ledgerHouseContract),
|
||||
disclosedContracts = ImmArray(disclosedHouseContract),
|
||||
disclosures = List(disclosedHouseContract),
|
||||
)(result =>
|
||||
inside(result) { case Right(SValue.SOptional(None)) =>
|
||||
succeed
|
||||
@ -369,12 +357,6 @@ class ExplicitDisclosureTest extends ExplicitDisclosureTestMethods {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
"wrongly typed contract disclosures are not found" in {
|
||||
wronglyTypedDisclosedContractsRejected(
|
||||
SBULookupKey(houseTemplateType)(SEValue(contractSKey))
|
||||
)(_ shouldBe Right(SValue.SOptional(None)))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -386,7 +368,7 @@ private[lf] trait ExplicitDisclosureTestMethods extends AnyFreeSpec with Inside
|
||||
def ledgerQueriedWhenContractNotDisclosed(
|
||||
sexpr: SExpr.SExpr,
|
||||
committers: Set[Party] = Set.empty,
|
||||
disclosedContracts: ImmArray[DisclosedContract] = ImmArray.Empty,
|
||||
disclosures: Iterable[(Value.ContractId, CachedContract)] = Iterable.empty,
|
||||
getContract: PartialFunction[Value.ContractId, Value.VersionedContractInstance] =
|
||||
PartialFunction.empty,
|
||||
getKey: PartialFunction[GlobalKeyWithMaintainers, Value.ContractId] = PartialFunction.empty,
|
||||
@ -395,7 +377,7 @@ private[lf] trait ExplicitDisclosureTestMethods extends AnyFreeSpec with Inside
|
||||
evaluateSExpr(
|
||||
sexpr,
|
||||
committers = committers,
|
||||
disclosedContracts = disclosedContracts,
|
||||
disclosures = disclosures,
|
||||
getContract = getContract,
|
||||
getKey = getKey,
|
||||
)
|
||||
@ -407,9 +389,9 @@ private[lf] trait ExplicitDisclosureTestMethods extends AnyFreeSpec with Inside
|
||||
|
||||
def disclosureTableQueriedWhenContractDisclosed(
|
||||
sexpr: SExpr.SExpr,
|
||||
disclosedContract: DisclosedContract,
|
||||
disclosedContract: (Value.ContractId, CachedContract),
|
||||
committers: Set[Party] = Set.empty,
|
||||
disclosedContracts: ImmArray[DisclosedContract] = ImmArray.Empty,
|
||||
disclosures: Iterable[(Value.ContractId, CachedContract)] = Iterable.empty,
|
||||
getContract: PartialFunction[Value.ContractId, Value.VersionedContractInstance] =
|
||||
PartialFunction.empty,
|
||||
getKey: PartialFunction[GlobalKeyWithMaintainers, Value.ContractId] = PartialFunction.empty,
|
||||
@ -418,7 +400,7 @@ private[lf] trait ExplicitDisclosureTestMethods extends AnyFreeSpec with Inside
|
||||
evaluateSExpr(
|
||||
sexpr,
|
||||
committers = committers,
|
||||
disclosedContracts = disclosedContracts,
|
||||
disclosures = disclosures,
|
||||
getContract = getContract,
|
||||
getKey = getKey,
|
||||
)
|
||||
@ -433,7 +415,7 @@ private[lf] trait ExplicitDisclosureTestMethods extends AnyFreeSpec with Inside
|
||||
contractId: ContractId,
|
||||
action: String,
|
||||
committers: Set[Party] = Set.empty,
|
||||
disclosedContracts: ImmArray[DisclosedContract] = ImmArray.Empty,
|
||||
disclosures: Iterable[(Value.ContractId, CachedContract)] = Iterable.empty,
|
||||
getContract: PartialFunction[Value.ContractId, Value.VersionedContractInstance] =
|
||||
PartialFunction.empty,
|
||||
getKey: PartialFunction[GlobalKeyWithMaintainers, Value.ContractId] = PartialFunction.empty,
|
||||
@ -447,7 +429,7 @@ private[lf] trait ExplicitDisclosureTestMethods extends AnyFreeSpec with Inside
|
||||
)(
|
||||
sexpr,
|
||||
committers = committers,
|
||||
disclosedContracts = disclosedContracts,
|
||||
disclosures = disclosures,
|
||||
getContract = getContract,
|
||||
getKey = getKey,
|
||||
)
|
||||
@ -459,11 +441,11 @@ private[lf] trait ExplicitDisclosureTestMethods extends AnyFreeSpec with Inside
|
||||
|
||||
def disclosureTableQueryFailsWhenContractDisclosed(
|
||||
sexpr: SExpr.SExpr,
|
||||
disclosedContract: DisclosedContract,
|
||||
disclosedContract: (Value.ContractId, CachedContract),
|
||||
contractToDestroy: ContractId,
|
||||
action: String,
|
||||
committers: Set[Party] = Set.empty,
|
||||
disclosedContracts: ImmArray[DisclosedContract] = ImmArray.Empty,
|
||||
disclosures: Iterable[(Value.ContractId, CachedContract)],
|
||||
getContract: PartialFunction[Value.ContractId, Value.VersionedContractInstance] =
|
||||
PartialFunction.empty,
|
||||
getKey: PartialFunction[GlobalKeyWithMaintainers, Value.ContractId] = PartialFunction.empty,
|
||||
@ -477,7 +459,7 @@ private[lf] trait ExplicitDisclosureTestMethods extends AnyFreeSpec with Inside
|
||||
)(
|
||||
sexpr,
|
||||
committers = committers,
|
||||
disclosedContracts = disclosedContracts,
|
||||
disclosures = disclosures,
|
||||
getContract = getContract,
|
||||
getKey = getKey,
|
||||
)
|
||||
@ -486,35 +468,4 @@ private[lf] trait ExplicitDisclosureTestMethods extends AnyFreeSpec with Inside
|
||||
machine should haveDisclosedContracts(disclosedContract)
|
||||
machine should haveInactiveContractIds(contractToDestroy)
|
||||
}
|
||||
|
||||
def wronglyTypedDisclosedContractsRejected(
|
||||
sexpr: SExpr.SExpr
|
||||
)(assertResult: Either[SError.SError, SValue] => Assertion): Assertion = {
|
||||
val houseContractKey: GlobalKey = buildContractKey(maintainerParty)
|
||||
// Here the disclosed contract has a caveTemplateType, but its key has a houseTemplateType
|
||||
val malformedDisclosedContract: DisclosedContract =
|
||||
DisclosedContract(
|
||||
caveTemplateType,
|
||||
SContractId(disclosureContractId),
|
||||
SValue.SRecord(
|
||||
caveTemplateType,
|
||||
ImmArray(
|
||||
Ref.Name.assertFromString("owner"),
|
||||
Ref.Name.assertFromString("key_maintainer"),
|
||||
),
|
||||
ArrayList(SValue.SParty(disclosureParty), SValue.SParty(maintainerParty)),
|
||||
),
|
||||
ContractMetadata(Time.Timestamp.now(), Some(houseContractKey.hash), Bytes.Empty),
|
||||
)
|
||||
val (result, machine) =
|
||||
evaluateSExpr(
|
||||
sexpr,
|
||||
committers = Set(disclosureParty),
|
||||
disclosedContracts = ImmArray(malformedDisclosedContract),
|
||||
)
|
||||
|
||||
assertResult(result)
|
||||
machine should haveDisclosedContracts(malformedDisclosedContract)
|
||||
machine should haveInactiveContractIds()
|
||||
}
|
||||
}
|
||||
|
@ -620,8 +620,8 @@ object SpeedyTest {
|
||||
buildHouseCachedContract(alice, alice, label = "global-label")
|
||||
val disclosedContractId: ContractId =
|
||||
ContractId.V1(crypto.Hash.hashPrivateKey("test-disclosed-contract-id"))
|
||||
val disclosedContract: DisclosedContract =
|
||||
buildDisclosedHouseContract(disclosedContractId, alice, alice, label = "disclosed-label")
|
||||
val disclosedContract: CachedContract =
|
||||
buildDisclosedHouseContract(alice, alice, label = "disclosed-label")
|
||||
val disclosedContractKey: GlobalKey = buildContractKey(alice, "disclosed-label")
|
||||
val disclosedCachedContract: CachedContract =
|
||||
buildHouseCachedContract(alice, alice, label = "disclosed-label")
|
||||
@ -633,7 +633,7 @@ object SpeedyTest {
|
||||
SEValue(SUnit),
|
||||
// As committers is empty, our readers will be empty and so contracts and contract keys will *always* be non-visible to stakeholders
|
||||
committers = Set.empty,
|
||||
disclosedContracts = ImmArray(disclosedContract),
|
||||
// disclosedContracts = ImmArray(disclosedContract),
|
||||
)
|
||||
.withWarningLog(testLogger)
|
||||
.withCachedContracts(
|
||||
|
@ -438,7 +438,6 @@ private[lf] object ScenarioRunner {
|
||||
warningLog = warningLog,
|
||||
commitLocation = location,
|
||||
limits = interpretation.Limits.Lenient,
|
||||
disclosedContracts = ImmArray.Empty,
|
||||
)
|
||||
// TODO (drsk) validate and propagate errors back to submitter
|
||||
// https://github.com/digital-asset/daml/issues/14108
|
||||
|
@ -264,7 +264,7 @@ class IdeLedgerClient(
|
||||
} else {
|
||||
|
||||
val speedyCommands = preprocessor.unsafePreprocessApiCommands(commands.to(ImmArray))
|
||||
val translated = compiledPackages.compiler.unsafeCompile(speedyCommands)
|
||||
val translated = compiledPackages.compiler.unsafeCompile(speedyCommands, ImmArray.empty)
|
||||
|
||||
val ledgerApi = ScenarioRunner.ScenarioLedgerApi(ledger)
|
||||
val result =
|
||||
|
@ -35,124 +35,124 @@
|
||||
- ensure correct privacy for rollback subtree: [BlindingSpec.scala](daml-lf/engine/src/test/scala/com/digitalasset/daml/lf/engine/BlindingSpec.scala#L199)
|
||||
|
||||
## Integrity:
|
||||
- Evaluation order of create with authorization failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L554)
|
||||
- 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#L577)
|
||||
- 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#L627)
|
||||
- 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#L604)
|
||||
- Evaluation order of create with duplicate contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L505)
|
||||
- Evaluation order of create with empty contract key maintainers: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L530)
|
||||
- Evaluation order of create with failed precondition: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L487)
|
||||
- Evaluation order of create_interface with authorization failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L748)
|
||||
- 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#L771)
|
||||
- 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#L821)
|
||||
- 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#L798)
|
||||
- Evaluation order of create_interface with duplicate contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L697)
|
||||
- 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#L722)
|
||||
- Evaluation order of create_interface with failed precondition: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L679)
|
||||
- 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#L1751)
|
||||
- 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#L1733)
|
||||
- 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#L1791)
|
||||
- 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#L1124)
|
||||
- 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#L891)
|
||||
- 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#L916)
|
||||
- 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#L988)
|
||||
- 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#L876)
|
||||
- Evaluation order of exercise of an inactive global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L971)
|
||||
- Evaluation order of exercise of an inactive local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1066)
|
||||
- Evaluation order of exercise of an unknown contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1148)
|
||||
- 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#L1085)
|
||||
- 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#L1024)
|
||||
- Evaluation order of exercise with argument exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1162)
|
||||
- Evaluation order of exercise with output exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1186)
|
||||
- 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#L1403)
|
||||
- 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#L1285)
|
||||
- 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#L1470)
|
||||
- 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#L1493)
|
||||
- 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#L1259)
|
||||
- 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#L1360)
|
||||
- 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#L1341)
|
||||
- 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#L1450)
|
||||
- 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#L1527)
|
||||
- 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#L1379)
|
||||
- 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#L1542)
|
||||
- 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#L1607)
|
||||
- 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#L1567)
|
||||
- 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#L1903)
|
||||
- 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#L1678)
|
||||
- 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#L1841)
|
||||
- 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#L1860)
|
||||
- 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#L1593)
|
||||
- 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#L2188)
|
||||
- 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#L1981)
|
||||
- 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#L2004)
|
||||
- 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#L2067)
|
||||
- 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#L2208)
|
||||
- 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#L1966)
|
||||
- Evaluation order of fetch of an inactive global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2051)
|
||||
- Evaluation order of fetch of an inactive local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2136)
|
||||
- Evaluation order of fetch of an unknown contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2227)
|
||||
- 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#L2153)
|
||||
- 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#L2101)
|
||||
- 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#L2398)
|
||||
- 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#L2314)
|
||||
- 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#L2381)
|
||||
- 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#L2457)
|
||||
- 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#L2291)
|
||||
- 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#L2362)
|
||||
- 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#L2439)
|
||||
- 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#L2486)
|
||||
- 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#L2516)
|
||||
- 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#L2530)
|
||||
- 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#L2502)
|
||||
- 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#L2650)
|
||||
- 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#L2774)
|
||||
- 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#L2572)
|
||||
- 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#L2589)
|
||||
- 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#L2633)
|
||||
- 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#L2721)
|
||||
- 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#L2738)
|
||||
- Evaluation order of fetch_interface of an unknown contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2792)
|
||||
- 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#L2686)
|
||||
- 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#L2942)
|
||||
- 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#L2859)
|
||||
- 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#L2925)
|
||||
- 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#L3016)
|
||||
- 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#L3000)
|
||||
- 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#L2836)
|
||||
- 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#L2907)
|
||||
- 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#L2983)
|
||||
- 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#L3046)
|
||||
- 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#L3076)
|
||||
- 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#L3090)
|
||||
- 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#L3062)
|
||||
- Evaluation order of successful create: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L463)
|
||||
- Evaluation order of successful create_interface: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L654)
|
||||
- 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#L1632)
|
||||
- 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#L948)
|
||||
- Evaluation order of successful exercise of a local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1044)
|
||||
- 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#L850)
|
||||
- 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#L1316)
|
||||
- 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#L1427)
|
||||
- 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#L1216)
|
||||
- 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#L1708)
|
||||
- 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#L1817)
|
||||
- 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#L2034)
|
||||
- Evaluation order of successful fetch of a local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2121)
|
||||
- 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#L1943)
|
||||
- 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#L2345)
|
||||
- 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#L2423)
|
||||
- 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#L2246)
|
||||
- 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#L2616)
|
||||
- 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#L2706)
|
||||
- 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#L2548)
|
||||
- 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#L2890)
|
||||
- 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#L2967)
|
||||
- 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#L2812)
|
||||
- Evaluation order of create with authorization failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L560)
|
||||
- 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#L583)
|
||||
- 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#L633)
|
||||
- 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#L610)
|
||||
- Evaluation order of create with duplicate contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L511)
|
||||
- Evaluation order of create with empty contract key maintainers: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L536)
|
||||
- Evaluation order of create with failed precondition: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L493)
|
||||
- Evaluation order of create_interface with authorization failure: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L754)
|
||||
- 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#L777)
|
||||
- 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#L827)
|
||||
- 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#L804)
|
||||
- Evaluation order of create_interface with duplicate contract key: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L703)
|
||||
- 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#L728)
|
||||
- Evaluation order of create_interface with failed precondition: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L685)
|
||||
- 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#L1757)
|
||||
- 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#L1739)
|
||||
- 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#L1797)
|
||||
- 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#L1130)
|
||||
- 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#L897)
|
||||
- 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 wrongly typed cached global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L994)
|
||||
- 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#L882)
|
||||
- Evaluation order of exercise of an inactive global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L977)
|
||||
- Evaluation order of exercise of an inactive local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1072)
|
||||
- Evaluation order of exercise of an unknown contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1154)
|
||||
- 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#L1091)
|
||||
- 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#L1030)
|
||||
- Evaluation order of exercise with argument exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1168)
|
||||
- Evaluation order of exercise with output exceeding max nesting: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1192)
|
||||
- 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#L1409)
|
||||
- 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#L1291)
|
||||
- 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#L1476)
|
||||
- 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#L1499)
|
||||
- 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#L1265)
|
||||
- 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#L1366)
|
||||
- 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#L1347)
|
||||
- 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#L1456)
|
||||
- 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#L1533)
|
||||
- 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#L1385)
|
||||
- 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#L1548)
|
||||
- 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#L1613)
|
||||
- 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#L1573)
|
||||
- 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#L1909)
|
||||
- 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#L1684)
|
||||
- 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#L1847)
|
||||
- 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#L1866)
|
||||
- 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#L1599)
|
||||
- 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#L2194)
|
||||
- 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#L1987)
|
||||
- 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#L2010)
|
||||
- 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#L2073)
|
||||
- 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#L2214)
|
||||
- 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#L1972)
|
||||
- Evaluation order of fetch of an inactive global contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2057)
|
||||
- Evaluation order of fetch of an inactive local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2142)
|
||||
- Evaluation order of fetch of an unknown contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2233)
|
||||
- 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#L2159)
|
||||
- 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#L2107)
|
||||
- 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#L2404)
|
||||
- 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#L2320)
|
||||
- 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#L2387)
|
||||
- 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#L2463)
|
||||
- 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#L2297)
|
||||
- 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#L2368)
|
||||
- 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#L2445)
|
||||
- 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#L2492)
|
||||
- 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#L2522)
|
||||
- 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#L2536)
|
||||
- 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#L2508)
|
||||
- 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#L2656)
|
||||
- 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#L2780)
|
||||
- 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#L2578)
|
||||
- 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#L2595)
|
||||
- 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#L2639)
|
||||
- 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#L2727)
|
||||
- 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#L2744)
|
||||
- Evaluation order of fetch_interface of an unknown contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2798)
|
||||
- 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#L2692)
|
||||
- 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#L2948)
|
||||
- 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#L2865)
|
||||
- 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#L2931)
|
||||
- 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#L3022)
|
||||
- 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#L3006)
|
||||
- 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#L2842)
|
||||
- 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#L2913)
|
||||
- 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#L2989)
|
||||
- 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#L3052)
|
||||
- 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#L3082)
|
||||
- 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#L3096)
|
||||
- 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#L3068)
|
||||
- Evaluation order of successful create: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L469)
|
||||
- Evaluation order of successful create_interface: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L660)
|
||||
- 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#L1638)
|
||||
- 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#L954)
|
||||
- Evaluation order of successful exercise of a local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L1050)
|
||||
- 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#L856)
|
||||
- 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#L1322)
|
||||
- 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#L1433)
|
||||
- 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#L1222)
|
||||
- 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#L1714)
|
||||
- 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#L1823)
|
||||
- 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#L2040)
|
||||
- Evaluation order of successful fetch of a local contract: [EvaluationOrderTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/EvaluationOrderTest.scala#L2127)
|
||||
- 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#L1949)
|
||||
- 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#L2351)
|
||||
- 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#L2429)
|
||||
- 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#L2252)
|
||||
- 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#L2622)
|
||||
- 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#L2712)
|
||||
- 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#L2554)
|
||||
- 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#L2896)
|
||||
- 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#L2973)
|
||||
- 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#L2818)
|
||||
- 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#L2181)
|
||||
- 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#L1883)
|
||||
- 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#L1773)
|
||||
- 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#L2756)
|
||||
- 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#L1889)
|
||||
- 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#L1779)
|
||||
- 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#L2762)
|
||||
- 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 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 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_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#L1660)
|
||||
- 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#L1666)
|
||||
- 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-and-exercise API command is rejected: [ApiCommandPreprocessorSpec.scala](daml-lf/engine/src/test/scala/com/digitalasset/daml/lf/engine/ApiCommandPreprocessorSpec.scala#L184)
|
||||
|
Loading…
Reference in New Issue
Block a user