原作者: Foresight News、Alex Liu

Solana は、dApps をサポートするように設計された高性能ブロックチェーン プラットフォームで、独自のコンセンサス メカニズムとアーキテクチャ設計によって実現されるスピードとスケーラビリティで知られています。この記事ではイーサリアムを比較対象として、Solana スマートコントラクトプログラミングモデルの特徴を簡単に紹介します。

スマートコントラクト、オンチェーンプログラム:

イーサリアム上で実行されるプログラムはスマート コントラクトと呼ばれ、イーサリアム上の特定のアドレスに配置された一連のコード (関数) とデータ (状態) です。 (ああ、コードとデータは結合されています) スマートコントラクトもコントラクトアカウントと呼ばれるイーサリアムアカウントであり、残高があり、トランザクションオブジェクトになることができますが、人間が制御することはできず、ネットワーク上にデプロイされてプログラムとして実行されます。

Solana 上で実行される実行可能コードはオンチェーン プログラムと呼ばれ、各トランザクションで送信された命令を解釈できます。これらのプログラムは、ネイティブ プログラムとしてネットワーク コアに直接展開することも、SPL プログラムとして誰でも公開することもできます。

  • 命令: 命令は、Solana チェーン上のプログラムを表す固有の用語です。オンチェーン プログラムは、特定の操作を実行する最小単位である命令で構成されます。各 Solana トランザクションには 1 つ以上の命令が含まれます。命令では、特定のオンチェーン プログラムの呼び出し、アカウント、入力のリストの受け渡し、バイト配列の提供など、実行するアクションを指定します。命令には計算上の制約があるため、少数の計算ユニットを使用するか、高価な操作を複数の命令に分割するようにオンチェーン プログラムを最適化する必要があります。

  • ネイティブ プログラム: 検証ノードに必要な機能を提供するネイティブ プログラム。これらの中で最も有名なのは、新しいアカウントの作成と 2 つのアカウント間の SOL の転送を管理するシステム プログラムです。

  • SPL プログラム: トークンの作成、交換、貸出、プレッジ プールの作成、オンチェーン ドメイン名解決サービスのメンテナンスなどを含む、一連のオンチェーン アクティビティを定義します。このうち、SPL トークン プログラムはトークンの操作に使用され、関連付けられたトークン アカウント プログラムは他のカスタマイズされたプログラムを作成するためによく使用されます。

あなたはそれをスマートコントラクトと呼びますが、私はそれをオンチェーンプログラムと呼びます。誰もが異なる意見を持っていますが、それらはすべてブロックチェーン上で実行されるコードを指します。 Zhang、San、Li、Si、Wang Mazi はすべて個人名であり、その質を他の側面で検討する必要があります。

アカウントモデル、データの分離:

イーサリアムと同様に、Solana もアカウント モデルに基づくブロックチェーンですが、Solana はイーサリアムとは異なるアカウント モデルを提供し、異なる方法でデータを保存します。

Solana では、アカウントはウォレット情報やその他のデータを保存できます。アカウント定義フィールドには、Lamports (アカウント残高)、Owner (アカウント所有者)、Executable (実行可能アカウントかどうか)、および Data (アカウントに保存されているデータ) が含まれます。各アカウントは、そのアカウントがどのプログラムの状態ストアとして使用されるかを区別するために、プログラムをその所有者として指定します。これらのオンチェーン プログラムは読み取り専用またはステートレスです。プログラム アカウント (実行可能アカウント) は BPF バイトコードのみを保存し、状態を他の独立したアカウント (非実行可能アカウント)、つまり Solana のプログラミングに保存します。モデルはコードとデータを分離します。

Ethereum アカウントは主に EVM 状態への参照であり、そのスマート コントラクトにはコード ロジックが含まれるだけでなく、ユーザー データも保存する必要があります。これは、EVM の歴史から名残された設計上の欠陥と考えられることがよくあります。​

この違いを過小評価しないでください。 Solana スマート コントラクトは、結合されたプログラミング モデル (イーサリアムなど) を備えたブロックチェーンよりも基本的に攻撃が困難です。

Ethereum では、スマート コントラクトの「所有者」は、スマート コントラクトと 1 対 1 で対応するグローバル変数です。したがって、関数を呼び出すと、コントラクトの「所有者」が直接変更される可能性があります。

