Blockchain 如何签署比特币现金原始交易?

Blockchain 如何签署比特币现金原始交易?,blockchain,bitcoin,bitcore,bitcoin-testnet,Blockchain,Bitcoin,Bitcore,Bitcoin Testnet,我必须在testnet上签署一个原始事务,其十六进制如下所示,我尝试在事务生成部分对所有内容进行编码,它正在正确地广播。 但是我必须分别实现事务和签名部分。 我正在使用bitcore lib现金套餐 const bitcore=require('bitcore-lib-cash') const txhex=010000000139A7E6578A862A10151BDBE0ED4A833CD615273B0CD0ECDA1616EE8407D7D8040000000000FFFF02410100

我必须在testnet上签署一个原始事务,其十六进制如下所示,我尝试在事务生成部分对所有内容进行编码,它正在正确地广播。 但是我必须分别实现事务和签名部分。 我正在使用bitcore lib现金套餐

const bitcore=require('bitcore-lib-cash')
const txhex=010000000139A7E6578A862A10151BDBE0ED4A833CD615273B0CD0ECDA1616EE8407D7D8040000000000FFFF0241010000000000019776A914F0AC6825BD05B406D5224EAB0BE73852A487E06C88AC94DC01000000000001976A914185EC62D622510D4095109E64E0487C28CAF888AC00000000

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)"
]
const private\u key='private key here'
let transaction=new bitcore.transaction(txbuffer).sign(私钥)
console.log(私钥)
{
“errorMessage”:“无效状态:并非所有utxo信息都可用于签署交易。”,
“errorType”:“bitcore.ErrorInvalidState”,
“stackTrace”:[
“错误”,
“新节点错误(/var/task/node_modules/bitcore lib cash/lib/errors/index.js:20:41)”,
“Object.checkState(/var/task/node_modules/bitcore lib cash/lib/util/premissions.js:9:13)”,
“Transaction.sign(/var/task/node_modules/bitcore lib cash/lib/Transaction/Transaction.js:1077:5)”,
“/var/task/src/carbition/utils/biputils.js:155:12”,
“签名事务(/var/task/src/carbition/utils/biputils.js:167:6)”,
“Object.generate_签名(/var/task/src/carbition/assets/bitconcash.js:220:23)”,
"",
“进程._tickDomainCallback(internal/process/next_tick.js:228:7)”
]
}

更新 我刚刚检查了bitcore lib cash的源代码,当调用
toString
toBuffer
函数时,它们不会对
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
函数,或者解析txhex中的每个字段,然后再次重建事务


您的txhex无效


解码txhex后,每个UTXO输入对象中都应该有一个
output
字段,这就是错误的来源。

Ok,我从这里得到txhex(tx one,名称已更改),const tx=new bitcore.Transaction()。from(inputs)。to(outputs)//那么我该怎么办,提供的输入和输出是正确的,因为如果我在这里签名,那么它的工作原理是如何将tx转换为txhex?在获得hex后,我应用了.toString()并将该值存储到txhex中。在文档中.tostring被.tostring('hex')覆盖。如果我不这样做,dynamodb将在保存时给出错误input@ErDeepakGarg如果它回答了您的问题,如果您能接受我的回答,我将不胜感激。否,我不理解您的答案,我必须在何时何地调用/应用此功能?此外,我可以在创建期间签署交易,我在尝试sepa时遇到问题给这个评分。或者可以提供一些工作示例?