From 74fafb1ba7890d8e54cf13673c6cd7a3cf4c764a Mon Sep 17 00:00:00 2001 From: Iceomatic <89707822+iceomatic@users.noreply.github.com> Date: Wed, 9 Oct 2024 08:07:09 +0200 Subject: [PATCH 1/8] fix: bind transaction_buffer seeds to creator --- .../src/instructions/transaction_buffer_close.rs | 1 + .../src/instructions/transaction_buffer_create.rs | 1 + .../src/instructions/transaction_buffer_extend.rs | 1 + .../src/instructions/vault_transaction_create_from_buffer.rs | 1 + 4 files changed, 4 insertions(+) diff --git a/programs/squads_multisig_program/src/instructions/transaction_buffer_close.rs b/programs/squads_multisig_program/src/instructions/transaction_buffer_close.rs index 9d28f3ef..07f80385 100644 --- a/programs/squads_multisig_program/src/instructions/transaction_buffer_close.rs +++ b/programs/squads_multisig_program/src/instructions/transaction_buffer_close.rs @@ -24,6 +24,7 @@ pub struct TransactionBufferClose<'info> { SEED_PREFIX, multisig.key().as_ref(), SEED_TRANSACTION_BUFFER, + creator.key().as_ref(), &transaction_buffer.buffer_index.to_le_bytes() ], bump diff --git a/programs/squads_multisig_program/src/instructions/transaction_buffer_create.rs b/programs/squads_multisig_program/src/instructions/transaction_buffer_create.rs index 2201b9a3..e36bd396 100644 --- a/programs/squads_multisig_program/src/instructions/transaction_buffer_create.rs +++ b/programs/squads_multisig_program/src/instructions/transaction_buffer_create.rs @@ -36,6 +36,7 @@ pub struct TransactionBufferCreate<'info> { SEED_PREFIX, multisig.key().as_ref(), SEED_TRANSACTION_BUFFER, + creator.key().as_ref(), &args.buffer_index.to_le_bytes(), ], bump diff --git a/programs/squads_multisig_program/src/instructions/transaction_buffer_extend.rs b/programs/squads_multisig_program/src/instructions/transaction_buffer_extend.rs index 84d6c43c..77d0c2a5 100644 --- a/programs/squads_multisig_program/src/instructions/transaction_buffer_extend.rs +++ b/programs/squads_multisig_program/src/instructions/transaction_buffer_extend.rs @@ -27,6 +27,7 @@ pub struct TransactionBufferExtend<'info> { SEED_PREFIX, multisig.key().as_ref(), SEED_TRANSACTION_BUFFER, + creator.key().as_ref(), &transaction_buffer.buffer_index.to_le_bytes() ], bump diff --git a/programs/squads_multisig_program/src/instructions/vault_transaction_create_from_buffer.rs b/programs/squads_multisig_program/src/instructions/vault_transaction_create_from_buffer.rs index b9c5ab9f..fb4048ba 100644 --- a/programs/squads_multisig_program/src/instructions/vault_transaction_create_from_buffer.rs +++ b/programs/squads_multisig_program/src/instructions/vault_transaction_create_from_buffer.rs @@ -15,6 +15,7 @@ pub struct VaultTransactionCreateFromBuffer<'info> { SEED_PREFIX, vault_transaction_create.multisig.key().as_ref(), SEED_TRANSACTION_BUFFER, + creator.key().as_ref(), &transaction_buffer.buffer_index.to_le_bytes(), ], bump From ff9c93e15fe0222d83176b1ea06d1cae50e88a34 Mon Sep 17 00:00:00 2001 From: Iceomatic <89707822+iceomatic@users.noreply.github.com> Date: Wed, 9 Oct 2024 08:14:24 +0200 Subject: [PATCH 2/8] remove: current member check for transaction_buffer_close --- .../src/instructions/transaction_buffer_close.rs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/programs/squads_multisig_program/src/instructions/transaction_buffer_close.rs b/programs/squads_multisig_program/src/instructions/transaction_buffer_close.rs index 07f80385..fe0ca42b 100644 --- a/programs/squads_multisig_program/src/instructions/transaction_buffer_close.rs +++ b/programs/squads_multisig_program/src/instructions/transaction_buffer_close.rs @@ -37,16 +37,6 @@ pub struct TransactionBufferClose<'info> { impl TransactionBufferClose<'_> { fn validate(&self) -> Result<()> { - let Self { - multisig, creator, .. - } = self; - - // creator is still a member in the multisig - require!( - multisig.is_member(creator.key()).is_some(), - MultisigError::NotAMember - ); - Ok(()) } From 749a81d2524461be1700e16c1e502b663d91d149 Mon Sep 17 00:00:00 2001 From: Iceomatic <89707822+iceomatic@users.noreply.github.com> Date: Wed, 9 Oct 2024 09:06:09 +0200 Subject: [PATCH 3/8] fix: creator check on vault_tx_create_from_buffer --- .../src/instructions/vault_transaction_create_from_buffer.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/programs/squads_multisig_program/src/instructions/vault_transaction_create_from_buffer.rs b/programs/squads_multisig_program/src/instructions/vault_transaction_create_from_buffer.rs index fb4048ba..46e31b7d 100644 --- a/programs/squads_multisig_program/src/instructions/vault_transaction_create_from_buffer.rs +++ b/programs/squads_multisig_program/src/instructions/vault_transaction_create_from_buffer.rs @@ -11,6 +11,9 @@ pub struct VaultTransactionCreateFromBuffer<'info> { #[account( mut, close = creator, + // Only the creator can turn the buffer into a transaction and reclaim + // the rent + constraint = transaction_buffer.creator == creator.key() @ MultisigError::Unauthorized, seeds = [ SEED_PREFIX, vault_transaction_create.multisig.key().as_ref(), From 712ad05ecca40de5a044f5a0936ed745572ca7e9 Mon Sep 17 00:00:00 2001 From: Iceomatic <89707822+iceomatic@users.noreply.github.com> Date: Wed, 9 Oct 2024 09:10:53 +0200 Subject: [PATCH 4/8] remove: multisig mut in transaction_buffer instructions --- .../src/instructions/transaction_buffer_close.rs | 1 - .../src/instructions/transaction_buffer_create.rs | 1 - .../src/instructions/transaction_buffer_extend.rs | 1 - 3 files changed, 3 deletions(-) diff --git a/programs/squads_multisig_program/src/instructions/transaction_buffer_close.rs b/programs/squads_multisig_program/src/instructions/transaction_buffer_close.rs index fe0ca42b..d38e3c9e 100644 --- a/programs/squads_multisig_program/src/instructions/transaction_buffer_close.rs +++ b/programs/squads_multisig_program/src/instructions/transaction_buffer_close.rs @@ -6,7 +6,6 @@ use crate::state::*; #[derive(Accounts)] pub struct TransactionBufferClose<'info> { #[account( - mut, seeds = [SEED_PREFIX, SEED_MULTISIG, multisig.create_key.as_ref()], bump = multisig.bump, )] diff --git a/programs/squads_multisig_program/src/instructions/transaction_buffer_create.rs b/programs/squads_multisig_program/src/instructions/transaction_buffer_create.rs index e36bd396..6593fe3a 100644 --- a/programs/squads_multisig_program/src/instructions/transaction_buffer_create.rs +++ b/programs/squads_multisig_program/src/instructions/transaction_buffer_create.rs @@ -22,7 +22,6 @@ pub struct TransactionBufferCreateArgs { #[instruction(args: TransactionBufferCreateArgs)] pub struct TransactionBufferCreate<'info> { #[account( - mut, seeds = [SEED_PREFIX, SEED_MULTISIG, multisig.create_key.as_ref()], bump = multisig.bump, )] diff --git a/programs/squads_multisig_program/src/instructions/transaction_buffer_extend.rs b/programs/squads_multisig_program/src/instructions/transaction_buffer_extend.rs index 77d0c2a5..9276dac8 100644 --- a/programs/squads_multisig_program/src/instructions/transaction_buffer_extend.rs +++ b/programs/squads_multisig_program/src/instructions/transaction_buffer_extend.rs @@ -13,7 +13,6 @@ pub struct TransactionBufferExtendArgs { #[instruction(args: TransactionBufferExtendArgs)] pub struct TransactionBufferExtend<'info> { #[account( - mut, seeds = [SEED_PREFIX, SEED_MULTISIG, multisig.create_key.as_ref()], bump = multisig.bump, )] From 821e9a876d9945add4e389615c40ed872ddf9067 Mon Sep 17 00:00:00 2001 From: Iceomatic <89707822+iceomatic@users.noreply.github.com> Date: Wed, 9 Oct 2024 10:02:46 +0200 Subject: [PATCH 5/8] remove: testing code from allocator --- .../squads_multisig_program/src/allocator.rs | 35 ++++++++----------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/programs/squads_multisig_program/src/allocator.rs b/programs/squads_multisig_program/src/allocator.rs index 4bdde984..61c71288 100644 --- a/programs/squads_multisig_program/src/allocator.rs +++ b/programs/squads_multisig_program/src/allocator.rs @@ -103,27 +103,22 @@ struct BumpAllocator; unsafe impl std::alloc::GlobalAlloc for BumpAllocator { #[inline] unsafe fn alloc(&self, layout: Layout) -> *mut u8 { - if layout.size() == isize::MAX as usize - 0x42 { - // Return test value - 0x42 as *mut u8 - } else { - const POS_PTR: *mut usize = HEAP_START_ADDRESS as *mut usize; - const TOP_ADDRESS: usize = HEAP_START_ADDRESS as usize + HEAP_LENGTH; - const BOTTOM_ADDRESS: usize = HEAP_START_ADDRESS as usize + size_of::<*mut u8>(); - let mut pos = *POS_PTR; - if pos == 0 { - // First time, set starting position to bottom address - pos = BOTTOM_ADDRESS; - } - // Align the position upwards - pos = (pos + layout.align() - 1) & !(layout.align() - 1); - let next_pos = pos.saturating_add(layout.size()); - if next_pos > TOP_ADDRESS { - return null_mut(); - } - *POS_PTR = next_pos; - pos as *mut u8 + const POS_PTR: *mut usize = HEAP_START_ADDRESS as *mut usize; + const TOP_ADDRESS: usize = HEAP_START_ADDRESS as usize + HEAP_LENGTH; + const BOTTOM_ADDRESS: usize = HEAP_START_ADDRESS as usize + size_of::<*mut u8>(); + let mut pos = *POS_PTR; + if pos == 0 { + // First time, set starting position to bottom address + pos = BOTTOM_ADDRESS; } + // Align the position upwards + pos = (pos + layout.align() - 1) & !(layout.align() - 1); + let next_pos = pos.saturating_add(layout.size()); + if next_pos > TOP_ADDRESS { + return null_mut(); + } + *POS_PTR = next_pos; + pos as *mut u8 } #[inline] From a663f7fb6a1383c8977f491404def286c44fd4e5 Mon Sep 17 00:00:00 2001 From: Iceomatic <89707822+iceomatic@users.noreply.github.com> Date: Wed, 9 Oct 2024 10:03:13 +0200 Subject: [PATCH 6/8] fix: tests --- sdk/multisig/idl/squads_multisig_program.json | 6 +++--- .../src/generated/instructions/transactionBufferClose.ts | 4 ++-- .../src/generated/instructions/transactionBufferCreate.ts | 4 ++-- .../src/generated/instructions/transactionBufferExtend.ts | 4 ++-- tests/suites/examples/transaction-buffer.ts | 1 + tests/suites/instructions/transactionBufferClose.ts | 3 ++- tests/suites/instructions/transactionBufferCreate.ts | 7 +++++++ tests/suites/instructions/transactionBufferExtend.ts | 6 ++++-- 8 files changed, 23 insertions(+), 12 deletions(-) diff --git a/sdk/multisig/idl/squads_multisig_program.json b/sdk/multisig/idl/squads_multisig_program.json index fed3c6fb..0224f2f0 100644 --- a/sdk/multisig/idl/squads_multisig_program.json +++ b/sdk/multisig/idl/squads_multisig_program.json @@ -763,7 +763,7 @@ "accounts": [ { "name": "multisig", - "isMut": true, + "isMut": false, "isSigner": false }, { @@ -810,7 +810,7 @@ "accounts": [ { "name": "multisig", - "isMut": true, + "isMut": false, "isSigner": false }, { @@ -837,7 +837,7 @@ "accounts": [ { "name": "multisig", - "isMut": true, + "isMut": false, "isSigner": false }, { diff --git a/sdk/multisig/src/generated/instructions/transactionBufferClose.ts b/sdk/multisig/src/generated/instructions/transactionBufferClose.ts index 0e84493b..b8ea8e86 100644 --- a/sdk/multisig/src/generated/instructions/transactionBufferClose.ts +++ b/sdk/multisig/src/generated/instructions/transactionBufferClose.ts @@ -22,7 +22,7 @@ export const transactionBufferCloseStruct = new beet.BeetArgsStruct<{ /** * Accounts required by the _transactionBufferClose_ instruction * - * @property [_writable_] multisig + * @property [] multisig * @property [_writable_] transactionBuffer * @property [**signer**] creator * @category Instructions @@ -58,7 +58,7 @@ export function createTransactionBufferCloseInstruction( const keys: web3.AccountMeta[] = [ { pubkey: accounts.multisig, - isWritable: true, + isWritable: false, isSigner: false, }, { diff --git a/sdk/multisig/src/generated/instructions/transactionBufferCreate.ts b/sdk/multisig/src/generated/instructions/transactionBufferCreate.ts index 29b53256..6887a94d 100644 --- a/sdk/multisig/src/generated/instructions/transactionBufferCreate.ts +++ b/sdk/multisig/src/generated/instructions/transactionBufferCreate.ts @@ -39,7 +39,7 @@ export const transactionBufferCreateStruct = new beet.FixableBeetArgsStruct< /** * Accounts required by the _transactionBufferCreate_ instruction * - * @property [_writable_] multisig + * @property [] multisig * @property [_writable_] transactionBuffer * @property [**signer**] creator * @property [_writable_, **signer**] rentPayer @@ -82,7 +82,7 @@ export function createTransactionBufferCreateInstruction( const keys: web3.AccountMeta[] = [ { pubkey: accounts.multisig, - isWritable: true, + isWritable: false, isSigner: false, }, { diff --git a/sdk/multisig/src/generated/instructions/transactionBufferExtend.ts b/sdk/multisig/src/generated/instructions/transactionBufferExtend.ts index 0f1acec0..50d2a126 100644 --- a/sdk/multisig/src/generated/instructions/transactionBufferExtend.ts +++ b/sdk/multisig/src/generated/instructions/transactionBufferExtend.ts @@ -39,7 +39,7 @@ export const transactionBufferExtendStruct = new beet.FixableBeetArgsStruct< /** * Accounts required by the _transactionBufferExtend_ instruction * - * @property [_writable_] multisig + * @property [] multisig * @property [_writable_] transactionBuffer * @property [**signer**] creator * @category Instructions @@ -79,7 +79,7 @@ export function createTransactionBufferExtendInstruction( const keys: web3.AccountMeta[] = [ { pubkey: accounts.multisig, - isWritable: true, + isWritable: false, isSigner: false, }, { diff --git a/tests/suites/examples/transaction-buffer.ts b/tests/suites/examples/transaction-buffer.ts index 156424fe..3178c389 100644 --- a/tests/suites/examples/transaction-buffer.ts +++ b/tests/suites/examples/transaction-buffer.ts @@ -103,6 +103,7 @@ describe("Examples / Transaction Buffers", () => { Buffer.from("multisig"), multisigPda.toBuffer(), Buffer.from("transaction_buffer"), + members.almighty.publicKey.toBuffer(), Buffer.from([bufferIndex]) ], programId diff --git a/tests/suites/instructions/transactionBufferClose.ts b/tests/suites/instructions/transactionBufferClose.ts index e11a666d..9569f69e 100644 --- a/tests/suites/instructions/transactionBufferClose.ts +++ b/tests/suites/instructions/transactionBufferClose.ts @@ -83,6 +83,7 @@ describe("Instructions / transaction_buffer_close", () => { Buffer.from("multisig"), multisigPda.toBuffer(), Buffer.from("transaction_buffer"), + members.proposer.publicKey.toBuffer(), Uint8Array.from([bufferIndex]) ], programId @@ -149,7 +150,7 @@ describe("Instructions / transaction_buffer_close", () => { connection .sendTransaction(closeTx) .catch(multisig.errors.translateAndThrowAnchorError), - /Unauthorized/ + /(Unauthorized|ConstraintSeeds)/ ); }); diff --git a/tests/suites/instructions/transactionBufferCreate.ts b/tests/suites/instructions/transactionBufferCreate.ts index a185203b..2ab1acc4 100644 --- a/tests/suites/instructions/transactionBufferCreate.ts +++ b/tests/suites/instructions/transactionBufferCreate.ts @@ -96,6 +96,7 @@ describe("Instructions / transaction_buffer_create", () => { Buffer.from("multisig"), multisigPda.toBuffer(), Buffer.from("transaction_buffer"), + members.proposer.publicKey.toBuffer(), Uint8Array.from([bufferIndex]) ], programId @@ -165,6 +166,7 @@ describe("Instructions / transaction_buffer_create", () => { Buffer.from("multisig"), multisigPda.toBuffer(), Buffer.from("transaction_buffer"), + members.proposer.publicKey.toBuffer(), Uint8Array.from([bufferIndex]) ], programId @@ -233,6 +235,7 @@ describe("Instructions / transaction_buffer_create", () => { Buffer.from("multisig"), multisigPda.toBuffer(), Buffer.from("transaction_buffer"), + members.proposer.publicKey.toBuffer(), Uint8Array.from([bufferIndex]) ], programId @@ -365,6 +368,7 @@ describe("Instructions / transaction_buffer_create", () => { Buffer.from("multisig"), multisigPda.toBuffer(), Buffer.from("transaction_buffer"), + nonMember.publicKey.toBuffer(), Uint8Array.from([bufferIndex]), ], programId @@ -452,6 +456,7 @@ describe("Instructions / transaction_buffer_create", () => { Buffer.from("multisig"), multisigPda.toBuffer(), Buffer.from("transaction_buffer"), + memberWithoutInitiatePermissions.publicKey.toBuffer(), Uint8Array.from([bufferIndex]), ], programId @@ -538,6 +543,7 @@ describe("Instructions / transaction_buffer_create", () => { Buffer.from("multisig"), multisigPda.toBuffer(), Buffer.from("transaction_buffer"), + members.proposer.publicKey.toBuffer(), Buffer.from(invalidBufferIndex), ], programId @@ -604,6 +610,7 @@ describe("Instructions / transaction_buffer_create", () => { Buffer.from("multisig"), multisigPda.toBuffer(), Buffer.from("transaction_buffer"), + members.proposer.publicKey.toBuffer(), Uint8Array.from([bufferIndex]), ], programId diff --git a/tests/suites/instructions/transactionBufferExtend.ts b/tests/suites/instructions/transactionBufferExtend.ts index 75ce62cc..789bf0af 100644 --- a/tests/suites/instructions/transactionBufferExtend.ts +++ b/tests/suites/instructions/transactionBufferExtend.ts @@ -74,6 +74,7 @@ describe("Instructions / transaction_buffer_extend", () => { Buffer.from("multisig"), multisigPda.toBuffer(), Buffer.from("transaction_buffer"), + creator.publicKey.toBuffer(), Buffer.from([Number(transactionIndex)]) ], programId @@ -194,6 +195,7 @@ describe("Instructions / transaction_buffer_extend", () => { Buffer.from("multisig"), multisigPda.toBuffer(), Buffer.from("transaction_buffer"), + members.proposer.publicKey.toBuffer(), Buffer.from([Number(transactionIndex)]) ], programId @@ -353,7 +355,7 @@ describe("Instructions / transaction_buffer_extend", () => { await assert.rejects( () => connection.sendTransaction(tx).catch(multisig.errors.translateAndThrowAnchorError), - /Unauthorized/ + /(Unauthorized|ConstraintSeeds)/ ); await closeTransactionBuffer(members.almighty, transactionBuffer); @@ -429,7 +431,7 @@ describe("Instructions / transaction_buffer_extend", () => { await assert.rejects( () => connection.sendTransaction(extendTx).catch(multisig.errors.translateAndThrowAnchorError), - /Unauthorized/ + /(Unauthorized|ConstraintSeeds)/ ); From 7551bf073a12991926597e32b7b3bd88fd2ffa15 Mon Sep 17 00:00:00 2001 From: Iceomatic <89707822+iceomatic@users.noreply.github.com> Date: Thu, 10 Oct 2024 18:53:31 +0200 Subject: [PATCH 7/8] fix: MAX_BUFFER_SIZE saturation in invariant check --- .../squads_multisig_program/src/state/transaction_buffer.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/programs/squads_multisig_program/src/state/transaction_buffer.rs b/programs/squads_multisig_program/src/state/transaction_buffer.rs index 2ed6b608..945276d1 100644 --- a/programs/squads_multisig_program/src/state/transaction_buffer.rs +++ b/programs/squads_multisig_program/src/state/transaction_buffer.rs @@ -66,7 +66,7 @@ impl TransactionBuffer { MultisigError::FinalBufferSizeExceeded ); require!( - self.buffer.len() < MAX_BUFFER_SIZE, + self.buffer.len() <= MAX_BUFFER_SIZE, MultisigError::FinalBufferSizeExceeded ); require!( From 676766d81256308ce122c8bfe9c83379993e97b4 Mon Sep 17 00:00:00 2001 From: Iceomatic <89707822+iceomatic@users.noreply.github.com> Date: Thu, 10 Oct 2024 23:48:37 +0200 Subject: [PATCH 8/8] remove: heap testing instruction --- .../src/instructions/heap_test.rs | 28 ------------------- .../src/instructions/mod.rs | 2 -- programs/squads_multisig_program/src/lib.rs | 9 +++--- 3 files changed, 4 insertions(+), 35 deletions(-) delete mode 100644 programs/squads_multisig_program/src/instructions/heap_test.rs diff --git a/programs/squads_multisig_program/src/instructions/heap_test.rs b/programs/squads_multisig_program/src/instructions/heap_test.rs deleted file mode 100644 index 526aac11..00000000 --- a/programs/squads_multisig_program/src/instructions/heap_test.rs +++ /dev/null @@ -1,28 +0,0 @@ -use anchor_lang::prelude::*; - -#[derive(Accounts)] -pub struct HeapTest<'info> { - /// CHECK: We only need to validate the address. - pub authority: AccountInfo<'info>, -} - -impl HeapTest<'_> { - pub fn handler(_ctx: Context, length: u64) -> Result<()> { - // Allocate the vector with the desired capacity - let mut vector = Vec::::with_capacity(length as usize); - - // Unsafe block to set the length of the vector without initialization - unsafe { - vector.set_len(length as usize); - } - - // If you need to set all elements to a specific value (e.g., 1), - // you can use `fill` method which is more efficient than iteration - vector.fill(1); - - // Log the vector's length - msg!("Vector allocated with length: {}", vector.len()); - - Ok(()) - } -} diff --git a/programs/squads_multisig_program/src/instructions/mod.rs b/programs/squads_multisig_program/src/instructions/mod.rs index 9c6330a5..82e17d81 100644 --- a/programs/squads_multisig_program/src/instructions/mod.rs +++ b/programs/squads_multisig_program/src/instructions/mod.rs @@ -3,7 +3,6 @@ pub use batch_create::*; pub use batch_execute_transaction::*; pub use config_transaction_create::*; pub use config_transaction_execute::*; -pub use heap_test::*; pub use multisig_add_spending_limit::*; pub use multisig_config::*; pub use multisig_create::*; @@ -27,7 +26,6 @@ mod batch_create; mod batch_execute_transaction; mod config_transaction_create; mod config_transaction_execute; -mod heap_test; mod multisig_add_spending_limit; mod multisig_config; mod multisig_create; diff --git a/programs/squads_multisig_program/src/lib.rs b/programs/squads_multisig_program/src/lib.rs index 8be658b0..c1a5572d 100644 --- a/programs/squads_multisig_program/src/lib.rs +++ b/programs/squads_multisig_program/src/lib.rs @@ -265,7 +265,10 @@ pub mod squads_multisig_program { /// accommodate the new amount of cancel votes. /// The previous implemenation still works if the proposal size is in line with the /// threshold size. - pub fn proposal_cancel_v2<'info>(ctx: Context<'_, '_, 'info, 'info, ProposalCancelV2<'info>>, args: ProposalVoteArgs) -> Result<()> { + pub fn proposal_cancel_v2<'info>( + ctx: Context<'_, '_, 'info, 'info, ProposalCancelV2<'info>>, + args: ProposalVoteArgs, + ) -> Result<()> { ProposalCancelV2::proposal_cancel_v2(ctx, args) } @@ -316,8 +319,4 @@ pub mod squads_multisig_program { pub fn batch_accounts_close(ctx: Context) -> Result<()> { BatchAccountsClose::batch_accounts_close(ctx) } - // Uncomment to enable the heap_test instruction - // pub fn heap_test(ctx: Context, length: u64) -> Result<()> { - // HeapTest::handler(ctx, length) - // } }