Solanaのデータアカウントとプログラムアカウントの違い
執筆者 Tau
Solanaは、独自の アカウントモデルを用いてプロセスフローを制御することで、高速性、安全性、拡張性を実現するよう設計された分散型ブロックチェーンプラットフォームである。一般的にSolana dAppのレイアウトは、ネイティブアカウント、データアカウント、プログラムアカウントの3種類のアカウントで構成される。
本記事では、Solanaブロックチェーン上のデータアカウントとプログラムアカウントに焦点を当て、Ethereumにおけるアカウントの等価物であるEthereumスマートコントラクトとの違いを解説する。
Solanaのデータアカウントとは
Solanaのデータアカウントとは、トークンやドキュメントなど、あらゆる種類の情報を格納するSolanaブロックチェーン上のアカウントの一種である。 データアカウントは状態を保持できるが、実行可能ではない。
データアカウントは他のブロックチェーンプラットフォームのアカウントと類似しており、残高を持ち、トランザクションの送受信が可能である。これらのアカウントは、メタデータとともに、所有者およびランタイム時に可能な相互作用の種類を識別する。ウォレット、mint、トークンアカウントはデータアカウントの好例であり、値を保持し、ユーザーおよびプログラムアカウントに属している。
Solanaのプログラムアカウントとは
プログラムアカウントは、Solanaブロックチェーン上でコードを実行するために使われるスマートコントラクトであり、通常は受信したトランザクションや時間の経過によって実行が引き起こされる。 プログラムアカウントはデータアカウントと相互作用でき、ブロックチェーンへのデータの読み書きが可能である。プログラムアカウント自体は可変の状態を保持できないが、データアカウントからこれらを呼び出す。
Solanaのデータアカウントとプログラムアカウントの主な違いの一つは、プログラムアカウントは他のプログラムアカウントによってのみ作成できるのに対し、データアカウントは任意の開発者やユーザーが作成できる点である。ただし、プログラムアカウントを使ってさらにプログラムアカウントを作成することも可能であり、これによりSolana EVM上で複雑な多層のスマートコントラクトシステムを構築できる。
データアカウントとプログラムアカウントはどのように連携するか
データアカウントはプログラムアカウントが使用するデータを格納するために使用でき、プログラムアカウントはデータアカウントと相互作用してこのデータを読み書きできる。データアカウントとプログラムアカウントはSolanaブロックチェーン上で共存・連携し、幅広いdApp機能とサービスを実現する。
例えば、プログラムアカウントを使って、ユーザーがデータアカウント間でトークンを転送できるシンプルなトークンコントラクトを作成できる。この場合、プログラムアカウントはコントラクトのロジックの実行を担い、データアカウントはトークンの残高を格納するために使用される。
以下のような例である。
この例では、"transfer_tokens.wasm"というプログラムアカウントを作成し、あるアカウントから別のアカウントへトークンを転送するロジックを含めている。次に、invokeメソッドを使ってデータアカウントとプログラムアカウントを接続し、データアカウントと転送に必要な引数を配列として渡す。
プログラムアカウントが実行されると、データアカウントに格納されたデータを使ってトークン転送が行われる。この場合、プログラムアカウントはトークンアカウントから受取アカウントへ100トークンを転送する。
上記の例で示したプログラムフローは、任意の他のプログラムや、Solana Program Library(SPL)にある既製のプログラムの一部を使って試すことができる。
Solanaアカウント vs. Ethereumスマートコントラクト
Solanaのデータアカウントとプログラムアカウントは、Ethereumのスマートコントラクトと類似しているが、ストレージ、呼び出し方法、実行、ガスなど、いくつかの重要な違いがある。
SolanaのデータアカウントとプログラムはどのようにEthereumスマートコントラクトと異なるか
Solanaのデータアカウントとプログラムアカウントは、データの格納方法、コントラクトの呼び出し方、実行モデル、対応言語、ガスの点でEthereumスマートコントラクトと異なる。
1. データストレージ
Solanaブロックチェーンでは、データアカウントがデータの格納に使用されるのに対し、Ethereumブロックチェーンでは、データはスマートコントラクト内に格納される。これは、Solanaではデータとそれに相互作用するロジックが分離されているのに対し、Ethereumではデータとロジックが1つのスマートコントラクト内に統合されていることを意味する。
2. コントラクトの呼び出し
Solanaブロックチェーンでは、プログラムアカウントは受信したトランザクション、他のプログラムからの呼び出し(すなわちクロスプログラム呼び出し)、または時間の経過によって実行が引き起こされる。Ethereumブロックチェーンでは、スマートコントラクトは受信したトランザクションによって実行が引き起こされ、また他のスマートコントラクトから呼び出されることもできる。
3. 実行モデル
Solanaのデータアカウントとプログラムアカウントは、Solanaネットワークのバリデーターによって実行されるのに対し、Ethereumスマートコントラクトは各ノード上のEthereum仮想マシン(EVM)によって実行される。
4. EVMガスとデータの相関
Solanaのデータアカウントは無制限のデータを格納できるのに対し、Ethereumでは実行時に消費されるガス量によって決まるスマートコントラクトのストレージ容量に制限がある。
5. 対応言語
SolanaのプログラムアカウントはWebAssembly(WASM)にコンパイル可能な任意の言語で記述できるのに対し、Ethereumスマートコントラクトは通常SolidityまたはVyper(Solidityの実装をPythonベースにしたもの)で記述される。
Solanaのデータアカウントとプログラムアカウントは、どのようにEthereumスマートコントラクトと類似しているか
Solanaのデータアカウントとプログラムアカウントは、スマートコントラクトの機能性、分散性、不変性、透明性、プログラム可能性の点でEthereumスマートコントラクトと類似している。
1. スマートコントラクトの機能性
Solanaのアカウントと Ethereumのスマートコントラクトはいずれも、資産の転送やサプライチェーン管理の自動化など、トランザクションの促進とプロセスの自動化に使用できる。
2. 分散性
Solanaのアカウントと Ethereumのスマートコントラクトはいずれも、分散型のパブリックブロックチェーンネットワーク上にデプロイ・実行される。
3. 不変性
Solanaのデータアカウント・プログラムアカウント、またはEthereumのスマートコントラクトは、いったんブロックチェーンにデプロイされると、変更や削除ができない。
4. 透明性
Solanaのデータアカウント・プログラムアカウント、およびEthereumスマートコントラクトに格納されたコードとデータは公開されており、これにより透明性と監査可能性が確保される。
5. プログラム可能性
Solanaのデータアカウント・プログラムアカウントとEthereumスマートコントラクトはプログラム可能であり、ロジックを含み、特定の条件に基づいて関数を実行できる。Solanaでは、プログラムアカウントが他のプログラムアカウントを作成できるのに対し、Ethereumでは、スマートコントラクトが他のスマートコントラクトを呼び出すことができる。
Neon LabsのSolana EVMは、プログラム、アカウント、スマートコントラクトをどのように扱うか
Neon LabsのSolana EVMは、開発者がSolidity/Vyperのプログラミング言語を使ってEthereumスマートコントラクトを構築しSolanaブロックチェーンにデプロイすることを可能にするツールであり、既存のEthereumアプリをSolanaに移植することを容易にする。Neon EVMがSolana devnetおよびメインネットにローンチされる以前は、EthereumアプリはSolanaエコシステムと互換性がなかった。
Neon EVMは、スマートコントラクトがEthereumブロックチェーン上と同様に実行できるプラットフォームを提供しつつ、低いガス料金や高いスループットといった、通常Solanaブロックチェーン上でアカウントが享受する特徴を活かすことができる。
Solana EVMは、Solanaブロックチェーン上でEthereum仮想マシンをエミュレートすることによって機能し、Ethereumスマートコントラクトが、Ethereumブロックチェーン上で実行される場合と同様の方法でSolana上でも実行できるようにする。これにより、開発者は既存のSolidityプログラミング言語やEthereumエコシステムに関する知識を活かして、Solana上にアプリを公開できる。
AlchemyでSolanaアカウントを構築する
Solana上に構築される分散型アプリケーションは、通常、ネイティブアカウント、データアカウント、プログラムアカウントで構成される。ネイティブアカウントはSolana上のプログラムを表し、データアカウントは情報を格納し、プログラムアカウントはSolana上でコードを実行する。構築を始めたい場合は、Alchemyで無料のSolana開発者アカウントを登録しよう。
関連する概要
Solana2026年7月27日
Solanaノード:バリデーター、RPCノード、セルフホスティング
Solanaノードとは何か、バリデーター、RPCノード、セカンダリーデータシステムの違い、そしてセルフホストとプロバイダー利用をどう使い分けるか。
Solana2026年7月22日
Solanaアーカイブデータ: ブロックとトランザクションの全履歴をクエリする方法
Solanaアーカイブデータの解説: ノードが履歴をプルーニングする理由、アーカイブアクセスが必要なRPCメソッド、大規模にブロックとトランザクションの全履歴をクエリする方法。
Solana2026年5月28日
Solana Agent Kit vs GOAT vs ElizaOS:どのフレームワークを使うべきか?
Solana Agent Kit、GOAT、ElizaOSを比較:Solanaネイティブな深さ、マルチチェーンの広さ、フルエージェントランタイムのいずれかを選ぶ。コード例と意思決定フレームワークを掲載。

ブロックチェーンで魔法を生み出す
Alchemyは、最も強力なweb3開発者向けプロダクトとツールを、豊富なリソース、コミュニティ、そして卓越したサポートと組み合わせて提供します。