miner.cpp
マイニング(ブロック生成)に関わるクラスなどが定義されているファイル。
https://gyazo.com/606f8efdda1ea717ee1e87ba7f40d2d9
必要な概念
feerate
トランザクションの手数料をそのトランザクションのバイト数で割ったもの。
マイナーがトランザクションをブロックに取り込む時に参考にする値。feerate が高いものほど、マイナーにとって効率が良いため、ブロックに取り込まれやすい。
CBlockTemplate
CTxMemPoolModifiedEntry
ブロックに取り込まれた先祖(親)をブロックに取り込んだ時に、祖先の feerate を更新するためトラッキングするためのコンテナ
BlockAssembler
Privateフィールド
inBlock
Blockに取り込んだトランザクションの集合を管理しているみたい。
CreateNewBlock
generatetoaddress, getblocktemplate RPC などから呼ばれるブロックを生成するための関数。coinbase tx の生成や mempool からトランザクションを収集しブロックヘッダに適切な値をセットする。
addPackageTxs()
トランザクションを mempool から集める関数。
package って何のこと?
コメントの訳
このトランザクション選択アルゴリズムは、未確認(unconfirm)のすべての先祖を含むトランザクションの手数料のレート(feerate)に基づいて、mempoolを順序付けします。
ブロックへ含めるためにトランザクションを選択するとき、そのトランザクションをmempoolから削除しないので、未選択の先祖を含むトランザクションの feerateを更新する別の方法が必要です。
これは、選択されたトランザクションのインプールプール内の子孫を調べて、一時的に変更された状態をmapModifiedTxsに格納することによって実現されます。
ループを繰り返すたびに、mapModifiedTxs内の最適なトランザクションとmempool内の次のトランザクションを比較して、次に処理するトランザクションパッケージを決定します。
処理の内容
mapModifiedTx を宣言
mapModifiedTx は、それらが変更されたあとにストアされたパッケージをストアする。それらのトランザクションのいくらかはすでにブロックに取り込まれているため。
ここでいうmodifyってどういう意味?
failedTx を宣言
ブロックへの取り込みに失敗したトランザクションをトラッキングする。二度手間を防ぐため。
UpdatePackagesForAdded()
与えられたトランザクションの子孫をmapModifiedTx へ追加すし、与えられたトランザクションがブロックに取り込まれていると仮定して、子孫の状態を更新する。更新した子孫Txの数を返す。
処理内容
すでにblock済みのトランザクションを一件ずつ処理する。
mempool から各トランザクションの子孫を取得し、子孫一つずつについて処理する
子孫がブロックにすでに追加済みでなく、 mapModifiedTx にも含まれなければ、その子孫を変更されたものとし、mapModifiedTx に追加する。またこの時、