사용 가능한 가드

Freeze Token Payment Guard

개요

Freeze Token Payment 가드는 지불자에게 특정 민트 계정의 특정 토큰 금액을 청구하여 동결된 NFT를 민팅할 수 있게 합니다. 동결된 NFT는 해동될 때까지 전송하거나 마켓플레이스에 등록할 수 없습니다.

동결된 NFT는 다음 조건 중 하나가 충족되면 누구나 해동할 수 있습니다:

  • Candy Machine이 모두 민팅되었습니다.
  • Candy Machine이 삭제되었습니다.
  • 구성된 동결 기간(최대 30일)이 지났습니다.

토큰은 "Freeze Escrow" 계정으로 이전되며, 이 계정은 민팅이 시작되기 전에 Candy Guard 권한에 의해 초기화되어야 합니다. 모든 동결된 NFT가 해동되면 Candy Guard 권한에 의해 자금을 잠금 해제하고 구성된 대상 계정으로 이전할 수 있습니다.

이 가드의 라우트 명령어를 통해 Freeze Escrow 계정을 초기화하고, NFT를 해동하며, 자금을 잠금 해제할 수 있습니다.

가드 설정

Freeze Token Payment 가드는 다음 설정을 포함합니다:

  • Amount: 지불자에게 청구할 토큰 수입니다.
  • Mint: 지불에 사용할 SPL 토큰을 정의하는 민트 계정의 주소입니다.
  • Destination Associated Token Address (ATA): 토큰을 최종적으로 보낼 연결 토큰 계정의 주소입니다. Mint 속성과 이러한 토큰을 받을 지갑의 주소를 사용하여 Associated Token Address PDA를 찾아 이 주소를 얻을 수 있습니다.

Freeze Token Payment 가드를 사용하여 Candy Machine 설정하기

다음은 Freeze Token Payment 가드를 사용하여 Candy Machine을 생성하는 방법입니다. 이 예시에서는 Umi의 identity를 대상 지갑으로 사용합니다.

import { findAssociatedTokenPda } from "@metaplex-foundation/mpl-toolbox";
create(umi, {
// ...
guards: {
freezeTokenPayment: some({
amount: 300,
mint: tokenMint.publicKey,
destinationAta: findAssociatedTokenPda(umi, {
mint: tokenMint.publicKey,
owner: umi.identity.publicKey,
}),
}),
},
});

민트 설정

Freeze Token Payment 가드는 다음 민트 설정을 포함합니다:

  • Mint: 지불에 사용할 SPL 토큰을 정의하는 민트 계정의 주소입니다.
  • Destination Associated Token Address (ATA): 토큰을 최종적으로 보낼 연결 토큰 계정의 주소입니다.
  • NFT Rule Set (선택사항): Programmable NFT를 Rule Set과 함께 민팅하는 경우, 민팅된 NFT의 Rule Set입니다.

SDK의 도움 없이 명령어를 직접 구성하려는 경우, 이러한 민트 설정 등을 명령어 인수와 나머지 계정의 조합으로 제공해야 합니다. 자세한 내용은 Candy Guard의 프로그램 문서를 참조하세요.

Freeze Token Payment 가드를 사용하여 Candy Machine 설정하기

다음과 같이 mintArgs 인수를 사용하여 Freeze Token Payment 가드의 민트 설정을 전달할 수 있습니다.

mintV2(umi, {
// ...
mintArgs: {
freezeTokenPayment: some({
mint: tokenMint.publicKey,
destinationAta,
}),
},
});

라우트 명령어

Freeze Token Payment 라우트 명령어는 다음 기능을 지원합니다.

Freeze Escrow 초기화

경로: initialize

Freeze Token Payment 가드를 사용할 때, 민팅이 시작되기 전에 Freeze Escrow 계정을 초기화해야 합니다. 이는 가드 설정의 Destination ATA 속성에서 파생된 PDA 계정을 생성합니다.

