학습목표)
-
Create token mints
-
Create token accounts
-
Mint tokens
-
Transfer tokens
-
Burn tokens
- SPL (Solana 공부 하다보면 자주 볼 수 있습니다.)
>> SPL은 Solana Program Library의 약자로 Solana 개발에 필요한 Library를 말합니다.
- SPL-Tokens
>> Solana network상에서 사용되는 non-native tokens을 말하고(반대로 native coin[token?]은 SOL를 말합니다.),
>> fungible tokens와 non-fungible tokens 둘다 SPL-token이라고 말합니다.
- Token Program
>> SPL-Tokens의 생성과 제어를 담당하는 Program으로 이더리움에서는 하나의 프로토콜(ERC20, ERC721, ERC1155 등)과 같은 표준 Tokens Program으로 Token을 제어하지만, Solana는 그와 다르게 개별 Token Program으로 Token을 생성하고 제어합니다.
>> 2022 Program에서는 Token에 특성을 추가하거나 변경하는 기능이 추가되었다고 하는데 나중에 살펴보겠습니다.
- Token Mints
>> Token의 특성을 지정합니다.
>> Token을 mint하면 account가 나오는데 이는 해당 token을 식별하게 하는 주소로 이더리움의 Contract Address와 같은 개념으로 볼 수 있습니다.
- Token Accounts는 Token을 보유하고 있는 계정을 의미합니다.
- Creating Token Mints와 Token Accounts는 SOL을 rent해야 하는데, 이 rent는 accounts가 closed된 후 refunded 됩니다.
- Overview
-
Creating a new Token Mint : 아직 공급량이 0인 상태이고, Token의 거푸집만 생성한 상태
-
Creating Token Accounts
-
Minting : 공급량이 발행되어 이제 전송이 가능한 상태를 말한다.
-
Transferring tokens from one holder to another
-
Burning tokens
- Token Mint Account(Address)는 해당 Token을 식별할 수 있는 주소값으로 이더리움 Token의 Contract Address를 말한다.
- decimals이 커질수록 발행량은 줄어듭니다. 왜냐하면 amount는 u64 = 2^64 만큼만 표시할 수 있기 때문입니다.
- 'createMint' function
const tokenMint = await createMint( connection, payer, // 수수료 및 rent 비용 지불 mintAuthority, // token을 mint하는 권한을 부여받은 계정 freezeAuthority, // token account를 freeze할 수 있는 권한을 부여 받은 계정 decimal );
- rent and rent exemption
>> 검증인 기억을 위해 rent를 지불해야 했다.
- Token Account
>> 새로운 Token을 hold할 계정이 필요하다.
const tokenAccount = await createAccount( connection, payer, // 수수료 및 rent 비용 지불 mint, // createMint의 결과 owner, // Token을 소유할 계정 keypair // (option) 새로운 token account address를 지정하고, 없으면 mint와 owner로 지정한다. );
- Associated Token Account (Mint Token 이전에 알아보자)
>> owner's public key에서 파생된(derived) address와 token mint(create mint)로 생성한 Token Account를 말한다.
위와 같이 별개의 keypair(owner's public key에서 파생되지 않은 키)
>> keypair를 지정하지 않은면 자동으로 Associated Token Account method(createAssociatedAccount)를 이용한다.
- Mint Tokens
>> 새로운 Tokens을 유동하는 절차입니다.
const transactionSignature = await mintTo( connection, payer, mint, // token account destination, // token을 받을 주소 authority, // the account authorized to mint tokens amount // the raw amount of tokens to mint outside(발생량 x decimals) );
- Transfer Tokens
>> SPL-Token을 전공한다.
const transactionSignature = await transfer( connection, payer, source, // token account로 tokens을 보낸다 destination, // token을 받을 주소 owner, // the account of the owner of the 'source' token account amount // token 전송 수량 );
https://www.youtube.com/watch?v=ePJbSv8-9fk
https://www.youtube.com/watch?v=ePJbSv8-9fk
metadata 변경
https://www.youtube.com/watch?v=9vrZ5aWc5iE
https://www.youtube.com/watch?v=9vrZ5aWc5iE
https://explorer.solana.com/address/SDTPtKLUSCCQ159eQDyN2G4GvCESjtmdwgWoWBkucZK?cluster=devnet