Coinbase-Transaction

Coinbase 交易是否需要簽名?

  • February 4, 2019

我正在嘗試通過以下步驟建立一個用於挖礦的硬幣庫:

1-創建虛擬輸入和輸出。

2-將它們作為集合傳遞給 CreateRawTransaction/

3-取回一筆交易,根據coinbase結構填空欄位(特地設置Txout的Value為12.5比特幣)。

4-將事務序列化為十六進製字元串模式。

通過在 RegTest 模式下執行上述步驟,創建了一個新塊並將 50 個比特幣添加到錢包中,這似乎是正確的,但據我所知,應該簽署交易,Coinbase 是否被排除在簽名程序之外?以及為什麼要向帳戶中添加 50 個比特幣,而不是我具體設置為 12.5 個比特幣的金額?


public async Task<string> BuildCoinbaseTransaction(string MinerAddress, uint Height)    
{    
   string coinTxSerialized = string.Empty;    
   scriptData = Tools.RandomNumbers(rEngine);    
   string pubKey = await GetPublicKey(MinerAddress);    
   string scriptPubKey = CreateCoinbaseScript(pubKey);

   List<object> txi = new List<object>
   { new CoinIn { TxId = "0".PadLeft(64, '0'), Index = 0x0 } };

   List<object> txo = new List<object>
     { new Dictionary<string, double> { { MinerAddress, 0.00 } } };

   RPCResult<string> rpcResult = await cmd.CreateRawTransactionAsync(txi, txo);

   if (rpcResult.Error == null)    
   {    
       TotalReward = Math.Min(RewardCoins + CollectedFee, MaxCoinbaseValue);    

       string rawCoinbase = rpcResult.Result;        
       string decodedTx = await cmd.DecodeRawTransaction_CommandAsync(rawCoinbase);

       RPCResult<string> Transaction jsonTx= JsonConvert.DeserializeObject<RPCResult<string>>(decodedTx);    
       Transaction coinTx = jsonTx.Result;

       coinTx.Height = BuildHeight(Height);    
       coinTx.TxIn.FirstOrDefault().Coinbase = scriptData;    
       coinTx.TxIn.FirstOrDefault().Sequence = 0xFFFFFFFF;    
       coinTx.TxOut.FirstOrDefault().Value = TotalReward;    
       coinTx.TxOut.FirstOrDefault().ScriptPubKey.Assembely = scriptPubKey;    
       coinTx.Hex = coinTx.ToString();    
       coinTxSerialized = coinTx.Hex;    

       return coinTxSerialized;    
  }//if

}//BuildCoinbaseTransaction

coinbase 交易由礦工/礦池運營商建構,不是可以廣播到記憶體池的交易。

coinbase 的輸出量嚴格按照區塊高度,從 50 BTC 開始,在 regtest 模式下每 150 個區塊減半。當您在 regtest 模式下創建一個新區塊時,它會自動生成一個 coinbase 交易,並將輸出支出到您指定的 coinbase 錢包。

coinbase的輸入腳本有[blockheight(4B)]和附加數據,總共最大100B。

輸入:

  • 以前的 TX 雜湊:00..00
  • 以前的輸出索引:max_value(ff..ff)
  • 輸入腳本:[blockheight (4B)] [additional arbitrary data]

輸入沒有簽名,因為它沒有從 UTXO 中花費。除了送出到具有有效 POW 的標頭之外,沒有其他鎖定條件。

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