ZooBC 维基
代币与市场

市场与订单

ZooBC 市场是针对一对资产的订单簿,由链本身维护和撮合。订单交易被应用时,每个节点都执行相同的撮合规则,因此每个节点得到相同的成交结果,没有任何运营方持有交易者的资金,也没有人能重新排列订单簿。任何人都可以开设市场,而活跃的市场能自己支付租金。

开设市场

市场是一个交易对(基础资产,计价资产):例如以 ZBC(计价资产)计价的某种代币(基础资产)。交易对是有序的,因此 (A, B) 和 (B, A) 是两个不同的市场。两种资产都需要 8 位小数(见 小数位数与步长)。

CreateMarket(类型 21)的费用为 market_creation_cost,在 mainnet 上为 50 ZBC。这笔费用成为市场的租金押金(见下文)。

下单

PlaceOrder(类型 22)指定市场、方向(买或卖)、限价、数量、标志和可选的有效期。标志可以使它成为市价单(立即成交否则取消)或只挂单(post-only)。

价格以每个基础资产原子单位对应的计价资产原子单位数表示,再乘以 10⁸。因此,每个代币 1.015 ZBC 的价格写作 101,500,000。

区块应用订单时:

  1. 订单冻结其可能花费的资产:卖单冻结其基础资产数量;买单冻结数量 × 价格 ÷ 10⁸ 的计价资产。
  2. 它立即与另一方的挂单撮合,价格最优者优先;价格相同时,交易 id 较小者优先。每笔成交都按挂单的价格进行,而不是按吃单方的限价。
  3. 未成交的部分留在订单簿上成为挂单;市价单除外,其剩余部分会被退还。

每个乘积都在 128 位算术中向下取整,因此每个节点算出的成交完全相同。

一组卖单价位 1.004、1.013 和 1.026;一笔限价 1.015 的买单成交前两个价位,各按其自身价格成交;所收基础资产的 0.1% 归区块出块者,未用完的冻结部分退还给吃单方
一组卖单价位 1.004、1.013 和 1.026;一笔限价 1.015 的买单成交前两个价位,各按其自身价格成交;所收基础资产的 0.1% 归区块出块者,未用完的冻结部分退还给吃单方

两条规则保持订单簿整洁:订单的计价价值必须至少为 2,500,000 个原子单位(0.025 单位计价资产),吃单方永远不会与自己的挂单成交。

吃单手续费

只有吃单方支付交易手续费:exchange_taker_fee_bps,在 mainnet 上为 10 个基点(0.1%),从吃单方收到的资产中扣取(买单为基础资产,卖单为计价资产),并支付给该区块的出块者。在上面的例子中,收到的 300 个代币中有 0.3 个归出块者。该费率是一个链参数,范围为 1 到 100 个基点。挂单方不支付交易手续费,市场的创建者也不分得任何份额。

吃单手续费与交易手续费是分开的。PlaceOrder 和 CancelOrder 的手续费是普通的手续费,进入 coinbase 抽奖。当区块的出块者尚未成熟时(见 成熟与收益),它的吃单手续费也进入 coinbase 抽奖。

取消与过期

CancelOrder(类型 23)让挂单方,且只有挂单方,撤回一笔挂单;其冻结的剩余部分会退回。设有有效期的挂单在某个区块开始时过期,以前一区块的时间戳为准。

市场租金

市场占用链的状态,因此它像其他所有占用状态的东西一样支付租金:

  • 50 ZBC 的创建费用是一笔押金,预付 12 个周期的租金;每个 172,800 个区块(30 天)的周期从中取走十二分之一,约 4.17 ZBC,进入长效池;
  • 每笔 PlaceOrder 和 CancelOrder 在手续费之外,再把自身手续费的 20% 加入押金,直到押金达到 24 个周期的租金为止,因此订单本身就能让活跃的市场保持有资金;
  • 无法支付某个周期的市场,或其某种资产已过期的市场,会被清理:其挂单退还给各自的挂单方,押金剩余部分进入长效池,该交易对以后可以再次开设。
一个市场摊位,创建时有 12 格的租金押金;每笔订单加入其手续费的 20%;每 30 天有一格进入长效池;押金耗尽时市场关闭,挂单被退还
一个市场摊位,创建时有 12 格的租金押金;每笔订单加入其手续费的 20%;每 30 天有一格进入长效池;押金耗尽时市场关闭,挂单被退还

ZooBC 没有自动做市商池:每笔交易都发生在人们提交的订单之间。若要一次性交易任意两种资产,包括小数位数少于 8 位的代币,见 兑换报价。

另见