uniswap
uniswap 交易
在 uniswap 的所有接口中,tokenx 与 tokeny 的顺序并不影响执行结果。例如,
FO@eosio - EOS@eosio
和EOS@eosio - FO@eosio
属于同一个市场。
加仓
整个兑换过程是在 FIBOS 主网执行,所以执行过程中使用的是 FIBOS 主网的私钥以及账户信息。
1 | var FIBOS = require('fibos.js'); |
调用方法:
1 | let ctx = fibos_client.contractSync('eosio.token'); |
方法说明:
使用 addreservesSync()
方法,可以为 uniswap 市场进行加仓,特殊的,如果没有该市场,则会创建该市场。
参数说明:
参数 | 含义 |
---|---|
owner | 操作账户 |
tokenx | x 通证 |
tokeny | y 通证 |
限制:
以下所有的限制均不包含常规限制,例如权限不对,精度不对等。本文提到的限制都是特定的限制。
- 已成为
bancor
交易市场的,不能再成为uniswap
的交易市场。否则报错。 - 加仓后正负价格不能超过 0.1%。否则报错。
- 加仓后个人权重增加必须大于0。否则报错。
该行为会对 X-Y 的 uniswap 通证市场进行加仓,如果该市场不存在,则会创建该市场。
1 | //初始化 FIBOS 客户端 |
在上面的例子中,我们为FO@eosio-EOS@eosio
的 uniswap 市场进行加仓,数额分别是20.0000 FO@eosio
和10.0000 EOS@eosio
。同样的,如果没有该市场,则会创建FO@eosio-EOS@eosio
的 uniswap 市场。
市场份额表查询:
1 | fibos.getTableRowsSync(true, "eosio.token", "eosio.token", "swapmarket") |
1 | fibos.getTableRowsSync(true, "eosio.token", 0, "swappool") // 此处的"0"对应的对应币币对的 primary |
上例的情况是,EOS@eosio-FO@eosio
的uniswap
的市场中,EOS@eosio
的总额为10030.0000 EOS
,FO@eosio
的总额为140.0000 FO
,所有持仓者总权重为11849.89451429842847574
。
在该市场中,有两个持仓者,分别为fibos
和user1
。他们在总市场中的权重分别为11356.56329871202615323
和493.33121558640181092
。
提仓
调用方法:
1 | let ctx = fibos_client.contractSync('eosio.token'); |
方法说明:
使用 outreservesSync()
方法,可以在特定的 uniswap 市场中进行提仓,提出我们在该 uniswap 市场中的份额。
参数说明:
参数 | 含义 |
---|---|
owner | 操作账户 |
symbolx | x 通证 |
symboly | y 通证 |
rate | 提取比例 |
限制:
- 0<rate≤1。否则报错。
- 该
uniswap
必须存在。否则报错。 - 该用户在该
uniswap
市场中必须拥有份额。否则报错。 - 用户提取出来的
token
数必须大于该币种的最小精度。否则报错。 - 用户提取结束后剩余的权重必须大于总权重部分的0.1%。否则报错。
该行为会对 X-Y 的 uniswap 通证市场进行提仓,通过rate
比例提出我们自己的通证份额。
1 | //初始化 FIBOS 客户端 |
在上面的例子中,我们在FO@eosio-EOS@eosio
的 uniswap 市场进行提仓,比例为0.1
。操作过后,我们会按个人权重/总权重 * rate
的比例等比得提取该市场中FO@eosio
通证数量和EOS@eosio
通证数量。
公式说明:
在 uniswap
市场中,用户所拥有的token
份额以权重的形式展示。在减仓的时候不能设置提取某一个数额的token
出来,只能设置提取的比例,按照对应的比例获得对应的币币对。详细公式见下:
市价交易\限价交易
uniswap 的市价交易、限价交易和 Bancor 共用exchange
接口。
| 参数 | 含义 |
| ——– | —————- |
| owner | 操作账户 |
| quantity | 兑换通证数量 |
| to | 兑换通证目标数量 |
| price | 价格(仅在 uniswap 限价交易中填值) |
| id | 渠道商 id (仅在 uniswap 交易中使用) |
| memo | 兑换备注信息 |
限制
bancor
交易和uniswap
共用一个接口,互为bancor
交易对的不可以做uniswap
交易。否则报错。在市价交易的时候,
quantity
的值必须不为0,to
和price
的值必须为0。否则报错。- 在限价交易的时候,
price
的价值必须不为0,quantity
和to
二者必须有且只一个值。否则报错。 - 该
uniswap
市场必须存在。负责报错。 - 用户兑换出来的
token
数必须大于该币种的最小精度。否则报错。
市价交易:
1 | //初始化 FIBOS 客户端 |
上面的例子中,用户fibos
想用200.0000 EOS@eosio
兑换FO@eosio
,不论价格是多少,兑换完200.0000 EOS@eosio
为止。
限价交易:
1 | //初始化 FIBOS 客户端 |
上面的例子中,用户fibos
需要以不高于1.2
的价格兑换出100.0000 FO@eosio
。对于高于1.2
的价格,仍未兑换完的部分,则会挂单。
挂单表查询示例:
1 | fibos.getTableRowsSync(true, "eosio.token", 0, "swaporder") |
撤单
调用方法:
1 | let ctx = fibos_client.contractSync('eosio.token'); |
方法说明:
使用 withdrawSync()
方法,可以在 uniswap 市场撤销自己的挂单。
参数说明:
参数 | 含义 |
---|---|
owner | 撤单账号 |
symbolx | x 通证 |
symboly | y 通证 |
bid_id | 撤单id |
1 | //初始化 FIBOS 客户端 |
撤单会撤销用户的此 ID 的挂单,挂单金额打回账户