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
7 of 9 instructions used · 2 never called in this window
Short-lived Polymarket meta prediction markets on Solana
Instructions 9
buy_shares
- tradersignerwritable
- config
- marketwritable
- collateral_mint
- market_vaultwritable
- trader_collateralwritable
- staker_fee_vaultwritable
- creator_fee_vaultwritable
- positionwritable
- token_program
- system_program
- sideSide
- amountu64
- min_sharesu64
claim_creator_fees
- creatorsigner
- config
- collateral_mint
- creator_fee_vaultwritable
- destinationwritable
- token_program
create_market
- creatorsignerwritable
- market_signersigner
- config
- registrywritable
- marketwritable
- collateral_mint
- creator_collateralwritable
- market_vaultwritable
- token_program
- system_program
- paramsCreateMarketParams
deposit_staker_rewards
- authoritysignerwritable
- config
- collateral_mint
- staker_fee_vaultwritable
- staking_configwritable
- staking_reward_vaultwritable
- staking_program
- token_program
- system_program
- duration_secondsi64
initialize
- authoritysignerwritable
- configwritable
- system_program
- paramsInitializeParams
migrate_protocol_fees
- authoritysignerwritable
- config
- collateral_mint
- protocol_fee_vaultwritable
- staker_fee_vaultwritable
- token_program
- system_program
resolve_market
- oraclesignerwritable
- config
- marketwritable
- registrywritable
- collateral_mint
- market_vaultwritable
- staker_fee_vaultwritable
- token_program
- system_program
- outcomeResolution
- end_priceu64
set_authorities
- authoritysigner
- configwritable
- authoritypubkey
- market_signerpubkey
- oraclepubkey
settle_position
- tradersignerwritable
- config
- market
- collateral_mint
- market_vaultwritable
- trader_collateralwritable
- positionwritable
- token_program
- sideSide
Accounts 4
Config
no fields
Market
no fields
MarketRegistry
no fields
Position
no fields
Types 22
Configstruct
- authoritypubkey
- market_signerpubkey
- oraclepubkey
- fee_bpsu16
- staker_fee_share_bpsu16
- bumpu8
CreateMarketParamsstruct
- polymarket_token_id[u8; 32]
- sequenceu64
- directionDirection
- reference_priceu64
- expires_ati64
- seed_per_sideu64
- virtual_shares_reserveu64
- quote_reserveu64
CreatorFeesClaimedstruct
- creatorpubkey
- collateral_mintpubkey
- amountu64
Directionenum
- Lower
- Higher
FeesAccruedstruct
- marketpubkey
- creatorpubkey
- collateral_mintpubkey
- staker_feeu64
- creator_feeu64
InitializeParamsstruct
- market_signerpubkey
- oraclepubkey
- fee_bpsu16
- staker_fee_share_bpsu16
Marketstruct
- configpubkey
- registrypubkey
- collateral_mintpubkey
- creatorpubkey
- polymarket_token_id[u8; 32]
- sequenceu64
- directionDirection
- reference_priceu64
- expires_ati64
- resolved_ati64
- seed_per_sideu64
- stateMarketState
- yesSidePool
- noSidePool
- bumpu8
MarketCreatedstruct
- marketpubkey
- registrypubkey
- creatorpubkey
- collateral_mintpubkey
- polymarket_token_id[u8; 32]
- sequenceu64
- directionDirection
- reference_priceu64
- expires_ati64
MarketRegistrystruct
- polymarket_token_id[u8; 32]
- next_sequenceu64
- active_marketpubkey
- bumpu8
MarketResolvedstruct
- marketpubkey
- outcomeResolution
- end_priceu64
- resolved_ati64
MarketStateenum
- Open
- SettledNo
- SettledYes
- Unresolvable
Positionstruct
- marketpubkey
- traderpubkey
- sideSide
- sharesu64
- collateralu64
- bumpu8
PositionSettledstruct
- marketpubkey
- traderpubkey
- sideSide
- payoutu64
ProtocolFeesMigratedstruct
- collateral_mintpubkey
- amountu64
Resolutionenum
- No
- Yes
- Unresolvable
ResolutionCollateralTransferredstruct
- marketpubkey
- amountu64
RewardPoolstruct
- mintpubkey
- reward_rateu64
- last_update_timei64
- period_finishi64
- reward_per_token_storedu128
SharesBoughtstruct
- marketpubkey
- traderpubkey
- sideSide
- gross_amountu64
- net_amountu64
- sharesu64
Sideenum
- Yes
- No
SidePoolstruct
- collateralu64
- shares_boughtu64
- shares_reserveu64
- quote_reserveu64
StakerRewardsDepositedstruct
- collateral_mintpubkey
- amountu64
- duration_secondsi64
StakingConfigstruct
- authoritypubkey
- pub_mintpubkey
- total_stakedu64
- reward_poolsVec<RewardPool>
- bumpu8
Events 9
CreatorFeesClaimed
no fields
FeesAccrued
no fields
MarketCreated
no fields
MarketResolved
no fields
PositionSettled
no fields
ProtocolFeesMigrated
no fields
ResolutionCollateralTransferred
no fields
SharesBought
no fields
StakerRewardsDeposited
no fields
Errors 24
- 6000InvalidFeefee configuration is invalid
- 6001InvalidTokenIdPolymarket token ID must not be zero
- 6002InvalidReservereserve must be positive
- 6003InvalidSeedseed collateral must be positive
- 6004MarketAlreadyActivean active market already exists for this Polymarket token
- 6005InvalidMarketSequencemarket sequence does not match the registry
- 6006MarketNotOpenmarket is not open
- 6007MarketAlreadyExpiredmarket has already expired
- 6008MarketNotExpiredmarket has not reached its expiry
- 6009MarketNotResolvedmarket has not been resolved
- 6010ZeroAmountamount must be positive
- 6011ZeroSharestrade would receive zero shares
- 6012SlippageExceededminimum share amount was not met
- 6013RegistryMismatchthe registry does not match the market
- 6014ConfigMismatchthe config does not match the market
- 6015PositionMismatchthe position does not match the requested settlement
- 6016NoWinningPositionsthe winning side has no positions
- 6017NoFeesToClaimthere are no creator fees to claim
- 6018NoStakerFeesToDepositthere are no staker fees to deposit
- 6019InvalidStakingConfigthe staking config does not accept rewards from this program
- 6020InvalidTokenProgramtoken program does not match the mint owner
- 6021UnsupportedMintExtensionToken-2022 mint has unsupported extensions
- 6022UnexpectedTransferAmounttoken transfer did not move the expected amount
- 6023MathOverflowarithmetic overflow
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.
7 of 9 instructions used · 2 never called in this window · +4 more
Tractioni
Code familyi
The recordi
| Event | When | Detail | Receipt |
|---|---|---|---|
| SIBLING DEPLOY | 2d ago | oft | same code, fresh id |
| DEPLOY | 3d ago | slot 432,040,443 | poll…0443 |
| SIBLING DEPLOY | 3d ago | dumpstr-gacha | same code, fresh id |