Skip to content
Open
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
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,13 @@ mod admin {
declare_id!("CWGawadYU8CzRVBecnJymNw97H7E3ndDinV5sMzesgY2");
}

#[derive(Debug, Clone, AnchorSerialize, AnchorDeserialize)]
pub struct AdminApproveMultisigProposalArgs {
pub transaction_index: u64,
}

#[derive(Accounts)]
#[instruction(args: AdminApproveMultisigProposalArgs)]
pub struct AdminApproveMultisigProposal<'info> {
#[account(mut, has_one = squads_multisig)]
pub dao: Account<'info, Dao>,
Expand All @@ -32,33 +38,20 @@ pub struct AdminApproveMultisigProposal<'info> {
squads_multisig_program::SEED_PREFIX,
squads_multisig.key().as_ref(),
squads_multisig_program::SEED_TRANSACTION,
squads_multisig_vault_transaction.index.to_le_bytes().as_ref(),
args.transaction_index.to_le_bytes().as_ref(),
squads_multisig_program::SEED_PROPOSAL,
],
bump,
seeds::program = squads_multisig_program
)]
pub squads_multisig_proposal: Account<'info, squads_multisig_program::Proposal>,

#[account(
seeds = [
squads_multisig_program::SEED_PREFIX,
squads_multisig.key().as_ref(),
squads_multisig_program::SEED_TRANSACTION,
squads_multisig_vault_transaction.index.to_le_bytes().as_ref(),
],
bump,
seeds::program = squads_multisig_program
)]
pub squads_multisig_vault_transaction:
Account<'info, squads_multisig_program::VaultTransaction>,

pub squads_multisig_program:
Program<'info, squads_multisig_program::program::SquadsMultisigProgram>,
}

