跳转到内容

Aftermath(源码预览)

当前 ABI:版本化源码 c96cd0d。示例使用已激活的 PACKAGE_VERSION 对象;历史非版本化地址需要不同 ABI。详见版本管理及部署参考。

此路径创建一个 50/50 的 Aftermath 池,并包装为 DAO 费用池。其金库接收 DAO 费用,再按预售的手续费方案分配。它不同于面向特定合作伙伴的 blast_aftermath_dao_presale 模块;后者将费用直接付给合作伙伴财库,不创建 Blast 金库。

创建预售前,先发布一个具有 9 位小数的全新 Aftermath LP 币种 Lp。每场预售需要独立的 LP 币种及 CreatePoolCapV2。上架前请核实凭证和币种类型,完成初始化时无法验证该凭证与 Lp 是否匹配。

在一笔可编程交易中:

  1. aftermath::new<Meme, Quote>(treasury_cap, package_version, creation_policy, fee_policy, venue_config, dao_fee_bps) 返回 (initializer, ticket);ticket 的类型为 FinalizeTicket<Meme, Quote>,不具备任何能力。DAO 费率为 u16,范围 1 至 10,000 基点。它记录 PoolTier,tick 间距为 0,pool_fee_rate 为 DAO 费率。
  2. 应用常规预售设置函数,包括必需的手续费分配,以及可选的合作伙伴。
  3. aftermath::finalize<Lp, Meme, Quote>(initializer, package_version, ticket, currency, create_pool_cap) 返回 (Presale, PresaleCap, PoolCreation<Lp, Meme, Quote>)。此调用消耗步骤 1 的 ticket。预留对象将 LP 凭证绑定到该预售,并发出携带双方 ID 的 PoolCreationReserved。
  4. blast_presale::share(presale, package_version, start_ms, clock) 共享预售。
  5. aftermath::share(pool_creation, package_version) 在同一笔交易中共享预留对象。
  6. 将 PresaleCap 转给创建者。

必须在同一笔交易中通过 aftermath::finalize 消耗步骤 1 的 ticket。直接调用核心 blast_presale::finalize 会留下无法丢弃的 FinalizeTicket,整笔创建交易失败,因此不会留下缺少预留对象的共享预售。ticket 的币种类型与唯一 TreasuryCap 绑定,不能拿其他交易平台的初始化器代替。

任何人均可结算后迁移已达标预售:

aftermath::migrate<Lp, Meme, Quote>(
sale, package_version, pool_creation, fee_policy, venue_config,
pool_registry, dao_fee_version, clock
)

pool_registry 是 Aftermath 的可变共享 PoolRegistry;dao_fee_version 是 DAO 费用包的共享 Version。共享 PoolCreation 会被消耗并删除。使用其他预售的预留对象会以 EWrongPresale 中止。适配器自行排列两种代币的顺序。

迁移将全部预留流动性注入池,将池包装为向新金库支付费用的 DAO 费用池,并将全部 LP 代币发送到 0x0。金库持有 DAO 费用池的 OwnerCap,且没有借出或取出它的函数。DaoFeePoolCreated 记录金库、基础池、DAO 费用池、OwnerCap 和 LP 币种 ID。VaultCreated 中的 pool_id 为基础池,position_id 为 OwnerCap。

存入余额或 DAO 费率不匹配会使整笔交易中止。LP 凭证对应其他币种,或币种并非 9 位小数,都可能阻止迁移。预售原有的流动性部署期限及退款规则仍适用。

Aftermath 将兑换、存入和取出产生的 DAO 费用作为代币对象发送给金库地址,任何人均可收取:

aftermath::collect_fees<Meme, Quote>(vault, package_version, fee_policy, meme_fees, quote_fees)

查询该地址拥有的代币对象,用 PTB 的 Receiving<Coin<Meme>> 和 Receiving<Coin<Quote>> 输入向量构造 meme_fees 和 quote_fees。任一向量均可为空,只接收列出的代币,其他代币等待后续收取。属于其他地址的代币会在 sui::transfer 中止,其他交易平台的金库会以 EWrongVault 中止。

适用常规手续费分配:向接收方付款,持币奖励的 Quote 留供轮次使用,Meme 则支付给治理财库。若金库指定了合作伙伴,收取后照常执行合作伙伴付款。

源码:aftermath.move。完整签名和错误见生成的 llms/presale.txt。