Solanaのアカウントモデルとは
執筆者 Petar Todorov
Solana上のすべてのものはアカウントとみなすことができ、アカウントはプロトコルがブロックチェーン上のデータを「整理する」ための仕組みです。この記事では、Solana Account Modelの全体像として、その種類とカテゴリ、アカウントの構成要素、そして「rent」の概念について解説します。
Solanaアカウントとは何か、どのように機能するのか
Solanaのアカウントは、あらゆるデータ型を保持できる保管庫と考えることができます。SOLのようなトークンから、プログラムの状態変数(整数、文字列、公開鍵など)、さらにはプログラム自体まで保持可能です。 すべてのアカウントには所有者が指定されており、1つの所有者が複数のアカウントを所有することができます。
Account Modelはよくコンピュータのファイルシステムに例えられます:
Solanaアカウントの種類とは
Solanaアカウントの種類には、実行可能(executable)と非実行可能(non-executable)の2つの主要なタイプがあります。これは、SolanaのプログラムがEthereumのスマートコントラクトのように状態を保存しないため、両方の動作を分離する必要があるからです。
実行可能プログラムとは
実行可能プログラムは、他のアカウントを所有・作成して状態を保存する、不変のコードで構成されています。そのコードはRustのような言語で書かれ、バイトコードの一種であるeBPFにコンパイルされます。
実行可能プログラムの最も一般的な例は、SolanaのコアであるSystem Programです。これは、人々がトークンやNFTにアクセスするために使用するアカウント(ウォレット)の作成を担っています。
非実行可能プログラムとは
非実行可能プログラムは、プログラム変数、トークン残高、NFT、ファンジブルトークンなど、他のすべての種類のデータを含む「ストレージ」アカウントです。非実行可能アカウントを通じて、プロトコルは各トランザクション後に発生した状態の変化を反映します。
Ethereumのスマートコントラクトとsolanaのプログラムの違い
スマートコントラクトには、状態変数が保存される「storage」と呼ばれる特別な区画があらかじめ組み込まれています。スマートコントラクトはその実行可能なコードを使ってこれらの状態変数を変更します。Ethereumのコントラクトは、実行可能コードと非実行可能コードが共存する統一された場所と見なすことができます。
USDCトークンを例に見てみましょう。そのコントラクトには、ユーザーのアドレスを各自のUSDC残高にマッピングする「balances」というマッピングが含まれています。USDCトークンを送受信すると、コントラクトはその実行可能コードによって自動的に変化を反映します。
Solanaはこれを異なる方法で処理します。個々のトークン保有者ごとに新しいアカウントを作成するUSDCトークンプログラムが存在します。これらのアカウントは、保有者が利用可能なUSDC残高を保存します。ユーザーがトランザクションを発行すると、USDC Tokenアカウントは、交換を行おうとするユーザーの関連トークンアカウントを検索し、その変化をそれらに反映します。

