Open1
Solanaでの開発ことはじめ
Solanaでの開発ことはじめ
リソース
やること
- Solanaでの開発をやっていく
メモ
- Solanaの開発者向けDiscordで紹介されてたProgramming on Solana - An Introduction | paulxをやってみる
- Escrowというスマートコントラクトを作るらしい
- Alice(TokenXを持っている)とBob(TokenYを持っている)がTokenを安全に交換したい。
- そのためにAliceがEscrowに対してTokenXを送り、BobもEscrowに対してTokenYを送る。両者のTokenをEscrowが保持できたら互いにAlinceにTokenBを送り、BobにTokenXを送る。Tokenを送ったが相手からは送られて来なかったみたいなことを防ぐ仕組み。これを作る。
- 準備
- プログラムのテンプレリポジトリの作成
-
mvines/solana-bpf-program-template: Minimal Solana BPF program templateで
Use this template
をしてclone。
-
mvines/solana-bpf-program-template: Minimal Solana BPF program templateで
- Rustのインストール
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- Solana Dev Toolのインストールを行う
sh -c "$(curl -sSfL https://release.solana.com/v1.8.2/install)"
- プログラムのテンプレリポジトリの作成
- わからん用語も多いし概念も結構複雑かつEthereumとも違うので難しい...
- Program
- Solanaのスマートコントラクトコード
- Program Id
- Accountのpublic key
- entrypoint
- BPF Loaderで実行されるProgramのエントリーポイント
- 全てのアカウントが渡されてくる。なにそれ...
-
BPF Loader
- BPFスマートコントラクトプログラムを読み込むSolanaのProgram。更新されてて常に複数ある。これ自体Program。古いLoaderはdeprecatedされていく。
- Programとランタイムのインターフェース。EVMみたいなものか。
- Instruction
- Programにおいて実行されるロジックの最小単位。
- transaction
- clientによって署名されたInstructionの集まり。
- Owner
- Program。とりわけAccountを保持してる場合、そのAccountを操作できる唯一のProgram。
- Account
- Solanaチェーンにおけるレコードで、データを保持するか、実行可能なProgramである。
- balance(lamport: 0.000000001 SOL。gweiみたいなやつ)はAccountに保持される。
- public key(ed25519: RSAと同程度の安全性でRSAよりも鍵長が短く高速)やpubkeyによって指定できる
- AccountはProgramに保持され、そのownerだけがAccountへの操作ができる。Program has Accountという構造。
- System Program
- Solanaの内部システムのProgram
- ユーザースペースではなくSolana内のアカウントの発行と所有権のアサインを行う
- Token Program
- account ownerのprivate keyをtoken accountに割り当てる
- account ownerはprivate keyひとつで自分のtoken accountの署名ができる
- Account OwnerとToken Ownerは正確には別
- Account OwnerはSolana上のattribute
- Token OwnerはToken Programが発行する
- Token OwnerはToken Accountのdataのfieldに設定される
- temporary Token Account
- Token Accountのコピー。Token ProgramのownerがEscrow Programに送る用のAccount。
- Program Derived Addresses (PDAs)
- Programから作られたAccount。普通のAccountのようにprivate keyで制御されない。
- ed25519に乗っ取らないランダムなbytes array
- sysvars
- sysvar = System Account
- Solana cluster上にある色々な情報を提供する。Programはsysvarのpubkeyを使ったり、syscallをクエリすることでSysvarsにアクセスできる。
- Rent
- ガス代みたいなもの。memoryのspaceと時間により変動。
- Rent | Solana Docs
- CPI
- Calling Between Programs | Solana Docs
- 異なるProgram間でのProgramの呼び出し
- Program
- Aliceの全体の流れは↓のスライドをみるとわかりやすいかも
- Understanding what just happened, Rent Part 2, and Commitment
-
- create empty account owned by token program
-
- initialize empty account as Alice's X token account
-
- transfer X tokens from Alice's main X token account to her temporary X token account
-
- create empty account owned by escrow program
-
- initialize empty account as escrow state and transfer temporary X token account ownership to PDA
- Escrowというスマートコントラクトを作るらしい