Solana NoteBook

·5 min read

학습목표)

  • 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
  1. Creating a new Token Mint : 아직 공급량이 0인 상태이고, Token의 거푸집만 생성한 상태

  2. Creating Token Accounts

  3. Minting : 공급량이 발행되어 이제 전송이 가능한 상태를 말한다.

  4. Transferring tokens from one holder to another

  5. 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