Protocol
GetWork() 的內部細節是什麼……比特幣挖礦的基礎?
根據這個答案GetWork() 發送“包含塊數據的數據塊,包括隨機位和隨機數(礦工更改的位)。”
誰能提供有關該邏輯的詳細資訊?例如:
- 包含哪些交易,哪些不包含?
- 交易發生的順序是什麼?
- 是否有可能多個單獨或聯合礦工正在探勘不同的交易集?
- 如果延遲(或不良的網路連接)導致事務延遲,並添加到被丟棄的分叉中,它們是否會被重新添加到下一個 GetWork() 請求中?
您可以在此處找到 GetWork 協議的一些範例。
通常,礦池提供了一個區塊頭,該區塊頭將與各種隨機數進行雜湊處理,以及一些附加資訊,例如:
- 雜湊1,始終為“000000000000000000000000000000000000000000000000000000000800000000800000000 0000000000000000000000000000000000000000”
- midstate(已棄用),通過散列一半塊頭計算的值,用於加快程序。Midstate 已被棄用,因為它是可由礦工計算的冗餘數據。
- target - 用於確定標頭是否正確散列的目標
- 各種其他協議擴展
池必須跟踪發送的各種塊頭及其對應的塊。
- 通常,包含在塊中的交易是池知道的所有交易(除了一些例外,例如某些池完全排除 0 費用交易)。
- 交易的順序可以是隨機的,但 coinbase 交易通常是區塊中的第一筆交易。
- 大多數礦工將處理不同的交易集,但大多數情況下,它只會因 coinbase 交易或其順序而有所不同。
- 如果交易包含在被分叉覆蓋的塊中,它將被視為新交易,以考慮包含在塊中。如果沒有雙花嘗試,它應該包含在未來的區塊中。