Solanaでの開発
リソース
やること
Solanaでの開発をやっていく
メモ
Escrowというスマートコントラクトを作るらしい
Alice(TokenXを持っている)とBob(TokenYを持っている)がTokenを安全に交換したい。
そのためにAliceがEscrowに対してTokenXを送り、BobもEscrowに対してTokenYを送る。両者のTokenをEscrowが保持できたら互いにAlinceにTokenBを送り、BobにTokenXを送る。Tokenを送ったが相手からは送られて来なかったみたいなことを防ぐ仕組み。これを作る。
準備
プログラムのテンプレリポジトリの作成
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スマートコントラクトプログラムを読み込むSolanaのProgram。更新されてて常に複数ある。これ自体Program。古いLoaderはdeprecatedされていく。
Programとランタイムのインターフェース。EVMみたいなものか。
Instruction
Programにおいて実行されるロジックの最小単位。
transaction
clientによって署名されたInstructionの集まり。
Owner
Program。とりわけAccountを保持してる場合、そのAccountを操作できる唯一のProgram。
Account
public key と private keyのペア
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で制御されない。
sysvars
sysvar = System Account
Solana cluster上にある色々な情報を提供する。Programはsysvarのpubkeyを使ったり、syscallをクエリすることでSysvarsにアクセスできる。
Rent
ガス代みたいなもの。memoryのspaceと時間により変動。
CPI
異なるProgram間でのProgramの呼び出し
Aliceの全体の流れは↓のスライドをみるとわかりやすいかも
1. create empty account owned by token program
2. initialize empty account as Alice's X token account
3. transfer X tokens from Alice's main X token account to her temporary X token account
4. create empty account owned by escrow program
5. initialize empty account as escrow state and transfer temporary X token account ownership to PDA