可用守卫

Freeze Sol Payment 守卫

概述

Freeze Sol Payment 守卫允许通过向付款人收取一定数量的 SOL 来铸造冻结的 NFT。冻结的 NFT 在解冻之前无法转移或在任何市场上架。

冻结的 NFT 可以被任何人解冻,只要满足以下条件之一:

  • Candy Machine 已售罄。
  • Candy Machine 已被删除。
  • 配置的冻结期——最长可达 30 天——已过。

资金会转移到一个"冻结托管"账户,该账户必须在铸造开始之前由 Candy Guard 权限初始化。一旦所有冻结的 NFT 都被解冻,Candy Guard 权限可以解锁资金并将其转移到配置的目标账户。

您可以通过此守卫的 route 指令初始化冻结托管账户、解冻 NFT 和解锁资金。

守卫设置

Freeze Sol Payment 守卫包含以下设置:

  • Lamports:向付款人收取的 SOL 数量(或 lamports)。
  • Destination(目标):最终应接收与此守卫相关的所有付款的钱包地址。

使用 Freeze Sol Payment 守卫设置 Candy Machine

create(umi, {
// ...
guards: {
freezeSolPayment: some({
lamports: sol(1.5),
destination: umi.identity.publicKey,
}),
},
})

API 参考:createFreezeSolPayment

铸造设置

Freeze Sol Payment 守卫包含以下铸造设置:

  • Destination(目标):最终应接收与此守卫相关的所有付款的钱包地址。
  • NFT Rule Set(可选):铸造的 NFT 的规则集,如果我们正在铸造带有规则集的可编程 NFT。

请注意,如果您计划在没有我们 SDK 帮助的情况下构建指令,您需要提供这些铸造设置以及更多作为指令参数和剩余账户的组合。有关更多详细信息,请参阅 Candy Guard 程序文档

使用 Freeze Sol Payment 守卫铸造

您可以使用 mintArgs 参数传递 Freeze Sol Payment 守卫的铸造设置,如下所示。

mintV2(umi, {
// ...
mintArgs: {
freezeSolPayment: some({ destination: umi.identity.publicKey }),
},
})

API 参考:mintV2FreezeSolPaymentMintArgs

Route 指令

Freeze Sol Payment route 指令支持以下功能。

初始化冻结托管

路径:initialize

使用 Freeze Sol Payment 守卫时,我们必须在铸造开始之前初始化冻结托管账户。这将创建一个从守卫设置的 Destination 属性派生的 PDA 账户。

冻结托管 PDA 账户将跟踪几个参数,例如:

  • 通过此守卫铸造了多少冻结的 NFT。
  • 第一个冻结的 NFT 是何时通过此守卫铸造的,因为冻结期从那时开始计算。

初始化此冻结托管账户时,我们必须向守卫的 route 指令提供以下参数:

  • Path = initialize:选择要在 route 指令中执行的路径。
  • Destination(目标):最终应接收与此守卫相关的所有付款的钱包地址。
  • Period(期限):冻结期应持续的时间(以秒为单位)。这最多可以是 30 天(2,592,000 秒),它将从通过此守卫铸造的第一个冻结 NFT 开始计算。冻结期提供了一种安全机制,确保即使 Candy Machine 永远不会售罄,冻结的 NFT 最终也可以被解冻。
  • Candy Guard Authority:作为签名者的 Candy Guard 账户权限。

最后但同样重要的是,冻结托管 PDA 账户将接收通过此守卫铸造的所有冻结 NFT 的资金。

初始化冻结托管

在下面的示例中,我们使用最长 15 天的冻结期初始化冻结托管账户,并使用当前身份作为 Candy Guard 权限。

route(umi, {
// ...
guard: 'freezeSolPayment',
routeArgs: {
path: 'initialize',
destination: umi.identity.publicKey,
period: 15 * 24 * 60 * 60, // 15 天。
candyGuardAuthority: umi.identity,
},
})

API 参考:routeFreezeSolPaymentRouteArgsInitialize

解冻冻结的 NFT

路径:thaw

冻结的 NFT 可以被任何人解冻,只要满足以下条件之一:

  • Candy Machine 已售罄。
  • Candy Machine 已被删除。
  • 配置的冻结期——最长可达 30 天——已过。

