Skip to main content

Init Futarchy Authority

Initializes the futarchy authority account that controls protocol governance and fee distribution.

Accounts

authority
Signer
required
The authority that will control the futarchy authority. Must be a signer.
futarchy_authority
Account<FutarchyAuthority>
required
The futarchy authority account to initialize. PDA derived from [FUTARCHY_AUTHORITY_SEED_PREFIX].
futarchy_treasury
UncheckedAccount
required
Treasury account for futarchy revenue.
buybacks_vault
UncheckedAccount
required
Vault account for buyback operations.
team_treasury
UncheckedAccount
required
Team treasury account.

Arguments

swap_bps
u16
required
Swap fee revenue share in basis points (0-10000). Portion of swap fees that go to protocol.
interest_bps
u16
required
Interest fee revenue share in basis points (0-10000). Portion of interest that goes to protocol.
futarchy_treasury_bps
u16
required
Distribution percentage for futarchy treasury in basis points.
buybacks_vault_bps
u16
required
Distribution percentage for buybacks vault in basis points.
team_treasury_bps
u16
required
Distribution percentage for team treasury in basis points.
use anchor_lang::prelude::*;
use omnipair::program::Omnipair;

let init_args = InitFutarchyAuthorityArgs {
    swap_bps: 1000, // 10% of swap fees
    interest_bps: 500, // 5% of interest
    futarchy_treasury_bps: 4000, // 40%
    buybacks_vault_bps: 3000, // 30%
    team_treasury_bps: 3000, // 30%
};

let accounts = InitFutarchyAuthority {
    authority: deployer.key(),
    futarchy_authority: futarchy_authority_pda,
    futarchy_treasury: futarchy_treasury_key,
    buybacks_vault: buybacks_vault_key,
    team_treasury: team_treasury_key,
    // ... other accounts
};

let ctx = CpiContext::new(program_id, accounts);
omnipair::cpi::init_futarchy_authority(ctx, init_args)?;
{
  "signature": "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmG5Rk88jH2k9f4w3JHFf7Pjsk3bWqeXrC",
  "slot": 123456789
}