Transaction-Fees
minRelayTxFee 和 rollingMinimumFeeRate 有什麼區別?
CTxMemPool
有一個名為rollingMinimumFeeRate
:mutable double rollingMinimumFeeRate GUARDED_BY(cs); //!< minimum fee to get into the pool, decreases exponentially
該評論解釋說,這是進入游泳池的最低費用。但是我們在程式碼庫中有另一個變數,稱為
minRelayTxFee
:CFeeRate minRelayTxFee = CFeeRate(DEFAULT_MIN_RELAY_TX_FEE);
/** Default for -minrelaytxfee, minimum relay fee for transactions */ static const unsigned int DEFAULT_MIN_RELAY_TX_FEE = 1000;
兩個問題:
- 這兩個變數有什麼區別?哪個用於什麼案例?
- 為什麼
rollingMinimumFeeRate
呈指數下降?
這兩個變數有什麼區別?哪個用於什麼案例?
rollingMinimumFeeRate
是將交易添加到記憶體池並進一步中繼的最低費用。這是一個動態值——它隨著記憶體池的填滿和清空而變化。
minRelayTxFee
是絕對最小費率。它是一個靜態值。rollingMinimumFeeRate
從 的值開始,minRelayTxFee
當記憶體池滿時它會增加。隨著記憶體池清空和rollingMinimumFeeRate
減少,它不會減少到小於minRelayTxFee
. (這實際上是發生的事情,而不是程式碼的實際作用。)為什麼
rollingMinimumFeeRate
呈指數下降?
rollingMinimumFeeRate
當記憶體池填滿時增加。費用低於此值的交易將從記憶體池中逐出。增加它是為了保持最大記憶體池大小 - 如果記憶體池大於最大值,則最低費率交易將被驅逐,直到達到最大大小,並rollingMinimumFeeRate
設置為被驅逐的最高費率交易。由於交易是按塊從記憶體池中刪除的,因此需要一種減少費用的方法
rollingMinimumFeeRate
以允許重新進入較低費用的交易。但是,由於它不再有這些交易,它不知道將其設置為什麼值。所以它以指數方式向後走,直到它達到 0 或再次增加,然後指數減少被重置。