Account

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

trait AccountAPI[F[_]] {
  def getAccount(address: Address, tag: BlockTag = BlockTag.latest): F[Account]

  def getCode(address: Address, tag: BlockTag = BlockTag.latest): F[ByteVector]

  def getBalance(address: Address, tag: BlockTag = BlockTag.latest): F[N]

  def getStorageAt(address: Address, position: N, tag: BlockTag = BlockTag.latest): F[ByteVector]

  def getTransactions(address: Address): F[List[HistoryTransaction]]

  def getPendingTxs(address: Address): F[List[SignedTransaction]]

  def getEstimatedNonce(address: Address): F[N]
}