요약
계정은 5개의 필드를 가집니다: lamports, data, owner, executable, rent_epoch. 각 계정은 고유한 32바이트 주소로 식별됩니다. 계정은 온체인에 유지되기 위해 데이터 크기에 비례하는 최소 lamport 잔액을 보유해야 합니다.
계정 주소
모든 계정 주소는 32바이트 값이며, base58로 인코딩된 문자열로 표시됩니다. 주소는 두 가지 유형 중 하나일 수 있습니다:
- 공개 키: 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와 하나 이상의 선택적 시드로부터 결정론적으로 파생됩니다. 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*와 동일)이며 다섯 개의 필드를
포함합니다:
| 필드 | 타입 | 설명 |
|---|---|---|
lamports | u64 | lamport 단위의 잔액. 소유자는 차감 가능하며, 모든 프로그램은 입금 가능합니다. |
data | Vec<u8> | 계정 상태 또는 프로그램 바이트코드. 최대 10 MiB. 소유자만 쓰기 가능합니다. |
owner | Pubkey | 쓰기 권한을 가진 프로그램. 데이터가 0으로 초기화된 경우에만 재할당 가능합니다. |
executable | bool | True = 프로그램 계정입니다. |
rent_epoch | Epoch | 더 이상 사용되지 않습니다. rent 면제 계정의 경우 u64::MAX로 설정됩니다. |
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,}
Lamport
lamports 필드는 계정의 잔액을 lamport
단위로 보유합니다 (1 SOL = 1,000,000,000 lamport).
모든 계정은 데이터를 온체인에 저장하기 위해 rent 면제 잔액이라고 하는 최소 lamport 잔액을 유지해야 합니다. 이 잔액은 계정의 데이터 크기에 비례합니다.
"rent"라고 자주 불리지만, rent 면제 잔액은 환불 가능한 보증금으로 작동하며, 계정이 닫힐 때 전체 잔액이 회수됩니다.
minimum_balance()
및 rent
상수를
참조하세요.
Data
data 필드는 임의의 바이트 배열을 저장합니다. 그 내용은 계정 유형에 따라
다릅니다:
- 프로그램 계정: 실행 가능한 바이트코드 또는 바이트코드를 저장하는 프로그램 데이터 계정의 주소를 포함합니다.
- 데이터 계정: 프로그램 정의 상태 데이터를 포함합니다. 소유 프로그램이 직렬화 형식을 정의합니다.
계정 데이터를 읽으려면 두 단계가 필요합니다:
- 주소로 계정을 가져옵니다.
data필드를 원시 바이트에서 프로그램 정의 데이터 구조로 역직렬화합니다.
소유자
owner 필드는 이 계정을 소유한 프로그램의 프로그램 ID(공개 키)를 포함합니다.
소유자 프로그램만이 다음을 수행할 수 있습니다:
- 계정의
data필드 수정 - 계정의
lamports필드에서 램포트 차감
모든 프로그램은 다른 계정에 램포트를 추가할 수 있지만, 소유자만이 계정에서 램포트를 차감할 수 있습니다.
프로그램 계정의 경우, 소유자는 계정의 로더 프로그램입니다.
실행 가능
Rent epoch
rent_epoch 필드는 더 이상 사용되지 않습니다.
이전에는 계정의 온체인 데이터 유지 비용을 지불하기 위해 램포트가 자동으로
차감되는 시점을 추적했습니다. rent 수집이 더 이상 사용되지 않으므로,
rent_epoch는 모든 새로운 rent 면제 계정에 대해 u64::MAX로 설정됩니다.
Is this page helpful?