7 changed files with 468 additions and 58 deletions
@ -0,0 +1,98 @@ |
|||||
|
var config = require("./../config.js"); |
||||
|
|
||||
|
const ElectrumClient = require('electrum-client'); |
||||
|
|
||||
|
var electrumClients = []; |
||||
|
|
||||
|
function connectToServers() { |
||||
|
for (var i = 0; i < config.electrumXServers.length; i++) { |
||||
|
connectToServer(config.electrumXServers[i].host, config.electrumXServers[i].port); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function connectToServer(host, port) { |
||||
|
console.log("Connecting to ElectrumX Server: " + host + ":" + port); |
||||
|
|
||||
|
var electrumClient = new ElectrumClient(port, host, 'tls'); |
||||
|
electrumClient.connect().then(function() { |
||||
|
electrumClient.server_version("btc-rpc-explorer-1.1", "1.2").then(function(res) { |
||||
|
console.log("Connected to ElectrumX Server: " + host + ":" + port + ", versions: " + res); |
||||
|
}); |
||||
|
}); |
||||
|
|
||||
|
electrumClients.push(electrumClient); |
||||
|
} |
||||
|
|
||||
|
function runOnServer(electrumClient, f) { |
||||
|
return new Promise(function(resolve, reject) { |
||||
|
f(electrumClient).then(function(result) { |
||||
|
resolve(result); |
||||
|
|
||||
|
}).catch(function(err) { |
||||
|
console.log("Error dif0e21qdh: " + JSON.stringify(err) + ", host=" + electrumClient.host + ", port=" + electrumClient.port); |
||||
|
}); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
function runOnAllServers(f) { |
||||
|
return new Promise(function(resolve, reject) { |
||||
|
var promises = []; |
||||
|
|
||||
|
for (var i = 0; i < electrumClients.length; i++) { |
||||
|
promises.push(runOnServer(electrumClients[i], f)); |
||||
|
} |
||||
|
|
||||
|
Promise.all(promises).then(function(results) { |
||||
|
resolve(results); |
||||
|
|
||||
|
}).catch(function(err) { |
||||
|
reject(err); |
||||
|
}); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
function getAddressTxids(addrScripthash) { |
||||
|
return new Promise(function(resolve, reject) { |
||||
|
runOnAllServers(function(electrumClient) { |
||||
|
return electrumClient.blockchainScripthash_getHistory(addrScripthash); |
||||
|
|
||||
|
}).then(function(results) { |
||||
|
resolve(results[0]); |
||||
|
|
||||
|
}).catch(function(err) { |
||||
|
reject(err); |
||||
|
}); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
function getAddressBalance(addrScripthash) { |
||||
|
return new Promise(function(resolve, reject) { |
||||
|
runOnAllServers(function(electrumClient) { |
||||
|
return electrumClient.blockchainScripthash_getBalance(addrScripthash); |
||||
|
|
||||
|
}).then(function(results) { |
||||
|
var first = results[0]; |
||||
|
var done = false; |
||||
|
|
||||
|
for (var i = 1; i < results.length; i++) { |
||||
|
if (results[i].confirmed != first.confirmed) { |
||||
|
resolve({conflictedResults:results}); |
||||
|
done = true; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (!done) { |
||||
|
resolve(results[0]); |
||||
|
} |
||||
|
|
||||
|
}).catch(function(err) { |
||||
|
reject(err); |
||||
|
}); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
module.exports = { |
||||
|
connectToServers: connectToServers, |
||||
|
getAddressTxids: getAddressTxids, |
||||
|
getAddressBalance: getAddressBalance |
||||
|
}; |
@ -0,0 +1,3 @@ |
|||||
|
span |
||||
|
span(data-toggle="tooltip", title="This data is at least partially generated from the ElectrumX servers currently configured: ") |
||||
|
i(class="fas fa-exclamation-triangle text-warning") |
Loading…
Reference in new issue