前言
NeoRay是NEL社区推出的一个方便NEO开发者开发合约的工具。自这个工具推出以来,受到很多开发者的好评,极大的便捷了广大的NEO合约开发者。我也一直使用这个工具进行NEO合约的开发和调试。
最近NEL推出了新版的NeoRay,增加了python语言的合约开发,人性化了一些操作流程。作为一名NEO合约开发爱好者,迫不及待的尝了个鲜。体验下来还是不错的,页面看起来更加简单明了,合约调用部分也更加人性化。
由于新版较旧版来说,改动还是很大的,页面和流程都大不相同。作为一个尝鲜者还是很有必要记录一下尝鲜过程和心得的,方便后来者体验。
正文
0x01 登录
NeoRay2.0不再直接使用私钥或者nep6钱包登录来进行合约的部署与调用,改而使用了NEL社区之前推出的产品TEEMO插件钱包。在使用NeoRay2.0之前需要安装好插件钱包。不然会出现以下提示:
这里附上Teemo插件钱包的介绍:传送门
0x02 页面功能介绍
新版的NeoRay的整体页面如下,左边有五个功能按键:文件浏览、合约部署、合约调用、合约调试、支持。同时提供了切回旧版NeoRay的功能。
0x03 编写或载入合约文件
在文件浏览功能模块内,一共有三种方式导入一个合约文件。第一种是添加本地文件,第二种是创建新的文件直接在线编写,剩下的一种是通过合约hash载入别的开发者部署的合约。可以根据自己的需要合理选择。这里我们就使用第一种方式来做演示。如下图我导入了一个本地的test合约:
0x04 部署合约
当合约编写或导入完成之后呢,我们就需要编译发布合约。点击左侧合约部署按钮进入到部署页面,首先点击编译按钮,如果合约书写正确下方的输出框就会显示合约的hash。如果合约有错误,就会提示编译失败。目前对于失败的原因提示的不够详细,希望后续的更新中能完善失败原因。
设置部署合约时的一些参数。“动态调用”是指该合约中是否存在调用可变合约的情况,例如调用B合约但是B合约在合约发布时不能够明确其hash值,那么就需要动态调用的功能。“创建存储区”是指合约使用了存储功能。“可接受付款”是指合约是否可以接受别的地址给其转资产。
需要注意的是不同的参数选择会带来不同的收费,目前来讲“动态调用”会增加500gas的费用,“创建存储区”会增加400gas的费用。
点击部署合约按键后Teemo钱包会弹出弹窗要求签名,点击同意即可。
0x05 合约调用
通过Teemo钱包等待部署合约的交易被确认
交易被确认后,点击NeoRay2.0左侧的合约调用按钮,来到合约调试模块。接下来我就介绍一下这个模块下一些参数的意义和使用方法。
系统费:neo公链上调用合约是根据调用的指令收费的,虽然有10gas的免费额度,但是一些复杂操作还是可能会超出10gas的额度的。所以如果你调用的合约过于复杂导致费用超过了10gas,这里就需要填写你超出的数额。手续费价目表
网络费:最新的收费规则要求超出1024字节的交易要额外手续一定的手续费。Teemo会自动帮加上网络费。所以这个地方直接默认0就可以了。
交易附带Gas:如果你需要向调用的合约转账一笔gas,那么就在这个地方填入具体的数额。
增加参数:一般合约的参数都是(string,object[])这样的类型。所以第一个增加的参数选择string类型,第二个选择数组类型。如果你的合约与众不同,那就对应你合约的参数类型选择合适的类型。
举几个简单的例子
1. 如果你的合约是 Main(int a) ,那么参数一就是 Integer ,不需要参数二。
2. 如果你的合约是 Main(int a , int b) ,那么参数一就是 Integer ,参数二也是Integer。
ps : Address 类型填写的就是“AWKqEmC1HsC4uBDvaoh5JLtQ2rigMdRSwX “,NeoRay会内部转成byte[]。如果对应参数的选择还有不理解的可以看一下论坛中对应的帖子。传送门
调用合约与试运行:调用合约意味着发送交易上链,会改变链上的数据。试运行意味着模拟执行合约,并不会造成链上数据的更改。
接下来根据我们之前部署的合约,试运行三个例子演示一下:
第一个例子如下,operation选择传入“Hello”,得到的返回是“ByteArray”类型,转换之后就是“World”。常用转换工具:传送门
第二个例子如下,调用operation选择传入“return”,希望得到传入的object[]中的第一个值:
第三个例子如下,调用operation选择传入“add”:
接下来我们使用第三个例子的参数进行调用交易的发送,Teemo钱包会弹出弹框要求签名,交易发出后等待一会等交易被确认。
0x06 合约调试
一个调用合约的交易被确认后,可以点击合约调试按钮进行合约的调试。这个功能主要是当合约的执行结果与预期不符时,观察合约的执行流程来寻找合约的问题。
需要注意的是,一定要选择正确你要调试的合约。因为交易列表里只会显示当前钱包地址调用此合约的交易。
如果一个交易被链上确认了但是在这个页面还没有显示对应的交易,请耐心等待几秒或者切换一下功能模块,尽量不要刷新页面。
选择一个交易之后便可以调试,下图是这个调用所执行的指令过程,通过键盘的上下按钮可以观察合约的执行过程。通过notify可以得到这个交易的返回值,以及合约抛出的通知。必要的时候可以通过抛出通知的方式来调试合约,类似调试时打log的方法。右下角的CalcStack&AltStack中可以观察计算栈和临时栈中保存的数据。
通过左边执行的指令以及右边的合约代码,可以观测合约执行到了哪一行代码报错。或者执行错了哪一些流程。方便开发者调试。
0x07 支持
支持功能模块中有一些NEL社区的导航,以及索取gas的功能。
后言
NeoRay新版带来的惊喜还是很大的。由于我不会py,所以也没有体验py的流程。但就C#编写的合约进行的流程来讲,还是非常完美的。调试调用都非常的便捷。同时给我带来惊喜的还有插件钱包Teemo,有点MetaMask的感觉。有能力成为NEO上广泛使用的插件钱包。
最后希望NEL社区越做越好,推出更多方便我们开发者的工具。