Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"dependencies": {
"@coral-xyz/anchor": "0.29.0",
"@inquirer/prompts": "^7.3.3",
"@metadaoproject/futarchy": "0.4.0-alpha.74",
"@metadaoproject/futarchy": "0.4.0-alpha.75",
"@metaplex-foundation/mpl-token-metadata": "^3.2.0",
"@metaplex-foundation/umi": "^0.9.1",
"@metaplex-foundation/umi-bundle-defaults": "^0.9.1",
Expand Down
16 changes: 4 additions & 12 deletions programs/autocrat/src/instructions/finalize_proposal.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,9 @@ pub struct FinalizeProposal<'info> {
pub proposal: Account<'info, Proposal>,
pub pass_amm: Account<'info, Amm>,
pub fail_amm: Account<'info, Amm>,
#[account(has_one = treasury)]
pub dao: Box<Account<'info, Dao>>,
#[account(mut)]
pub question: Account<'info, Question>,
/// CHECK: it's okay
pub treasury: UncheckedAccount<'info>,
#[account(
mut,
associated_token::mint = pass_amm.lp_mint,
Expand All @@ -35,13 +32,13 @@ pub struct FinalizeProposal<'info> {
#[account(
mut,
associated_token::mint = pass_amm.lp_mint,
associated_token::authority = dao.treasury,
associated_token::authority = proposal,
)]
pub pass_lp_vault_account: Box<Account<'info, TokenAccount>>,
#[account(
mut,
associated_token::mint = fail_amm.lp_mint,
associated_token::authority = dao.treasury,
associated_token::authority = proposal,
)]
pub fail_lp_vault_account: Box<Account<'info, TokenAccount>>,
pub token_program: Program<'info, Token>,
Expand Down Expand Up @@ -74,7 +71,6 @@ impl FinalizeProposal<'_> {
fail_amm,
dao,
question,
treasury,
pass_lp_user_account,
fail_lp_user_account,
pass_lp_vault_account,
Expand All @@ -96,10 +92,6 @@ impl FinalizeProposal<'_> {
];
let proposal_signer = &[&proposal_seeds[..]];

let dao_key = dao.key();
let treasury_seeds = &[dao_key.as_ref(), &[dao.treasury_pda_bump]];
let treasury_signer = &[&treasury_seeds[..]];

for (lp_tokens_to_unlock, from, to) in [
(
proposal.pass_lp_tokens_locked,
Expand All @@ -122,10 +114,10 @@ impl FinalizeProposal<'_> {
Transfer {
from: from.to_account_info(),
to: to.to_account_info(),
authority: treasury.to_account_info(),
authority: proposal.to_account_info(),
},
)
.with_signer(treasury_signer),
.with_signer(proposal_signer),
lp_tokens_to_unlock,
)?;
}
Expand Down
26 changes: 16 additions & 10 deletions programs/autocrat/src/instructions/initialize_proposal.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use super::*;

use amm::state::ONE_MINUTE_IN_SLOTS;
use anchor_spl::token::{self, Token, TokenAccount, Transfer};
use anchor_spl::associated_token::AssociatedToken;

#[derive(Debug, Clone, AnchorSerialize, AnchorDeserialize)]
pub struct InitializeProposalParams {
Expand Down Expand Up @@ -46,9 +47,9 @@ pub struct InitializeProposal<'info> {
)]
pub pass_amm: Box<Account<'info, Amm>>,
#[account(constraint = pass_amm.lp_mint == pass_lp_mint.key())]
pub pass_lp_mint: Account<'info, Mint>,
pub pass_lp_mint: Box<Account<'info, Mint>>,
#[account(constraint = fail_amm.lp_mint == fail_lp_mint.key())]
pub fail_lp_mint: Account<'info, Mint>,
pub fail_lp_mint: Box<Account<'info, Mint>>,
#[account(
constraint = fail_amm.base_mint == base_vault.conditional_token_mints[FAIL_INDEX],
constraint = fail_amm.quote_mint == quote_vault.conditional_token_mints[FAIL_INDEX],
Expand All @@ -67,22 +68,26 @@ pub struct InitializeProposal<'info> {
)]
pub fail_lp_user_account: Account<'info, TokenAccount>,
#[account(
mut,
associated_token::mint = pass_amm.lp_mint,
associated_token::authority = dao.treasury,
init_if_needed,
payer = proposer,
associated_token::mint = pass_lp_mint,
associated_token::authority = proposal,
)]
pub pass_lp_vault_account: Account<'info, TokenAccount>,
pub pass_lp_vault_account: Box<Account<'info, TokenAccount>>,
#[account(
mut,
associated_token::mint = fail_amm.lp_mint,
associated_token::authority = dao.treasury,
init_if_needed,
payer = proposer,
associated_token::mint = fail_lp_mint,
associated_token::authority = proposal,
)]
pub fail_lp_vault_account: Account<'info, TokenAccount>,
pub fail_lp_vault_account: Box<Account<'info, TokenAccount>>,
#[account(mut)]
pub proposer: Signer<'info>,
#[account(mut)]
pub payer: Signer<'info>,
pub token_program: Program<'info, Token>,
pub system_program: Program<'info, System>,
pub associated_token_program: Program<'info, AssociatedToken>,
}

