什么是 LP Token?
当您在 UTXOSwap 上提供流动性时,将会获得作为流动性提供证明的 Liquidity Provider Token(以下简称 LP Token)。
每个流动性池创建时会同时生成对应的独立 LP Token。这些代币遵循 xUDT 标准,可以像其他 xUDT 代币一样进行转移。然而,由于 LP Token 在参数(args)结构上略大于普通 xUDT 代币,它会占用更多的 capacity。
LP Token 的格式
LP_token 的 Type Script 格式如下:
Copy LP_token Type Script
code_hash: xudt_type_code_hash
hash_type: xudt_type_hash_type
args: pool_type_hash|0x40000000_u32.to_le_bytes()
在 args
字段中,0x40000000_u32.to_le_bytes()
表示这是一个 xUDT 标志位,使用 owner
模式的 output_type
。该值占用 4 字节。因此,整个 LP Token 的 Type Script 的长度比标准 xUDT 的 65 字节多出 4 字节,总长为 69 字节。
LP Token 的创建
当创建流动性池时,会同时生成 LP Token 及 LP Token Info Cell,交易结构大致如下:
Copy inputs:
Asset_x Cell
type: asset_x type
lock: intent lock
data: udt amount or none
Asset_y Cell
type: asset_y type
lock: intent lock
data: udt amount
capacity Cell
outputs:
LP Token Cell
type: lp_token type
lock: user lock
data: udt amount
Pool Cell
type: pool type
lock: sequencer proxy lock
data: pool info
Asset_x Cell
type: asset_x type
lock: pool controlled lock
data: udt amount or none
Asset_y Cell
type: asset_y type
lock: pool controlled lock
data: udt amount
LP Token Info cell:
type: unique cell type
lock: all zero
data: LP Token Info
Pool Cell 中 data 对应的 pool info 的 molecule 如下:
Copy import blockchain;
struct PairInfo {
total_fee_rate: byte, // 流动性池的交易费率
batch_id: Uint64, // batch 标识,每个 batch 处理后递增
asset_x: Byte32, // asset_x 的 udt_type_hash
reserve_x: Uint128, // asset_x 在流动性池中的数量
asset_y: Byte32, // asset_y 的 udt_type_hash
reserve_y: Uint128, // asset_y 在流动性池中的数量
total_lp_supply: Uint128, // LP token 的总发行量
protocol_lp_amount: Uint128, // 归属于协议的 LP token 数量
}
Pool Cell 的 pool type script 格式如下:
Copy Pool Type Script
code_hash: pool_type_code_hash
hash_type: pool_type_hash_type
args: type_id
LP Token 的解析
方案1: 通过 Pool Cell 进行解析
定位 Pool Cell :首先通过 LP Token 的 pool_type_hash
定位对应的 Pool Cell。
解析 Pool Info :反序列化 Pool Cell 中的 data
部分,解析出 asset_x_type_hash
和 asset_y_type_hash
。
查询资产符号 :通过解析得到的类型哈希(type hash),查询 Asset X 和 Asset Y 的代币符号。
记录 LP Token :将 LP Token 标记为 Asset X/Asset Y LP,以反映 LP Token 代表的资产组合。
方案2: 通过 LP Token 的创建交易进行解析
追溯创建交易 :找到创建 LP Token 和 LP Token Info Cell 的初始交易。
解析交易输出 :从该交易中解析出涉及的 AssetX 和 AssetY 信息。
查询资产符号 :同样,查询和记录 AssetX 和 AssetY 的代币符号。
记录 LP Token :将 LP Token 标记为 Asset X/Asset Y LP,以反映 LP Token 代表的资产组合。
方案 1 依赖于链上现存的数据结构,适用于动态查询,能够实时反映当前状态。这种方法对于需要实时数据的应用场景更为合适。
方案 2 则是一种静态分析方法,依赖于交易历史,适用于历史数据分析和在特定时间点的状态复现。
链上部署信息
主网部署信息:
Copy pool_type_code_hash: hex!
("c70a8b00526419826023bcf196852eecdc87406cdff7366234f6387265413c98"),
pool_type_hash_type: ScriptHashType::Type,
xudt_type_code_hash: hex!
("50bd8d6680b8b9cf98b73f3c08faf8b2a21914311954118ad6609be6e78a1b95"),
xudt_type_hash_type: ScriptHashType::Data1,
测试网部署信息:
Copy pool_type_code_hash: hex!
("5b9228b156fc20c2f091ce0ebd366aac6a2510fff150c6664f065edff59f8735"),
pool_type_hash_type: ScriptHashType::Type,
xudt_type_code_hash: hex!
("25c29dc317811a6f6f3985a7a9ebc4838bd388d19d0feeecf0bcd60f6c0975bb"),
xudt_type_hash_type: ScriptHashType::Type,
Last updated 8 months ago