react-image-publisher
Version:
A common blockchain React component for publishing images with Bitstore and Open Publish
63 lines (50 loc) • 1.84 kB
JavaScript
var bitcoin = require('bitcoinjs-lib');
var simpleCommonWallet = function(options) {
var seed, commonBlockchain;
commonBlockchain = options.commonBlockchain;
if (options && options.seed) {
seed = bitcoin.crypto.sha256(options.seed);
}
else {
seed = bitcoin.crypto.sha256(randombytes(16));
}
var wallet = new bitcoin.Wallet(seed, bitcoin.networks.testnet);
var address = wallet.generateAddress();
var signMessage = function (message, cb) {
var key = wallet.getPrivateKey(0);
var network = bitcoin.networks.testnet;
cb(null, bitcoin.Message.sign(key, message, network).toString('base64'));
};
var signRawTransaction = function(txHex, cb) {
var tx = bitcoin.Transaction.fromHex(txHex);
var signedTx = wallet.signWith(tx, [address]);
var txid = signedTx.getId();
var signedTxHex = signedTx.toHex();
cb(false, signedTxHex, txid);
};
var createTransaction = function(options, callback) {
var value = options.value;
var destinationAddress = options.destinationAddress;
commonBlockchain.Addresses.Unspents([destinationAddress], function(err, addressesUnspents) {
var unspentOutputs = addressesUnspents[0];
unspentOutputs.forEach(function(utxo) {
utxo.txHash = utxo.txid;
utxo.index = utxo.vout;
});
wallet.setUnspentOutputs(unspentOutputs);
var newTx = wallet.createTx(destinationAddress, value, 1000, address);
var signedTx = wallet.signWith(newTx, [address]);
var signedTxHex = signedTx.toHex();
callback(err, signedTxHex);
});
};
var commonWallet = {
network: 'testnet',
signRawTransaction: signRawTransaction,
signMessage: signMessage,
address: address,
createTransaction: createTransaction
};
return commonWallet;
};
module.exports = simpleCommonWallet;