Merge pull request #13 from matiu/feature/use-soop

Feature/use soop
This commit is contained in:
Mario Colque 2014-03-10 16:42:47 -02:00
commit 05d8b7c76a
29 changed files with 2109 additions and 2189 deletions

View File

@ -5,7 +5,7 @@
*/
var common = require('./common'),
async = require('async'),
BlockDb = require('../../lib/BlockDb').class();
BlockDb = require('../../lib/BlockDb');
var bdb = new BlockDb();

View File

@ -17,7 +17,7 @@ exports.show = function(req, res) {
}
else {
var option = req.query.q;
var statusObject = Status.new();
var statusObject = new Status();
var returnJsonp = function (err) {
if (err || ! statusObject)

View File

@ -7,12 +7,10 @@ var Address = require('../models/Address');
var async = require('async');
var common = require('./common');
var TransactionDb = require('../../lib/TransactionDb').class();
var BlockDb = require('../../lib/BlockDb').class();
var Rpc = require('../../lib/Rpc').class();
var Rpc = require('../../lib/Rpc');
var tDb = new TransactionDb();
var bdb = new BlockDb();
var tDb = require('../../lib/TransactionDb').default();
var bdb = require('../../lib/BlockDb').default();
exports.send = function(req, res) {
Rpc.sendRawTransaction(req.body.rawtx, function(err, txid) {

View File

@ -1,16 +1,13 @@
'use strict';
require('classtool');
function spec() {
var imports = require('soop').imports();
var async = require('async');
var BitcoreAddress = require('bitcore/Address').class();
var BitcoreAddress = require('bitcore/Address');
var BitcoreTransaction = require('bitcore/Transaction');
var BitcoreUtil = require('bitcore/util/util');
var TransactionDb = require('../../lib/TransactionDb').class();
var BitcoreTransaction = require('bitcore/Transaction').class();
var Parser = require('bitcore/util/BinaryParser').class();
var Parser = require('bitcore/util/BinaryParser');
var Buffer = require('buffer').Buffer;
var TransactionDb = imports.TransactionDb || require('../../lib/TransactionDb').default();
var CONCURRENCY = 5;
function Address(addrStr) {
@ -87,7 +84,7 @@ function spec() {
if (!self.addrStr) return next();
var ret = [];
var db = new TransactionDb();
var db = TransactionDb;
db.fromAddr(self.addrStr, function(err,txOut){
if (err) return next(err);
@ -96,11 +93,11 @@ function spec() {
async.eachLimit(txOut,CONCURRENCY,function (txItem, a_c) {
db.fromIdInfoSimple(txItem.txid, function(err, info) {
var scriptPubKey = self._getScriptPubKey(info.hex, txItem.index);
// we are filtering out even unconfirmed spents!
// add || !txItem.spentIsConfirmed
if (!txItem.spentTxId && info && info.hex) {
var scriptPubKey = self._getScriptPubKey(info.hex, txItem.index);
if (!txItem.spentTxId) {
ret.push({
address: self.addrStr,
txid: txItem.txid,
@ -124,7 +121,7 @@ function spec() {
if (!self.addrStr) return next();
var txs = [];
var db = new TransactionDb();
var db = TransactionDb;
async.series([
function (cb) {
var seen={};
@ -188,7 +185,5 @@ function spec() {
});
};
return Address;
}
module.defineClass(spec);
module.exports = require('soop')(Address);

View File

@ -1,16 +1,13 @@
'use strict';
//var imports = require('soop').imports();
require('classtool');
function spec() {
var async = require('async');
var RpcClient = require('bitcore/RpcClient').class();
var BlockDb = require('../../lib/BlockDb').class();
var RpcClient = require('bitcore/RpcClient');
var config = require('../../config/config');
var rpc = new RpcClient(config.bitcoind);
function Status() {
this.bDb = new BlockDb();
this.bDb = require('../../lib/BlockDb').default();
}
Status.prototype.getInfo = function(next) {
@ -105,8 +102,4 @@ function spec() {
});
};
return Status;
}
module.defineClass(spec);
module.exports = require('soop')(Status);

View File

@ -5,7 +5,7 @@ var util = require('util');
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
var RpcClient = require('../node_modules/bitcore/RpcClient').class();
var RpcClient = require('../node_modules/bitcore/RpcClient');
var config = require('../config/config');

View File

@ -2,7 +2,7 @@
'use strict';
var util = require('util');
var T = require('../lib/TransactionDb').class();
var T = require('../lib/TransactionDb');
process.env.NODE_ENV = process.env.NODE_ENV || 'development';

View File

@ -41,7 +41,7 @@ first 10%
=> sacando los contenidos adentro de getblock from file de => 4.5s!!
=> con base58 cpp => 21s
=> toda la testnet => 17m
=> toda la testnet => 17m !!
10% de blk2
=> 50s con base58cpp
@ -54,3 +54,7 @@ first 10%
=> 15s comentando desde b.getStandardizedObject()
=> 39s comentando dps b.getStandardizedObject()
Mon Mar 10 11:59:25 ART 2014
10% de blk 0 (testnet)
=> 37s

View File

@ -9,8 +9,8 @@ process.env.NODE_ENV = process.env.NODE_ENV || 'development';
*/
var express = require('express'),
fs = require('fs'),
PeerSync = require('./lib/PeerSync').class(),
HistoricSync = require('./lib/HistoricSync').class();
PeerSync = require('./lib/PeerSync'),
HistoricSync = require('./lib/HistoricSync');
//Initializing system variables
var config = require('./config/config');

View File

@ -1,11 +1,6 @@
'use strict';
require('classtool');
function spec(b) {
var superclass = b.superclass || require('events').EventEmitter;
var imports = require('soop').imports();
var ThisParent = imports.parent || require('events').EventEmitter;
var TIMESTAMP_PREFIX = 'bts-'; // b-ts-<ts> => <hash>
var PREV_PREFIX = 'bpr-'; // b-prev-<hash> => <prev_hash>
var NEXT_PREFIX = 'bne-'; // b-next-<hash> => <next_hash>
@ -21,18 +16,17 @@ function spec(b) {
*/
var levelup = require('levelup'),
config = require('../config/config');
var db = b.db || levelup(config.leveldb + '/blocks',{maxOpenFiles: MAX_OPEN_FILES} );
var Rpc = b.rpc || require('./Rpc').class();
var PoolMatch = b.poolMatch || require('./PoolMatch').class(config);
var db = imports.db || levelup(config.leveldb + '/blocks',{maxOpenFiles: MAX_OPEN_FILES} );
var Rpc = imports.rpc || require('./Rpc');
var PoolMatch = imports.poolMatch || require('soop').load('./PoolMatch',config);
var TransactionDb = require('./TransactionDb.js').class();
var tDb = require('./TransactionDb.js').default();
var BlockDb = function() {
BlockDb.super(this, arguments);
this.poolMatch = new PoolMatch();
};
BlockDb.superclass = superclass;
BlockDb.parent = ThisParent;
BlockDb.prototype.close = function(cb) {
db.close(cb);
@ -167,10 +161,9 @@ function spec(b) {
};
BlockDb.prototype.getPoolInfo = function(tx, cb) {
var tr = new TransactionDb();
var self = this;
tr._getInfo(tx, function(e, a) {
tDb._getInfo(tx, function(e, a) {
if (e) return cb(false);
if (a.isCoinBase) {
@ -227,8 +220,4 @@ function spec(b) {
return Rpc.blockIndex(height,cb);
};
return BlockDb;
}
module.defineClass(spec);
module.exports = require('soop')(BlockDb);

View File

@ -1,12 +1,7 @@
'use strict';
require('classtool');
function spec() {
var Block = require('bitcore/Block').class(),
var Block = require('bitcore/Block'),
networks = require('bitcore/networks'),
Parser = require('bitcore/util/BinaryParser').class(),
Parser = require('bitcore/util/BinaryParser'),
fs = require('fs'),
Buffer = require('buffer').Buffer,
glob = require('glob'),
@ -156,7 +151,5 @@ function spec() {
});
};
return BlockExtractor;
}
module.defineClass(spec);
module.exports = require('soop')(BlockExtractor);

View File

@ -1,20 +1,16 @@
'use strict';
require('classtool');
function spec() {
var imports = require('soop').imports();
var util = require('util');
var assert = require('assert');
var RpcClient = require('bitcore/RpcClient').class();
var Script = require('bitcore/Script').class();
var networks = require('bitcore/networks');
var async = require('async');
var config = require('../config/config');
var Sync = require('./Sync').class();
var RpcClient = require('bitcore/RpcClient');
var Script = require('bitcore/Script');
var networks = require('bitcore/networks');
var config = imports.config || require('../config/config');
var Sync = require('./Sync');
var sockets = require('../app/controllers/socket.js');
var BlockExtractor = require('./BlockExtractor.js').class();
var BlockExtractor = require('./BlockExtractor.js');
var buffertools = require('buffertools');
// var bitcoreUtil = require('bitcore/util/util');
@ -238,32 +234,22 @@ function spec() {
function(err) {
if (err) return next(err);
var ret = false;
if ( self.blockChainHeight === blockInfo.height || // Still the tip
blockInfo.confirmations > 0) { // Or is confirmed
if ( self.blockChainHeight === blockInfo.height ||
blockInfo.confirmations > 0) {
ret = false;
}
else {
oldtip = tip;
tip = blockInfo.previousblockhash;
p('Previous TIP is now orphan.');
if (tip) {
p('\tGoing back to:' + tip);
assert(tip);
p('Previous TIP is now orphan. Back to:' + tip);
ret = true;
}
else {
p('\tNo able to recover last tip. A Total resync is needed.');
tip = self.genesis;
self.needResync = 1;
ret = false;
}
}
return ret;
},
function(err) {
self.startBlock = tip;
if (!self.needResync) {
p('Resuming sync from block:'+tip);
}
return next(err);
}
);
@ -364,22 +350,15 @@ function spec() {
function(s_c) {
self.checkNetworkSettings(s_c);
},
function(s_c) {
self.updateConnectedCountDB(s_c);
},
function(s_c) {
self.updateBlockChainHeight(s_c);
},
function(s_c) {
self.updateStartBlock(s_c);
},
function(s_c) {
if (self.needResync) {
self.needResync=0;
self.sync.destroy(s_c);
}
else s_c();
},
function(s_c) {
self.updateConnectedCountDB(s_c);
},
function(s_c) {
self.prepareFileSync(opts, s_c);
},
@ -440,7 +419,5 @@ function spec() {
}, next);
});
};
return HistoricSync;
}
module.defineClass(spec);
module.exports = require('soop')(HistoricSync);

View File

@ -1,11 +1,8 @@
'use strict';
require('classtool');
function spec() {
var fs = require('fs');
var bitcoreUtil = require('bitcore/util/util');
var Sync = require('./Sync').class();
var Peer = require('bitcore/Peer').class();
var Sync = require('./Sync');
var Peer = require('bitcore/Peer');
var config = require('../config/config');
var networks = require('bitcore/networks');
@ -15,7 +12,7 @@ function spec() {
this.connected = false;
this.peerdb = undefined;
this.allowReorgs = false;
this.PeerManager = require('bitcore/PeerManager').createClass({
this.PeerManager = require('soop').load('../node_modules/bitcore/PeerManager',{
network: (config.network === 'testnet' ? networks.testnet : networks.livenet)
});
this.peerman = new this.PeerManager();
@ -121,7 +118,4 @@ function spec() {
};
return PeerSync;
}
module.defineClass(spec);
module.exports = require('soop')(PeerSync);

View File

@ -1,12 +1,9 @@
'use strict';
require('classtool');
function spec(b) {
var imports = require('soop').imports();
var fs = require('fs');
var buffertools = require('buffertools');
var db = b.db || JSON.parse( fs.readFileSync(b.poolMatchFile || './poolMatchFile.json'));
var db = imports.db || JSON.parse( fs.readFileSync(imports.poolMatchFile || './poolMatchFile.json'));
var PoolMatch = function() {
var self = this;
@ -32,7 +29,4 @@ function spec(b) {
}
};
return PoolMatch;
}
module.defineClass(spec);
module.exports = require('soop')(PoolMatch);

View File

@ -1,16 +1,14 @@
'use strict';
require('classtool');
var imports = require('soop').imports();
function spec(b) {
var RpcClient = require('bitcore/RpcClient').class(),
BitcoreBlock = require('bitcore/Block').class(),
var RpcClient = require('bitcore/RpcClient'),
BitcoreBlock = require('bitcore/Block'),
bitcoreUtil = require('bitcore/util/util'),
util = require('util'),
config = require('../config/config');
var bitcoreRpc = b.bitcoreRpc || new RpcClient(config.bitcoind);
var bitcoreRpc = imports.bitcoreRpc || new RpcClient(config.bitcoind);
function Rpc() {
}
@ -107,8 +105,6 @@ function spec(b) {
});
};
return Rpc;
}
module.defineClass(spec);
module.exports = require('soop')(Rpc);

View File

@ -1,22 +1,17 @@
'use strict';
require('classtool');
function spec() {
var imports = require('soop').imports();
var sockets = require('../app/controllers/socket.js');
var BlockDb = require('./BlockDb').class();
var TransactionDb = require('./TransactionDb').class();
var config = require('../config/config');
var config = imports.config || require('../config/config');
var networks = require('bitcore/networks');
var async = require('async');
function Sync(opts) {
this.opts = opts || {};
this.bDb = new BlockDb(opts);
this.txDb = new TransactionDb(opts);
this.bDb = require('./BlockDb').default();
this.txDb = require('./TransactionDb').default();
this.txDb.on('tx_for_address', this.handleTxForAddress.bind(this));
this.txDb.on('new_tx', this.handleNewTx.bind(this));
this.bDb.on('new_block', this.handleNewBlock.bind(this));
@ -284,6 +279,4 @@ function spec() {
};
return Sync;
}
module.defineClass(spec);
module.exports = require('soop')(Sync);

View File

@ -1,11 +1,8 @@
'use strict';
require('classtool');
var imports = require('soop').imports();
function spec(b) {
var superclass = b.superclass || require('events').EventEmitter;
var ThisParent = imports.parent || require('events').EventEmitter;
// blockHash -> txid mapping
var IN_BLK_PREFIX = 'txb-'; //txb-<txid>-<block> => 1/0 (connected or not)
@ -28,24 +25,24 @@ function spec(b) {
/**
* Module dependencies.
*/
var Rpc = b.rpc || require('./Rpc').class(),
var Rpc = imports.rpc || require('./Rpc'),
util = require('bitcore/util/util'),
levelup = require('levelup'),
async = require('async'),
config = require('../config/config'),
assert = require('assert');
var db = b.db || levelup(config.leveldb + '/txs',{maxOpenFiles: MAX_OPEN_FILES} );
var Script = require('bitcore/Script').class();
var db = imports.db || levelup(config.leveldb + '/txs',{maxOpenFiles: MAX_OPEN_FILES} );
var Script = require('bitcore/Script');
// This is 0.1.2 = > c++ version of base57-native
var base58 = require('base58-native').base58Check;
var encodedData = require('bitcore/util/EncodedData').class({
var encodedData = require('soop').load('bitcore/util/EncodedData',{
base58: base58
});
var versionedData = require('bitcore/util/VersionedData').class({
superclass: encodedData
var versionedData= require('soop').load('bitcore/util/VersionedData',{
parent: encodedData
});
var Address = require('bitcore/Address').class({
superclass: versionedData
var Address = require('soop').load('bitcore/Address',{
parent: versionedData
});
var bitutil = require('bitcore/util/util');
var networks = require('bitcore/networks');
@ -54,7 +51,7 @@ function spec(b) {
TransactionDb.super(this, arguments);
this.network = config.network === 'testnet' ? networks.testnet : networks.livenet;
};
TransactionDb.superclass = superclass;
TransactionDb.parent = ThisParent;
TransactionDb.prototype.close = function(cb) {
db.close(cb);
@ -673,6 +670,7 @@ isspent
var k = FROM_BLK_PREFIX + hash;
var k2 = IN_BLK_PREFIX;
// This is slow, but prevent us to create a new block->tx index.
db.createReadStream({
start: k,
end: k + '~'
@ -727,6 +725,4 @@ isspent
return self.createFromArray(b.tx, b.hash, next);
};
return TransactionDb;
}
module.defineClass(spec);
module.exports = require('soop')(TransactionDb);

View File

@ -1,7 +1,7 @@
{
"name": "insight-bitcore-api",
"description": "An open-source bitcoin blockchain API. The Insight API provides you with a convenient, powerful and simple way to query and broadcast data on the bitcoin network and build your own services with it.",
"version": "0.1.3",
"version": "0.1.4",
"author": {
"name": "Ryan X Charles",
"email": "ryan@bitpay.com"
@ -36,13 +36,11 @@
"license": "MIT",
"keywords": [
"insight",
"secret",
"enigma",
"riddle",
"mystification",
"puzzle",
"conundrum",
"api",
"insight api",
"blockchain",
"bitcoin api",
"blockchain api",
"json",
"bitcore"
],
"engines": {
@ -52,12 +50,13 @@
"start": "node node_modules/grunt-cli/bin/grunt"
},
"dependencies": {
"bitcore": "~0.1.6",
"base58-native": "0.1.2",
"async": "*",
"leveldown": "*",
"levelup": "*",
"glob": "*",
"classtool": "*",
"soop": "git://github.com/gasteve/node-soop.git",
"commander": "*",
"bignum": "*",
"express": "~3.4.7",
@ -67,7 +66,6 @@
"moment": "~2.5.0",
"sinon": "~1.7.3",
"chai": "~1.8.1",
"bitcore": "git://github.com/bitpay/bitcore.git",
"bufferput": "git://github.com/bitpay/node-bufferput.git",
"xmlhttprequest": "~1.6.0"
},

View File

@ -8,7 +8,7 @@ process.env.NODE_ENV = process.env.NODE_ENV || 'development';
var assert = require('assert'),
fs = require('fs'),
util = require('util'),
TransactionDb = require('../../lib/TransactionDb').class();
TransactionDb = require('../../lib/TransactionDb').default();
var txItemsValid = JSON.parse(fs.readFileSync('test/integration/txitems.json'));
var txDb;
@ -16,7 +16,7 @@ var txDb;
describe('TransactionDb fromIdWithInfo', function(){
before(function(c) {
txDb = new TransactionDb();
txDb = TransactionDb;
return c();
});
@ -118,7 +118,7 @@ describe('TransactionDb fromIdWithInfo', function(){
describe('TransactionDb Outs', function(){
before(function(c) {
txDb = new TransactionDb();
txDb = TransactionDb;
return c();
});

View File

@ -11,7 +11,7 @@ var
util = require('util'),
async = require('async'),
config = require('../../config/config'),
TransactionDb = require('../../lib/TransactionDb').class();
TransactionDb = require('../../lib/TransactionDb').default();
var spentValid = JSON.parse(fs.readFileSync('test/integration/spent.json'));
@ -20,7 +20,7 @@ var txDb;
describe('TransactionDb Expenses', function(){
before(function(c) {
txDb = new TransactionDb();
txDb = TransactionDb;
// lets spend!
async.each(Object.keys(spentValid),

View File

@ -6,8 +6,8 @@ process.env.NODE_ENV = process.env.NODE_ENV || 'development';
var assert = require('assert'),
fs = require('fs'),
Address = require('../../app/models/Address').class(),
TransactionDb = require('../../lib/TransactionDb').class(),
Address = require('../../app/models/Address'),
TransactionDb = require('../../lib/TransactionDb').default(),
addrValid = JSON.parse(fs.readFileSync('test/integration/addr.json')),
utxoValid = JSON.parse(fs.readFileSync('test/integration/utxo.json'));
@ -15,7 +15,7 @@ var txDb;
describe('Address balances', function() {
before(function(c) {
txDb = new TransactionDb();
txDb = TransactionDb;
return c();
});

View File

@ -10,14 +10,14 @@ var TESTING_BLOCK = '000000000185678d3d7ecc9962c96418174431f93fe20bf216d55652724
var
assert = require('assert'),
// config = require('../../config/config'),
BlockDb = require('../../lib/BlockDb').class();
BlockDb = require('../../lib/BlockDb').default();
var bDb;
describe('BlockDb fromHashWithInfo', function() {
before(function(c) {
bDb = new BlockDb();
bDb = BlockDb;
return c();
});

View File

@ -7,7 +7,7 @@ process.env.NODE_ENV = process.env.NODE_ENV || 'development';
var assert = require('assert'),
config = require('../../config/config'),
BlockExtractor = require('../../lib/BlockExtractor').class(),
BlockExtractor = require('../../lib/BlockExtractor'),
networks = require('bitcore/networks'),
util = require('bitcore/util/util');

View File

@ -9,7 +9,7 @@ var START_TS = 1;
var END_TS = '1296688928~'; // 2/2/2011 23:23PM
var assert = require('assert'),
BlockDb = require('../../lib/BlockDb').class();
BlockDb = require('../../lib/BlockDb').default();
var bDb;
@ -17,7 +17,7 @@ describe('BlockDb getBlocksByDate', function(){
before(function(c) {
bDb = new BlockDb();
bDb = BlockDb;
return c();
});

View File

@ -1,8 +1,8 @@
'use strict';
var BlockDb = require('../../lib/BlockDb').class();
var BlockDb = require('../../lib/BlockDb').default();
var height_needed = 180000;
var bDb = new BlockDb();
var bDb = BlockDb;
var expect = require('chai').expect;

View File

@ -4,7 +4,7 @@
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
var assert = require('assert'),
Status = require('../../app/models/Status').class();
Status = require('../../app/models/Status');
describe('Status', function(){

View File

@ -3,7 +3,7 @@ var chai = require('chai'),
expect = chai.expect,
sinon = require('sinon');
var PeerSync = require('../../lib/PeerSync.js').class();
var PeerSync = require('../../lib/PeerSync.js');
describe('PeerSync', function() {
var ps;

View File

@ -3,7 +3,7 @@
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
var PeerSync = require('../lib/PeerSync').class();
var PeerSync = require('../lib/PeerSync');
var PROGRAM_VERSION = '0.1';
var program = require('commander');

View File

@ -7,7 +7,7 @@ process.env.NODE_ENV = process.env.NODE_ENV || 'development';
var SYNC_VERSION = '0.1';
var program = require('commander');
var HistoricSync = require('../lib/HistoricSync').class();
var HistoricSync = require('../lib/HistoricSync');
var async = require('async');
program