Code
const bitcoinRpc = require('node-bitcoin-rpc'); const bsv = require('bsv'); bitcoinRpc.init('localhost', 18445, 'user', 'pwd'); (async () => { "use strict"; async function listUnspent() { return new Promise((resolve, reject) => { bitcoinRpc.call('listunspent', [], (err, res) => { if (!!err) { reject(err); } else { resolve(res.result); } }); }); } async function getPrivateKey(address) { return new Promise((resolve, reject) => { bitcoinRpc.call('dumpprivkey', [ address ], (err, res) => { if (!!err) { reject(err); } else { resolve(res.result); } }); }); } async function sendRawTransaction(rawTransaction) { return new Promise((resolve, reject) => { bitcoinRpc.call('sendrawtransaction', [ rawTransaction ], (err, res) => { if (!!err) { reject(err); } else { resolve(res.result); } }); }); } try { const utxos = await listUnspent(); console.log('picking first spendable utxo with more than 1 BTC'); const utxo = utxos.find(u => u.spendable && u.amount > 1); console.log('found', utxo); console.log('Fetching private key'); const privKeyToken = await getPrivateKey(utxo.address); const privKey = new bsv.PrivateKey(privKeyToken); console.log('found', privKey.inspect()); const moneyOutput = new bsv.Transaction.UnspentOutput(utxo); console.log(moneyOutput.inspect()); console.log('Transforming to outgoing output for new transaction'); const transaction = new bsv.Transaction() .from([ utxo ]) .to('mwaNghmBoUbzxrQfJagwY3C4zAqnVWRJaF', 100) // 100 Satoshis .change('mnZuPaoi6ZEdtA8Bak2ELV63XGkWvGgme2') .addData([ 'Hello', 'World', 'It', 'is', 'me!' ]) .sign(privKey); console.log('Created and signed transaction', transaction.inspect()); console.log('Serializing to raw transaction format'); const rawTransaction = transaction.serialize(true); console.log('raw transaction', rawTransaction); const result = await sendRawTransaction(rawTransaction); console.log('sended raw transaction', result); } catch(e) { console.error('meh!'); console.error(e); } })();