https://medium.com/solana-labs/sealevel-parallel-processing-thousands-of-smart-contracts-d814b378192
ソラナは、世界で最もパフォーマンスの高い許可のないブロックチェーンです。Solana Testnetの現在の反復では、200の物理的に異なるノードのネットワークが、GPUで実行されている場合、1秒あたり50,000トランザクションを超える持続スループットをサポートします。そのようなものを実現するには、いくつかの最適化と新しいテクノロジーの実装が必要であり、その結果、ネットワーク容量が飛躍的に向上し、ブロックチェーン開発の新しいフェーズを示します。
Solanaネットワークを可能にする8つの重要な革新があります。
- Proof of History(POH) —コンセンサスの前の時計。
- Tower BFT —PBFTのPoH最適化バージョン。
- タービン—ブロック伝播プロトコル。
- Gulf Stream —Mempoolなしのトランザクション転送プロトコル。
- Sealevel —並列スマートコントラクトランタイム。
- パイプライン—検証最適化のためのトランザクション処理ユニット
- Cloudbreak —水平方向にスケーリングされたアカウントデータベース。と
- アーカイバ—分散型台帳ストア
このブログ投稿では、Solanaの並列スマートコントラクトランタイムであるSealevelについて説明します。始める前に考慮すべきことの1つは、EVMとEOSのWASMベースのランタイムはすべてシングルスレッドであるということです。つまり、一度に1つのコントラクトがブロックチェーンの状態を変更します。Solanaに組み込まれているのは、バリデーターで使用可能な数のコアを使用して、何万ものコントラクトを並行して処理できるランタイムです。
Solanaがトランザクションを並行して処理できる理由は、Solanaトランザクションが、実行中にトランザクションが読み取りまたは書き込みを行うすべての状態を記述するためです。これにより、重複しないトランザクションを同時に実行できるだけでなく、同じ状態を読み取るだけのトランザクションも同時に実行できます。
プログラムとアカウント
アカウントデータベースであるCloudbreakは、公開鍵からアカウントへのマッピングです。アカウントは残高とデータを維持します。データはバイトのベクトルです。アカウントには「所有者」フィールドがあります。所有者は、アカウントの状態遷移を管理するプログラムの公開鍵です。プログラムはコードであり、状態はありません。それらは、状態遷移のために割り当てられたアカウントのデータベクトルに依存しています。
- プログラムは、所有するアカウントのデータのみを変更できます。
- プログラムは、所有するアカウントのみを借方に記入できます。
- どのプログラムでも、どのアカウントにもクレジットを付与できます。
- すべてのプログラムが任意のアカウントを読み取ることができます。
デフォルトでは、すべてのアカウントはシステムプログラムが所有するものとして開始されます。
- システムプログラムは、アカウントの所有権を割り当てることができる唯一のプログラムです。
- システムプログラムは、ゼロで初期化されたデータを割り当てることができる唯一のプログラムです。
- アカウントの所有権の割り当ては、アカウントの存続期間中に1回だけ行うことができます。
ユーザー定義プログラムは、ローダープログラムによってロードされます。ローダープログラムは、アカウント内のデータを実行可能としてマークすることができます。ユーザーは、次のトランザクションを実行してカスタムプログラムをロードします。
- 新しい公開鍵を作成します。
- コインを鍵に移します。
- システムプログラムにメモリを割り当てるように指示します。
- アカウントをローダーに割り当てるようにシステムプログラムに指示します。
- バイトコードをメモリに分割してアップロードします。
- メモリを実行可能としてマークするようにローダープログラムに指示します。
この時点で、ローダーはバイトコードを検証し、バイトコードがロードされるアカウントを実行可能プログラムとして使用できます。新しいアカウントは、ユーザー定義プログラムが所有しているものとしてマークできます。
ここでの重要な洞察は、プログラムはコードであり、Key-Valueストア内には、プログラムとそのプログラムのみが書き込みアクセス権を持つキーのサブセットがいくつか存在するということです。
トランザクション
トランザクションは命令ベクトルを指定します。各命令には、プログラム、プログラム命令、およびトランザクションが読み取りと書き込みを行うアカウントのリストが含まれています。このインターフェイスは、デバイスへの低レベルのオペレーティングシステムインターフェイスに触発されています。
size_t
readv(int d、const struct iovec * iov、int iovcnt);
struct iovec {
char * iov_base; / *ベースアドレス。* /
size_t iov_len; /* 長さ。* /
};
readvやwritevなどのインターフェースは、ユーザーが読み取りまたは書き込みを行うすべてのメモリを事前にカーネルに通知します。これにより、OSはプリフェッチし、デバイスを準備し、デバイスで許可されている場合は操作を同時に実行できます。
Solanaでは、各命令はVMに事前に読み取りと書き込みを行うアカウントを通知します。これが、VMに対する最適化のルートです。
- 何百万もの保留中のトランザクションを並べ替えます。
- 重複しないすべてのトランザクションを並行してスケジュールします。
さらに、CPUおよびGPUハードウェアの設計方法を利用できることもあります。
SIMD命令を使用すると、1つのコードを複数のデータストリームで実行できます。これは、SealevelがSolana設計に固有の追加の最適化を実行できることを意味します。
- すべての命令をプログラムIDでソートします。
- すべてのアカウントで同時に同じプログラムを実行します。
これがなぜこれほど強力な最適化であるかを理解するには、CUDA開発者ガイドをご覧ください。
「CUDAアーキテクチャは、マルチスレッドストリーミングマルチプロセッサ(SM)のスケーラブルなアレイを中心に構築されています。ホストCPU上のCUDAプログラムがカーネルグリッドを呼び出すと、グリッドのブロックが列挙され、使用可能な実行能力を持つマルチプロセッサに分散されます。」
最新のNvidiaGPUには4000個のCUDAコアがありますが、約50個のマルチプロセッサがあります。マルチプロセッサは一度に1つのプログラム命令しか実行できませんが、80の異なる入力を介してその命令を並列に実行できます。したがって、Sealvelによってロードされる着信トランザクションがすべて、CryptoKitties :: BreedCatsなどの同じプログラム命令を呼び出す場合、Solanaは、使用可能なすべてのCUDAコアですべてのトランザクションを同時に実行できます。
パフォーマンスにはフリーランチがないため、SIMDの最適化を実現するには、実行される命令に少数のブランチが含まれ、すべて同じブランチを使用する必要があります。マルチプロセッサは、実行がバッチで取る最も遅いパスに拘束されます。この考慮事項があっても、Sealevelを介した並列処理は、シングルスレッドランタイムと比較してブロックチェーンネットワークが機能する方法の基本的な開発を提供し、非常に高いスループットと使いやすさを可能にします。
SolanaによるSealevelの実装と、Proof of History、Proof of Replication、Gulf Streamなどのイノベーションを組み合わせて、世界で最もパフォーマンスの高いブロックチェーンを作成します。ソラナのテストネットは今日ライブです。https://testnet.solana.comで見ることができます。コストの観点から、実行しているノードはほんの一握りです。ただし、ベンチマークのために、AWS、GCE、Azureの23のデータセンターにまたがる200を超える物理的に異なるノード(共有ハードウェア上ではない)に多くのインスタンスでスピンアップしました。
ランタイムは今日機能しており、開発者は今すぐtestnowにコードをデプロイできます。開発者は今日Cでスマートコントラクトを構築でき、私たちはRustツールチェーンに積極的に取り組んでいます。Rustは、Solanaスマートコントラクト開発の主力言語になります。錆ツールチェーンは公開されているソラナのJavascript SDKの一部として、私たちはさらにソフトウェア開発キットに反復されています。
ソラナはすぐ経由でノードを実行するためにバリデーターを奨励パブリックベータ版が起動しますソーラーカーレースステークスのコスモスのゲームに類似- -そうするためにトークンを獲得しながら、ソラナネットワークの限界をテストするために広く一般に挑戦します。