Solana の並列処理の仕組みと制約について関西弁で解説
おう、Solana の並列処理の仕組みについて、関西弁でざっくり説明したるわ!
駆け出しエンジニアの頃、ゆめたろうさんの解説記事をよく参考にしていました。
本記事は Qiita の伝統にのっとり、Solana の基本概念について関西弁で解説するシリーズです。
Solana の並列処理の基本的な考え方
まずな、Solana がめっちゃ早いっちゅうのは知ってるやろ?これ、「並列処理」っちゅう仕組みがあるからなんや。普通のブロックチェーンやと、トランザクションを一つずつ順番に処理していくねん。でも Solana はちゃう!同時にようけのトランザクションを処理できんねん。
ほなトランザクションがぶつかったらどないすんねん?って?そこがミソやねん。
アカウントモデルとトランザクションの仕組み
Solana では、全部のデータが「アカウント」っちゅうものに入っとんねん。このアカウントに対して、トランザクションで命令(インストラクション)を送るわけや。
で、ここがポイントやねんけど、各命令は、どのアカウントを読み取り専用で使うねん、どのアカウントを書き込み用で使うねんっちゅうのを前もって宣言せなあかんねん。
こんな感じやねん:
- 送信者のアカウント(書き込み可能、署名者)
- 受信者のアカウント(書き込み可能)
- システムプログラム(読み取り専用)
並列処理の仕組み
ほな、Solana のランタイムは何をしてんかっていうと:
- トランザクションを実行する前に、どのアカウントが書き込まれるかを先に見とんねん
- 同じアカウントに書き込むトランザクションは「ぶつかる」から、順番に処理せなあかん
- ぶつからへんトランザクション(別々のアカウントを書き換えるだけのやつ)は並列で同時に実行できるねん!
つまり、あんたのトランザクションとわいのトランザクションが全然別のアカウントをいじるだけなら、同時に処理できるっちゅうわけや!これめっちゃ速いねん!
制約について
ほな、こんな制約もあるから気いつけてな:
-
書き込むアカウントは前もって宣言せなあかん:
「あ、ついでにこっちもいじりたいわ〜」みたいな後出しジャンケンはできんねん。前もって全部言わんとあかん。 -
最大命令の深さ制限(4 段階まで):
プログラム A がプログラム B を呼び出して〜っていうのも、深さが最大 4 段階までしかできんねん。これ以上深くなったら「もうあかんわ!」って怒られんで。 -
トランザクションのサイズ制限(1,232 バイト):
トランザクションのサイズにも制限あんねん。大きすぎるとエラーになるから、でっかいトランザクションは複数に分けて送る必要あるで。 -
プログラムの署名制限:
プログラムが署名できるのは自分の PDA(プログラム派生アドレス)だけやねん。他人のアカウントには署名できへんのや。
実際にどない使うのん?
ほな、実際にどう使うかっちゅうと、例えば SOL を送金するときは:
// 送金するインストラクションを作るとき
{
programId: SystemProgram.programId, // どのプログラムを呼び出すねん
keys: [
{pubkey: あんたのウォレット, isSigner: true, isWritable: true}, // 送る人
{pubkey: 相手のウォレット, isSigner: false, isWritable: true} // 受け取る人
],
data: ... // 送金額とかのデータ
}
こんな風に、どのアカウントを読み書きするかを明確に宣言するから、ランタイムが「あ、このトランザクションとこのトランザクションはぶつからへんな!同時に実行したろ!」って判断できるわけや!
結論
要するに、Solana がめっちゃ速いのは、トランザクション同士がぶつからへんかどうかを前もって知ることができて、ぶつからへんトランザクションはどんどん並列で実行できるからなんや!これが Solana の「クソ早い」理由やねん!
でも気いつけなあかんのは、ちゃんとどのアカウントを書き換えるか前もって宣言せなあかんことや。後出しジャンケンできへんで〜!
あと、命令の深さやトランザクションのサイズにも制限あるから、複雑なことしようと思ったら、ちょっと工夫せなあかんねん。
ほな、これで Solana の並列処理の仕組みと制約については、ある程度わかったんちゃう?
【ARM3rd とは】
ARM3rd はグローバル L1/L2 の開発支援、App Chain 企画、キラーアプリケーション創出に特化した、Web3・AI のプロフェッショナルファームです。Arweave や Solana はじめグローバルの Tier 1 プロトコル、および日本のエンタープライズとの卓越した協業実績を有しています。