Skip to main content

Crate sendfun_sdk

Crate sendfun_sdk 

Source
Expand description

§sendfun-sdk

Rust SDK for the send.fun programs on Solana.

  • launchpad: token creation, bonding curve trades, migration.
  • dex: AMM trades after migration.
  • nexus: staking and partner fees.
  • transfer_hook: the Token-2022 transfer-hook accounts of a trade. It resolves them from accounts that you fetch, without RPC.

The SDK builds instructions, decodes accounts and events, and calculates quotes (launchpad::quote, dex::quote). It has no RPC client and does not send transactions.

Fetch accounts with your own client. Compatible: solana-rpc-client 3.x and 4.1+, blocking and nonblocking. Not compatible: 4.0.x.

Decode an account with the from_account function of its type. from_account checks the owner, then the discriminator:

ⓘ
use sendfun_sdk::launchpad::accounts::BondingCurve;

let account = rpc.get_account(&address)?;
let curve = BondingCurve::from_account(&account.owner, &account.data)?;

get_account fails when the account does not exist. For an account that can be missing, use get_account_with_commitment. Its value is None for a missing account. Decode with from_account_maybe. It returns Ok(None) for an uncreated PDA that holds lamports.

§Install

cargo add sendfun-sdk

Optional features:

  • serde: Serialize and Deserialize on accounts, events and types.
  • anchor: anchor-lang interop for on-chain callers.

§Rules

  • For a trade, read platform_config from the bonding curve or the pool.
  • A partner other than DEFAULT_PARTNER must sign.
  • constants::find_platform_address(slug) returns the key of a platform.
  • Do not edit the generated modules. They come from the program IDLs.

§Documentation

https://docs.send.fun

§License

MIT, see the LICENSE file.

§Reading accounts

Read an account that can be missing:

use sendfun_sdk::nexus::accounts::PartnerConfig;

let partner = match rpc
    .get_account_with_commitment(&pda, rpc.commitment())?
    .value
{
    Some(account) => {
        PartnerConfig::from_account_maybe(&account.owner, &account.data)?
    }
    None => None,
};

Read several accounts in one call. The RPC accepts at most 100 addresses per call:

use sendfun_sdk::launchpad::accounts::BondingCurve;

let curves = rpc
    .get_multiple_accounts(&keys)?
    .iter()
    .map(|account| match account {
        Some(account) => {
            BondingCurve::from_account_maybe(&account.owner, &account.data)
        }
        None => Ok(None),
    })
    .collect::<Result<Vec<_>, _>>()?;

Modules§

constants
dex
launchpad
math
nexus
transfer_fee
Reads the transfer fee of a Token-2022 mint from raw account data, for the math::amm quotes. Cache a TransferFeeConfig only while its transfer_fee_config_authority is None.
transfer_hook
Resolves the Token-2022 transfer-hook accounts of a trade from accounts that you fetch. A list that reads the transfer amount or needs a signer is Unresolvable.
utils