[Speedy] remove internal disclosure keyHash (#19802)

cleanup of #19668
This commit is contained in:
Remy 2024-08-19 14:08:54 +02:00 committed by GitHub
parent c62dc41c6c
commit c40f71586d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 25 additions and 101 deletions

View File

@ -62,7 +62,6 @@ private[lf] final class CommandPreprocessor(
templateId = disc.templateId,
contractId = disc.contractId,
argument = arg,
keyHash = disc.contractKeyWithMaintainers.map(_.globalKey.hash),
)
}

View File

@ -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 {

View File

@ -81,7 +81,6 @@ final case class DisclosedContract(
templateId: Identifier,
contractId: ContractId,
argument: SValue,
keyHash: Option[crypto.Hash],
)
final case class InterfaceView(

View File

@ -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,
)

View File

@ -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)
}
}

View File

@ -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,
)
}
}

View File

@ -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)

View File

@ -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)