Skip to content

Commit 4539baf

Browse files
committed
refactor(futarchy): replace vault transaction account with transaction_index arg in admin_approve_multisig_proposal
1 parent 2b7abb6 commit 4539baf

5 files changed

Lines changed: 58 additions & 37 deletions

File tree

programs/futarchy/src/instructions/admin_approve_multisig_proposal.rs

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,13 @@ mod admin {
77
declare_id!("CWGawadYU8CzRVBecnJymNw97H7E3ndDinV5sMzesgY2");
88
}
99

10+
#[derive(Debug, Clone, AnchorSerialize, AnchorDeserialize)]
11+
pub struct AdminApproveMultisigProposalArgs {
12+
pub transaction_index: u64,
13+
}
14+
1015
#[derive(Accounts)]
16+
#[instruction(args: AdminApproveMultisigProposalArgs)]
1117
pub struct AdminApproveMultisigProposal<'info> {
1218
#[account(mut, has_one = squads_multisig)]
1319
pub dao: Account<'info, Dao>,
@@ -32,33 +38,20 @@ pub struct AdminApproveMultisigProposal<'info> {
3238
squads_multisig_program::SEED_PREFIX,
3339
squads_multisig.key().as_ref(),
3440
squads_multisig_program::SEED_TRANSACTION,
35-
squads_multisig_vault_transaction.index.to_le_bytes().as_ref(),
41+
args.transaction_index.to_le_bytes().as_ref(),
3642
squads_multisig_program::SEED_PROPOSAL,
3743
],
3844
bump,
3945
seeds::program = squads_multisig_program
4046
)]
4147
pub squads_multisig_proposal: Account<'info, squads_multisig_program::Proposal>,
4248

43-
#[account(
44-
seeds = [
45-
squads_multisig_program::SEED_PREFIX,
46-
squads_multisig.key().as_ref(),
47-
squads_multisig_program::SEED_TRANSACTION,
48-
squads_multisig_vault_transaction.index.to_le_bytes().as_ref(),
49-
],
50-
bump,
51-
seeds::program = squads_multisig_program
52-
)]
53-
pub squads_multisig_vault_transaction:
54-
Account<'info, squads_multisig_program::VaultTransaction>,
55-
5649
pub squads_multisig_program:
5750
Program<'info, squads_multisig_program::program::SquadsMultisigProgram>,
5851
}
5952

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

@@ -69,13 +62,12 @@ impl AdminApproveMultisigProposal<'_> {
6962
Ok(())
7063
}
7164