impl AdminApproveMultisigProposal<'_> {
pub fn validate(&self) -> Result<()> {
pub fn validate(&self, _args: &AdminApproveMultisigProposalArgs) -> Result<()> {
#[cfg(feature = "production")]
require_keys_eq!(self.admin.key(), admin::ID, FutarchyError::InvalidAdmin);

Expand All @@ -69,13 +62,12 @@ impl AdminApproveMultisigProposal<'_> {
Ok(())
}

pub fn handle(ctx: Context<Self>) -> Result<()> {
pub fn handle(ctx: Context<Self>, _args: AdminApproveMultisigProposalArgs) -> Result<()> {
let Self {
dao,
admin: _,
squads_multisig,
squads_multisig_proposal,
squads_multisig_vault_transaction: _,
squads_multisig_program,
} = ctx.accounts;

Expand Down
5 changes: 3 additions & 2 deletions programs/futarchy/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -150,11 +150,12 @@ pub mod futarchy {
CollectMeteoraDammFees::handle(ctx)
}

#[access_control(ctx.accounts.validate())]
#[access_control(ctx.accounts.validate(&args))]
pub fn admin_approve_multisig_proposal(
ctx: Context<AdminApproveMultisigProposal>,
args: AdminApproveMultisigProposalArgs,
) -> Result<()> {
AdminApproveMultisigProposal::handle(ctx)
AdminApproveMultisigProposal::handle(ctx, args)
}

#[access_control(ctx.accounts.validate())]
Expand Down
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.7.3-alpha.2",
"version": "0.7.4-alpha.1",
"type": "module",
"main": "dist/index.js",
"module": "dist/index.js",
Expand Down
48 changes: 38 additions & 10 deletions sdk/src/v0.7/types/futarchy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1204,17 +1204,19 @@ export type Futarchy = {
isSigner: false;
},
{
name: "squadsMultisigVaultTransaction";
name: "squadsMultisigProgram";
isMut: false;
isSigner: false;
},
];
args: [
{
name: "squadsMultisigProgram";
isMut: false;
isSigner: false;
name: "args";
type: {
defined: "AdminApproveMultisigProposalArgs";
};
},
];
args: [];
},
{
name: "adminExecuteMultisigProposal";
Expand Down Expand Up @@ -1697,6 +1699,18 @@ export type Futarchy = {
];
};
},
{
name: "AdminApproveMultisigProposalArgs";
type: {
kind: "struct";
fields: [
{
name: "transactionIndex";
type: "u64";
},
];
};
},
{
name: "ConditionalSwapParams";
type: {
Expand Down Expand Up @@ -4488,17 +4502,19 @@ export const IDL: Futarchy = {
isSigner: false,
},
{
name: "squadsMultisigVaultTransaction",
name: "squadsMultisigProgram",
isMut: false,
isSigner: false,
},
],
args: [
{
name: "squadsMultisigProgram",
isMut: false,
isSigner: false,
name: "args",
type: {
defined: "AdminApproveMultisigProposalArgs",
},
},
],
args: [],
},
{
name: "adminExecuteMultisigProposal",
Expand Down Expand Up @@ -4981,6 +4997,18 @@ export const IDL: Futarchy = {
],
},
},
{
name: "AdminApproveMultisigProposalArgs",
type: {
kind: "struct",
fields: [
{
name: "transactionIndex",
type: "u64",
},
],
},
},
{
name: "ConditionalSwapParams",
type: {
Expand Down
12 changes: 6 additions & 6 deletions tests/futarchy/unit/adminApproveMultisigProposal.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { expectError, setupBasicDao } from "../../utils.js";
import { assert } from "chai";
import * as multisig from "@sqds/multisig";
import { createMemoInstruction } from "@solana/spl-memo";
import BN from "bn.js";

export default function suite() {
let META: PublicKey, USDC: PublicKey, dao: PublicKey;
Expand Down Expand Up @@ -96,12 +97,11 @@ export default function suite() {
);

await this.futarchy.autocrat.methods
.adminApproveMultisigProposal()
.adminApproveMultisigProposal({ transactionIndex: new BN(1) })
.accounts({
dao: dao,
squadsMultisig: daoAccount.squadsMultisig,
squadsMultisigProposal: squadsProposalPda,
squadsMultisigVaultTransaction: vaultTransactionPda,
admin: this.payer.publicKey,
squadsMultisigProgram: multisig.PROGRAM_ID,
})
Expand Down Expand Up @@ -228,12 +228,13 @@ export default function suite() {

// Approve and execute the config transaction using the new split instructions
await this.futarchy.autocrat.methods
.adminApproveMultisigProposal()
.adminApproveMultisigProposal({
transactionIndex: new BN(configTransactionIndex.toString()),
})
.accounts({
dao: dao,
squadsMultisig: daoAccount.squadsMultisig,
squadsMultisigProposal: squadsConfigProposalPda,
squadsMultisigVaultTransaction: vaultConfigTransactionPda,
admin: this.payer.publicKey,
squadsMultisigProgram: multisig.PROGRAM_ID,
})
Expand Down Expand Up @@ -278,12 +279,11 @@ export default function suite() {
);

await this.futarchy.autocrat.methods
.adminApproveMultisigProposal()
.adminApproveMultisigProposal({ transactionIndex: new BN(1) })
.accounts({
dao: dao,
squadsMultisig: daoAccount.squadsMultisig,
squadsMultisigProposal: squadsInvalidatedProposalPda,
squadsMultisigVaultTransaction: vaultInvalidatedTransactionPda,
admin: this.payer.publicKey,
squadsMultisigProgram: multisig.PROGRAM_ID,
})
Expand Down
4 changes: 2 additions & 2 deletions tests/futarchy/unit/adminExecuteMultisigProposal.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { expectError, setupBasicDao } from "../../utils.js";
import { assert } from "chai";
import * as multisig from "@sqds/multisig";
import { createMemoInstruction } from "@solana/spl-memo";
import BN from "bn.js";

export default function suite() {
let META: PublicKey, USDC: PublicKey, dao: PublicKey;
Expand Down Expand Up @@ -110,12 +111,11 @@ export default function suite() {

// First approve
await this.futarchy.autocrat.methods
.adminApproveMultisigProposal()
.adminApproveMultisigProposal({ transactionIndex: new BN(1) })
.accounts({
dao: dao,
squadsMultisig: daoAccount.squadsMultisig,
squadsMultisigProposal: squadsProposalPda,
squadsMultisigVaultTransaction: vaultTransactionPda,
admin: this.payer.publicKey,
squadsMultisigProgram: multisig.PROGRAM_ID,
})
Expand Down
2 changes: 1 addition & 1 deletion yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -975,7 +975,7 @@
"@jridgewell/sourcemap-codec" "^1.4.10"

"@metadaoproject/futarchy@./sdk":
version "0.7.3-alpha.2"
version "0.7.4-alpha.1"
dependencies:
"@coral-xyz/anchor" "^0.29.0"
"@metaplex-foundation/umi" "^0.9.2"
Expand Down
Loading