text: // Copyright (c) 2018 The PIVX developers
  // Distributed under the MIT software license, see the accompanying
  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
  
  #ifndef SBPay_ZSBPCHAIN_H
  #define SBPay_ZSBPCHAIN_H
  
  #include "libzerocoin/Coin.h"
  #include "libzerocoin/Denominations.h"
  #include "libzerocoin/CoinSpend.h"
  #include <list>
  #include <string>
  
  class CBlock;
  class CBigNum;
  struct CMintMeta;
  class CTransaction;
  class CTxIn;
  class CTxOut;
  class CValidationState;
  class CZerocoinMint;
  class uint256;
  
  bool BlockToMintValueVector(const CBlock& block, const libzerocoin::CoinDenomination denom, std::vector<CBigNum>& vValues);
  bool BlockToPubcoinList(const CBlock& block, std::list<libzerocoin::PublicCoin>& listPubcoins, bool fFilterInvalid);
  bool BlockToZerocoinMintList(const CBlock& block, std::list<CZerocoinMint>& vMints, bool fFilterInvalid);
  void FindMints(std::vector<CMintMeta> vMintsToFind, std::vector<CMintMeta>& vMintsToUpdate, std::vector<CMintMeta>& vMissingMints);
  int GetZerocoinStartHeight();
  bool GetZerocoinMint(const CBigNum& bnPubcoin, uint256& txHash);
  bool IsPubcoinInBlockchain(const uint256& hashPubcoin, uint256& txid);
  bool IsSerialKnown(const CBigNum& bnSerial);
  bool IsSerialInBlockchain(const CBigNum& bnSerial, int& nHeightTx);
  bool IsSerialInBlockchain(const uint256& hashSerial, int& nHeightTx, uint256& txidSpend);
  bool IsSerialInBlockchain(const uint256& hashSerial, int& nHeightTx, uint256& txidSpend, CTransaction& tx);
  bool RemoveSerialFromDB(const CBigNum& bnSerial);
  std::string ReindexZerocoinDB();
  libzerocoin::CoinSpend TxInToZerocoinSpend(const CTxIn& txin);
  bool TxOutToPublicCoin(const CTxOut& txout, libzerocoin::PublicCoin& pubCoin, CValidationState& state);
  std::list<libzerocoin::CoinDenomination> ZerocoinSpendListFromBlock(const CBlock& block, bool fFilterInvalid);
  
  
  #endif //SBPay_ZSBPCHAIN_H
  