[암호화폐] Solana 토큰 만들기 — MeMe Coin

Solana 토큰 만들기 — MeMe Coin

Jay Lee
 

12 min read

나도 solana로 밈코인 만들 수 있을까?

솔라나에 밈코인을 발행해보자.

프로젝트 개요

참조

Solana 문서

Metaplex 문서

개발환경

  1. Node.js
  2. Solana tool suite
  3. Metaplex
  4. Phantom

준비

필자는 맥 터미널로 진행합니다.

최신 solana cli를 설치합니다.

[참조: https://docs.solanalabs.com/cli/install]

sh -c "$(curl -sSfL https://release.solana.com/v1.18.4/install)"

현재 필자의 환경

workspace % node -v                                
v20.8.0
workspace % npm -v
10.1.0
workspace % yarn -v
1.22.19
workspace % ts-node -v
v10.9.2
workspace % solana --version                                                
solana-cli 1.18.4 (src:356c6a38; feat:3352961542, client:SolanaLabs)

~/workspace 에서 진행합니다.

일단, 작업 디렉토리를 생성해요.

workspace % mkdir meme
workspace % cd meme
meme %

밈코인을 만들려면 두가지 리소스가 필요합니다.

  1. 토큰 이미지 파일
  2. 메터데이터 json 파일

토큰 이미지는 ai 이미지 생성기에서 돌려 얻어보겠습니다.

푸른 바다, 푸른 하늘의 독도를 그려달라고 해봤어요.

자! 이제, 이미지를 https://nft.storage/에 올립니다. ipfs를 사용하는 off-chain 분산 스토리지를 제공하는 무료 서비스입니다.

올라가면, 주소*(View URL)를 볼 수 있어요.

https://bafybeif2gqc72oeefebn77kp4iomrgshfevzxnuyre6eqnu7xara7anlgm.ipfs.nftstorage.link/

제 경우는 위와 같이 나왔어요.

JSON 파일을 준비해 봅시다. 저는 아래와 같이 만들고

{
  "name": "Dokdo Coin",
  "symbol": "DOK",
  "description": "Dokdo Coin",
  "image": "https://bafybeif2gqc72oeefebn77kp4iomrgshfevzxnuyre6eqnu7xara7anlgm.ipfs.nftstorage.link"
}

다시, https://nft.storage/ 에 올렸습니다.

https://bafkreico2rt2pdqy57nakinjq4egzyj63w4mu5hixun32nvnim6dzphzmm.ipfs.nftstorage.link/

이제, 위에 주소를 가지고, 토큰을 만들어 보겠습니다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

일단, 두개의 지갑(계좌, Keypair?)이 필요합니다.

  1. 발행인의 지갑(발행비 결제 및 토큰 소유주)
  2. 밈코인 자체의 주소가될 Keypair

이왕이면 의미있는 주소였으면 좋겠습니다. 그래서 아래와 같이 만들겠습니다.

# east로 시작하는 주소 생성
workspace % solana-keygen grind --starts-with east:1
# Dokdo로 시작하는 주소 생성
workspace % solana-keygen grind --starts-with Dokdo:1

필자는 아래의 두개의 지갑 파일이 나왔습니다.
eastQhAYNCtxPGhG6YWifPWo1P3FVsSaH97vUSmDHjE.json DokdodChquwPecMeimj7jPGncNHXoHHFdoCEKav5KAp4.json

리소스 준비가 끝났으니, 시작해보겠습니다.

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 './eastQhAYNCtxPGhG6YWifPWo1P3FVsSaH97vUSmDHjE.json';
import dokdo from './DokdodChquwPecMeimj7jPGncNHXoHHFdoCEKav5KAp4.json';

const umi = createUmi('https://api.devnet.solana.com/'); //원하는 endpoint로 변경, 데브넷, 테스트넷, 메인넷
const userWallet = umi.eddsa.createKeypairFromSecretKey(new Uint8Array(secret));
const userWalletSigner = createSignerFromKeypair(umi, userWallet);
const mintKeypair = umi.eddsa.createKeypairFromSecretKey(new Uint8Array(dokdo));
const mintSigner = createSignerFromKeypair(umi, mintKeypair);

const metadata = {
    name: "Dokdo Coin",
    symbol: "DOK",
    uri: "https://bafkreico2rt2pdqy57nakinjq4egzyj63w4mu5hixun32nvnim6dzphzmm.ipfs.nftstorage.link",
};

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, ")");
});

일단, 환경을 확인해보겠습니다.

meme % solana config get
Config File: /Users/kjaylee/.config/solana/cli/config.yml
RPC URL: https://api.testnet.solana.com 
WebSocket URL: wss://api.testnet.solana.com/ (computed)
Keypair Path: /Users/kjaylee/workspace/solana.keys/DTPRZ8VZtcjmb9vxB8VRqsX7QKEp69ASgwHrWTtv7s38.json 
Commitment: confirmed

testnet으로 되어 있군요. 제가 주로 쓰는 Keypair(지갑)이 등록되어 있고요.

이 두개를 바꾸겠습니다. devnet으로 해보죠.

