预售合约
本指南介绍预售合约。联合曲线或合作伙伴 API 请从接入概览开始。预售的取消规则和部署基准不适用于联合曲线。
blast_presale 是独立的 Sui Move 预售包。它铸造新代币的全部供应量,接受以支付代币进行的认购,完成结算,并将流动性迁移到 Cetus 或 Bluefin 的全价格区间流动性池,或原生 Aftermath 的 50/50 池。默认允许超额认购,所有钱包按统一成交比例分配;也可启用募资硬顶,将认购金额限制在募资目标内,先到先得。它与 Blast 的联合曲线发行平台共用 ACL 和合作伙伴注册表,但两者不共享销售状态或发行逻辑。
用户和团队文档将“迁移”称为“启动交易”。
每一步都是公开的 Move 调用,多数无需特定权限:任何人均可结算、迁移、代参与者领取、收取手续费或取消逾期未启动交易的预售。本指南介绍如何从自己的应用、自动执行服务(keeper)或索引器构建这些调用。
合作伙伴只读 API
跳转到“合作伙伴只读 API”若要为前端提供预售、价格、发现和行情数据,请从合作伙伴 API开始。该部分介绍 API 密钥、支持的只读端点、分页和限流。下方 Move 指南介绍直接接入合约。
源码与参考资料
跳转到“源码与参考资料”- 源码:
blast-v2-move中的sui/presale。源码和测试是权威依据,本站负责解释。 - 从源码生成的接入参考:
llms/presale.txt。它列出所有公开函数、类型、事件和中止错误码,适合交给 AI 代理使用。 - 设计记录:ADR 0099 及决策索引中的后续修订。
模块
跳转到“模块”| 模块 | 职责 |
|---|---|
blast_presale |
Presale 对象:创建、认购、结算、领取及取消。 |
cetus、bluefin、aftermath |
交易平台适配器:创建预售、迁移及收取手续费。原生 Aftermath 额外绑定全新的 LP 币种和建池凭证。 |
presale_vault |
Vault 持有已迁移预售的 LP 仓位或团队自行锁定的仓位,并分配手续费。 |
holder_rewards |
由金库持币奖励份额提供资金的 Merkle 奖励轮次。 |
fee_policy |
Blast 费率与收款地址。 |
creation_policy |
创建时检查的白名单:支付代币类型、迁移器、合作伙伴。 |
blast_presale_domain |
配合共享 Blast ACL 使用的预售角色。 |
blast_presale_package、package_admin |
发布引导、激活、运行代次及兼容性升级权限托管。 |
venue_config |
共享 VenueConfig:Cetus 建池凭证及各场预售的池档位。 |
bps、merkle_tree、migration_math |
辅助模块。 |
对象
跳转到“对象”| 对象 | 所有权 | 用途 |
|---|---|---|
Presale<SaleToken, Quote> |
共享,每场预售一个 | 在迁移或退款前持有认购资金、已铸造供应量和条款。仅有 key 能力,必须在创建它的同一笔交易中共享。 |
PresaleCap |
创建者持有 | 领取迁移剩余代币;预售取消后可销毁。不能修改条款或转移资金。 |
Vault<Meme, Quote> |
共享,每场已迁移预售或锁定仓位一个 | 持有 Bluefin 仓位、Cetus LP 销毁凭证或原生 Aftermath DAO 费用所有者凭证,以及剩余代币和持币奖励资金。 |
Round<Meme, Quote> |
共享,每轮奖励一个 | 已发布的持币奖励 Merkle 根及其预算。 |
Vesting<T> |
共享,每笔分期支付一个 | 来自外部 blast_fun_vesting 包、不可撤销、按周期逐步解锁的安排。 |
FeePolicy、CreationPolicy、VenueConfig、PackageAdmin、PackageVersion |
共享单例 | 政策在发布时初始化;管理托管和可用代次仅在激活时共享。管理使用现有 Blast ACL。 |
交易平台模块和金库将预售代币称为 Meme,它与 SaleToken 是同一类型。
生命周期
跳转到“生命周期”创建在一笔交易中完成:交易平台的 new 返回 PresaleInitializer,设置函数记录条款,finalize 返回 Pending 状态的预售及其 PresaleCap。详见创建预售。
Pending → Open → Funded → MigratedOpen → Cancelled (settle,认购总额低于募资目标)Funded → Cancelled (cancel_unlaunched,流动性部署期限届满后)| 状态 | 允许的操作 |
|---|---|
Pending |
仅存在于创建交易中的 finalize 与 share 之间:Blast 的 set_protocol_fees,然后 share。 |
Open |
start_ms 前允许 Blast 调用 set_protocol_fees。从 start_ms 起至 end_ms 前接受认购。end_ms 起可 settle;若硬顶已生效、已达目标且选择募满即结束,则可提前结算。 |
Funded |
可随时迁移。从 end_ms + liquidity_window_ms 起可 cancel_unlaunched;提前结束时,end_ms 为实际结束时间。 |
Migrated |
claim 领取代币及超额认购退款。 |
Cancelled |
claim 领取全额退款;destroy_cap 销毁凭证。 |
流动性部署期限届满后,迁移与取消存在竞态,先执行成功的操作生效。
权限
跳转到“权限”Blast 操作员使用已获相应预售角色的 blast_acl::AdminCap。在同一笔交易中,blast_acl::sign_in<Role>(acl, admin_cap) 返回 AdminWitness<Role>,管理调用通过引用接收该见证。角色来自 blast_presale_domain,其他包中的角色不能授权预售调用。
| 角色 | 可执行的操作 |
|---|---|
FeeAdmin |
设置新预售费率、在 start_ms 前修改单场预售费率、修改金库 LP 手续费率,以及接受或移除新预售可用的合作伙伴。 |
TreasuryAdmin |
修改费用收款地址。 |
ListingAdmin |
允许或禁止新预售和金库使用某支付代币类型。 |
AdapterAdmin |
允许或禁止新预售和金库使用某迁移器见证。 |
RewardsAdmin |
发布持币奖励轮次并结算其可选 gas 预留资金。 |
UpgradeAdmin |
授权兼容性升级,并将升级提交与运行代次推进同时完成。 |
创建者的 PresaleCap 独立用于领取迁移剩余代币,也可在取消后销毁,不赋予任何管理角色。
本指南所述合约没有暂停预售、转移认购资金,或修改窗口、接收方、参与资格及接收方手续费分配的调用。当前版本化包允许兼容性升级并可改变逻辑;历史仅允许依赖升级的发布有不同限制。请核对部署记录。
其他迁移器
跳转到“其他迁移器”blast_presale::new、finalize 和 migrate 均公开,因此其他包中的模块可在 Blast 的 CreationPolicy 允许后,使用自己封闭构造的见证作为迁移器,例如 sui/vendors 中的合作伙伴包。文档中介绍的外部合作伙伴路径遵循相同预售规则,但不创建 Blast 金库:没有 Blast LP 费用、持币奖励轮次或剩余代币领取。原生 Aftermath 适配器会创建金库,见 Aftermath 接入。
Aftermath DAO 池合作伙伴模块沿用相同的初始化流程:其 new 返回 PresaleInitializer,blast_presale 设置函数配置条款,其 finalize 设置仅分配给合作伙伴财库的手续费方案、完成预售、绑定 Aftermath 建池操作、将 PresaleCap 发送给合作伙伴财库,并返回待 share 的预售。两项调用都需要该合作伙伴模块自己的 AdminCap。此路径见 llms/presale.txt。
约定
跳转到“约定”- 费率使用基点,以 10,000 为分母,通过
bps::new(value)构造。 - 时间使用 Unix 毫秒,由地址
0x6的共享Clock读取。 - 金额使用各币种的最小单位(原子单位)。
- 取整使用最大余数法,供应量、募资和手续费的每个最小单位都恰好归入一个份额。
- 错误为 Move clever errors,包含模块和常量名称。详见错误说明。
许可证
跳转到“许可证”第一方合约代码采用 Business Source License 1.1。复用源码前请阅读该许可证。