Lineagei
Frameworki
What's Anchor?
Batteries-included Rust framework. Ships account-validation codegen, 8-byte instruction discriminators, and an on-chain IDL — the program describes itself.
Bigger binary and higher rent in exchange for safety rails, introspection, and dev speed. The choice of a team optimizing for correctness over on-chain footprint.
Originally Coral (Armani Ferrante); now community-maintained.
What it is
The de facto standard. Rust macros (#[program], #[derive(Accounts)]) eliminate boilerplate: it auto-generates 8-byte account and instruction discriminators — SHA256("account:<Name>")[..8] and SHA256("global:<ix>")[..8] — handles Borsh (de)serialization, enforces account constraints declaratively (mut, has_one, seeds, init), and emits a JSON IDL that client libraries consume directly. The cost: Borsh copies data on every deserialize (not zero-copy), and the macro machinery adds binary bloat and compute overhead — irrelevant for ~99% of programs.
When to pick it
Building a new protocol, moving fast, or wanting maximum ecosystem compatibility. It's the beginner default and stays the right call for most production programs.
How it looks on-chain
The most recognizable framework. Every account it owns begins with an 8-byte discriminator, and the IDL is often published on-chain at a PDA derived from the program id. Both are strong, reliable fingerprints — this is the only framework we can label with confidence.
Others in the wild: Steel (Ore team — near-native performance on solana-program), Seahorse (Python → Anchor), and Poseidon & Quasar (TypeScript → Rust). Transpilers inherit their lowering target's fingerprint: a Quasar or Poseidon program that compiles down to Anchor will look like Anchor on-chain — discriminators and all.
Anchor docsFootprinti
Recovered architecturei
Reachi
Controli
What's upgrade authority?
The upgrade authority is the account allowed to replace a program's code after it's deployed.
If it's set (mutable), that key can push new bytecode at any time — including malicious code, the classic "rug" vector. If it's null (immutable / frozen), the code can never change; what 's on-chain is final. A Squads multisig sits in between — upgrades are possible but need M-of-N signers, not one hot wallet. So mutable + single hot-wallet = highest risk; immutable or multisig = stronger guarantees.
What's a verified build?
A verified build proves the program running on-chain was compiled from the public source you can read — nothing hidden.
Someone re-compiles the source in a deterministic (Docker) environment and checks the resulting bytecode is byte-for-byte identical to what's deployed; tools like solana-verify do this and record it with a verification service. "Not verified" isn't a red flag by itself — most programs simply never submit one. It just means you're trusting the deployed bytecode as-is, with no source cross-check.
Convictioni
Interface — the on-chain IDLi
10 of 17 instructions used · 7 never called in this window
Protocol Liquidity Program
Instructions 17
buy
- poolwritable
- vault_solwritable
- vault_tokenwritable
- vault_token_authority
- buyersignerwritable
- buyer_token_accountwritable
- token_program
- system_program
- trading_fee_vaultwritable
- platform_config
- sol_price_feed
- creator_fee_vaultwritable
- argsBuyArgs
claim_creator_fees
Claim accumulated creator fees from escrow vault
- pool
- creator_fee_vaultwritable
- creatorsignerwritable
- system_program
emergency_withdraw
- pool
- authoritysigner
- vault_solwritable
- platform_config
- destinationwritable
- system_program
- lamportsu64
graduate
- poolwritable
- authoritysigner
- vault_solwritable
- graduation_fee_vaultwritable
- platform_config
- system_program
- dexGraduationDex
init_platform_config
- authoritysignerwritable
- platform_configwritable
- trading_fee_vaultwritable
- graduation_fee_vaultwritable
- token_creation_fee_vaultwritable
- premium_token_fee_vaultwritable
- system_program
- cold_walletpubkey
init_pool
- payersignerwritable
- creator
- poolwritable
- mintwritable
- vault_tokenwritable
- vault_token_authority
- vault_sol
- creator_fee_vaultwritable
- mint_authority
- token_creation_fee_vaultwritable
- system_program
- token_program
- associated_token_program
- argsInitPoolArgs
lock_liquidity
- poolwritable
- authoritysigner
- lockedbool
release_liquidity
Release remaining vault SOL and tokens to the graduation authority wallet so they can be seeded into an external DEX (Raydium, ThunderSwap, etc.). - Only callable after the pool has graduated. - Idempotent: if balances are already zero, this is a no-op success. - Transfers all remaining SOL (minus rent-exempt minimum) to `sol_destination`. - Transfers all remaining tokens to `token_destination` (authority's ATA).
- pool
- authoritysigner
- vault_solwritable
- sol_destinationwritable
- vault_tokenwritable
- vault_token_authority
- token_destinationwritable
- system_program
- token_program
sell
- poolwritable
- vault_solwritable
- vault_tokenwritable
- vault_token_authority
- sellersignerwritable
- seller_token_accountwritable
- token_program
- system_program
- trading_fee_vaultwritable
- platform_config
- sol_price_feed
- creator_fee_vaultwritable
- argsSellArgs
set_metadata
- payersignerwritable
- mintwritable
- mint_authority
- metadatawritable
- update_authority
- metadata_program
- system_program
- rent
- argsSetMetadataArgs
set_premium_tier
Set token to premium tier (reduces platform fee and increases creator fee) Standard: 0.75% platform + 0.5% creator = 1.25% total Premium: 0.65% platform + 0.6% creator = 1.25% total
- poolwritable
- authoritysigner
transfer_authority
- poolwritable
- authoritysigner
- new_authority
update_platform_config
- authoritysigner
- platform_configwritable
- new_cold_walletpubkey
withdraw_creation_fees
- authoritysigner
- platform_config
- token_creation_fee_vaultwritable
- cold_walletwritable
- system_program
- amountu64
withdraw_graduation_fees
- authoritysigner
- platform_config
- graduation_fee_vaultwritable
- cold_walletwritable
- system_program
- amountu64
withdraw_premium_fees
- authoritysigner
- platform_config
- premium_token_fee_vaultwritable
- cold_walletwritable
- system_program
- amountu64
withdraw_trading_fees
- authoritysigner
- platform_config
- trading_fee_vaultwritable
- cold_walletwritable
- system_program
- amountu64
Accounts 3
PlatformConfig
no fields
Pool
no fields
PriceUpdateV2
no fields
Types 16
BuyArgsstruct
- lamportsu64
- min_tokens_outu64
- deadlinei64
BuyEventstruct
- mintpubkey
- poolpubkey
- buyerpubkey
- lamports_inu64
- tokens_outu64
- new_outstanding_supplyu64
- price_impact_bpsu32
CreatorFeeClaimEventstruct
- mintpubkey
- poolpubkey
- creatorpubkey
- amount_claimedu64
- timestampi64
GraduationDexenum
- ThunderSwap
- Raydium
GraduationEventstruct
- mintpubkey
- poolpubkey
- authoritypubkey
- graduation_feeu64
- dexu8
InitPoolArgsstruct
- mintpubkey
- curve_typeu8
- platform_authoritypubkey
- creatorpubkey
LiquidityReleasedEventstruct
- mintpubkey
- poolpubkey
- authoritypubkey
- sol_amountu64
- token_amountu64
PlatformConfigstruct
- authoritypubkey
- cold_walletpubkey
- trading_fee_vault_bumpu8
- graduation_fee_vault_bumpu8
- creation_fee_vault_bumpu8
- premium_fee_vault_bumpu8
- bumpu8
Poolstruct
- authoritypubkey
- creatorpubkey
- mintpubkey
- vault_solpubkey
- vault_tokenpubkey
- vault_token_authoritypubkey
- mint_authoritypubkey
- curve_typeu8
- lockedbool
- graduatedbool
- graduation_dexu8
- total_solu64
- total_tokensu64
- outstanding_supplyu64
- virtual_token_reservesu64
- virtual_sol_reservesu64
- real_token_reservesu64
- real_sol_reservesu64
- bumpu8
- vault_sol_bumpu8
- vault_token_bumpu8
- mint_authority_bumpu8
- creator_fee_vaultpubkey
- creator_fee_vault_bumpu8
- creator_fees_accumulatedu64
- platform_fee_bpsu16
- creator_fee_bpsu16
PoolLockEventstruct
- mintpubkey
- poolpubkey
- authoritypubkey
- lockedbool
PriceFeedMessagestruct
- feed_id[u8; 32]`FeedId` but avoid the type alias because of compatibility issues with Anchor's `idl-build` feature.
- pricei64
- confu64
- exponenti32
- publish_timei64The timestamp of this price update in seconds
- prev_publish_timei64The timestamp of the previous price update. This field is intended to allow users to identify the single unique price update for any moment in time: for any time t, the unique update is the one such that prev_publish_time < t <= publish_time. Note that there may not be such an update while we are migrating to the new message-sending logic, as some price updates on pythnet may not be sent to other chains (because the message-sending logic may not have triggered). We can solve this problem by making the message-sending mandatory (which we can do once publishers have migrated over). Additionally, this field may be equal to publish_time if the message is sent on a slot where where the aggregation was unsuccesful. This problem will go away once all publishers have migrated over to a recent version of pyth-agent.
- ema_pricei64
- ema_confu64
PriceUpdateV2struct
- write_authoritypubkey
- verification_levelVerificationLevel
- price_messagePriceFeedMessage
- posted_slotu64
SellArgsstruct
- tokensu64
- min_lamports_outu64
- deadlinei64
SellEventstruct
- mintpubkey
- poolpubkey
- sellerpubkey
- lamports_outu64
- tokens_inu64
- new_outstanding_supplyu64
- price_impact_bpsu32
SetMetadataArgsstruct
- namestring
- symbolstring
- uristring
VerificationLevelenum
- Partial
- Full
Events 6
BuyEvent
no fields
CreatorFeeClaimEvent
no fields
GraduationEvent
no fields
LiquidityReleasedEvent
no fields
PoolLockEvent
no fields
SellEvent
no fields
Errors 30
- 6000LiquidityLockedLiquidity is locked
- 6001PoolGraduatedPool already graduated
- 6002OverflowMath overflow
- 6003InsufficientSolInsufficient SOL
- 6004InsufficientTokensInsufficient tokens
- 6005InvalidMintInvalid mint
- 6006InvalidVaultSolOwnerInvalid SOL vault
- 6007InvalidVaultTokenInvalid token vault
- 6008InvalidMintAuthorityInvalid mint authority
- 6009SlippageExceededSlippage exceeded
- 6010DustTradeTrade amount too small
- 6011MathErrorCurve calculation error
- 6012UnsupportedCurveUnsupported curve type
- 6013BumpMissingMissing PDA bump
- 6014MetadataTooLongMetadata field too long
- 6015DivisionByZeroDivision by zero
- 6016MaxTradeableExceededMax tradeable tokens exceeded
- 6017UnauthorizedCreatorOnly the token creator can claim fees
- 6018NothingToClaimNo fees available to claim
- 6019StalePriceDataPrice data is stale
- 6020InvalidPriceDataInvalid price data
- 6021NotGraduatedPool has not graduated yet
- 6022InsufficientSolForGraduationFeeVault has insufficient SOL to cover the graduation fee
- 6023FeeTooHighFee exceeds maximum allowed (500 BPS / 5%)
- 6024InvalidColdWalletInvalid cold wallet destination
- 6025TransactionExpiredTransaction deadline has passed
- 6026UnauthorizedUnauthorized operation
- 6027MintNotEmptyMint already has a non-zero supply — pre-minted tokens are not allowed
- 6028FreezeAuthorityPresentMint must not have a freeze authority
- 6029PriceConfidenceTooWideOracle price confidence interval is too wide
What's an IDL?
An IDL — Interface Description Language — is a JSON spec that describes how to talk to a program: its instructions, the accounts each one needs, argument and account types, events, and errors.
Anchor auto-generates it at build time. A program can publish it on-chain at a PDA derived from its id, so any client or explorer can decode the program's transactions without its source code.
Why it's often missing
Publishing is opt-in — a courtesy, not a requirement. Many programs never do, and non-Anchor frameworks (Pinocchio, native, Steel) don't produce one at all; their interface lives in an off-chain Shank/Codama artifact, or nowhere public. Absence means you can't auto-decode it — not that anything is wrong.
10 of 17 instructions used · 7 never called in this window · +7 more
Tractioni
The recordi
| Event | When | Detail | Receipt |
|---|---|---|---|
| DEPLOY | 4d ago | slot 431,727,985 | back…7985 |