1. 터미널 solana cli 설치, ts-node설치 https://docs.solanalabs.com/cli/install 2. Keypair 2개 만들기 (1. 생성할 때, 쓸 지갑 2. 토큰 정보 저장할 지갑) 3. 터미널 ts-node mint.ts <mint.ts> import { percentAmount, generateSigner, signerIdentity, createSignerFromKeypair } from '@metaplex-foundation/umi' import { TokenStandard, createAndMint } from '@metaplex-foundation/mpl-token-metadata' import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'; import { mplCandyMachine } from "@metaplex-foundation/mpl-candy-machine"; import "@solana/web3.js"; import secret from '1번 지갑 패스.json'; import coin from '2번 지갑 패스.json';
위 정보가 metadata로 올라가 있어야합니다. https://nft.storage/ 에 올려도 됩니다. 심볼 이미지도 저기에 올려도 되고요. 심볼이미지 올린 후, metadata.json 파일 위 포멧으로 만드시고, metadata.json파일을 다시 올리시면, 간단합니다.
<mint.ts> 아래에 위 메타데이터 올린 주소를 넣어요. ... uri: "메타데이터 주소", ...
https://docs.solanalabs.com/cli/install
2. Keypair 2개 만들기 (1. 생성할 때, 쓸 지갑 2. 토큰 정보 저장할 지갑)
3. 터미널 ts-node mint.ts
<mint.ts>
import { percentAmount, generateSigner, signerIdentity, createSignerFromKeypair } from '@metaplex-foundation/umi'
import { TokenStandard, createAndMint } from '@metaplex-foundation/mpl-token-metadata'
import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
import { mplCandyMachine } from "@metaplex-foundation/mpl-candy-machine";
import "@solana/web3.js";
import secret from '1번 지갑 패스.json';
import coin from '2번 지갑 패스.json';
const umi = createUmi('https://api.devnet.solana.com/');
const userWallet = umi.eddsa.createKeypairFromSecretKey(new Uint8Array(secret));
const userWalletSigner = createSignerFromKeypair(umi, userWallet);
const mintKeypair = umi.eddsa.createKeypairFromSecretKey(new Uint8Array(coin));
const mintSigner = createSignerFromKeypair(umi, mintKeypair);
const metadata = {
name: "코인이름",
symbol: "심볼",
uri: "메타데이터 주소",
};
const mint = mintSigner;// generateSigner(umi);
umi.use(signerIdentity(userWalletSigner));
umi.use(mplCandyMachine())
createAndMint(umi, {
mint,
authority: umi.identity,
name: metadata.name,
symbol: metadata.symbol,
uri: metadata.uri,
sellerFeeBasisPoints: percentAmount(0),
decimals: 8,
amount: 51751000_000_00000000,
tokenOwner: userWallet.publicKey,
tokenStandard: TokenStandard.Fungible,
}).sendAndConfirm(umi).then(() => {
console.log("Successfully minted 1 million tokens (", mint.publicKey, ")");
});
https://solana.com/docs/core/clusters
<mint.ts> 메인넷은 아래 주소를 메인넷으로 변경하세요.
...
const umi = createUmi('https://api.devnet.solana.com/');
...
2번 Keypair는 터미널에서
solana-keygen grind --starts-with key:1
요렇게 생성하면, key로 시작하는 걸 얻을 수 있습니다.
snow어쩌구의 예) solana-keygen grind --starts-with snow:1
<mint.ts> 두개 생성 후, 아래의 path를 변경하시면 됩니다.
...
import secret from '1번 지갑 패스.json';
import coin from '2번 지갑 패스.json';
...
"name": "코인이름",
"symbol": "심볼",
"description": "무슨 무슨 Coin",
"image": "이미지 링크"
}
위 정보가 metadata로 올라가 있어야합니다. https://nft.storage/ 에 올려도 됩니다. 심볼 이미지도 저기에 올려도 되고요. 심볼이미지 올린 후, metadata.json 파일 위 포멧으로 만드시고, metadata.json파일을 다시 올리시면, 간단합니다.
<mint.ts> 아래에 위 메타데이터 올린 주소를 넣어요.
...
uri: "메타데이터 주소",
...
테스트시 잔고 확인 필수예요. devnet에서는 airdrop 받으세요.
% solana airdrop 1
https://medium.com/@pipln/solana-%ED%86%A0%ED%81%B0-%EB%A7%8C%EB%93%A4%EA%B8%B0-meme-coin-468565705cb4