Skip to main content

SolanaAccounts Interface

software.sava.core.accounts.SolanaAccounts Provides constants for all Solana system programs, common programs, and sysvar accounts.

Constants

MAIN_NET
SolanaAccounts
Pre-configured instance with all mainnet program addresses.

Factory Method

static SolanaAccounts createAddressConstants(
    String systemProgram,
    String configProgram,
    String stakeProgram,
    // ... all other program addresses
)
systemProgram
String
required
System program address (11111111111111111111111111111111)
tokenProgram
String
required
SPL Token program address
token2022Program
String
required
Token-2022 program address

Program Accessors

All methods return PublicKey or AccountMeta instances: Native Programs
PublicKey systemProgram();
AccountMeta invokedSystemProgram();
AccountMeta readSystemProgram();

PublicKey stakeProgram();
PublicKey voteProgram();
PublicKey addressLookupTableProgram();
Common Programs
PublicKey computeBudgetProgram();
AccountMeta invokedComputeBudgetProgram();

PublicKey tokenProgram();
AccountMeta invokedTokenProgram();
AccountMeta readTokenProgram();

PublicKey token2022Program();
PublicKey associatedTokenAccountProgram();
PublicKey memoProgram();
Sysvar Accounts
PublicKey clockSysVar();
AccountMeta readClockSysVar();

PublicKey rentSysVar();
PublicKey epochScheduleSysVar();
PublicKey instructionsSysVar();

Example Usage

import software.sava.core.accounts.SolanaAccounts;

var accounts = SolanaAccounts.MAIN_NET;

// Get system program
var systemProgram = accounts.systemProgram();

// Get token program as invoked account meta
var tokenProgramMeta = accounts.invokedTokenProgram();

// Get rent sysvar as read-only account meta
var rentSysVar = accounts.readRentSysVar();

AccountWithSeed

software.sava.core.accounts.AccountWithSeed Represents an account derived from a base key and seed.

Factory Methods

static AccountWithSeed createAccount(
    PublicKey baseKey,
    PublicKey publicKey,
    byte[] asciiSeed,
    PublicKey program
)
baseKey
PublicKey
required
Base public key for derivation
publicKey
PublicKey
required
Derived public key
asciiSeed
byte[]
required
ASCII seed bytes (max 32 bytes)
program
PublicKey
required
Program ID used in derivation
static AccountWithSeed createAccount(
    PublicKey baseKey,
    PublicKey publicKey,
    String seed,
    PublicKey program
)

Methods

baseKey()
PublicKey
Returns the base public key
publicKey()
PublicKey
Returns the derived public key
asciiSeed()
byte[]
Returns the ASCII seed bytes
program()
PublicKey
Returns the program ID

Address Lookup Tables

AddressLookupTable

software.sava.core.accounts.lookup.AddressLookupTable Stores up to 256 account addresses for transaction compression.

Constants

int LOOKUP_TABLE_MAX_ADDRESSES = 256;
int LOOKUP_TABLE_META_SIZE = 56;

Factory Methods

static AddressLookupTable read(PublicKey address, byte[] data)
address
PublicKey
required
Lookup table account address
data
byte[]
required
Account data bytes
return
AddressLookupTable
Parsed lookup table with reverse lookup map
static AddressLookupTable readWithoutReverseLookup(
    PublicKey address,
    byte[] data
)
return
AddressLookupTable
Parsed lookup table without reverse lookup (lighter weight)

Methods

boolean isActive()
return
boolean
True if the lookup table is active (not deactivated)
PublicKey account(int index)
index
int
required
Index of account (0-255)
return
PublicKey
Public key at the specified index
int indexOf(PublicKey publicKey)
publicKey
PublicKey
required
Public key to search for
return
int
Index of public key, or -1 if not found
byte indexOfOrThrow(PublicKey publicKey)
return
byte
Index as byte, throws if not found
long deactivationSlot()
long lastExtendedSlot()
PublicKey authority()
int numAccounts()
int numUniqueAccounts()

Example Usage

import software.sava.core.accounts.lookup.AddressLookupTable;

// Read lookup table from account data
var lookupTable = AddressLookupTable.read(tableAddress, accountData);

// Check if active
if (lookupTable.isActive()) {
    // Get account at index
    var account = lookupTable.account(0);
    
    // Find index of account
    int index = lookupTable.indexOf(myPublicKey);
    
    // Get metadata
    var authority = lookupTable.authority();
    var numAccounts = lookupTable.numAccounts();
}

AddressLookupTableRoot

software.sava.core.accounts.lookup.AddressLookupTableRoot Base implementation with core lookup table functionality.

Filters

static Filter activeFilter()
return
Filter
RPC filter for active lookup tables
static Filter authorityFilter(PublicKey authority)
authority
PublicKey
required
Authority public key to filter by
return
Filter
RPC filter for tables with specified authority

Build docs developers (and LLMs) love