合约与应用的桥梁——通用合约通知入库分析器

naoye 10月前 380

NEO最大特色就是支持智能合约,你可以用各种通用高级语言进行逻辑编程,实现千变万化的无限可能。

但是智能合约到底是有别于普通程序,对于初学者最困惑的是,怎么知道合约执行的过程、结果,它不像普通高级语言那么易于调试(尤其涉及私有化存储区等链上元素时),目前它也不会再执行完后直接返回结果(即使你写了return)。



NEO智能合约与外界的交互机制目前是两种,log和notify,即日志和通知。

设计上来说,log是调试用,notify是事件驱动的通知。不过,目前官方只实现了对notify的捕获(dotnet neo-cli.dll --log –rpc启动cli),所以一般log用的不多(需要自己修改cli捕获log)。


举个例子


我们的NNS通用解析器就使用了notify通知外部某个NNS的解析情况。

通过cli rpc getapplicationlog 方法即可获取类似以上数据,当然你可定要说看不懂。应为所有数据都是被NEOVM二进制转义后输出的。

这个时候你就需要用到我们的contractNotifyExtractor(通用合约通知入库分析器)了。Github地址:

https://github.com/NewEconoLab/contractNotifyExtractor

使用contractNotifyExtractor后,就会自动处理成以下形式。

一看就懂,某个NNS(namehash)被设定解析为AHDV7M54NHukq8f76QQtBTbrCqKJrBH9UF地址。

contractNotifyExtractor的设计目标是:

不修改任何代码,即可通过配置extractTaskList.json实现对任意结构notify的自动入库与分析

具有独立的从cli rpc入库notify的能力

支持StringAddressBigInteger、HexString等常用数据表现形式的自动化转义



contractNotifyExtractor的目标使用人群是广大NEO DAPP的开发者。contractNotifyExtractor的使用可以使得DAPP开发者从获取和解析通知(尤其是每次变动合约代码,解析通知代码都要跟着变动)的繁琐中解脱出来,专注于合约逻辑开发。



更多详情,请参阅Github源码。extractTaskList.json已有大量通知设定示例,参考修改即可快速使用。

作者:NEL核心开发者——青冥子

最新回复 (0)
全部楼主
返回