사용 가능한 가드

Freeze Sol Payment Guard

개요

Freeze Sol Payment 가드는 지불자에게 SOL로 금액을 청구하여 동결된 Asset의 민팅을 허용합니다. 동결된 Asset은 해제될 때까지 전송되거나 마켓플레이스에 상장될 수 없습니다.

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

  • Core Candy Machine이 완전히 민팅되었을 때
  • Core Candy Machine이 삭제되었을 때
  • 구성된 동결 기간 — 최대 30일 — 이 지났을 때

자금은 민팅이 시작되기 전에 Candy Guard 권한자에 의해 초기화되어야 하는 "Freeze Escrow" 계정으로 전송됩니다. 모든 동결된 Asset이 해제되면, Candy Guard 권한자에 의해 자금이 잠금 해제되어 구성된 목적지 계정으로 전송될 수 있습니다.

이 가드의 route instruction을 통해 Freeze Escrow 계정을 초기화하고, Asset을 해제하고, 자금을 잠금 해제할 수 있습니다.

가드 설정

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 References: create, FreezeSolPayment

민팅 설정

Freeze Sol Payment 가드에는 다음 민팅 설정이 포함됩니다:

  • Destination: 이 가드와 관련된 모든 지불을 최종적으로 받을 지갑의 주소입니다.

참고로, SDK의 도움 없이 직접 지시문을 구성할 계획이라면, 이러한 민팅 설정과 추가 항목들을 지시문 인수와 나머지 계정의 조합으로 제공해야 합니다. 자세한 내용은 Candy Guard의 프로그램 문서를 참조하세요.

Freeze Sol Payment 가드로 민팅하기

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

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

API References: mintV1, FreezeSolPaymentMintArgs

Route Instruction

Freeze Sol Payment route instruction은 다음 기능들을 지원합니다.

Freeze Escrow 초기화

Path: initialize

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

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

  • 이 가드를 통해 얼마나 많은 동결된 Asset이 민팅되었는지
  • 이 가드를 통해 첫 번째 동결된 Asset이 언제 민팅되었는지 (동결 기간이 그 이후부터 시작되므로)

이 Freeze Escrow 계정을 초기화할 때는 가드의 route instruction에 다음 인수를 제공해야 합니다:

  • Path = initialize: route instruction에서 실행할 경로를 선택합니다.
  • Destination: 이 가드와 관련된 모든 지불을 최종적으로 받을 지갑의 주소입니다.
  • Period: 동결 기간이 지속되어야 하는 초 단위의 시간입니다. 이는 최대 30일(2,592,000초)이 될 수 있으며, 이 가드를 통해 민팅된 첫 번째 동결된 Asset부터 시작됩니다. 동결 기간은 Candy Machine이 완전히 민팅되지 않더라도 동결된 Asset이 결국 해제될 수 있도록 하는 안전 메커니즘을 제공합니다.
  • Candy Guard Authority: Candy Guard 계정의 권한자가 서명자로 포함되어야 합니다.

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

Freeze Escrow 초기화

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

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

API References: route, FreezeSolPaymentRouteArgsInitialize

동결된 Asset 해제

Path: thaw

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

  • Candy Machine이 완전히 민팅되었을 때
  • Candy Machine이 삭제되었을 때
  • 구성된 동결 기간 — 최대 30일 — 이 지났을 때

Freeze Escrow의 자금은 모든 Asset이 해제될 때까지 양도할 수 없으므로, 가능한 한 빨리 모든 Asset을 해제하도록 하는 인센티브가 treasury에 생깁니다.

동결된 Asset을 해제하려면 가드의 route instruction에 다음 인수를 제공해야 합니다:

  • Path = thaw: route instruction에서 실행할 경로를 선택합니다.
  • Destination: 이 가드와 관련된 모든 지불을 최종적으로 받을 지갑의 주소입니다.
  • Asset Address: 해제할 동결된 Asset의 민트 주소입니다.
  • Asset Owner: 해제할 동결된 Asset의 소유자 주소입니다.

동결된 Asset 해제

아래 예제에서는 현재 identity에 속한 동결된 Asset을 해제합니다.

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

API References: route, FreezeSolPaymentRouteArgsThaw

자금 잠금 해제

Path: unlockFunds

모든 동결된 Asset이 해제되면, treasury는 Freeze Escrow 계정에서 자금을 잠금 해제할 수 있습니다. 이는 자금을 구성된 Destination 주소로 전송합니다.

자금을 잠금 해제하려면 가드의 route instruction에 다음 인수를 제공해야 합니다:

  • Path = unlockFunds: route instruction에서 실행할 경로를 선택합니다.
  • Destination: 이 가드와 관련된 모든 지불을 최종적으로 받을 지갑의 주소입니다.
  • Candy Guard Authority: Candy Guard 계정의 권한자가 서명자로 포함되어야 합니다.

자금 잠금 해제

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

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

API References: route, FreezeSolPaymentRouteArgsUnlockFunds

Asset 동결 중단

Freeze Sol Payment 가드 내에서 Asset의 동결을 중단하는 것이 가능합니다. 즉, 새로 민팅된 Asset은 더 이상 동결되지 않지만 기존 동결된 Asset은 동결 상태를 유지합니다.

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

  • ☀️ 해제 가능: 기존 동결된 Asset은 route instruction의 thaw 경로를 사용하여 누구나 해제할 수 있습니다.
  • ❄️ 해제 불가: 기존 동결된 Asset은 아직 해제할 수 없으며 "해제 가능" 조건 중 하나가 충족될 때까지 기다려야 합니다.

이를 염두에 두고, Asset 동결을 중단하는 모든 방법의 목록과 각각이 기존 동결된 Asset의 해제를 허용하는지 여부는 다음과 같습니다:

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

Freeze Escrow와 가드 그룹

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

Freeze Escrow 계정은 Destination 주소에서 파생된 PDA입니다. 이는 여러 Freeze Sol Payment 가드같은 Destination 주소를 사용하도록 구성된 경우, 모두 같은 Freeze Escrow 계정을 공유한다는 의미입니다.

따라서 같은 동결 기간을 공유하고 모든 자금이 같은 escrow 계정에 의해 수집됩니다. 이는 또한 구성된 Destination 주소당 한 번만 initialize route instruction을 호출하면 된다는 것을 의미합니다. 이는 route instruction이 구성된 Destination 주소당 한 번만 필요하다는 것을 의미합니다. unlockFunds에 대해서도 마찬가지입니다. thaw의 경우 같은 escrow 계정을 공유한다면 원하는 라벨을 사용할 수 있습니다.

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

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

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