欢迎光临
我们一直在努力

如何在EtherEx上注册新市场?add_market的6个参数与代币接入实战指南

如何在EtherEx上注册新市场?add_market的6个参数与代币接入实战指南

【免费下载链接】etherex EtherEx is an open source, fully transparent, next generation decentralized exchange built on Ethereum. 【免费下载链接】etherex 项目地址: https://gitcode.com/gh_mirrors/et/etherex

EtherEx 是构建在以太坊上的开源、全透明去中心化交易所(DEX)。本文带你用一次 add_market 调用完成注册新市场,把任意符合标准接口的代币接入交易所,涵盖 6 个参数的含义、取值技巧、接口自查与常见错误码速查,新手也能照着走完整个流程。

EtherEx去中心化交易所界面:通过add_market注册新市场后的交易页与盘口

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 后,交易对即可:

  • 在代币合约上 approve 交易所地址,再调用交易所 deposit 充值代币
  • 用 buy / sell 挂单,trade 成交,cancel 撤单
  • 新市场的 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. 【免费下载链接】etherex 项目地址: https://gitcode.com/gh_mirrors/et/etherex

    创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

    赞(0)
    未经允许不得转载:171主机测评 » 如何在EtherEx上注册新市场?add_market的6个参数与代币接入实战指南
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址