mubarizkyc
blue-house
Rust

swap interface for solana

Last updated Jun 20, 2026
39
Stars
16
Forks
0
Issues
0
Stars/day
Attention Score
63
Language breakdown
Rust 100.0%
Files click to expand
README

Blue House

blue_house2

Blue House is a Solana program that provides a unified interface for performing swaps across multiple decentralized exchanges (DEXes). Instead of implementing each market individually in your own program or trading bot, you can simply call Blue House — either directly in a transaction or through a CPI (cross-program invocation).


Program ID

The program is deployed at:
b1225DYKeTyLGd4SrNZFPcgzCC76Q9qniud7XgwB7C4
Features

🔄 Unified Swaps — One interface for 15+ Solana DEXs and protocols

⚡ Low Overhead — Minimal abstractions to preserve performance

🛠 Extensible — Easily add support for more markets in the future

Base Accounts

console         wallet           0         tokenamint     1         tokenaata      2         token_program    3         sys_program      4         ata_program      5         tokenbmint     6         tokenbprogram  7         tokenbata      8

Test

#[test] fn swap() {     // --- 1. Connect to Solana RPC ---     // Using mainnet-beta endpoint to fetch real accounts/state     let rpc_client = RpcClient::new("https://api.mainnet-beta.solana.com ");

// --- 2. Spin up a local LiteSVM instance --- // This acts as a lightweight local Solana VM where we can hydrate accounts // and simulate transactions against them. let mut litesvm = build_svm().unwrap(); // --- 3. Fetch wallet + base token accounts --- let baseaccounts = fetchbaseaccounts(&litesvm, &rpcclient);

// --- 4. Define market-specific accounts (Meteora DAMM v2) --- let pooladdress = Pubkey::fromstr_const("2mZ2VBiG8uPX6kza6WBHxcW5KcwmDvcjyXJctKVsmjSq"); let poolauth = Pubkey::fromstr_const("HLnpSz9h2S4hiLQ43rnSD9XkcUThA7B8hQMKmDaiTLcC"); let eventauth = Pubkey::fromstr_const("3rmHSu74h1ZcmAisVcWerTCiRDQbUrBKmcwptYGjHfet");

// --- 5. Fetch pool account data from RPC --- let pool = rpc_client .getaccount(&Pubkey::fromstrconst(&pooladdress.to_string())) .unwrap(); let data = pool.data;

// Extract vault accounts (base & quote) let basevault = Pubkey::newfromarray(data[232..264].tryinto().unwrap()); let quotevault = Pubkey::newfromarray(data[264..296].tryinto().unwrap());

// --- 6. Fetch and hydrate market accounts --- let marketaccounts = fetchmarket_accounts( vec![pooladdress, poolauth, eventauth, basevault, quote_vault], &rpc_client, );

// Hydrate LiteSVM with accounts hydratesvm(&mut litesvm, baseaccounts); hydratesvm(&mut litesvm, marketaccounts);

// --- 7. Prepare transaction account metas --- let mut accounts = getbaseaccounts(&rpc_client); accounts.extend([ AccountMeta::newreadonly(DAMMV2_ID, false), AccountMeta::newreadonly(eventauth, false), AccountMeta::newreadonly(poolauth, false), AccountMeta::new(pool_address, false), AccountMeta::new(base_vault, false), AccountMeta::new(quote_vault, false), ]);

// --- 8. Encode instruction data --- // SwapData { amountin: 10000000, amountout: 0, atob: false } let mut data = Vec::with_capacity(17); data.extendfromslice(&10000000u64.tolebytes()); // amount_in data.extendfromslice(&0u64.tolebytes()); // amount_out data.push(0u8); // atob = false

// --- 9. Execute transaction in LiteSVM --- execute_transaction(&mut litesvm, accounts, data); }

Dex Accounts details here

Telegram

© 2026 GitRepoTrend · mubarizkyc/blue-house · Updated daily from GitHub