mirror of
https://github.com/digital-asset/daml.git
synced 2024-10-04 08:17:27 +03:00
parent
c62dc41c6c
commit
c40f71586d
@ -62,7 +62,6 @@ private[lf] final class CommandPreprocessor(
|
||||
templateId = disc.templateId,
|
||||
contractId = disc.contractId,
|
||||
argument = arg,
|
||||
keyHash = disc.contractKeyWithMaintainers.map(_.globalKey.hash),
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -729,13 +729,6 @@ class EngineTest(majorLanguageVersion: LanguageMajorVersion)
|
||||
values = ArrayList(SValue.SParty(alice), SValue.SInt64(42)),
|
||||
)
|
||||
val usedContractKey = usedContractSKey.toNormalizedValue(TxVersions.minVersion)
|
||||
val unusedContractKey = Value.ValueRecord(
|
||||
None,
|
||||
ImmArray(
|
||||
None -> Value.ValueParty(alice),
|
||||
None -> Value.ValueInt64(69),
|
||||
),
|
||||
)
|
||||
val usedDisclosedContract = DisclosedContract(
|
||||
templateId,
|
||||
toContractId("BasicTests:WithKey:1"),
|
||||
@ -744,7 +737,6 @@ class EngineTest(majorLanguageVersion: LanguageMajorVersion)
|
||||
ImmArray(Ref.Name.assertFromString("p"), Ref.Name.assertFromString("k")),
|
||||
ArrayList(SValue.SParty(alice), SValue.SInt64(42)),
|
||||
),
|
||||
Some(crypto.Hash.assertHashContractKey(templateId, basicTestsPkg.pkgName, usedContractKey)),
|
||||
)
|
||||
val unusedDisclosedContract = DisclosedContract(
|
||||
templateId,
|
||||
@ -754,9 +746,6 @@ class EngineTest(majorLanguageVersion: LanguageMajorVersion)
|
||||
ImmArray(Ref.Name.assertFromString("p"), Ref.Name.assertFromString("k")),
|
||||
ArrayList(SValue.SParty(alice), SValue.SInt64(69)),
|
||||
),
|
||||
Some(
|
||||
crypto.Hash.assertHashContractKey(templateId, basicTestsPkg.pkgName, unusedContractKey)
|
||||
),
|
||||
)
|
||||
val fetchByKeyCommand = speedy.Command.FetchByKey(
|
||||
templateId = templateId,
|
||||
@ -1588,13 +1577,6 @@ class EngineTest(majorLanguageVersion: LanguageMajorVersion)
|
||||
None -> Value.ValueInt64(42),
|
||||
),
|
||||
)
|
||||
val unusedContractKey = Value.ValueRecord(
|
||||
None,
|
||||
ImmArray(
|
||||
None -> Value.ValueParty(alice),
|
||||
None -> Value.ValueInt64(69),
|
||||
),
|
||||
)
|
||||
val usedDisclosedContract = DisclosedContract(
|
||||
templateId,
|
||||
toContractId("BasicTests:WithKey:1"),
|
||||
@ -1603,7 +1585,6 @@ class EngineTest(majorLanguageVersion: LanguageMajorVersion)
|
||||
ImmArray(Ref.Name.assertFromString("p"), Ref.Name.assertFromString("k")),
|
||||
ArrayList(SValue.SParty(alice), SValue.SInt64(42)),
|
||||
),
|
||||
Some(crypto.Hash.assertHashContractKey(templateId, basicTestsPkg.pkgName, usedContractKey)),
|
||||
)
|
||||
val unusedDisclosedContract = DisclosedContract(
|
||||
templateId,
|
||||
@ -1613,9 +1594,6 @@ class EngineTest(majorLanguageVersion: LanguageMajorVersion)
|
||||
ImmArray(Ref.Name.assertFromString("p"), Ref.Name.assertFromString("k")),
|
||||
ArrayList(SValue.SParty(alice), SValue.SInt64(69)),
|
||||
),
|
||||
Some(
|
||||
crypto.Hash.assertHashContractKey(templateId, basicTestsPkg.pkgName, unusedContractKey)
|
||||
),
|
||||
)
|
||||
val lookupByKeyCommand = speedy.Command.LookupByKey(
|
||||
templateId = templateId,
|
||||
@ -1657,7 +1635,6 @@ class EngineTest(majorLanguageVersion: LanguageMajorVersion)
|
||||
ImmArray(Ref.Name.assertFromString("p")),
|
||||
ArrayList(SValue.SParty(alice)),
|
||||
),
|
||||
None,
|
||||
)
|
||||
val unusedDisclosedContract = DisclosedContract(
|
||||
templateId,
|
||||
@ -1667,7 +1644,6 @@ class EngineTest(majorLanguageVersion: LanguageMajorVersion)
|
||||
ImmArray(Ref.Name.assertFromString("p")),
|
||||
ArrayList(SValue.SParty(alice)),
|
||||
),
|
||||
None,
|
||||
)
|
||||
|
||||
"unused disclosed contracts not saved to ledger" in {
|
||||
|
@ -81,7 +81,6 @@ final case class DisclosedContract(
|
||||
templateId: Identifier,
|
||||
contractId: ContractId,
|
||||
argument: SValue,
|
||||
keyHash: Option[crypto.Hash],
|
||||
)
|
||||
|
||||
final case class InterfaceView(
|
||||
|
@ -1107,26 +1107,25 @@ private[lf] final class Compiler(
|
||||
var env = env0
|
||||
|
||||
s.SELet(
|
||||
disclosures.toList.flatMap {
|
||||
case DisclosedContract(templateId, contractId, argument, keyHash) =>
|
||||
// Let bounded variables occur after the contract disclosure bound variable - hence baseIndex+1
|
||||
// For each disclosed contract, we add 2 members to our let bounded list - hence 2*offset
|
||||
disclosures.toList.flatMap { case DisclosedContract(templateId, contractId, argument) =>
|
||||
// Let bounded variables occur after the contract disclosure bound variable - hence baseIndex+1
|
||||
// For each disclosed contract, we add 2 members to our let bounded list - hence 2*offset
|
||||
|
||||
val expr1 =
|
||||
s.SEApp(
|
||||
s.SEVal(t.ToContractInfoDefRef(templateId)),
|
||||
List(s.SEValue(argument), s.SEValue.None),
|
||||
)
|
||||
val contractPos = env.nextPosition
|
||||
env = env.pushVar
|
||||
val expr2 =
|
||||
app(
|
||||
s.SEBuiltin(SBCacheDisclosedContract(contractId, keyHash)),
|
||||
env.toSEVar(contractPos),
|
||||
)
|
||||
env = env.pushVar
|
||||
val expr1 =
|
||||
s.SEApp(
|
||||
s.SEVal(t.ToContractInfoDefRef(templateId)),
|
||||
List(s.SEValue(argument), s.SEValue.None),
|
||||
)
|
||||
val contractPos = env.nextPosition
|
||||
env = env.pushVar
|
||||
val expr2 =
|
||||
app(
|
||||
s.SEBuiltin(SBCacheDisclosedContract(contractId)),
|
||||
env.toSEVar(contractPos),
|
||||
)
|
||||
env = env.pushVar
|
||||
|
||||
List(expr1, expr2)
|
||||
List(expr1, expr2)
|
||||
},
|
||||
s.SEValue.Unit,
|
||||
)
|
||||
|
@ -1948,10 +1948,8 @@ private[lf] object SBuiltinFun {
|
||||
}
|
||||
|
||||
/** $cacheDisclosedContract[T] :: ContractId T -> ContractInfoStruct T -> Unit */
|
||||
private[speedy] final case class SBCacheDisclosedContract(
|
||||
contractId: V.ContractId,
|
||||
keyHash: Option[crypto.Hash],
|
||||
) extends UpdateBuiltin(1) {
|
||||
private[speedy] final case class SBCacheDisclosedContract(contractId: V.ContractId)
|
||||
extends UpdateBuiltin(1) {
|
||||
|
||||
override protected def executeUpdate(
|
||||
args: util.ArrayList[SValue],
|
||||
@ -1963,20 +1961,8 @@ private[lf] object SBuiltinFun {
|
||||
machine.tmplId2PackageNameVersion,
|
||||
contractInfoStruct,
|
||||
)
|
||||
(keyHash, contract.keyOpt) match {
|
||||
case (Some(hash), Some(key)) if hash != key.globalKey.hash =>
|
||||
Control.Error(IE.DisclosedContractKeyHashingError(contractId, key.globalKey, hash))
|
||||
case _ =>
|
||||
// Command preprocessing should enforce the following invariant
|
||||
val invariant = (keyHash.isDefined == contract.keyOpt.isDefined)
|
||||
if (!invariant)
|
||||
InternalError.assertionException(
|
||||
NameOf.qualifiedNameOfCurrentFunc,
|
||||
"unexpected mismatching contract key",
|
||||
)
|
||||
machine.addDisclosedContracts(contractId, contract)
|
||||
Control.Value(SUnit)
|
||||
}
|
||||
machine.addDisclosedContracts(contractId, contract)
|
||||
Control.Value(SUnit)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -14,12 +14,7 @@ import com.digitalasset.daml.lf.speedy.SExpr.SExpr
|
||||
import com.digitalasset.daml.lf.speedy.Speedy.ContractInfo
|
||||
import com.digitalasset.daml.lf.testing.parser.Implicits.SyntaxHelper
|
||||
import com.digitalasset.daml.lf.testing.parser.ParserParameters
|
||||
import com.digitalasset.daml.lf.transaction.{
|
||||
GlobalKey,
|
||||
GlobalKeyWithMaintainers,
|
||||
TransactionVersion,
|
||||
Versioned,
|
||||
}
|
||||
import com.digitalasset.daml.lf.transaction.{TransactionVersion, Versioned}
|
||||
import com.digitalasset.daml.lf.value.Value
|
||||
import com.digitalasset.daml.lf.value.Value.{ContractId, ContractInstance}
|
||||
import com.digitalasset.daml.lf.value.Value.ContractId.`Cid Order`
|
||||
@ -581,7 +576,6 @@ final class CompilerTestHelpers(majorLanguageVersion: LanguageMajorVersion) {
|
||||
templateId: Ref.Identifier,
|
||||
keyLabel: String = "",
|
||||
): DisclosedContract = {
|
||||
val withKey = keyLabel.nonEmpty
|
||||
val key = SValue.SRecord(
|
||||
templateId,
|
||||
ImmArray(
|
||||
@ -593,23 +587,10 @@ final class CompilerTestHelpers(majorLanguageVersion: LanguageMajorVersion) {
|
||||
SValue.SParty(maintainer),
|
||||
),
|
||||
)
|
||||
val globalKey =
|
||||
if (withKey) {
|
||||
Some(
|
||||
GlobalKeyWithMaintainers(
|
||||
GlobalKey.assertBuild(templateId, key.toUnnormalizedValue, pkg.pkgName),
|
||||
Set(maintainer),
|
||||
)
|
||||
)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
val keyHash = globalKey.map(_.globalKey.hash)
|
||||
val disclosedContract = DisclosedContract(
|
||||
templateId,
|
||||
contractId,
|
||||
key,
|
||||
keyHash,
|
||||
)
|
||||
|
||||
disclosedContract
|
||||
@ -624,7 +605,6 @@ final class CompilerTestHelpers(majorLanguageVersion: LanguageMajorVersion) {
|
||||
templateId,
|
||||
contractId,
|
||||
preCondContract(precondition = precondition),
|
||||
None,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -1656,7 +1656,7 @@ class SBuiltinTest(majorLanguageVersion: LanguageMajorVersion)
|
||||
SELet1(
|
||||
contractInfoSExpr,
|
||||
SEAppAtomic(
|
||||
SEBuiltinFun(SBCacheDisclosedContract(contractId, None)),
|
||||
SEBuiltinFun(SBCacheDisclosedContract(contractId)),
|
||||
Array(SELocS(1)),
|
||||
),
|
||||
),
|
||||
@ -1711,7 +1711,7 @@ class SBuiltinTest(majorLanguageVersion: LanguageMajorVersion)
|
||||
SELet1(
|
||||
contractInfoSExpr,
|
||||
SEAppAtomic(
|
||||
SEBuiltinFun(SBCacheDisclosedContract(contractId, Some(cachedKey.globalKey.hash))),
|
||||
SEBuiltinFun(SBCacheDisclosedContract(contractId)),
|
||||
Array(SELocS(1)),
|
||||
),
|
||||
),
|
||||
@ -1923,20 +1923,6 @@ final class SBuiltinTestHelpers(majorLanguageVersion: LanguageMajorVersion) {
|
||||
SValue.SList(FrontStack(SValue.SParty(maintainer))),
|
||||
),
|
||||
)
|
||||
val globalKey =
|
||||
if (withKey) {
|
||||
Some(
|
||||
GlobalKeyWithMaintainers.assertBuild(
|
||||
templateId,
|
||||
key.toUnnormalizedValue,
|
||||
Set(maintainer),
|
||||
pkg.pkgName,
|
||||
)
|
||||
)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
val keyHash = globalKey.map(_.globalKey.hash)
|
||||
val fields = if (withKey) ImmArray("i", "u", "name", "k") else ImmArray("i", "u", "name")
|
||||
val values: util.ArrayList[SValue] =
|
||||
if (withKey) {
|
||||
@ -1957,7 +1943,6 @@ final class SBuiltinTestHelpers(majorLanguageVersion: LanguageMajorVersion) {
|
||||
fields.map(Ref.Name.assertFromString),
|
||||
values,
|
||||
),
|
||||
keyHash,
|
||||
)
|
||||
|
||||
(disclosedContract, if (withKey) Some((key, keyWithMaintainers)) else None)
|
||||
|
@ -138,7 +138,7 @@
|
||||
- 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#L3181)
|
||||
- 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#L3052)
|
||||
- Exceptions, throw/catch.: [ExceptionTest.scala](daml-lf/interpreter/src/test/scala/com/digitalasset/daml/lf/speedy/ExceptionTest.scala#L28)
|
||||
- Rollback creates cannot be exercise: [EngineTest.scala](daml-lf/engine/src/test/scala/com/digitalasset/daml/lf/engine/EngineTest.scala#L2128)
|
||||
- Rollback creates cannot be exercise: [EngineTest.scala](daml-lf/engine/src/test/scala/com/digitalasset/daml/lf/engine/EngineTest.scala#L2104)
|
||||
- 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#L2052)
|
||||
- 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#L1922)
|
||||
- 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#L2984)
|
||||
|
Loading…
Reference in New Issue
Block a user