收取區塊獎勵和交易費用
我正在閱讀有關交易數據的文件,似乎有兩個相互矛盾的段落:
每個區塊必須包含一個或多個交易。這些交易中的第一個必須是 coinbase 交易,也稱為生成交易,它應該收集和花費區塊獎勵(包括區塊補貼和包含在該區塊中的交易支付的任何交易費用)。
區塊不需要包含任何非幣基交易,但礦工幾乎總是會包含額外的交易以收取交易費用。
我的問題是關於 coinbase 交易和交易費用:
- 是為每個區塊自動添加 coinbase 交易(即:通過共識假設),還是礦工必須明確添加它作為每個區塊中的第一個交易?如果是這樣,他們如何將其標記為 coinbase 交易?不設置輸入並將其列為第一個就足夠了嗎?
- 礦工如何收取交易費用?他們是否必須使用自己的地址明確添加非 coinbase 交易作為輸出?如果是這樣,收費交易是否與其他交易具有相同的類型,或者它們在某些方面是否特殊?
引用文字的第一段似乎暗示了一個區塊中的交易費用可以通過coinbase交易收取,但第二段似乎暗示礦工需要明確添加非coinbase交易來收取交易費用;如果礦工
M
想從交易中收取費用,是否還A->B
必須M
包括額外的交易?如果不是,別人怎麼知道收費在哪裡,也就是地址?A->M``A->B``M
礦工獨立為區塊創建 coinbase 交易。要創建 coinbase 交易,該交易應該是區塊中的第一個並且只有 1 個 coinbase 輸入。Coinbase輸入表示outpoint交易為0000000000000000000000000000000000000000000000000000000000000000,輸出索引為FFFFFFFF。輸入交易金額,如根據區塊高度計算的區塊獎勵金額,加上區塊內所有其他交易的所有費用金額。礦工能夠將這個總量用於輸出。礦工指定自己的地址和塊塊獎勵加上費用獎勵的數量。如果礦工錯誤地計算了金額並指定了大於預期的金額,則區塊將被其他節點拒絕。如果礦工指定較低的區塊將被接受,但礦工會賠錢。
當礦工由於錯誤而失去所有獎勵時的主網範例:
<https://bitaps.com/410995608537d591d6ce5ff2a7966fa84f891c5e2269ef85e8ecdb68d5188f9b>