From 383aaa76392c4833b9f17fb5b29e9a5fd55bfe97 Mon Sep 17 00:00:00 2001 From: Ben Carman Date: Wed, 29 Jul 2020 07:25:24 -0500 Subject: [PATCH] Remove need to parse every header in a blockchain on instantiation (#1704) * Remove need to parse every header in a blockchain on instantiation * Require height is descending * Fix invariant --- .../bitcoins/chain/blockchain/BaseBlockChain.scala | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/chain/src/main/scala/org/bitcoins/chain/blockchain/BaseBlockChain.scala b/chain/src/main/scala/org/bitcoins/chain/blockchain/BaseBlockChain.scala index 8c924fc3cd..36478adb23 100644 --- a/chain/src/main/scala/org/bitcoins/chain/blockchain/BaseBlockChain.scala +++ b/chain/src/main/scala/org/bitcoins/chain/blockchain/BaseBlockChain.scala @@ -1,11 +1,10 @@ package org.bitcoins.chain.blockchain -import org.bitcoins.chain.models.BlockHeaderDb -import org.bitcoins.core.protocol.blockchain.BlockHeader -import org.bitcoins.chain.config.ChainAppConfig import org.bitcoins.chain.ChainVerificationLogger -import org.bitcoins.chain.validation.TipUpdateResult -import org.bitcoins.chain.validation.TipValidation +import org.bitcoins.chain.config.ChainAppConfig +import org.bitcoins.chain.models.BlockHeaderDb +import org.bitcoins.chain.validation.{TipUpdateResult, TipValidation} +import org.bitcoins.core.protocol.blockchain.BlockHeader import org.bitcoins.core.util.SeqWrapper import org.bitcoins.crypto.DoubleSha256DigestBE @@ -38,7 +37,9 @@ private[blockchain] trait BaseBlockChain extends SeqWrapper[BlockHeaderDb] { protected[blockchain] def compObjectfromHeaders( headers: scala.collection.immutable.Seq[BlockHeaderDb]): Blockchain - val tip: BlockHeaderDb = headers.maxBy(_.height) + val tip: BlockHeaderDb = headers.head + + require(headers.size <= 1 || headers(1).height == tip.height - 1) /** The height of the chain */ val height: Int = tip.height