EVM から SVM (Solana) に移行するには、仮想マシン間のいくつかの重要な違いを理解する必要があります。この記事では、アカウント、手数料、トランザクション、スマート コントラクト (プログラム) など、いくつかの違いについて説明します。また、ツールや SDK などの開発者のセットアップについても説明します。
最後に、開発者は Solana の旅を始めるために必要な知識を身に付けます。
基本的な違いを理解する
まず、EVM と SVM の最も重要な違いであるアカウント モデルの設計について見てみましょう。
アカウントモデル
Ethereum とは異なり、Solana は複数のコアを活用し、並列トランザクションをサポートするように設計されています。これを実現するために、Solana はアカウント モデルを使用します。
Solana のアカウントは、Solana 台帳内のレコードであり、データ(データ アカウント)を保持するか、実行可能なプログラム(Solana 上のスマート コントラクトまたはプログラム)のいずれかです。
Ethereum と同様に、各アカウントにはアドレス識別子があります。ただし、各スマート コントラクトが実行ロジックとストレージが結び付けられたアカウントである Ethereum とは異なり、Solana のスマート コントラクトは完全にステートレスです。実行するには、アカウントに状態を渡す必要があります。
コード例を見てみましょう。以下の Solidity コードでは、状態は int private count = 0 の行でスマート コントラクトに関連付けられています。
Rust (Solana) では、スマート コントラクト内に、initialize_counter という構造体があります。この初期カウンターは、カウント 0 のアカウントを作成します。アカウントはこのカウンターに渡され、カウントが増加します。これにより、状態がスマート コントラクト自体に保持されなくなります。
Solana では、データはプログラム外の別のアカウントに保存されます。プログラム内でロジックを実行するには、実行するアカウントを渡します。
このカウンター プログラムの場合、増分関数を呼び出すときにカウンター アカウントをプログラムに渡し、プログラムはカウンター アカウントの値を増分します。
アカウントモデル設計の利点
このアカウント モデルの主な利点の 1 つは、プログラムの再利用性です。
Ethereum の ERC20 インターフェースでは、開発者が新しいトークンを作成するたびに、指定された値を使用して ERC20 スマート コントラクトを Ethereum に再デプロイする必要があります。この再デプロイには高いコストがかかります。
しかし、Solana では、新しいトークンを作成するために新しいスマート コントラクトを作成してデプロイする必要はありません。代わりに、Solana トークン プログラムを使用して、ミント アカウントと呼ばれる新しいアカウントを作成し、トークンの数、小数点、誰がミントできるかなどの詳細を渡します。
これは、トークン プログラムにトランザクションを送信するだけで実行できます。たとえば、Solana プログラム ライブラリ CLI を使用すると、コマンドは 1 つだけです。
ローカル料金市場
アカウント モデルのもう 1 つの利点は、手数料市場がアカウントごとにローカルであることです。
Ethereum では、手数料市場はグローバルです。NFT コレクションが流行し、誰もが作成している場合、手数料は全員に対して上昇します。しかし、Solana では、手数料市場はアカウントごとにローカルであるため、その NFT コレクションを作成している人だけが、値上がりした手数料を支払います。参加していないユーザーには影響はありません。
料金
手数料について詳しく見ていきましょう。Solana では、手数料は基本手数料、優先手数料、レンタル料の 3 つのカテゴリに分かれています。それぞれ見ていきましょう。
基本手数料は、トランザクション内の署名の数に基づいて計算されます。署名 1 つあたりのコストは 5000 ランポート (0.000000001 ソル = 1 ランポート) です。トランザクションに 5 つの署名がある場合、基本手数料は 25000 ランポートになります。
優先手数料は、トランザクションに優先順位を付けるために追加できるオプションの手数料です。この手数料は、トランザクションで使用されるコンピューティング ユニットの量に基づいています。Ethereum ガスと同様に、この手数料はトランザクションに必要なコンピューティング リソースの単純な測定値です。
最後の料金であるレンタル料は、デポジットのようなものです。開発者がアカウントを作成したり、ネットワーク上にスペースを割り当てたりする場合、アカウントを維持するためにネットワークに SOL を預ける必要があります。レンタル料はネットワークに保存されているバイト数に基づいて計算され、スペースを割り当てると追加の基本料金が請求されます。
取引
Solana では、プログラムの実行はトランザクションがクラスターに送信されるところから始まります。Solana 上の各トランザクションは 4 つの部分で構成されます。
1 つ以上の命令。命令は Solana 上の最小の実行ロジックです。Ethereum スマート コントラクトの関数呼び出しのようなものと考えることができます。命令は、状態を更新するために Solana ランタイムを呼び出すプログラムを呼び出します (たとえば、トークン プログラムを呼び出して、あるアカウントから別のアカウントにトークンを転送します)。
読み取りまたは書き込みを行うアカウントの配列
1つ以上の署名
最近のブロックハッシュまたは nonce。Ethereum のように増分 nonce を使用する代わりに、Solana ではクラスターから最近のブロックハッシュが取得されます。このブロックハッシュを使用すると、トランザクションは 150 ブロックのみ有効となり、長期間有効なトランザクション署名がずっと後の日付で実行されるのを防ぎます。
Ethereum と Solana のもう 1 つの大きな違いは、Solana ではトランザクションに複数の命令 (Ethereum の関数呼び出し) を含めることができることです。つまり、単一のトランザクションで関数を連鎖させるためにカスタム スマート コントラクトを作成する必要はありません。各命令は個別の関数呼び出しにすることができ、トランザクション内で順番に実行されます。トランザクションもアトミックです。命令が失敗すると、トランザクション全体が失敗します。
取引の制限
Ethereum のガス制限と同様に、Solana トランザクションにはコンピューティング ユニットの制限があります。
その他の制限は次のとおりです:
参照される各アカウントでは、ブロックごとに最大 12,000,000 個のコンピューティング ユニットが使用される場合があります。
トランザクションが元に戻る前に、命令は深さ 4 でのみ呼び出すことができます。
メモリプール
Ethereum とは異なり、Solana にはメモリプールがありません。代わりに、Solana バリデータは、リーダー スケジュールに基づいて最大 4 人のリーダーにすべてのトランザクションを転送します。メモリプールがないため、ブロックハッシュの有効期限が切れるまでトランザクションはリーダーからリーダーへと移動しますが、クラスター全体のゴシップのオーバーヘッドも削減されます。
Solana 開発環境
それでは、Solana の開発者ツールのいくつかを見てみましょう。
プログラミング言語
Ethereum はスマート コントラクトの作成に主に Solidity を使用しますが、Solana は Rust を使用します。Ethereum から移行する場合は、Anchor フレームワークまたは Neon を検討してください。どちらも、開発者が使い慣れた EVM ツールを使用して Solana で構築できるようにすることで、より迅速に開始するのに役立ちます。
Ethereum と同様に、JavaScript、Python、Java など、最も人気のあるプログラミング言語の多くに対応したクライアント側 SDK が利用可能です。
開発者ツール
Solana には現在 Foundry に相当するものはありませんが、Solidity で使用されているものと同等のツールが幅広く用意されています。
さらに詳しく知りたい場合は、開発者リソースの広範なリストをご覧ください。
スマートコントラクトの作成
Solana でプログラムを作成する場合 (または既存の Ethereum スマート コントラクトを移行する場合)、いくつかの重要な違いがあります。ここでは説明しきれないほど多くの違いがありますが、最も一般的な違いをいくつか見てみましょう。
Solana にはマッピングは直接存在しません。代わりに、プログラムから派生したアドレスを使用します。マッピングと同様に、プログラムから派生したアドレスを使用すると、キーまたはアカウントからチェーン上に保存された値へのマップを作成できます。
Solana では、プログラムはデフォルトでアップグレード可能です。スマート コントラクトは、シンプルな CLI コマンド solana program deploy <program_filepath> でアップグレードできます。
Solidity スマート コントラクトを作成する場合、msg.sender または tx.origin のいずれかをチェックするのが一般的です。Solana にはこれに相当するものはありません。各トランザクションには複数の署名者が存在する可能性があり、トランザクションを送信する人が必ずしもトランザクションに署名した人とは限りません。
プログラムと展開方法の詳細については、このガイドをご覧ください。
もっと詳しく知る
これらは、Ethereum と Solana での開発における最も重要な違いの一部です。もちろん、学ぶべきことはまだまだたくさんあります。そして、始める最良の方法は、すぐに飛び込むことです。次のステップのためのリソースをいくつか紹介します。
開発者がブラウザからSolanaプログラムを作成、構築、デプロイできるSolana Playground
Solana Playground を使用した Solana 開発の紹介
Ethereum と Solana での開発の違いについて詳しく見てみましょう
ソラナブートキャンプ