如何在EtherEx上注册新市场?add_market的6个参数与代币接入实战指南
【免费下载链接】etherex EtherEx is an open source, fully transparent, next generation decentralized exchange built on Ethereum. 项目地址: https://gitcode.com/gh_mirrors/et/etherex
EtherEx 是构建在以太坊上的开源、全透明去中心化交易所(DEX)。本文带你用一次 add_market 调用完成注册新市场,把任意符合标准接口的代币接入交易所,涵盖 6 个参数的含义、取值技巧、接口自查与常见错误码速查,新手也能照着走完整个流程。

EtherEx 是什么?"市场"又是什么?
EtherEx 把每一笔买入、卖出、充值、提现都直接写入以太坊链上合约,用户自己持有资产,交易所只是"撮合规则"。
在这个体系里,一个市场(Market)= 一个代币与 ETH 之间的交易对。每个市场都有独立的:
- 唯一自增 market_id(如 1 = ETX/ETH)
- 代币合约地址、小数位数、价格精度、最小成交额、资产类别
而创建市场的唯一入口,就是合约中的 add_market 方法(定义于 contracts/etherex.se)。下面逐个拆解它的 6 个参数。
add_market 的 6 个参数逐个拆解
方法签名:add_market(name, contract, decimals, precision, minimum, category),全部以 256 位整数编码传入(官方参数说明见 README.md)。
| 1 | name | 代币名称,3~4 个大写字母 | "BOB" | 全局唯一,重名会被拒绝 |
| 2 | contract | 代币合约地址 | $ETX | 必须是已部署的合约地址 |
| 3 | decimals | 代币小数位数 | 5 | 需与代币合约一致,影响余额换算 |
| 4 | precision | 价格精度分母 | 10000(即 0.0001 粒度) | 值越小,价格越精细 |
| 5 | minimum | 单笔最小成交额(wei) | 1000000000000000000000(=10 ETH) | 官方建议至少 10 ETH,太低会沦为"灰尘交易" |
| 6 | category | 资产类别(见下表) | 1 | 仅用于前端分组展示 |
四类资产类别怎么选?
| 1 | Subcurrencies(子货币) | 你自己的 DApp 代币 |
| 2 | Crypto-currencies(加密货币) | 通过网关兑换的 BTC 等 |
| 3 | Real-world assets(现实资产) | 黄金、汽车等实物资产 |
| 4 | Fiat currencies(法币) | 可通过网关兑换的法币代币 |
💡 参考真实配置:仓库的部署脚本 contracts/EtherEx.yaml 就注册了三个市场——ETX(5 位小数、精度 10^8、类别 1)、CAK(4 位小数、精度 1000)、MID(3 位小数、精度 10000、类别 3),可以直接照抄改数。
接入前自查:代币合约必须符合"标准接口"
这是新手最容易踩的坑:add_market 在写入市场前,会主动调用你的代币合约做 5 项标准校验(contracts/etherex.se):
- allowance(owner, spender) → 返回授权额度
- approve(spender, value) → 返回 1
- balanceOf(address) → 返回余额
- transfer(to, value) → 返回 0(零值测试转账成功)
- transferFrom(from, to, value) → 返回 0(零值测试代扣成功)
✅ 只要你的代币合约实现了这 5 个标准方法(如仓库示例 contracts/etx.se),校验就会顺利通过;任何一项失败,注册都会以 40–44 的错误码终止。
实战:四步完成代币接入
第一步:拿到代码并理解部署流程
git clone https://gitcode.com/gh_mirrors/et/etherex
正式部署使用 PyEPM 执行 contracts 目录下的 EtherEx.yaml(先部署交易所合约,再逐个 add_market 注册代币,最后 approve + deposit 充值测试)。
第二步:准备好 6 个参数
以接入一个 4 位小数的 BOB 币为例(完整用例见 tests/test_etherex.py):
| name | "BOB" |
| contract | BOB 代币合约地址 |
| decimals | 4 |
| precision | 10^8(价格精度 0.00000001) |
| minimum | 10^18(1 ETH) |
| category | 1 |
第三步:发起 add_market 交易
ans = contract.add_market("BOB", bob_address, 4, 10**8, 10**18, 1)
assert ans == 1 # 1 = SUCCESS,交易上链成功
前端界面走的也是同一条路:registerMarket 方法会把名称转成 ASCII 编码后调用 add_market(frontend/app/clients/EthereumClient.js),并先用 call 预演、确认无错误码再 sendTransaction 上链——这是很值得借鉴的做法。
第四步:确认 market_id,开始交易
market_id = contract.get_market_id(bob_address) # 或 get_market_id_by_name("BOB")
拿到 market_id 后,交易对即可:
新市场的 last_price 初始为 1,首笔成交后即更新,前端盘口(文章开头的截图)随即出现该市场。
常见错误码速查(30–44)
| 30 | MARKET_NAME_INVALID | 名称为空/非法 | 用 3~4 位大写字母 |
| 31 | MARKET_NAME_ALREADY_EXISTS | 名称重复 | 换一个名称 |
| 32 | MARKET_CONTRACT_INVALID | 合约地址为 0 | 填入真实代币合约地址 |
| 33 | MARKET_CATEGORY_INVALID | 类别 < 0 | 取 1~4 |
| 34 | MARKET_DECIMALS_INVALID | 小数位 < 0 | 与代币合约保持一致 |
| 35 | MARKET_PRECISION_INVALID | 精度 < 0 | 如 10000 |
| 36 | MARKET_MINIMUM_INVALID | 最小成交额 < 0 | 建议 ≥ 10 ETH |
| 40–44 | MARKET_NONSTANDARD_* | 代币合约未通过 5 项标准接口校验 | 补全 approve/transferFrom/balanceOf/transfer/allowance |
小结
- 注册新市场只有一条路:add_market(name, contract, decimals, precision, minimum, category),全部参数校验通过后市场才会上链,且 msg.sender 自动成为该市场的 owner
- 参数中最容易出错的是 decimals(要和代币合约一致) 和 minimum(太小会吸引灰尘单)
- 代币合约必须实现 5 个标准方法,否则会被 40–44 错误码挡在门外
- 注册成功后用 get_market_id / get_market_id_by_name 拿到 market_id,即可充值开交易 🚀
【免费下载链接】etherex EtherEx is an open source, fully transparent, next generation decentralized exchange built on Ethereum. 项目地址: https://gitcode.com/gh_mirrors/et/etherex
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考


