PDA Derivation & Fetchers
The program client separates deriving an account address (pure, local) from fetching its data (a remote RPC call). See Conventions › get_ vs fetch_.
Address derivation — get_* (no network)
Each returns a [address, bump] pair via Solace::Utils::PDA.find_program_address, using this client's program_id. They're available as both class and instance methods.
| Method | On-chain seeds | Returns |
|---|---|---|
get_escrow_deposit_address(claim_authority:) | ["escrow_deposit", claim_authority] | [address, bump] |
get_mediated_escrow_deposit_address(id:) | ["mediated_escrow_deposit", id] | [address, bump] |
get_vault_address(mint:) | ["vault", mint] | [address, bump] |
ruby
escrow_deposit, = program.get_escrow_deposit_address(claim_authority: claim_authority.address)
mediated, = program.get_mediated_escrow_deposit_address(id:)
vault, = program.get_vault_address(mint: mint_address)The class-method form takes an explicit program_id: (defaults to mainnet):
ruby
Solace::Programs::ZarTrustlessEscrow.get_vault_address(
mint: mint_address,
program_id: Solace::ZarTrustlessEscrow::DEVNET_PROGRAM_ID
)Account fetching — fetch_* (one RPC call, by address)
Each reads the account at a given address and deserializes it, raising if no account exists there. Derive the address first.
| Method | Returns |
|---|---|
fetch_escrow_deposit(address:) | EscrowDeposit |
fetch_mediated_escrow_deposit(address:) | MediatedEscrowDeposit |
ruby
address, = program.get_escrow_deposit_address(claim_authority: claim_authority.address)
deposit = program.fetch_escrow_deposit(address:)
deposit.amount # => 1_000_000
deposit.claim_pubkey # => "9xQ…"Existence checks — *_exists? (one RPC call, by address)
Boolean variants that don't raise — useful before deciding to deposit or claim.
| Method | Returns |
|---|---|
escrow_deposit_exists?(address:) | true / false |
mediated_escrow_deposit_exists?(address:) | true / false |
ruby
address, = program.get_escrow_deposit_address(claim_authority: claim_authority.address)
program.escrow_deposit_exists?(address:) # => true