本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
OpenPositionV2 或 OpenPositionWithToken22Nft 且至少一个底层金库铸币权的冻结权限来自硬编码的受限发行人列表时,才会冻结它。
集成者速览
- 新头寸 NFT 铸币权具有冻结权限,但默认不冻结。
OpenPosition、OpenPositionV2和OpenPositionWithToken22Nft将头寸的pool_state设置为铸币权冻结权限。铸币权在单个 NFT 铸造后仍被移除。 - 冻结需要 V2 路径加发行人匹配。
OpenPositionV2和OpenPositionWithToken22Nft检查vault_0_mint.freeze_authority和vault_1_mint.freeze_authority。仅当至少一个与程序列表匹配时,新 NFT 账户才会被冻结。不匹配时,它保持解冻和可转账状态。 - 冻结意味着绑定到所有者。 SPL Token 会以其原生
AccountFrozen错误拒绝 NFT 转账和代币账户所有者变更。当 NFT 所有者签名时,增加/减少流动性和费用/奖励收集继续有效。 - 关闭仍然可用。
ClosePosition检测冻结的 NFT 账户,使用池 PDA 解冻它,然后原子性地销毁 NFT 并关闭头寸。 - 冻结关闭需要一个额外账户。 客户端必须将
personal_position.pool_id作为第一个剩余账户追加。缺少它会返回 CLMMAccountLack;传递错误的池会返回NotApproved。 - 现有头寸不受影响。 此更新不会追溯更改 NFT 铸币权或冻结现有代币账户。
- 无 CLMM 状态布局或声明的 IDL 账户列表变更。
PoolState、PersonalPositionState和指令参数保持字节兼容。关闭路径要求通过remaining_accounts传递。
触发逻辑
程序在开仓时评估两个金库铸币权:reference/program-addresses。
检查仅在提供金库铸币权账户时在共享开仓处理程序中运行。这意味着:
头寸 NFT 权限变更
在此更新之前,新创建的经典 SPL 头寸 NFT 铸币权不保留冻结权限。更新后,每个新头寸 NFT 铸币权都将其池命名为冻结权限,包括普通池中的头寸。仅此权限设置不会冻结 NFT 代币账户;普通和不匹配的头寸保持解冻。 使用池 PDA 而非全局管理员或发行人密钥将权限范围限制在一个池。外部方无法以 PDA 身份签名,CLMM 不公开任何通用指令来冻结或解冻任意头寸账户。新代码仅在两个地方使用该权限:- 当底层发行人检查匹配时,铸造后立即冻结。
- 在
ClosePosition期间销毁前立即解冻。
ClosePosition 迁移
六个声明的账户不变。对于冻结的 NFT,将池作为第一个剩余账户添加:
PoolState 前验证密钥,派生池签名者种子,并执行:
兼容性矩阵
未引入新的 CLMM 自定义错误变体或数值移位。SPL Token 的原生
AccountFrozen 错误拒绝转账或所有者变更尝试。
更新的页面
products/clmm/overview— 发布摘要和受限可转账性注意事项。products/clmm/ticks-and-positions— 权限模型、触发器、所有者能力和关闭迁移警告。products/clmm/accounts— 头寸 NFT 铸币权和生命周期行为。products/clmm/instructions— 开仓后置条件和冻结ClosePosition剩余账户路径。products/clmm/code-demos— 直接 Anchor 关闭示例和固定 SDK 警告。user-flows/add-remove-liquidity— 用户面向的受限头寸行为。user-flows/burn-and-earn— 冻结头寸无法转账到锁定托管。security/oracle-and-token-risks/security/attack-vectors— 发行人和转账风险边界。reference/token-2022-support— 池白名单和头寸托管之间的区别。reference/error-codes— 扩展的AccountLack和NotApproved原因。reference/program-addresses— 受限发行人权限匹配密钥。reference/fee-comparison/reference/glossary— 可转账性例外。
- 预发布 CLMM 分支
feat/position-nft-freeze,提交ecb157760776f83f97507fa78c6e32cfb30d92a9。 - 提交
2e95310(受限发行人 NFT 冻结)和ecb1577(池范围冻结权限),与master的51fdba2比较。 instructions/{open_position,open_position_v2,open_position_with_token22_nft,close_position}.rs和util/token.rs下的程序源。position-nft-freeze.test.ts,涵盖普通可转账性、冻结转账/所有者变更拒绝和 V2 加 Token-2022 解冻前关闭流。