Freeze Escrow PDA 계정은 다음과 같은 여러 매개변수를 추적합니다:

  • 이 가드를 통해 몇 개의 동결된 NFT가 민팅되었는지
  • 동결 기간이 그 시점부터 시작되므로 이 가드를 통해 첫 번째 동결된 NFT가 언제 민팅되었는지

이 Freeze Escrow 계정을 초기화할 때 가드의 라우트 명령어에 다음 인수를 제공해야 합니다:

  • Path = initialize: 라우트 명령어에서 실행할 경로를 선택합니다.
  • Mint: 지불에 사용할 SPL 토큰을 정의하는 민트 계정의 주소입니다.
  • Destination Associated Token Address (ATA): 토큰을 최종적으로 보낼 연결 토큰 계정의 주소입니다.
  • Period: 동결 기간이 지속되어야 하는 시간(초)입니다. 최대 30일(2,592,000초)이 될 수 있으며 이 가드를 통해 민팅된 첫 번째 동결된 NFT부터 시작됩니다. 동결 기간은 Candy Machine이 모두 민팅되지 않더라도 동결된 NFT를 결국 해동할 수 있도록 하는 안전 메커니즘을 제공합니다.
  • Candy Guard Authority: Signer로서 Candy Guard 계정의 권한입니다.

마지막으로, Freeze Escrow PDA 계정은 이 가드를 통해 민팅된 모든 동결된 NFT의 자금을 받습니다.

Freeze Escrow 초기화

아래 예시에서는 최대 동결 기간을 15일로 설정하여 Freeze Escrow 계정을 초기화하고 현재 identity를 Candy Guard 권한으로 사용합니다.

route(umi, {
// ...
guard: "freezeTokenPayment",
routeArgs: {
path: "initialize",
mint: tokenMint.publicKey,
destinationAta,
period: 15 * 24 * 60 * 60, // 15 days.
candyGuardAuthority: umi.identity,
},
});

동결된 NFT 해동

경로: thaw

동결된 NFT는 다음 조건 중 하나가 충족되면 누구나 해동할 수 있습니다:

  • Candy Machine이 모두 민팅되었습니다.
  • Candy Machine이 삭제되었습니다.
  • 구성된 동결 기간(최대 30일)이 지났습니다.

Freeze Escrow의 토큰은 모든 NFT가 해동될 때까지 이전할 수 없으므로, 이는 재무부가 가능한 한 빨리 모든 NFT를 해동하도록 하는 인센티브를 만듭니다.

동결된 NFT를 해동하려면 가드의 라우트 명령어에 다음 인수를 제공해야 합니다:

  • Path = thaw: 라우트 명령어에서 실행할 경로를 선택합니다.
  • Mint: 지불에 사용할 SPL 토큰을 정의하는 민트 계정의 주소입니다.
  • Destination Associated Token Address (ATA): 토큰을 최종적으로 보낼 연결 토큰 계정의 주소입니다.
  • NFT Mint: 해동할 동결된 NFT의 민트 주소입니다.
  • NFT Owner: 해동할 동결된 NFT의 소유자 주소입니다.
  • NFT Token Standard: 해동할 동결된 NFT의 토큰 표준입니다.
  • NFT Rule Set (선택사항): Rule Set이 있는 Programmable NFT를 해동하는 경우, 동결된 NFT의 Rule Set입니다.

Freeze Token Payment 가드를 사용하여 Candy Machine 설정하기

아래 예시에서는 현재 identity에 속한 동결된 NFT를 해동합니다.

route(umi, {
// ...
guard: "freezeTokenPayment",
routeArgs: {
path: "thaw",
mint: tokenMint.publicKey,
destinationAta,
nftMint: nftMint.publicKey,
nftOwner: umi.identity.publicKey,
nftTokenStandard: candyMachine.tokenStandard,
},
});

자금 잠금 해제

경로: unlockFunds

모든 동결된 NFT가 해동되면 재무부는 Freeze Escrow 계정에서 자금을 잠금 해제할 수 있습니다. 이렇게 하면 토큰이 구성된 Destination ATA 주소로 이전됩니다.