[참조: https://solana.com/docs/core/clusters]

meme % solana config set --url https://api.devnet.solana.com
Config File: /Users/kjaylee/.config/solana/cli/config.yml
RPC URL: https://api.devnet.solana.com 
WebSocket URL: wss://api.devnet.solana.com/ (computed)
Keypair Path: /Users/kjaylee/workspace/solana.keys/DTPRZ8VZtcjmb9vxB8VRqsX7QKEp69ASgwHrWTtv7s38.json 
Commitment: confirmed

meme % solana config set --keypair ./eastQhAYNCtxPGhG6YWifPWo1P3FVsSaH97vUSmDHjE.json 
Config File: /Users/kjaylee/.config/solana/cli/config.yml
RPC URL: https://api.devnet.solana.com 
WebSocket URL: wss://api.devnet.solana.com/ (computed)
Keypair Path: ./eastQhAYNCtxPGhG6YWifPWo1P3FVsSaH97vUSmDHjE.json 
Commitment: confirmed

airdrop부터 하나 받고 하겠습니다.

당연하게도, 돈이 있어야 돈이 발행됩니다.

meme % solana airdrop 1
Requesting airdrop of 1 SOL

Signature: 5ciDBVVhJyi1HqsLZbST9FfMbWvQsLvSikXzFrsRXNfXNY7hrwKkdw8toB4gaKqDyU4NyCjdh8j1CW3pQGtJkTeU

1 SOL

meme % solana account eastQhAYNCtxPGhG6YWifPWo1P3FVsSaH97vUSmDHjE     

Public Key: eastQhAYNCtxPGhG6YWifPWo1P3FVsSaH97vUSmDHjE
Balance: 1 SOL
Owner: 11111111111111111111111111111111
Executable: false
Rent Epoch: 18446744073709551615

잘 들어온게 확인이 되죠? 아래, 소수점 표현 8과, amount는 정하시면 됩니다. (대한민국 1인당 1000개?)

...
decimals: 8,
amount: 51751000_000_00000000,
...

이제, 필요한 초기화를 하겠습니다.

meme % yarn init --yes
yarn init v1.22.19
warning The yes flag has been set. This will automatically answer yes to all questions, which may have security implications.
success Saved package.json
✨  Done in 0.03s.

meme % tsc --init

Created a new tsconfig.json with:                                                                                       
                                                                                                                     TS 
  target: es2016
  module: commonjs
  strict: true
  esModuleInterop: true
  skipLibCheck: true
  forceConsistentCasingInFileNames: true


You can learn more at https://aka.ms/tsconfig

tsconfig.json 파일을 열어서, 아래 줄을 찾아 주석을 제거해서 활성화해주세요.

"resolveJsonModule": true

필요한 라이브러리 설치

meme % yarn add @solana/web3.js @metaplex-foundation/umi @metaplex-foundation/mpl-token-metadata @metaplex-foundation/umi-bundle-defaults @metaplex-foundation/mpl-candy-machine bs58

밈코인 생성!!

meme % ts-node mint.ts                                             
Successfully minted 1 million tokens ( DokdodChquwPecMeimj7jPGncNHXoHHFdoCEKav5KAp4 )

https://explorer.solana.com/address/DokdodChquwPecMeimj7jPGncNHXoHHFdoCEKav5KAp4?cluster=devnet

짜잔@@~

[출처] https://pipln.medium.com/solana-%ED%86%A0%ED%81%B0-%EB%A7%8C%EB%93%A4%EA%B8%B0-meme-coin-468565705cb4

 

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 86034
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 78561
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95291
92 [통계 R 언어] R에서 DB 사용(Sqlite) file 졸리운_곰 2024.06.25 1489
91 [통계 R 언어] R 언어에서 Python 코드 호출 : Calling Python from R 졸리운_곰 2024.01.28 1743
90 [R lang 크롤링] 비트코인(암호화폐) 가격 불러오기 in R 졸리운_곰 2023.12.11 1244
89 [통계 R 언어] 이동평균이 표시된 plotly 동적 주가 그래프 in R file 졸리운_곰 2023.12.11 1094
88 [R lang 크롤링] 금융 데이터 분석 주가 데이터 가져오기 in R 졸리운_곰 2023.12.11 1285
87 [R lang 크롤링] (R) [전략적가치투자] - 증액 투자법 file 졸리운_곰 2023.12.10 1101
86 [R lang 크롤링] (R) [전략적가치투자] - 정액 투자법 file 졸리운_곰 2023.12.10 1636
85 [R lang 크롤링] (R) [전략적가치투자] - 매입 보유법, 정률 투자법, 변율 투자법 file 졸리운_곰 2023.12.10 910
84 [R lang 크롤링] (R) wordcloud2로 더 예쁘게 시각화하기 file 졸리운_곰 2023.12.10 1579
83 [R lang 크롤링] (R) 나만의 주식차트만들기 / quantmod 패키지(2) file 졸리운_곰 2023.12.10 859
82 [R lang 크롤링] (R) R에서 주가정보 가져오기 / quantmod 패키지(1) file 졸리운_곰 2023.12.10 1175
81 [R lang 크롤링] (R) 정규식에서 사용되는 주요 기호들과 의미 file 졸리운_곰 2023.12.10 1522
80 [R lang 크롤링] (R) 종목토론실 텍스트마이닝하여 시각화하기 file 졸리운_곰 2023.12.10 2324
79 [R lang 크롤링] (R) 네이버금융에서 종목토론방 크롤링 file 졸리운_곰 2023.12.10 1277
78 [통계 R 언어] [ R ] pipe operator %>% 의 의미 - magrittr 패키지 졸리운_곰 2023.12.10 1185
77 [R lang 크롤링] [R 코드] 웹사이트 크롤링 졸리운_곰 2023.12.10 1314
76 [R lang 크롤링] R - 크롤링 file 졸리운_곰 2023.12.10 1742
75 [통계 R 언어] [Rtips] 불리는 패키지가 없습니다 해결 방법 file 졸리운_곰 2023.12.10 1379
74 [통계 R 언어] 패키지 설치 에러시 ERROR configuration failed for package RCurl during installation of DESeq file 졸리운_곰 2023.12.10 1203
73 [R lang 크롤링] 최대한 친절하게 쓴 R 크롤러 만들기 file 졸리운_곰 2023.12.10 1496
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED