概要
アカウントには5つのフィールドがあります:lamports、data、owner、executable、rent_epochです。各アカウントは一意の32バイトアドレスで識別されます。アカウントがオンチェーンに残るには、データサイズに比例した最小lamport残高を保持する必要があります。
アカウントアドレス
すべてのアカウントアドレスは32バイトの値で、base58エンコードされた文字列として表示されます。アドレスは次の2つのタイプのいずれかです:
- 公開鍵:Ed25519のkeypairに対応します(秘密鍵を持ちます)
- Program Derived Address(PDA):プログラムIDとシードから決定論的に導出されます(秘密鍵を持ちません)
base58エンコードされた公開鍵アドレスを持つアカウント
公開鍵
*rsKeypair*は、公開鍵(アカウントアドレスとして使用)と秘密鍵(トランザクションの署名に使用)で構成されます。次の例では、Solana
SDKを使用してkeypairを生成します。
import { generateKeyPairSigner } from "@solana/kit";// Kit does not enable extractable private keysconst keypairSigner = await generateKeyPairSigner();console.log(keypairSigner);
Program Derived Address
Program Derived Address(PDA)は、プログラムIDと1つ以上のオプションのシードから決定論的に導出されます。PDAには対応する秘密鍵がありません。次の例では、Solana SDKを使用してPDAを導出します。
import { Address, getProgramDerivedAddress } from "@solana/kit";const programAddress = "11111111111111111111111111111111" as Address;const seeds = ["helloWorld"];const [pda, bump] = await getProgramDerivedAddress({programAddress,seeds});console.log(`PDA: ${pda}`);console.log(`Bump: ${bump}`);
アカウントフィールド
すべての
Account
は最大サイズが
MAX_ACCOUNT_DATA_LEN
(10
MiB、*rsMAX_PERMITTED_DATA_LENGTH*に相当)であり、5つのフィールドを含みます。
| フィールド | 型 | 説明 |
|---|---|---|
lamports | u64 | lamport単位の残高。所有者はデビット可能、任意のプログラムがクレジット可能。 |
data | Vec<u8> | アカウント状態またはプログラムバイトコード。最大10 MiB。所有者のみ書き込み可能。 |
owner | Pubkey | 書き込みアクセス権を持つプログラム。データがゼロ化された場合のみ再割り当て可能。 |
executable | bool | True = program account。 |
rent_epoch | Epoch | 非推奨。rent免除アカウントの場合はINLINE_CODE_PLACEHOLDER_cd7972524d20f29fに設定。 |
pub struct Account {/// lamports in the accountpub lamports: u64,/// data held in this account#[cfg_attr(feature = "serde", serde(with = "serde_bytes"))]pub data: Vec<u8>,/// the program that owns this account. If executable, the program that loads this account.pub owner: Pubkey,/// if true, this account's data contains a program (and is now read-only)pub executable: bool,/// deprecatedpub rent_epoch: Epoch,}
Lamports
lamportsフィールドは、アカウントの残高を
lamports単位で保持します(1 SOL =
1,000,000,000 lamports)。
すべてのアカウントは、データをオンチェーンに保存し続けるために、rent免除残高と呼ばれる最小lamport残高を維持する必要があります。この残高はアカウントのデータサイズに比例します。
「rent」と呼ばれることが多いですが、rent免除残高は返金可能なデポジットとして機能し、アカウントが閉鎖されると全額が回収されます。
minimum_balance()
およびrent
定数を参照してください。
Data
dataフィールドは任意のバイト配列を格納します。その内容はアカウントタイプによって異なります。
- Program accounts: 実行可能なバイトコード、またはバイトコードを格納する program data account のアドレスを含みます。
- Data accounts: プログラム定義の状態データを含みます。所有プログラムがシリアライゼーション形式を定義します。
アカウントデータの読み取りには2つのステップが必要です。
- アドレスでアカウントを取得します。
dataフィールドを生バイトからプログラム定義のデータ構造にデシリアライズします。
オーナー
ownerフィールドには、このアカウントを所有するプログラムのプログラムID(公開鍵)が含まれます。
オーナープログラムは、以下の操作を実行できる唯一のプログラムです:
- アカウントの
dataフィールドを変更する - アカウントの
lamportsフィールドからlamportを差し引く
どのプログラムも他のアカウントにlamportを追加できますが、オーナーのみがlamportを差し引くことができます。
program accountの場合、オーナーはアカウントのローダープログラムです。
実行可能
executableフィールドは、アカウントがprogram accountかデータアカウントかを決定するブール値です:
true= program account(実行可能コードを含む)false= データアカウント(状態を保存)
Rent epoch
rent_epochフィールドは非推奨です。
以前は、アカウントがオンチェーンでデータを維持するためにlamportが自動的に差し引かれる時期を追跡していました。rent徴収が非推奨になったため、rent_epochは、すべての新しいrent免除アカウントでu64::MAXに設定されます。
Is this page helpful?