You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.9 KiB
63 lines
1.9 KiB
var request = require("request");
|
|
var utils = require("./../utils.js");
|
|
|
|
function getAddressDetails(address, scriptPubkey, sort, limit, offset) {
|
|
return new Promise(function(resolve, reject) {
|
|
if (address.startsWith("bc1")) {
|
|
reject({userText:"blockcypher.com API does not support bc1 (native Segwit) addresses"});
|
|
|
|
return;
|
|
}
|
|
|
|
var limitOffset = limit + offset;
|
|
var mainnetUrl = `https://api.blockcypher.com/v1/btc/main/addrs/${address}?limit=${limitOffset}`;
|
|
var testnetUrl = `https://api.blockcypher.com/v1/btc/test3/addrs/${address}?limit=${limitOffset}`;
|
|
var url = (global.activeBlockchain == "main") ? mainnetUrl : ((global.activeBlockchain == "test") ? testnetUrl : mainnetUrl);
|
|
|
|
var options = {
|
|
url: url,
|
|
headers: {
|
|
'User-Agent': 'request'
|
|
}
|
|
};
|
|
|
|
request(options, function(error, response, body) {
|
|
if (error == null && response && response.statusCode && response.statusCode == 200) {
|
|
var blockcypherJson = JSON.parse(body);
|
|
|
|
var response = {};
|
|
|
|
response.txids = [];
|
|
response.blockHeightsByTxid = {};
|
|
|
|
// blockcypher doesn't support offset for paging, so simulate up to the hard cap of 2,000
|
|
for (var i = offset; i < Math.min(blockcypherJson.txrefs.length, limitOffset); i++) {
|
|
var tx = blockcypherJson.txrefs[i];
|
|
|
|
response.txids.push(tx.tx_hash);
|
|
response.blockHeightsByTxid[tx.tx_hash] = tx.block_height;
|
|
}
|
|
|
|
response.txCount = blockcypherJson.n_tx;
|
|
response.totalReceivedSat = blockcypherJson.total_received;
|
|
response.totalSentSat = blockcypherJson.total_sent;
|
|
response.balanceSat = blockcypherJson.final_balance;
|
|
response.source = "blockcypher.com";
|
|
|
|
resolve({addressDetails:response});
|
|
|
|
} else {
|
|
var fullError = {error:error, response:response, body:body};
|
|
|
|
utils.logError("097wef0adsgadgs", fullError);
|
|
|
|
reject(fullError);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
|
|
module.exports = {
|
|
getAddressDetails: getAddressDetails
|
|
};
|