UNPKG

simonzgconnexframework

Version:

A library implements VeChain Connex interface

157 lines 13.1 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const promint_1 = require("./promint"); const cache_1 = require("./cache"); const blake2b_1 = require("thor-devkit/dist/cry/blake2b"); const common_1 = require("./common"); const options_1 = require("./options"); /** class implements Connex.Driver leaves out Vendor related methods */ class DriverNoVendor { constructor(net, genesis, initialHead) { this.net = net; this.genesis = genesis; this.headResolvers = []; this.int = new promint_1.PromInt(); this.cache = new cache_1.Cache(); if (initialHead) { this.head = initialHead; } else { this.head = { id: genesis.id, number: genesis.number, timestamp: genesis.timestamp, parentID: genesis.parentID, txsFeatures: genesis.txsFeatures }; } this.headTrackerLoop(); } // close the driver to prevent mem leak close() { this.int.interrupt(); } // implementations pollHead() { return this.int.wrap(new Promise(resolve => { this.headResolvers.push(() => resolve(this.head)); })); } getBlock(revision) { return this.cache.getBlock(revision, () => this.httpGet(`blocks/${revision}`)); } getTransaction(id) { return this.cache.getTx(id, () => this.httpGet(`transactions/${id}`, { head: this.head.id })); } getReceipt(id) { return this.cache.getReceipt(id, () => this.httpGet(`transactions/${id}/receipt`, { head: this.head.id })); } getAccount(addr, revision) { return this.cache.getAccount(addr, revision, () => this.httpGet(`accounts/${addr}`, { revision })); } getCode(addr, revision) { return this.cache.getTied(`code-${addr}`, revision, () => this.httpGet(`accounts/${addr}/code`, { revision })); } getStorage(addr, key, revision) { return this.cache.getTied(`storage-${addr}-${key}`, revision, () => this.httpGet(`accounts/${addr}/storage/${key}`, { revision })); } explain(arg, revision, cacheTies) { const cacheKey = `explain-${blake2b_1.blake2b256(JSON.stringify(arg)).toString('hex')}`; return this.cache.getTied(cacheKey, revision, () => this.httpPost('accounts/*', arg, { revision }), cacheTies); } filterEventLogs(arg) { const cacheKey = `event-${blake2b_1.blake2b256(JSON.stringify(arg)).toString('hex')}`; return this.cache.getTied(cacheKey, this.head.id, () => this.httpPost('logs/event', arg)); } filterTransferLogs(arg) { const cacheKey = `transfer-${blake2b_1.blake2b256(JSON.stringify(arg)).toString('hex')}`; return this.cache.getTied(cacheKey, this.head.id, () => this.httpPost('logs/transfer', arg)); } signTx(msg, option) { throw new Error('not implemented'); } signCert(msg, options) { throw new Error(' not implemented'); } isAddressOwned(addr) { return Promise.resolve(false); } ////// httpGet(path, query) { return this.net.http('GET', path, { query, validateResponseHeader: this.headerValidator }); } httpPost(path, body, query) { return this.net.http('POST', path, { query, body, validateResponseHeader: this.headerValidator }); } get headerValidator() { return (headers) => { const xgid = headers['x-genesis-id']; if (xgid && xgid !== this.genesis.id) { throw new Error(`responded 'x-genesis-id' not matched`); } }; } emitNewHead() { const resolvers = this.headResolvers; this.headResolvers = []; resolvers.forEach(r => r()); } headTrackerLoop() { return __awaiter(this, void 0, void 0, function* () { // let triggerWs = 0 for (;;) { try { const best = yield this.int.wrap(this.httpGet('blocks/best')); if (best.id !== this.head.id && best.number >= this.head.number) { this.head = { id: best.id, number: best.number, timestamp: best.timestamp, parentID: best.parentID, txsFeatures: best.txsFeatures }; this.cache.handleNewBlock(this.head, undefined, best); this.emitNewHead(); if (Date.now() - this.head.timestamp * 1000 < 60 * 1000) { // nearly synced // triggerWs++ } } } catch (err) { // triggerWs = 0 if (!options_1.options.disableErrorLog) { // tslint:disable-next-line: no-console console.warn('headTracker(http):', err); } if (err instanceof promint_1.InterruptedError) { break; } } try { yield this.int.wrap(common_1.sleep(8 * 1000)); } catch (_a) { break; } } }); } } exports.DriverNoVendor = DriverNoVendor; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpdmVyLW5vLXZlbmRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kcml2ZXIvZHJpdmVyLW5vLXZlbmRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQ0EsdUNBQXFEO0FBQ3JELG1DQUErQjtBQUMvQiwwREFBeUQ7QUFDekQscUNBQWdDO0FBQ2hDLHVDQUFtQztBQUVuQyx1RUFBdUU7QUFDdkUsTUFBYSxjQUFjO0lBT3ZCLFlBQ3FCLEdBQVEsRUFDaEIsT0FBMEIsRUFDbkMsV0FBd0M7UUFGdkIsUUFBRyxHQUFILEdBQUcsQ0FBSztRQUNoQixZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQU4vQixrQkFBYSxHQUFHLEVBQXVCLENBQUE7UUFDOUIsUUFBRyxHQUFHLElBQUksaUJBQU8sRUFBRSxDQUFBO1FBQ25CLFVBQUssR0FBRyxJQUFJLGFBQUssRUFBRSxDQUFBO1FBT2hDLElBQUksV0FBVyxFQUFFO1lBQ2IsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUE7U0FDMUI7YUFBTTtZQUNILElBQUksQ0FBQyxJQUFJLEdBQUc7Z0JBQ1IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUNkLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtnQkFDdEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO2dCQUM1QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7Z0JBQzFCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVzthQUNuQyxDQUFBO1NBQ0o7UUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7SUFDMUIsQ0FBQztJQUVELHVDQUF1QztJQUNoQyxLQUFLO1FBQ1IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUN4QixDQUFDO0lBRUQsa0JBQWtCO0lBQ1gsUUFBUTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQ2hCLElBQUksT0FBTyxDQUE2QixPQUFPLENBQUMs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