목차
- Metaplex Candy Machine
- Authority
- Metaplex Certified Collections
- Item Settings
Metaplex Candy Machine
현재 Metaplex Candy Machine은 솔라나에서 NFT를 Mint하기 위해 사용됩니다. 이는 솔라나 생태계에서 가장 잘 알려진 NFT 프로젝트로, 2022년 9월 기준 솔라나 네트워크에 있는 NFT들 중 78%가 Metaplex Candy Machine을 통해 발행되었습니다.
NFT 생성자는 Candy Machine을 생성하고 소비자는 이를 통해 NFT를 소비하는 구조라고 볼 수 있습니다. Cnady Machine을 만들 때, 생성자가 누구인지, 총 공급량이 얼마인지, 심볼이 무엇인지 등에 대한 설정을 합니다. 이러한 설정 값들은 NFT에 들어갈 공통 값으로 사용됩니다. 이제 실제로 어떤 NFT가 발행될지를 결정하기 위해 Candy Machine에 item들을 넣어야 합니다.
각 item은 NFT의 이름과 NFT의 메타데이터를 가리키는 uri로 이루어져 있습니다. 여기까지 NFT를 발행하기 위한 준비가 된 것이며, Candy Machine이 특정 조건을 만족하면 사용자는 NFT를 발행할 수 있습니다. 추가로 Candy Machine의 Minting 조건을 설정할 수 있는 Candy Guards가 존재합니다. 이는 NFT를 발행할 때 시작 일, 발행 비용 등과 같은 조건을 설정합니다.
이 글은 Reference 문서를 해석해 정리한 것입니다.
Authority
먼저, 가장 중요한 설정은 Authority로 Candy Machine을 업데이트 하거나 아이템을 등록, 삭제하는 등의 관리 주체를 설정하는 값입니다. 추가로 Mint 과정을 위해 사용되는 Mint Authority 값이 존재합니다. Candy Guard 없이 만들어진다면 여기 설정된 Wallet만 Mint 할 수 있고, Candy Guard 가 설정된 경우 Candy Guard의 주소가 설정됩니다. Mint Authority 값은 기본적으로 Candy Guard 주소값이 설정되고, Authority 값은 현재 Wallet이 설정되지만 아래처럼 명시할 수도 있습니다.
import { Keypair } from "@solana/web3.js";
const myCustomAuthority = Keypair.generate();
const candyMachineSettings = {
authority: myCustomAuthority,
};
공통 설정 값
발행되는 NFT들이 공통적인 속성을 공유하기 위해 아래와 같은 값들을 설정합니다.
- Seller Fee Basis Points. ( 150 => 1.50% )
- Symbol.
- Max Edition Supply.
- Is Mutable.
- Creators.
아래는 위 값들 설정에 대한 코드 예시 입니다.
import { toBigNumber } from "@metaplex-foundation/js";
import { Keypair } from "@solana/web3.js";
const creatorA = Keypair.generate();
const creatorB = Keypair.generate();
const candyMachineSettings = {
sellerFeeBasisPoints: 200,
symbol: "MYPROJECT",
maxEditionSupply: toBigNumber(0),
isMutable: true,
creators: [
{ address: creatorA.publicKey, share: 50 },
{ address: creatorB.publicKey, share: 50 },
],
};
Metaplex Certified Collections
각각의 Candy Machine은 Metaplex Certified Collection(MCC)라고 불리는 특별한 NFT와 연관되어 있습니다. Collection NFT는 NFT들을 묶는 역할을 합니다. Collection NFT를 업데이트 하기 위해서는 Collection's Update Authority가 필요합니다.
아래는 Candy Machine을 만들거나 업데이트할 때 collection
속성을 사용하는 예입니다.
import { Keypair } from "@solana/web3.js";
// Create the Collection NFT.
const collectionAuthority = Keypair.generate();
const { nft: collectionNft } = await metaplex.nfts().create({
name: "My Collection NFT",
uri: "https://example.com/path/to/some/json/metadata.json",
sellerFeeBasisPoints: 0,
isCollection: true,
updateAuthority: collectionAuthority,
});
// Pass the Collection NFT and its authority in the settings.
const candyMachineSettings = {
collection: {
address: collectionNft.address,
updateAuthority: collectionAuthority,
},
};
Item Settings
설정 값 중 itemsAvailable
속성은 Candy Machine에서 발행할 수 있는 NFT의 총 개수를 설정합니다.
import { toBigNumber } from "@metaplex-foundation/js";
const candyMachineSettings = {
itemsAvailable: toBigNumber(500),
};
또, Item 들이 Candy Machine에 어떻게 설정될지를 결정하는 두 가지 속성이 있습니다.
- Config Line Settings.
- Hidden Settings.
위 두 속성 중에 정확히 하나를 선택해야 하고 하나는 비워둬야 합니다. 둘 중 하나를 사용해 Candy Machine이 만들어지고 나면 변경할 수 없고, Config Line Settings 속성을 사용하면 itemsAvailable
속성 또한 업데이트 할 수 없습니다.
일반적으로 NFT 속성들을 지정하고 발행하기 위해 Config Line Settings를 사용하고, Hide-and-reveal NFT drop을 위해 Hidden Settings을 사용합니다. Hidden Settings는 생성자가 소비자가 어떤 NFT를 받는지에 대한 내용을 망칠 수 있는 문제를 해결하기 위한 방안입니다. 자세한 내용은 References를 참고해주세요.
아래는 Config Line Settings과 Hidden Settings의 예제 코드입니다.
Config Line Settings
const candyMachineSettings = {
itemSettings: {
type: "configLines",
prefixName: "My NFT Project #$ID+1$",
nameLength: 0,
prefixUri: "https://arweave.net/",
uriLength: 43,
isSequential: false,
},
};
Hidden Settings
const candyMachineSettings = {
itemSettings: {
type: "hidden",
name: "My NFT Project #$ID+1$",
uri: "https://example.com/path/to/teaser.json",
hash: hashOfTheFileThatMapsUris,
},
};
References
'Dev > Blockchain' 카테고리의 다른 글
[Metaplex Candy Machine] #3. Candy Machine에 Item 넣기 (0) | 2023.04.13 |
---|---|
[Metaplex Candy Machine] #2. Candy Machine 관리하기 (0) | 2023.04.13 |
[Solana - Native vs Anchor] #3. Account 생성하기 (0) | 2022.10.21 |
[Solana - Native vs Anchor] #2. Account 확인하기 (0) | 2022.10.20 |
[Solana - Native vs Anchor] #1. Hello Solana (0) | 2022.10.14 |