Skip to main content
Anchor provides utilities for converting between Anchor types and raw Solana types.

AccountInfo conversion

Convert Anchor accounts to AccountInfo:
let account_info = ctx.accounts.my_account.to_account_info();

Key extraction

Get the public key from any account:
let pubkey = ctx.accounts.my_account.key();

Borrowing account data

Access raw account data:
let data = ctx.accounts.my_account.try_borrow_data()?;
let mut data = ctx.accounts.my_account.try_borrow_mut_data()?;

Converting from AccountInfo

Load an Anchor account from AccountInfo:
let my_account = Account::<MyAccount>::try_from(&account_info)?;

Program ID access

let program_id = ctx.accounts.my_program.key();
// or
let program_id = *ctx.program_id;

Complete example

pub fn process(ctx: Context<Process>) -> Result<()> {
    // Get AccountInfo
    let account_info = ctx.accounts.data.to_account_info();
    
    // Get key
    let key = ctx.accounts.data.key();
    
    // Access raw data
    let data = account_info.try_borrow_data()?;
    
    Ok(())
}

Build docs developers (and LLMs) love