title: Candy Machine์ผ๋ก Solana์์ Token Metadata NFT ์ปฌ๋ ์ ์์ฑํ๊ธฐ metaTitle: Candy Machine์ผ๋ก Solana์์ Token Metadata NFT ์ปฌ๋ ์ ์์ฑํ๊ธฐ | Candy Machine
Solana์์ NFT ์ปฌ๋ ์ ์ ์ถ์ํ๋ ค๋ ๊ฒฝ์ฐ Sugar CLI ๋๊ตฌ ํคํธ๊ฐ ๋ ๋ณต์กํ ์ค์ ๋ฐ ๊ด๋ฆฌ ๋จ๊ณ๋ฅผ ์ถ์ํํ์ฌ Solana ๋ธ๋ก์ฒด์ธ์์ Candy Machine์ ์์ฑํ ์ ์๋ ์๋ํ๋ ์ถ์ ์์คํ ์ ์ ๊ณตํฉ๋๋ค.
bash <(curl -sSf https://sugar.metaplex.com/install.sh)
๋ค์ URL์ ์ฌ์ฉํ์ฌ ์ค์น ์คํ ํ์ผ์ ๋ค์ด๋ก๋ํ์ฌ Sugar๋ฅผ ์ค์นํ ์ ์์ต๋๋ค:
https://github.com/metaplex-foundation/winstaller/releases/latest/download/winstaller.exe
๋๋ธ ํด๋ฆญ์ผ๋ก ๋ฐ์ด๋๋ฆฌ๋ฅผ ์คํํด ๋ณด์ธ์. ์ ๋ขฐํ ์ ์๋ ๋ฐ์ด๋๋ฆฌ์ ๋ํ ํ์ ๋ฉ์์ง ๊ฒฝ๊ณ ๊ฐ ๋ํ๋๋ฉด "์ถ๊ฐ ์ ๋ณด"๋ฅผ ํด๋ฆญํ ๋ค์ "์คํ"์ ํด๋ฆญํด ๋ณด์ธ์.
NFT๋ ์ด๋ฏธ์ง์ ๋ฉํ๋ฐ์ดํฐ๋ผ๋ ๋ ๊ฐ์ง ๊ธฐ๋ณธ ๋ถ๋ถ์ ๊ฐ์ง๋๋ค.
์ด๋ฏธ์ง๋ ์ง๊ฐ๊ณผ ๋ง์ผ์์ ๋ณด์ฌ์ง๊ณ ํ์๋๋ ๊ฒ์ด๋ฉฐ, ๋ฉํ๋ฐ์ดํฐ์๋ ์ด๋ฆ, ์ด๋ฏธ์ง๋ฅผ ์ฐพ์ ๋งํฌ, NFT์ ์์ฑ ๋ฑ ๋ธ๋ก์ฒด์ธ์์ ํด๋น NFT์ ๋ํ ๋ชจ๋ ๊ด๋ จ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค.
Sugar์์ ๋ช
๋ น์ด๋ฅผ ์คํํ ๋, Sugar๋ ๋ช
๋ น์ด๋ฅผ ์คํํ๋ ๋๋ ํฐ๋ฆฌ์์ assets ํด๋๋ฅผ ์ฐพ์ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
์ด๋ฏธ์ง์ ๋ฉํ๋ฐ์ดํฐ ํ์ผ ๋ชจ๋ assets ํด๋์ ์์ด์ผ ํฉ๋๋ค.
์ด๋ฏธ์ง์ ๋ฉํ๋ฐ์ดํฐ JSON ํ์ผ์ 0๋ถํฐ ์์ํ๋ ์ฆ๋ถ ์ธ๋ฑ์ค ๋ช ๋ช ๊ท์น์ ๋ฐ๋ผ์ผ ํฉ๋๋ค.
์ธ๋ฑ์ค๊ฐ ๋๋ฝ๋๊ฑฐ๋ ์ด๋ฏธ์ง์ ๋ฉํ๋ฐ์ดํฐ ํด๋์ ๋์ผํ ์์ ํ์ผ์ด ํฌํจ๋์ง ์์ผ๋ฉด ํด๋ ๊ฒ์ฆ์ด ์คํจํฉ๋๋ค.
assets/
โโ 0.png
โโ 0.json
โโ 1.png
โโ 1.json
โโ 2.png
โโ 2.json
โโ ...
{% partial file="token-standard-full.md" /%}
{
"name": "My NFT #1",
"description": "My NFT Collection",
"image": "https://arweave.net/26YdhY_eAzv26YdhY1uu9uiA3nmDZYwP8MwZAultcE?ext=jpeg",
"external_url": "https://example.com",
"attributes": [
{
"trait_type": "trait1",
"value": "value1"
},
{
"trait_type": "trait2",
"value": "value2"
}
],
"properties": {
"files": [
{
"uri": "https://www.arweave.net/abcd5678?ext=png",
"type": "image/png"
}
],
"category": "image"
}
}
Candy Machine์ ์์ฑํ๊ธฐ ์ํด ์์ ์ด๋ฏธ์ง์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ์ฌ๊ธฐ GitHub์์ ๋
น์ code ๋ฒํผ์ ํด๋ฆญํ๊ณ zip ํ์์ ์ ํํ์ฌ zip ํ์์ผ๋ก ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
https://github.com/metaplex-foundation/example-candy-machine-assets
๋๋ git์ด ์ค์น๋์ด ์๋ค๋ฉด ์์ ์ ์์คํ ์ ๋ณต์ ํ๊ฑฐ๋ ์ ๊ณต๋ ๋งํฌ์์ ์์ถ๋ ์ฌ๋ณธ์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค
git clone https://github.com/metaplex-foundation/example-candy-machine-assets.git
๋ ์ด์ด์์ ์ํธ์ํฌ ์ด๋ฏธ์ง์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์์ฑํด์ผ ํ๋ค๋ฉด ์์ฑ๊ธฐ์ ์ด๋ฏธ์ง ๋ ์ด์ด์ ํ๋ก์ ํธ์ ๋ํ ๊ธฐ๋ณธ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ฉด ์ฃผ์ด์ง ๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ x๊ฐ์ ์์ ์ด๋ฏธ์ง์ JSON ๋ฉํ๋ฐ์ดํฐ ์กฐํฉ์ ์์ฑํ๋ ์ฌ๋ฌ ์๋ํ ์คํฌ๋ฆฝํธ์ ์น์ฌ์ดํธ๊ฐ ์์ต๋๋ค.
| ์ด๋ฆ | ํ์ | ๋์ด๋ | ์๊ตฌ์ฌํญ | ๋ฌด๋ฃ |
|---|---|---|---|---|
| nftchef | ์คํฌ๋ฆฝํธ | โญโญโญโญ | JS ์ง์ | โ |
| hashlips | ์คํฌ๋ฆฝํธ | โญโญโญโญ | JS ์ง์ | โ |
| Nft Art Generator | ์น UI | โญโญ | ||
| bueno | ์น UI | ์ ์ ์์ |
์ปฌ๋ ์
์์ฑ์ ์ํด์๋ NFT ์์
๊ณผ ๊ฐ์ ์ธ๋ถ์ฌํญ์ด ํ์ํ๋ฐ, ์ด๋ ์ด๋ฏธ์ง ํ์ผ๊ณผ ๋ฉํ๋ฐ์ดํฐ json ํ์ผ์
๋๋ค. ์ด๋ค์ ๋ค์๊ณผ ๊ฐ์ด assets/ ํด๋์ ๋ฃจํธ์ ๋ฐฐ์น๋ฉ๋๋ค:
assets/
โโ collection.jpg
โโ collection.json
โโ 0.png
โโ 0.json
โโ 1.png
โโ 1.json
โโ 2.png
โโ 2.json
โโ ...
์ปฌ๋ ์
๋ฉํ๋ฐ์ดํฐ ํ์ผ์ NFT ์์
json ํ์ผ๊ณผ ๋์ผํ ํ์์
๋๋ค. ์ปฌ๋ ์
์ ๊ฒฝ์ฐ attributes ํ๋ ์์ฑ์ ์๋ตํ ์ ์์ต๋๋ค.
{
"name": "My Collection",
"description": "This is My Nft Collection",
"image": "collection.jpg",
"external_url": "https://example.com",
"properties": {
"files": [
{
"uri": "https://example.com/1.jpg",
"type": "image/jpg"
}
],
"category": "image"
}
}
๊ธฐ๋ณธ์ ์ผ๋ก Sugar๋ Solana CLI์์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํ ๊ตฌ์ฑ ํ์ผ์ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ณธ๊ฐ์ ๋ก๋ํฉ๋๋ค:
์์ ํด๋๊ฐ ์ค๋น๋๋ฉด Sugar๋ก ๋ฐฐํฌ ํ๋ก์ธ์ค๋ฅผ ์์ํ ์ ์์ต๋๋ค. ์คํํ ์ฒซ ๋ฒ์งธ ๋ช ๋ น์ด๋
sugar launch
์ด๋ Candy Machine ๋ฐฐํฌ์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ์์งํ๊ธฐ ์ํด Sugar์ CLI ํ๋ก์ธ์ค๋ฅผ ์์ํฉ๋๋ค.
sugar๊ฐ ๊ตฌ์ฑ ํ์ผ์ ์ฐพ์ง ๋ชปํ๋ฉด ํ๋๋ฅผ ์์ฑํ๋ผ๊ณ ์์ฒญํ ๊ฒ์
๋๋ค.
๊ทธ๋ฐ ๋ค์ ์์ฑํ ๋ค์ ์ง๋ฌธ๋ค์ด ๋ํ๋ ๊ฒ์ ๋๋ค
Found xx file pairs in "assets". Is this how many NFTs you will have in your candy machine?
Found symbol "xxxx" in your metadata file. Is this value correct?
Found value xxx for seller fee basis points in your metadata file. Is this value correct?
Do you want to use a sequential mint index generation? We recommend you choose no.
How many creator wallets do you have? (max limit of 4)
์ฐฝ์์ ์ง๊ฐ์ ๋ก์ดํฐ๋ฅผ ๋ถ๋ฐฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ ํํ๋ฉด ๊ฐ ์ง๊ฐ์ ๋ํ ์ฃผ์์ ์ง๋ถ ๊ธ์ก์ ์
๋ ฅํ๋ผ๋ ๋ฉ์์ง๊ฐ ๋ํ๋ฉ๋๋ค.
Which extra features do you want to use? (use [SPACEBAR] to select options you want and hit [ENTER] when done)
์ด ๊ฐ์ด๋์์๋ hidden settings๋ฅผ ์ ํํ์ง ์์ ์ํ๋ก ๋๊ณ enter๋ฅผ ๋๋ฌ ์งํํ๊ฒ ์ต๋๋ค.
What upload method do you want to use?
์ด ๊ฐ์ด๋์์๋ Bundlr์ ์ ํํ๊ฒ ์ต๋๋ค.
Do you want your NFTs to remain mutable? We HIGHLY recommend you choose yes.
๋์ค์ ํ์ํ๋ฉด NFT๋ฅผ ํธ์งํ ์ ์๋๋ก ์ด ์ต์ ์์ ์(y)๋ฅผ ์ ํํ์ธ์.
Sugar๋ ์ด์ ๋ค์ ํ๋ก์ธ์ค๋ฅผ ์์ํด์ผ ํฉ๋๋ค:
์ฑ๊ณตํ๋ฉด ๋งํฌ ๋ด์ ์์ ์ Candy Machine ์ฃผ์๊ฐ ํฌํจ๋ ๋ค์ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค:
https://www.solaneyes.com/address/Beag81WvAPUCeFpJ2qFnvd2f1CFCpQBf3abTJXA1fH9o?cluster=devnet
์ถํํฉ๋๋ค! Solana์์ Candy Machine์ ์์ฑํ์ต๋๋ค. ์ ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ์จ์ฒด์ธ์์ Candy Machine ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
ํ์ฌ Candy Machine์๋ ๊ฐ๋๊ฐ ์ฐ๊ฒฐ๋์ด ์์ง ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Candy Guard๊ฐ Candy Machine์ ์ฐ๊ฒฐ๋์ง ์์ผ๋ฉด ๋ฏผํธ ๊ถํ(๋น์ )๋ง Candy Machine์์ ๋ฏผํ ํ ์ ์์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Candy Machine์ ๊ฐ๋๋ฅผ ์ฐ๊ฒฐํด์ผ ํ๋ฉฐ, ์ด๋ฅผ ํตํด ์ผ๋ จ์ ๊ท์น์ ๋ฐ๋ผ ๊ณต๊ฐ์ ์ผ๋ก Candy Machine์์ ๋ฏผํ ํ ์ ์๊ฒ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์์๊ฒ 1 SOL์ ์ฒญ๊ตฌํ๋ฉด์ ๊ณต๊ฐ์ ์ผ๋ก Candy Machine์์ ๋ฏผํ ํ ์ ์๊ฒ ํ๊ณ ์ถ์ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํด Sol Payment Guard๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Candy Machine์ Sol Payment Guard๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ํฐ๋ฏธ๋์์ sugar launch๋ฅผ ์คํํ ํด๋์ ๋ฃจํธ์ Sugar๊ฐ ์์ฑํ config.json ํ์ผ์ ์ด์ด์ผ ํฉ๋๋ค.
๊ตฌ์ฑ ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ๋๋ค:
{
"tokenStandard": "nft",
"number": 16,
"symbol": "NUMBERS",
"sellerFeeBasisPoints": 500,
"isMutable": true,
"isSequential": false,
"creators": [
{
"address": "B1kwbSHRiXFPYvNbuhCX92ibngzxdmfBzfaJYuy9WYp5",
"share": 100
}
],
"uploadMethod": "bundlr",
"ruleSet": null,
"awsConfig": null,
"sdriveApiKey": null,
"pinataConfig": null,
"hiddenSettings": null,
"guards": null,
"maxEditionSupply": null
}
์ฌ๊ธฐ์ ๊ตฌ์ฑ ํ์ผ ๋ ๋ถ๋ถ์ guards ํ๋๋ฅผ ํธ์งํ๊ณ SOL Payment๊ฐ ์ ์ก๋ ๋์ ์ฃผ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
"guards": {
"default": {
"solPayment": {
"value": 1,
"destination": "11111111111111111111111111111111"
}
}
},
config.json์ ๊ฐ๋๋ฅผ ์ถ๊ฐํ ํ ํ์ผ์ ์ ์ฅํ๊ณ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ์ธ์:
sugar guard add
์ด์ ์ ์ด๋ฏธ Candy Guard๋ฅผ ์์ฑํ๋ค๋ฉด ๋์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ ์ ์์ต๋๋ค:
sugar guard update
์ด๋ Candy Guard๋ฅผ ์์ฑํ๊ณ ๊ธฐ๋ณธ ๊ฐ๋ ๋ชฉ๋ก์ SOL Payment Guard๋ฅผ ์ถ๊ฐํฉ๋๋ค.
ํฐ๋ฏธ๋์์ Candy Machine ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ ์ ์์ต๋๋ค
sugar show
์ด๋ ์ฝ์ ๋ ๋ชจ๋ ํญ๋ชฉ์ ์ ์ธํ ๋ชจ๋ Candy Machine๊ณผ ๊ฐ๋ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋์ดํฉ๋๋ค.
ํฐ๋ฏธ๋์์ Candy Machine ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ ์ ์์ต๋๋ค
sugar guard show
์ด๋ ์ฝ์ ๋ ๋ชจ๋ ํญ๋ชฉ์ ์ ์ธํ ๋ชจ๋ Candy Machine๊ณผ ๊ฐ๋ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋์ดํฉ๋๋ค.
์ด์ ์๋ํ๋ Candy Machine์ด ์์ผ๋ฏ๋ก ์ฌ๋๋ค์ด Candy Machine์์ ๋ฏผํ ํ ์ ์๋๋ก ์น UI์์ Candy Machine์ ํธ์คํ ํด์ผ ํฉ๋๋ค.
์์ฒด UI๋ฅผ ์์ฑํ๊ณ umi ํด๋ผ์ด์ธํธ ๋ํผ์ mpl-candy-machine SDK๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ฏธ๋ฆฌ ๊ตฌ์ถ๋ ์ปค๋ฎค๋ํฐ UI๋ฅผ ์ฌ์ฉํ๊ณ Candy Machine์ ์ธ๋ถ ์ ๋ณด๋ง ์ ๊ณตํ ์ ์์ต๋๋ค.