Crates.io | solana-readonly-account |
lib.rs | solana-readonly-account |
version | 2.0.0 |
source | src |
created_at | 2023-12-11 04:47:48.480207 |
updated_at | 2024-08-03 11:14:09.458324 |
description | Readonly solana account field getter traits extendable for both on-chain and off-chain structs |
homepage | |
repository | https://github.com/igneous-labs/sanctum-solana-utils.git |
max_upload_size | |
id | 1064754 |
size | 20,154 |
Reimplementation of ReadableAccount to enable code reuse across off-chain clients (solana-sdk) and on-chain programs (solana-program)
ReadableAccount
trait from solana-sdk in on-chain programs because the solana-sdk feature flags don't work properly and it won't compile with build-sbf
Rc<RefCell<>>
s in AccountInfo make it incompatible with &[u8]
for .data
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 AccountInfo
s.
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.
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.
cargo test --all-features