首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在bitcoinjs lib上使用Psbt?

如何在bitcoinjs lib上使用Psbt?
EN

Stack Overflow用户
提问于 2019-09-14 15:27:01
回答 2查看 1.6K关注 0票数 3

我正在尝试创建一个原始事务,以便发送到区块链。在执行此操作时,我希望在浏览器中执行此操作。

我在哪里可以得到nonWitnessUtxo

我在这里概述的所有信息,都是我在测试中找到的。我做的是对的吗?

代码语言:javascript
复制
const bitcoin = require('bitcoinjs-lib')
const testnet = bitcoin.networks.testnet
const keyPair = bitcoin.ECPair.makeRandom({ network: testnet })
const publicKey = keyPair.publicKey
const { address } = bitcoin.payments.p2pkh({
  pubkey: publicKey,
  network: testnet
})
const privateKey = keyPair.toWIF()
const psbt = new bitcoin.Psbt({ network: testnet })
const txid = '226a14d30cfd411b14bf20b7ffd211f7f206699690c54d456cc1bef70c2de5a6'
const key = bitcoin.ECPair.fromWIF(privateKey, testnet)
psbt.addInput({
  hash: txid,
  index: 0,
  nonWitnessUtxo: Buffer.from('Where can i get this?', 'hex')
})
psbt.addOutput({
  script: Buffer.from('mmpAPZSvhJs1NGw8UaJXEJ9vRByAxProUL', 'hex')
  value: 10000
})
psbt.signInput(0, key)
psbt.validateSignaturesOfInput(0)
psbt.finalizeAllInputs()
psbt.extractTransaction().toHex()

如果有任何帮助,我将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-23 02:25:41

此答案适用于那些正在寻找在浏览器中创建事务,但无法处理bitcoinjs-lib的人

我使用bitcore-lib - https://www.npmjs.com/package/bitcore-lib

代码语言:javascript
复制
const bitcore = require('bitcore-lib')

const firstPrivateKey = new bitcore.PrivateKey()
const secondPrivateKey = new bitcore.PrivateKey() 

const wif = firstPrivateKey.toString()
const toAddress = secondPrivateKey.toAddress().toString()
const satoshiAmount = 10000

const privateKey = bitcore.PrivateKey.fromWIF(wif)
const sourceAddress = privateKey.toAddress(bitcore.Networks.testnet)
const targetAddress = bitcore.Address.fromString(toAddress)
const utxos = [
  {
    address: 'mywRqUpbENhbu5VsYDwiMTJouVK9g2ZEJQ',
    txid: '761693565e82ca176532c52a37fb38cd9f1eb0172a00562b394e60ede0b7df8a',
    vout: 1,
    scriptPubKey: '76a914ca133ceac705b723b91263aa163ea8a45954e49a88ac',
    amount: 0.0001,
    satoshis: 10000,
    height: 1578273,
    confirmations: 338
  }
]
const transaction = new bitcore.Transaction()

transaction.from(utxos)
transaction.to(targetAddress, Number(satoshiAmount))
transaction.change(sourceAddress)
transaction.sign(privateKey)

const serializedTX = tx.serialize()

然后,您需要将此serializedTX作为原始交易发送到比特币网络。

附注:此示例不起作用,因为存在一个无效的utxos。使用API获取utxos,比如https://bitpay.com/api/addr/${sourceAddress}/utxo,然后一切都会正常工作。

票数 1
EN

Stack Overflow用户

发布于 2020-07-02 22:05:58

nonWitnessUtxo是您使用输入txid引用的完整原始事务。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57933390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档