bitcoin-api-light
Version:
bitcoin-api-light is a bitcoin light-client nodejs module using Blockchain.info and Blockcyphers API to do three simple calls a minimal bitcoin wallet application needs to work
84 lines (71 loc) • 2.73 kB
JavaScript
;
var axios = require('axios');
var c = console;
var LOG = false;
var enableLogging = function enableLogging() {
LOG = true;
};
var balanceUrl = function balanceUrl(address, confirmations) {
return "https://blockchain.info/q/addressbalance/" + address + "?confirmations=" + confirmations + "&cors=true";
};
var unspentUrl = function unspentUrl(address) {
return "https://blockchain.info/unspent?active=" + address + "&cors=true";
};
var pushTXUrl = "https://api.blockcypher.com/v1/btc/main/txs/push";
var getBalance = function getBalance(address) {
var confirmations = arguments.length <= 1 || arguments[1] === undefined ? 1 : arguments[1];
var url = balanceUrl(address, confirmations);
// c.log(url)
return axios.get(url).then(function (resp) {
var balance = Number(resp.data);
if (!balance) return Promise.reject();
if (LOG) c.log("Balance of '" + address + "' at 0 confirmations:", balance);
return Promise.resolve(balance);
}).catch(function (resp) {
if (resp === undefined) return Promise.resolve(0);
var error = resp.data.error;
c.error("Bitcoin-API-light - Error during getBalance, response from Blockchain.info API:", error);
return Promise.reject(error);
});
};
var getUTXOs = function getUTXOs(address) {
var url = unspentUrl(address);
return axios.get(url).then(function (resp) {
var utxos = [];
var outputs = resp.data.unspent_outputs;
outputs.forEach(function (output) {
utxos.push({
txId: output.tx_hash_big_endian,
vout: output.tx_output_n,
scriptPubKey: output.script,
satoshis: output.value,
address: address
});
});
if (LOG) c.log("UTXOs for address '" + address + "':\n", utxos);
return Promise.resolve(utxos);
}).catch(function (resp) {
if (resp.data === "No free outputs to spend") return Promise.resolve([]);
var error = resp.data.error;
c.error("Bitcoin-API-light - Error during getUTXOs, response from Blockcypher API:", error);
return Promise.reject(error);
});
};
var pushTX = function pushTX(rawTX) {
var tx = { tx: rawTX };
return axios.post(pushTXUrl, tx).then(function (resp) {
var txHash = resp.data.tx.hash;
c.log("Transaction sent!\nTx hash:", txHash, "\nSee the transaction on Blockcypher's block explorer: https://live.blockcypher.com/btc/tx/" + txHash);
return Promise.resolve(txHash);
}).catch(function (resp) {
var error = resp.data.error;
c.error("Bitcoin-API-light - Error during pushTX, response from Blockcypher API:", error);
return Promise.reject(error);
});
};
module.exports = {
getBalance: getBalance,
getUTXOs: getUTXOs,
pushTX: pushTX,
enableLogging: enableLogging
};