UNPKG

simonzgconnexframework

Version:

A library implements VeChain Connex interface

217 lines 16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const V = require("validator-ts"); const R = require("./rules"); function newDriverGuard(driver, errHandler) { const test = (obj, scheme, path) => { try { V.validate(obj, scheme, path); } catch (err) { if (errHandler) { errHandler(err); } else { // tslint:disable-next-line:no-console console.warn(`Connex-Driver[MALFORMED RESPONSE]: ${err.message}`); } } return obj; }; const genesis = test(driver.genesis, blockScheme, 'genesis'); return { genesis, get head() { return test(driver.head, headScheme, 'head'); }, pollHead() { return driver.pollHead() .then(h => test(h, headScheme, 'getHead()')); }, getBlock(revision) { return driver.getBlock(revision) .then(b => b ? test(b, blockScheme, 'getBlock()') : b); }, getTransaction(id) { return driver.getTransaction(id) .then(tx => tx ? test(tx, txScheme, 'getTransaction()') : tx); }, getReceipt(id) { return driver.getReceipt(id) .then(r => r ? test(r, receiptScheme, 'getReceipt()') : r); }, getAccount(addr, revision) { return driver.getAccount(addr, revision) .then(a => test(a, { balance: R.hexString, energy: R.hexString, hasCode: R.bool }, 'getAccount()')); }, getCode(addr, revision) { return driver.getCode(addr, revision) .then(c => test(c, { code: R.bytes }, 'getCode()')); }, getStorage(addr, key, revision) { return driver.getStorage(addr, key, revision) .then(s => test(s, { value: R.bytes32 }, 'getStorage()')); }, explain(arg, revision) { return driver.explain(arg, revision) .then(r => test(r, [vmOutputScheme], 'explain()')); }, filterEventLogs(arg) { return driver.filterEventLogs(arg) .then(r => test(r, [eventWithMetaScheme], 'filterEventLogs()')); }, filterTransferLogs(arg) { return driver.filterTransferLogs(arg) .then(r => test(r, [transferWithMetaScheme], 'filterTransferLogs()')); }, signTx(msg, option) { return driver.signTx(msg, Object.assign({}, option, { delegationHandler: option.delegationHandler ? unsigned => { test(unsigned, { raw: R.bytes, origin: R.address }, 'delegationHandler.arg'); return option.delegationHandler(unsigned); } : undefined })) .then(r => test(r, { txid: R.bytes32, signer: R.address }, 'signTx()')); }, signCert(msg, option) { return driver.signCert(msg, option) .then(r => test(r, { annex: { domain: R.string, timestamp: R.uint64, signer: R.address }, signature: v => R.isHexBytes(v, 65) ? '' : 'expected 65 bytes' }, 'signCert()')); }, isAddressOwned(addr) { return driver.isAddressOwned(addr) .then(r => test(r, R.bool, 'isAddressOwned()')); } }; } exports.newDriverGuard = newDriverGuard; const headScheme = { id: R.bytes32, number: R.uint32, timestamp: R.uint64, parentID: R.bytes32, txsFeatures: V.optional(R.uint32) }; const blockScheme = { id: R.bytes32, number: R.uint32, size: R.uint32, parentID: R.bytes32, timestamp: R.uint64, gasLimit: R.uint64, beneficiary: R.address, gasUsed: R.uint64, totalScore: R.uint64, txsRoot: R.bytes32, txsFeatures: V.optional(R.uint32), stateRoot: R.bytes32, receiptsRoot: R.bytes32, signer: R.address, isTrunk: R.bool, transactions: [R.bytes32] }; const txScheme = { id: R.bytes32, chainTag: R.uint8, blockRef: R.bytes8, expiration: R.uint32, gasPriceCoef: R.uint8, gas: R.uint64, origin: R.address, delegator: V.nullable(V.optional(R.address)), nonce: R.hexString, dependsOn: V.nullable(R.bytes32), size: R.uint32, clauses: [{ to: V.nullable(R.address), value: R.hexString, data: R.bytes }], meta: { blockID: R.bytes32, blockNumber: R.uint32, blockTimestamp: R.uint64 } }; const logMetaScheme = { blockID: R.bytes32, blockNumber: R.uint32, blockTimestamp: R.uint64, txID: R.bytes32, txOrigin: R.address, clauseIndex: R.uint32 }; const eventScheme = { address: R.address, topics: [R.bytes32], data: R.bytes, meta: () => '', decoded: () => '' }; const eventWithMetaScheme = Object.assign({}, eventScheme, { meta: logMetaScheme }); const transferScheme = { sender: R.address, recipient: R.address, amount: R.hexString, meta: () => '', }; const transferWithMetaScheme = Object.assign({}, transferScheme, { meta: logMetaScheme }); const receiptScheme = { gasUsed: R.uint64, gasPayer: R.address, paid: R.hexString, reward: R.hexString, reverted: R.bool, outputs: [{ contractAddress: V.nullable(R.address), events: [eventScheme], transfers: [transferScheme] }], meta: { blockID: R.bytes32, blockNumber: R.uint32, blockTimestamp: R.uint64, txID: R.bytes32, txOrigin: R.address } }; const vmOutputScheme = { data: R.bytes, vmError: R.string, gasUsed: R.uint64, reverted: R.bool, events: [{ address: R.address, topics: [R.bytes32], data: R.bytes, meta: () => '', decoded: () => '' }], transfers: [{ sender: R.address, recipient: R.address, amount: R.hexString, meta: () => '', }], decoded: () => '' }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpdmVyLWd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZyYW1ld29yay9kcml2ZXItZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBaUM7QUFDakMsNkJBQTRCO0FBRTVCLFNBQWdCLGNBQWMsQ0FDMUIsTUFBcUIsRUFDckIsVUFBaUM7SUFHakMsTUFBTSxJQUFJLEdBQUcsQ0FBSSxHQUFNLEVBQUUsTUFBbUIsRUFBRSxJQUFZLEVBQUUsRUFBRTtRQUMxRCxJQUFJO1lBQ0EsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFBO1NBQ2hDO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLFVBQVUsRUFBRTtnQkFDWixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7YUFDbEI7aUJBQU07Z0JBQ0gsc0NBQXNDO2dCQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTthQUNwRTtTQUNKO1FBQ0QsT0FBTyxHQUFHLENBQUE7SUFDZCxDQUFDLENBQUE7SUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDNUQsT0FBTztRQUNILE9BQU87UUFDUCxJQUFJLElBQUk7WUFDSixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUNoRCxDQUFDO1FBQ0QsUUFBUTtZQUNKLE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRTtpQkFDbkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQTtRQUNwRCxDQUFDO1FBQ0QsUUFBUSxDQUFDLFFBQVE7WUFDYixPQUFPLE1BQU0s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