impl InitializeProposal<'_> {
Expand Down Expand Up @@ -146,6 +151,7 @@ impl InitializeProposal<'_> {
payer: _,
token_program,
system_program: _,
associated_token_program: _,
event_authority: _,
program: _,
} = ctx.accounts;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use anchor_lang::prelude::*;
use anchor_spl::token::{Mint, TokenAccount};
use anchor_spl::associated_token::AssociatedToken;

use raydium_cpmm_cpi::cpi::accounts::Withdraw as RaydiumWithdraw;

Expand Down Expand Up @@ -94,8 +95,11 @@ pub struct InitializeProposalAmmAccounts<'info> {
#[account(mut)]
pub fail_amm_vault_ata_quote: Box<Account<'info, anchor_spl::token::TokenAccount>>,
#[account(mut)]
/// CHECK: Proposal account that will be initialized by autocrat
pub proposal: UncheckedAccount<'info>,
#[account(init_if_needed, payer = payer, associated_token::mint = pass_lp_mint, associated_token::authority = proposal)]
pub proposal_pass_lp_vault: Box<Account<'info, anchor_spl::token::TokenAccount>>,
#[account(mut)]
#[account(init_if_needed, payer = payer, associated_token::mint = fail_lp_mint, associated_token::authority = proposal)]
pub proposal_fail_lp_vault: Box<Account<'info, anchor_spl::token::TokenAccount>>,
pub amm_program: Program<'info, amm::program::Amm>,
/// CHECK: verified by amm
Expand Down Expand Up @@ -154,10 +158,12 @@ pub struct InitializeProposalWithLiquidity<'info> {
pub dao: Box<Account<'info, autocrat::state::Dao>>,
pub autocrat_program: Program<'info, autocrat::program::Autocrat>,
pub system_program: Program<'info, System>,
pub associated_token_program: Program<'info, AssociatedToken>,
/// CHECK: verified by autocrat
pub autocrat_event_authority: UncheckedAccount<'info>,
}


impl InitializeProposalWithLiquidity<'_> {
pub fn validate(&self) -> Result<()> {
// Check stake threshold
Expand Down Expand Up @@ -605,6 +611,7 @@ impl InitializeProposalWithLiquidity<'_> {
program: ctx.accounts.autocrat_program.to_account_info(),
token_program: ctx.accounts.raydium.token_program.to_account_info(),
system_program: ctx.accounts.system_program.to_account_info(),
associated_token_program: ctx.accounts.associated_token_program.to_account_info(),
},
signer,
),
Expand All @@ -623,4 +630,4 @@ impl InitializeProposalWithLiquidity<'_> {

Ok(())
}
}
}
2 changes: 1 addition & 1 deletion sdk/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@metadaoproject/futarchy",
"version": "0.4.0-alpha.74",
"version": "0.4.0-alpha.75",
"type": "module",
"main": "dist/index.js",
"module": "dist/index.js",
Expand Down
34 changes: 5 additions & 29 deletions sdk/src/v0.4/AutocratClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -574,7 +574,6 @@ export class AutocratClient {
proposer: PublicKey = this.provider.publicKey
) {
let [proposal] = getProposalAddr(this.autocrat.programId, proposer, nonce);
const [daoTreasury] = getDaoTreasuryAddr(this.autocrat.programId, dao);
const { baseVault, quoteVault, passAmm, failAmm } = this.getProposalPdas(
proposal,
baseMint,
Expand All @@ -593,12 +592,12 @@ export class AutocratClient {

const passLpVaultAccount = getAssociatedTokenAddressSync(
passLp,
daoTreasury,
proposal,
true
);
const failLpVaultAccount = getAssociatedTokenAddressSync(
failLp,
daoTreasury,
proposal,
true
);

Expand Down Expand Up @@ -633,21 +632,7 @@ export class AutocratClient {
passLpVaultAccount,
failLpVaultAccount,
proposer,
})
.preInstructions([
createAssociatedTokenAccountIdempotentInstruction(
proposer,
passLpVaultAccount,
daoTreasury,
passLp
),
createAssociatedTokenAccountIdempotentInstruction(
proposer,
failLpVaultAccount,
daoTreasury,
failLp
),
]);
});
}