72-
pub fn handle(ctx: Context<Self>) -> Result<()> {
65+
pub fn handle(ctx: Context<Self>, _args: AdminApproveMultisigProposalArgs) -> Result<()> {
7366
let Self {
7467
dao,
7568
admin: _,
7669
squads_multisig,
7770
squads_multisig_proposal,
78-
squads_multisig_vault_transaction: _,
7971
squads_multisig_program,
8072
} = ctx.accounts;
8173

programs/futarchy/src/lib.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,12 @@ pub mod futarchy {
150150
CollectMeteoraDammFees::handle(ctx)
151151
}
152152

153-
#[access_control(ctx.accounts.validate())]
153+
#[access_control(ctx.accounts.validate(&args))]
154154
pub fn admin_approve_multisig_proposal(
155155
ctx: Context<AdminApproveMultisigProposal>,
156+
args: AdminApproveMultisigProposalArgs,
156157
) -> Result<()> {
157-
AdminApproveMultisigProposal::handle(ctx)
158+
AdminApproveMultisigProposal::handle(ctx, args)
158159
}
159160

160161
#[access_control(ctx.accounts.validate())]

sdk/src/v0.7/types/futarchy.ts

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1204,17 +1204,19 @@ export type Futarchy = {
12041204
isSigner: false;
12051205
},
12061206
{
1207-
name: "squadsMultisigVaultTransaction";
1207+
name: "squadsMultisigProgram";
12081208
isMut: false;
12091209
isSigner: false;
12101210
},
1211+
];
1212+
args: [
12111213
{
1212-
name: "squadsMultisigProgram";
1213-
isMut: false;
1214-
isSigner: false;
1214+
name: "args";
1215+
type: {
1216+
defined: "AdminApproveMultisigProposalArgs";
1217+
};
12151218
},
12161219
];
1217-
args: [];
12181220
},
12191221
{
12201222
name: "adminExecuteMultisigProposal";
@@ -1697,6 +1699,18 @@ export type Futarchy = {
16971699
];
16981700
};
16991701
},
1702+
{
1703+
name: "AdminApproveMultisigProposalArgs";
1704+
type: {
1705+
kind: "struct";
1706+
fields: [
1707+
{
1708+
name: "transactionIndex";
1709+
type: "u64";
1710+
},
1711+
];
1712+
};
1713+
},
17001714
{
17011715
name: "ConditionalSwapParams";
17021716
type: {
@@ -4488,17 +4502,19 @@ export const IDL: Futarchy = {
44884502
isSigner: false,
44894503
},
44904504
{
4491-
name: "squadsMultisigVaultTransaction",
4505+
name: "squadsMultisigProgram",
44924506
isMut: false,
44934507
isSigner: false,
44944508
},
4509+
],
4510+
args: [
44954511
{
4496-
name: "squadsMultisigProgram",
4497-
isMut: false,
4498-
isSigner: false,
4512+
name: "args",
4513+
type: {
4514+
defined: "AdminApproveMultisigProposalArgs",
4515+
},
44994516
},
45004517
],
4501-
args: [],
45024518
},
45034519
{
45044520
name: "adminExecuteMultisigProposal",
@@ -4981,6 +4997,18 @@ export const IDL: Futarchy = {
49814997
],
49824998
},
49834999
},
5000+
{
5001+
name: "AdminApproveMultisigProposalArgs",
5002+
type: {
5003+
kind: "struct",
5004+
fields: [
5005+
{
5006+
name: "transactionIndex",
5007+
type: "u64",
5008+
},
5009+
],
5010+
},
5011+
},
49845012
{
49855013
name: "ConditionalSwapParams",
49865014
type: {

tests/futarchy/unit/adminApproveMultisigProposal.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { expectError, setupBasicDao } from "../../utils.js";
99
import { assert } from "chai";
1010
import * as multisig from "@sqds/multisig";
1111
import { createMemoInstruction } from "@solana/spl-memo";
12+
import BN from "bn.js";
1213

1314
export default function suite() {
1415
let META: PublicKey, USDC: PublicKey, dao: PublicKey;
@@ -96,12 +97,11 @@ export default function suite() {
9697
);
9798

9899
await this.futarchy.autocrat.methods
99-
.adminApproveMultisigProposal()
100+
.adminApproveMultisigProposal({ transactionIndex: new BN(1) })
100101
.accounts({
101102
dao: dao,
102103
squadsMultisig: daoAccount.squadsMultisig,
103104
squadsMultisigProposal: squadsProposalPda,
104-
squadsMultisigVaultTransaction: vaultTransactionPda,
105105
admin: this.payer.publicKey,
106106
squadsMultisigProgram: multisig.PROGRAM_ID,
107107
})
@@ -228,12 +228,13 @@ export default function suite() {
228228

229229
// Approve and execute the config transaction using the new split instructions
230230
await this.futarchy.autocrat.methods
231-
.adminApproveMultisigProposal()
231+
.adminApproveMultisigProposal({
232+
transactionIndex: new BN(configTransactionIndex.toString()),
233+
})
232234
.accounts({
233235
dao: dao,
234236
squadsMultisig: daoAccount.squadsMultisig,
235237
squadsMultisigProposal: squadsConfigProposalPda,
236-
squadsMultisigVaultTransaction: vaultConfigTransactionPda,
237238
admin: this.payer.publicKey,
238239
squadsMultisigProgram: multisig.PROGRAM_ID,
239240
})
@@ -278,12 +279,11 @@ export default function suite() {
278279
);
279280

280281
await this.futarchy.autocrat.methods
281-
.adminApproveMultisigProposal()
282+
.adminApproveMultisigProposal({ transactionIndex: new BN(1) })
282283
.accounts({
283284
dao: dao,
284285
squadsMultisig: daoAccount.squadsMultisig,
285286
squadsMultisigProposal: squadsInvalidatedProposalPda,
286-
squadsMultisigVaultTransaction: vaultInvalidatedTransactionPda,
287287
admin: this.payer.publicKey,
288288
squadsMultisigProgram: multisig.PROGRAM_ID,
289289
})

tests/futarchy/unit/adminExecuteMultisigProposal.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { expectError, setupBasicDao } from "../../utils.js";
99
import { assert } from "chai";
1010
import * as multisig from "@sqds/multisig";
1111
import { createMemoInstruction } from "@solana/spl-memo";
12+
import BN from "bn.js";
1213

1314
export default function suite() {
1415
let META: PublicKey, USDC: PublicKey, dao: PublicKey;
@@ -110,12 +111,11 @@ export default function suite() {
110111

111112
// First approve
112113
await this.futarchy.autocrat.methods
113-
.adminApproveMultisigProposal()
114+
.adminApproveMultisigProposal({ transactionIndex: new BN(1) })
114115
.accounts({
115116
dao: dao,
116117
squadsMultisig: daoAccount.squadsMultisig,
117118
squadsMultisigProposal: squadsProposalPda,
118-
squadsMultisigVaultTransaction: vaultTransactionPda,
119119
admin: this.payer.publicKey,
120120
squadsMultisigProgram: multisig.PROGRAM_ID,
121121
})

0 commit comments

Comments
 (0)