Squads v3 Docs
  • Welcome to Squads
  • Who we are?
  • Basics
    • What's a Multisig?
    • What's a Squad?
  • Getting Started
    • Create a Squad
  • Navigating Your Squad
    • Dashboard
    • Vault
    • Transactions
    • Developers
      • Programs
      • Token Manager
      • Validators
      • TX Builder
    • Creators
    • Apps
    • Owners and Settings
  • Integrations
    • Staking
      • Stakewiz
      • JitoSOL
      • Lido
      • Marinade
      • SolBlaze
    • Tensor
    • Cardinal
    • Dialect
    • Bonfida
    • Jupiter
    • Coinflow
  • Security and audits
    • Security
    • Security Policy & Bug Bounty
    • Audit reports
  • Frequently Asked Questions
    • General
    • Protocol
    • Costs of using Squads
  • Development
    • PDAs
      • Multisig
      • Transaction
      • Instruction
      • Derivation
    • Authorities
    • Anchor IDL
      • Loading the Program
      • Create a Multisig
      • Transactions
        • Create a Transaction
        • Adding Instructions
        • Activating a Transaction
        • Approve / Reject a Transaction
        • Executing
    • SDK
  • Squads Community
    • Self Custody Society (SCS)
    • Community
Powered by GitBook
On this page
  1. Development
  2. Anchor IDL
  3. Transactions

Create a Transaction

To create a transaction for the multisig to act upon first derive a PDA for the transaction. The transaction PDA is used to reference the account created, and will store some basic information about the transaction.

In addition to the PDA, creating a transaction also requires and authority index.

A complete example to create a new Transaction with the expected transactionIndex

// fetch the multisig
const multisigAccount = await squadsProgram.account.ms.fetch(multisig);

// get the next expected transactionIndex
const transactionIndex = new anchor.BN(multisigAccount.transactionIndex + 1);

// get the transaction PDA
const transaction = await anchor.web3.PublicKey.findProgramAddress(
    anchor.utils.bytes.utf8.encode("squad"),
    multisig.toBuffer(),
    transactionIndex.toBuffer("le", 4), // or .toArrayLike(Buffer, "le", 4) 
    anchor.utils.bytes.utf8.encode("transaction")
);

// get the public key of the payer/creator
const creator = wallet.publicKey;

await program.methods.createTransaction(1) //using authorityIndex of 1
   .accounts({
       multisig,    // the multisig PDA
       transaction, // the transaction PDA
       creator // the creator/payer of the transaction acccount
    })
    .rpc();

After being created, the transaction will remain in a Draft status, until it is activated by the member key that created it.

PreviousTransactionsNextAdding Instructions

Last updated 2 years ago

Refer to the for more information about deriving the transaction PDA and for information about how authorities function within Squads.

Transaction PDA section
the Authority section