insight-api-terracoin
Version:
A Terracoin blockchain REST and web socket API service for Bitcore Node.
99 lines (85 loc) • 2.43 kB
JavaScript
;
var Common = require('./common');
var bitcore = require('bitcore-lib-terracoin');
var _ = bitcore.deps._;
function MasternodeController(node) {
this.node = node;
this.common = new Common({log: this.node.log});
}
MasternodeController.prototype.list = function(req, res) {
var self = this;
this.getMNList(function(err, result) {
if (err) {
return self.common.handleErrors(err, res);
}
res.jsonp(result);
});
};
MasternodeController.prototype.validate = function (req, res, next) {
var payeeAddr = req.params.payee;
//We first validate that the payee address is valid
var self = this;
if(!payeeAddr || payeeAddr.length!=34 ) {
return self.common.handleErrors({
message: 'Must include a valid format address',
code: 1
}, res);
}
try {
var a = new bitcore.Address(payeeAddr);
} catch(e) {
return self.common.handleErrors({
message: 'Invalid address: ' + e.message,
code: 1
}, res);
}
//After having valide addr, we get the MNList
this.getMNList(function(err, mnList){
if(err){
return self.common.handleErrors(err, res);
}
var filteredMnList = mnList.filter(function(elem){
return elem.payee === payeeAddr;
});
if(!filteredMnList || !filteredMnList[0]){
return res.jsonp({valid:false, payee:payeeAddr});
}
var mn = filteredMnList[0];
mn.valid = false;
if(!mn.hasOwnProperty('payee') ||
mn.hasOwnProperty('vin')){
var vin = mn.vin.split('-');
var txid = vin[0];
var voutindex = vin[1];
self.node.getDetailedTransaction(txid, function(err, transaction) {
if (err && err.code === -5) {
return self.common.handleErrors(null, res);
} else if(err) {
return self.common.handleErrors(err, res);
}
if(transaction.outputs && transaction.outputs[voutindex]){
var txvout = transaction.outputs[voutindex]
if(txvout.satoshis===100000000000 &&
txvout.spentTxId===undefined &&
txvout.spentHeight===undefined &&
txvout.spentIndex===undefined){
mn.valid = true;
res.jsonp(mn)
}else{
res.jsonp(mn)
}
}
});
}
})
};
MasternodeController.prototype.getMNList = function(callback) {
this.node.services.bitcoind.getMNList(function(err, result){
var MNList = result || [];
if (err) {
return callback(err);
}
callback(null,MNList);
});
};
module.exports = MasternodeController;