アカウントは、状態を保存するためのSolanaの基本的なデータ単位です。ネットワークは、すべての状態をキーバリューストアに保存します。各キーは32バイトのアドレスで、各値はアカウントです。
3つのアカウントとそのアドレスの図。アカウント構造の定義を含みます。
アカウント構造
アカウントアドレス(公開鍵、PDA)、すべてのアカウントが持つ5つのフィールド、 ストレージ残高、および非推奨のrentフィールドについて、インタラクティブなコードの ウォークスルーを交えて解説します。
アカウントタイプ
プログラムアカウント(実行可能コード)、データアカウント(プログラム状態)、システムアカウント、sysvar(クラスタ全体の状態)。
変更ルール
lamport、データ、所有者、実行可能フラグ、借用に関するランタイムで強制されるルール。
アカウントランタイム
アカウント読み込み検証、BPFシリアライゼーション形式、デシリアライゼーション。
重要な事実
- 構造: すべてのアカウントは同じ5つのフィールドを持ちます:lamports、data、owner、executable、rent_epoch。
- アドレス: 各アカウントは一意の32バイトアドレス(Ed25519公開鍵またはPDAのいずれか)で識別されます。
- 所有権: アカウントの所有者プログラムのみがデータを変更したり、lamportsを引き落としたりできます。任意のプログラムは、書き込み可能な任意のアカウントにlamportsを入金できます。
- アカウントストレージ: すべてのアカウントは、オンチェーンに存在し続けるために、データサイズに比例した返金可能な最低限のlamport残高を保持する必要があります。
制限
| 制限 | 値 | ソース |
|---|---|---|
| 最大アカウントデータサイズ | 10 MiB (10,485,760バイト) | MAX_ACCOUNT_DATA_LEN |
| 命令ごとの最大データ増加量 | 10 KiB (10,240バイト) | MAX_PERMITTED_DATA_INCREASE |
| トランザクションごとの最大データ増加量 | 20 MiB (20,971,520バイト) | MAX_ACCOUNT_DATA_GROWTH_PER_TRANSACTION |
| アカウント基本ストレージオーバーヘッド | アカウントあたり64バイト | TRANSACTION_ACCOUNT_BASE_SIZE |
| アドレスサイズ | 32バイト (Ed25519公開鍵) | -- |
| 最低ストレージ残高(計算式) | (account_size + 128) * 3,480 lamport/バイト年 * 2年 | minimum_balance() |
Is this page helpful?