附录C 平台错误码和对应原因

code含义
0请求成功
-32700服务端接收到无效的json。该错误发送于服务器尝试解析json文本
-32600无效的请求(比如非法的JSON格式)
-32601方法不存在或者无效
-32602无效的方法参数
-32000Hyperchain内部错误或者空指针或者节点未安装solidity环境
-32001查询的数据不存在
-32002余额不足
-32003签名非法
-32004合约部署出错
-32005合约调用出错
-32006系统繁忙(平台需要处理交易量达到限制)
-32007交易重复
-32008合约操作权限不够
-32009账户不存在
-32010namespace不存在
-32011账本上无区块产生,查询最新区块的时候可能抛出该错误
-32012订阅不存在
-32013数据归档、快照相关错误
-32021过时接口
-32097Hypercli用户令牌无效
-32098请求未带cert或者错误cert导致认证失败
-32099请求tcert失败
参数错误(指定节点发送时,指定index错误)
-9995请求失败(通常是请求体过长)
-9996请求失败(通常是请求消息错误)
-9997异步请求失败
-9998请求超时(轮询结束未获得回执)
-9999获取平台响应失败

上述为平台api和sdk接口可能返回的状态码的说明,其中-999x的状态码为sdk对平台返回状态码或网络请求结果的封装,简化上层处理逻辑;其余状态码为平台api接口的原生返回结果。

在通过LiteSDK调用查询接口时,例如查询交易Hash对应的交易回执或者通过区块号查询区块内容时,LiteSDK将不会对查询接口进行交易状态码的封装,返回原生状态码,查询结果即为平台返回结果;当发生网络断连问题导致查询接口无法获得Response时,将返回-999x状态码。

当通过LiteSDK发送交易时,由于平台执行交易为异步执行,通过先返回交易Hash,在通过交易Hash查询回执的方式,所以LiteSDK将发送交易和查询交易回执进行了拆分,一个完整的发送交易并获得回执过程如下:

  1. Request<TxHashResponse> request = sendTxService.sendTx(transaction);
  2. TxHashResponse txHashResponse = request.send();
  3. ReceiptResponse response = txHashResponse.polling();
  1. 通过调用request.send()将交易发送到链上,

    1. 返回状态码为0并获取交易Hash表示交易已成功上链
    2. 当出现-9995或者-9996时表示请求返送失败,交易未上链
    3. 当出现-9999时表示网络出现断连,此时无法确定是交易还未发送成功还是获取Response时出现错误,不明确错误原因
    4. 其余情况均为平台返回交易上链失败错误,交易未上链
  2. 通过调用txHashResponse.polling()可以 通过交易Hash获取交易回执:

    1. 返回状态码为0时表示查找回执成功,交易执行成功
    2. 由于轮询查找回执时可能平台尚未完成交易执行(-32001)、平台达到流量限制(-32006)或网络抖动(-9996,-9999)等原因,轮询过程将持续到轮询次数结束,此时若任未获取到回执,将抛出-9998的错误,此时表示轮询查询回执不成功,可能平台尚未执行完该笔交易,不明确错误原因
    3. 其余情况下轮询获取到回执均表示查找回执成功,但交易执行失败,成为非法交易