Expand description
§solana-readonly-account
Reimplementation of ReadableAccount to enable code reuse across off-chain clients (solana-sdk) and on-chain programs (solana-program)
§Why was this crate created?
- You cannot use the original
ReadableAccounttrait from solana-sdk in on-chain programs because the solana-sdk feature flags don’t work properly and it won’t compile withbuild-sbf Rc<RefCell<>>s in AccountInfo make it incompatible with&[u8]for.data
§Library
The 6 main account fields (key, lamports, data, owner, is_executable, rent_epoch) are split into individual getter traits. This splitting allows for greater trait composability and flexibility.
For example, say you had a function that only requires the account’s owner and this is a known static pubkey. Instead of having to fetch the full Account just to read its already-known owner field, or creating a dummy Account, you can simply define a newtype that only needs to implement ReadonlyAccountOwner, while still maintaining the ability to use this function with on-chain AccountInfos.
§Usage
Importing the respective traits from the crate now enables you to write generic functions that work both on-chain and off-chain
use solana_program::{
program_error::ProgramError, program_pack::Pack,
};
use solana_readonly_account::ReadonlyAccountData;
use spl_token_2022::state::Account;
pub fn try_deserialize_token_account<A: ReadonlyAccountData>(
acc: A,
) -> Result<Account, ProgramError> {
Account::unpack(&acc.data())
}By default, this crate has zero dependencies and only provides the trait definitions.
§Crate Features
§keyed
Since many offchain account structs such as solana_sdk::Account don’t have a pubkey field, the following Keyed wrapper struct is defined to impl ReadonlyAccountPubkey and ReadonlyAccountPubkeyBytes for:
pub struct Keyed<T> {
pub pubkey: Pubkey,
pub account: T,
}§keyed-bytes
Similar to keyed but using [u8; 32] instead of Pubkey for zero dependencies.
§solana-pubkey
Enables support for solana’s Pubkey types on top of the raw [u8; 32] types.
§solana-program
impls the traits for AccountInfo
§solana-sdk
impls the traits for Account and AccountSharedData.
Do NOT enable this feature in an on-chain program crate, or cargo-build-sbf will fail.
§Testing
cargo test --all-features
Modules§
- keyed
keyed - keyed_
bytes keyed-bytes - keyed_
conv keyedandkeyed-bytes - program
solana-program - pubkey
solana-pubkey - sdk
solana-sdk
Traits§
- Readonly
Account Data - A readonly account that you can read the data of
- Readonly
Account IsExecutable - A readonly account that you can read whether it’s executable or not
- Readonly
Account Lamports - A readonly account that you can read the lamports of
- Readonly
Account Owner Bytes - A readonly account that you can read the owner program of
- Readonly
Account Pubkey Bytes - A readonly account that you can read the pubkey of
- Readonly
Account Rent Epoch - A readonly account that you can read the rent epoch of