Block

import jbok.core.models._
import scodec.bits.ByteVector  
import jbok.common.math.N

trait BlockAPI[F[_]] {
  def getBestBlockNumber: F[N]

  def getBlockHeaderByNumber(number: N): F[Option[BlockHeader]]

  def getBlockHeadersByNumber(start: N, limit: Int): F[List[BlockHeader]]

  def getBlockHeaderByHash(hash: ByteVector): F[Option[BlockHeader]]

  def getBlockBodyByHash(hash: ByteVector): F[Option[BlockBody]]

  def getBlockBodies(hashes: List[ByteVector]): F[List[BlockBody]]

  def getBlockByNumber(number: N): F[Option[Block]]

  def getBlockByHash(hash: ByteVector): F[Option[Block]]

  def getTransactionCountByHash(hash: ByteVector): F[Option[Int]]

  def getTotalDifficultyByNumber(number: N): F[Option[N]]

  def getTotalDifficultyByHash(hash: ByteVector): F[Option[N]]
}