接口错误码设计方案
1. 概述
bitxhub内置合约处理逻辑的报错类型较多,调用接口时难以对不同错误类型给出具体判断。
为了方便调用接口时的错误处理,对bitxhub内置合约中的报错类型进行分类并设计了错误码。
目前这些错误码设计只用于bitxhub内置合约接口,后续可能扩展用于其他接口。
2.术语和实体定义
2.1 错误码设计
1 | 00 | 0002
第一个一位数字表示错误类型:1 表示普通错误,2 表示系统内部错误;
第二个模块两位数字表示错误发生的模块;
第三个模块表示相应模块的错误码。
2.2 错误结构定义
type ErrorCode string
type ErrorMsg string
type BxhError struct {
Code ErrorCode
Msg ErrorMsg
}
type Response struct {
Ok bool
Result [] byte
}
func ( be BxhError ) Error () string {
return fmt . Sprintf ( "%s:%s" , be . Code , be . Msg )
}
func ( be BxhError ) IsInternal () bool {
return be . Code [ 0 ] == '2'
}
// Result returns normal result
func Success ( data [] byte ) * Response {
return & Response {
Ok : true ,
Result : data ,
}
}
// Error returns error result that will cause
// vm call error, and this transaction will be invalid
func Error ( code ErrorCode , msg string ) * Response {
be := BxhError {
Code : code ,
Msg : ErrorMsg ( msg ),
}
return & Response {
Ok : false ,
Result : [] byte ( be . Error ()),
}
}
// 示例
const (
// other
OtherInternalErrCode ErrorCode = "2000000"
OtherInternalErrMsg ErrorMsg = "%s"
// governance
GovernanceNoPermissionCode ErrorCode = "1010001"
GovernanceNoPermissionMsg ErrorMsg = "regulatorAddr(%s) does not have the permission"
// appchain
AppchainInternalErrCode ErrorCode = "1020001"
AppchainInternalErrMsg ErrorMsg = "the appchain name %s has been occupied by appchain %s"
DuplicateAppchainNameCode ErrorCode = "1020002"
DuplicateAppchainNameMsg ErrorMsg = "the appchain name %s has been occupied by appchain %s"
)
func Test () * Response {
return Error ( DuplicateAppchainNameCode , fmt . Sprintf ( string ( DuplicateAppchainNameMsg ), "应用链A" , "appchain1" ))
}
3 错误信息定义
以下将根据内置合约分模块定义不同内置合约的详细错误码信息定义。
3.1 其他模块 00
3.2 提案管理模块 01
错误码
报错信息
2010000
系统内部错误
1010001
当前用户没有权限
1010002
提案不存在
1010003
当前提案已结束,不可以撤回(或再次强制结束)
1010004
该地址的用户尚未投票
1010005
不支持的提案治理模块
1010006
不支持的提案状态
1010007
该管理员目前不可用,无法投票
1010008
当前提案已结束或暂停,无法投票
1010009
管理员不可以重复投票
1010010
投票信息错误,只能是approve
或者reject
1010011
该管理员不可以对当前提案进行投票
1010012
非法的投票策略信息
1010013
该管理模块的投票策略不存在
3.3 应用链管理模块 02
错误码
报错信息
2020000
系统内部错误
1020001
当前用户没有权限
1020002
应用链broker合约地址不可以为空
1020003
fabric链broker合约地址信息错误
1020004
应用链id不可以为空
1020005
应用链id已经被占用
1020006
应用链名称不可以为空
1020007
应用链名称已被占用
1020008
应用链管理员列表应当包含当前管理员
1020009
应用链管理员地址格式错误
1020010
应用链管理员地址已被占用
1020011
应用链自定义验证规则的url不可以为空
1020012
应用链当前状态不支持此类管理操作
1020013
应用链主验证规则正在切换,无法更新或解冻应用链
1020014
应用链不存在
3.4 验证规则管理模块 03
错误码
报错信息
2030000
系统内部错误
1030001
当前用户没有权限
1030002
验证规则地址格式错误
1030003
验证规则未部署
1030004
应用链不存在
1030005
验证规则当前状态不支持此类管理操作
1030006
主验证规则正在切换,无法更新主验证规则
1030007
默认验证规则不可以注册
1030008
默认验证规则不可以注销
1030009
应用链已注销,不支持验证规则管理
1030010
当前应用链状态不支持绑定新规则
3.5 身份管理模块 04
错误码
报错信息
2040000
系统内部错误
1040001
当前用户没有权限
1040002
身份id格式错误
1040003
审计管理员绑定的节点未注册
1040004
审计管理员绑定的节点不是审计节点
1040005
该审计节点当前状态不支持绑定到审计管理员
1040006
不支持的身份类型
1040007
身份未注册
1040008
该身份当前状态不支持此类操作
1040009
超级治理管理员角色不支持当前管理操作
1040010
应用链管理员角色不支持当前管理操作
1040011
审计管理员角色不支持当前管理操作
1040012
治理管理员角色不支持当前管理操作
1040013
该应用链没有管理员
1040014
当前角色不是治理管理员
1040015
该账户地址已经被其他身份占用
3.6 节点管理模块 05
错误码
报错信息
2050000
系统内部错误
1050001
当前用户没有权限
1050002
当前有共识节点正在增删治理中,不支持再进行共识节点的增删
1050003
节点账户地址格式错误
1050004
节点账户地址已被占用
1050005
不支持的节点类型
1050006
共识节点id错误
1050007
共识节点pid不可以为空
1050008
共识节点pid已被占用(重复注册)
1050009
审计节点的名称不可以为空
1050010
审计节点的名称已被占用
1050011
审计节点的应用链审计权限不可以为空
1050012
审计节点的应用链审计权限列表中存在非法地址(不存在的应用链)
1050013
节点不存在
1050014
该节点当前状态不支持此类操作
1050015
创世节点不支持删除
1050016
当前共识节点数量不支持删除共识节点
1050017
只支持删除共识节点序号最大的共识节点(已废弃)
1050018
共识节点不支持更新操作
1050019
共识节点不支持绑定操作
1050020
共识节点不支持解绑操作
3.7 服务管理模块 06
错误码
报错信息
2060000
系统内部错误
1060001
当前用户没有权限
1060002
服务不存在
1060003
服务当前状态不支持此类操作
1060004
应用链不可用,不支持进行服务管理
1060005
服务名称不可以为空
1060006
服务名称已被占用
1060007
非法的服务id
1060008
不支持的服务类型
1060009
服务黑名单格式错误,黑名单中的每个服务地址应当包含冒号隔开的三个不为空部分、其中第一个部分的bitxhubid只能是数字
1060010
服务黑名单中存在未注册服务,即服务bitxhubID为当前bitxhub,但并没有在当前bitxhub上注册
1060011
服务黑名单中存在已注销服务,即服务bitxhubID为当前bitxhub,但该服务已经注销
1060012
服务评分应当在[0,5]区间内
1060013
用户不可以重复评分
3.8 Dapp管理模块 07
错误码
报错信息
2070000
系统内部错误
1070001
当前用户没有权限
1070002
dapp不存在
1070003
dapp当前状态不支持做此类管理操作
1070004
dapp名称不可以为空
1070005
dapp名称已被占用
1070006
dapp url不为空
1070007
不支持的dapp类型
1070008
dapp合约地址格式错误
1070009
dapp合约地址已占用,不可以重复注册
1070010
dapp合约地址已被占用,不可以更新到其他dapp中
1070011
dapp合约地址不存在
1070012
dapp黑名单格式错误
1070013
dapp转让接收者地址格式错误
1070014
dapp不可以转让给自己
1070015
dapp评分应当在[0,5]区间内
1070016
用户不可以重复评分
3.9 跨链管理模块 08
错误码
报错信息
2080000
系统内部错误
1080001
服务的跨链信息未注册
1080002
无效的ibtp:ibtp的来源服务id转换失败
1080003
无效的ibtp:ibtp的目的服务id转换失败
1080004
无效的ibt:ibtp的来源和目的服务都不在当前bitxhub中
1080005
无效的ibtp:ibtp的类型不正确
1080006
来源链不可用
1080007
来源服务不可用
1080008
目的链不可用
1080009
目的服务不可用
1080010
来源服务没有权限调用目的服务
1080011
来源bitxhub不可用
1080012
目的bitxhub不可用
1080013
ibtp已经存在,ibtp的index太小
1080014
错误的ibtp,ibtp的index太大
1080015
非法的ibtp ID,格式错误
1080016
ibtp不存在
3.10 broker合约管理模块 09
错误码
报错信息
2090000
系统内部错误
1090001
调用方法格式错误,应当为(func,funcCb,funcRb)
1090002
ibtp的to地址格式错误
1090003
跨链调用信息不存在
1090004
out message信息不存在
3.11 事务管理模块 10
错误码
报错信息
2100000
系统内部错误
1100001
当前caller不允许调用事务合约
1100002
事务ID不存在
1100003
global交易的child交易已经存在
1100004
child交易的global交易不存在
1100005
事务状态转换出错
1100006
global事务ID不存在
3.12 信任链管理模块 11
错误码
报错信息
2110000
系统内部错误
2110001
信任链数据不存在
3.13 资产管理模块 12
错误码
报错信息
2120000
系统内部错误
1120001
托管地址格式错误
1120002
托管地址不存在
1120003
代理合约地址不存在
1120004
interchain swap合约地址不存在
1120005
当前区块头不存在
1120006
该哈希的区块头不存在
1120007
该哈希的以太坊交易不存在
1120008
当前调用账户不是管理员账户
3.14 投票策略管理模块 13
错误码
报错信息
2130000
系统内部错误
1130001
当前用户没有权限
1130002
非法的投票策略信息
1130003
该模块不存在投票策略(已废弃)
1130004
当前投票策略正在更新中,不支持再次更新
1130005
非法的投票策略类型
1130006
投票策略未更新