Mining-Reward

請解釋一下 CFeeRate::GetFee(size_t nBytes)

  • July 3, 2018

參考中的CAmount CFeeRate::GetFee(size_t nBytes_)函式feerate.cpp

如果我傳入 say2000作為nBytes參數,這個函式將返回什麼作為費用nFee?不明白怎麼nSatoshisPerK定義的。此外,很好奇為什麼使用它而不是讓礦工通過選擇性挖礦來確定這筆費用。

CAmount CFeeRate::GetFee(size_t nBytes_) const
{
   assert(nBytes_ <= uint64_t(std::numeric_limits<int64_t>::max()));
   int64_t nSize = int64_t(nBytes_);

   CAmount nFee = nSatoshisPerK * nSize / 1000;

   if (nFee == 0 && nSize != 0) {
       if (nSatoshisPerK > 0)
           nFee = CAmount(1);
       if (nSatoshisPerK < 0)
           nFee = CAmount(-1);
   }

   return nFee;
}

如果我傳入 say2000作為nBytes參數,這個函式將返回什麼作為費用nFee

這取決於 CFeeRate 對象所代表的費率。費率以每千字節的比特幣表示。因此,您將字節數傳遞給 GetFee 併計算比特幣金額以支付一定大小的費用nBytes_

例如,如果您的 CFeeRate 對象表示每千字節 0.00020000 比特幣(或每字節 20 聰),則將 2000 作為 nBytes 表示您的費用將為2000 * 0.0002 / 1000 = 0.0004 BTC.

不明白怎麼nSatoshisPerK定義的。

它是在創建對象時定義的。無論創建什麼對象,都指定要使用的費率。

此外,很好奇為什麼使用它而不是讓礦工通過選擇性挖礦來確定這筆費用。

這只是一個實現細節,而不是指定每個人使用的費率的實際網路事物。CFeeRate 是比特幣核心的內部,只是費率在內部邏輯中的表示方式。費率本身由費用估算器建構,該估算器根據探勘的交易計算費用。

引用自:https://bitcoin.stackexchange.com/questions/76854