跳转至

接口错误码设计方案

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

错误码 报错信息
2000000 系统内部错误

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 投票策略未更新
回到页面顶部