목차
- Metaplex Candy Machine 이용해 NFT Minting 하기
- Init Umi
- Mint Collection NFT
- Create CandyMachine
- Upload and Insert Item
- Mint NFT from CandyMachine
Metaplex Candy Machine 이용해 NFT Minting 하기
이전에 Metaplex Doc을 통해 Candy Machine에 대해 공부했었습니다. 이번에는 학습한 내용을 바탕으로 Metaplex Candy Machine을 통해 NFT를 발행하는 과정을 살펴보겠습니다. 예제 코드에서는 업데이트된 Doc 예제에 있는 Umi 라이브러리를 사용할 것입니다.
자세한 내용은 References에 있는 전체 예제코드와 공식 문서를 확인해 주세요.
Init Umi
Umi는 Solana Program들과 통신하기 위해 만들어진 Javascript Framework입니다. Umi에는 핵심 인터페이스들이 정의되어 있고, 사용자들은 필요에 따라 Plugin 형태로 구현체들을 결정해 사용할 수 있습니다. 우리는 Umi를 사용해 Metaplex CandyMachine을 만들고 NFT를 발행하는 Typescript 코드를 작성할 겁니다.
먼저, Umi를 초기화합니다.
const umi = createUmi('https://api.devnet.solana.com')
.use(mplCandyMachine())
.use(nftStorageUploader());
creatUmi
를 통해 endpoint를 devnet으로 설정하고, mplCandyMachine과 nftStorageUploader 두 가지의 UmiPlugin을 지정해 Umi 객체를 하나 생성합니다.
그리고 아래와 같이 Umi 객체의 identity를 설정합니다. 이때, keypair는 local에 있는 secret 파일로부터 만들었습니다.
const keypair = umi.eddsa.createKeypairFromSecretKey(new Uint8Array(secret));
const umiSigner = createSignerFromKeypair(umi, keypair);
umi.use(signerIdentity(umiSigner));
Mint Collection NFT
Candy Machine을 생성하기 전에 Collection NFT를 발행합니다. 아래 코드에서 metadatUri 값은 미리 생성한 URI 정보입니다.
const collectionMint = generateSigner(umi);
await createNft(umi, {
mint: collectionMint,
authority: updateAuth,
name: "Taegit's Collection NFT",
uri: metadataUri,
sellerFeeBasisPoints: percentAmount(9.99, 2), // 9.99%
isCollection: true,
}).sendAndConfirm(umi);
Create CandyMachine
앞서 발행한 Collection NFT 정보를 포함해서 CandyMachine 설정 정보를 입력하고 CandyMachine을 생성합니다. CandyMachine 설정 정보에 대한 자세한 내용은 References를 확인해 주세요.
const candyMachineKeypair = generateSigner(umi);
const instruction = await create(umi, {
candyMachine: candyMachineKeypair,
collectionMint: collectionMintPubkey,
tokenStandard: TokenStandard.NonFungible,
collectionUpdateAuthority: umi.identity,
itemsAvailable: 3,
sellerFeeBasisPoints: percentAmount(10, 2),
creators: [
{
address: umi.identity.publicKey,
verified: true,
percentageShare: 100,
},
],
symbol: 'Taegit',
configLineSettings: some({
prefixName: '',
nameLength: 32,
prefixUri: '',
uriLength: 200,
isSequential: false,
}),
});
await transactionBuilder().add(instruction).sendAndConfirm(umi);
Upload and Insert Item
앞서 CandyMachine의 ItemAvailable 값을 3으로 설정했습니다. 이제 각 Item에 대한 메타데이터를 업로드하고 CandyMachine에 3개의 Item을 넣어야 합니다. Item을 모두 넣기 전까지는 NFT를 발행할 수 없습니다.
const fileBuf = fs.readFileSync(filePath + fileName);
const genericFile = createGenericFile(fileBuf, fileName);
const [fileUri] = await umi.uploader.upload([genericFile]);
const uri = await umi.uploader.uploadJson({
name: "NFT " + fileName,
description: "",
image: fileUri,
});
먼저, 임의의 경로에 넣어둔 Image 파일을 업로드합니다. 다음으로 업로드된 Image File의 Uri 값을 포함해 Metadata를 만들어 업로드합니다.
이제 아래와 같이 업로드한 Metadata의 Uri를 포함하는 Item 정보를 CandyMachine에 추가합니다.
const txResult = await addConfigLines(umi, {
candyMachine: candyMachineAddress,
index: 0,
configLines: [
{ name: "Taegit NFT #1", uri: metadatUri[0] },
{ name: "Taegit NFT #2", uri: metadatUri[1] },
{ name: "Taegit NFT #3", uri: metadatUri[2] },
],
}).sendAndConfirm(umi);
여기까지 CandyMachine을 생성하고 NFT로 발행할 Item들을 추가했습니다. 이제 CandyMachine으로부터 NFT를 발행하는 절차만 남았습니다.
Mint NFT from CandyMachine
NFT를 발행하기 위해서 mintV2를 사용하는데요. 아래와 같이 CandyMachine의 주소와 Collection 정보를 입력하고 NFT를 발행할 수 있습니다.
const nftMint = generateSigner(umi);
const txResult = await transactionBuilder()
.add(setComputeUnitLimit(umi, { units: 800_000 }))
.add(
mintV2(umi, {
candyMachine: candyMachineAddress,
nftMint: nftMint,
collectionMint: collectionNftAddress,
collectionUpdateAuthority: umi.identity.publicKey,
})
).sendAndConfirm(umi);
이번 글에서는 CandyMachine을 생성하고 NFT를 발행하는 전체 흐름을 알아보았는데요. 각각 절차에 대한 상세한 내용은 이전글들과 References를 참고해 주세요. 글에서 사용한 모든 예제는 아래 참고자료에서 확인해 볼 수 있고, 예제 코드에는 제가 미리 생성한 정보들이 하드코딩 되어 있습니다.
References
'Dev > Blockchain' 카테고리의 다른 글
[Metaplex Candy Machine] #5. Minting 하기 (0) | 2023.04.14 |
---|---|
[Metaplex Candy Machine] #4. Candy Guard 이해하기 (0) | 2023.04.14 |
[Metaplex Candy Machine] #3. Candy Machine에 Item 넣기 (0) | 2023.04.13 |
[Metaplex Candy Machine] #2. Candy Machine 관리하기 (0) | 2023.04.13 |
[Metaplex Candy Machine] #1. Candy Machine 설정 이해하기 (0) | 2023.04.12 |