Raw-Transaction
使用 Bitcoinjs-lib 創建 OP_RETURN tx
我知道如何創建一個基本的 TX:
var bitcoin = require('bitcoinjs-lib') var tx = new bitcoin.Transaction() // Add the input (who is paying) of the form [previous transaction hash, index of the output to use] tx.addInput("aa94ab02c182214f090e99a0d57021caffd0f195a81c24602b1028b130b63e31", 0) // Add the output (who to pay to) of the form [payee's address, amount in satoshis] tx.addOutput("THEADDRESS", 15000) // Initialize a private key using WIF key = bitcoin.ECKey.fromWIF("L1uyy5qTuGrVXrmrsvHWHgVzW9kKdrp27wBC7Vs6nZDTF2BRUVwy") // Sign the first input with the new key tx.sign(0, key) // Print transaction serialized as hex console.log(tx.toHex()) // => 0100000001313eb630b128102b60241ca895f1d0ffca2170d5a0990e094f2182c102ab94aa000000008a47304402200169f1f844936dc60df54e812345f5dd3e6681fea52e33c25154ad9cc23a330402204381ed8e73d74a95b15f312f33d5a0072c7a12dd6c3294df6e8efbe4aff27426014104e75628573696aed32d7656fb35e9c71ea08eb6492837e13d2662b9a36821d0fff992692fd14d74fdec20fae29128ba12653249cbeef521fc5eba84dde0689f27ffffffff01983a0000000000001976a914ad618cf4333b3b248f9744e8e81db2964d0ae39788ac00000000 // You could now push the transaction onto the Bitcoin network manually (see https://blockchain.info/pushtx)
但我沒有發現如何在 Node.js 中使用 bitcoinjs-lib 創建 OP_RETURN 事務。有人知道嗎?
這裡:
var bitcoin = require('bitcoinjs-lib') data = new Buffer("Melons.") var tx = new bitcoin.TransactionBuilder() tx.addInput("aa94ab02c182214f090e99a0d57021caffd0f195a81c24602b1028b130b63e31", 0) tx.addOutput("some address", 15000) ret = bitcoin.script.compile( [ bitcoin.opcodes.OP_RETURN, data ]) tx.addOutput(ret, 0) key = bitcoin.ECPair.fromWIF("L1uyy5qTuGrVXrmrsvHWHgVzW9kKdrp27wBC7Vs6nZDTF2BRUVwy") tx.sign(0, key) console.log(tx.build().toHex())
那應該這樣做。
此外,如果您有超過 40 字節的數據,您的交易將是非標準的。
對於bitcoinjs-lib 3.2.0(不是最新的):
bitcoinjs = require('bitcoinjs-lib'); const wif = 'private-key-of-sender-in-WIF'; const sender = 'miq6AWvTYZJ63hJfh1W7zozHAf1URDv5pS'; const unspent_txid = '8e320e71d43b130c0786cc9d50fae9ed79b953fba9bcf45070625e37120544c3'; const unspent_vout = 1; const network = bitcoinjs.networks.testnet; const keyPair = bitcoinjs.ECPair.fromWIF(wif,network); const recipient = 'mwLfrTGnLNtyLWFzLfPVcmxEMcW4yaRUZA'; const txb = new bitcoinjs.TransactionBuilder(network); const data = Buffer.from('YOUR OP_RETURN DATA HERE', 'utf8'); const dataScript = bitcoinjs.script.nullData.output.encode(data); txb.addInput(unspent_txid, unspent_vout); // payer txb.addOutput(recipient, Math.floor(1.88*1e8)); // payee txb.addOutput(dataScript, 0); // OP_RETURN always with 0 value unless you want to burn coins txb.sign(0, keyPair); const txRaw = txb.build(); const txHex = txRaw.toHex(); // To broadcast, use local bitcoin core's `sendrawtransaction` or 3rd party service
更新:使用bitcoinjs-lib 5.0.2(最新),與上述相同,僅更新
dataScript
評估和添加OP_RETURN
輸出:const dataScript = bitcoinjs.payments.embed({ data: [data] }); txb.addOutput(dataScript.output, 0); // OP_RETURN always with 0 value unless you want to burn coins