coins.h の概要
coin というのは有効チェーン(chainActive)の先端(tip)ブロックのときの、UTXO を指す言葉として使われているようです。つまり、「今実際に送金に使えるコイン」ということです。
トランザクションのバリデーションを行う際に2重使用がないかチェックするためには全ての UTXO を走査する必要があります。都度逐次処理していては性能上の問題がありますので、すばやく UTXO の有無を問い合わせる事ができるデータ構造が必要です。これを CCoinsView が提供しているようです。
CCoinsView は抽象クラスとして定義されていて、実際にどのような構造でどこにそのデータを格納するかはサブクラスで定義できるようになっています。実際に目的に応じて3種類のサブクラスが存在しています。
このファイルで定義されているのは CCoinsViewCache でオンメモリでUTXOを管理しています。実体としては、COutPointをキーにした順序なしのマップ構造のコンテナ(std::unorderd_map)にストアされています。
定義されているクラス
Coin
SaltedOutpointHasher
CCoinsCacheEntry
CCoinsMap
CCoinsViewCursor
CCoinView
CCoinsViewBacked
CCoinsViewCache
定義されている関数
AddCoins
AccessByTxid
https://gyazo.com/15651e54762c4049166a6c32929ae81e
Coin
UTXO を扱うクラス。
CCoinsView
抽象クラス
UTXO の集合を扱うクラス。Tx のアウトプットが UTXO かどうかの判定をしたり、UTXOを実際に取得するなど、UTXO にすばやくアクセスするために利用できるようです。メモリ上にデータを持つ CCoinsViewCache と leveldb 上にデータを持つ CCoinsViewDB、mempool用の CCoinsViewMemPool のサブクラスを持ちます。
各サブクラスの使い分け
TODO: 確認
定義されているインターフェース
virtual bool GetCoin(const COutPoint &outpoint, Coin &coin) const;
引数
outpoint: COutPoint は トランザクションのハッシュと Tx のアウトプットの番号を持っているクラス。つまり、トランザクションのアウトプットを特定するためのクラス。
coin: Coin は上述の通り UTXO を扱うためのクラス。UTXO が見つかればこの引数にセットする。