[英]How to sign bitcoin cash raw transaction?
我必須在下面給出十六進制的測試網上簽署原始交易,我嘗試在交易生成部分對所有內容進行硬編碼,它正在正確廣播。 但我必須分別實現交易和簽名部分。 我正在使用 bitcore-lib-cash package
const bitcore = require('bitcore-lib-cash') const txhex = 010000000139a7e6578a862a10151bdbe0ed4a833cd615273b0cd0ecda1616ee8407d7d8040000000000ffffffff0241010000000000001976a914f0ac6825bd05b406d5224eab0be73852a487e06c88ac94dc0100000000001976a914185ec62d62510d40795109e6484e0487c28a3caf88ac00000000
const private_key = 'private key here'
let transaction = new bitcore.Transaction(txbuffer).sign(private_key)
console.log(private_key)
{
"errorMessage": "Invalid state: Not all utxo information is available to sign the transaction.",
"errorType": "bitcore.ErrorInvalidState",
"stackTrace": [
"Error",
"new NodeError (/var/task/node_modules/bitcore-lib-cash/lib/errors/index.js:20:41)",
"Object.checkState (/var/task/node_modules/bitcore-lib-cash/lib/util/preconditions.js:9:13)",
"Transaction.sign (/var/task/node_modules/bitcore-lib-cash/lib/transaction/transaction.js:1077:5)",
"/var/task/src/custody/utils/biputils.js:155:12",
"sign_transaction (/var/task/src/custody/utils/biputils.js:167:6)",
"Object.generate_signature (/var/task/src/custody/assets/bitcoincash.js:220:23)",
"<anonymous>",
"process._tickDomainCallback (internal/process/next_tick.js:228:7)"
]
}
我剛剛檢查了 bitcore-lib-cash 的源代碼,當調用toString
或toBuffer
function 時,它們不會對input
中的每個字段進行編碼。
這是對input
進行編碼的過程的一部分:
Input.prototype.toBufferWriter = function(writer) {
if (!writer) {
writer = new BufferWriter();
}
writer.writeReverse(this.prevTxId);
writer.writeUInt32LE(this.outputIndex);
var script = this._scriptBuffer;
writer.writeVarintNum(script.length);
writer.write(script);
writer.writeUInt32LE(this.sequenceNumber);
return writer;
};
所以我認為你必須重寫這個toBufferWriter
function 或解析 txhex 中的每個字段並再次重建事務。
您的 txhex 無效。
解碼 txhex 后,在每個 UTXO 輸入 object 中應該有一個output
字段,這就是錯誤的來源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.