AMM 流量池相关操作 ( cli_wallet 命令 和 API )
1. 建池
op code: 59
参数
fee 手续费,测试网默认手续费 50 TEST
account 账号,格式 1.2.x
asset_a 资产A,格式 1.3.x
asset_b 资产B,格式 1.3.x
share_asset 权益资产(即LP TOKEN),格式 1.3.x
taker_fee_percent 交易手续费,整数表示,单位是万分之一
withdrawal_fee_percent 提现手续费,整数表示,单位是万分之一
注:
* 资产 A 的 ID 必须小于资产 B 的 ID
* 建池必须绑定权益资产,只有权益资产持有人才能绑定,且自动成为池主
* 权益资产必须预先建好,不能是AB之一,必须是普通UIA,不能有存量
比如:
abit-test 建池,交易对 TEST/CONTEST.BTC ,权益资产 CONTEST.LP1
sign_transaction { "operations": [[59,{ "fee": { "amount": 5000000, "asset_id": "1.3.0" }, "account": "1.2.3833", "asset_a": "1.3.0", "asset_b": "1.3.1515", "share_asset": "1.3.1560", "taker_fee_percent": 12, "withdrawal_fee_percent": 50 }]] } true
1.1 检查操作结果
可以用 get_account_history 命令查看帐户操作历史,比如
get_account_history abit-test 10
结果示例
40057890 2020-09-19T14:28:06 liquidity_pool_create_operation abit-test fee: 50 TEST result: {"new_objects":["1.19.0"],"updated_objects":["1.3.1560"],"removed_objects":[]}
格式为:块号 时间 操作 帐号 手续费 结果
结果里 new_objects 里 1.19.x 就是池 ID ,可以通过 get_object 命令查看
updated_objects 里的 1.3.1560 表示权益资产 ID
>>> get_object 1.19.0
[{
"id": "1.19.0",
"asset_a": "1.3.0",
"asset_b": "1.3.1515",
"balance_a": 0,
"balance_b": 0,
"share_asset": "1.3.1560",
"taker_fee_percent": 12,
"withdrawal_fee_percent": 50,
"virtual_value": "0"
}
]
结果说明:
id 池 ID
asset_a 资产A
asset_b 资产B
balance_a 余额A
balance_b 余额B
share_asset 权益资产
taker_fee_percent 交易手续费,整数表示,单位是万分之一
withdrawal_fee_percent 提现手续费,整数表示,单位是万分之一
virtual_value 恒定乘积 = balance_a * balance_b
用 get_asset CONTEST.LP1 命令也可以看到里面有一项 "for_liquidity_pool": "1.19.0"
表示该资产是不是一个 LP TOKEN ,以及对应的池ID是多少
>>> get_asset CONTEST.LP1
{
"id": "1.3.1560",
"symbol": "CONTEST.LP1",
...
"for_liquidity_pool": "1.19.0",
...
2. 删池
op code: 60
参数
fee 手续费,测试网默认手续费 0 ,也就是免费
account 账号,格式 1.2.x
pool 池 ID ,格式 1.19.x
注:
* 只有池主才可以删
* 只有空池才可以删
* 删后对应的权益资产可再利用
比如:
abit-test 删除 CONTEST.LP1 对应的池
sign_transaction { "operations": [[60,{ "fee": { "amount": 0, "asset_id": "1.3.0" }, "account": "1.2.3833", "pool": "1.19.0" }]] } true
2.1 检查操作结果
可以用 get_account_history 命令查看帐户操作历史,比如
get_account_history abit-test 10
结果示例
40057890 2020-09-19T14:28:06 liquidity_pool_delete_operation abit-test fee: 0 TEST result: {"new_objects":[],"updated_objects":["1.3.1560"],"removed_objects":["1.19.0"]}
格式为:块号 时间 操作 帐号 手续费 结果
结果里 removed_objects 里 1.19.x 就是池 ID ,表示已删除
updated_objects 里的 1.3.1560 表示权益资产 ID
3. 批量查询 API
* 按资产A查所有池 get_liquidity_pools_by_asset_a (asset_a, limit, start_id)
* 按资产B查所有池 get_liquidity_pools_by_asset_b (asset_b, limit, start_id)
* 按交易对查询池列表 get_liquidity_pools_by_both_assets ( asset_a, asset_b, limit, start_id)
* 按权益资产批量查询池 get_liquidity_pools_by_share_asset( [assets], subscribe )
注:
* limit和start_id 用于翻页。limit最大值默认101,是节点运行参数之一,可调节。
* subscribe 用于订阅通知
4. 充值,即将交易资产存入池中,换取对应的权益资产
op code: 61
参数
fee 手续费,测试网默认手续费 0.1 TEST
account 账号,格式 1.2.x
pool 池 ID ,格式 1.19.x
amount_a 资产A数量,标准金额格式(数量+币种)
amount_b 资产B数量,标准金额格式(数量+币种)
注:
* 空池只有池主才可以充,非空池任何人都可以充
* 空池充值确定初始兑换比例
* 非空池充值时,资产按比例进池,按比例得到权益资产,多的充值会退还
* 池上限由权益资产(LP TOKEN)的最大供应量来调节
比如:
abit-test 往 CONTEST.LP1 池 充值 100 TEST 和 0.1 CONTEST.BTC
sign_transaction { "operations": [[61,{ "fee": { "amount": 10000, "asset_id": "1.3.0" }, "account": "1.2.3833", "pool": "1.19.0", "amount_a": { "amount": 10000000, "asset_id": "1.3.0" }, "amount_b": { "amount": 10000000, "asset_id": "1.3.1515" } }]] } true
4.1 检查操作结果
可以用 get_account_history 命令查看帐户操作历史,比如
get_account_history abit-test 10
结果示例
40058486 2020-09-19T15:00:33 liquidity_pool_deposit_operation abit-test fee: 0.10000 TEST result: {"paid":[{"amount":10000000,"asset_id":"1.3.0"},{"amount":10000000,"asset_id":"1.3.1515"}],"received":[{"amount":10000000,"asset_id":"1.3.1560"}],"fees":[]}
格式为:块号 时间 操作 帐号 手续费 结果
结果里 paid 数组表示实际付款金额, received 数组表示得到的数量
也可以用 list_account_balances 命令查余额,此处略。
用 get_object 1.19.0 命令检查池信息
5. 提现,即将权益资产归还给池,换取所对应权益的交易资产
op code: 62
参数
fee 手续费,测试网默认手续费 5 TEST
account 账号,格式 1.2.x
pool 池 ID ,格式 1.19.x
share_amount 权益资产数量,标准金额格式(数量+币种)
注:
* 按所支付的权益资产占比计算对应的交易资产,扣除提现手续费后支付给提现者
* 提现手续费存留于池中,最后一个提现的不扣手续费
比如:
abit-test 从 CONTEST.LP1 池 提现 100 LP1
sign_transaction { "operations": [[62,{ "fee": { "amount": 500000, "asset_id": "1.3.0" }, "account": "1.2.3833", "pool": "1.19.0", "share_amount": { "amount": 1000000, "asset_id": "1.3.1560" } }]] } true
5.1 检查操作结果
可以用 get_account_history 命令查看帐户操作历史,比如
get_account_history abit-test 10
结果示例
40058679 2020-09-19T15:11:30 liquidity_pool_withdraw_operation abit-test fee: 5 TEST result: {"paid":[{"amount":1000000,"asset_id":"1.3.1560"}],"received":[{"amount":995000,"asset_id":"1.3.0"},{"amount":995000,"asset_id":"1.3.1515"}],"fees":[]}
格式为:块号 时间 操作 帐号 手续费 结果
结果里 paid 数组表示实际付款金额, received 数组表示得到的数量
也可以用 list_account_balances 命令查余额,此处略。
用 get_object 1.19.0 命令检查池信息
6. 交易,即用A资产换B资产或者用B资产换A资产
op code: 63
参数
fee 手续费,测试网默认手续费 1 TEST
account 账号,格式 1.2.x
pool 池 ID ,格式 1.19.x
amount_to_sale 卖出数量和币种,标准金额格式(数量+币种)
min_to_receive 最少买入数量和币种,标准金额格式(数量+币种)
注:
* 池上限由权益资产(LP TOKEN)的最大供应量来调节
比如:
abit-test 往 CONTEST.LP1 池 卖 20 TEST,希望最少获得0.01 CONTEST.BTC
sign_transaction { "operations": [[63,{ "fee": { "amount": 100000, "asset_id": "1.3.0" }, "account": "1.2.3833", "pool": "1.19.0", "amount_to_sell": { "amount": 2000000, "asset_id": "1.3.0" }, "min_to_receive": { "amount": 1000000, "asset_id": "1.3.1515" } }]] } true
6.1 检查操作结果
可以用 get_account_history 命令查看帐户操作历史,比如
get_account_history abit-test 10
结果示例
40058783 2020-09-19T15:17:06 liquidity_pool_exchange_operation abit-test fee: 1 TEST result: {"paid":[{"amount":2000000,"asset_id":"1.3.0"}],"received":[{"amount":1631296,"asset_id":"1.3.1515"}],"fees":[{"amount":0,"asset_id":"1.3.0"},{"amount":3269,"asset_id":"1.3.1515"}]}
格式为:块号 时间 操作 帐号 手续费 结果
结果里 paid 数组表示实际付款金额, received 数组表示得到的数量, fees 表示交易手续费
也可以用 list_account_balances 命令查余额,此处略。
用 get_object 1.19.0 命令检查池信息