Removing treatment of local divulgence blinding info (#4424)

In a committed transaction (i.e. a transaction with only absolute
contract ids), local divulgence is a non-concept.
Therefore local divulgences don't need to be treated and all code
related to it can be removed.

This also removes some duplication between InMemoryLedger and SqlLedger.

CHANGELOG_BEGIN
CHANGELOG_END
This commit is contained in:
Gerolf Seitz 2020-02-07 17:25:38 +01:00 committed by GitHub
parent 8710673e71
commit 19ba231986
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 79 additions and 158 deletions

View File

@ -50,7 +50,7 @@ class CommandExecutorImpl(engine: Engine, getPackage: PackageId => Future[Option
.map { submission => .map { submission =>
(for { (for {
updateTx <- submission updateTx <- submission
blindingInfo <- Blinding _ <- Blinding
.checkAuthorizationAndBlind(updateTx, Set(submitter)) .checkAuthorizationAndBlind(updateTx, Set(submitter))
} yield } yield
( (

View File

@ -283,11 +283,8 @@ class JdbcIndexer private[indexer] (
EventIdFormatter.fromTransactionId(transactionId, nodeId) -> parties EventIdFormatter.fromTransactionId(transactionId, nodeId) -> parties
} }
val mappedLocalDivulgence = blindingInfo.localDivulgence.map { // local blinding info only contains values on transactions with relative contractIds.
case (nodeId, parties) => // this does not happen here (see type of transaction: GenTransaction.WithTxValue[NodeId, Value.AbsoluteContractId])
EventIdFormatter.fromTransactionId(transactionId, nodeId) -> parties
}
assert(blindingInfo.localDivulgence.isEmpty) assert(blindingInfo.localDivulgence.isEmpty)
val pt = PersistenceEntry.Transaction( val pt = PersistenceEntry.Transaction(
@ -300,11 +297,9 @@ class JdbcIndexer private[indexer] (
transactionMeta.ledgerEffectiveTime.toInstant, transactionMeta.ledgerEffectiveTime.toInstant,
recordTime.toInstant, recordTime.toInstant,
transaction transaction
.resolveRelCid(EventIdFormatter.makeAbs(transactionId))
.mapNodeId(EventIdFormatter.fromTransactionId(transactionId, _)), .mapNodeId(EventIdFormatter.fromTransactionId(transactionId, _)),
mappedDisclosure mappedDisclosure
), ),
mappedLocalDivulgence,
blindingInfo.globalDivulgence, blindingInfo.globalDivulgence,
divulgedContracts.map(c => c.contractId -> c.contractInst) divulgedContracts.map(c => c.contractId -> c.contractInst)
) )

View File

@ -161,7 +161,6 @@ case class InMemoryActiveLedgerState(
submitter: Option[Party], submitter: Option[Party],
transaction: GenTransaction.WithTxValue[EventId, AbsoluteContractId], transaction: GenTransaction.WithTxValue[EventId, AbsoluteContractId],
disclosure: Relation[EventId, Party], disclosure: Relation[EventId, Party],
localDivulgence: Relation[EventId, Party],
globalDivulgence: Relation[AbsoluteContractId, Party], globalDivulgence: Relation[AbsoluteContractId, Party],
referencedContracts: List[(Value.AbsoluteContractId, AbsoluteContractInst)] referencedContracts: List[(Value.AbsoluteContractId, AbsoluteContractInst)]
): Either[Set[SequencingError], InMemoryActiveLedgerState] = ): Either[Set[SequencingError], InMemoryActiveLedgerState] =
@ -172,7 +171,6 @@ case class InMemoryActiveLedgerState(
submitter, submitter,
transaction, transaction,
disclosure, disclosure,
localDivulgence,
globalDivulgence, globalDivulgence,
referencedContracts) referencedContracts)

View File

@ -7,8 +7,16 @@ import java.time.Instant
import com.daml.ledger.participant.state.v1._ import com.daml.ledger.participant.state.v1._
import com.digitalasset.daml.lf.data.Ref.Party import com.digitalasset.daml.lf.data.Ref.Party
import com.digitalasset.daml.lf.data.Relation.Relation
import com.digitalasset.daml.lf.data.Time.Timestamp import com.digitalasset.daml.lf.data.Time.Timestamp
import com.digitalasset.daml.lf.engine.Blinding
import com.digitalasset.daml.lf.transaction.GenTransaction
import com.digitalasset.daml.lf.transaction.Transaction.NodeId
import com.digitalasset.daml.lf.value.Value
import com.digitalasset.daml.lf.value.Value.AbsoluteContractId
import com.digitalasset.daml_lf_dev.DamlLf.Archive import com.digitalasset.daml_lf_dev.DamlLf.Archive
import com.digitalasset.ledger.EventId
import com.digitalasset.platform.events.EventIdFormatter
import com.digitalasset.platform.store.ReadOnlyLedger import com.digitalasset.platform.store.ReadOnlyLedger
import scala.concurrent.Future import scala.concurrent.Future
@ -46,3 +54,39 @@ trait Ledger extends ReadOnlyLedger {
): Future[SubmissionResult] ): Future[SubmissionResult]
} }
object Ledger {
type TransactionForIndex =
GenTransaction[EventId, AbsoluteContractId, Value.VersionedValue[AbsoluteContractId]]
type DisclosureForIndex = Map[EventId, Set[Party]]
type GlobalDivulgence = Relation[AbsoluteContractId, Party]
def convertToCommittedTransaction(transactionId: TransactionId, transaction: SubmittedTransaction)
: (TransactionForIndex, DisclosureForIndex, GlobalDivulgence) = {
// First we "commit" the transaction by converting all relative contractIds to absolute ones
val committedTransaction: GenTransaction.WithTxValue[NodeId, AbsoluteContractId] =
transaction.resolveRelCid(EventIdFormatter.makeAbs(transactionId))
// here we just need to align the type for blinding
val blindingInfo = Blinding.blind(committedTransaction)
// At this point there should be no local-divulgences
assert(
blindingInfo.localDivulgence.isEmpty,
s"Encountered non-empty local divulgence. This is a bug! [transactionId={$transactionId}, blindingInfo={${blindingInfo.localDivulgence}}"
)
// convert LF NodeId to Index EventId
val disclosureForIndex: Map[EventId, Set[Party]] = blindingInfo.disclosure.map {
case (nodeId, parties) =>
EventIdFormatter.fromTransactionId(transactionId, nodeId) -> parties
}
val transactionForIndex: TransactionForIndex =
committedTransaction.mapNodeId(EventIdFormatter.fromTransactionId(transactionId, _))
(transactionForIndex, disclosureForIndex, blindingInfo.globalDivulgence)
}
}

View File

@ -246,7 +246,6 @@ object ScenarioLoader {
Some(richTransaction.committer), Some(richTransaction.committer),
tx, tx,
mappedExplicitDisclosure, mappedExplicitDisclosure,
mappedLocalImplicitDisclosure,
mappedGlobalImplicitDisclosure, mappedGlobalImplicitDisclosure,
List.empty List.empty
) match { ) match {

View File

@ -18,7 +18,6 @@ import com.daml.ledger.participant.state.v1.{
import com.digitalasset.api.util.TimeProvider import com.digitalasset.api.util.TimeProvider
import com.digitalasset.daml.lf.data.Ref.{LedgerString, PackageId, Party} import com.digitalasset.daml.lf.data.Ref.{LedgerString, PackageId, Party}
import com.digitalasset.daml.lf.data.{ImmArray, Time} import com.digitalasset.daml.lf.data.{ImmArray, Time}
import com.digitalasset.daml.lf.engine.Blinding
import com.digitalasset.daml.lf.language.Ast import com.digitalasset.daml.lf.language.Ast
import com.digitalasset.daml.lf.transaction.Node import com.digitalasset.daml.lf.transaction.Node
import com.digitalasset.daml.lf.value.Value.AbsoluteContractId import com.digitalasset.daml.lf.value.Value.AbsoluteContractId
@ -32,7 +31,6 @@ import com.digitalasset.ledger.api.domain.{
TransactionId TransactionId
} }
import com.digitalasset.ledger.api.health.{HealthStatus, Healthy} import com.digitalasset.ledger.api.health.{HealthStatus, Healthy}
import com.digitalasset.platform.events.EventIdFormatter
import com.digitalasset.platform.packages.InMemoryPackageStore import com.digitalasset.platform.packages.InMemoryPackageStore
import com.digitalasset.platform.participant.util.EventFilter.TemplateAwareFilter import com.digitalasset.platform.participant.util.EventFilter.TemplateAwareFilter
import com.digitalasset.platform.sandbox.stores.InMemoryActiveLedgerState import com.digitalasset.platform.sandbox.stores.InMemoryActiveLedgerState
@ -156,7 +154,7 @@ class InMemoryLedger(
) )
private def handleSuccessfulTx( private def handleSuccessfulTx(
trId: LedgerString, transactionId: LedgerString,
submitterInfo: SubmitterInfo, submitterInfo: SubmitterInfo,
transactionMeta: TransactionMeta, transactionMeta: TransactionMeta,
transaction: SubmittedTransaction): Unit = { transaction: SubmittedTransaction): Unit = {
@ -170,31 +168,18 @@ class InMemoryLedger(
RejectionReason.TimedOut( RejectionReason.TimedOut(
s"RecordTime $recordTime is after MaxiumRecordTime ${submitterInfo.maxRecordTime}")) s"RecordTime $recordTime is after MaxiumRecordTime ${submitterInfo.maxRecordTime}"))
} else { } else {
val (transactionForIndex, disclosureForIndex, globalDivulgence) =
val blindingInfo = Blinding.blind(transaction) Ledger.convertToCommittedTransaction(transactionId, transaction)
val mappedDisclosure = blindingInfo.disclosure.map {
case (nodeId, v) => EventIdFormatter.fromTransactionId(trId, nodeId) -> v
}
val mappedLocalDivulgence = blindingInfo.localDivulgence.map {
case (nodeId, v) => EventIdFormatter.fromTransactionId(trId, nodeId) -> v
}
val mappedGlobalDivulgence = blindingInfo.globalDivulgence
val mappedTx =
transaction
.resolveRelCid(EventIdFormatter.makeAbs(trId))
.mapNodeId(EventIdFormatter.fromTransactionId(trId, _))
// 5b. modify the ActiveContracts, while checking that we do not have double // 5b. modify the ActiveContracts, while checking that we do not have double
// spends or timing issues // spends or timing issues
val acsRes = acs.addTransaction( val acsRes = acs.addTransaction(
transactionMeta.ledgerEffectiveTime.toInstant, transactionMeta.ledgerEffectiveTime.toInstant,
trId, transactionId,
transactionMeta.workflowId, transactionMeta.workflowId,
Some(submitterInfo.submitter), Some(submitterInfo.submitter),
mappedTx, transactionForIndex,
mappedDisclosure, disclosureForIndex,
mappedLocalDivulgence, globalDivulgence,
mappedGlobalDivulgence,
List.empty List.empty
) )
acsRes match { acsRes match {
@ -204,22 +189,17 @@ class InMemoryLedger(
RejectionReason.Inconsistent(s"Reason: ${err.mkString("[", ", ", "]")}")) RejectionReason.Inconsistent(s"Reason: ${err.mkString("[", ", ", "]")}"))
case Right(newAcs) => case Right(newAcs) =>
acs = newAcs acs = newAcs
val recordBlinding =
blindingInfo.disclosure.map {
case (nid, parties) =>
(EventIdFormatter.fromTransactionId(trId, nid), parties)
}
val entry = LedgerEntry val entry = LedgerEntry
.Transaction( .Transaction(
Some(submitterInfo.commandId), Some(submitterInfo.commandId),
trId, transactionId,
Some(submitterInfo.applicationId), Some(submitterInfo.applicationId),
Some(submitterInfo.submitter), Some(submitterInfo.submitter),
transactionMeta.workflowId, transactionMeta.workflowId,
transactionMeta.ledgerEffectiveTime.toInstant, transactionMeta.ledgerEffectiveTime.toInstant,
recordTime, recordTime,
mappedTx, transactionForIndex,
recordBlinding disclosureForIndex
) )
entries.publish(InMemoryLedgerEntry(entry)) entries.publish(InMemoryLedgerEntry(entry))
() ()

View File

@ -15,14 +15,11 @@ import com.daml.ledger.participant.state.v1._
import com.digitalasset.api.util.TimeProvider import com.digitalasset.api.util.TimeProvider
import com.digitalasset.daml.lf.data.Ref.Party import com.digitalasset.daml.lf.data.Ref.Party
import com.digitalasset.daml.lf.data.{ImmArray, Ref, Time} import com.digitalasset.daml.lf.data.{ImmArray, Ref, Time}
import com.digitalasset.daml.lf.engine.Blinding
import com.digitalasset.daml.lf.value.Value.{AbsoluteContractId, ContractId}
import com.digitalasset.daml_lf_dev.DamlLf.Archive import com.digitalasset.daml_lf_dev.DamlLf.Archive
import com.digitalasset.dec.{DirectExecutionContext => DEC} import com.digitalasset.dec.{DirectExecutionContext => DEC}
import com.digitalasset.ledger.api.domain.{LedgerId, PartyDetails, RejectionReason} import com.digitalasset.ledger.api.domain.{LedgerId, PartyDetails, RejectionReason}
import com.digitalasset.ledger.api.health.HealthStatus import com.digitalasset.ledger.api.health.HealthStatus
import com.digitalasset.logging.{ContextualizedLogger, LoggingContext} import com.digitalasset.logging.{ContextualizedLogger, LoggingContext}
import com.digitalasset.platform.events.EventIdFormatter
import com.digitalasset.platform.packages.InMemoryPackageStore import com.digitalasset.platform.packages.InMemoryPackageStore
import com.digitalasset.platform.sandbox.LedgerIdGenerator import com.digitalasset.platform.sandbox.LedgerIdGenerator
import com.digitalasset.platform.sandbox.stores.InMemoryActiveLedgerState import com.digitalasset.platform.sandbox.stores.InMemoryActiveLedgerState
@ -39,6 +36,7 @@ import com.digitalasset.platform.store.entries.{LedgerEntry, PackageLedgerEntry,
import com.digitalasset.platform.store.{BaseLedger, DbType, FlywayMigrations, PersistenceEntry} import com.digitalasset.platform.store.{BaseLedger, DbType, FlywayMigrations, PersistenceEntry}
import com.digitalasset.resources.ResourceOwner import com.digitalasset.resources.ResourceOwner
import scalaz.syntax.tag._ import scalaz.syntax.tag._
import akka.stream.scaladsl.GraphDSL.Implicits._
import scala.collection.immutable import scala.collection.immutable
import scala.collection.immutable.Queue import scala.collection.immutable.Queue
@ -143,7 +141,6 @@ private final class SqlLedger(
val mergedSources = val mergedSources =
Source.fromGraph(GraphDSL.create(checkpointQueue, persistenceQueue)(_ -> _) { Source.fromGraph(GraphDSL.create(checkpointQueue, persistenceQueue)(_ -> _) {
implicit b => (checkpointSource, persistenceSource) => implicit b => (checkpointSource, persistenceSource) =>
import akka.stream.scaladsl.GraphDSL.Implicits._
val merge = b.add(MergePreferred[Offsets => Future[Unit]](1)) val merge = b.add(MergePreferred[Offsets => Future[Unit]](1))
checkpointSource ~> merge.preferred checkpointSource ~> merge.preferred
@ -208,24 +205,9 @@ private final class SqlLedger(
transaction: SubmittedTransaction): Future[SubmissionResult] = transaction: SubmittedTransaction): Future[SubmissionResult] =
enqueue { offsets => enqueue { offsets =>
val transactionId = Ref.LedgerString.fromLong(offsets.offset) val transactionId = Ref.LedgerString.fromLong(offsets.offset)
val toAbsCoid: ContractId => AbsoluteContractId =
EventIdFormatter.makeAbsCoid(transactionId)
val mappedTx = transaction val (transactionForIndex, disclosureForIndex, globalDivulgence) =
.resolveRelCid(EventIdFormatter.makeAbs(transactionId)) Ledger.convertToCommittedTransaction(transactionId, transaction)
.mapNodeId(EventIdFormatter.fromTransactionId(transactionId, _))
val blindingInfo = Blinding.blind(transaction)
val mappedDisclosure = blindingInfo.disclosure
.map {
case (nodeId, parties) =>
EventIdFormatter.fromTransactionId(transactionId, nodeId) -> parties
}
val mappedLocalDivulgence = blindingInfo.localDivulgence.map {
case (k, v) => EventIdFormatter.fromTransactionId(transactionId, k) -> v
}
val recordTime = timeProvider.getCurrentTime val recordTime = timeProvider.getCurrentTime
val entry = if (recordTime.isAfter(submitterInfo.maxRecordTime.toInstant)) { val entry = if (recordTime.isAfter(submitterInfo.maxRecordTime.toInstant)) {
@ -252,11 +234,10 @@ private final class SqlLedger(
transactionMeta.workflowId, transactionMeta.workflowId,
transactionMeta.ledgerEffectiveTime.toInstant, transactionMeta.ledgerEffectiveTime.toInstant,
recordTime, recordTime,
mappedTx, transactionForIndex,
mappedDisclosure disclosureForIndex
), ),
mappedLocalDivulgence, globalDivulgence,
blindingInfo.globalDivulgence,
List.empty List.empty
) )
} }

View File

@ -72,7 +72,6 @@ class ActiveLedgerStateManager[ALS <: ActiveLedgerState[ALS]](initialState: => A
submitter: Option[Party], submitter: Option[Party],
transaction: GenTransaction.WithTxValue[EventId, AbsoluteContractId], transaction: GenTransaction.WithTxValue[EventId, AbsoluteContractId],
disclosure: Relation[EventId, Party], disclosure: Relation[EventId, Party],
localDivulgence: Relation[EventId, Party],
globalDivulgence: Relation[AbsoluteContractId, Party], globalDivulgence: Relation[AbsoluteContractId, Party],
divulgedContracts: List[(Value.AbsoluteContractId, AbsoluteContractInst)]) divulgedContracts: List[(Value.AbsoluteContractId, AbsoluteContractInst)])
: Either[Set[SequencingError], ALS] = { : Either[Set[SequencingError], ALS] = {
@ -133,12 +132,6 @@ class ActiveLedgerStateManager[ALS <: ActiveLedgerState[ALS]](initialState: => A
.union(nc.stakeholders) .union(nc.stakeholders)
.union(nc.key.map(_.maintainers).getOrElse(Set.empty)) .union(nc.key.map(_.maintainers).getOrElse(Set.empty))
val absCoid = EventIdFormatter.makeAbsCoid(transactionId)(nc.coid) val absCoid = EventIdFormatter.makeAbsCoid(transactionId)(nc.coid)
val withoutStakeHolders = localDivulgence
.getOrElse(nodeId, Set.empty) diff nc.stakeholders
val withStakeHolders = localDivulgence
.getOrElse(nodeId, Set.empty)
assert(withoutStakeHolders == withStakeHolders)
val activeContract = ActiveContract( val activeContract = ActiveContract(
id = absCoid, id = absCoid,
@ -148,12 +141,9 @@ class ActiveLedgerStateManager[ALS <: ActiveLedgerState[ALS]](initialState: => A
workflowId = workflowId, workflowId = workflowId,
contract = nc.coinst.resolveRelCid(EventIdFormatter.makeAbs(transactionId)), contract = nc.coinst.resolveRelCid(EventIdFormatter.makeAbs(transactionId)),
witnesses = disclosure(nodeId), witnesses = disclosure(nodeId),
// we need to `getOrElse` here because the `Nid` might include absolute // The divulgences field used to be filled with data coming from the `localDivulgence` field of the blinding info.
// contract ids, and those are never present in the local disclosure. // But this field is always empty in transactions with only absolute contract ids.
divulgences = (localDivulgence divulgences = Map.empty,
.getOrElse(nodeId, Set.empty) diff nc.stakeholders).toList
.map(p => p -> transactionId)
.toMap,
key = key =
nc.key.map(_.assertNoCid(coid => s"Contract ID $coid found in contract key")), nc.key.map(_.assertNoCid(coid => s"Contract ID $coid found in contract key")),
signatories = nc.signatories, signatories = nc.signatories,

View File

@ -7,7 +7,6 @@ import com.daml.ledger.participant.state.v1.AbsoluteContractInst
import com.digitalasset.daml.lf.data.Ref.Party import com.digitalasset.daml.lf.data.Ref.Party
import com.digitalasset.daml.lf.data.Relation.Relation import com.digitalasset.daml.lf.data.Relation.Relation
import com.digitalasset.daml.lf.value.Value.AbsoluteContractId import com.digitalasset.daml.lf.value.Value.AbsoluteContractId
import com.digitalasset.ledger.EventId
import com.digitalasset.platform.store.entries.LedgerEntry import com.digitalasset.platform.store.entries.LedgerEntry
/** /**
@ -24,7 +23,6 @@ object PersistenceEntry {
final case class Transaction( final case class Transaction(
entry: LedgerEntry.Transaction, entry: LedgerEntry.Transaction,
localDivulgence: Relation[EventId, Party],
globalDivulgence: Relation[AbsoluteContractId, Party], globalDivulgence: Relation[AbsoluteContractId, Party],
divulgedContracts: List[(AbsoluteContractId, AbsoluteContractInst)] divulgedContracts: List[(AbsoluteContractId, AbsoluteContractInst)]
) extends PersistenceEntry ) extends PersistenceEntry

View File

@ -617,55 +617,12 @@ private class JdbcLedgerDao(
) )
} }
// Part 3: insert divulgences into the 'contract_divulgences' table // Part 3: formerly: insert divulgences into the 'contract_divulgences' table
val hasNonLocalDivulgence = assert(
contracts.exists(c => c.divulgences.exists(d => d._2 != c.transactionId)) contracts.forall(_.divulgences.isEmpty),
if (hasNonLocalDivulgence) { "Encountered non-empty local divulgence. This is a bug!")
// There is at least one contract that was divulged to some party after it was commited. // when storing contracts, the `divulgences` field is only used to store local divulgences.
// This happens when writing contracts produced by the scenario loader. // since local divulgences in a committed transaction are non-existent, there is nothing to do here.
// Since we only have the transaction IDs when the contract was divulged, we need to look up the corresponding
// ledger offsets.
val namedDivulgenceParams = contracts
.flatMap(
c =>
c.divulgences.map(
w =>
Seq[NamedParameter](
"contract_id" -> c.id.coid,
"party" -> w._1,
"transaction_id" -> w._2
))
)
.toArray
if (!namedDivulgenceParams.isEmpty) {
executeBatchSql(
queries.SQL_BATCH_INSERT_DIVULGENCES_FROM_TRANSACTION_ID,
namedDivulgenceParams
)
}
} else {
val namedDivulgenceParams = contracts
.flatMap(
c =>
c.divulgences.map(
w =>
Seq[NamedParameter](
"contract_id" -> c.id.coid,
"party" -> w._1,
"ledger_offset" -> offset,
"transaction_id" -> c.transactionId
))
)
.toArray
if (!namedDivulgenceParams.isEmpty) {
executeBatchSql(
queries.SQL_BATCH_INSERT_DIVULGENCES,
namedDivulgenceParams
)
}
}
// Part 4: insert key maintainers into the 'contract_key_maintainers' table // Part 4: insert key maintainers into the 'contract_key_maintainers' table
val namedKeyMaintainerParams = contracts val namedKeyMaintainerParams = contracts
@ -763,7 +720,6 @@ private class JdbcLedgerDao(
offset: Long, offset: Long,
submitter: Option[Party], submitter: Option[Party],
tx: Transaction, tx: Transaction,
localDivulgence: Relation[EventId, Party],
globalDivulgence: Relation[AbsoluteContractId, Party], globalDivulgence: Relation[AbsoluteContractId, Party],
divulgedContracts: List[(Value.AbsoluteContractId, AbsoluteContractInst)])( divulgedContracts: List[(Value.AbsoluteContractId, AbsoluteContractInst)])(
implicit connection: Connection): Option[RejectionReason] = tx match { implicit connection: Connection): Option[RejectionReason] = tx match {
@ -850,7 +806,6 @@ private class JdbcLedgerDao(
submitter, submitter,
transaction, transaction,
disclosure, disclosure,
localDivulgence,
globalDivulgence, globalDivulgence,
divulgedContracts divulgedContracts
) )
@ -952,11 +907,7 @@ private class JdbcLedgerDao(
def insertEntry(le: PersistenceEntry)(implicit conn: Connection): PersistenceResponse = def insertEntry(le: PersistenceEntry)(implicit conn: Connection): PersistenceResponse =
le match { le match {
case PersistenceEntry.Transaction( case PersistenceEntry.Transaction(tx, globalDivulgence, divulgedContracts) =>
tx,
localDivulgence,
globalDivulgence,
divulgedContracts) =>
Try { Try {
storeTransaction(offset, tx, txBytes) storeTransaction(offset, tx, txBytes)
@ -967,7 +918,6 @@ private class JdbcLedgerDao(
offset, offset,
tx.submittingParty, tx.submittingParty,
tx, tx,
localDivulgence,
globalDivulgence, globalDivulgence,
divulgedContracts) divulgedContracts)
.flatMap { rejectionReason => .flatMap { rejectionReason =>

View File

@ -22,7 +22,7 @@ import com.digitalasset.daml.lf.value.Value
import com.digitalasset.daml.lf.value.Value.{AbsoluteContractId, ContractId} import com.digitalasset.daml.lf.value.Value.{AbsoluteContractId, ContractId}
import com.digitalasset.ledger.api.domain.RejectionReason import com.digitalasset.ledger.api.domain.RejectionReason
import com.digitalasset.ledger.api.domain.RejectionReason._ import com.digitalasset.ledger.api.domain.RejectionReason._
import com.digitalasset.ledger.{ApplicationId, CommandId, EventId, WorkflowId} import com.digitalasset.ledger.{ApplicationId, CommandId, WorkflowId}
import com.digitalasset.platform.events.EventIdFormatter import com.digitalasset.platform.events.EventIdFormatter
import com.digitalasset.platform.store.Contract.ActiveContract import com.digitalasset.platform.store.Contract.ActiveContract
import com.digitalasset.platform.store.Conversions._ import com.digitalasset.platform.store.Conversions._
@ -325,7 +325,6 @@ class V2_1__Rebuild_Acs extends BaseJavaMigration {
private def updateActiveContractSet( private def updateActiveContractSet(
offset: Long, offset: Long,
tx: LedgerEntry.Transaction, tx: LedgerEntry.Transaction,
localDivulgence: Relation[EventId, Party],
globalDivulgence: Relation[AbsoluteContractId, Party])( globalDivulgence: Relation[AbsoluteContractId, Party])(
implicit connection: Connection): Unit = tx match { implicit connection: Connection): Unit = tx match {
case LedgerEntry.Transaction( case LedgerEntry.Transaction(
@ -404,7 +403,6 @@ class V2_1__Rebuild_Acs extends BaseJavaMigration {
tx.submittingParty, tx.submittingParty,
transaction, transaction,
mappedDisclosure, mappedDisclosure,
localDivulgence,
globalDivulgence, globalDivulgence,
List.empty List.empty
) )
@ -704,15 +702,8 @@ class V2_1__Rebuild_Acs extends BaseJavaMigration {
.mapNodeId(EventIdFormatter.split(_).get.nodeId) .mapNodeId(EventIdFormatter.split(_).get.nodeId)
val blindingInfo = Blinding.blind(unmappedTx) val blindingInfo = Blinding.blind(unmappedTx)
val mappedLocalDivulgence = blindingInfo.localDivulgence.map {
case (k, v) => EventIdFormatter.fromTransactionId(tx.transactionId, k) -> v
}
updateActiveContractSet( updateActiveContractSet(offset, tx, blindingInfo.globalDivulgence)
offset,
tx,
mappedLocalDivulgence,
blindingInfo.globalDivulgence)
}) })
} }
}) })

View File

@ -193,7 +193,6 @@ class JdbcLedgerDaoSpec
externalOffset, externalOffset,
PersistenceEntry.Transaction( PersistenceEntry.Transaction(
transaction, transaction,
Map.empty,
Map( Map(
absCid -> Set( absCid -> Set(
Ref.Party.assertFromString("Alice"), Ref.Party.assertFromString("Alice"),
@ -498,7 +497,7 @@ class JdbcLedgerDaoSpec
offset, offset,
offset + 1, offset + 1,
None, None,
PersistenceEntry.Transaction(transaction, Map.empty, Map.empty, List.empty)) PersistenceEntry.Transaction(transaction, Map.empty, List.empty))
entry <- ledgerDao.lookupLedgerEntry(offset) entry <- ledgerDao.lookupLedgerEntry(offset)
endingOffset <- ledgerDao.lookupLedgerEnd() endingOffset <- ledgerDao.lookupLedgerEnd()
} yield { } yield {
@ -555,7 +554,7 @@ class JdbcLedgerDaoSpec
offset, offset,
offset + 1, offset + 1,
None, None,
PersistenceEntry.Transaction(transaction, Map.empty, Map.empty, List.empty)) PersistenceEntry.Transaction(transaction, Map.empty, List.empty))
entry <- ledgerDao.lookupLedgerEntry(offset) entry <- ledgerDao.lookupLedgerEntry(offset)
endingOffset <- ledgerDao.lookupLedgerEnd() endingOffset <- ledgerDao.lookupLedgerEnd()
} yield { } yield {
@ -644,7 +643,7 @@ class JdbcLedgerDaoSpec
offset, offset,
offset + 1, offset + 1,
None, None,
PersistenceEntry.Transaction(t, Map.empty, Map.empty, List.empty)) PersistenceEntry.Transaction(t, Map.empty, List.empty))
.map(_ => ()) .map(_ => ())
} }
@ -656,7 +655,7 @@ class JdbcLedgerDaoSpec
offset, offset,
offset + 1, offset + 1,
None, None,
PersistenceEntry.Transaction(t, Map.empty, Map.empty, List.empty)) PersistenceEntry.Transaction(t, Map.empty, List.empty))
.map(_ => ()) .map(_ => ())
} }
@ -805,7 +804,6 @@ class JdbcLedgerDaoSpec
Map((s"event$id": EventId) -> Set(party)) Map((s"event$id": EventId) -> Set(party))
), ),
Map.empty, Map.empty,
Map.empty,
List.empty List.empty
) )
@ -848,7 +846,6 @@ class JdbcLedgerDaoSpec
Map((s"event$id": EventId) -> Set(party)) Map((s"event$id": EventId) -> Set(party))
), ),
Map.empty, Map.empty,
Map.empty,
List.empty List.empty
) )
@ -879,7 +876,6 @@ class JdbcLedgerDaoSpec
Map((s"event$id": EventId) -> Set(party)) Map((s"event$id": EventId) -> Set(party))
), ),
Map.empty, Map.empty,
Map.empty,
List.empty List.empty
) )
@ -910,7 +906,6 @@ class JdbcLedgerDaoSpec
Map((s"event$id": EventId) -> Set(party)) Map((s"event$id": EventId) -> Set(party))
), ),
Map.empty, Map.empty,
Map.empty,
List.empty List.empty
) )