文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
4.4 处理程序
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的响应函数
参数
- name 名称
- listener 处理函数
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抛弃,不会上链
参数
- tx transcation实例
返回值
返回0表示该transcation可以上链,返回非0值表示该tx不应该上链,会被直接抛弃
type ViewListener = (context: any, params: any) => Promise<any>;
view method的响应函数,client的view调用和chain的view调用会触发对应method的ViewListener
参数
- context viewcontext实例
- params view的params参数
返回值
允许返回任意能序列化的对象
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论