ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

EtherEx合约错误码全清单:20+返回码的含义、排查与异常处理实战

EtherEx合约错误码全清单:20+返回码的含义、排查与异常处理实战 EtherEx合约错误码全清单20返回码的含义、排查与异常处理实战【免费下载链接】etherexEtherEx is an open source, fully transparent, next generation decentralized exchange built on Ethereum.项目地址: https://gitcode.com/gh_mirrors/et/etherexEtherEx 是一个开源、完全透明的以太坊去中心化交易所。它的核心智能合约不抛文本异常而是用数字返回码表示成功1、失败0或具体的合约错误码——读懂这套返回码体系是排查下单失败、充值失败、市场注册失败问题的第一步。本文整理 EtherEx 全部 21 个错误码的含义、触发条件与实战排查方法附异常处理技巧。合约返回码体系先看这两个基础值所有 EtherEx 合约函数都返回一个整数。最基础的两个值定义在 contracts/etherex.se 中返回码含义说明1SUCCESS 成功操作完成例如cancel撤单成功0FAILURE 失败通用失败无具体原因例如余额不足时withdraw返回 0其余 21 个错误码按四位分段组织定义集中在 contracts/etherex.se测试代码 tests/test_etherex.py 中也有一份完整镜像方便对照断言2–4交易参数缺失buy/sell入参问题10–12资金不足余额、ETH 价值问题20–22交易状态冲突金额不符、重复下单、同区块抢单30–36市场注册参数非法add_market入参问题40–44代币合约不符合标准 API子币种合规性自检交易类错误码下单返回 2/3/4 怎么办check_trade宏contracts/etherex.se会在buy/sell开头统一拦截非法参数返回码宏名触发条件排查方法2MISSING_AMOUNTamount 0检查是否漏乘精度如 500 个 ETX 应传500 * 10 ** 53MISSING_PRICEprice 0检查价格是否按precision分母放大后的整数传递4MISSING_MARKET_IDmarket_id 0用get_market_id(contract_address)重新获取市场 ID勿硬编码⚠️ 注意这三个检查只拦截非正数不拦截超大数。若amount或price超过int256范围如2 ** 256会在 ABI 解码层直接抛异常而非返回错误码参考 tests/test_etherex.py。资金类错误码10/11/12 是最常见的三类失败返回码宏名触发位置含义与处理10INSUFFICIENT_BALANCEtrade()成交方在交易所的可用余额不足买方向余额为 0或卖方向没带 ETH。先确认已deposit且市场正确11INSUFFICIENT_TRADE_AMOUNTbuy() / sell()订单金额低于市场minimum最低限额。提高下单数量使amount × price达到最小交易总额12INSUFFICIENT_VALUEtrade()买方向成交额低于最低限额会退还全部 ETH或卖方向msg.value minimum同样退款 这三类错误都会自动退款合约内置refund()宏contracts/etherex.se当msg.value 0时原路退回发件地址所以失败交易不会损失本金但会损失 gas。交易状态类错误码20/21/22 排查清单返回码宏名含义实战处理20TRADE_AMOUNT_MISMATCH买单实际 ETH 价值与msg.value不符contracts/etherex.se按value amount × price / (precision × 10^decimals) × 10^18公式精确计算应附带的 ETH多付的部分会自动退回少付则报此码21TRADE_ALREADY_EXISTS相同参数重复下单contracts/etherex.se订单 ID 由[type, market, amount, price, sender, block]哈希生成同区块同参数完全重复即命中。改一个参数哪怕数量微调即可区分订单22TRADE_SAME_BLOCK_PROHIBITED试图在订单所在区块内成交contracts/etherex.se这是内置的 HFT 防护撮合方无法在订单未上链前抢跑。等下一个区块再发起trade()即可市场注册错误码add_market 返回 30–36add_marketcontracts/etherex.se按顺序校验六个参数返回码即校验失败的字段返回码宏名非法条件30MARKET_NAME_INVALID币种名称为空应传 3–4 位大写字母标识如 ETX31MARKET_NAME_ALREADY_EXISTS该名称已注册名称全局唯一32MARKET_CONTRACT_INVALID代币合约地址为 033MARKET_CATEGORY_INVALID分类 01子币种 2加密货币 3实物资产 4法币34MARKET_DECIMALS_INVALID代币小数位 035MARKET_PRECISION_INVALID价格分母 036MARKET_MINIMUM_INVALID最小交易总额 0代币合规检查码40–44 暴露子币种 API 缺陷注册市场时合约会反向自检代币合约是否实现了标准 API 的五个方法contracts/etherex.se。返回 40–44 说明你的代币合约行为不符合预期返回码自检调用期望行为40allowance(msg.sender, self)未授权时返回 041approve(self, 0)授权 0 额应返回 142balanceOf(self)交易所尚无持仓时应返回 043transfer(msg.sender, 0)转账 0 额应返回 0不报错44transferFrom(self, msg.sender, 0)同上 排查技巧参考示例代币 contracts/etx.se 的transfer/transferFrom/approve实现逐方法比对返回值语义——常见坑是余额不足时返回非 0 的错误值或transfer(0)抛错而非静默返回。异常处理实战三步定位任意返回码第一步确认返回码属于哪个分段。0/1 是通用结果2–4 查参数10–12 查资金20–22 查订单状态30 查市场注册。分段定位比逐条试错快得多。第二步用单元测试复现。tests/test_etherex.py 中每个错误码都有最小复现用例例如test_missing_amount直接断言buy(0, price, 1) 2test_basic_hft_prevention_using_block_number_fail验证TRADE_SAME_BLOCK_PROHIBITED。把实际参数代入对应用例即可二分定位。第三步检查资金流向。所有失败路径都会退款ETH 经send退回代币余额原封不动可通过get_sub_balance(address, market_id)核对交易所内余额是否仍为预期值。前端侧TradeActions的每个操作frontend/app/actions/TradeActions.js都带错误回调并派发*_FAIL事件接入自己的 DApp 时同理——在回调分支中按返回码映射提示文案而非一律显示交易失败。核心错误码速查表返回码名称一句话处理0FAILURE通用失败先核对余额与市场1SUCCESS成功2 / 3 / 4参数缺失补全 amount / price / market_id10INSUFFICIENT_BALANCE先 deposit 再 trade11INSUFFICIENT_TRADE_AMOUNT金额提高至 minimum 以上12INSUFFICIENT_VALUE补足 msg.value 或调整数量20TRADE_AMOUNT_MISMATCH精确计算应附 ETH 价值21TRADE_ALREADY_EXISTS修改任一订单参数22TRADE_SAME_BLOCK_PROHIBITED等下一个区块再撮合30–36市场参数非法按返回码对应字段修正40–44代币 API 不合规对照 contracts/etx.se 修正实现延伸阅读核心合约源码contracts/etherex.se含数据模型与全部函数示例代币合约contracts/etx.se域名注册合约contracts/namereg.seAPI 完整方法列表README.mdOperations 一节前端状态与错误事件frontend/app/js/constants.js【免费下载链接】etherexEtherEx is an open source, fully transparent, next generation decentralized exchange built on Ethereum.项目地址: https://gitcode.com/gh_mirrors/et/etherex创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表