Solanaアカウントのカテゴリとは
実行可能アカウントと非実行可能アカウントは、native programs、program accounts、data accountsなどのいくつかの追加カテゴリに分けられます。
実行可能なnative programsとは
実行可能なnative programsはSolanaエコシステムに「ネイティブ」に組み込まれており、バリデーターノードの維持・運用などのタスクを担っています。この種類の最もよく知られた例はSystem Programであり、新しいシステムアカウント(一般に「ウォレット」として知られるもの)の作成やSOLの送金などを担当しています。Native Programsの他の例としては、ステーキングの仕組みを担うStake Programや、EthereumのEVMに似たBPF Loaderがあります。
実行可能なprogram accountsとは
実行可能なprogram accountsは、他のプログラムを作成し保存する、あらかじめ用意されたSolanaプログラムです。良い例として、Solana Program Library(SPL)が挙げられます。これは、トークンの作成・スワップ・貸付、ステークプールの生成、オンチェーンのネームサービスの維持など、多くのオンチェーン活動をサポートするプログラムの集まりです。SPLを代表するものとして、トークンの作成と管理を行うToken Programがあります。
Solanaのusdcトークンは、Token Programによって管理される単なるTokenアカウントです。しかし、Tokenアカウントはユーザーのトークン残高を保存しません。これは3つ目の種類のアカウントであるdata accountsのメンバーによって処理されます。
非実行可能なdata accountsとは
Native ProgramsとProgram accountsが実行可能とみなされるのに対し、data accountsはその逆で、特定のプログラムおよびSolanaプロトコル全体の状態変化を反映するレジストリです。
data accountsは以下に分けられます:
- Token accounts - Token Programによって作成されるアカウント
- Associated Token Accounts (ATA) - 個々のユーザーのトークン残高を保存するアカウント
- System Owned Accounts - データを保存し、トランザクションの署名を可能にする
Token accountsは、それぞれの個別のファンジブルトークン(USDC、USDTなど)を表し、供給量、小数点以下の桁数、名称といったトークンの基本情報を含みます。それぞれ固有のTokenアカウントに対して、異なるassociated token account (ATA)が生成されます。例えば、USDCとUSDTの両方を保有している場合、それぞれUSDCおよびUSDTのTokenアカウントによって作成された2つのATAにアクセスできます。

Solanaアカウントの要素とは
各アカウントの要素はメタデータのセットであり、プロトコルがアカウントの種類や追加情報を容易に理解できるようになっています。 メタデータは以下で構成されます:
- lamports - アカウントのSOL残高で、lamportsで表され、1 lamportは1 SOLトークンの10億分の1に相当します
- owner - アカウントを所有するプログラムのアドレス
- executable - アカウントが実行可能コードを含むかどうかを示すブール値
- data - アカウントに保存される生のデータバイト配列で、ストレージ変数か実行可能コードのいずれかです
- rent_epoch - アカウントが次にrentを支払う必要があるepochを示します
ownerとholderの違いは、ownerがアカウントを制御するプログラムであるのに対し、holderはアカウントの秘密鍵を保持するユーザーであるという点です。例えば、System Owned AccountはSolanaのNative System Programによって所有されています。
Solanaアカウントのrentとは
すべてのアカウントは、ブロックチェーン上のメモリを使用するためにrent手数料を支払います。これは、攻撃者がネットワークのメモリをすべて使用してネットワークを詰まらせることを防ぐための予防措置です。
ブロックチェーンがすべてのユーザーを満足させるためには、何らかの経済的インセンティブが必要です。これは特に、すべてのトランザクションを検証するためにハードウェアと計算能力を提供するバリデーターに当てはまります。バリデーターはすべての状態変化の作業コピーを維持する必要があり、その報酬としてrentを受け取ります。
2年分のrent手数料に相当する最低残高を維持しているアカウントは免除されます。そうでない場合、トランザクションで参照された際、または現在2日に相当する各epochごとに課金されます。アカウントがrent免除に必要な最低限のSOLを保有していない場合、そのデータはチェーンから削除されます。
Solanaアカウントの作成方法
Solana上でSystem Accountを作成するというのは、ユーザーが新しい「ウォレット」を作成するたびにSolanaウォレットが裏側で行っていることです。ウォレットは、ED25519楕円曲線上にある64バイトのキーペアを生成することで新しいアカウントを作成します。最初の32バイトは秘密鍵で、ユーザーがトランザクションを作成して他のアカウントやプログラムと相互作用したい場合に使用されます。次の32バイトはウォレットの公開鍵です。
Solanaでの開発を始める
Account Modelは、Solanaプロトコルがデータを整理するために使用するシステムです。アカウントは、生データ、コード、状態変数からトークン残高、NFTなどまで、あらゆるものを保持できる保管庫と考えることができます。アカウントには2つの主要な種類があります: 実行可能と非実行可能です。
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開発者向けプロダクトとツールを、豊富なリソース、コミュニティ、そして卓越したサポートと組み合わせて提供します。