從費用最大化的角度來看,有沒有辦法知道礦工選擇要開采的交易有多好?
好吧,這是我嘗試過的方式:
當探勘的塊到達我的節點時,我將它與使用我的記憶體池的交易選擇算法進行比較。(我知道我的記憶體池與礦工的不同,這就是重點,所以請繼續閱讀;-))
交易選擇算法以通常的貪婪方式對交易進行排序:使用此處定義的正常基於祖先集 (ASB) 算法,並考慮交易依賴關係和CPFP,因此基本上與使用我的記憶體池在塊之前的狀態呼叫 getblockTemplate 相同到達。(我還通過使用 bitcoind 的最後一個 getBlockTemplate 結果來比較傳入的塊,但由於它只是每 30 秒計算一次,結果並不准確)。
此處顯示了一個比較範例(我的網頁,正在開發中)。我將交易分成幾組,無論是被礦工忽略(從我的節點的角度來看)、與我相同、被我忽略、轉發給我還是不轉發給我。
而且,當然,我還根據礦工的區塊來衡量我收取的費用(考慮到傳入的區塊幣基礎交易規模以獲得更好的準確性)。您可以在此處查看最後一個區塊的結果,並在此處查看礦工的匯總。
這可以讓我了解礦工選擇其交易的程度和/或具有良好的網路連接性(平均而言,與我的記憶體池相比),但由於我無法在礦工挖出之前知道記憶體池的狀態塊(不是當我收到它時),這種努力似乎不准確。
我假設可以比較收到的塊和我的塊模板。但是由於塊傳播時間無論如何都不能忽略不計,所以比較是有偏差的,給人的想法是我的算法/網路情況更好。現實情況是,當區塊被傳播給我時,我正在接收交易,因此,當區塊被開採時,我通常擁有比礦工更大的記憶體池。更大的記憶體池使我的算法有機會搜尋沒有機會被礦工開采的更好的交易。
那麼,這種方法的準確性值得嗎?我假設它不是。但是隨著塊傳播時間越來越小(參見this)並且某些塊/礦工的結果似乎真的不同(例如參見this block)我有疑問。
提前致謝。
正如您所描述的,您無法區分您收到的區塊和您從中獲得的區塊之間差異的原因
getblocktemplate
。找出原因可能會有所幫助:
- 如果你想比較算法,你應該嘗試用
getblocktemplate
(gbt
) 和你自己的算法從同一個記憶體池中建構一個塊。- 如果您嘗試比較網路傳播,您可能需要執行多個節點,並假設礦工建構時
gbt
給出了他們此時看到的所有內容。您甚至可能想要跟踪何時看到交易,以推斷是否可以理解礦工沒有看到它。我認為可以合理地假設礦工正在根據
gbt
,儘管事務的奇數排序可能表明事務的某些手動優先級。但是,您將至少有兩個錯誤來源:塊傳播的延遲,以及礦池運營商提供模板與執行礦工發現塊並宣布它之間的延遲。但是,這兩個延遲可能太高,以至於塊內容無法準確表示礦池的記憶體池內容。據我了解,其他研究交易傳播的研究項目通過跟踪節點何時向它們宣布 txids/block id 來衡量它。但是,如果它們甚至是開放網路的一部分並且不受邊界節點的保護,那麼辨識礦工操作的節點以衡量其網路質量並不是一件容易的事。