Beispiel #1
0
 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);
 };
Beispiel #2
0
  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();
      });
    }
  });
Beispiel #3
0
  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();
      }
    }
  });
Beispiel #4
0
 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);
     }
 });
Beispiel #5
0
 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);
 }
Beispiel #6
0
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]);
};
Beispiel #7
0
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);
      }
    }
  );
}
Beispiel #8
0
 users.forEach(function (user) {
   range(0, num).forEach(function (i) {
     feed.save({ user: user, id: timestamp(), message: 'Message ' + i}, next); 
   });
 });