UNPKG

int-cli

Version:

INT is the new generation of bottom-up created system of IoT and blockchain

69 lines (68 loc) 2.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const error_code_1 = require("../error_code"); const chain_1 = require("../chain"); class ViewExecutor { constructor(options) { this.m_handler = options.handler; this.m_method = options.method; this.m_param = options.param; this.m_externContext = options.externContext; this.m_header = options.header; this.m_storage = options.storage; this.m_logger = options.logger; } get externContext() { return this.m_externContext; } async prepareContext(blockHeader, storage, externContext) { let database = (await storage.getReadableDataBase(chain_1.Chain.dbUser)).value; let context = Object.create(externContext); // context.getNow = (): number => { // return blockHeader.timestamp; // }; Object.defineProperty(context, 'now', { writable: false, value: blockHeader.timestamp }); // context.getHeight = (): number => { // return blockHeader.number; // }; Object.defineProperty(context, 'height', { writable: false, value: blockHeader.number }); // context.getStorage = (): IReadWritableKeyValue => { // return kv; // } Object.defineProperty(context, 'storage', { writable: false, value: database }); Object.defineProperty(context, 'logger', { writable: false, value: this.m_logger }); return context; } async execute() { let fcall = this.m_handler.getViewMethod(this.m_method); if (!fcall) { // 找不到view method时, 错误日志里列出全部可选的method let methods = this.m_handler.getViewMethodNames(); this.m_logger.error(`view execute getViewMethod fail, method=${this.m_method}; suport methods [${methods.join(',')} ]`); return { err: error_code_1.ErrorCode.RESULT_NOT_SUPPORT, methods }; } let context = await this.prepareContext(this.m_header, this.m_storage, this.m_externContext); try { this.m_logger.info(`will execute view method ${this.m_method}, params ${JSON.stringify(this.m_param)}`); let v = await fcall(context, this.m_param); return { err: error_code_1.ErrorCode.RESULT_OK, value: v }; } catch (error) { this.m_logger.error(`view execute error ${error}`); return { err: error_code_1.ErrorCode.RESULT_EXCEPTION }; } } } exports.ViewExecutor = ViewExecutor;