使用私鑰時 JSON-RPC signrawtransaction 返回 false
我一直在使用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 以任何方式出現故障的情況。這只是使用錯誤的私鑰對未使用的輸出進行簽名的情況。