请注意,由于冻结托管中的资金在所有 NFT 解冻之前无法转移,这激励国库尽快解冻所有 NFT。

要解冻冻结的 NFT,我们必须向守卫的 route 指令提供以下参数:

  • Path = thaw:选择要在 route 指令中执行的路径。
  • Destination(目标):最终应接收与此守卫相关的所有付款的钱包地址。
  • NFT Mint:要解冻的冻结 NFT 的铸币地址。
  • NFT Owner:要解冻的冻结 NFT 所有者的地址。
  • NFT Token Standard:要解冻的冻结 NFT 的代币标准。
  • NFT Rule Set(可选):要解冻的冻结 NFT 的规则集,如果我们正在解冻带有规则集的可编程 NFT。

解冻冻结的 NFT

在下面的示例中,我们解冻属于当前身份的冻结 NFT。

route(umi, {
// ...
guard: 'freezeSolPayment',
routeArgs: {
path: 'thaw',
destination,
nftMint: nftMint.publicKey,
nftOwner: umi.identity.publicKey,
nftTokenStandard: candyMachine.tokenStandard,
},
})

API 参考:routeFreezeSolPaymentRouteArgsThaw

解锁资金

路径:unlockFunds

一旦所有冻结的 NFT 都被解冻,国库可以从冻结托管账户解锁资金。这将把资金转移到配置的目标地址。

要解锁资金,我们必须向守卫的 route 指令提供以下参数:

  • Path = unlockFunds:选择要在 route 指令中执行的路径。
  • Destination(目标):最终应接收与此守卫相关的所有付款的钱包地址。
  • Candy Guard Authority:作为签名者的 Candy Guard 账户权限。

解锁资金

在下面的示例中,我们使用当前身份作为 Candy Guard 权限从冻结托管账户解锁资金。

route(umi, {
// ...
guard: 'freezeSolPayment',
routeArgs: {
path: 'unlockFunds',
destination,
candyGuardAuthority: umi.identity,
},
})

API 参考:routeFreezeSolPaymentRouteArgsUnlockFunds

停止冻结 NFT

可以停止 Freeze Sol Payment 守卫内的 NFT 冻结。换句话说,新铸造的 NFT 将不再被冻结,但现有的冻结 NFT 将保持冻结状态

有几种方法可以实现这一点,可以分为两类:

  • ☀️ 可解冻:现有的冻结 NFT 可以被任何人使用 route 指令的 thaw 路径解冻。
  • ❄️ 不可解冻:现有的冻结 NFT 尚无法解冻,我们必须等待满足"可解冻"条件。

考虑到这一点,以下是停止冻结 NFT 的详尽方法列表,以及每种方法是否允许解冻现有的冻结 NFT:

  • Candy Machine 已售罄 → ☀️ 可解冻
  • 配置的冻结期——最长可达 30 天——已过 → ☀️ 可解冻
  • Candy Machine 账户已删除 → ☀️ 可解冻
  • Candy Guard 账户已删除 → ❄️ 不可解冻
  • Freeze Sol Payment 守卫已从设置中移除 → ❄️ 不可解冻

冻结托管和守卫组

在各种守卫组中使用多个 Freeze Sol Payment 守卫时,了解 Freeze Sol Payment 守卫和冻结托管账户之间的关系非常重要。

冻结托管账户是从目标地址派生的 PDA。这意味着如果多个 Freeze Sol Payment 守卫配置为使用相同的目标地址,它们都将共享相同的冻结托管账户

因此,它们也将共享相同的冻结期,所有资金将由同一个托管账户收集。这也意味着,我们只需要为每个配置的目标地址调用一次 initialize route 指令。这意味着每个配置的目标地址只需要一次 route 指令。unlockFunds 也是如此。要 thaw,您可以使用任何标签,只要这些标签共享相同的托管账户。

也可以使用具有不同目标地址的多个 Freeze Sol Payment 守卫。在这种情况下,每个 Freeze Sol Payment 守卫将拥有自己的冻结托管账户和自己的冻结期。

下面的示例说明了一个 Candy Machine,它在三个组中有三个 Freeze Sol Payment 守卫,使得:

  • 组 1 和组 2 共享相同的目标地址,因此共享相同的冻结托管账户。
  • 组 3 有自己的目标地址,因此有自己的冻结托管账户。
Previous
End Date