Types
Rust domain types and record types used across the AURA Rust SDK.
Pre-alpha — not production ready
aura-sdk targets Solana devnet only. APIs may change without notice. Do not use for real funds until a stable release and audit are published.
The aura-sdk crate exposes two layers of types:
- Record types (
*Record) — byte-aligned on-chain representations deserialized directly from account data via Borsh. - Domain types — ergonomic Rust structs with human-friendly fields, converted from records via
from_domain.
CreateTreasuryArgs
Arguments for the create_treasury instruction.
use aura_sdk::types::CreateTreasuryArgs;
pub struct CreateTreasuryArgs {
pub agent_id: String,
pub ai_authority: Pubkey,
pub created_at: i64,
pub pending_transaction_ttl_secs: i64,
pub policy_config: PolicyConfigRecord,
pub protocol_fees: ProtocolFeesRecord,
}PolicyConfig / PolicyConfigRecord
The domain and record forms of the policy configuration.
pub struct PolicyConfig {
pub daily_limit_usd: u64,
pub per_tx_limit_usd: u64,
pub daytime_hourly_limit_usd: u64,
pub nighttime_hourly_limit_usd: u64,
pub velocity_limit_usd: u64,
pub allowed_protocol_bitmap: u64,
pub max_slippage_bps: u16,
pub max_quote_age_secs: u64,
pub max_counterparty_risk_score: u8,
pub bitcoin_manual_review_threshold_usd: u64,
pub shared_pool_limit_usd: Option<u64>,
pub weekly_limit_usd: Option<u64>,
pub monthly_limit_usd: Option<u64>,
pub recipient_limits: Vec<RecipientLimit>,
pub cooldown_config: Option<CooldownConfig>,
pub anomaly_config: Option<AnomalyConfig>,
pub reputation_policy: Option<ReputationPolicy>,
pub budget_envelopes: Vec<BudgetEnvelopeConfig>,
pub approval_ladder: Option<ApprovalLadder>,
pub scoped_pause_entries: Vec<ScopedPauseEntry>,
pub liveness_config: LivenessConfig,
}Conversion
use aura_sdk::types::{PolicyConfig, PolicyConfigRecord};
let domain = PolicyConfig::default();
let record = PolicyConfigRecord::from_domain(&domain);Default Policy
let policy = PolicyConfig {
daily_limit_usd: 10_000,
per_tx_limit_usd: 1_000,
daytime_hourly_limit_usd: 2_500,
nighttime_hourly_limit_usd: 500,
velocity_limit_usd: 5_000,
allowed_protocol_bitmap: 0b11111,
max_slippage_bps: 100,
max_quote_age_secs: 300,
max_counterparty_risk_score: 70,
bitcoin_manual_review_threshold_usd: 5_000,
liveness_config: LivenessConfig::default(),
..Default::default()
};ProtocolFees / ProtocolFeesRecord
pub struct ProtocolFees {
pub treasury_creation_fee_usd: u64,
pub transaction_fee_bps: u16,
pub fhe_subsidy_bps: u16,
}use aura_sdk::types::{ProtocolFees, ProtocolFeesRecord};
let fees = ProtocolFees::default();
let record = ProtocolFeesRecord::from_domain(&fees);AgentTreasury
The rich domain representation of an on-chain treasury account. Returned by
client.get_treasury() and client.get_treasury_for_owner().
pub struct AgentTreasury {
pub agent_id: String,
pub owner: String, // base-58 pubkey as string
pub ai_authority: String, // base-58 pubkey as string
pub creation_timestamp: i64,
pub deployment: ProtocolDeployment,
pub dwallets: BTreeMap<Chain, DWalletReference>,
pub policy_config: PolicyConfig,
pub policy_state: PolicyState,
pub confidential_guardrails: Option<ConfidentialGuardrails>,
pub pending: Option<PendingTransaction>,
pub pending_queue: Vec<PendingTransaction>,
pub total_transactions: u64,
pub next_proposal_id: u64,
pub execution_paused: bool,
pub agent_state: AgentLifecycleState,
pub pending_transaction_ttl_secs: i64,
pub multisig: Option<EmergencyMultisig>,
pub swarm: Option<AgentSwarm>,
// ... additional fields
}Fetching
let treasury = client.get_treasury(&treasury_pda)?;
println!("Agent: {}", treasury.agent_id);
println!("Daily limit: {}", treasury.policy_config.daily_limit_usd);
println!("Paused: {}", treasury.execution_paused);
println!("Spent today: {}", treasury.policy_state.spent_today_usd);
println!("Total executed: {}", treasury.total_transactions);
if let Some(pending) = &treasury.pending {
println!("Pending proposal: {}", pending.proposal_id);
}PolicyState
Mutable spending counters updated by the policy engine on every approved transaction.
pub struct PolicyState {
pub spent_today_usd: u64,
pub last_reset_timestamp: i64,
pub hourly_spent_usd: u64,
pub hourly_bucket_started_at: i64,
pub recent_amounts: Vec<u64>,
pub thirty_day_spent_usd: u64,
pub peak_single_tx_usd: u64,
pub peak_day_spend_usd: u64,
pub recipient_spend: Vec<RecipientSpendRecord>,
// ... additional rolling window fields
}LivenessConfig
pub struct LivenessConfig {
pub require_encrypt_freshness: bool,
pub require_dwallet_freshness: bool,
pub require_balance_oracle_freshness: bool,
pub require_compliance_oracle_freshness: bool,
pub max_staleness_secs: u64,
}