Solanaで独自トークンのあれこれ

さて、本日は社内勉強会で用いた、Solana上でのトークン発行に関する資料を公開します。Solanaで独自トークンを作りたいとか、仕組みが知りたい方はぜひ読んでください。

# 前提
全てアカウントとして保存される

- **Ethereum**
    
    ブロックチェーン上にSmart Contractと呼ばれるプログラムがあり、それと一緒に実行に使われる値も保存されている。またERC20のような規格はプログラムごとに複製されて保存されている。
    
- **Solana**
    
    ブロックチェーン上にあるプログラムはSmart ContractではなくProgramという名称で呼ばれる。このProgramは実行時などに扱うデータと分離され、アカウント（PCでいうファイルやフォルダ）という形で保存される。
    
    - アカウントの例
        - Wallet Account
        - Mint Account
        - (Associated) Token Account（略してATA）
        - Program Account
        
        etc.
        
    
    また、規格はSPL(Solana Program Library)のみでEthereumみたいにそれぞれのプログラムにコピーは作られない。その代わりに**工場**のような役割を果たしそれぞれの役割を持ったアカウントを作成する。
    
   ![Screen Shot 2022-11-25 at 21.39.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069912/817ba67d-5fd3-3354-c76f-fd73a9ad4fa9.png)


# Token Architecture

![upload_f2e74f1549c496113a6c2d6dba2e221a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069912/8287c75a-ed11-ccc2-e658-9d0152515a3b.png)
![Screen Shot 2022-11-25 at 22.26.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069912/0ee06132-e780-4786-2bb5-a2ca95c25a01.png)




### 新しいTokenを作る場合

1. Mint Accountを作る
    
    日銀のようなもの。
    
    **ポイント**
    
    - Mint Authority (HqFzP1LKDy4vdyDySMhDeoNsqH1MYaSEKDzEtXyrrvZS)
    
  ![スクリーンショット 2022-12-17 18.47.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069912/e242fa17-75e1-c3a3-3185-568d6627dffd.png)  
    
2. PDA(Program Derived Address)からAssociated Token Accountを作る
    
    それぞれのToken専用の口座のようなもの。
    
    自分のWallet AccountにはTokenは保存されず、Wallet Accountに紐づいているAssociated Token Accountに持っているTokenの量が保存される。
    
    **ポイント**
    
    - Mint (aNxWyaMagMX1DPRTWNceUDn8VYbmCqXRtuQbiVhmGei)
    - Owner (HqFzP1LKDy4vdyDySMhDeoNsqH1MYaSEKDzEtXyrrvZS)
    
  ![Screen Shot 2022-11-25 at 22.26.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069912/d5515289-b82c-9688-a5b6-96b1b52dc1fb.png)

    
3 Associated Token AccountにMintする

### Tokenを他の人に送る場合

1. 受取人がAssociated Token Accountを持っているか確認する
    
    持っている
    
    →そのアカウントを使用
    
    持っていない
    
    →Mintの値を受け取るTokenのMint Account Address (aNxWyaMagMX1DPRTWNceUDn8VYbmCqXRtuQbiVhmGei)、Ownerを自分のWallet Account Addressに設定して作成
    
2. 送金者は送金者のかつ送りたいTokenのAssociated Token Accountから受信者のAssociated Token Accountへと送信する。

※送金先をAssociated Token Accountではなく、Wallet Accountにすると送信失敗する。PhantomなどでSPL Tokenを送金する場合は相手のWallet Addressを指定してるが、裏側でそれに紐づいたAssociated Token Accountが作成され送金されている。

### Tokenに情報を付与する場合

![upload_6c1b36f30e08790d017d0fadaba472a8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069912/b07b4d29-adad-7c3c-9da7-c7e9ac366194.png)


Tokenに名前や画像を付け足す場合はPDAを使ってMetadata Account (Hpo9r2oNvmFhdjRqJGeXtuJdpJkb9UM1LxCbAbmBW4hz)を作成する。

![Screen Shot 2022-11-26 at 0.47.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069912/417c22f6-211f-763b-4f7f-7721bb4b4126.png)


上の写真にある情報がMetadata AccountとしてMint Accountにくっついてon-chain上に保存されているデータ。実際の名前や説明、写真のデータはArweave上（off-chain）に保存されている。Tokenの名前や画像を表示する時は、on-chain上のMetadata Accountに保存されているURIを頼りに、off-chainのArweave上にあるデータを取ってくる。

まとめ

|  | データの種類 | データの例 |
| --- | --- | --- |
| on-chain | メタデータ | アップデート権限保持者、Mint Account、ロイヤリティの割合 |
| off-chain | 実データ | 名前、シンボル、説明、画像 |

具体例

- Metadata URI : [https://arweave.net/r_YMzjdl_m5S9XRBopMeITBjvU5t4ZuzOSRPtX0VHp4](https://arweave.net/r_YMzjdl_m5S9XRBopMeITBjvU5t4ZuzOSRPtX0VHp4)
- Image URI: [https://arweave.net/IGtT0AcsKW_C8nqWSeaNcSlKZhN5GVwp_OsmQiXG7tI](https://arweave.net/IGtT0AcsKW_C8nqWSeaNcSlKZhN5GVwp_OsmQiXG7tI)

# NFT Architecture

![Token-Metadata-Overview-4-d62ed4ffd0c5bf8e3a8f3e2de100ccf7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069912/6cb59b29-91c9-0050-221b-8cf04637d0c8.png)


構造はTokenと同じ。

条件
1. Supply = 1
2. Decimals = 0
3. Mint Authority = None

具体例

- [https://www.solaneyes.com/address/DQRGyMTeFNpVocdgYE8yRuSFHDjkR8jG94fbGPxvqsu5](https://www.solaneyes.com/address/DQRGyMTeFNpVocdgYE8yRuSFHDjkR8jG94fbGPxvqsu5)

# 最後に

Verooは、Blockchain技術を活用した「想いの巡るグルメSNSアプリ」です。食に対する熱量、例えばラーメンがめちゃくちゃ好きで年間400杯食べているとか、変態的に具材にこだわった中華料理を作っているなどのような、今まで直接お金にはならなかった食に対する情熱や熱量、その裏側にある想いがトークンを使うことで巡る世界。自分のラーメンに費やす熱量がコミュニティに承認される。自分がほんとにいいと思って作った食べ物がコミュニティで広まる。Verooは単なるSNSアプリではなく、クリエイターたちの想いが紡がれるソーシャルグルメアプリです。一緒に開発してくれる仲間を募集しています！

Homepage: https://veroo.xyz/
Discord URL：https://t.co/VoT0gpsflA