最近在做NNS合约测试工具,目标是简单好用,适用非技术人员测试,同时开发快捷,实现快速。再写完后,发现这不就是一个NEO智能合约黑盒测试框架吗嘛,所以写个文章分享给大家。
选择的代码平台是C#,显示和逻辑处理分开两部分,逻辑部分用netstandard2.0(同时支持.net framework4.6.1以上和.net core 2.0以上)写,UI先用.net framework桌面程序做,后面有时间用.net core 2.1也做几个简单的示例。
要测试智能合约,最大的难点是构造合约调用交易,这个工作别说非技术人员,就算非智能合约的开发人员也是一头雾水的。
但是,随着NEO智能合约的复杂度(例如NNS的竞拍注册器合约)、合约内管理资产量的提升,外加开发人员自身思维死角。合约的非技术人员规模黑盒测试快速实现工具是不可或缺的。这对矛盾,亟待解决。
过去,如果初入NEO的开发人员要测试合约,只能用NEO 的GUI调试合约功能或者构造RPC调用CLI,但是使用非常不便,尤其当合约方法有数个且互相关联的时候。
好在,最近NEL发布了Neo_SDK_Thin
(https://www.nuget.org/package...),
将NEO种公私钥计算、各种格式转换、脚本构造、交易构造等核心方法单独实现了出来,不依赖区块同步。这是一个非常有用的工具,本文所说的项目也依赖它。但是这距离快速开始调试合约还是很远。构造交易必不可少的UTXO信息还是缺少,如何使用Neo_SDK_Thin的交易类构造交易对于初学者还是困难,发布交易后的结果查看仍然不太方便。
所以,这里向大家推荐,这个测试框架,希望能够帮助大家更加快速、舒适的开始智能合约调试。
框架要点
构造nelApiHelper类,方便使用NEL系列实用API(仅合约调用相关部分)
构造neoHelper类,在Neo_SDK_Thin基础上扩展了一些功能
- HexStr转Str、HexStr翻转、HexStr转数值、大整数精度调整等方法
- Jarray2script方法,构造Jarray形式的合约入参,一键输出合约调用脚本
- neoAddress类,输入WIF,就能自动构造出地址、公钥、私钥
- neoTranstion类,目前实现了普通转账交易和合约调用交易,一键构造、签名、发送
构造contractOperate类,为快速合约调用的基础类
一个简单方便的集成黑盒合约测试界面框架(可能比较丑)
其实可以看出,只要替换合约功能区,就可以快速为任何合约提供黑盒测试工具。查看项目代码可以看出,其实合约功能区的代码非常少。
获取合约信息类方法,如NEP5 balanceOf(只需invokeScript不需要发送交易)
执行合约功能类方法,如NEP5 transfer(需要发送到链上)
这些方法,自己写的部分都只需2-3行代码即可完成,而构造一个合约入参也就是一个编辑json的过程而已。
同时,交易发送后只要将txid丢到txid暂存区,出新快后会自动加载该交易相关的ApplicationLog,可以一站式查看合约方法结果、消耗gas、抛出的通知等重要信息。
当然这个还不是最终版,后期还会增加:
交易构造增加网络手续费功能
实现CGAS这类设计UTXO出入合约的复杂调用交易
将框架的通用类单独发布nuget,使用更加方便
xx等
最后送上代码地址(一开始是为NNS测试开发的,不要在意名字):https://github.com/NewEconoLa...
PS:如果你只是想要在项目中使用NNS相关合约方法,可以直接用nuget https://www.nuget.org/package...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。