자금을 잠금 해제하려면 가드의 라우트 명령어에 다음 인수를 제공해야 합니다:

  • Path = unlockFunds: 라우트 명령어에서 실행할 경로를 선택합니다.
  • Mint: 지불에 사용할 SPL 토큰을 정의하는 민트 계정의 주소입니다.
  • Destination Associated Token Address (ATA): 토큰을 최종적으로 보낼 연결 토큰 계정의 주소입니다.
  • Candy Guard Authority: Signer로서 Candy Guard 계정의 권한입니다.

Freeze Token Payment 가드를 사용하여 Candy Machine 설정하기

아래 예시에서는 현재 identity를 Candy Guard 권한으로 사용하여 Freeze Escrow 계정에서 자금을 잠금 해제합니다.

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

API 참조: route, freezeTokenPaymentRouteArgsUnlockFunds

NFT 동결 중지

Freeze Token Payment 가드 내에서 NFT 동결을 중지할 수 있습니다. 즉, 새로 민팅된 NFT는 더 이상 동결되지 않지만 기존 동결된 NFT는 동결된 상태로 유지됩니다.

이를 달성하는 여러 방법이 있으며, 두 가지 범주로 나눌 수 있습니다:

  • ☀️ 해동 가능: 기존 동결된 NFT는 라우트 명령어의 thaw 경로를 사용하여 누구나 해동할 수 있습니다.
  • ❄️ 해동 불가: 기존 동결된 NFT는 아직 해동할 수 없으며 "해동 가능" 조건 중 하나가 충족될 때까지 기다려야 합니다.

이를 염두에 두고 NFT 동결을 중지하는 방법과 각 방법이 기존 동결된 NFT의 해동을 허용하는지 여부에 대한 전체 목록은 다음과 같습니다:

  • Candy Machine이 모두 민팅됨 → ☀️ 해동 가능.
  • 구성된 동결 기간(최대 30일)이 지남 → ☀️ 해동 가능.
  • Candy Machine 계정이 삭제됨 → ☀️ 해동 가능.
  • Candy Guard 계정이 삭제됨 → ❄️ 해동 불가.
  • Freeze Token Payment 가드가 설정에서 제거됨 → ❄️ 해동 불가.

Freeze Escrow와 가드 그룹

다양한 가드 그룹 내에서 여러 Freeze Token Payment 가드를 사용할 때 Freeze Token Payment 가드와 Freeze Escrow 계정 간의 관계를 이해하는 것이 중요합니다.

Freeze Escrow 계정은 Destination 주소에서 파생된 PDA입니다. 즉, 여러 Freeze Token Payment 가드동일한 Destination 주소를 사용하도록 구성되면 모두 동일한 Freeze Escrow 계정을 공유합니다.

따라서 동일한 동결 기간을 공유하고 모든 자금이 동일한 에스크로 계정에 수집됩니다. 이는 구성된 Destination 주소당 initialize 라우트 명령어를 한 번만 호출하면 된다는 것을 의미합니다. 이는 라우트 명령어가 구성된 Destination 주소당 한 번만 필요함을 의미합니다. unlockFunds도 마찬가지입니다. thaw의 경우 동일한 에스크로 계정을 공유하는 한 원하는 레이블을 사용할 수 있습니다.

다른 Destination 주소를 가진 여러 Freeze Token Payment 가드를 사용하는 것도 가능합니다. 이 경우 각 Freeze Token Payment 가드는 자체 Freeze Escrow 계정과 자체 동결 기간을 갖습니다.

아래 예시는 세 그룹에 세 개의 Freeze Token Payment 가드가 있는 Candy Machine을 보여줍니다:

  • 그룹 1과 2는 동일한 Destination 주소를 공유하므로 동일한 Freeze Escrow 계정을 공유합니다.
  • 그룹 3은 자체 Destination 주소를 가지므로 자체 Freeze Escrow 계정을 갖습니다.