simonflex-framework
Version:
A library implements Meter Flex interface
169 lines • 14.1 kB
JavaScript
"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("@meterio/devkit/dist/cry/blake2b");
const common_1 = require("./common");
const options_1 = require("./options");
/** class implements Flex.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,
};
}
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 }));
}
getCandidates() {
return this.cache.getCandidates(() => this.httpGet(`staking/candidates`));
}
getBuckets() {
return this.cache.getBuckets(() => this.httpGet(`staking/buckets`));
}
getStakeholders() {
return this.cache.getStakeholders(() => this.httpGet(`staking/stakeholders`));
}
getAuction() {
return this.cache.getAuction(() => this.httpGet(`auction/present`));
}
getAuctionSummaries() {
return this.cache.getAuctionSummaries(() => this.httpGet(`auction/summaries`));
}
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* () {
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,
};
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpdmVyLW5vLXZlbmRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kcml2ZXIvZHJpdmVyLW5vLXZlbmRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQ0EsdUNBQXNEO0FBQ3RELG1DQUFnQztBQUNoQyw4REFBOEQ7QUFDOUQscUNBQWlDO0FBQ2pDLHVDQUFvQztBQUVwQyxxRUFBcUU7QUFDckUsTUFBYSxjQUFjO0lBT3pCLFlBQ21CLEdBQVEsRUFDaEIsT0FBeUIsRUFDbEMsV0FBdUM7UUFGdEIsUUFBRyxHQUFILEdBQUcsQ0FBSztRQUNoQixZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQU41QixrQkFBYSxHQUFHLEVBQXVCLENBQUM7UUFDL0IsUUFBRyxHQUFHLElBQUksaUJBQU8sRUFBRSxDQUFDO1FBQ3BCLFVBQUssR0FBRyxJQUFJLGFBQUssRUFBRSxDQUFDO1FBT25DLElBQUksV0FBVyxFQUFFO1lBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUM7U0FDekI7YUFBTTtZQUNMLElBQUksQ0FBQyxJQUFJLEdBQUc7Z0JBQ1YsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUNkLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtnQkFDdEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO2dCQUM1QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7YUFDM0IsQ0FBQztTQUNIO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCx1Q0FBdUM7SUFDaEMsS0FBSztRQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELGtCQUFrQjtJQUNYLFFBQVE7UUFDYixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNsQixJQUFJLE9BQU8sQ0FBNEIsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNqRCxJQUFJLENBQUMsYUFBYSxD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