async finalizeProposal(proposal: PublicKey) {
Expand Down Expand Up @@ -703,18 +688,9 @@ export class AutocratClient {
// quoteVault,
passLpUserAccount: getAssociatedTokenAddressSync(passLp, proposer, true),
failLpUserAccount: getAssociatedTokenAddressSync(failLp, proposer, true),
passLpVaultAccount: getAssociatedTokenAddressSync(
passLp,
daoTreasury,
true
),
failLpVaultAccount: getAssociatedTokenAddressSync(
failLp,
daoTreasury,
true
),
passLpVaultAccount: getAssociatedTokenAddressSync(passLp, proposal, true),
failLpVaultAccount: getAssociatedTokenAddressSync(failLp, proposal, true),
vaultProgram: this.vaultClient.vaultProgram.programId,
treasury: daoTreasury,
vaultEventAuthority,
});
}
Expand Down
21 changes: 4 additions & 17 deletions sdk/src/v0.4/SharedLiquidityManagerClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -529,14 +529,15 @@ export class SharedLiquidityManagerClient {
failAmm,
true
),
proposal,
proposalPassLpVault: getAssociatedTokenAddressSync(
passLpMint,
daoTreasury,
proposal,
true
),
proposalFailLpVault: getAssociatedTokenAddressSync(
failLpMint,
daoTreasury,
proposal,
true
),
ammProgram: AMM_PROGRAM_ID,
Expand All @@ -547,21 +548,7 @@ export class SharedLiquidityManagerClient {
dao,
autocratProgram: AUTOCRAT_PROGRAM_ID,
systemProgram: SystemProgram.programId,
})
.preInstructions([
createAssociatedTokenAccountIdempotentInstruction(
this.provider.wallet.publicKey,
getAssociatedTokenAddressSync(passLpMint, daoTreasury, true),
daoTreasury,
passLpMint
),
createAssociatedTokenAccountIdempotentInstruction(
this.provider.wallet.publicKey,
getAssociatedTokenAddressSync(failLpMint, daoTreasury, true),
daoTreasury,
failLpMint
),
]);
});
}

initializeDraftProposalIx(
Expand Down
24 changes: 12 additions & 12 deletions sdk/src/v0.4/types/autocrat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ export type Autocrat = {
},
{
name: "proposer";
isMut: false;
isMut: true;
isSigner: true;
},
{
Expand All @@ -138,6 +138,11 @@ export type Autocrat = {
isMut: false;
isSigner: false;
},
{
name: "associatedTokenProgram";
isMut: false;
isSigner: false;
},
{
name: "eventAuthority";
isMut: false;
Expand Down Expand Up @@ -186,11 +191,6 @@ export type Autocrat = {
isMut: true;
isSigner: false;
},
{
name: "treasury";
isMut: false;
isSigner: false;
},
{
name: "passLpUserAccount";
isMut: true;
Expand Down Expand Up @@ -1142,7 +1142,7 @@ export const IDL: Autocrat = {
},
{
name: "proposer",
isMut: false,
isMut: true,
isSigner: true,
},
{
Expand All @@ -1160,6 +1160,11 @@ export const IDL: Autocrat = {
isMut: false,
isSigner: false,
},
{
name: "associatedTokenProgram",
isMut: false,
isSigner: false,
},
{
name: "eventAuthority",
isMut: false,
Expand Down Expand Up @@ -1208,11 +1213,6 @@ export const IDL: Autocrat = {
isMut: true,
isSigner: false,
},
{
name: "treasury",
isMut: false,
isSigner: false,
},
{
name: "passLpUserAccount",
isMut: true,
Expand Down
Loading
Loading