预编译合约错误码及应对措施¶
标签:预编译合约 预编译错误码 错误信息 RetCode
预编译合约主要有两种传递错误的方式,一种是在接口返回具体的数字值,错误时一般是小于0的负数;另外一种则是抛异常,在回执的状态码为15,这时用户可以主动解析回执中的message字段,做进一步的错误分析。
下表主要展示在接口会返回的错误码,以及遇到对应错误码时所需要做的措施。
| 错误码 | 错误信息 | 错误信息/应对措施 |
|---|---|---|
| 0 | Success | 成功 |
| -53006 | 错误的文件类型 | 在调用BFS touch接口时才会出现,使用了错误的文件类型 |
| -53005 | 错误的文件路径 | 在调用BFS接口传入绝对路径时会出现这样的错误,BFS的绝对路径总长度不能超过56,路径的总级数不能超过6级,且不能带有特殊字符 |
| -53003 | 创建文件夹失败 | 在调用BFS link接口时创建文件夹出现异常,比如合约名对应的父文件夹已经存在 |
| -51202 | 传入的版本号或者地址是错误的 | 在调用BFS link接口时会出现,版本号不能带有'/',合约地址也必须存在 |
| -53002 | 文件已经存在 | 在调用BFS 写接口时,创建的文件名已经存在 |
| -53001 | 文件不存在 | 在调用BFS读接口时,绝对路径对应的文件不存在 |
| -51800 | 环签名验证失败 | 在调用ring precompiled的验证接口失败时会出现,检查传入的参数是否正确 |
| -51700 | 群签名验证失败 | 在调用group precompiled的验证接口失败时会出现,检查传入的参数是否正确 |
| -51508 | Remove的key不存在 | 在调用Table预编译合约的remove接口时会出现,remove的key不存在 |
| -51507 | Update的key不存在 | 在调用Table预编译合约的update接口时会出现,update的key不存在 |
| -51506 | Insert的key已经存在 | 在调用Table预编译合约的insert接口时会出现,insert的key已经存在 |
| -51103 | 节点ID不存在 | 在调用Consensus预编译合约时会出现,传入的node id参数不存在 |
| -51102 | 错误的节点权重值 | 在调用Consensus预编译合约的setWeight和addSealer接口时会出现,设置的权重不能小等于0 |
| -51101 | 不能删除最后一个共识节点 | 在调用Consensus预编译合约的removeNode和addObserver接口时会出现,不能将链上最后一个共识节点删除 |
| -51100 | 错误的节点ID | 节点ID必须是128长度的16进制字符串 |
| -51004 | 合约方法的ACL map解码错误 | 在调用合约权限预编译合约时会出现,权限方法的ACL map解码错误,要考虑存储是否写坏了 |
| -51003 | 错误的权限类型 | 在调用合约权限预编译合约的设置权限类型时会出现,目前支持的类型只有白名单和黑名单两种 |
| -51002 | 合约方法的ACL 类型不存在 | 在调用合约权限预编译合约的读接口会出现,类型不存在一般是因为没有设置,默认当作所有用户都可以调用 |
| -51001 | 合约方法的ACL 不存在 | 在调用合约权限预编译合约的读接口会出现,ACL不存在一般是因为没有设置,默认当作所有用户都可以调用 |
| -50105 | Open table error | 内部错误,打开存储表失败 |
| -50104 | Create table error | 内部错误,创建存储表失败 |
| -50103 | Table set row error | 内部错误,写存储表失败 |
| -50102 | Invalid address format | 内部错误,地址的格式错误 |
| -50101 | Undefined function | 内部错误,调用的预编译合约方法不存在 |
| -50100 | Table not exist | 内部错误,访问的表不存在 |
| -50007 | Table存在字段重复 | 在调用TableManager预编译合约的createTable和appendColumn接口时会出现,存在重复的字段 |
| -50006 | Table的字段值超长 | 在调用Table预编译合约的写接口时会出现,写入的字段值太长了,超过了16MB |
| -50005 | Table的键值超长 | 在调用Table预编译合约的写接口时会出现,写入的键值太长了,超过了255 |
| -50003 | Table的字段名超长 | 在调用TableManager预编译合约的createTable和appendColumn接口时会出现,字段名超过了64 |
| -50002 | Table的表名超长 | 在调用TableManager预编译合约的createTable接口时会出现,表名超过了50 |
| -50001 | 表已经存在 | 在调用TableManager预编译合约的createTable接口时会出现,表名已经存在 |
| -50000 | 没有访问权限 | 在开启权限模式下,直接访问System、Consensus、AuthManager预编译合约将会出现,没有直接访问的权限 |