Skip to content

Commit 34cb190

Browse files
author
technoch1ef
committed
feat: carbon-heaven-decoder
1 parent e605efb commit 34cb190

File tree

83 files changed

+2430
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+2430
-0
lines changed

Cargo.lock

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

decoders/heaven-decoder/Cargo.toml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
[package]
2+
name = "carbon-heaven-decoder"
3+
version = "0.9.1"
4+
description = "Heaven DEX Program Decoder"
5+
edition = { workspace = true }
6+
license = { workspace = true }
7+
readme = "README.md"
8+
repository = { workspace = true }
9+
keywords = ["solana", "decoder", "heaven"]
10+
categories = ["encoding"]
11+
12+
[lib]
13+
crate-type = ["rlib"]
14+
15+
[dependencies]
16+
carbon-core = { workspace = true }
17+
serde = { workspace = true }
18+
solana-account = { workspace = true }
19+
serde-big-array = { workspace = true }
20+
solana-instruction = { workspace = true, default-features = false }
21+
solana-pubkey = { workspace = true }

decoders/heaven-decoder/README.md

Whitespace-only changes.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
use super::super::types::*;
2+
3+
use carbon_core::{borsh, CarbonDeserialize};
4+
5+
#[derive(CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize)]
6+
#[carbon(discriminator = "0xbe9edc820fa284fc")]
7+
pub struct LiquidityPoolState {
8+
pub info: LiquidityPoolInfo,
9+
pub market_cap_based_fees: LiquidityPoolMarketCapBasedFees,
10+
pub reserve: LiquidityPoolReserve,
11+
pub lp_token: LiquidityPoolLpTokenInfo,
12+
pub protocol_trading_fees: u64,
13+
pub creator_trading_fees: u64,
14+
pub creator_trading_fees_claimed_by_creator: u64,
15+
pub creator_trading_fees_claimed_by_others: u64,
16+
pub liquidity_provider_trading_fees: u64,
17+
pub creator_trading_fee_protocol_fees: u64,
18+
pub reflection_trading_fees: u64,
19+
pub created_at_slot: u64,
20+
pub trading_volume_usd: f64,
21+
pub creator_trading_fee_trading_volume_threshold: f64,
22+
pub creator_trading_fee_trading_volume_threshold_reached_unix_timestamp: u64,
23+
pub token_a_vault: solana_pubkey::Pubkey,
24+
pub token_b_vault: solana_pubkey::Pubkey,
25+
pub protocol_config: solana_pubkey::Pubkey,
26+
pub key: solana_pubkey::Pubkey,
27+
pub token_a: LiquidityPoolTokenInfo,
28+
pub token_b: LiquidityPoolTokenInfo,
29+
pub allowlist: LiquidityPoolAllowlist,
30+
pub feature_flags: LiquidityPoolFeatureFlags,
31+
pub taxable_side: u8,
32+
pub taxable_side_type: u8,
33+
pub creator_trading_fee_distribution: u8,
34+
pub creator_trading_fee_claim_status: u8,
35+
pub fee_configuration_mode: u8,
36+
pub is_migrated: u8,
37+
pub pad: [u8; 13],
38+
pub slot_offset_based_fees: LiquidityPoolSlotOffsetBasedFees,
39+
pub creator_trading_fee_receiver: solana_pubkey::Pubkey,
40+
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
use carbon_core::account::AccountDecoder;
2+
use carbon_core::deserialize::CarbonDeserialize;
3+
4+
use super::HeavenDecoder;
5+
pub mod liquidity_pool_state;
6+
pub mod msol_ticket_sol_spent;
7+
pub mod protocol_admin_state;
8+
pub mod protocol_config;
9+
pub mod protocol_owner_state;
10+
11+
pub enum HeavenAccount {
12+
LiquidityPoolState(liquidity_pool_state::LiquidityPoolState),
13+
MsolTicketSolSpent(msol_ticket_sol_spent::MsolTicketSolSpent),
14+
ProtocolAdminState(protocol_admin_state::ProtocolAdminState),
15+
ProtocolConfig(protocol_config::ProtocolConfig),
16+
ProtocolOwnerState(protocol_owner_state::ProtocolOwnerState),
17+
}
18+
19+
impl AccountDecoder<'_> for HeavenDecoder {
20+
type AccountType = HeavenAccount;
21+
fn decode_account(
22+
&self,
23+
account: &solana_account::Account,
24+
) -> Option<carbon_core::account::DecodedAccount<Self::AccountType>> {
25+
if let Some(decoded_account) =
26+
liquidity_pool_state::LiquidityPoolState::deserialize(account.data.as_slice())
27+
{
28+
return Some(carbon_core::account::DecodedAccount {
29+
lamports: account.lamports,
30+
data: HeavenAccount::LiquidityPoolState(decoded_account),
31+
owner: account.owner,
32+
executable: account.executable,
33+
rent_epoch: account.rent_epoch,
34+
});
35+
}
36+
37+
if let Some(decoded_account) =
38+
msol_ticket_sol_spent::MsolTicketSolSpent::deserialize(account.data.as_slice())
39+
{
40+
return Some(carbon_core::account::DecodedAccount {
41+
lamports: account.lamports,
42+
data: HeavenAccount::MsolTicketSolSpent(decoded_account),
43+
owner: account.owner,
44+
executable: account.executable,
45+
rent_epoch: account.rent_epoch,
46+
});
47+
}
48+
49+
if let Some(decoded_account) =
50+
protocol_admin_state::ProtocolAdminState::deserialize(account.data.as_slice())
51+
{
52+
return Some(carbon_core::account::DecodedAccount {
53+
lamports: account.lamports,
54+
data: HeavenAccount::ProtocolAdminState(decoded_account),
55+
owner: account.owner,
56+
executable: account.executable,
57+
rent_epoch: account.rent_epoch,
58+
});
59+
}
60+
61+
if let Some(decoded_account) =
62+
protocol_config::ProtocolConfig::deserialize(account.data.as_slice())
63+
{
64+
return Some(carbon_core::account::DecodedAccount {
65+
lamports: account.lamports,
66+
data: HeavenAccount::ProtocolConfig(decoded_account),
67+
owner: account.owner,
68+
executable: account.executable,
69+
rent_epoch: account.rent_epoch,
70+
});
71+
}
72+
73+
if let Some(decoded_account) =
74+
protocol_owner_state::ProtocolOwnerState::deserialize(account.data.as_slice())
75+
{
76+
return Some(carbon_core::account::DecodedAccount {
77+
lamports: account.lamports,
78+
data: HeavenAccount::ProtocolOwnerState(decoded_account),
79+
owner: account.owner,
80+
executable: account.executable,
81+
rent_epoch: account.rent_epoch,
82+
});
83+
}
84+
85+
None
86+
}
87+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
use carbon_core::{borsh, CarbonDeserialize};
2+
3+
#[derive(CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize)]
4+
#[carbon(discriminator = "0x42c43e867c95fa42")]
5+
pub struct MsolTicketSolSpent {
6+
pub cost_basis: u64,
7+
pub msol_unstaked: u64,
8+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
use carbon_core::{borsh, CarbonDeserialize};
2+
3+
#[derive(CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize)]
4+
#[carbon(discriminator = "0x187caee1e81e73c0")]
5+
pub struct ProtocolAdminState {
6+
pub current_protocol_admin: solana_pubkey::Pubkey,
7+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
use super::super::types::*;
2+
3+
use carbon_core::{borsh, CarbonDeserialize};
4+
5+
#[derive(CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize)]
6+
#[carbon(discriminator = "0xcf5bfa1c98b3d7d1")]
7+
pub struct ProtocolConfig {
8+
pub create_pool_fee: u64,
9+
pub initial_token_b_amount: f64,
10+
pub initial_token_a_amount: u64,
11+
pub unstaked_wsol_reserve: u64,
12+
pub total_sol_spent: u64,
13+
pub total_msol_received: u64,
14+
pub total_realized_profit: u64,
15+
pub pool_count: u64,
16+
pub max_supply_per_wallet: u64,
17+
pub creator_trading_fee_trading_volume_threshold: f64,
18+
pub market_cap_based_fees: LiquidityPoolMarketCapBasedFees,
19+
pub buffer_bps: u16,
20+
pub auto_staking_threshold_bps: u16,
21+
pub version: u16,
22+
pub protocol_config_state_bump: u8,
23+
pub allow_create_pool: u8,
24+
pub supported_pool_type: u8,
25+
pub default_leader_slot_window: u8,
26+
pub auto_staking_enabled: u8,
27+
pub leader_slot_window: u8,
28+
pub sandwich_resistence_enabled: u8,
29+
pub token_a_decimals: u8,
30+
pub migration_market_cap_threshold: u16,
31+
pub pad: [u8; 8],
32+
pub max_creator_trading_fee: u32,
33+
pub slot_offset_based_fees: LiquidityPoolSlotOffsetBasedFees,
34+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
use carbon_core::{borsh, CarbonDeserialize};
2+
3+
#[derive(CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize)]
4+
#[carbon(discriminator = "0xd040d1cc71e21662")]
5+
pub struct ProtocolOwnerState {
6+
pub current_protocol_owner: solana_pubkey::Pubkey,
7+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
use carbon_core::{borsh, CarbonDeserialize};
2+
3+
#[derive(
4+
CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash,
5+
)]
6+
#[carbon(discriminator = "0xcc485fd7acc089fc")]
7+
pub struct AdminBorrowSol {
8+
pub version: u16,
9+
pub amount: u64,
10+
}
11+
12+
#[derive(Debug, PartialEq, Eq, Clone, Hash, serde::Serialize, serde::Deserialize)]
13+
pub struct AdminBorrowSolInstructionAccounts {
14+
pub token_program: solana_pubkey::Pubkey,
15+
pub associated_token_program: solana_pubkey::Pubkey,
16+
pub payer: solana_pubkey::Pubkey,
17+
pub admin: solana_pubkey::Pubkey,
18+
pub protocol_config_state: solana_pubkey::Pubkey,
19+
pub system_program: solana_pubkey::Pubkey,
20+
pub protocol_staking_admin_state: solana_pubkey::Pubkey,
21+
pub address_lookup_program: solana_pubkey::Pubkey,
22+
pub instruction_sysvar_account_info: solana_pubkey::Pubkey,
23+
pub temp_sol_holder: solana_pubkey::Pubkey,
24+
}
25+
26+
impl carbon_core::deserialize::ArrangeAccounts for AdminBorrowSol {
27+
type ArrangedAccounts = AdminBorrowSolInstructionAccounts;
28+
29+
fn arrange_accounts(
30+
accounts: &[solana_instruction::AccountMeta],
31+
) -> Option<Self::ArrangedAccounts> {
32+
let [token_program, associated_token_program, payer, admin, protocol_config_state, system_program, protocol_staking_admin_state, address_lookup_program, instruction_sysvar_account_info, temp_sol_holder, _remaining @ ..] =
33+
accounts
34+
else {
35+
return None;
36+
};
37+
38+
Some(AdminBorrowSolInstructionAccounts {
39+
token_program: token_program.pubkey,
40+
associated_token_program: associated_token_program.pubkey,
41+
payer: payer.pubkey,
42+
admin: admin.pubkey,
43+
protocol_config_state: protocol_config_state.pubkey,
44+
system_program: system_program.pubkey,
45+
protocol_staking_admin_state: protocol_staking_admin_state.pubkey,
46+
address_lookup_program: address_lookup_program.pubkey,
47+
instruction_sysvar_account_info: instruction_sysvar_account_info.pubkey,
48+
temp_sol_holder: temp_sol_holder.pubkey,
49+
})
50+
}
51+
}

0 commit comments

Comments
 (0)