this.calculateShares = function(blockData, blockHeight){ debug("Calculating shares for "+ blockData.hash); this.refreshEnv(); let lastBlock = this.getLastBlock(blockData.poolType); let shareCount = 0; range.range(lastBlock+1, blockHeight+1).forEach(function (blockID) { let txn = global.database.env.beginTxn({readOnly: true}); let cursor = new global.database.lmdb.Cursor(txn, global.database.shareDB); for (let found = (cursor.goToRange(blockID) === blockID); found; found = cursor.goToNextDup()) { cursor.getCurrentBinary(function(key, data) { // jshint ignore:line try{ let shareData = global.protos.Share.decode(data); if (shareData.poolType === blockData.poolType){ shareCount = shareCount + shareData.shares; } } catch(e){ console.error("Invalid share"); } }); } cursor.close(); txn.commit(); }); blockData.shares = shareCount; debug("Share calculator for "+ blockData.hash + " complete, found " + shareCount + " shares."); return global.protos.Block.encode(blockData); };
it('should be able to get a list of all object', function(done) { function Users(db) { Models.call(this, { db: db }, 'users', 'handle'); } util.inherits(Users, Models); var users = new Users(db); var num = 10; var next = after(num, list); range(0, num).forEach(function (i) { users.save({handle: 'handle' + i, name: 'name ' + i}, next); }); function list(err) { if (err) return done(err); users.all(function (err, _users) { if (err) return done(err); expect(_users.length).to.equal(num); _users.forEach(function (user) { expect(user.handle).to.match(/^handle[0-9]+$/); expect(user.name).to.match(/^name [0-9]+$/); }); done(); }); } });
it('should be able to stream values', function(done) { function Users(db) { Models.call(this, { db: db }, 'users', 'handle'); } util.inherits(Users, Models); var users = new Users(db); var num = 10; var next = after(num, stream); range(0, num).forEach(function (i) { users.save({handle: 'handle' + i, name: 'name ' + i}, next); }); function stream(err) { if (err) return done(err); var count = 0; users.createReadStream().pipe(through(write, end)); function write(user) { expect(user.handle).to.match(/^handle[0-9]+$/); expect(user.name).to.match(/^name [0-9]+$/); count++; } function end() { expect(count).to.equal(num); done(); } } });
global.coinFuncs.getLastBlockHeader(function (blockHeader) { if (lastBlock === blockHeader.height) { debug("No new work to be performed, block header matches last block"); scanInProgress = false; return; } debug("Parsing data for new blocks"); lastBlock = blockHeader.height; range.range(0, (blockHeader.height - Math.floor(global.config.payout.blocksRequired/2))).forEach(function (blockID) { if (!blockIDCache.hasOwnProperty(blockID)) { inc_check += 1; blockQueue.push({blockID: blockID}, function (err) { debug("Completed block scan on " + blockID); if (err) { console.error("Error processing " + blockID); } }); } }); if (inc_check === 0) { debug("No new work to be performed, initial scan complete"); scanInProgress = false; blockScannerTask = setInterval(blockScanner, 1000); } });
function (lastBlock, difficulty, callback) { let shareCount = 0; let ppsFound = false; let pplnsFound = false; let blockList = []; debug("Scanning from: "+lastBlock + " for more than: " + difficulty + " shares"); range.range(0, lastBlock+1).forEach(function (blockID) { blockID = (blockID - lastBlock+1) * -1; if (blockID < 0){ return; } debug("Scanning block: " + blockID); let txn = global.database.env.beginTxn({readOnly: true}); let cursor = new global.database.lmdb.Cursor(txn, global.database.shareDB); for (let found = (cursor.goToRange(blockID) === blockID); found; found = cursor.goToNextDup()) { if (ppsFound && pplnsFound){ cursor.getCurrentBinary(function(key, data) { // jshint ignore:line if (blockList.indexOf(key) === -1){ blockList.push(key); } }); } else { cursor.getCurrentBinary(function(key, data) { // jshint ignore:line if (key < lastPPSBlock){ ppsFound = true; } try{ let shareData = global.protos.Share.decode(data); if (shareData.poolType === global.protos.POOLTYPE.PPLNS){ shareCount = shareCount + shareData.shares; } } catch(e){ console.error("Invalid share"); } }); if (shareCount >= difficulty){ pplnsFound = true; } } } cursor.close(); txn.abort(); }); callback(null, blockList); }
var tileBetweenZooms = function tileBetweenZooms(initialVrt, startZoom, endZoom, initialCoords, options) { return Promise .resolve(range(startZoom, endZoom, -1)) .bind(this) .reduce(function(previous, z) { var sourceVrt = previous[0], sourceCoords = previous[1]; return Promise .bind(this) .then(function() { return tile.call(this, sourceVrt, z, sourceCoords, options); }) .then(function(resultVrt) { var resultCoords = _.map(sourceCoords, function(coord) { return [(coord[0] / 2) | 0, (coord[1] / 2) | 0]; }); return [resultVrt, CoordSet(resultCoords).toArray()]; }); }, [initialVrt, initialCoords]); };
var express = require('express'); var app = express(); var request = require('request'); var range = require('range').range; var DESIGNERS_URL = 'http://www.grailed.com/api/designers/grailed'; var categories = ['tops', 'bottoms', 'outerwear', 'raw denim', 'footwear', 'accessories', 'suiting']; var tops_sizes = ['XXS', 'XS', 'S', 'M', 'L', 'XL', 'XXL']; var bottoms_sizes = range(26, 44).map(stringifyNumbers); var shoe_sizes = range(6, 13, 0.5).map(stringifyNumbers).concat(['13', '14']); var accessories = ['ONE SIZE'].concat(range(26, 48, 2).map(stringifyNumbers)); var locations = []; function stringifyNumbers(num) { return String(num); } function getDesigners() { request(DESIGNERS_URL, function (err, res, body) { if(!err) { var parsedResponse = JSON.parse(body); var data = JSON.stringify(parsedResponse['data'], null, 4); console.log('Data: ' + data); } else { console.log('Aw shit. Error: ' + err); } } ); }
users.forEach(function (user) { range(0, num).forEach(function (i) { feed.save({ user: user, id: timestamp(), message: 'Message ' + i}, next); }); });