利用可能なガード
Freeze Sol Payment Guard
概要
Freeze Sol Paymentガードは、支払者にSOLの金額を請求することで、フリーズされたNFTのミントを許可します。フリーズされたNFTは、解凍されるまで転送したり、マーケットプレイスに出品したりすることはできません。
フリーズされたNFTは、以下の条件のいずれかが満たされる限り、誰でも解凍できます:
- Candy Machineがミントアウトした場合。
- Candy Machineが削除された場合。
- 設定されたフリーズ期間(最大30日間)が経過した場合。
資金は「Freeze Escrow」アカウントに転送され、ミントが開始される前にCandy Guard権限によって初期化される必要があります。すべてのフリーズされたNFTが解凍されると、資金のロックを解除し、Candy Guard権限によって設定された宛先アカウントに転送できます。
このガードのルート命令を介してFreeze Escrowアカウントの初期化、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リファレンス: create, FreezeSolPayment
ミント設定
Freeze Sol Paymentガードには以下のミント設定が含まれます:
- Destination: このガードに関連するすべての支払いを最終的に受け取るウォレットのアドレス。
- NFT Rule Set (オプション): Rule Setを持つプログラマブルNFTをミントする場合、ミントされたNFTのRule Set。
注意:SDK の助けなしで命令を構築する予定の場合、これらのミント設定およびそれ以外を命令引数と残りのアカウントの組み合わせとして提供する必要があります。詳細については、Candy GuardのプログラムドキュメントAtionを参照してください。
Freeze Sol Paymentガードでミントする
次のようにmintArgs引数を使用してFreeze Sol Paymentガードのミント設定を渡すことができます。
mintV2(umi, {
// ...
mintArgs: {
freezeSolPayment: some({ destination: umi.identity.publicKey }),
},
})
APIリファレンス: mintV2, FreezeSolPaymentMintArgs
ルート命令
Freeze Sol Paymentルート命令は以下の機能をサポートします。
Freeze Escrowの初期化
パス: initialize
Freeze Sol Paymentガードを使用する場合、ミントが開始される前にFreeze Escrowアカウントを初期化する必要があります。これにより、ガード設定のDestination属性から派生したPDAアカウントが作成されます。
Freeze Escrow PDAアカウントは、以下のようないくつかのパラメータを追跡します:
- このガードを通じてミントされたフリーズされたNFTの数。
- このガードを介して最初のフリーズされたNFTがミントされた時刻(フリーズ期間はその後からカウントを開始するため)。
このFreeze Escrowアカウントを初期化する際、ガードのルート命令に以下の引数を提供する必要があります:
- Path =
initialize: ルート命令で実行するパスを選択します。 - Destination: このガードに関連するすべての支払いを最終的に受け取るウォレットのアドレス。
- Period: フリーズ期間が持続すべき秒単位の時間。これは最大30日間(2,592,000秒)であり、このガードを介してミントされた最初のフリーズされたNFTから開始されます。フリーズ期間は、Candy Machineが決してミントアウトしなくても、フリーズされたNFTが最終的に解凍されることを保証する安全メカニズムを提供します。
- Candy Guard Authority: SignerとしてのCandy GuardアカウントのAuthority。
最後に、Freeze Escrow PDAアカウントは、このガードを通じてミントされたすべてのフリーズされたNFTの資金を受け取ります。
Freeze Escrowを初期化する
以下の例では、最大15日間のフリーズ期間でFreeze Escrowアカウントを初期化し、現在のIDをCandy Guard権限として使用しています。
route(umi, {
// ...
guard: 'freezeSolPayment',
routeArgs: {
path: 'initialize',
destination: umi.identity.publicKey,
period: 15 * 24 * 60 * 60, // 15 days.
candyGuardAuthority: umi.identity,
},
})
APIリファレンス: route, FreezeSolPaymentRouteArgsInitialize
フリーズされたNFTを解凍
パス: thaw
フリーズされたNFTは、以下の条件のいずれかが満たされる限り、誰でも解凍できます:
- Candy Machineがミントアウトした場合。
- Candy Machineが削除された場合。
- 設定されたフリーズ期間(最大30日間)が経過した場合。
Freeze Escrow内の資金はすべてのNFTが解凍されるまで転送できないため、これにより宝庫ができるだけ早くすべてのNFTを解凍するインセンティブが生まれます。
フリーズされたNFTを解凍するには、ガードのルート命令に以下の引数を提供する必要があります:
- Path =
thaw: ルート命令で実行するパスを選択します。 - Destination: このガードに関連するすべての支払いを最終的に受け取るウォレットのアドレス。
- NFT Mint: 解凍するフリーズされたNFTのミントアドレス。
- NFT Owner: 解凍するフリーズされたNFTの所有者のアドレス。
- NFT Token Standard: 解凍するフリーズされたNFTのトークン標準。
- NFT Rule Set (オプション): Rule Setを持つプログラマブルNFTを解凍する場合、解凍するフリーズされたNFTのRule Set。
フリーズされたNFTを解凍する
以下の例では、現在のIDに属するフリーズされたNFTを解凍します。
route(umi, {
// ...
guard: 'freezeSolPayment',
routeArgs: {
path: 'thaw',
destination,
nftMint: nftMint.publicKey,
nftOwner: umi.identity.publicKey,
nftTokenStandard: candyMachine.tokenStandard,
},
})
APIリファレンス: route, FreezeSolPaymentRouteArgsThaw
資金のロック解除
パス: unlockFunds
すべてのフリーズされたNFTが解凍されると、宝庫はFreeze Escrowアカウントから資金のロックを解除できます。これにより、資金が設定されたDestinationアドレスに転送されます。
資金のロックを解除するには、ガードのルート命令に以下の引数を提供する必要があります:
- Path =
unlockFunds: ルート命令で実行するパスを選択します。 - Destination: このガードに関連するすべての支払いを最終的に受け取るウォレットのアドレス。
- Candy Guard Authority: SignerとしてのCandy GuardアカウントのAuthority。
資金のロック解除
以下の例では、現在のIDをCandy Guard権限として使用してFreeze Escrowアカウントから資金のロックを解除します。
route(umi, {
// ...
guard: 'freezeSolPayment',
routeArgs: {
path: 'unlockFunds',
destination,
candyGuardAuthority: umi.identity,
},
})
APIリファレンス: route, FreezeSolPaymentRouteArgsUnlockFunds
NFTのフリーズを停止
Freeze Sol Paymentガード内でのNFTのフリーズを停止することが可能です。つまり、新しくミントされたNFTはもはやフリーズされませんが、既存のフリーズされたNFTはフリーズされたままです。
これを達成するにはいくつかの方法があり、2つのカテゴリに分けることができます:
- ☀️ 解凍可能: 既存のフリーズされたNFTは、ルート命令の
thawパスを使用して誰でも解凍できます。 - ❄️ 解凍不可: 既存のフリーズされたNFTはまだ解凍できないため、"解凍可能"条件のいずれかが満たされるまで待つ必要があります。
これを踏まえて、NFTのフリーズを停止する方法の網羅的なリストと、それぞれが既存のフリーズされたNFTの解凍を許可するかどうかを以下に示します:
- Candy Machineがミントアウトした → ☀️ 解凍可能。
- 設定されたフリーズ期間(最大30日間)が経過した → ☀️ 解凍可能。
- Candy Machineアカウントが削除された → ☀️ 解凍可能。
- Candy Guardアカウントが削除された → ❄️ 解凍不可。
- Freeze Sol Paymentガードが設定から削除された → ❄️ 解凍不可。
Freeze EscrowsとGuard Groups
様々なGuard Groups内で複数のFreeze Sol Paymentガードを使用する場合、Freeze Sol PaymentガードとFreeze Escrowアカウント間の関係を理解することが重要です。
Freeze EscrowアカウントはDestinationアドレスから派生したPDAです。これは、複数のFreeze Sol Paymentガードが同じDestinationアドレスを使用するよう設定されている場合、すべて同じFreeze Escrowアカウントを共有することを意味します。
したがって、それらは同じフリーズ期間も共有し、すべての資金が同じエスクローアカウントによって収集されます。これはまた、設定されたDestinationアドレスごとにinitializeルート命令を一度だけ呼び出す必要があることも意味します。これは、ルート命令が設定されたDestinationアドレスごとに一度だけ必要であることを意味します。unlockFundsについても同様です。thawについては、同じエスクローアカウントを共有していれば、どのラベルでも使用できます。
また、異なるDestinationアドレスを持つ複数のFreeze Sol Paymentガードを使用することも可能です。この場合、各Freeze Sol Paymentガードは独自のFreeze Escrowアカウントと独自のフリーズ期間を持ちます。
以下の例は、3つのグループに3つのFreeze Sol Paymentガードを持つCandy Machineを示しており、次のような構成になっています:
- グループ1と2は同じDestinationアドレスを共有し、したがって同じFreeze Escrowアカウントを共有します。
- グループ3は独自のDestinationアドレスを持ち、したがって独自のFreeze Escrowアカウントを持ちます。
