Skip to content

Commit

Permalink
adding florence protocol support and testing backward compatibility
Browse files Browse the repository at this point in the history
  • Loading branch information
piotrkosecki committed Apr 9, 2021
1 parent 909df45 commit 825e201
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -213,14 +213,29 @@ object TezosTypes {
"double_baking_evidence",
"endorsement",
"proposals",
"ballot"
"ballot",
"endorsement_with_slot"
)

final case class Operations(
kind: String,
level: BlockLevel
)
final case class EndorsementInternalObject(
branch: String,
operations: Operations
)

final case class Endorsement(
level: BlockLevel,
metadata: EndorsementMetadata
) extends Operation

final case class EndorsementWithSlot(
endorsement: EndorsementInternalObject,
metadata: EndorsementMetadata
) extends Operation

final case class SeedNonceRevelation(
level: BlockLevel,
nonce: Nonce,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ object OperationBalances {
Getter[BlockTagged[OP], Map[BlockTagged[Label], List[BalanceUpdate]]] {
case b: BlockTagged[OP] =>
b.content match {
case e: EndorsementWithSlot =>
Map(b.updateContent(OPERATION_SOURCE) -> e.metadata.balance_updates)
case e: Endorsement =>
Map(b.updateContent(OPERATION_SOURCE) -> e.metadata.balance_updates)
case nr: SeedNonceRevelation =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,7 @@ private[tezos] object TezosDatabaseConversions {
implicit val operationToOperationsRow = new Conversion[Id, (Block, OperationHash, Operation), Tables.OperationsRow] {
override def convert(from: (Block, OperationHash, Operation)) =
(convertEndorsement orElse
convertEndorsementWithSlot orElse
convertNonceRevelation orElse
convertActivateAccount orElse
convertReveal orElse
Expand All @@ -247,6 +248,32 @@ private[tezos] object TezosDatabaseConversions {
convertUnhandledOperations)(from)
}

private val convertEndorsementWithSlot: PartialFunction[(Block, OperationHash, Operation), Tables.OperationsRow] = {
case (block, groupHash, EndorsementWithSlot(endorsement, metadata)) =>
val (year, month, day, time) = extractDateTime(toSql(block.data.header.timestamp))
Tables.OperationsRow(
operationId = 0,
operationGroupHash = groupHash.value,
kind = "endorsement_with_slot",
level = Some(endorsement.operations.level),
delegate = Some(metadata.delegate.value),
slots = Some(metadata.slots).map(concatenateToString),
blockHash = block.data.hash.value,
blockLevel = block.data.header.level,
timestamp = toSql(block.data.header.timestamp),
internal = false,
cycle = TezosOptics.Blocks.extractCycle(block),
branch = block.operationGroups.find(h => h.hash == groupHash).map(_.branch.value),
numberOfSlots = Some(metadata.slots.length),
period = TezosOptics.Blocks.extractPeriod(block.data.metadata),
utcYear = year,
utcMonth = month,
utcDay = day,
utcTime = time,
forkId = Fork.mainForkId
)
}

private val convertEndorsement: PartialFunction[(Block, OperationHash, Operation), Tables.OperationsRow] = {
case (block, groupHash, Endorsement(level, metadata)) =>
val (year, month, day, time) = extractDateTime(toSql(block.data.header.timestamp))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,8 @@ private[tezos] object TezosJsonDecoders {
deriveConfiguredDecoder
implicit val tezosTypesParametersDecoder: Decoder[TezosTypes.Parameters] = deriveConfiguredDecoder
implicit val operationDecoder: Decoder[Operation] = deriveConfiguredDecoder
implicit val operationsDecoder: Decoder[Operations] = deriveConfiguredDecoder
implicit val endorsementDecoder: Decoder[EndorsementInternalObject] = deriveConfiguredDecoder
implicit val operationGroupDecoder: Decoder[OperationsGroup] = deriveConfiguredDecoder
implicit val parametersCompatDecoder: Decoder[ParametersCompatibility] = decodeUntaggedEither
implicit val injectedOperationDecoder: Decoder[InjectedOperation] = deriveConfiguredDecoder
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import tech.cryptonomic.conseil.common.tezos.TezosTypes.{
Block,
BlockHeaderMetadata,
Endorsement,
EndorsementWithSlot,
EndorsingRights,
RightsFetchKey
}
Expand Down Expand Up @@ -80,15 +81,20 @@ class BakingAndEndorsingRightsProcessor(

val endorsementsForBlock = fetchingResults.map {
case (Block(data, operations, _), _) =>
data.hash -> operations.flatMap(_.contents.collect { case e: Endorsement => e })
data.hash -> operations.flatMap(_.contents.collect {
case e: EndorsementWithSlot => e
case e: Endorsement => e
})
}.toMap.withDefaultValue(List.empty)

endorsingRights.map {
case (fetch @ RightsFetchKey(fetchHash, _, _), rightsList) if endorsementsForBlock.contains(fetchHash) =>
val updatedRights = rightsList.map { rights =>
val endorsedLevel = endorsementsForBlock(fetchHash).collect {
case endorsement if endorsement.metadata.delegate.value == rights.delegate => endorsement.level
}.headOption
val endorsedLevel = endorsementsForBlock(fetchHash).collectFirst {
case endorsement: EndorsementWithSlot if endorsement.metadata.delegate.value == rights.delegate =>
endorsement.endorsement.operations.level
case endorsement: Endorsement if endorsement.metadata.delegate.value == rights.delegate => endorsement.level
}
rights.copy(endorsedBlock = endorsedLevel)
}
fetch -> updatedRights
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,12 @@ import slick.jdbc.PostgresProfile.api._
import tech.cryptonomic.conseil.common.sql.CustomProfileExtension
import tech.cryptonomic.conseil.common.testkit.InMemoryDatabase
import tech.cryptonomic.conseil.common.testkit.util.RandomSeed
import tech.cryptonomic.conseil.common.tezos.Tables.{BigMapContentsRow, BigMapsRow, OriginatedAccountMapsRow, TokenBalancesRow}
import tech.cryptonomic.conseil.common.tezos.Tables.{
BigMapContentsRow,
BigMapsRow,
OriginatedAccountMapsRow,
TokenBalancesRow
}
import tech.cryptonomic.conseil.common.tezos.{Fork, Tables, TezosOptics, TezosTypes}
import tech.cryptonomic.conseil.common.tezos.TezosTypes._
import tech.cryptonomic.conseil.indexer.tezos.michelson.contracts.TokenContracts
Expand Down

0 comments on commit 825e201

Please sign in to comment.