Skip to content

Commit 7d311c7

Browse files
committed
Build 0.7.4
1 parent 0deb170 commit 7d311c7

23 files changed

+329
-154
lines changed

dist/api/Address.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ class Address extends _DataCollector.DataCollectorItem {
3434
type: _types.addrTypes.CONTRACT,
3535
contractInterfaces: { $in: _types.tokensInterfaces } },
3636
params);
37+
},
38+
39+
getCirculatingSupply: params => {
40+
return this.parent.getCirculatingSupply();
3741
} };
3842

3943
}}exports.Address = Address;exports.default =

dist/api/Blocks.js

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@ var _Tx = require('./Tx');
66
var _Address = require('./Address');
77
var _Event = require('./Event');
88
var _TokenAccount = require('./TokenAccount');
9-
var _TxPending = require('./TxPending');function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
9+
var _TxPending = require('./TxPending');
10+
var _getCirculatingSupply = require('./getCirculatingSupply');var _getCirculatingSupply2 = _interopRequireDefault(_getCirculatingSupply);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
11+
1012
const lastLimit = _config2.default.api.lastBlocks || 10;
1113
const collections = _config2.default.blocks.collections;
14+
1215
class Blocks extends _DataCollector.DataCollector {
1316
constructor(db) {
1417
let collectionName = collections.Blocks;
@@ -17,6 +20,7 @@ class Blocks extends _DataCollector.DataCollector {
1720
this.latest = 0;
1821
this.lastBlocks = [];
1922
this.lastTransactions = [];
23+
this.circulatingSupply = null;
2024
this.addItem(collections.Blocks, 'Block', _Block.Block);
2125
this.addItem(collections.PendingTxs, 'TxPending', _TxPending.TxPending);
2226
this.addItem(collections.Txs, 'Tx', _Tx.Tx);
@@ -26,41 +30,51 @@ class Blocks extends _DataCollector.DataCollector {
2630
}
2731
tick() {
2832
this.setLastBlocks();
33+
this.setCirculatingSupply();
2934
}
3035

3136
run(module, action, params) {
3237
return this.itemPublicAction(module, action, params);
3338
}
34-
setLastBlocks() {
35-
this.collection.
36-
find().
37-
sort({ number: -1 }).
38-
limit(this.lastLimit).
39-
toArray((err, blocks) => {
40-
if (err) console.log(err);else
41-
{
42-
this.Tx.db.
43-
find({ txType: { $in: [_types.txTypes.default, _types.txTypes.contract] } }).
44-
sort({ blockNumber: -1, transactionIndex: -1 }).
45-
limit(this.lastLimit).
46-
toArray((err, txs) => {
47-
if (err) console.log(err);else
48-
{
49-
this.updateLastBlocks(blocks, txs);
50-
}
51-
});
52-
}
53-
});
39+
40+
async setLastBlocks() {
41+
try {
42+
let { collection, lastLimit, Tx } = this;
43+
let blocks = await collection.find().sort({ number: -1 }).limit(lastLimit).toArray();
44+
let txs = await Tx.db.find({ txType: { $in: [_types.txTypes.default, _types.txTypes.contract] } }).
45+
sort({ blockNumber: -1, transactionIndex: -1 }).
46+
limit(this.lastLimit).
47+
toArray();
48+
49+
this.updateLastBlocks(blocks, txs);
50+
} catch (err) {
51+
console.log(err);
52+
}
53+
}
54+
55+
async setCirculatingSupply() {
56+
try {
57+
const collection = this.db.collection(collections.Addrs);
58+
let circulating = await (0, _getCirculatingSupply2.default)(collection);
59+
this.circulatingSupply = Object.assign({}, circulating);
60+
} catch (err) {
61+
console.log(err);
62+
}
63+
}
64+
getCirculatingSupply() {
65+
return this.formatData(this.circulatingSupply);
5466
}
5567

5668
getLastBlocks() {
5769
let blocks = this.lastBlocks;
5870
let transactions = this.lastTransactions;
5971
return this.formatData({ blocks, transactions });
6072
}
73+
6174
getLastBlock() {
6275
return this.lastBlocks[0] || null;
6376
}
77+
6478
updateLastBlocks(blocks, transactions) {
6579
this.lastBlocks = blocks;
6680
this.lastTransactions = transactions;
@@ -71,6 +85,7 @@ class Blocks extends _DataCollector.DataCollector {
7185
this.events.emit('newBlocks', this.formatData({ blocks, transactions }));
7286
}
7387
}
88+
7489
async getAddress(address) {
7590
return this.Address.run('getAddress', { address });
7691
}

dist/api/HttpServer.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports.HttpServer = undefined;var _http = require('http');var _http2 = _interopRequireDefault(_http);
2+
var _express = require('express');var _express2 = _interopRequireDefault(_express);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
3+
4+
const HttpServer = exports.HttpServer = ({ blocks, status }) => {
5+
const app = (0, _express2.default)();
6+
const httpServer = _http2.default.Server(app);
7+
app.set('etag', false);
8+
app.set('x-powered-by', false);
9+
10+
app.use('/status', (req, res) => {
11+
const data = status.getState().data;
12+
res.send(data);
13+
});
14+
15+
app.use('/circulating', (req, res) => {
16+
const data = blocks.getCirculatingSupply().data;
17+
res.send(data);
18+
});
19+
20+
// 404
21+
app.use((req, res, next) => res.status(404).send());
22+
return httpServer;
23+
};exports.default =
24+
25+
HttpServer;

dist/api/TokenAccount.js

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,21 +41,35 @@ class TokenAccount extends _DataCollector.DataCollectorItem {
4141
},
4242

4343
getTokenBalance: async params => {
44-
const { contract } = params;
44+
const { contract, addresses } = params;
45+
if (!contract) return;
46+
47+
let query = {};
48+
49+
if (addresses) query = this.fieldFilterParse('address', addresses);
50+
4551
let contractData = await this.parent.getAddress(contract);
52+
4653
contractData = contractData.data;
4754
if (!contractData) return;
48-
let { totalSupply } = contractData;
55+
56+
let { totalSupply, decimals } = contractData;
4957
if (!totalSupply) return;
50-
let accounts = await this.find({ contract });
58+
59+
query.contract = contract;
60+
let accounts = await this.find(query, null, null, { _id: 0, address: 1, balance: 1 });
5161
if (accounts) accounts = accounts.data;
5262
if (!accounts) return;
5363

5464
let accountsBalance = (0, _utils.bigNumberSum)(accounts.map(account => account.balance));
5565
totalSupply = new _bignumber.BigNumber(totalSupply);
5666
let balance = accountsBalance ? totalSupply.minus(accountsBalance) : totalSupply;
67+
let data = { balance, accountsBalance, totalSupply, decimals
68+
69+
// send accounts
70+
};if (addresses) data.accounts = accounts;
5771

58-
const data = this.serialize({ balance, accountsBalance, totalSupply });
72+
data = this.serialize(data);
5973
return { data };
6074
} };
6175

dist/api/UserEventsApi.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ var _config = require('../lib/config');var _config2 = _interopRequireDefault(_co
44
var _apiLib = require('./apiLib');function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
55

66
function UserEventsSocket() {
7-
return (0, _child_process.fork)(_path2.default.resolve(__dirname, '../services/userEvents.js'));
7+
return (0, _child_process.fork)(_path2.default.resolve(__dirname, '../services/userEvents/userEventsService.js'));
88
}
99

1010
const UserEventsApi = exports.UserEventsApi = (io, Blocks, log) => {

dist/api/getCirculatingSupply.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _config = require('../lib/config');var _config2 = _interopRequireDefault(_config);
2+
var _types = require('../lib/types');
3+
var _utils = require('../lib/utils');function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
4+
const { bridgeAddress } = _config2.default;exports.default =
5+
6+
async function (collection) {
7+
try {
8+
let { balance, decimals } = await collection.findOne({ address: bridgeAddress });
9+
decimals = decimals || 18;
10+
const bridgeBalance = (0, _utils.applyDecimals)(balance, decimals).toString(10);
11+
let circulatingSupply = (0, _utils.bigNumberDifference)(_types.TOTAL_SUPPLY, bridgeBalance).toString(10);
12+
return { circulatingSupply, totalSupply: _types.TOTAL_SUPPLY, bridgeBalance };
13+
} catch (err) {
14+
return Promise.reject(err);
15+
}
16+
};

dist/api/index.js

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ var _Blocks = require('./Blocks');var _Blocks2 = _interopRequireDefault(_Blocks)
44
var _Status = require('./Status');var _Status2 = _interopRequireDefault(_Status);
55
var _TxPool = require('./TxPool');var _TxPool2 = _interopRequireDefault(_TxPool);
66
var _Logger = require('../lib/Logger');var _Logger2 = _interopRequireDefault(_Logger);
7-
var _http = require('http');var _http2 = _interopRequireDefault(_http);
87
var _UserEventsApi = require('./UserEventsApi');var _UserEventsApi2 = _interopRequireDefault(_UserEventsApi);
98
var _config = require('../lib/config');var _config2 = _interopRequireDefault(_config);
9+
var _HttpServer = require('./HttpServer');
10+
1011
var _apiLib = require('./apiLib');function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
1112

1213

@@ -32,16 +33,8 @@ _dataSource2.default.then(db => {
3233
status.start();
3334
txPool.start();
3435

35-
const httpServer = _http2.default.createServer((req, res) => {
36-
const url = req.url || null;
37-
if (url && url === '/status') {
38-
res.writeHead(200, { 'Content-type': 'application/json' });
39-
res.write(JSON.stringify(status.state));
40-
} else {
41-
res.writeHead(404, 'Not Found');
42-
}
43-
res.end();
44-
});
36+
// http server
37+
const httpServer = (0, _HttpServer.HttpServer)({ blocks, status });
4538
httpServer.listen(port, address);
4639
const io = new _socket2.default(httpServer);
4740

dist/lib/DataCollector/DataCollectorItem.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,8 @@ filterSort = filterSort;exports.
156156

157157
fieldFilterParse = fieldFilterParse;var _mongodb = require('mongodb');var _pagination = require('./pagination');var _types = require('../../lib/types');class DataCollectorItem {constructor(collection, key, parent, { cursorField = '_id', sortDir = -1, sortable = { _id: -1 } } = {}) {if (!(collection instanceof _mongodb.Collection)) {throw new Error('Collection is not mongodb Collection');}this.db = collection;this.key = key;this.parent = parent;this.fieldsTypes = null;this.cursorField = cursorField;this.cursorData = null;this.sortDir = sortDir;sortable[cursorField] = sortDir;this.sortableFields = sortable;this.sort = { [cursorField]: sortDir };this.publicActions = {};this.fields = {};}getDefaultsFields() {return Object.assign({}, this.fields);}async run(action, params) {try {const f = this.publicActions[action];if (f && typeof f === 'function') return f(params);else throw new Error(`Unknown action: ${action}`);} catch (err) {return Promise.reject(err);}}async find(query, sort, limit, project) {let collection = this.db;project = project || this.getDefaultsFields();let data = await (0, _pagination.find)(collection, query, sort, limit, project);return { data };}async getOne(query, project) {project = project || this.getDefaultsFields();let data = await this.db.findOne(query, { project });return { data };}async setFieldsTypes() {let types = await getFieldsTypes(this.db);this.fieldsTypes = types;return types;}async getFieldsTypes() {let types = this.fieldsTypes;return types || this.setFieldsTypes();}responseParams(params) {let sort = params.sort || this.sort || {};let sortable = this.sortableFields;let defaultSort = this.sort;let sortDir = this.sortDir;let { limit, next, prev, fields, count, countOnly, page, getPages } = params;if (!fields) fields = this.getDefaultsFields();sort = filterSort(sort, sortable, defaultSort);return { sort, sortable, defaultSort, sortDir, limit, next, prev, fields, count, countOnly, page, getPages };}async getCursorData() {let data = this.cursorData;if (!data) data = await this.setCursorData();return data;}async setCursorData() {const cursorField = this.cursorField;const types = await this.getFieldsTypes();const cursorType = types[cursorField];this.cursorData = { cursorField, cursorType, fields: types };return this.cursorData;}getPageData(query, params) {return this.getPages({ query, params });}getAggPageData(aggregate, params) {return this.getPages({ aggregate, params });}async getPrevNext(query, project, data) {try {let { cursorField } = this;project = project || this.getDefaultsFields();if (!data) data = await this.getOne(query);if (data) data = data.data;if (!data) return;let value = query[cursorField] || data[cursorField];if (undefined === value) throw new Error(`Missing ${cursorField} value`);let prev = (await (0, _pagination.find)(this.db, { [cursorField]: { $lt: value } }, { [cursorField]: -1 }, 1, project))[0];let next = (await (0, _pagination.find)(this.db, { [cursorField]: { $gt: value } }, { [cursorField]: 1 }, 1, project))[0];return { prev, data, next };} catch (err) {return Promise.reject(err);}}async getPages({ aggregate, query, params }) {try {let pages = this.responseParams(params);let cursorData = await this.getCursorData();query = aggregate || query;let args = [this.db, cursorData, query, pages];let result = aggregate ? await (0, _pagination.aggregatePages)(...args) : await (0, _pagination.findPages)(...args);return formatResponse(result, pages);} catch (err) {return Promise.reject(err);}}fieldFilterParse(field, value, query) {return fieldFilterParse(field, value, query);}}exports.DataCollectorItem = DataCollectorItem;function formatResponse(result, pages) {if (!result) return;let { data, pagination } = result;pages = Object.assign(pages, pagination);return { pages, data };}async function getFieldsTypes(collection) {let doc = await collection.findOne();let fields = {};for (let p in doc) {let value = doc[p];let type = typeof value;type = value instanceof _mongodb.ObjectID ? _types.OBJECT_ID : type;fields[p] = type;}return fields;}function filterSort(sort, sortable, defaultSort) {let filteredSort = {}; // allow only one field to user sort
158158
if (Object.keys(sort).length > 1) return defaultSort;for (let field in sort) {if (undefined !== sortable[field]) filteredSort[field] = sort[field];}return Object.keys(filteredSort).length > 0 ? filteredSort : defaultSort;} // value: string| array of searched values | Object: 'value':true|false
159-
function fieldFilterParse(field, value, query) {query = query || {};let fieldQuery;
159+
function fieldFilterParse(field, value, query) {query = query || {};if (!field || !value || typeof field !== 'string') return query;
160+
let fieldQuery;
160161
let inArr = [];
161162
let ninArr = [];
162163
if (typeof value === 'string') {

dist/lib/collections.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,14 @@
107107
key: { blockNumber: 1 },
108108
name: 'eventBlockNumberIndex' },
109109

110+
{
111+
key: { txHash: 1 },
112+
name: 'eventTxHashIndex' },
113+
114+
{
115+
key: { blockHash: 1 },
116+
name: 'eventBlockHashIndex' },
117+
110118
{
111119
key: { args: 1 },
112120
name: 'eventsArgsIndex' },

dist/lib/types.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports.OBJECT_ID = exports.BIG_NUMBER = exports.REMASC_NAME = exports.BRIDGE_NAME = exports.modules = exports.actions = exports.events = exports.tokensInterfaces = exports.contractsInterfaces = exports.addrTypes = exports.errors = exports.txTypes = undefined;var _errors = require('../lib/errors');
1+
'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports.TOTAL_SUPPLY = exports.OBJECT_ID = exports.BIG_NUMBER = exports.REMASC_NAME = exports.BRIDGE_NAME = exports.modules = exports.actions = exports.events = exports.tokensInterfaces = exports.contractsInterfaces = exports.addrTypes = exports.errors = exports.txTypes = undefined;var _errors = require('../lib/errors');
22

33
const txTypes = exports.txTypes = {
44
default: 'normal',
@@ -68,6 +68,8 @@ const REMASC_NAME = exports.REMASC_NAME = 'remasc (native)';
6868

6969
const BIG_NUMBER = exports.BIG_NUMBER = 'BigNumber';
7070

71-
const OBJECT_ID = exports.OBJECT_ID = 'ObjectID';exports.default =
71+
const OBJECT_ID = exports.OBJECT_ID = 'ObjectID';
72+
73+
const TOTAL_SUPPLY = exports.TOTAL_SUPPLY = 21 * 10 ** 6;exports.default =
7274

7375
{ txTypes, errors, addrTypes, contractsInterfaces };

0 commit comments

Comments
 (0)