有人能解释一下我如何使用bitcoinjs发送比特币交易吗?我用比特币装了两个钱包。
我想从这里发送100000个聪:1G 4 iprWu 7 Q8 tNbQLA 8 UBM 2GearcnzwFrxM,伊斯坦布尔
到这里:1HsrKvboax 8 J3 X1 sgsRdWybEwnUNWsDw 4 Y
如果需要,这里是1G4iprWu7Q8tNbQLA8UBM2GearcnzwFrxM的最后一个事务
我使用的代码来自bitcoinjs.org网站:
var tx = new bitcoin.TransactionBuilder()
// Add the input (who is paying):
// [previous transaction hash, index of the output to use]
var txId = 'aa94ab02c182214f090e99a0d57021caffd0f195a81c24602b1028b130b63e31'
tx.addInput(txId, 0)
// Add the output (who to pay to):
// [payee's address, amount in satoshis]
tx.addOutput("1Gokm82v6DmtwKEB8AiVhm82hyFSsEvBDK", 15000)
// Initialize a private key using WIF
var privateKeyWIF = 'L1uyy5qTuGrVXrmrsvHWHgVzW9kKdrp27wBC7Vs6nZDTF2BRUVwy'
var keyPair = bitcoin.ECPair.fromWIF(privateKeyWIF)
// Sign the first input with the new key
tx.sign(0, keyPair)
// Print transaction serialized as hex
console.log(tx.build().toHex())
// => 0100000001313eb630b128102b60241ca895f1d0ffca21 ...
// You could now push the transaction onto the Bitcoin network manually
// (see https://blockchain.info/pushtx)
现在我假设var txId
是最后一个事务here的事务ID
我把费用放在tx.addInput``里了吗?100个够吗?
tx.addOutput是obvs,所以我很好!
var privateKeyWIF*是不是我把发送地址中的私钥放在了哪里? 不知道
var keyPair和
tx.sign`做什么!
任何人谁可以帮助告诉我的细节应该去将不胜感激!对于这个例子,假设我的发送者地址的私钥是5 Kb 8 kLf 9 zgWQnogidDA 76 MzPL 6 TsZZY 36 hWXMssSzNydYXYB 9 KF。
欢呼
4条答案
按热度按时间clj7thdc1#
qmb5sa222#
我发现很多人对这一部分感到困惑-“如何将交易发布到网络”。简而言之,你需要访问一个单独的比特币核心完整节点。完整节点包括JSON API,您可以将原始交易十六进制发布到这些API,然后完整节点基本上在幕后为您完成其余的工作(通过gossip网络广播到其他节点,然后将交易添加到自己的mempool中,然后等待矿工处理它,以便将其添加到区块链中)。
将交易发送到网络的方法主要有两种(通过Bitcoin Core中的JSON RPC API发送,或者通过bitcoin-BTC发送):
1.您可以添加一个nodeJS库,允许您对web服务器进行socket访问,然后像从nodeJS代码调用任何其他REST服务一样调用它。
1.对于测试来说,使用完整节点附带的“bitcoin-Bit”更容易。确保您的完整节点正在运行,SSH连接到它,然后从bitcoin-task中调用sendrawtransaction命令。具体来说,在UNIX提示符中,只有一行:
那个大的长十六进制数是你的比特币代码将生成的交易十六进制数。未经确认的交易将在几秒钟内出现在您的钱包中。即,已验证,但尚未确认。
j8ag8udp3#
比特币交易通常将先前的交易输出作为新的交易输入。
首先,您需要查看以前的交易。正如你可以看到here或在上面的代码片段中,txId是:
4303caa91ca5a2236396af3bfae26b70a223a2bcee2fe8d23a7b24626c3c4bd2
您的地址
1G4iprWu7Q8tNbQLA8UBM2GearcnzwFrxM
显示为第二个输出(index 1
)。这个地址的总金额是
500000 satoshis
因此,让我们创建我们的事务
现在我们将发送100000聪
我们需要把零钱寄到你的地址
剩下的就是矿工费了。您可以使用online services来估计理想的费用。
(in)500000 Satoshis - (out)100000 - (out)398130 = (fee)1870
现在我们需要对交易进行签名,以确认您拥有输入地址
如果你运行
yourAddresskeyPair.getAdress()
,输出应该是你的地址1G4iprWu7Q8tNbQLA8UBM2GearcnzwFrxM
现在您可以将您的交易发送到网络。获取十六进制格式的原始交易:
将结果粘贴在这里https://blockchain.info/pushtx或在这里检查其他解决方案:https://github.com/bitcoinjs/bitcoinjs-lib/issues/839
ygya80vv4#
妻子
首先了解什么是wif格式。
输入
从github我们有:
Transaction.prototype.addInput = function (hash, index, sequence, scriptSig)
所以你必须传递交易的哈希和索引(输出将是你的输入),你应该检查什么是比特币tx
密钥对
没有验证,但可能
keyPair
是你的Pk和pk。签名
也请验证,因为我没有,但逻辑上
tx.sign(index, keyPair)
应该签署的tx(SIGHASH_ALL)的输入index
与私钥在keyPair
。如果您有多个输入,当然您必须为每个输入提供一个签名。看看掌握比特币