insight-ui-zcash/lib/Sync.js

142 lines
3.2 KiB
JavaScript
Raw Normal View History

2014-01-10 11:02:33 -08:00
'use strict';
2014-01-07 10:21:59 -08:00
2014-01-10 11:02:33 -08:00
require('classtool');
2014-01-10 11:02:33 -08:00
function spec() {
2014-01-16 12:25:52 -08:00
var sockets = require('../app/controllers/socket.js');
2014-02-03 18:30:46 -08:00
var BlockDb = require('./BlockDb').class();
var TransactionDb = require('./TransactionDb').class();
var async = require('async');
2014-01-15 12:36:49 -08:00
function Sync() {
2014-02-05 06:23:41 -08:00
this.bDb = new BlockDb();
2014-02-03 18:30:46 -08:00
this.txDb = new TransactionDb();
}
2014-01-18 13:28:24 -08:00
Sync.prototype.init = function(opts, cb) {
var self = this;
2014-01-18 13:28:24 -08:00
self.opts = opts;
2014-01-18 13:28:24 -08:00
return cb();
2014-01-18 13:28:24 -08:00
};
2014-02-05 06:23:41 -08:00
Sync.prototype.close = function(cb) {
var self = this;
self.txDb.close(function() {
self.bDb.close(cb);
});
2014-01-18 13:28:24 -08:00
};
Sync.prototype.destroy = function(next) {
var self = this;
async.series([
2014-02-05 06:23:41 -08:00
function(b) { self.bDb.drop(b); },
2014-02-04 21:48:54 -08:00
function(b) { self.txDb.drop(b); },
], next);
};
2014-01-30 18:16:43 -08:00
2014-02-03 18:30:46 -08:00
Sync.prototype.storeBlock = function(block, cb) {
var self = this;
2014-01-15 12:36:49 -08:00
2014-02-03 18:30:46 -08:00
self.txDb.createFromBlock(block, function(err, insertedTxs, updateAddrs) {
2014-01-17 11:36:34 -08:00
if (err) return cb(err);
2014-01-15 12:36:49 -08:00
2014-02-05 06:23:41 -08:00
self.bDb.add(block, function(err){
2014-02-03 18:30:46 -08:00
if (err) return cb(err);
self._handleBroadcast(block, insertedTxs, updateAddrs);
return cb();
});
2014-01-11 20:29:25 -08:00
});
};
2014-02-04 14:55:58 -08:00
Sync.prototype.checkOrphan = function(fromBlock, toBlock, c) {
2014-02-03 22:22:58 -08:00
var self = this;
2014-02-04 08:06:05 -08:00
var hash = fromBlock;
2014-02-03 22:22:58 -08:00
2014-02-04 14:55:58 -08:00
var co = 0;
var limit = 10;
var cont = 1;
2014-02-03 22:22:58 -08:00
async.whilst(
function () {
2014-02-04 14:55:58 -08:00
if (++co > limit) {
console.log('[Sync.js.109] WARN: Reach reog depth limit'); //TODO
}
return cont && hash && hash !== toBlock && co < limit;
2014-02-03 22:22:58 -08:00
},
2014-02-04 08:06:05 -08:00
function (w_c) {
2014-02-04 14:55:58 -08:00
//check with RPC if the block is mainchain
2014-02-05 06:23:41 -08:00
self.bDb.fromHashWithInfo(hash, function (err, info) {
2014-02-04 14:55:58 -08:00
if (!info) {
console.log('[Sync.js.107:hash:ORPHAN]',hash); //TODO
self.txDb.setOrphan(hash, function(err) {
if (err) return w_c(err);
2014-02-05 06:23:41 -08:00
self.bDb.setOrphan(hash, function(err, prevHash){
2014-02-04 14:55:58 -08:00
hash = prevHash;
return w_c(err);
});
});
}
else {
console.log('[Sync.js.107:hash:NOT ORPHAN]',hash); //TODO
cont = 0;
return w_c();
}
2014-02-03 22:22:58 -08:00
});
},
2014-02-04 08:06:05 -08:00
function (err) {
return c(err);
2014-02-03 22:22:58 -08:00
}
);
};
2014-01-16 08:01:32 -08:00
2014-02-03 18:30:46 -08:00
Sync.prototype._handleBroadcast = function(hash, inserted_txs, updated_addrs) {
var self = this;
2014-02-03 18:30:46 -08:00
if (hash && self.opts.broadcast_blocks) {
sockets.broadcast_block({hash: hash});
2014-01-29 10:10:36 -08:00
}
if (inserted_txs && self.opts.broadcast_txs) {
inserted_txs.forEach(function(tx) {
sockets.broadcast_tx(tx);
});
}
if (updated_addrs && self.opts.broadcast_addresses) {
updated_addrs.forEach(function(addr, txs){
txs.forEach(function(addr, t){
sockets.broadcast_address_tx(addr, {'txid': t});
2014-01-16 08:01:32 -08:00
});
2014-01-29 10:10:36 -08:00
});
}
};
Sync.prototype.storeTxs = function(txs, cb) {
var self = this;
2014-02-05 12:39:00 -08:00
// TODO -- Peertopeer
/*
2014-02-03 18:30:46 -08:00
self.txDb.createFromTxs(txs, function(err, inserted_txs, updated_addrs) {
2014-01-29 10:10:36 -08:00
if (err) return cb(err);
2014-01-16 08:01:32 -08:00
2014-01-29 10:10:36 -08:00
self._handleBroadcast(null, inserted_txs, updated_addrs);
2014-01-16 08:01:32 -08:00
return cb(err);
});
2014-02-05 12:39:00 -08:00
*/
2014-01-16 08:01:32 -08:00
};
return Sync;
2014-01-10 11:02:33 -08:00
}
2014-01-07 10:21:59 -08:00
module.defineClass(spec);
2014-01-10 11:02:33 -08:00