Json-Rpc

使用私鑰時 JSON-RPC signrawtransaction 返回 false

  • August 29, 2014

我一直在使用BitcoinLib測試 signrawtransaction rpc 呼叫上的各種參數。

它大多是成功的,但是在僅使用私鑰簽署交易時似乎存在一個持續存在的問題。(signrawtransaction 呼叫的第二個可選參數)。伺服器回复false並返回失敗的十六進制。我已經使用相同的鍵在 qt 控制台上測試了相同的事務,它返回true.

包裝器使用SignRawTransactionRequest與 rpc 呼叫的四個參數匹配的類。

public SignRawTransactionRequest(String rawTransactionHex)
   {
       RawTransactionHex = rawTransactionHex;
       Inputs = new List<SignRawTransactionInput>();
       PrivateKeys = new List<String>();
       SigHashType = SignRawTransaction.SigHashType.All;
   }

它允許 ‘inputs’ 和 ‘privatekeys’ 為空,遵循 signrawtransaction 語法,同時假設 ‘sighashtype=all’ 除非另有明確說明。

該實現還包括一個SignRawTransactionInput對應於 rpc 呼叫的第一個可選參數的類。([{“txid”:txid,“vout”:n, “scriptPubKey”:hex, “redeemScript”:hex } ,…])

public class SignRawTransactionInput
{
   [JsonProperty(PropertyName = "txid", Order = 0)]
   public String TransactionId { get; set; }

   [JsonProperty(PropertyName = "vout", Order = 1)]
   public Int32 Output { get; set; }

   [JsonProperty(PropertyName = "scriptPubKey", Order = 2)]
   public String ScriptPubKey { get; set; }

   [JsonProperty(PropertyName = "redeemScript", Order = 3)]
   public String RedeemScript { get; set; }
}

如果將請求提供給包裝器方法RpcServer.SignRawTransaction並返回一個SignRawTransactionResponse包含結果和伺服器返回的十六進制的值。

public class SignRawTransactionResponse
   {
       public String Hex { get; set; }
       public Boolean Complete { get; set; }
   }

到目前為止,僅使用十六進制(沒有其他參數)、輸入、不同的 sighashtype 以及這些的各種組合的簽名已經成功。伺服器回复 TRUE 並在使用普通十六進制呼叫時返回簽名交易的十六進制

在此處輸入圖像描述 伺服器回复

或者當用一些參數呼叫時

在此處輸入圖像描述

在此處輸入圖像描述

但是,當使用第二個可選參數(私鑰列表)時,它會返回 false。它已經使用錢包可用私鑰的一個、所有和各種組合進行了測試。

在此處輸入圖像描述 在此處輸入圖像描述

我懷疑這可能是一個 JSON 錯誤,並且包裝器沒有正確建構 JSON 的那部分,但這通常會導致解析錯誤,而不是false我在這裡得到的回复。

true當從控制台呼叫 signrawtransaction 時返回相同的組合。

在此處輸入圖像描述

關於私鑰參數可能有什麼問題的任何想法?

這不是 BitcoinLib 以任何方式出現故障的情況。這只是使用錯誤的私鑰對未使用的輸出進行簽名的情況。

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