返回介绍

4.4 处理程序

发布于 2023-05-20 17:17:05 字数 6036 浏览 0 评论 0 收藏 0

handler.js文件是自定义链行为的入口,一个链必须存在该文件,且该文件必须导出registerHandler函数,这个链才能正常初始化并运行

registerHandler函数原型:

function registerHandler(handler: ValueHandler)

开发者必须实现这个函数,使用ValueHandler上的方法注册tx和view的处理函数,定义这条链的业务行为

一个简单的例子

export function registerHandler(handler: ValueHandler) {
    handler.genesisListener = async (context: TransactionContext) => {
        // 填入初始化代码
    }

    handler.addTX('method1', async (context: TransactionContext, params: any): Promise<ErrorCode> => {
        // 填入method1的Tx执行代码
    }, (tx: Transaction) => {
        // 填入method1的Tx检查代码
    }

    handler.addViewMethod('view1', async (context: ViewContext, params: any): Promise<BigNumber> =>{
        // 填入view执行代码
    })
}

member genesisListener:

函数原型

(context: any) => Promise<ErrorCode>

该函数用于初始化链时设置自定义信息,在调用host的create命令时被调用,返回0表示成功初始化,返回非0值会让create操作失败

method addTX

addTX(name: string, listener: TxListener, checker?: TxPendingChecker)

注册transaction的响应函数,每个tx在上链之前都会调用对应name的listener处理函数,产生一个receipt

参数

method addViewMethod

addViewMethod(name: string, listener: ViewListener)

注册view的响应函数

参数

type TxListener = (context: any, params: any) => Promise<ErrorCode>;

参数

  • context 链的context对象
  • params transcation的input参数

返回值

返回0表示操作成功,返回其他值表示操作失败。无论返回任何值,该tx都会上链,返回值会记录在该tx对应的receipt中

type TxPendingChecker = (tx: Transaction) => ErrorCode;

用于判定一个transcation是否应该上链,开发者可以在这个函数中做一些上下文无关的检查,比如检查Transcation的input合法性,value和fee是否符合一些业务标准等。判定为不符合的tx可以在函数中返回非0值,该tx即会被miner抛弃,不会上链

参数

返回值

返回0表示该transcation可以上链,返回非0值表示该tx不应该上链,会被直接抛弃

type ViewListener = (context: any, params: any) => Promise<any>;

view method的响应函数,client的view调用和chain的view调用会触发对应method的ViewListener

参数

返回值

允许返回任意能序列化的对象

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文