Solana では、スマート コントラクトの「所有者」は、グローバル変数ではなく、アカウントに関連付けられたデータです。アカウントは 1 対 1 でリンクされるのではなく、複数の所有者を持つことができます。スマート コントラクトのセキュリティの脆弱性を悪用するには、攻撃者は問題のある関数を見つけるだけでなく、その関数を呼び出すための「正しい」アカウントを準備する必要もあります。通常、Solana スマート コントラクトには複数の入力アカウントが含まれ、制約 (「アカウント 1.所有者==アカウント 2.キー」など) を通じてそれらの間の関係を管理するため、このステップは簡単ではありません。 「正しいアカウントの準備」から「攻撃の開始」までのプロセスは、セキュリティ監視担当者が攻撃前にスマートコントラクトに関連する「偽の」アカウントを作成する不審なトランザクションを積極的に検出するのに十分です。

イーサリアムのスマート コントラクトは、一意のパスワードを取得する限り、完全な所有権を取得できますが、Solana のスマート コントラクトは、多くのパスワードを持つ金庫ですが、アクセス許可を取得する必要があるだけではありません。パスワードを取得する方法もありますが、ロックを開けるためにはパスワードに対応する番号を把握する必要もあります。

プログラミング言語

Rust は、Solana でスマート コントラクトを開発するための主要なプログラミング言語です。そのパフォーマンスとセキュリティ機能により、ブロックチェーンやスマート コントラクトの高リスク環境に適しています。 Solana は、C、C++、および (非常に珍しい) 他の言語もサポートしています。オンチェーン プログラムの開発をサポートするために、Rust および C 用の公式 SDK が提供されています。開発者は、ツールを使用してプログラムを Berkley Packet Filter (BPF) バイトコード (ファイルの拡張子は .so です) にコンパイルし、それを Solana チェーンにデプロイし、Sealevel 並列スマート コントラクト ランタイムを通じてスマート コントラクトのロジックを実行できます。

Rust 言語自体は使い始めるのが難しく、ブロックチェーン開発用にカスタマイズされていないため、多くの要件では車輪の再発明と冗長コードが必要になります。 (運用中の多くのプロジェクトは、開発を簡素化するために、Backpack の共同作成者 Armani によって作成された Anchor フレームワークを使用しています) ブロックチェーン開発専用に新しく作成されたプログラミング言語の多くは、Cairo (Starknet)、Move (Sui、Aptos など) などの Rust に基づいています)。

本番環境の多くのプロジェクトではアンカー フレームワークが使用されています

Ethereum スマート コントラクトは主に Solidity 言語で開発されます (構文は JavaScript に似ており、コード ファイルの拡張子は .sol です)。比較的単純な構文とより完成度の高い開発ツール (Hardhat フレームワーク、Remix IDE など) により、一般に Ethereum の開発エクスペリエンスはよりシンプルで新鮮なものであるのに対し、Solana 開発は始めるのがより難しいと考えられています。したがって、Solana は現在非常に人気がありますが、実際にはイーサリアムの開発者の数は依然として Solana よりもはるかに多いです。

特定の道路状況では、トップレーシングカーは改造車ほど速くありません。 Rust は、Solana のパフォーマンスと安全性を効果的に保証するトップレベルのレーシングカーのようなものですが、オンチェーンプログラム用にこのトラックを開発するように設計されておらず、代わりに運転(開発)の難易度が増加します。 Rust ベースのパブリック チェーンを使用し、チェーン用のカスタム言語を開発することは、レーシング カーを道路状況により適したものに変更することに相当します。ここではソラナは不利な状況にあります。

要約する

Solana のスマート コントラクト プログラミング モデルは革新的です。これは、主要なプログラミング言語として Rust を使用するステートレスなスマート コントラクト開発手法と、ロジックを状態から分離するアーキテクチャを提供し、開発者がスマート コントラクトを構築および展開するための強力な環境を提供し、セキュリティとパフォーマンスを確保しますが、開発はより困難になります。高スループット、低コスト、スケーラビリティに重点を置いている Solana は、高パフォーマンスの dApps を作成しようとしている開発者にとって現在も選択肢となっています。

参考リンク

ソラナ

https://ethereum.org/en/developers/docs

https://www.anchor-lang.com/