# Welcome to Squads Multisig

Learn more about Squads and Squads Protocol.

### About Squads

Squads Multisig is a multisig platform to secure and manage Solana assets. With Squads, teams can deploy a multisig in a few clicks, configure it to satisfy their security and organizational requirements, and then use it to manage a wide range of onchain assets such as:

* Treasury;
* Program upgrade authorities;
* Admin keys;
* Tokens;
* and Validators.

With Squads, our goal is to bring a traditional SaaS-like product experience to onchain asset management in a way that feels familiar and intuitive to both traditional and crypto-native businesses.

Squads achieves this by solving three core problems when it comes to managing onchain assets:

* User experience - We have transformed a lot of the experiences that previously required developers to interact with the CLI into well-designed user flows all contained within an intuitive interface.
* Security - Squads is built on top of Squads Protocol, Solana's autonomous finance layer. Each multisig's rules, security and workflows are enforced by Squads Protocol and Solana's 1,000+ global validators, not a centralized exchange, black box algorithm or trusted 3rd-party.
* Transparency - We enhance transparency for teams by giving main stakeholders increased visibility and the ability to approve critical actions for project development. This is achieved by requiring multisig approvals for managing assets, making relevant data accessible and human-readable.

We provide teams with greater transparency, allowing for the main stakeholders to have more visibility and a way to approve actions critical for the development of their project by requiring multisig approvals for the management of assets, parsing a lot of the relevant data in our interface and making it human readable.

### Squads Protocol

Squads Protocol is the autonomous finance layer built on Solana.

It replaces legacy banking infrastructure and centralized servers with a blockchain-native operating system — delivering programmable payments, 24/7 USD liquidity, competitive yields, and security enforced by deterministic code, not corporate promises.

Trusted by over 350 teams and thousands of individuals, Squads Protocol secures more than $10 billion in assets and has processed over $3 billion in stablecoin transfers.


# What is a multisig

Fundamental explanation of a multisig wallet and its importance.

A multisig is a non-custodial solution where control over assets is not exercised by a single private key, but rather by multiple private keys. It can be thought of as a safe that requires multiple unique keys to open it and move the assets. That means that even if one of the keys is compromised, the assets remain secure (no single point of failure).

Squads Protocol, the autonomous finance layer on Solana, is a collection of onchain smart accounts. These smart accounts are what power Squads Multisig.

Multisigs are the most widely adopted use case of smart accounts. They have been around since the early days of Bitcoin and are widely used for the purposes of self-custody of crypto assets across blockchains.

Every Squad is a programmable multisig wallet at its core, which ensures that any transaction or action taken within Squads requires the approval of multiple team members. As a result, the risk of unauthorized or malicious activity is greatly reduced, as it becomes impossible for a single member to access and manipulate funds or trigger harmful transactions to the funds held within the multisig.

On top of that, multi-signature technology serves as a consensus mechanism allowing teams to make decisions over their treasury (tokens, NFTs) and developer assets (programs, tokens, validators) together in a decentralized manner.


# Who we are - Squads Labs

Learn more about the team.

## Squads Labs

Squads Labs is a technology company that builds tools to enable efficient economic activity onchain.

Our mission is to grow the onchain economy by developing smart account technology and products that make it easy for businesses, teams and individuals to securely transact, manage and own digital assets.

Leveraging this smart account technology, we offer a product suite that includes Squads for enterprises and [Fuse](https://fusewallet.com/) for individuals.

We are trusted and used by over 250 teams in the ecosystem, such as Jupiter, Pyth, Raydium, Marginfi, Backpack, Drift, Helius, Kamino, Jito, Tensor, Helium and many others.

Our partners and investors include Electric Capital, RockawayX, Coinbase Ventures, L1D, Placeholder, Multicoin Capital, 6th Man Ventures, Jump Crypto, Collab+Currency, Delphi Digital, Reciprocal Ventures, Solana Ventures.<br>


# Security

Learn more about security on Squads.

Squads Multisig is built on Squads Protocol, the formally-verified autonomous finance layer on Solana, securing over $10 billion in value and more than $3 billion in stablecoin transfers.\
\
Squads Protocol is a collection of open source, immutable smart accounts that are powered by Solana's 1,000+ validators.

It replaces legacy banking infrastructure and centralized servers with a blockchain-native operating system — delivering programmable payments, 24/7 USD liquidity, competitive yields, and security enforced by deterministic code, not corporate promises.

### **Onchain and Open-sourced**

With self-custody at its core, Squads Protocol is built to be resistant to censorship and interference reinforced by thousands of nodes on Solana.

Squads Protocol's codebase is open-sourced (available to view [here](https://github.com/Squads-Protocol/v4)) and the programs have been written in [Anchor](https://www.anchor-lang.com/), a framework for building secure Solana programs.

### Multiple Security Audits

Our programs have undergone multiple security audits by leading security firms like OtterSec, Certora, Neodyme, etc. These are third-party reviews of our codebase to address vulnerabilities ensuring a neutral and in-depth assessment of the security of Squads Protocol.

You can find the security audits for both Squads Protocol v3 and v4 [here](/main/security/security-audits).&#x20;

### **Formally Verified**

A formal verification is a rigorous process used to prove that the protocol behaves as intended, ensuring reliability and security.

Squads Protocol v4 (powering [Squads](https://app.squads.so/)) has undergone [two formal verifications](https://docs.squads.so/main/security/formal-verifications/squads-protocol-v4) to make sure it is robust.

### Immutable

We strongly believe that core primitives existing on open and permissionless networks should be made immutable as soon as practically possible. We are committed to making Squads Protocol programs immutable within months of public release.

Squads Protocol v3 (powering Squads Legacy) was the first multisig program on Solana and it has been [immutable since February 2023](https://x.com/SquadsProtocol/status/1628776620243963904?s=20).

Squads Protocol v4, launched in October 2023, has also been [immutable since November 2024](https://x.com/SquadsProtocol/status/1859947607671607443), unalterable by Squads Labs or any third party.

### **Perpetual Bug Bounty Program**

We also run a perpetual bug bounty program incentivizing proactive security checks by the community. Learn more about our program [here](/main/security/bug-bounty).

***

Squads Protocol stands apart with a commitment to fully onchain, open-source security. This approach fosters accountability, allowing anyone to scrutinize and verify the security of Squads Protocol—a critical element for those seeking transparency and trust in their onchain asset management solutions.

{% hint style="info" %}
If you have any more questions about security on Squads, reach out to us on [Discord](https://discord.com/invite/squadsprotocol).
{% endhint %}


# Quickstart Guide

Everything you need to know about your first Squads multisig.

### Creating A Squad

Creating a Squads multisig is a straightforward process that begins with connecting your Solana wallet (such as Phantom or Backpack) to Squads.

* Upon connecting, choose a name for your squad, select the number of approvals required for transactions, and add squad members by adding their wallet addresses.
* It is recommended to avoid minimum confirmation thresholds (1/x) and maximum thresholds (e.g. 5/5). Instead, opt for an optimal approach like 2/3 or 3/5 depending on the size of your team.
* Always ensure each member keeps a backup of their private keys used for the multisig and that the threshold allows for easy replacement of a lost/compromised key. Recommend members to use cold wallets to protect their private keys.

You can modify your Squad settings after creation, including adjusting the confirmation threshold and managing members (add/remove). Any changes you make will require approval based on the existing confirmation threshold in place.

{% hint style="info" %}
Follow our step-by-step guide to creating your Squad [here](/main/getting-started/create-a-squad).
{% endhint %}

### Setting Up Your Squad

Once you have created your multisig with a robust and secure setup, you can deposit your onchain assets to your Squad. You can carry out transfers to your Squad multisig address from these sources:

* A Solana wallet (Phantom, Backpack, etc.);
* centralized exchange ([refer to our list of supported CEXs](/main/additional-resources/sending-assets-to-from-centralized-exchange-cexs));
* or on-ramp from a bank account using [Sphere](/main/getting-started/on-and-off-ramp/sphere).

Note: Before adding a large amount, it is recommended to first test with a small sum to ensure:

* all members understand the process,
* your multisig setup works as expected.

You can manage the settings of your Squad and its members using features like [Permissions](/main/navigating-your-squad/settings#permissions), [Time Locks](/main/navigating-your-squad/settings#time-locks), [Spending Limits](/main/navigating-your-squad/settings#spending-limits), and more. Learn more about managing your Squad settings [here](/main/navigating-your-squad/settings).

{% hint style="info" %}
Learn more advanced security measures you can take that can significantly enhance your defense against potential attacks while using Squads [here](/main/additional-resources/advanced-security-best-practices).
{% endhint %}

### Treasury Operations

The Squads dashboard provides an intuitive interface to not just store but manage your assets and perform treasury operations.

#### On And Off-Ramping Assets

Squads users can on-ramp assets to their multisig and off-ramp assets to their bank accounts seamlessly using:

* [Squads Virtual US Bank Account](/main/getting-started/on-and-off-ramp/virtual-us-bank-account): Receive payments in USD, which are seamlessly converted to USDC in your Squad account.
* [Sphere](/main/getting-started/on-and-off-ramp/sphere): Seamless on-ramping and off-ramping of assets cost-effectively via Wire, ACH, and SEPA transfers for USD and EUR bank accounts.
* [Coinflow Off-ramp](/main/getting-started/on-and-off-ramp/coinflow-off-ramp): Top-tier US bank collaborations and instant 24/7 crypto off-ramping to individuals and businesses with bank accounts in the US.
* [Bridge Off-ramp](/main/getting-started/on-and-off-ramp/bridge-off-ramp): Available to businesses with US or European bank accounts in most regions outside the OFAC sanctions list.

Learn more about on and off-ramping assets [here](/main/getting-started/on-and-off-ramp).

#### Accessing The Ecosystem

There are a ton of operations teams can undertake by accessing the vast Solana ecosystem:

* [In-app trading](/main/navigating-your-squad/trade) powered by Jupiter
* [Staking](/main/navigating-your-squad/stake) with any Solana validator (powered by Stakewiz), various liquid staking providers (fuseSOL, Jito, Marinade, SolBlaze, marginfi), Marinade Native, and the [Squads Validator](https://docs.squads.so/main/navigating-your-squad/in-app-integrations/staking/staking-with-squads)

[SquadsX](/main/navigating-your-squad/squadsx) is a companion tool that enables teams to connect their Squads treasury to applications within the Solana ecosystem not directly integrated into Squads while maintaining smart account security.

And if you are a team looking for advanced features and granular controls over your assets, you can purchase the [Squads Business or Enterprise](/main/getting-started/pricing) plan. It equips you with additional powerful features such as permissions, payments, sub-accounts, fee relayer, and more.

### Administration

#### Invoice Management And Accounting

Request Finance makes it easy for teams to manage and automate accounting workflows for their business. Using [SquadsX](/main/navigating-your-squad/squadsx), teams can connect their Squads account to Request Finance to:

* Create and manage invoices that automatically link with Squads transactions for streamlined payment approval and execution.
* Monitor approval and payment status for seamless invoice management.

Explore additional accounting features of Request Finance [here](https://www.request.finance/).

{% hint style="info" %}
Squads users can get started with a [2-month free trial](https://www.request.finance/partners/squads).&#x20;
{% endhint %}

#### Reporting With Squads&#x20;

Users can use [Integral](https://integral.xyz/) to streamline bookkeeping, treasury management, tax compliance, and auditing processes. Once you've set up an account on Integral, you can seamlessly integrate your Squads App address by simply copying and pasting it into the platform.

This integration provides you with a comprehensive overview of all your onchain activities — giving you access to detailed insights that enable you to effortlessly meet your compliance requirements and maintain accurate records of your onchain transactions.

### Squads On Mobile

The Squads app can also be used on mobile devices via in-app browsers of mobile wallets like:

* Phantom;
* Backpack;
* Solfare, and more.

More on how to access your Squad on mobile [here](/main/additional-resources/squads-on-mobile).

{% hint style="info" %}
In the unlikely event that the Squads app would be unavailable for a long period, we have put in place multiple options to allow users to access their assets. Learn more about accessing your Squad in such a case [here](https://docs.squads.so/main/getting-started/what-if-the-squads-app-goes-down).
{% endhint %}

### Contact Us

If you are facing any issues or have questions, join our [Discord](https://discord.com/invite/squadsprotocol) or reach out to <garrett@sqds.io>.


# Create a Squad

Everything you need to know about creating your first Squad.

Creating a Squad

1. Head over to [app.squads.so](https://app.squads.so/) and connect your Solana wallet by clicking the "Connect Wallet" button.

The app will automatically detect the compatible Solana wallets you have installed and show them in the "Connect your wallet" pop-up. If you do not have a wallet, you can also create and use a Squads account with your email via [TipLink](https://docs.squads.so/main/navigating-your-squad/in-app-integrations/tiplink).

{% hint style="warning" %}
Ledger Connect is not supported. If you're using a Ledger, connect through Phantom or Solflare wallets instead. Enable Blind Signing on your Ledger device to ensure successful transaction signing.
{% endhint %}

<figure><img src="/files/iFwU70aZOh8AYViZIfnK" alt=""><figcaption><p>Select wallet pop-up</p></figcaption></figure>

2. After connecting your wallet, click on the "Create a Squad" button.
3. Enter your Squad's details (can be modified later):
   1. Squad name
   2. Profile picture (JPEG, PNG, or GIF formats, under 3MB)
   3. Description (optional, limited to 64 characters)

<figure><img src="/files/TvjLo8Ovyka7UuVcpC1p" alt=""><figcaption><p>Squad details</p></figcaption></figure>

4. Add members to your Squad with their public keys and set a confirmation threshold.

<figure><img src="/files/Phv4OQb4jZnkC5V5Tq53" alt=""><figcaption><p>Squad members and confirmation threshold setup</p></figcaption></figure>

The confirmation threshold determines the number of approvals required from Squad members for transaction execution. For example, a 2/3 threshold means two out of three wallets must approve a transaction for it to be executed.

{% hint style="warning" %}
Avoid setting the threshold at 1/1 signatures as it creates a single point of failure. Similarly, setting the threshold at maximum capacity may lead to access issues if control over one wallet is lost.
{% endhint %}

You can add up to 10 initial members. Additional members can be added after the Squad is created, subject to multisig approval based on the set confirmation threshold. Review the information once all members are added and click "Next".

<figure><img src="/files/iBJDdj7kD8722wJroGiZ" alt=""><figcaption><p>Summary of your Squad's details</p></figcaption></figure>

5. On the final review screen, click "Confirm" to create your Squad. Once created, you can use the "Share" button in the pop-up to share the Squad URL with your team members.

{% hint style="info" %}
Deploying a Squads multisig requires a small amount of SOL to cover a one-time 0.1 SOL deployment fee, 0.001 SOL to fund your Squads account, and \~0.0018 SOL in network rent for account deployment.
{% endhint %}

6. Upon creation, you'll be directed to the "Treasury" tab. For guidance on navigating your Squads dashboard, please refer to the [Dashboard section](/main/navigating-your-squad/dashboard).

<figure><img src="/files/aJjlhRs3dKd15ap9fVJk" alt=""><figcaption><p>Treasury tab</p></figcaption></figure>


# On and Off-Ramp

Everything you need to know about on and off-ramping assets from your Squad

Squads users can on-ramp assets to their multisig and off-ramp assets to their bank accounts seamlessly using:

* [Squads Virtual US Bank Account](/main/getting-started/on-and-off-ramp/virtual-us-bank-account): Receive payments in USD, which is seamlessly converted to USDC in your Squad account.&#x20;
* [Sphere](/main/getting-started/on-and-off-ramp/sphere): Seamless [on-ramping](/main/getting-started/on-and-off-ramp/sphere#on-ramping-with-sphere-and-squads) and [off-ramping](/main/getting-started/on-and-off-ramp/sphere#off-ramping-with-sphere-and-squads) of assets cost-effectively via Wire, ACH, and SEPA transfers for USD and EUR bank accounts.
* [Coinflow](/main/getting-started/on-and-off-ramp/coinflow-off-ramp): Top-tier US bank collaborations and instant 24/7 crypto off-ramping to individuals and businesses with bank accounts in the US.
* [Bridge](/main/getting-started/on-and-off-ramp/bridge-off-ramp): Off-ramp available to businesses with US or European bank accounts in most regions outside the OFAC sanctions list.

Additionally, Squads users can make USDC payouts to bank accounts of both businesses and individuals by leveraging third-party payouts, with funds arriving in either USD or EUR.


# Virtual US Bank Account

Learn how to set up a virtual US bank account.

Powered by[ Bridge](https://www.bridge.xyz/), users can now set up virtual US bank accounts to receive payments in USD, which is seamlessly converted to USDC in their Squad account.&#x20;

1. [How It Works](#how-it-works)
2. [Transfer Limits](#transfer-limits)
3. [User Eligibility](#user-eligibility)

### How It Works

With a virtual US bank account, receiving USD payments as USDC in your Squads account is simple:

* Automatic USD-to-USDC conversion&#x20;
* No need for multiple platforms or transfers&#x20;
* Avoid costly on-ramp fees

Senders use familiar USD bank transfers, while you receive USDC in your Squad account—all for a minimal 0.1% conversion fee.

### Transfer Limits

**US residents**

* From your business bank account: no limit
* From individuals: not supported
* From businesses: no limits
* From payroll platforms such as Deel, Gusto, and Upwork: no limits

**Non-US residents**

* From your business bank account: no limits
* From individuals: $4,000 per transaction
* From businesses: no limits
* From payroll platforms such as Deel, Gusto, and Upwork: no limits

### User Eligibility

**Availability**

Virtual US bank accounts are available for users in most of the US, Canada, Europe, Australia, UAE, Japan, India and many other countries around the world.

**Restrictions**

For US businesses, virtual US bank accounts are not available to those with principal residential or operating addresses in New York and Alaska. Also, virtual US bank accounts are not available to businesses with principal residential or operating addresses in the countries listed below.

* Afghanistan
* Albania
* Algeria
* Bangladesh
* Belarus
* Central African Republic
* China
* Cuba
* Democratic Republic of the Congo
* Eritrea
* Ethiopia
* Gaza Strip
* Iran
* Iraq
* Kenya
* Kosovo
* Lebanon
* Libya
* Mali
* Morocco
* Myanmar
* Nepal
* Nicaragua
* Niger
* North Korea
* North Macedonia
* Pakistan
* Qatar
* Russian Federation
* Slovenia
* Somalia
* South Sudan
* Sudan
* Syria
* Ukraine


# Sphere

Learn how to on and off-ramp crypto with Sphere.

## What Is Sphere?

Sphere is a payments platform that bridges traditional finance and the onchain economy by streamlining the on-and off-ramping process.

## How do Squads users benefit from this integration?

You can now on-ramp assets to your Squads wallet and off-ramp to fiat in a secure and cost-effective way. This is enabled seamlessly via Wire, ACH, and SEPA transfers for both USD and EUR bank accounts.

## On-Ramping with Sphere & Squads

{% hint style="info" %}
Before using Sphere, make sure to set up an account and connect your bank account [here](https://spherepay.co/).
{% endhint %}

To on-ramp crypto with Sphere:

1. Create a new Wire, ACH, or SEPA on-ramp on Sphere.
2. When setting up a new on-ramp, select the bank account you'd like to send fiat from, choose Solana as the destination network, paste in your Squads vault address, and then select “Use Wallet”.&#x20;
3. Next, fill out the on-ramp form and click “Initiate”—your transfer will now be processed. Note that the transfer will either be processed automatically or you'll get wire instructions to manually complete the deposit.&#x20;

{% embed url="<https://www.loom.com/share/0191b8ae86334c0884e39e8e6caa6211>" %}
On-ramp crypto to Squads
{% endembed %}

## Off-Ramping with Sphere & Squads

You can off-ramp from crypto to fiat in a single Squads transaction using [Sphere Offload](<https://x.com/sphere_labs/status/1793691417480704456 >).

1. In the “Payouts” section on Sphere, select the “Bank accounts” tab.&#x20;
2. Next, navigate to the bank account you'd like to off-ramp to and click the three dots in the “Actions” column, select “Generate wallet address” for the Solana network, and then click “Confirm”.
3. In a couple of seconds, you should see “View wallets” in the “Linked wallets” column. Click on it. From the pop-up you'll be able to copy the Solana wallet address that is linked to your bank account—add it to your Squads contact book and use it whenever you'd like to off-ramp crypto to fiat.

{% embed url="<https://www.loom.com/share/170f437fdb14479c8e7282c42221779c>" %}
Off-ramp crypto from Squads
{% endembed %}

Streamline the off-ramping process by creating a Spending Limit. For example, you can specify that your CTO can transfer USDC 1,000 per week to the off-ramp address without the standard Squads-required multisig approval.

## Transfer types&#x20;

Sphere supports Wire, ACH, and SEPA transfers for both USD and EUR bank accounts.

Currently, Sphere only supports USD and EUR bank accounts—regardless in which jurisdiction the issuing bank is located in. This applies to e.g. multi-currency accounts (e.g. Wise/Revolut), and e.g. an Indonesian with a USD account.

## Fees

### On-ramp

1\) Bank fees for sending Wire, ACH, or SEPA

2\) 0.1% conversion fee (USD to USDC) and (EUR to USDC)

3\) Solana network fee for sending funds to a Sphere-generated wallet address&#x20;

### Off-Ramp

1\) Solana network fee for sending funds to a Sphere-generated wallet address&#x20;

2\) 0.1% conversion fee (USDC to USD) and (USDC to EUR)

3\) Bank fees for receiving Wire, ACH, or SEPA

## Jurisdictions

Sphere supports transactions to any USD and EUR bank account that is located in a non-high-risk country, according to OFAC/FATF.&#x20;

{% hint style="info" %}
Unsupported countries/regions are [listed here](https://intercom.help/spherepay/en/articles/9516473-which-countries-can-i-use-sphere-from).
{% endhint %}


# Coinflow Off-ramp

Learn how to off-ramp your assets to your bank account.

{% hint style="info" %}
Coinflow off-ramping is currently only available for individuals and businesses with bank accounts in the US.
{% endhint %}

## What is Coinflow?

Coinflow develops software bridging conventional finance and blockchain tech, enabling users to purchase digital assets and services using standard payment methods. With top-tier US bank collaborations, Coinflow provides instant 24/7 crypto off-ramping to user bank accounts.

## How to off-ramp assets to a bank account

1. Navigate to the "Dashboard" of your Squad and click the "Send" button.
2. Choose the "Off-ramp" option in the pop-up.

<figure><img src="/files/1yd4kU1UYZz7y7M6TIRO" alt=""><figcaption><p>Send popup</p></figcaption></figure>

3. Select "Coinflow" as the off-ramp option.

<figure><img src="/files/Ulq50F4zJCUyyBnuWR3A" alt=""><figcaption><p>Coinflow off-ramp popup</p></figcaption></figure>

4. Enter your email and country of residence. Click "Next" to continue to the KYC/KYB process.

<figure><img src="/files/pWUYWGfgBcuq1xTXjKGW" alt=""><figcaption><p>Withdrawal Verification</p></figcaption></figure>

5. To continue, select your account type as "Individual" or "Business". Click the "Next" button to complete the KYC (for individuals) or KYB (for businesses) verification.

<figure><img src="/files/27p49ftyF3U0Nclc2xPi" alt=""><figcaption></figcaption></figure>

6. Complete the verification process to continue with the off-ramp process.

<figure><img src="/files/FCt8ZAsTqi4bbgiIAZrq" alt=""><figcaption></figcaption></figure>

7. Once your KYC/KYB process is complete and verified, you will be able to continue. Choose the account you want to send funds from and the account that will receive USD.

<figure><img src="/files/q3zT1Qt0BXxENRi1cLCZ" alt=""><figcaption><p>Off-ramping</p></figcaption></figure>

8. Add a new bank account by filling in the following details:

* Account owner
* Account type
* Bank name and type
* Beneficiary address
* Routing number
* Account number

<figure><img src="/files/BCqgrdz2GGIkbYIVYCmc" alt=""><figcaption><p>Bank account details</p></figcaption></figure>

9. Enter the amount you want to send and the type of transaction. Click the "Next" button to review your transaction.

<figure><img src="/files/dyTLdop2qarYc9MfgJSH" alt=""><figcaption><p>Amount and Transaction speed</p></figcaption></figure>

10. Once reviewed, initiate the transaction. You will receive USD in your bank account once your transaction is complete according to the chosen transaction type.


# Bridge Off-Ramp

Learn how to off-ramp your assets to your bank account using Bridge.

Squads users can now seamlessly off-ramp USDC to their business bank account with multiple options through [Bridge](https://www.bridge.xyz/) Off-Ramp.

1. [How It Works](#how-it-works)
2. [Options And Fees](#options-and-fees)
3. [User Eligibility](#user-eligibility)

### How It Works

To access Bridge Off-Ramp:

* Navigate to your Dashboard
* Select "Send"
* Choose "Off-ramp"
* Select "Bridge"
* Complete the KYB process to verify eligibility

### Options And Fees

Multiple transfer methods are available.

**Wire Transfer**

* Fee: $20 + 0.5%
* Settlement: Within 1 business day (fastest option)

**ACH Same Day**

* Fee: $1 + 0.5%
* Settlement: Within 1 business day

**Standard ACH**

* Fee: $0.50 + 0.5%
* Settlement: 2-3 business days

**SEPA Transfer**

* Fee: $1.00 + 0.5%
* Settlement: 1-5 business days

### User Eligibility

**Availability**

Bridge Off-Ramp services are currently limited to business entities through a dedicated KYB verification. Individual user verification (KYC) is not supported at this time.\
\
Geographically, Bridge Off-Ramp is available to most users in the US, Canada, UK, and Europe.\
\
**Restrictions**\
\
For US residents, the service is unavailable for those with principal resident or operating addresses in New York, Florida, Alaska, and Louisiana. Bridge Off-Ramp is also not available for those with principal resident or operating addresses in the countries listed below.&#x20;

* Afghanistan
* Albania
* Algeria
* Bangladesh
* Belarus
* Central African Republic
* China
* Cuba
* Democratic Republic of the Congo
* Eritrea
* Ethiopia
* Gaza Strip
* Iran
* Iraq
* Kenya
* Kosovo
* Lebanon
* Libya
* Mali
* Morocco
* Myanmar
* Nepal
* Nicaragua
* Niger
* North Korea
* North Macedonia
* Pakistan
* Qatar
* Russian Federation
* Slovenia
* Somalia
* South Sudan
* Sudan
* Syria
* Ukraine
* Venezuela
* West Bank
* Yemen
* Zimbabwe


# Third-Party Payouts

Make USDC payouts to any bank account, with funds arriving in USD or EUR.

Third-party payouts enables [Squads](https://squads.so/) users to make USDC payouts to bank accounts of both businesses and individuals, with funds arriving in either USD or EUR.

1. [How It Works](#how-to-create-a-third-party-payment)
2. [Options And Fees](#options-and-fees)
3. [User Eligibility](#user-eligibility)

## How It Works

\
**KYB Verification and Contact bank details**

* Log in to your Squad and navigate to the “Contacts” section in the left-hand menu.
* Choose an existing contact or create a new one
* The "Bank Account Details" section of the "Contacts" page will prompt you to verify with Bridge if needed.
* Once verified (takes up to 24 hours), add the contact's bank details

**Making a payout**

* Go to your Squad dashboard and click “Send”. In the “External” section, choose “To bank account”. Select your payment account and the payout recipient from your contacts— then click “Next”. Alternatively, you can click the “Send” button directly from the contact overview to initiate a faster third-party payout workflow.
* Next, enter the USDC amount you'd like to pay out and choose a transaction method—click “Next” to proceed.
* Review the payout details and initiate the transaction. The USDC payout will be converted to USD or EUR based on the recipient’s bank details.

## Options And Fees

Multiple transaction methods are available for third-party payouts.

**Wire Transfer**

* Fee: $20 + 0.5%
* Settlement: Within 1 business day (fastest option)

**ACH Same Day**

* Fee: $1 + 0.5%&#x20;
* Settlement: Within 1 business day&#x20;

**Standard ACH**&#x20;

* Fee: $0.50 + 0.5%&#x20;
* Settlement: 2-3 business days&#x20;

**SEPA Transfer**&#x20;

* Fee: $1.00 + 0.5%&#x20;
* Settlement: 1-5 business days

## User Eligibility

**Availability**\
Third-party payouts are available to businesses in Canada, Europe, Asia, and other regions outside OFAC sanctions. While U.S. businesses are not yet eligible, non-U.S. businesses can use the feature to pay their U.S. counterparts.

**Restrictions**\
Third party payouts are not available for US based customers or the 39 countries in the list below.

* Afghanistan
* Albania
* Algeria
* Bangladesh
* Belarus
* Central African Republic
* China
* Cuba
* Democratic Republic of the Congo
* Eritrea
* Ethiopia
* Gaza Strip
* Iran
* Iraq
* Kenya
* Kosovo
* Lebanon
* Libya
* Mali
* Morocco
* Myanmar
* Nepal
* Nicaragua
* Niger
* North Korea
* North Macedonia
* Pakistan
* Qatar
* Russian Federation
* Slovenia
* Somalia
* South Sudan
* Sudan
* Syria
* Ukraine
* Venezuela
* West Bank
* Yemen
* Zimbabwe


# Treasury Management Overview

Squads is an enterprise platform that provides a fully-integrated suite of tools to collectively manage digital assets, automate workflows and execute onchain transactions. With Squads, organizations streamline their onchain operations while maintaining institutional-grade security and self-custody.&#x20;

Explore how Squads can help manage your assets and optimize your onchain treasury management.

#### **Table of Contents:**

* [Understanding the Basics](#understanding-the-basics)
* [Using Squads for Your Treasury](#using-squads-for-your-treasury)
* [Treasury Operations using Squads](#treasury-operations-using-squadsx)
* [Security](#security)
* [Additional Resources](#additional-resources)

## Understanding the Basics

Squads offers a comprehensive solution for managing onchain treasuries powered by Solana’s performance, speed, and low transaction costs. Squads has many advantages over traditional offchain or centralized solutions:

* **Seamless user experience:** Squads offers a platform tailored to enterprise needs, integrating a wide range of operations into a single, intuitive interface.
* **Security:** Squads is built on top of [Squads Protocol](https://squads.so/protocol), Solana's smart account standard securing $10+ billion in value and trusted by Solana’s leading teams, applications, and institutions. Squads Protocol provides the infrastructure for secure self-custody and programmatic onchain asset management.&#x20;
* **Transparency:** Onchain transactions provide key stakeholders with enhanced visibility and tracking of a business's treasury activity. This transparency is achieved through an immutable history of multi-signature approvals for asset management, ensuring relevant data is accessible and presented in a clear, human-readable format.

Squads powers onchain operations for over 250 teams in the ecosystem, including Jupiter, Jito, Pyth, Kamino, Backpack, Helius, Drift, and Tensor. Every Squad is a programmable multisig wallet built on Squads Protocol’s smart account technology, which enables collective management of onchain funds, streamlining asset management and eliminating single points of failure.&#x20;

### Using Squads for Your Treasury

Squads provides an intuitive interface to easily manage your assets and perform treasury operations. These assets can be:&#x20;

* Funds raised from investors/the public;
* Fees generated by the protocol/project;
* Grants received;
* Liquidity mining rewards as a marketing expense;
* Investor funds and token vesting;
* And any onchain liquid assets, such as NFTs, held by the company.

#### Executing transactions

Teams can seamlessly execute transactions like expenses, token swaps, liquidity provision, grants and more using the Squads dashboard. This includes on and off-ramping assets to fiat using [Sphere](https://docs.squads.so/main/navigating-your-squad/in-app-integrations/sphere) and [Coinflow](https://docs.squads.so/main/navigating-your-squad/in-app-integrations/coinflow-off-ramp).

These operations are streamlined with:

* [Batch Transfers](https://docs.squads.so/main/navigating-your-squad/transactions#batch-actions): Approve, reject, or cancel multiple transactions with a single click using Batch Actions.
* [Spending limits](https://docs.squads.so/main/getting-started/settings-and-members#spending-limits): Allow Squad members to move predetermined amounts from the treasury without requiring full Squad approval.
* [Rent Reclaim](https://docs.squads.so/main/navigating-your-squad/transactions#rent-reclaim): Recover rent associated with onchain accounts created during Squads transactions.
* [Priority fees](https://docs.squads.so/main/navigating-your-squad/transactions#how-transactions-work-inside-squads): Set custom priority fees to ensure smooth transaction execution during high network activity.
* [Contacts](https://docs.squads.so/main/navigating-your-squad/treasury-assets#contacts):  Save addresses as contacts to streamline fund withdrawals.

For teams looking for advanced features and granular controls over their assets, the [Squads Business](/main/getting-started/pricing) plan equips them with additional powerful features such as:

* Permissions: Define custom roles and transaction approval criteria for each multisig member.
* Payments: “Recipients” feature to create, track, and manage recurring payments—eliminating manual entry and saving teams valuable time.&#x20;
* Sub-accounts: Create separate vaults to efficiently manage various treasury assets, including payroll, marketing expenses, and NFT holdings.
* Fee Relayer: Enable the multisig to cover network fees for members interacting with the Squad, providing a gasless experience from their perspective.

Learn more about our pricing plans [here](/main/getting-started/pricing).

#### Compliance

Squads users can use [Integral](https://integral.xyz/), a platform for real-time bookkeeping, accounting, tax compliance, and treasury management for businesses and individuals. To get started:

* Set up an account on Integral
* Copy and paste your Squad Vault address into the platform
* Get access to automated bookkeeping, data, real-time treasury insights, and policies to meet your compliance and accounting requirements

#### Staking

Staking is the easiest way to earn a yield on your SOL. Enterprises can stake their SOL from the Squads app using:

* [Squads Validator](https://squads.so/blog/update-introducing-squads-validator);
* liquid staking providers (fuseSOL, Jito, Marinade, SolBlaze, marginfi);
* specific Solana validator (powered by [Stakewiz](https://stakewiz.com/)).

Learn more about staking [here](https://docs.squads.so/main/navigating-your-squad/in-app-integrations/staking).

#### In-app Trading

Enterprises can [trade their onchain assets](/main/navigating-your-squad/trade) directly from within the Squads app using:

* [Limit Orders](/main/navigating-your-squad/trade/limit-orders): Automate trades at predetermined price points, executing only when market conditions meet agreed-upon criteria. This feature is ideal for users who don't require immediate asset trades and prefer to wait for optimal market conditions.
* [Spot Swaps](/main/navigating-your-squad/trade/swaps): Execute trades at current market prices. This option is ideal for teams requiring quick transactions. Note that these swaps are susceptible to failure due to price slippage and route expiration - issues amplified in multi-signature environments due to inherent delays between transaction initiation, approval, and execution.

Trades are powered by [Jupiter](https://jup.ag/) and seamlessly integrated into the Squads platform. This allows enterprises to trade directly from their Squads account without the need to withdraw company funds to individual wallets that could be exposed to different attack vectors and risks.

#### Treasury Operations using SquadsX

[SquadsX](https://squads.so/blog/squadsx-multisig-extension-wallet-solana) is a companion tool for Squads that enables teams to connect their Squads treasury to applications within the Solana ecosystem while maintaining smart account security.

Below are a few ways teams use SquadsX to earn yield, vest tokens, and manage their onchain treasury:

**Earning yield on stablecoins**

Squads users can earn fees & rewards on stablecoins by deploying liquidity into stablecoin pools. These strategies enable passive yield on your stable assets:

Users can connect their SquadsX extension with DEXs like:&#x20;

* [Orca](https://www.orca.so/) - The most dominant DEX on Solana, it has a variety of stablecoin pools for users to provide liquidity and earn yield.
* [Raydium](https://raydium.io/) - Another DEX with stablecoin liquidity pools where users can deploy their stables and earn yield.

Or, with lending/borrowing platforms like:

* [Save](https://save.finance/) (previously Solend) - One of the lending and borrowing protocols on Solana – it enables users to deposit USDC into their pools and earn yield.

**Token Vesting**&#x20;

A common operation for most onchain companies is the vesting, minting, distribution, and management of their native token. There are many operations associated with a project’s native token like vesting, airdrops, token locks, minting, and more.

Squads provides an [in-app token manager](https://docs.squads.so/main/navigating-your-squad/developers-assets/token-manager) and enables companies to access [Magna](https://www.magna.so/) and [Streamflow](https://streamflow.finance/) via SquadsX for all these token-related operations. This allows companies to plan and manage their token operations easily while maintaining the security of their Squads multisig.

**Yield Aggregators**

Yield aggregators are beneficial for users looking for platforms that automate yield optimization, saving time and potentially enhancing profits.

SquadsX enables users to connect their multsig with these yield aggregators like:

* [Lulo](https://lulo.fi/) - Aggregates the best rates for assets like USDC across five lending/borrowing platforms and automatically rebalances deposits to the protocol offering the highest APYs at any given time.
* [Meteora](https://app.meteora.ag/) - Features Dynamic Vaults that automatically rebalance between top lending protocols every minute.

Using SquadsX, users can also connect their multisig with [Sanctum](https://www.sanctum.so/) and deposit SOL liquidity into the Infinity pool. The INF token users get in exchange is a yield-bearing token whose yield is a combination of staking yields and trading fees earned from the Infinity Pool.

**Treasury Yields and Diversified Stables**

The current landscape of stablecoin offerings on Solana is evolving quickly, offering projects innovative use cases beyond simple "wrapped" USD. Projects looking to diversify their stables with more productive, non-volatile solutions can use SquadsX to access these innovative solutions.

* Maple offers U.S. treasury yield to Solana-based teams through USDC lending. Squads users can access [Maple’s Cash Management product](https://solana.maple.finance/#/earn/pool/7Vqn5fdwckZadYVoH312aErP8PqNGNUx8WDrvKAHYfMd) via SquadsX and earn yield from U.S. T-Bills.
* You can also have other alternate stables such as EUROe and USDY in your Squads multisig to diversify your stable assets while earning additional yield.

Note: While we have highlighted the most widely used tools in the Solana ecosystem today, please note that this does not imply an endorsement of their safety or quality.

### Security

Squads is trusted by over 250 teams in the ecosystem and secures over $10 billion in value. Squads Protocol v3 was the first multisig program on Solana made [immutable](https://x.com/SquadsProtocol/status/1628776620243963904) while Squads Protocol v4 has been made [immutable](https://x.com/SquadsProtocol/status/1859947607671607443), and undergone [two formal verifications](https://docs.squads.so/main/v/security/formal-verifications/squads-protocol-v4) and multiple audits from the industry's leading firms.

To learn more about our security measures, read our documentation [here](https://docs.squads.so/main/v/security).&#x20;

### Additional Resources

* [Squads Blog](https://squads.so/blog)
* [Squads v4 Github](https://github.com/Squads-Protocol/v4)
* [Squads Developer Docs](https://docs.squads.so/main/v/development)
* [The Squads App](https://app.squads.so/)
* [The Squads App (v3)](https://v3.squads.so/)

### Secure your treasury with Squads

If you are an enterprise looking for an easy-to-use and secure platform for secure, transparent, and efficient treasury management, create a Squad on [app.squads.so](https://app.squads.so/) and reach out to <garrett@sqds.io> to learn more.


# Pricing

Learn more about the Squads subscription plans.

Squads offers a three-tier model that makes the Squads App accessible for all teams building and transacting onchain. Our pricing aligns with our mission to accelerate the onchain economy and reflects our business model driven by scalable software and our conviction in crypto's exponential growth.&#x20;

### Plans

Here is our three-tier model:

{% tabs %}
{% tab title="Basic" %}

#### $0 per month

Enterprise-grade security for a one-time 0.1 SOL deployment fee.

* A secure smart account with unlimited members
* [﻿﻿Basic treasury management](/main/getting-started/treasury-management-overview)
* [﻿﻿Squads Trade](/main/navigating-your-squad/trade)
* ﻿﻿[Staking](/main/navigating-your-squad/stake)
* [﻿﻿Program management](/main/navigating-your-squad/developers-assets/programs)
* ﻿﻿[Batch actions](/main/navigating-your-squad/transactions/batch-actions)
* [﻿﻿Developer transaction builder](/main/navigating-your-squad/developers-assets/transaction-builder)
* ﻿﻿[Validator management](/main/navigating-your-squad/developers-assets/validators)
* [﻿﻿Ul privacy](/main/navigating-your-squad/settings/privacy)
  {% endtab %}

{% tab title="Pro" %}

#### $49 per month

Gain access to everything in Basics, plus features that help you accelerate your business and scale your onchain operations:

* [Permissions](/main/navigating-your-squad/members/permissions)
* [Payments](/main/navigating-your-squad/payments)
* [Sub-accounts](/main/navigating-your-squad/treasury/sub-accounts)
* [SquadsX browser extension](/main/navigating-your-squad/squadsx)
* [Fee relayer](/main/navigating-your-squad/members/fee-relayer)
* [Token Management](/main/navigating-your-squad/developers-assets/token-manager)

Users can access the Squads Pro plan and all its features for free for 30 days.
{% endtab %}

{% tab title="Enterprise" %}

#### Custom Pricing

Our Enterprise plan is a tailor-made offering for your business with custom implementations, dedicated support, and onboarding. Gain access to everything in Pro, plus:

* Unlimited smart accounts
* Assisted onboarding
* Premium 24/7 support
* Reporting and compliance integrations

Please reach out to <garrett@sqds.io> to learn more.
{% endtab %}
{% endtabs %}

{% hint style="warning" %}
If you have an active subscription based on our legacy subscription offering, we will extend your account access under the new Squads Pro plan terms based on the remaining time and amount you’ve paid. If you prefer a refund of the remaining time period or have any questions please reach out to <garrett@sqds.io> or message us on [Twitter](https://x.com/SquadsProtocol).
{% endhint %}

### **How to subscribe to the Squads Pro Plan**

1. Go to the "Subscriptions" page.
2. Choose the "Pro" plan option and select the preferred payment method. You get the first 30 days of Squads Pro for free.
3. When you subscribe, a [spending limit](/main/navigating-your-squad/settings/spending-limits) worth $49 in USDC is created, enabling us to pull this amount from your Squads vault at the start of each month.

{% hint style="warning" %}
If there’s insufficient USDC in your Squad on the first of the month, you’ll have 7 days to fund your account. After that, subscription features will no longer be accessible.
{% endhint %}


# Dashboard

Everything you need to know about your Squad, in one place.

The Dashboard helps you monitor all your assets and operations and perform quick actions like token swaps or transaction approvals.

### Breakdown of the Dashboard tab

#### Overview Section

This section provides a comprehensive overview of your Squad:

* **Squad Information**: View essential details such as your Squad's address, approval threshold, and member count.
* **Quick Actions**:
  * Send funds (to external wallets, between sub-accounts, or initiate [off-ramp](/main/getting-started/on-and-off-ramp))
  * Deposit assets
  * Swap tokens (powered by [Jupiter](/main/navigating-your-squad/trade))
* **Treasury Performance**: Track historical data on your Squad's asset performance.
* **Sub-accounts**: Get an overview of each sub-account, including stored SPL tokens and NFTs.

<figure><img src="/files/aQV4JJ0V0HtbIMmBbkLj" alt="" width="563"><figcaption><p>Overview section</p></figcaption></figure>

#### **Limit Orders**&#x20;

Monitor and manage your Squad's trading activities:

* View currently open limit orders;
* Access the history of all previous orders.

<figure><img src="/files/amZiSEpwmeFCGtwSiEyZ" alt=""><figcaption><p>Limit order section</p></figcaption></figure>

#### **Streams from Streamflow**

For users who have set up vesting plans on Streamflow: track ongoing and outgoing streams linked to your Squads multisig.

<figure><img src="/files/YzRhldb6NG9Fbiam50s6" alt="" width="563"><figcaption><p>Streams section</p></figcaption></figure>

#### **Active transactions**

Stay on top of your Squad's operations:

* View active and ready transactions
* Execute transactions directly from this section

#### **Inflows and Outflows**

Keep track of your Squad's financial movements with a detailed history of all deposits and withdrawals

<figure><img src="/files/fVL2neu8gTrvp1qSFH5E" alt="" width="563"><figcaption><p>Active transactions, inflows and outflows sections</p></figcaption></figure>

#### **Stake**

Manage your staked SOL:

* See the amount of SOL deposited and its current state (staked/unstaked)
* View a breakdown of liquid stake providers and validators used for staking

<figure><img src="/files/xmHKLbnDbOOHqzDJRzhz" alt="" width="563"><figcaption><p>Stake section</p></figcaption></figure>

#### **Managed assets**

Oversee all developer assets delegated to your Squad:

* Programs,
* Validators,
* Tokens,
* and NFT collections.

<figure><img src="/files/tN3nSciopOYpELvMzLWQ" alt="" width="563"><figcaption><p>Managed assets section</p></figcaption></figure>


# Transactions

How to initiate and execute various transaction types within your Squad.

{% embed url="<https://www.youtube.com/watch?v=_Jv1arm7Efk>" %}
How transactions work inside Squads
{% endembed %}

### How transactions work inside Squads

Transactions are a key element of the Squads platform. They are initiated whenever a Squad member performs an action requiring approval from other members.

#### Transaction States

Transactions can exist in one of three states:

1. **Active**: Pending signatures from other Squad members to reach the confirmation threshold.
2. **Ready**: Confirmation threshold met; the transaction is now executable.
3. **Canceled**: Transaction terminated by Squad members or due to changes in Squad parameters.

### **Transactions tab**

The "Transactions" tab provides a chronological display of all Squad transactions. It enables users to:

* Change [priority fees ](/main/navigating-your-squad/transactions/priority-fees)for transactions
* Use [batch actions](/main/navigating-your-squad/transactions/batch-actions) to execute transactions in bulk
* [Reclaim rent](/main/navigating-your-squad/transactions/rent-reclaim) for executed transactions
* [Approve/reject transactions](#how-to-approve-reject-transactions)
* [Execute/cancel transactions](#how-to-execute-cancel-transactions)

<figure><img src="/files/vTkJa6UfgzC5HJgV0m4I" alt=""><figcaption><p>Transactions tab</p></figcaption></figure>

### **How to approve/reject transactions**

Any action (e.g., member management, token transfers, program upgrades) initiates a transaction in the "Ready" state. It only executes once the Squad's confirmation threshold is met. The initiating member automatically confirms the transaction.

<figure><img src="/files/SIVyfwVV80OjIU5h2oBy" alt=""><figcaption><p>Active transaction. Expanded view</p></figcaption></figure>

Other members can approve or reject transactions by:

* Expanding the transaction in the list view
* Clicking "See details" for a comprehensive view

<figure><img src="/files/HHkSwRgXH2ysycPNnqbL" alt=""><figcaption><p>Detailed view</p></figcaption></figure>

### **How to execute/cancel transactions**

Once the confirmation threshold is met, a transaction in the "Ready" state can be executed or canceled based on the signatures of other Squad members.

* **Execution**: Once the confirmation threshold is met, any Squad member can execute the "Ready" transaction.
* **Cancellation**: Requires reaching the confirmation threshold for canceling the transaction.

<figure><img src="/files/15hQfuSud39yumQsOj6a" alt=""><figcaption><p>"Ready" transaction</p></figcaption></figure>

{% hint style="info" %}
Learn how to export your transactions as a CSV in our guide [here](broken://pages/GJz3IXqBMYqb2o2gDGYN).
{% endhint %}


# Priority fees

To ensure smooth transaction execution during high network activity:

* You can access "Advanced Settings" to set custom priority fees.
* Users can also check the network activity via the "Network Status" button in the top-right corner and adjust their Global Priority Fee.
* This can be set to:
  * Auto
  * Ultra
  * Custom

{% hint style="info" %}
This applies to all Squads transactions (Initiation, Approval, and Execution)
{% endhint %}

<figure><img src="/files/qV0lq8kl6hkPCciTYsQB" alt=""><figcaption><p>Global Priority Fee</p></figcaption></figure>


# Batch actions

To streamline operations, users can perform bulk approvals, rejections, or cancellations:

1. Click the "Batch Actions" dropdown button.
2. Select the desired transactions.
3. Choose to approve, reject, or cancel at once.

<figure><img src="/files/IcGpqMLiWbJ6MwPqZA6n" alt=""><figcaption><p>Batch Actions</p></figcaption></figure>


# Rent Reclaim

Solana charges rent when you execute a transaction with your multisig. This is because Squads creates onchain accounts to support the asynchronous multisig process during a transaction's life cycle. The rent charged is for storing this data onchain.

Once a Squads transaction is executed/canceled, these accounts are no longer needed. Rent Reclaim allows you to close these accounts and reclaim the associated rent. Once reclaimed, the transaction history will still be available and auditable via Solana’s ledger.

* **Eligibility**: Transactions in finalized states (Executed, Canceled, Rejected)
* **Process**: Close unnecessary accounts while maintaining transaction history onchain

### Enabling Rent Reclaim

1. Navigate to the Settings page of your Squads account
2. Enable Rent Reclaim (requires multisig threshold approval)

### Auto Rent Reclaim

* Optional feature to have in [Settings](/main/navigating-your-squad/settings) once it is enabled
* When turned on, it automatically reclaims rent upon transaction execution
* Manual reclaim is required for Cancelled or Rejected transactions

<figure><img src="/files/YUC4Ph9R0TEau8owaYKU" alt=""><figcaption><p>Auto rent reclaim settings</p></figcaption></figure>

### Reclaim Destination

All reclaimed rent will be sent to the Reclaim Destination address. This address is preset to your Squad Vault but can be updated on the Settings page (requires threshold approval).

### Reclaim Rent

You can reclaim rent per transaction in the Transactions tab for any transaction with a finalized status (Executed, Canceled, Rejected). Any member of the Squad can reclaim rent without requiring multisig approval.


# Members

Access granular control over the members of your Squad.

The "Members" tab allows Squad members to:

* View Squad members
* Initiate transactions to add or remove members
* Rename wallet addresses of members (locally saved, visible only to the person who modified the name)
* Navigate to members' Twitter profiles (if linked via [SNS](/main/navigating-your-squad/integrated-apps/sns))

{% hint style="info" %}
Read more about adding, removing and managing members [here](/main/navigating-your-squad/members/manage-members).
{% endhint %}

[Business and Enterprise plan](/main/getting-started/pricing) users can also:

* Set [permissions](/main/navigating-your-squad/members/permissions) for members
* Turn on the [Fee Relayer](/main/navigating-your-squad/members/fee-relayer)
* Add the [SquadsX browser extension](/main/navigating-your-squad/squadsx)

<figure><img src="/files/6nZp7C7p1yty8QUyxHHZ" alt=""><figcaption><p>Members Page</p></figcaption></figure>


# Manage Members

Add, remove and manage member settings.

### **Adding a Member:**

1. Click on the "Add member" button.
2. Insert the public key of the member.
3. Specify permissions for the member if you have a [**Squads Business** plan](/main/getting-started/pricing) (More about "Permissions" [here](broken://pages/xf50DWqN9Ge4aPZmi9HZ)).
4. You can optionally change the Squad threshold in the same transaction. If not, the threshold will remain the same with a new member added to the Squad.
5. Click the "Initiate transaction" button.

{% hint style="warning" %}
Reminder: Adding members or changing the confirmation threshold will cancel all "Active" and "Ready" transactions in a Squad. Complete these transactions before making changes to your Squad threshold to avoid issues.
{% endhint %}

<figure><img src="/files/TSFM9P3POFqSm8wxXIjn" alt=""><figcaption><p>Add member pop-up</p></figcaption></figure>

### **Removing a Member:**

1. Click on the "Bin" icon on the member's card.
2. Click "Initiate".
3. The member will be removed from the Squad upon execution of the transaction.

<figure><img src="/files/7pQ0OaRNVlQdQukxzsmF" alt=""><figcaption><p>Remove member pop-up</p></figcaption></figure>


# Permissions

Add granular control to your operations.

Permissions are crucial for ensuring the secure and collaborative management of assets within your Squad. By leveraging permissions, users can establish granular levels of access for Squad members, thereby limiting the possibility of wrongdoing within a Squad.

{% hint style="info" %}
Permissions are only accessible to users with a Squads Business or Enterprise plan. Learn more about our pricing and subscription plans [here](/main/getting-started/pricing).
{% endhint %}

**Members in Squads have 3 types of roles:**

* **Proposer** - only allows creating transactions in the Squad without allowing to vote or execute them
* **Voter** - only allows signing transactions in the Squad without allowing to create or execute them.
* **Executor** - only allows executing transactions in the Squad without allowing to create or sign transactions.

<figure><img src="/files/nLt5p1Y2pChz0oMT78Jw" alt=""><figcaption><p>Permissions</p></figcaption></figure>

When members are added to a Squad during deployment, they are granted all three permissions. Permissions can be reassigned for existing members after the Squad deployment, and can be assigned for newly added members when launching a transaction to add them.

{% hint style="warning" %}
Please note that you must always have a sufficient amount of members with “Voter” and “Executor” permissions to successfully reach the confirmation threshold set for your Squad and execute the created transactions.
{% endhint %}


# Fee Relayer

Learn how to use the Fee Relayer.

The Squads Fee Relayer lets teams use their Squad as a paymaster to cover the transaction fees of all member transactions linked to their Squad.

This feature is made possible by [Turnkey](https://www.turnkey.com/), a private key infrastructure that allows the generation and management of private keys across blockchains through APIs without compromising on security.

{% hint style="info" %}
The Fee Relayer is only accessible to users with a Squads Business or Enterprise plan. Learn more about our pricing and subscription plans [here](/main/getting-started/pricing).
{% endhint %}

**To enable the Fee Relayer** for a Squad:

1. Navigate to the Members page from the navigation tab on the left.
2. Toggle the "Fee relayer" button;
3. Your Squad will now pay the network fees for its members.

<figure><img src="/files/1eYHLpLgwIzN9WnuL0fR" alt=""><figcaption><p>Fee Relayer</p></figcaption></figure>

{% hint style="info" %}
You can deactivate the Fee Relayer at any point by switching off the toggle button either under the Settings or the Members page.&#x20;

Note that if your Business subscription expires or if the Fee Relayer is removed from the members, it will automatically be deactivated.
{% endhint %}

{% hint style="warning" %}
If there is no SOL left in the Squad or that the Fee Relayer balance falls below 0.03 SOL, a message will appear under the Fee Relayer tab asking you to manually top up the Fee Relayer.
{% endhint %}


# Treasury

Manage your treasury assets with Squads.

The Treasury page in Squads enables users to:

* See the cumulative balance of all accounts including the amount of assets (SPL and NFTs)&#x20;
* Check the number of validators with whom they staked their SOL holdings.
* [Create Sub-accounts](/main/navigating-your-squad/treasury/sub-accounts) (only for [Squads Business and Enterprise](/main/getting-started/pricing) users)
* [Manage assets — Initiate withdrawals, deposits, swaps, and off-ramps](/main/navigating-your-squad/treasury/manage-assets)
* [Add and manage contacts](/main/navigating-your-squad/treasury/contacts)
* [Browse NFTs stored in different accounts](/main/navigating-your-squad/treasury/manage-assets#nfts)
* [Check eligibility for airdrops](/main/navigating-your-squad/treasury/airdrop-checker)
* Navigate to specific accounts for detailed management

{% hint style="info" %}
The Treasury consists of “Accounts” that are separate vaults (sub-accounts) with unique addresses. Each one is a separate [PDA (Program Derived Address)](https://solanacookbook.com/core-concepts/pdas.html#facts). These separate vaults allow teams to organize their treasury assets efficiently
{% endhint %}

### **Supported assets**

Squads supports:

* Any SPL (Solana Program Library) tokens, including tokens under the Token2022 standard;
* NFTs, including pNFT and cNFT standards.

<figure><img src="/files/doumvWzGb0zOAa4tt10I" alt=""><figcaption><p>Treasury tab</p></figcaption></figure>


# Sub-accounts

Learn how to use sub-accounts in Squads.

Sub-accounts are separate vaults that users can create to better manage their treasury assets such as payroll, marketing expenses, NFT holdings, etc.&#x20;

Each sub-account has its own SPL address and inherits the multisig setup of its Squad.&#x20;

{% hint style="info" %}
Sub-accounts are only accessible to users with a Squads Business or Enterprise plan. Learn more about our pricing and subscription plans [here](/main/getting-started/pricing).
{% endhint %}

### **Inside a sub-account, users can:**

* Initiate deposits, withdrawals, and swaps
* Create contacts for quick access when withdrawing treasury assets
* Check SPL tokens and NFTs held, as well as their respective weight in the overall account balance
* Quickly stake their SOL holdings by clicking on the “Stake” button next to the SOL asset
* Check the inflows and outflows of the sub-account

<figure><img src="/files/Xwl1qp5P9BJvThbp8aj3" alt=""><figcaption><p>Sub-accounts</p></figcaption></figure>


# Manage assets

Initiate withdrawals, deposits, swaps, off-ramps, burn assets and manage NFTs.

### How to deposit assets into your Squads account

* Navigate to the "Treasury" tab and click "Deposit"
* Select the target account and asset type (SPL token or NFT)
* Click "Deposit" to complete the process

<figure><img src="/files/h6luZwIe615udHIkivRJ" alt=""><figcaption><p>Deposit pop-up</p></figcaption></figure>

### How to withdraw assets from your Squads account

Users can withdraw their assets from their Squads multisig to:

* Another wallet or a centralized exchange (CEX)
* Multiple wallets/Squads using Batch send
* An email, via [TipLink](/main/navigating-your-squad/integrated-apps/tiplink)
* Their US bank account, via Sphere or Coinflow

<figure><img src="/files/5AKmy7QryNbyHdI0cNky" alt=""><figcaption><p>Send pop-up</p></figcaption></figure>

#### Sending assets to another wallet

Here are the steps to sending funds from your Squads multisig to another wallet:

* Navigate to the "Treasury" tab, and click the "Send" button.
* Select the option to send to another wallet in the popup window.
* Enter the recipient address, token, and amount you want to send.

<figure><img src="/files/o9xy9GWdhbxbUlyJWmRG" alt=""><figcaption><p>Sending assets to another wallet</p></figcaption></figure>

* Once added, you can review and initiate your transaction. This additional safeguard enables users to double-check and verify recipient addresses and token amounts before finalizing the transaction, reducing the risk of errors.

<figure><img src="/files/wexqhCaRerPi4jc3wO4P" alt=""><figcaption><p>Review page</p></figcaption></figure>

* Funds will be transferred upon the execution of the transaction.

Always send a first small test amount when sending assets to centralized exchanges (CEXs). Some CEXs do not recognize transfers from Squads multisigs/PDAs. Learn more [here](https://docs.squads.so/main/frequently-asked-questions/sending-assets-to-from-centralized-exchange-cexs).&#x20;

{% hint style="info" %}
Sending a specific token to a wallet for the first time requires 0.003 SOL in your Squads account. This fee creates the token account (ATA) in the recipient's wallet. For instance, if you’re sending USDC to a wallet that has never received USDC before, you will have to incur this amount.
{% endhint %}

#### Batch Send

Batch Send allows users to send tokens to multiple recipients. Here are the steps to execute a batch send transaction:

* In the popup window, select the “Batch send” option.
* Enter the token you want to send. Users can only select one token per batch transaction to simplify the workflow.

<figure><img src="/files/zTGxFsDVt5avE3QiqDTa" alt=""><figcaption><p>Batch send</p></figcaption></figure>

Batch Send transactions can be executed in two ways:

* **Batch:** Users can manually enter recipient wallet addresses and the amount they want to send to each recipient.
* **Split:** This allows for the distribution of the selected amount in equal portions to multiple specified addresses through a single transaction.

<figure><img src="/files/rOf5N3McSsYKYH7921yl" alt=""><figcaption><p>Two options for Batch Send</p></figcaption></figure>

* Once the details have been entered, you can review the recipients and the amount each one is receiving. Initiate your transaction upon confirmation and assets will be transferred.

#### Email Send

You can also send assets by entering the recipient’s email address. This is powered by [TipLink](https://tiplink.io/). Learn more about our integration and how you can use email to send your assets [here](https://docs.squads.so/main/navigating-your-squad/in-app-integrations/tiplink).

{% hint style="info" %}
If you send assets to the wrong email address or the TipLink funds are not claimed, you can recover the associated tokens back to your vault.
{% endhint %}

#### Off-ramp

Users can off-ramp their onchain assets from their Squad directly to their bank accounts. This can be done using Sphere and Coinflow. Learn more about off-ramping assets [here](https://docs.squads.so/main/getting-started/on-and-off-ramp).

### How to receive assets into your Squads account

To receive funds from external parties like contractors, investors, and other Solana wallets :

* Click the copy-paste or QR code icon under the Squads profile section
* Share the Squads account address or QR code with the sender

<figure><img src="/files/84WkDd3IgS6KxFEJjftL" alt=""><figcaption><p>Receive screen</p></figcaption></figure>

### How to burn assets in your Squads

Squad members can burn tokens present in their treasury.

1. In the Account page in the Treasury section of your Squad, head over to the token you want to burn under the "Coins" tab.
2. Click the three dots to the right of the token and click the "Burn" button.

<figure><img src="/files/PFClIebytZ58JXc9xVD8" alt=""><figcaption><p>Tokens in the Coins tab</p></figcaption></figure>

3. Select the amount of tokens you want to burn, add a note (optionally), and initiate a transaction.
4. The tokens will be burned once the transaction is executed.

<figure><img src="/files/DaoNiIvMulDHUJr5CYa3" alt=""><figcaption><p>Burn Tokens</p></figcaption></figure>

### **NFTs**

Members can deposit up to 20 NFTs and batch-send hundreds of NFTs in a single transaction.

{% hint style="info" %}
Users can also toggle between list and icon view for NFT gallery display.&#x20;
{% endhint %}

<figure><img src="/files/G23oJsJGqBTLHVlvVfMt" alt=""><figcaption></figcaption></figure>


# Contacts

To streamline fund withdrawals, any Squad member can save addresses as contacts:

* Click the "Contacts" icon in the "Treasury" section of the "Account" view.
* Enter the contact's name and public key.
* Approve and sign the transaction in the wallet pop-up. The address will saved as a contact.
* To remove a contact, click the "Bin" icon and sign the transaction.

<figure><img src="/files/VEzSDhioWEYpbZ1fuluA" alt=""><figcaption><p>Contacts pop-up</p></figcaption></figure>


# Airdrop Checker

Users can use the Aidrop Checker to verify their Squads account's eligibility for current and future airdrops:

* Located below the coins list on the Treasury page
* Allows eligible users to claim airdrops directly through the Squads app

<figure><img src="/files/rLu5CYPwKdTEshiUYkvZ" alt=""><figcaption></figcaption></figure>


# Payments

Streamline your onchain payments

Squads Payments is the next step in streamlining onchain payments.

The first iteration of Squads Payments introduces a “Recipients” feature to create, track, and manage recurring payments—eliminating manual entry and saving teams valuable time. Users only need to input recipient details, amounts, and payout schedules once. The system generates reminders and pre-filled payments at scheduled intervals, reducing administrative overhead and manual errors.

The “Send” feature on the “Dashboard” tab remains ideal for one-time transfers, while the “Recipients” feature is optimized for recurring transactions like payroll

Squads Payments is available to all Squads App subscribers, including [Business and Enterprise plans](/main/getting-started/pricing).

{% hint style="info" %}
Accessing the Payments tab requires sign-in authentication for public and private Squads, ensuring that sensitive payment data stays private.
{% endhint %}

### How to create a recurring payment:

1. Head to the Payments tab, select “Add Recipient” and enter their details (name, address, email, position, tags).
2. Specify details about the payment schedule by entering:
   * Token and amount;
   * Date of first payment
   * End (specific date or after a particular number of payments)
   * Frequency (weekly, biweekly, or monthly on a specific date)

{% hint style="info" %}
The account you choose to make the payment from can be changed later.
{% endhint %}

3. Review the details and click “Add” to create the payment.

### Tracking Recurring Payments

Everything you need to manage your recurring payments is available in the Payments tab. A new recipient is added to the “Recipients” overview five days before the first recurring payment. Each Recipient entry can have one of three statuses related to the recurring payment:

* **Due:** the status updates to Due five days before payment is due.
* **Overdue:** the status updates from Due to Overdue if a transaction has not been initiated, approved, and executed for a scheduled payment.
* **Paid:** the status updates from Due or Overdue to Paid once the payment transaction has been initiated, approved, and executed.

Each recipient entry has all the important details like name, position, amount, periodicity, payment status, and tags for filtering with ease. Users can click on any Recipient entry to view more or edit that Recipient’s details and view the related payment history.

### Managing recurring payments

Initiate and approve payments by selecting recipients with a “Due” status from the “Recipients” overview. After initiation, the related transaction will appear in the “Transactions” tab for final approval and execution based on your Squad's threshold.

Use the “Skip” function to bypass specific payments while maintaining the Recipient's regular payment schedule, and view finalized payments (meaning the recurring payment period is over) in the “Archive” folder for future reference.

#### How to pay an invoice:

1. Select all the Recipients you want to pay in the Payments tab.

{% hint style="info" %}
You can only select recipients (up to 15 at once) who are paid from the same subaccount.
{% endhint %}

2. Click “Review” to continue and review the payments before executing.
3. Once reviewed, click the “Approve” button to initiate the transaction. After initiation, the transaction can be approved and executed from the Transactions tab once the minimum confirmation threshold is met.


# Trade

Create and manage Limit Orders and Swaps in the Squads app

{% embed url="<https://www.youtube.com/watch?v=-tTb6KSyoso>" %}
Using Squads Trade
{% endembed %}

## How do Squads users benefit from Squads Trade?

Squads Trade offers deeper liquidity, optimized prices, and a great trading experience for Squads users. Users can execute:

1. [Limit Orders ](/main/navigating-your-squad/trade/limit-orders)
2. [Spot Swaps](/main/navigating-your-squad/trade/swaps)

Squads Trade enables teams to trade tokens directly from their multisig—eliminating the need to withdraw funds to individual wallets, saving time and reducing operational risks. Squads Trade is currently powered by Jupiter, and more platforms will be integrated in the future.

<figure><img src="/files/szZPk3pRqzdxCRjtfg7a" alt=""><figcaption><p>Limit Orders vs Swaps</p></figcaption></figure>

## What is Intent-based trading?

Squads Trade is built with the conviction that intent-based trading will soon dominate onchain markets.

Intent-based trading transcends single-exchange market orders by expressing what traders want to achieve rather than how to achieve it. This includes orders that execute across multiple venues, markets, and time horizons.

This provides superior price execution allowing traders to set their desired entry points and let automation handle execution when conditions align. Squads Trade will use intent-based trading to offer deeper liquidity, optimized prices and a seamless trading experience.


# Limit Orders

Place trades that get automatically filled at specific prices without worrying about price execution or slippage.

Limit Orders ensure asset trades occur at predetermined prices. Unlike Swaps, they don't require immediate execution, offering flexibility in volatile markets. This feature is valuable for:

* Protecting assets from unfavorable price movements
* Managing large trades with reduced risk
* Executing complex trading strategies agreed upon by team members

Limit Orders eliminate surprises and failed executions, making them an ideal tool for enterprises managing substantial assets in dynamic market conditions.

## How to place Limit Orders directly from your Squads account:

The Squads trading dashboard enables seamless trading of assets via Limit Orders.

1. Go to the "Trading" section from the navigation bar on the left of the Squads app.
2. Select the “Limit Order” tab and choose the account from which you want to place the Limit Order.

<figure><img src="/files/hRWconzjYBP6mplGpVWY" alt=""><figcaption><p>"Limit Order" tab</p></figcaption></figure>

3. Select the pair you wish to trade (e.g. SOL for USDC) and the amount. Click the “Next” button.
4. Review your transaction by checking the tokens, amounts, limit price, and expiry. Click the “Initiate” button to launch the transaction.

Once the transaction reaches the confirmation threshold and is executed, the Limit Order will be open and filled as soon as the set price is reached.

You can view the price of the token-pair you are trading (e.g. SOL-USDC) on the right-hand side of the “Trading” page.

{% hint style="info" %}
A 0.25% fee is incurred for every Limit Order placed from the Squads app.
{% endhint %}

{% hint style="warning" %}
If you trade a token that hasn't been deposited into your Squads account before, you will require at least 0.003 SOL in your account. This amount covers the cost of creating an [ATA](https://spl.solana.com/associated-token-account) for the newly deposited token.
{% endhint %}

## How to manage open Limit Orders:

Once executed through your Squads account, your order appears in the "Open Position" section—providing a clear overview of all orders and their details. You can cancel unfilled orders at any time or expand any position to view detailed token charts.

<figure><img src="/files/KxWzFuVCEe7gjeZ44acQ" alt=""><figcaption><p>"Open Position" section</p></figcaption></figure>


# Swaps

Swaps are filled at the current market price and liquidity.

Spot Swaps enable Squads users to execute swaps in a multisig setup based on the current price and market liquidity.&#x20;

{% hint style="info" %}
Any transaction in a multisig is inherently delayed because it needs approval from other Squad members. This delay can result in price changes or expired routes, which can cause the swap to fail.
{% endhint %}

## How to Swap tokens:

1. Go to the "Trading" section from the navigation bar on the left of the Squads app.
2. Select the “Swap” tab and choose the account from which you want to swap assets.

<figure><img src="/files/nj9MMHTycYmd5jsW8cht" alt=""><figcaption><p>Spot Swaps</p></figcaption></figure>

3. Select the pair you wish to trade (e.g. SOL for USDC) and the amount.
4. Configure the slippage tolerance by selecting one of the predefined options or inputting it manually (capped at a maximum of 15%).

{% hint style="warning" %}
Trade prices constantly change. Slippage tolerance is designed to determine the minimum amount of the receivable tokens. If the price of the receivable asset deviates above the slippage tolerance percentage, the transaction will fail to execute. In this case, the user will need to initiate a new swap or wait until the exchange rate comes back to the indicated slippage tolerance range.
{% endhint %}

5. Check all the information related to your transaction, including:
   * **Rate:** This shows the exchange rate for the selected route.
   * **Slippage:** This shows the slippage tolerance percentage.
   * **Price impact:** This measures how much the size of the trade is affecting the price.
   * **Minimum received:** This is the minimum amount of tokens a user will receive upon transaction execution. It is based on the slippage tolerance.
   * **AMM fees:** This is paid to the AMM for routing the swap.

<figure><img src="/files/RTRgQzVRsJzr40KFmwPt" alt=""><figcaption><p>Swap Information</p></figcaption></figure>

6. Click the “Next” button. Review your transaction by checking the tokens, amounts, slippage, and rate. Click the “Initiate” button to launch the transaction.

The swap is completed once the transaction reaches the confirmation threshold and is executed.

{% hint style="info" %}
If you trade a token that hasn't been deposited into your Squads account before, you will require at least 0.003 SOL in your account. This amount covers the cost of creating an ATA for the newly deposited token.
{% endhint %}


# Stake

Staking is the best way to earn yield on your assets. Squads users can stake their SOL right from within the Squads app.

{% embed url="<https://www.youtube.com/watch?v=UVUyGZ8k0CM>" %}
How to Stake inside the Squads app
{% endembed %}

Users can stake their SOL with any Solana validator (powered by Stakewiz), various liquid staking providers (fuseSOL, Jito, Marinade, SolBlaze, marginfi), Marinade Native, and the Squads Validator:

1. [Staking with Squads](/main/navigating-your-squad/stake/staking-with-squads)
2. [Direct](/main/navigating-your-squad/stake/direct-staking)
3. [Liquid](/main/navigating-your-squad/stake/liquid-staking)
4. [Marinade Native](/main/navigating-your-squad/stake/marinade-native)


# Staking with Squads

Details on staking your SOL with the Squads Validator

Users can stake their SOL with the Squads Validator directly from the Squads app.

Stake your SOL with the Squads Validator in the "Staking" tab by following the steps provided in [Direct Staking](/main/navigating-your-squad/stake/direct-staking).

<figure><img src="/files/4MSSJ8UdEGdvYtR8cQn9" alt=""><figcaption><p>Squads Validator in the Staking Tab</p></figcaption></figure>


# Direct Staking

The details of our integration with Stakewiz.

## Overview

Users can stake their SOL holdings with Solana validators directly from their Squad.

<figure><img src="/files/4F4XhcUMqOG2UPYdo5BI" alt=""><figcaption><p>Validator Staking</p></figcaption></figure>

**To stake SOL:**

1. Navigate to the "Staking" tab and select "Validator" section.
2. Select the validator you wish to stake with and select the amount of SOL you want to stake. You can use a filter to rank the validators by the amount of SOL delegated to them, the estimated APY, or use the search field to find the specific validator.

{% hint style="info" %}
Staking happens in epochs that last approximately 3 days. If you stake during an ongoing epoch, you will start earning staking rewards after the start of the next epoch.
{% endhint %}

3. Once you have selected a validator to stake with, click on the "Stake" button and launch a transaction.
4. Your SOL will be staked upon the transaction execution. Once the new epoch starts, you will start earning rewards.
5. The "Staked" switcher in the "Validator" section allows you to check the staked SOL amount and ROI you are receiving.

**To unstake SOL:**

1. Navigate to the "Staking" tab and select the "Validator" section.
2. Click on the "Staked" switcher and then click on the validator from which you wish to unstake your SOL.

&#x20;3\. Click the "Unstake" button to launch a transaction.

{% hint style="info" %}
Your unstaked SOL will be available for withdrawal **only** after the end of the epoch.
{% endhint %}

4. Your SOL will start the deactivation period upon the transaction execution. The deactivation period finishes with the start of the new epoch.
5. Once the deactivation period finishes, you will be able to withdraw your SOL. Navigate to the "Staked" switcher in the "Validator" section, click on the validator from which you are withdrawing the stake, and launch a transaction to complete the withdrawal.
6. Your SOL will be returned to your vault upon transaction execution.&#x20;


# Liquid Staking

The liquid staking providers accessible from Squads.

<details>

<summary>fuseSOL</summary>

## Overview

Users can [swap](/main/navigating-your-squad/trade) their SOL from within the Squads app for fuseSOL, the industry's first smart wallet liquid staking token.

## What is fuseSOL

fuseSOL is [Fuse’s](https://fusewallet.com/) native LST that:

1. Accrues staking rewards
2. Provides instant liquidity
3. Abstracts Solana network fees in the Fuse app

Powered by [Sanctum](https://x.com/sanctumso), fuseSOL is the next generation of LSTs that abstracts away Solana network fees - a feature only possible today with fuseSOL and Fuse, Solana's first smart wallet.

## How to stake with fuseSOL

**To swap SOL for fuseSOL:**&#x20;

1. Go to either the "Treasury" or "Dashboard" Page and find the "Trade" icon.
2. Select either "[Instant Swap](/main/navigating-your-squad/trade/swaps)" or "[Limit Order](/main/navigating-your-squad/trade/limit-orders)" to proceed.
3. Choose the account from which you want to place the trade.
4. Select SOL and fuseSOL as the pair you want to trade and the amount.
5. Launch the transaction. Once the transaction reaches the confirmation threshold and is executed, the swap will be completed.

## How to unstake and withdraw SOL

**To swap fuseSOL for SOL:**

* Navigate to the "Treasury" tab and click on the "Swap" icon.
* Choose fuseSOL and the amount you want to swap to and initiate a transaction.

</details>

<details>

<summary>JitoSOL</summary>

## Overview

Users can deposit their SOL holdings into Jito stake pool, which lets them earn staking rewards with additional returns for MEV redistribution.

## What is JitoSOL

JitoSOL is the first MEV-powered liquid staking derivative on Solana. By exchanging your SOL for JitoSOL you maintain SOL's liquidity and earn yield from staking. That yield receives an additional boost thanks to MEV rewards redistribution.

## What is MEV&#x20;

**MEV (Maximum extractable value)** - describes profits that accrue to entities producing blocks on a blockchain based on their ability to include, exclude and change the order of transactions in a block.&#x20;

## How to stake with Jito Stake Pool

**To stake SOL:**&#x20;

1. Navigate to the "Staking" tab and select "Liquid" section.

&#x20; 2\. Click on the "Jito stake pool" block. &#x20;

&#x20; 3\. Select the amount of SOL you wish to delegate to the pool and click "Deposit" button.

*Please note that staking happens in epochs. Each epoch lasts approximately 3 days. If you stake during an ongoing epoch, you will start earning staking rewards after the start of the next epoch.*&#x20;

4. Your SOL will start the activating period upon the transaction execution and will appear in the vault as JitoSOL. Once the new epoch starts, you will start earning rewards.&#x20;

## How to unstake and withdraw SOL

**To unstake JitoSOL, you can either swap it or unstake through the Squads app:**

* Navigate to the "Treasury" tab, click on the "Swap" icon, choose JitoSOL and the amount you want to swap to, and initiate a transaction.
* Or: Click on the "Unstake" button on the "Jito stake pool" block, select the amount you want to unstake, and initiate a transaction.&#x20;

Your JitoSOL tokens will be successfully unstaked after the transaction is executed.

</details>

<details>

<summary>Marinade</summary>

## Overview

Users can deposit their SOL holdings into Marinade stake pool, which lets them earn staking rewards and receive mSOL token, which can be used to gain additional yield.

## What is mSOL

Marinade is a non-custodial liquid staking protocol built on the Solana blockchain. With Marinade users can stake their SOL holdings without locking them up. By staking with Marinade users receive mSOL which is issued 1:1 to their initial stake. mSOL then can be used to earn additional rewards through DeFI protocols, which can be accessed using the SquadsX extension.

## How to stake with Marinade Stake Pool

**To stake SOL:**&#x20;

1. Navigate to the "Staking" tab and select "Liquid" section.

&#x20; 2\. Click on the "Marinade stake pool" block.

&#x20; 3\. Select the amount of SOL you wish to delegate to the pool and click "Deposit" button.

*Please note that staking happens in epochs. Each epoch lasts approximately 3 days. If you stake during an ongoing epoch, you will start earning staking rewards after the start of the next epoch.*&#x20;

4. Your SOL will start the activating period upon the transaction execution (more on the transactions [here](/main/navigating-your-squad/transactions#how-transactions-work-inside-squads)) and will appear in the vault as the mSOL. Once the new epoch starts, you will start earning rewards.

## How to unstake from Marinade Stake Pool

**To unstake mSOL:**

1. Navigate to the "Treasury" tab, click on the "Swap" icon, choose mSOL and the token you want to swap to, and initiate a transaction.
2. Your mSOL will be successfully unstaked after the transaction is executed.

</details>

<details>

<summary>SolBlaze</summary>

## Overview

Users can deposit their SOL holdings into Solblaze stake pool, which lets them earn staking rewards and receive bSOL token, which can be used to gain additional yield.

## What is bSOL

Users can stake their SOL holdings without locking them up with SolBlaze's liquid staking. By staking with SolBlaze, users receive bSOL, which is issued 1:1 to their initial stake. bSOL can then be used to earn additional rewards through DeFi protocols, which can be accessed using the SquadsX extension.

## How to stake with SolBlaze Stake Pool

**To stake SOL:**&#x20;

1. Navigate to the "Staking" tab and select "Liquid" section.

&#x20; 2\. Click on the "SolBlaze stake pool" block.

&#x20; 3\. Select the amount of SOL you wish to delegate to the pool and click "Deposit" button.

*Please note that staking happens in epochs. Each epoch lasts approximately 3 days. If you stake during an ongoing epoch, you will start earning staking rewards after the start of the next epoch.*&#x20;

4. Your SOL will start the activating period upon the transaction execution (more on the transactions [here](/main/navigating-your-squad/transactions)) and will appear in the vault as the bSOL. Once the new epoch starts, you will start earning rewards.&#x20;

## How to unstake from SolBlaze Stake Pool

**To unstake bSOL, you can either swap it or unstake through the Squads app:**

* Navigate to the "Treasury" tab, click on the "Swap" icon, choose bSOL and the amount you want to swap to, and initiate a transaction.
* Or: Click on the "Unstake" button on the "SolBlaze stake pool" block, select the amount you want to unstake, and initiate a transaction.&#x20;

Your bSOL tokens will be successfully unstaked after the transaction is executed.

</details>

<details>

<summary>marginfi</summary>

## Overview

Users can deposit their SOL holdings into the marginfi stake pool, which lets them earn staking rewards and receive LST token, which can be used to gain additional yield.

## What is LST?

Users can stake their SOL holdings without locking them up with marginfi's liquid staking solution. By staking with marginfi, users receive LST, which is issued 1:1 to their initial stake. LST can then be used to earn additional rewards through DeFi protocols, which can be accessed using the SquadsX extension.

## How to stake with marginfi Stake Pool?

**To stake LST:**&#x20;

1. Navigate to the "Staking" tab and select "Liquid" section.

&#x20; 2\. Click on the "marginfi stake pool" block.

&#x20; 3\. Select the amount of SOL you wish to delegate to the pool and click "Deposit" button.

*Please note that staking happens in epochs. Each epoch lasts approximately 3 days. If you stake during an ongoing epoch, you will start earning staking rewards after the start of the next epoch.*&#x20;

4. Your SOL will start the activating period upon the transaction execution (more on the transactions [here](/main/navigating-your-squad/transactions)) and will appear in the vault as the LST. Once the new epoch starts, you will start earning rewards.&#x20;

## How to unstake from marginfi Stake Pool?&#x20;

**To unstake LST, you can either swap it or unstake through the Squads app:**

* Navigate to the "Treasury" tab, click on the "Swap" icon, choose LST and the amount you want to swap to, and initiate a transaction.
* Or: Click on the "Unstake" button on the "marginfi stake pool" block, select the amount you want to unstake, and initiate a transaction.&#x20;

Your LST will be successfully unstaked after the transaction is executed.

</details>

<figure><img src="/files/Wj8pGsBeHGjmZqol2Eis" alt=""><figcaption><p>Liquid Staking Tab</p></figcaption></figure>


# Marinade Native

Stake with 100+ validators through Marinade Native

Users can stake SOL with Marinade Native directly from the Squads app. The strategy automatically rebalances the stake across the 140 best-performing validators and has no smart contract exposure as users retain full custody of their SOL and stake accounts.&#x20;

**To stake SOL through Marinade Native:**

1. Navigate to the Treasury page.
2. Locate the "Stake" button and click on it.&#x20;
3. Insert the SOL amount you want to stake and click on "Stake" to initiate a transaction.
4. Your SOL will be staked upon the transaction execution. Once the new epoch starts, you will start earning rewards.

<div><figure><img src="/files/hAEb7DyLdxNfO4qPH3Fu" alt=""><figcaption><p>Locate the "Stake" button</p></figcaption></figure> <figure><img src="/files/YqUTEQq5vADakJvervXe" alt=""><figcaption><p>Stake SOL with Marinade Native</p></figcaption></figure></div>

**To unstake SOL:**

1. Navigate to the "Staking" tab and select the "Validator" section.
2. Click on the "Staked" switcher and then click on the Marinade Native block.
3. Click the "Unstake" button to initiate a transaction.

{% hint style="info" %}
Your unstaked SOL will be available for withdrawal **only** after the end of the epoch.
{% endhint %}

4. Your SOL will start the deactivation period upon the transaction execution. The deactivation period finishes with the start of the new epoch.
5. Once the deactivation period finishes, you will be able to withdraw your SOL. Navigate to the "Staked" switcher in the "Validator" section, click on the Marinade Native block, and launch a transaction to complete the withdrawal.
6. Your SOL will be returned to your vault upon transaction execution.&#x20;

<figure><img src="/files/qssszphsYOYLt3ksVkiv" alt=""><figcaption><p>Unstake your SOL from Marinade Native</p></figcaption></figure>


# Developers assets

Manage developer assets with multisig security.

This section is dedicated to teams and protocols that wish to manage their programs, native tokens, and validators with multisig.

Additionally, advanced users can create arbitrary instructions through the Transaction Builder, allowing them to perform actions with on-chain assets stored in or managed by their Squad, as well as to interact with protocols not natively integrated within Squads.

1. [Programs](/main/navigating-your-squad/developers-assets/programs)
2. [Validators](/main/navigating-your-squad/developers-assets/validators)
3. [Token Manager](/main/navigating-your-squad/developers-assets/token-manager) (available to all Squads App subscribers, including [Business and Enterprise plans](/main/getting-started/pricing))
4. [Transaction Builder](/main/navigating-your-squad/developers-assets/transaction-builder)


# Programs

How to create, upgrade, and change the authority of programs within your Squad.

Squads offers a seamless experience for managing programs. Users can collectively manage program upgrades with their team via multisig. This eliminates single points of failure and reduces the risk of unauthorized changes to the program(s).

**With Squads, users can:**

* Add programs to their Squad
* Upgrade programs
* Change the authority of programs

<figure><img src="/files/4jCKe8H9ugvSmsPnHUZ4" alt=""><figcaption><p>Programs tab</p></figcaption></figure>

### Create and add programs

{% hint style="info" %}
Users can delegate programs to manage and upgrade them directly from their Squad.
{% endhint %}

#### Create programs

1. Create and deploy a program using your CLI.

#### Add programs

1. Navigate to the "Programs" tab within your Squad's vault. Then click on "Add Program".
2. Enter the name and address of the program. Click "Next" and verify the transaction in the wallet pop-up.

<figure><img src="/files/Rid6CHS8IO8sKhgZbVkj" alt=""><figcaption><p>Add program pop-up</p></figcaption></figure>

3. Set the program’s upgrade authority to the address provided using one of the following options:

* Copy the Squad address and transfer the authority from the current authority holder
* Copy the code and run in your CLI tool that is an authority holder
* Use SAT (Safe Authority Transfer) to transfer the upgrade authority

<figure><img src="/files/mHGrcmgZXlCOrJ4VrIa0" alt=""><figcaption><p>Transfer program upgrade authority</p></figcaption></figure>

{% hint style="info" %}
For users who would want to perform the authority transfer in a safer way there is an option to make a Safe Authority Transfer (SAT). SAT creates a transaction in the Squad, which needs to be signed by both Squad's Vault PDA and the current authority holder.
{% endhint %}

**To perform a Safe Authority Transfer (SAT):**

1. Add your CLI tool to the Squad. Check the [**Settings and Members page**](/main/navigating-your-squad/settings#manage-members) for more information on adding members.
2. Click on the "Create SAT" button.
3. Run a transaction inside your Squad.
4. Once the transaction meets the confirmation threshold, execute it with your CLI tool that you added to your Squad.
5. Once the transaction is executed, your program authority will be transferred.

<figure><img src="/files/TpAnYYb9jMMX3faNdLNn" alt=""><figcaption><p>Safe Authority Transfer</p></figcaption></figure>

{% hint style="warning" %}
**NOTE:** If the current authority is managed by a DAO or wallet you may need to set the authority by other means using the provided upgrade authority.
{% endhint %}

### Upgrade a program&#x20;

{% hint style="info" %}
Once a program has been added to a Squad it can be upgraded straight from it with an easy-to-use interface.
{% endhint %}

<figure><img src="/files/1ZPTlFD2HodeukTrx9QF" alt=""><figcaption><p>Program upgrades</p></figcaption></figure>

**To upgrade a program:**

1. Deploy your upgrade to the buffer using the command below. (For Rust)

```
solana program write-buffer <PROGRAM_FILEPATH>
```

{% hint style="info" %}
For more information about writing intermediary buffer accounts refer to the link: <https://docs.solana.com/cli/deploy-a-program#using-an-intermediary-buffer-account>&#x20;
{% endhint %}

2. Click on the program from the list and then click on the "Add upgrade" button.
3. Insert the details of the upgrade: name, buffer, spill address, commit link and address for buffer refund, then click "Next" and approve the transaction in the wallet pop-up.

<figure><img src="/files/8px7GS3VQYC68ijkubwR" alt=""><figcaption><p>Add upgrade pop-up</p></figcaption></figure>

4. Set the authority of the buffer to the provided address by copying a code in your CLI. Then click “Verify authority”.

<figure><img src="/files/k6QhC72kgPSaqjsll1iH" alt=""><figcaption><p>Set upgrade buffer authority pop-up</p></figcaption></figure>

5. Click the "Upgrade" button. A transaction will be created, after it meets the confirmation threshold and gets executed, a program upgrade will be deployed.

### Withdraw program upgrade authority

{% hint style="info" %}
A program authority delegated to a Squad can be changed to any other address if needed at any point.
{% endhint %}

**To do this:**

1. Click on the program from the programs list.
2. Click on the "Change authority" button.
3. Insert a new program authority address and initiate a transaction.&#x20;
4. Program authority will be changed upon transaction execution.&#x20;

### Squads GitHub Action for Program Upgrades

With the Squads GitHub action, teams can automate program deployments directly from their Github CI/CD pipeline to a program upgrade proposal in their Squads multisig. It simplifies the process of building and deploying a program buffer account, as well as initializing an upgrade proposal.

After a program upgrade has been initialized, the members of the multisig can view the details about the upgrade in the Squads app. They can then verify that the on-chain buffer matches the program source code using [Ellipsis Labs's verifiable build](https://github.com/Ellipsis-Labs/solana-verifiable-build).

To set up the Squads GitHub action for your program upgrades, please refer to this guide: [github.com/Squads-Protocol/squads-v4-program-upgrade](https://github.com/Squads-Protocol/squads-v4-program-upgrade).


# Validators

How to manage validators within your Squad.

Users can manage validators directly from their Squad. The management of validators includes changing commissions, withdrawing rewards, and changing authorities.

### **Adding validators**

{% hint style="info" %}
Users can transfer their validator withdraw authority to a Squad.
{% endhint %}

<figure><img src="/files/xZBiE6z2O8bVAcQc1PPJ" alt=""><figcaption><p>Validators tab</p></figcaption></figure>

**To transfer validator withdraw authority to a Squad:**

1. Go to the "Validators" tab and click the "+ Add Validator" button.
2. Enter the name and validator ID, then click "Next".

<figure><img src="/files/J4SckngM6B3Fw06FTJrR" alt=""><figcaption><p>Add validator pop-up</p></figcaption></figure>

3. Set the validator withdraw authority and click "Verify Authority". There are three ways to transfer validator authority to a Squad:

* Copy the address of your Squad and transfer the authority to it
* Insert the path of the actual authority keypair (Absolute path), copy the code, and run it in the CLI tool
* Use SAT (Safe Authority Transfer)

<figure><img src="/files/4mSFP36s55zbmL80qE1H" alt=""><figcaption><p>Set withdraw authority pop-up</p></figcaption></figure>

{% hint style="info" %}
For users who would want to perform the authority transfer more safely, there is an option to make a Safe Authority Transfer (SAT). SAT creates a transaction in the Squad, which needs to be signed by both Squad's Vault PDA and the current authority holder.
{% endhint %}

**To perform a Safe Authority Transfer (SAT):**

1. Add your CLI wallet to the Squad. Check the [**Settings and Members**](/main/navigating-your-squad/settings#manage-members) page for more info on how to add members.
2. Click on the "Create SAT" button.
3. Launch a transaction inside your Squad.
4. Once the transaction meets the confirmation threshold, execute it with your CLI wallet, which you added to your Squad. More on transactions [**here.**](/main/navigating-your-squad/transactions#how-transactions-work-inside-squads)
5. After the transaction is executed, the withdraw authority will be transferred to your Squad.&#x20;

<figure><img src="/files/RCNjDdcLgxlavUJP4Pv4" alt=""><figcaption><p>Safe Authority Transfer (SAT) pop-up</p></figcaption></figure>

### **Managing validators**

<figure><img src="/files/yPC6XsOmL4Lkj1jOMEz0" alt=""><figcaption><p>Validator pop-up</p></figcaption></figure>

**Changing Commission:**

1. Go to the "Validators" tab and select the validator that you want to manage.
2. Click on the "Change commission" button.
3. Enter the new commission percentage and launch the transaction.
4. The validator's commission will be updated upon execution of the transaction.

**Withdrawing Rewards:**

1. Go to the "Validators" tab and select the validator from which you want to withdraw rewards.
2. Click on the "Withdraw Rewards" button.
3. Click on the "Withdraw" button to launch the transaction.
4. Upon execution, your rewards will appear in your Squad vault.

**Changing Authority:**

1. Go to the "Validators" tab and select the validator whose authority you want to change.
2. Click on the "Change Authority" button.
3. Enter the new address to which you want to pass the authority.
4. Click on the "Initiate a transaction" button and launch the transaction. The authority will be transferred to the newly assigned address upon execution of the transaction.

{% hint style="info" %}
Users can also use the Squads CLI tool to withdraw the validator withdraw authority from their Squad.
{% endhint %}


# Token Manager

Learn how to manage tokens inside your Squad.

Users can mint, burn and manage authorities of their tokens inside their Squad using the “Token manager”.

{% hint style="info" %}
The Token Manager is only accessible to users with a Squads Business or Enterprise plan. Learn more about our pricing and plans [here](/main/getting-started/pricing).
{% endhint %}

<figure><img src="/files/Li7fgmh6V2sN3pyfRvba" alt=""><figcaption><p>Token Manager</p></figcaption></figure>

## Creating a token from Squads

1. Navigate to the "Token Manager" page under the "Developers" section in the navigation tab. Click the "+ Add Token" button. Select the "Create Token" option inside the pop-up.
2. Select the SPL Token Standard or the New Token Extensions Program option.

<figure><img src="/files/LiyOXPumLaasVpVwacps" alt=""><figcaption><p>Token creation popup</p></figcaption></figure>

3. Fill in the required data within the pop-up window. The data includes:

* Token name and picture
* Token symbol
* Token description (optional)
* Token decimals

<figure><img src="/files/9qqjaWGYhZGTOT9dESmo" alt=""><figcaption><p>Create Token popup</p></figcaption></figure>

4. Click "Create" to generate a transaction on the Transactions page to be approved by the multisig threshold.&#x20;

{% hint style="warning" %}
To create a new token, you will need a minimum of 0.003 SOL in your Squad vault to cover the cost of creating [ATA](https://spl.solana.com/associated-token-account) for this token.
{% endhint %}

5. Your token will be created and appear inside the "Token Manager" tab upon transaction execution (more on transactions [here](/main/navigating-your-squad/transactions)).

## Minting tokens from Squads

1. In the Token Manager, click the "Actions" dropdown and click the "Mint" button under it.
2. Specify the amount of tokens you want to mint and launch the transaction.
3. After the transaction has been executed, your token will appear in your Squad vault.

<figure><img src="/files/fF6v0eQneY70wXdQJYc9" alt=""><figcaption><p>Mint Token popup</p></figcaption></figure>

## Updating your token's metadata

1. In the Token Manager, click the "Actions" dropdown and click the "Update Metadata" button under it.
2. Update the specific fields within the pop-up window. All fields that are not updated will remain unchanged. The updatable data fields include:
   1. Token name and picture
   2. Token symbol
   3. Token description (optional)
   4. Update authority (optional)
3. Click  "Update" to generate a transaction in the Transactions page to be approved by the multisig threshold.&#x20;

{% hint style="warning" %}
Creating and editing tokens with a Ledger is not possible because Solana message signing is not yet supported by Ledger
{% endhint %}

## Transferring the token authority to Squads

{% hint style="info" %}
Users can transfer the token authority to the Squad if they already have the existing token. They can also transfer the token authority which belongs to the Squad to the external wallet at any time.
{% endhint %}

**To transfer the authority of an existing token to your Squad:**

1. Navigate to the "Token Manager" page under the "Developers" section in the navigation tab. Click the "+ Add Token" button. Select the "Transfer token authority to your Squad" option.
2. Insert the current token authority address, copy and paste the code into your CLI tool. The CLI code should be run by the current authority. Then click “Change authority”.

**To transfer the mint authority from your Squad:**

1. In the Token Manager, click the "Transfer" dropdown and click the "Mint Authority" button under it.
2. Insert the new authority address and click "Initiate" to launch a transaction. The mint authority will be transferred upon transaction execution.

<figure><img src="/files/iLyASBydeRwJw4Sm8El3" alt=""><figcaption><p>Change Mint Authority</p></figcaption></figure>

## Freezing account from your Squad

{% hint style="info" %}
Users can freeze accounts using Squads Token Manager. Freezing an account allows you to halt all transfers of a token on a specific address.

**Please note** that to do this the "Freeze authority" of your token needs to be set to your Squad.
{% endhint %}

**How to freeze account:**

1. Create or delegate a token and set its freeze authority to your Squad.
2. In the Token Manager, click the "Actions" dropdown and click the "Freeze Account" button under it.
3. Enter the account address and initiate a transaction within your Squad.
4. The token account will remain frozen until you unfreeze it. To unfreeze the account, select "Unfreeze account" from the "Actions" button.

<figure><img src="/files/zaPWTgln5OwTid1X6lg1" alt=""><figcaption><p>Freeze Account</p></figcaption></figure>

## Transferring the freeze authority of a token

{% hint style="info" %}
User can transfer freeze authority of a token to a different address using Squads Token Manager.
{% endhint %}

**How to transfer freeze authority of a token:**

1. In the Token Manager, click the "Transfer" dropdown and click the "Freeze Authority" button under it.
2. Insert the address to which the freeze authority will be transferred and initiate the transaction.
3. The freeze authority will be transferred to the new address once the transaction is executed.

<figure><img src="/files/SbYlV88CNldoHk0Qm9t8" alt=""><figcaption><p>Transfer Freeze Authority</p></figcaption></figure>

## Burning the freeze authority of a token

Users can use the Squads Token Manager to burn the freeze authority of a token.

{% hint style="info" %}
Please note that to do this the "Freeze authority" of your token needs to be set to your Squad.
{% endhint %}

1. In the Token Manager, click the "Burn" dropdown and click the "Freeze Authority" button under it.
2. Add a note (optionally) and initiate a transaction.
3. The freeze authority will be burned once the transaction is executed, making your token immutable.

<figure><img src="/files/IemiLqVOHMD8yoChSBqx" alt=""><figcaption><p>Burn Freeze Authority</p></figcaption></figure>

## Burning Tokens from Squads

Members can burn tokens in the Squad in the Treasury section.

{% hint style="info" %}
Learn how to burn tokens in your treasury in our guide [here](/main/navigating-your-squad/treasury/manage-assets#burning-tokens).
{% endhint %}


# Transaction Builder

Learn how to use arbitrary instructions within Squads using Transaction Builder.

Users can create custom transactions and populate them with arbitrary instructions using the Transaction Builder. This allows them to interact directly with any programs on Solana from a Squad.

<figure><img src="/files/45C8AUPjxHC17KwA22O7" alt=""><figcaption><p>TX Builder tab</p></figcaption></figure>

### **How to create a custom transaction draft**

**To create a custom transaction draft:**

1. Go to the "TX Builder" tab and click the "Create transaction" button. If you already know the type of transaction you want to create, click on one of the templates.
2. Choose the type of transaction you would like to create:

   * Anchor programs (with IDL)
   * Solana programs (written in Rust)
   * Import a base58 encoded transaction
   * Validators (using predefined templates)
   * Switchboard program

<figure><img src="/files/HZ34oPbQzl2as2prrXWP" alt=""><figcaption><p>Select transaction type</p></figcaption></figure>

{% hint style="info" %}
All custom transactions are initially saved as drafts and need to be populated with instructions data before launching. You can save your custom transaction after initiation for future reuse.
{% endhint %}

<figure><img src="/files/GofhN3HRIOR6lowrraRM" alt=""><figcaption><p>Transaction draft</p></figcaption></figure>

3. Once you've selected the type, you'll be taken to the draft screen where you can add instructions to the transaction.

<figure><img src="/files/OGWlbcPvRDUwVaBY9ubG" alt=""><figcaption><p>Populated transaction draft</p></figcaption></figure>

### How to populate custom transaction drafts with instructions

**To populate a custom transaction draft for programs written in Anchor:**

1. To add a custom instruction, click on the draft and select "Add instruction" from the dropdown menu.
2. Choose the "Custom instruction" option and enter the program address. Click "Next".

<figure><img src="/files/Kbib8XOf7SnGd6AZnciT" alt=""><figcaption><p>Anchor transaction</p></figcaption></figure>

3. Select the desired instruction from the list and click "Add instruction".
4. Fill out the required information in the Accounts section and click "Save draft". If necessary, you can add additional instructions to the draft to run multiple custom instructions in one transaction. You can also provide a name and description for the transaction.

{% hint style="info" %}
After you populate the draft with arbitrary instructions you can run a simulation to check if your transaction is assembled correctly.
{% endhint %}

5. After you populate the transaction with instructions and run a simulation to verify that everything is correct, launch a transaction inside your Squad by clicking on "Initiate Transaction". The custom transaction with arbitrary instructions will be launched upon transaction execution.

#### **To populate a custom transaction draft for programs written in Rust**

1. To add a custom instruction, click on the draft and then click "Add instruction". Select the "Custom instruction" option.

<figure><img src="/files/F2U6ICeSTbUl1tnkNLAo" alt=""><figcaption><p>Rust transaction</p></figcaption></figure>

2. Insert the program address, and then click "Add instruction".
3. Enter the account information and select the desired data options (Buffer or Raw). Finally, click "Save draft". You can add another instruction inside the draft to run two custom instructions in one transaction.

{% hint style="info" %}
After populating the draft with arbitrary instructions, you can run a simulation to check if your transaction is assembled correctly.
{% endhint %}

4. Once you have populated the transaction with instructions and run a simulation to verify that everything is correct, launch the transaction inside your Squad by clicking on "Initiate Transaction". The custom transaction with arbitrary instructions will be launched upon transaction execution.

#### **To populate the draft with instructions from base58 encoded transactions**

1. To add an instruction, click on the draft and select "Add instruction". Then, choose the "Import base58 encoded tx" option.
2. Insert the base58 encoded transaction and click "Next". Review the data and click "Add instruction".

<figure><img src="/files/muTqCpr9Ndu5Rui72Qyx" alt=""><figcaption><p>Base 58 transaction</p></figcaption></figure>

3. Once you have verified the data and run a simulation to ensure its correctness, initiate a transaction within your Squad by clicking on "Initiate Transaction". This will launch a custom transaction with arbitrary instructions upon execution.

#### **To interact with the validators and stake pools using predefined templates**

1. Click on "Add instruction".
2. Select the template you want to use from the list: Stake program, Vote program, Stake Pool program, or Switchboard program.

{% hint style="info" %}
**The Stake Program template** allows you to interact with validators to deactivate and withdraw staked SOL.

**The Vote Program template** enables you to change the withdraw authority, withdraw stake rewards, and change the commission of the validator.

**The Stake Pool Program template** lets you set the manager, fees, and funding authority of the stake pool.

**Switchboard Program template** allows you to interact with, create, and manage feeds from a multisig in Switchboard.
{% endhint %}

3. Populate any of the templates with the required data and launch a transaction. Once the transaction meets confirmation threshold and is executed, the interaction with the program will be made.


# Settings

Learn how to manage the settings of your Squad and its members.

{% embed url="<https://www.youtube.com/watch?v=Q-dVQ-3Yp-c>" %}
Squad Settings
{% endembed %}

The "Settings" tab displays information about the Squad and allows you to:

* View the Squad's vault address and multisig address
* Edit the photo, name, and description of the Squad
* Check the confirmation threshold and initiate a transaction to change it
* Select the default explorer for the Squad's transactions
* Add [Spending Limits](/main/navigating-your-squad/settings/spending-limits)
* Set a [Time Lock](/main/navigating-your-squad/settings/time-locks)
* Enable/Disable [Squad UI Privacy](/main/navigating-your-squad/settings/privacy)
* [Export CSV ](broken://pages/GJz3IXqBMYqb2o2gDGYN)of your transactions

<figure><img src="/files/qm3xGZX0V9J56os7X0ch" alt=""><figcaption><p>Settings page</p></figcaption></figure>

### Vault and Multisig Address

When creating a Squad, a Program Derived Address (PDA) is created with specific details such as members, threshold, and more. This PDA's address is the **multisig account address**, owned by the Squad program and used exclusively for Squad detection.

**The Squad Vault** and Sub-accounts are PDAs derived from the multisig account address. Unlike the Squad's PDA, they aren't owned by the program, allowing them to function as classic wallets for sending and receiving funds.

{% hint style="warning" %}
**DO NOT** set the Multisig Account address as an authority of your programs nor send any kind of assets to it.

**ONLY** the Squad Vault address should be set as the owner of your assets/authorities. The Multisig Account address is used solely for CLI settings commands.&#x20;

Sending assets or setting authority to the Multisig Account address will cause irreversible loss of funds/assets.
{% endhint %}

### **Threshold Parameter**

The confirmation threshold is crucial for securing assets within a Squad. It represents the number of Squad members required to confirm before executing a transaction.

When configuring the confirmation threshold for a Squad:

* Avoid setting it at 1/n signatures, as this creates a single point of failure.
* Avoid setting it at maximum capacity (e.g., 2/2, 3/3) to prevent potential loss of access.

To adjust the confirmation threshold:

1. Navigate to the "Settings" tab.
2. Click on the threshold icon, set the new threshold, and launch a transaction.
3. The threshold will change upon transaction execution.

Only members with "Voter" permission count towards the threshold parameter.

{% hint style="warning" %}
Changing the confirmation threshold will cancel all "Active" and "Ready" transactions in a Squad for security reasons. Complete these transactions before changing the threshold to avoid issues.
{% endhint %}

<figure><img src="/files/m8KtOwLrZqWICryzHDIf" alt=""><figcaption><p>Change threshold pop-up</p></figcaption></figure>


# Spending Limits

Spending limits allow Squad members to move a certain amount of assets from the treasury without requiring full Squad approval.

**To add a Spending Limit:**

1. Navigate to the "Settings" tab.
2. Click the "Add Spending Limit" button.
3. Specify the parameters and click the "Initiate" button.

**Spending limit parameters include:**

1. **Account:** The account from which a member will be able to withdraw funds.
2. **Token and max amount:** Specify the token and its maximum withdrawal amount. Currently, a member can set only one token per spending limit.
3. **Time frame:** The period during which the spending limit is active. The amount available for withdrawal will be reset at the beginning of a new time frame period. If a member sets "None," the spending limit will be active until the full token amount is withdrawn.
4. **Destination:** Wallet addresses for fund withdrawals (multiple can be added).

After setting a spending limit, it can be viewed on the member's card or in the "Settings" tab for editing.

{% hint style="info" %}
Make sure you regularly monitor active spending limits to ensure they align with your operations. Reserve them for trusted members and update them frequently to reflect organizational changes or if a member leaves the project.
{% endhint %}

<figure><img src="/files/z4dgFvBvFLXTeN7Rsbdh" alt=""><figcaption><p>Spending limits settings</p></figcaption></figure>


# Coin List Filter

Hide Spam, Regain Control

With unsolicited airdrops becoming more common, managing your onchain assets can feel like sorting through spam. To help, we’re introducing the Coin list filter, making it easier than ever to keep your treasury organized.

The Coin list filter puts you back in control, letting you automatically hide new coins and manually curate which coins appear in your treasury view.

### Set Automatic Filtering

Enable the Coin list filter to automatically hide any new coins received from other wallets.

1. Go to “Settings” on the left-hand menu.
2. Switch to the “Other” tab, where you’ll find various Squads settings, including Rent reclaim, Fee Relayer, and the new Coin list filter.
3. Choose your default visibility:
   1. “Hide by default”: Automatically move all new incoming coins to a hidden assets list.
   2. “Show by default”: Display all new incoming coins in your treasury.

### Manually Hiding & Unhiding Coins

You also have full control to manually hide or unhide specific coins at any time.

#### Hide a coin

1. Go to “Treasury” in the left-hand menu.
2. Select the account where the coin is located.
3. Find the coin, click the three-dot button, and select “Hide”.
4. The coin will move to a “Hidden Assets” collapsible below all your other assets. From now onwards, the coin will not appear in your treasury when it is incoming; it will also not appear on your balance—preventing it from distorting your overall asset value.

#### Unhide a coin

1. Navigate to the “Hidden Assets” collapsible.
2. Locate the coin and click “Show Asset” to make it visible again. From now onwards, the coin will appear in your treasury when it is incoming; it will also appear on your overall asset balance.

### Important Note

The Coin list filter only affects your Squads interface—your onchain accounts will still receive token airdrops.


# Privacy

The Privacy mode allows teams to make their Squad visible only to its members. This means that even with the link to a Squad, non-members cannot view its details.

If activated, the only way for someone to view the details of a Squad is to be a member and sign a message to verify their wallet.&#x20;

{% hint style="info" %}
To ensure that members don't have to re-sign frequently, a session token is stored in the user's browser for 24 hours. If a member switches to another device, they must sign the message again to store a new session token on this second device.
{% endhint %}

To activate the Privacy mode for a Squad:

1. Navigate to the Settings page;
2. Toggle the "Privacy" button;
3. Your Squad will now be viewable only by its members.

{% hint style="warning" %}
Your on-chain activity will still be visible on explorers. The privacy mode only prevents unauthorized viewing of a Squad's assets through the UI.&#x20;

This feature will turn off automatically if the subscription has expired.
{% endhint %}

<figure><img src="/files/jUVzv9JcuZnWdp0PYWVp" alt=""><figcaption><p>Privacy settings</p></figcaption></figure>


# Time Locks

Time locks allow Squad members to defer the execution of approved transactions for a set period of time.

* Time locks apply globally to all Squad transactions once set.
* "Active" transactions and "Ready" transactions for changing Squad settings initiated before the time lock will change to a "Canceled" state upon activation.
* Available periods: 1 hour, 1 day, 1 week, Custom (in seconds), None (disables the time lock).

To create a time lock:

1. Navigate to the "Settings" tab.
2. Select the desired time lock period and initiate a transaction.
3. The time lock activates upon transaction execution.

{% hint style="info" %}
Choose a time lock duration that balances security with accessibility of funds. Avoid excessively long periods (e.g. 1 month) if regular asset management is expected.
{% endhint %}


# Integrated apps

Access the best products on Solana directly from your Squad.

1. [Sending assets & creating an account with email](/main/navigating-your-squad/integrated-apps/tiplink) - Powered by TipLink
2. [Transaction Risk Scanner](/main/navigating-your-squad/integrated-apps/range) - Powered by Blowfish
3. [.sol domains](/main/navigating-your-squad/integrated-apps/sns) - Powered by Bonfida
4. [Adding Safe wallet](/main/navigating-your-squad/integrated-apps/safe) - In Partnership with Safe


# TipLink

Learn how to send assets to email addresses

## What is TipLink?

TipLink enables users to send digital assets to anyone via a link or QR code. To receive these digital assets, recipients simply have to click on the link or scan the QR code — regardless of whether they have a crypto wallet or not. By abstracting the complexity of blockchains, TipLink aims to drive broader adoption of crypto, bridging the gap between tech-savvy users and the general public.

## How do Squads users benefit from this integration?&#x20;

By integrating TipLink, you can now create and use a Squads account with your email. Also, TipLink enables you to send tokens — such as SOL, USDC, and more — simply by entering the email address of the recipient. This feature is particularly useful to enterprises using Squads for paying contractors and service providers who do not have a crypto wallet.

<figure><img src="/files/ffxylvnJa7djjWA5TdEe" alt=""><figcaption></figcaption></figure>

By avoiding wallet addresses — which come as long, complex strings of alphanumeric characters, and are prone to errors when copied or typed manually — the overall transaction experience can also be made more intuitive and user-friendly.

Apart from that, wallet addresses can also expose users to phishing attacks, where malicious actors trick them into sending funds to fraudulent addresses that look similar to legitimate ones. With our TipLink integration, however, we're able to prevent this right from the outset.

<figure><img src="/files/20EITrL2D6twYJsLXwxk" alt=""><figcaption></figcaption></figure>

TipLinks that are sent through Squads can only be accessed through the email account of the intended recipient. And if a TipLink has been sent to the wrong email address or the TipLink funds are not being claimed, Squads users can recover the associated tokens back to their vault.

## How to send cryptos to an email address?

Sending crypto to an email address via TipLink is simple. Simply enter the email address of the recipient instead of the wallet address.

{% hint style="info" %}
NFTs and Token Extensions (Token-2022) are not supported yet.
{% endhint %}


# Range

Greater transparency for your Squads transactions

## What is Range?

Range is a security platform designed to protect you from scams, hacks, and unintended mistakes that could compromise the integrity of your Squads account.

We chose Range for its accuracy, speed, and proven track record with leading organizations such as the Solana Foundation, Etherfuse, Agant, and Perena.

## How do Squads users benefit from this integration?

By integrating Range's simulation API, we can provide clearer explanations of how transactions will impact your Squad and flag potentially risky or malicious transactions in real-time—before they are signed.

In this context, Range is particularly helpful for non-technical users who e.g. might be tricked by a custom instruction granting access to funds or changing the authority of a program.


# SNS

Learn how to send SOL to .sol domains

## What is SNS?

[SNS](https://www.sns.id/) is a protocol on Solana that created the "Solana Naming Service". With SNS, you can create a .sol domain name that links to your wallet address. SNS domains can be used as a replacement to classic SPL addresses for receiving crypto transfers on Solana.

## How do Squads users benefit from this integration?&#x20;

By abstracting away wallet addresses, everyday crypto activities such as sending & receiving crypto and accounting for on-chain transactions become a much easier process. Instead of needing to remember a long string of random letters and numbers, Squads Protocol users can simply enter .sol domains, simplifying the entire process.

## How to send cryptos to .sol domains?

{% hint style="info" %}
Sending crypto to .sol domains via SNS is simple. Simply enter the .sol domain instead of the wallet address.
{% endhint %}


# Safe

Learn how to add your Safe wallet in Squads

## What is Safe?

[Safe](https://safe.global/) is an EVM-based onchain asset custody protocol. Launched in 2018, Safe has established itself as the EVM smart account standard today - securing over $100 billion in value across 8+ million smart accounts. Aligned with the vision of Squads, they are also pursuing a future where everyone has complete control and flexibility over their digital assets.

## How do Squads users benefit from this integration?&#x20;

Thanks to our partnership with Safe, you can now add any Safe wallet as a view-only account in Squads. Teams with assets on the EVM can now view their entire treasury across multiple chains in a single interface.

## How to add your Safe wallet to your Squad?

1. Navigate to the "Treasury" tab, and click the "Add Safe Account" button below your Account in the Navigation bar.

<figure><img src="/files/hmxOF3dSJph1a5k4oPAH" alt=""><figcaption><p>Treasury tab</p></figcaption></figure>

2. Fill in the required data within the pop-up window. The data includes:
   1. Name of the Safe wallet (optional)
   2. Safe's address
3. Click the "Add" button.

<figure><img src="/files/AJQzR5bvuVLru7pGom0y" alt=""><figcaption><p>Add Safe Multisig pop-up</p></figcaption></figure>

4. Your Safe wallet will be added to the Treasury tab as a view-only account.

<figure><img src="/files/zE4e4olca6KSSIoKQ9GJ" alt=""><figcaption><p>Safe wallet as a view-only account</p></figcaption></figure>


# SquadsX

Learn more about the SquadsX browser extension.

The Squads browser extension, SquadsX, is one of the products available to all Squads App subscribers, including [Business and Enterprise plans](/main/getting-started/pricing).

SquadsX is used to connect your Squad to Solana apps. Learn how to get started with the extension and explore what possibilities it opens:

1. [Get Started](/main/navigating-your-squad/squadsx/start-using-squadsx)
2. [Compatible Apps and Use Cases](/main/navigating-your-squad/squadsx/compatible-apps)

{% hint style="warning" %}
SquadsX is still in beta, bugs or compatibility issues may occur.
{% endhint %}


# Start using SquadsX

Learn how to use the SquadsX extension.

### What is SquadsX

SquadsX is a companion tool that enables users to interact with the Solana ecosystem from the security of their multisig. By using this web extension wallet, users can connect to apps and protocols on Solana that are not directly integrated into the Squads platform.

{% hint style="info" %}
For app developers oriented information (such as integration) on the SquadsX extension, check out the technical docs [here](https://docs.squads.so/main/squadsx-beta-development/).
{% endhint %}

### How to start using the extension

1. Subscribe to the [Squads Business Plan](/main/getting-started/pricing).
2. Head to the Members page from the navigation tab on the left.
3. Click the "Add SquadsX" button.

<figure><img src="/files/agfhDlqYhS9l40rqzQ0L" alt=""><figcaption><p>Add SquadsX</p></figcaption></figure>

4. Click the "Generate new key" button.

<figure><img src="/files/h7uPUKtV5KCpCFexMUzW" alt=""><figcaption></figcaption></figure>

5. Click the "Download SquadsX" button to download the SquadsX extension from the [Chrome web store](https://chromewebstore.google.com/detail/squadsx/jhmfofkpljgmilikdmkglcmekjnlekda).

<figure><img src="/files/ufQB5SuoXO30JFb3RaQs" alt=""><figcaption><p>Download SquadsX</p></figcaption></figure>

6. Click the "Generate Code" button to generate your personal access code for the SquadsX extension. Copy this code and continue in the extension.
7. Launch the extension and enter the access code you generated.
8. Set a password that you will use to unlock the extension.
9. Add the SquadsX public key freshly created to your Squad to initiate transactions.

<figure><img src="/files/VBV4OLh8eKb9wL5P1qLt" alt=""><figcaption><p>Add your SquadsX key</p></figcaption></figure>

{% hint style="info" %}
Squads automatically create a key for you that will be used to create transactions inside your Squad. The SquadsX public key will by default only have the "Proposer" [permission](/main/navigating-your-squad/members/permissions) — it will only be able to create transactions inside your Squad without the ability to approve nor execute them.&#x20;
{% endhint %}

7. Once added to your Squad, you will be able to see your Squad in SquadsX and connect it to apps in the Solana ecosystem. Check all the apps compatible with SquadsX [here](/main/navigating-your-squad/squadsx/compatible-apps).

{% hint style="warning" %}
If the [Fee Relayer](/main/navigating-your-squad/members/fee-relayer) is enabled for your Squad, all the SquadsX transaction fees will be paid with the SOL in your vault, up to the spending limit set.

If the [Fee Relayer ](/main/navigating-your-squad/members/fee-relayer)is turned off, the SquadsX public key will have to be top up to initiate transactions.
{% endhint %}

<figure><img src="/files/uhxVXpAIZgQ7iRlLXTds" alt=""><figcaption><p>Squads in the SquadsX extension</p></figcaption></figure>

### How to use SquadsX for interacting with Solana dApps

1. Navigate to the dApp you wish to interact with. See the list of apps compatible with SquadsX [here](/main/navigating-your-squad/squadsx/compatible-apps).&#x20;
2. Click "Connect Wallet" and select SquadsX.
3. After initiating an action in the app, sign the transaction in the SquadsX pop-up just as you normally would with any other wallet.
4. The transaction will now be added to your Squad under the Transactions page for approval.
5. Once approved and executed, the action will be reflected in the dApp.


# Compatible Apps

List of applications compatible with SquadsX

Here is the list of applications you can access via SquadsX to execute operations with your treasury assets:

{% hint style="warning" %}
This list indicates compatibility only and does not constitute an endorsement of any app's team, product, or security. Always perform your due diligence before engaging with third-party applications.
{% endhint %}

{% tabs %}
{% tab title="Asset Management" %}

| Application         | Use Cases                            | Limitations |
| ------------------- | ------------------------------------ | ----------- |
| **Magna**           | Create Allocation                    | -           |
|                     | Import Allocation                    | -           |
|                     | Create Schedule                      | -           |
|                     | Start & Fund Distribution            | -           |
| **Streamflow**      | Create Airdrops                      | -           |
|                     | Create Vest                          | -           |
|                     | Payments                             | -           |
| **Request Finance** | Create, track and reconcile invoices |             |
| **Squads**          | Initiate Transactions                | -           |
|                     | Approve/Reject Transactions          | -           |
|                     |                                      |             |
| {% endtab %}        |                                      |             |

{% tab title="DEXs" %}

| Application  | Use Cases                        | Limitations                                                                                                                     |
| ------------ | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| **Jupiter**  | Swaps/Limit Orders               | -                                                                                                                               |
|              | DCA                              | -                                                                                                                               |
|              | Value Average                    | -                                                                                                                               |
|              | Perp Trading                     | -                                                                                                                               |
| **Lulo**     | Deposit/Withdraw                 | -                                                                                                                               |
| **Meteora**  | Deposit/Withdraw (Standard pool) | -                                                                                                                               |
| **Orca**     | Swap                             | -                                                                                                                               |
| **Raydium**  | Swap                             | -                                                                                                                               |
|              | Liquidity Provisioning           | The transaction might not go through successfully if your Fee Relayers is enabled. Please contact support if you face an error. |
|              | Liquidity Provisioning           | -                                                                                                                               |
| **Zeta**     | Buy/Sell                         | -                                                                                                                               |
| **Darklake** | Swap                             |                                                                                                                                 |
| {% endtab %} |                                  |                                                                                                                                 |

{% tab title="Money Markets" %}

| Application                | Use Cases        | Limitations                                                                                                                      |
| -------------------------- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| **Drift**                  | Borrow/Lend      | -                                                                                                                                |
| **Exponent**               | Deposit/Lend     | Only available for fragSOL, kySOL, and USD.                                                                                      |
| **Kamino**                 | Borrow/Lend      | -                                                                                                                                |
| **Marginfi**               | Lending          | The transaction might not go through successfully if your Fee Relayers is disabled. Please contact support if you face an error. |
| **Save (formerly Solend)** | Deposit/Withdraw | -                                                                                                                                |
| {% endtab %}               |                  |                                                                                                                                  |

{% tab title="NFTs" %}

| Application  | Use Cases     | Limitations |
| ------------ | ------------- | ----------- |
| **Tensor**   | Buy/Sell NFTs | -           |
| {% endtab %} |               |             |

{% tab title="Others" %}

| Application   | Use Cases                      | Limitations |
| ------------- | ------------------------------ | ----------- |
| **Marinade**  | Native Stake/Unstake           | -           |
|               | Liquid Stake/Unstake           | -           |
| **Sanctum**   | Deposit Into The Infinity Pool | -           |
|               | Withdraw INF                   | -           |
|               | Trade LSTs                     | -           |
| **Solayer**   | Deposit/Withdraw               | -           |
| **TipLink**   | Create A TipLink               | -           |
| {% endtab %}  |                                |             |
| {% endtabs %} |                                |             |

{% hint style="warning" %}
SquadsX is still in beta, bugs or compatibility issues may occur. If you face any issues, please reach out to us on [Discord](https://discord.com/invite/squadsprotocol).
{% endhint %}


# Reporting and Accounting

Learn more about managing compliance with Squads

Users can use tools compatible with Squads to streamline their reporting and compliance processes:

* [Request Finance](/main/navigating-your-squad/reporting-and-accounting/request-finance): Manage and automate accounting workflows;
* [Integral](/main/navigating-your-squad/reporting-and-accounting/integral): Bookkeeping, treasury management, tax compliance, and auditing processes.

{% hint style="info" %}
If you have any questions, reach out to <garrett@sqds.io> to learn more.
{% endhint %}


# Request Finance

## What is Request Finance?

Request Finance is an all-in-one finance platform for crypto and fiat operations making it easy for teams to manage and automate accounting workflows for their business. It offers accounting features to help keep your team organized:

* All-in-one dashboard: Create, track, and reconcile invoices and produce and download reports on transactions, cash flow, and journal entries in one unified dashboard
* Transactions automation: Create rules and categorize your transactions effortlessly using automation, all in one place
* Multi-platform support: Import transactions from 80+ networks, 20+ exchanges, and 100+ wallets
* Software integration: Effortlessly sync with popular tools such as QuickBooks and Xero

## How do Squads users benefit from Request?&#x20;

Teams can now connect their Squads account to Request Finance to create, manage, and pay invoices seamlessly.

Using [SquadsX](/main/navigating-your-squad/squadsx), teams can connect their Squads account to Request Finance to:

* Create and manage professional invoices that automatically sync with Squads for streamlined payment approval and execution
* Monitor approval and payment status through Request Finance's “Billing” dashboard, with direct links to Squads transactions for complete payment visibility.

## How to get started?

{% hint style="info" %}
Squads users can get started with a 2-month free trial of Request Finance using [this link](https://www.request.finance/partners/squads).&#x20;
{% endhint %}

{% embed url="<https://www.youtube.com/watch?v=Z4SSpz_G5hY>" %}
Using Request Finance with Squads
{% endembed %}

{% hint style="info" %}
If you have any questions, reach out to <garrett@sqds.io> to learn more.
{% endhint %}


# Integral

## What is Integral?

[Integral](https://integral.xyz/) is a powerful accounting and treasury tool for crypto trams. It is used for streamlining bookkeeping, treasury management, tax compliance, and auditing processes.&#x20;

## How do Squads users benefit from Integral?&#x20;

Once Squads users have set up an account on Integral, they can seamlessly integrate their Squads App address by copying and pasting it into the platform.

This integration provides a comprehensive overview of all your onchain activities — giving you access to detailed insights that enable you to effortlessly meet your compliance requirements and maintain accurate records of your onchain transactions.

{% hint style="info" %}
If you have any questions, reach out to <garrett@sqds.io> to learn more.
{% endhint %}


# FAQs

Frequently asked questions.

<details>

<summary><strong>What is a Squad?</strong></summary>

A Squad is a programmable multi-signature wallet that allows teams and individuals to take full control of their treasury and developer assets.

</details>

<details>

<summary><strong>I’m getting an error and can’t create a Squad/create a transaction/sign a transaction.</strong></summary>

This can happen due to several reasons. This is a general guideline based on our experience of the most frequent problems and solutions. If those steps are not working for you, please contact us on Discord in the support channel or create a ticket.

1. Make sure you are connected **with the right wallet**, which is already added to a Squad.
2. Make sure to be connected to **the appropriate network**. Squads Protocol is running on Solana mainnet. Check the network setting of your wallet to see to which chain are you connected.
3. Make sure that you **have enough SOL** in your personal wallet (not a Squad’s vault) to pay Solana network fees.&#x20;
4. If you are using Ledger and all of your transactions are automatically declined with an error, please make sure that you have enabled **blind signing** on the Ledger. Also, make sure that your software is up-to-date.

</details>

<details>

<summary><strong>I’ve created a Squad but can’t find my private key. Can you share it with me?</strong></summary>

Squads vaults are not traditional hot wallets, they are **PDAs** (Program derived addresses). This means there are no private keys associated with them.&#x20;

PDAs are addresses generated to be controlled only by one specific program. Squads’ vaults are owned and controlled by the Squads program.

Please refer to [this section](https://solana.com/docs/core/pda) of Solana docs for an overview of PDAs.

</details>

<details>

<summary><strong>Which blockchain is Squads Protocol built on?</strong></summary>

Squads Protocol is built on the Solana blockchain.

</details>

<details>

<summary><strong>Is Squads Protocol permissionless?</strong></summary>

Yes, Squads Protocol is permissionless to interact with.&#x20;

</details>

<details>

<summary><strong>How can I contribute to the protocol?</strong></summary>

The protocol's codebase is [open-sourced](https://github.com/Squads-Protocol/v4), allowing you to build on top of it permissionlessly. If you need assistance, please reach out to us on [Discord](https://discord.com/invite/squadsprotocol).

</details>

<details>

<summary><strong>Can I connect my Squad to other dapps on Solana?</strong></summary>

Yes, to interact with dapps that are not directly integrated inside the platform, users can use the [SquadsX browser extension](/main/navigating-your-squad/squadsx).

</details>

<details>

<summary><strong>Can I create a Squad and gate access to it with NFTs?</strong></summary>

We don’t support the creation of NFT-gated Squads. Members are added to a Squad via their public keys.

</details>

<details>

<summary><strong>Would my assets be affected if the Squads UI is unavailable?</strong></summary>

No, as all your assets are stored in the Squads multisig program onchain. In the unlikely event that Squads Labs ceases operations or the UI becomes inaccessible, your assets will remain secure, and only you have the authority to move them. Above all, you can always interact with the program and your assets held within the multisig via either the SDK or the CLI. Learn more [here](/main/additional-resources/what-if-the-squads-app-goes-down).

</details>

<details>

<summary><strong>Can I add a custom RPC to use the Squads app?</strong></summary>

Yes. By default, the Squads app uses Triton as RPC provider. You can switch to Helius at any time or add a custom RPC provider URL by simply clicking on the "Connect Wallet" button within the Squads app.

</details>


# Advanced Security Best Practices

Advanced best practices to safeguard your assets.

This guide provides comprehensive security recommendations for organizations using Squads to manage digital assets. Following these best practices will help protect your treasury and program upgrades from both external and internal threats.

### Table of Contents

* [General Overview](#general-overview)
* [Core Security Practices](#core-security-practices)
* [Treasury Segmentation](#treasury-segmentation)
* [Program Upgrades](#program-upgrades-double-verification-and-verifiable-builds)
* [Squads Frontend Verification](#squads-frontend-verification)
* [Mitigating Signer Attacks](#mitigating-signer-attacks)

### General Overview

An important element of Squads' security is its transparent, sequential transaction process. This sequential structure comes from Squads Protocol's architecture, where each transaction follows a verifiable, onchain lifecycle:

1. Initiate: A transaction is proposed and recorded onchain. This creates both a transaction account (containing the actual transaction data to be executed) and a proposal account (for tracking approvals). Transaction details include a unique transaction ID that all members can cross-reference to ensure they're approving the same transaction.
2. Approve: Signers review and provide onchain signatures to approve the transaction. Each signature modifies the proposal account's state rather than changing the transaction account. This approach preserves the original transaction while tracking approval progress.
3. Execute: Once the multisig threshold is met (minimum required approvals), the transaction is executed onchain. The system verifies the proposal account's status before processing the unchanged transaction account.

This sequential, fully onchain approach creates an immutable audit trail that enables users to self-verify transactions and eliminates opportunities for manipulation between approval and execution stages. Squads never sends the same transaction to multiple signers - it only updates the proposal state with each approval.

### Core Security Practices

#### Squads Multisig Configuration

* Higher approval threshold: Implement a threshold of 4/6 or higher to ensure multiple signers are required for transaction approval, adding layers of security against individual compromises.
* Time Locks: Enable time locks to defer execution of approved transactions for a set period. This creates a safety window to respond to potentially unauthorized transactions even after approval. Choose appropriate durations—shorter intervals (e.g. 10-15 minutes) for program upgrades that may require quick responses, longer intervals for treasury transfers where additional review time enhances security.
* Key Rotation: Rotate keys that have been potentially exposed to unauthorized parties or not properly isolated from external systems.
* Separate Approval and Execution: Always approve and execute transactions in separate steps. Avoid using the "Approve + Execute" feature for maximum security.
* Diversify signing interfaces and devices: Employ signers using both mobile and desktop with hardware wallets to enhance security through diversity.

#### Transaction Verification

* Live communication: Maintain live communication with other signers during transaction approval, ensuring each signer's approval has been properly registered before proceeding.
* Transaction simulation and inspection: Simulate transactions and check the results using Solana Explorer Inspector to ensure expected behavior before execution.<br>

**Guidelines on Simulating Transactions:**

When reviewing a simulated transaction, check the simulation details in the Explorer Inspector. This step ensures that the transaction will perform as intended before executing it. Ideally also ensure the programs your transaction is calling are known to you, as malicious programs have the ability to change execution behavior between when you simulate and when you execute.

Here are specific elements to watch out for and how to handle them:

* BPFLoaderUpgradeab1e11111111111111111111111:
  * "New authority Some(XXX)": When you see this message, it means you are changing the buffer/program authority to a different wallet. Confirm that changing the authority is your intended action, and verify that the new wallet address (XXX) is correct.
  * "Upgraded program XXX": This message indicates that program XXX is being upgraded. Review the transaction details to ensure that this upgrade is expected and intended as part of the transaction.
* Token Program (TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA):
  * "Instruction: Approve": This means that you are delegating funds to another wallet. Confirm that this delegation is intended, as any misconfiguration can lead to a loss of funds. If delegation is not intended, take immediate action to correct it.

In addition, double-check the tokens and amounts that will be moved by any transaction. In cases where swaps are involved, be aware that other tokens may be moved as part of the swap, but the total USD value should still align with what you intended.

### Treasury Segmentation

While transaction controls like time locks protect individual transactions, treasury segmentation provides an additional layer of security at the organizational level. This strategy involves creating a "cold", advanced security Reserve Treasury account where your business secures the majority of your assets and one or more operations accounts for everyday use that require a lower level of security.

**Reserve Treasury**

* Contains 85-95% of your total assets
* Employs stringent security: higher thresholds, extended time locks
* Reserved for infrequent transactions and long-term asset storage
* Advanced key management practices (e.g. only use dedicated devices/hardware wallets) for maximum protection

**Operations Account**

* Holds 5-15% of funds for routine transactions
* Uses more accessible security: lower thresholds, accessible key management
* Handles payroll, vendor payments, and daily operations
* Receives periodic replenishment from the Reserve Treasury

**Program Upgrade Account**

* Dedicated account with specialized security for program upgrades
* Separate from both reserve and operations to isolate upgrade permissions
* Employs stringent security: higher thresholds, time locks
* Advanced key management practices (e.g. only use dedicated devices/hardware wallets) for maximum protection

This structure compartmentalizes risk—if your operations account is compromised, most assets remain protected in your more secure reserve treasury. Meanwhile, your team maintains the operational flexibility needed for day-to-day activities without navigating excessive security hurdles for routine transactions.

### Program Upgrades: Double Verification and Verifiable Builds

#### Understanding Buffer Accounts

A buffer account is a temporary onchain storage location that holds program code before it's deployed to its final program address. This intermediary step allows for verification before execution of the upgrade.

Key Functions:

* Stores the compiled program binary data onchain
* Enables verification before the actual upgrade occurs
* Provides a checkpoint for security review

#### Verifiable Builds

[Verifiable builds](https://github.com/Ellipsis-Labs/solana-verifiable-build) ensure the integrity of program code throughout the upgrade process by generating a cryptographic hash that can be independently verified by all team members.

Implementation Process:

* Build your program locally, generating a unique cryptographic hash
* Deploy the program to a buffer account
* Share the expected hash with all team members
* Team members independently verify the buffer content matches this hash
* Execute the upgrade from buffer to program account
* Post-upgrade, verify the deployed program hash matches the verified buffer

This process confirms deployed code matches the audited version, prevents unauthorized modifications, creates an audit trail through git commit references, and enables external verification of deployed programs against audit reports.

### Squads Frontend Verification

Accounts with high-value operations - such as Reserve Treasury and Program Upgrade accounts - should ensure transaction integration and the validity of the Squads frontend using multiple interfaces.

**Explorers**

Explorers provide basic transaction verification but have limitations:

Current Capabilities:

* View transaction metadata, status, IDs, and associated accounts
* Confirm transaction creation time

Limitations:

* Limited parsing of complex transactions and inner instructions

We are currently working with Solana Foundation on parsing Squads transactions in the Solana Explorer and implementing Squads transaction parsing in the Range interface.<br>

**CLI Tools**

Direct Interaction:

* Users can interact directly with the Squads CLI for core transaction operations. The CLI enables programmatic control of Squads multisig accounts without relying on web interfaces
* Links to our CLI tools: [Squads v3 CLI](https://github.com/Squads-Protocol/squads-cli) and [Squads v4 CLI](https://docs.squads.so/main/development/cli/installation)

Transaction Verification (coming soon):

* No dedicated verification tool exists yet for Squads transactions
* A comprehensive CLI tool is under development to automate transaction parsing and verification<br>

**Run UI Locally**\
\
There are two lightweight backup front-ends designed for easy verification, decentralization, and security.  These clients are just five files each, making them simple to hash against a commit, deploy to IPFS, or self-host—ensuring complete transparency:

* Download and run the Squads lightweight front-ends from GitHub:
  * v4: <https://github.com/Squads-Protocol/public-v4-client>
  * v3: <https://github.com/Squads-Protocol/public-v3-client>

**Range Integration (coming soon)**

Range will provide enhanced verification through automated notifications, human-readable transaction parsing, risk assessment, and detailed verification interfaces.

\
**Cold IPFS Frontend & Onchain Verification (coming soon)**\
\
Squads will deploy a minimalist “cold” frontend on IPFS that operates completely independent of Squads’ infrastructure, reducing dependency on Squads’ servers and web interface. This approach enhances security by removing exposure to potential Squads infrastructure compromises and dependencies on local environment security. This “cold” frontend is ideal for large-value accounts (e.g., Reserve Treasury and Program Upgrades). Additionally, builds will be hashed accordingly by release and have the hash published on Solana, IPFS, and other relevant channels.  Users can then verify the authenticity of the client themselves, regardless of origin (IPFS, self-hosting, etc).

### Mitigating Signer Attacks

Protecting individual signers is fundamental to maintaining the integrity of your multisig operations. By implementing these security measures, your team can significantly strengthen your overall security:

#### Dedicated Hardware Security

Dedicated Devices

* Use dedicated hardware wallets exclusively for Squads transactions
* Never use these devices for other applications, especially for keys with initiate permissions

Diversify Hardware Vendors

* Use hardware wallets from different manufacturers (Ledger, Trezor, Keystone)
* Hardware diversification prevents single-vendor vulnerabilities

#### Initiator Security

Transaction initiators pose the highest security risk since they define what gets recorded onchain:

* Transaction content becomes immutable once initiated
* Apply strictest security measures to devices used for initiation
* Restrict initiation rights using Squads Permissions

Role-Based Permissions Squads Permissions offers three distinct roles:

* Proposer - Can only create transactions
* Voter - Can only vote on proposed transactions
* Executor - Can only execute approved transactions

Limiting who can initiate transactions creates a critical security barrier at the most vulnerable point in the workflow.

#### The Two-Minute Rule

The sequential nature of Squads transactions, combined with Solana's blockhash expiration, creates a powerful security mechanism:

When multiple signers need to approve a transaction:

1. After initiation, each signer should wait 2 minutes before the next person proceeds
2. This waiting period allows the blockhash to expire
3. If no suspicious transactions appears during this 2-minute window, the next signer can safely proceed

**Why This Works:**

* Solana signatures are linked to specific blockhashes
* These blockhashes automatically expire after 2 minutes
* If your device is compromised and someone captures your signature, they only have a 2-minute window to misuse it
* After 2 minutes, the captured signature becomes useless for malicious transactions
* Because the transaction content is fixed onchain at initiation, signers can verify they're approving the intended transaction through multiple independent sources

**Durable Nonce Exception**

The two-minute rule depends on blockhash expiration, but durable nonces bypass this protection:

* Durable nonces allow transactions to remain valid indefinitely
* If the initiator has a durable nonce account, the two-minute rule is ineffective

To ensure a durable nonce transaction is not involved:

* Verify the initiator has no durable nonce accounts using getProgramAccounts calls
* Ensure the displayed fee-payer for transactions matches the initiators public key (if your Squads Fee Relayer is turned on, then the fee-payer should be the Fee Relayer key address of which you can find in Settings)


# Costs of using Squads

How much does it cost to use Squads

### **Network fees**

{% hint style="info" %}
Network fees can vary slightly depending on the action performed inside a Squad. This happens due to differences in the weights of instructions, which require different spaces on the blockchain.
{% endhint %}

* **Withdrawing SPL tokens** - 0.0051 SOL
* **Withdrawing NFT** - 0.0104 SOL
* **Stake SOL with a liquid provider** - 0.0094 SOL
* **Stake SOL with a validator** - 0.0106 SOL
* **Add member** - 0.0037 SOL
* **Remove member** - 0.0044 SOL
* **Change threshold** - 0.0042 SOL
* **Create time lock** - 0.0069 SOL
* **Create a Spending limit** - 0.0076 SOL
* **Enable the fee relayer -** 0.0681 SOL

{% hint style="info" %}
Transactions executed with Squads have higher network fees than wallets like Phantom and Backpack because Squads uses [smart accounts](https://squads.so/blog/smart-account-basics-why-smart-accounts-will-power-the-onchain-economy) to enforce multisig logic. Smart accounts require more computation and storage than traditional non-programmable accounts. A portion of these fees are due to [network rent](https://solana.com/docs/core/fees#rent:~:text=the%20fees%20paid.-,Rent%20%23,-The%20fee%20deposited) (related to storage) which can be recouped using our [Rent Reclaim](https://docs.squads.so/main/navigating-your-squad/transactions#rent-reclaim) feature. All fees are charged by the Solana network; Squads does not charge fees on transactions except the [Limit Order](/main/navigating-your-squad/trade/limit-orders) fees shown below.
{% endhint %}

### **Platform fees**

**Squads Deployment Fee** - 0.1 SOL

**Limit Orders** - 0.25%

[**Squads Business Plan** ](/main/getting-started/pricing)(optional) - $49 per month


# Sending assets to/from centralized exchange (CEXs)

Each Squads address represents a special account on the Solana blockchain referred to as "PDA". As a result, some exchanges may have limitations in fully supporting asset transfers to or from Squads multisigs, with these restrictions varying by region.

Please refer to the following list if you plan to use Squads frequently with centralized exchanges:

<table><thead><tr><th>Exchange</th><th data-type="checkbox">Receive (from Squads multisig)</th><th data-type="checkbox">Deposit (into Squads multisig)</th></tr></thead><tbody><tr><td>Coinbase </td><td>true</td><td>true</td></tr><tr><td>Binance</td><td>true</td><td>true</td></tr><tr><td>Kraken</td><td>true</td><td>true</td></tr><tr><td>Backpack</td><td>true</td><td>true</td></tr><tr><td>OKX</td><td>true</td><td>true</td></tr><tr><td>Swissborg</td><td>true</td><td>true</td></tr><tr><td>Bybit</td><td>true</td><td>false</td></tr><tr><td>Bitget</td><td>true</td><td>false</td></tr></tbody></table>

{% hint style="warning" %}
Please proceed with caution and test with small amounts whenever you're sending assets to/from a CEX. If you have any questions, please reach out to us on [Discord](https://discord.com/invite/YPXz64TrKs).
{% endhint %}


# Squads on Mobile

Learn how to use Squads on your mobile device

The Squads app can also be used on mobile devices via in-app browsers of mobile wallets like:

* Phantom;
* Backpack;
* Solfare, and more.

### Connecting to Squads on mobile:

1. Open the browser tab on your mobile wallet. Go to [app.squads.so ](https://app.squads.so/)and click the "Connect" button.
2. Connect your wallet and you will be redirected to your default Squad's dashboard.

{% hint style="info" %}
If you have a Squad on Squads Protocol v3, go to [v3.squads.so](https://v3.squads.so/squads) on your wallet browser to access your Squads.
{% endhint %}

<figure><img src="/files/WMKkVWP465tv9Od0tdxe" alt=""><figcaption><p>Squads on mobile</p></figcaption></figure>

{% hint style="warning" %}
The Squads app on the Solana Saga mobile device is built on top of Squads Protocol v3 and is actively maintained. Please migrate to [app.squads.so](https://app.squads.so/squads) for the optimal mobile experience.
{% endhint %}


# What if the Squads app goes down

The Squads Backup Kit ensures you can always access your assets through multiple options

## Squads Backup Kit

In the unlikely event that the Squads app would be unavailable for a long period, we have put in place multiple options to allow users to access their assets:&#x20;

{% tabs %}
{% tab title="1. Squads minimal UI" %}
This is an open-source interface that allows you to interact with the Squads program where your assets sit. You can fork it and host it locally to access your Squads account(s) and then, for instance, withdraw your assets.&#x20;

The Squads minimal UI can be found on our official GitHub: <https://github.com/Squads-Protocol/public-v4-client>

{% hint style="info" %}
Note that this UI primarily focuses on emergency actions (e.g. withdrawing funds or programs) in case the Squads main app is inaccessible for too long. We do not encourage using it as your main app as it is not optimized and far from the experience you get on app.squads.so.
{% endhint %}
{% endtab %}

{% tab title="2. CLI Tool" %}
Another way to interact with your Squads account(s) is through the Command-line interface (CLI) we have built. The Squads CLI has exactly the same wallet support as the Solana CLI, which means it supports file system wallets as well as Ledger hardware wallets.

This CLI can be used from any computer terminal to access your assets stored on Squads.

For a walk through on how to install and use the Squads CLI, follow this guide: <https://docs.squads.so/main/v/development/squads-cli/installation>&#x20;
{% endtab %}

{% tab title="3. SDK" %}
Additionally, we also have an SDK for those ready to build their own simple UI to interact with the Squads program and access their assets that way rather than via the official Squads app.&#x20;

The Squads SDK can be found here: <https://www.npmjs.com/package/@sqds/multisig>

{% hint style="info" %}
Interacting with an SDK requires developer knowledge and is best suited for technical users. If you have limited technical skills or need quick access to your assets, we recommend using the Squads minimal UI or the CLI tool
{% endhint %}
{% endtab %}
{% endtabs %}

Remember, all your assets are stored in the Squads multisig program onchain, and Squads Labs never has control over your funds nor can access them.&#x20;

In the unlikely event that Squads Labs ceases operations or the main UI becomes inaccessible, your assets remain secure. Only you have the authority to move them using your private key/wallet.


# Key aspects of using a multisig

By using a multisig, it is important to acknowledge certain concepts. Here are some points to have in mind when using a multisig:

* **Loss of Private Keys**. Always keep a backup of your private keys added as members to your multisig. If a key is lost, it could impact the multisig operations if a specific number of signatures are needed to reach the threshold.
* **Single Point of Failure with Keys**. For added security, consider storing keys in different secure locations. Otherwise a single breach can compromise the whole set up.
* **Threshold.** Be sure everyone in the multisig understands the number of signatures required for transactions, so you always have the needed approvals.
* **No Succession Planning.** If keyholders become unavailable (e.g., due to accident, death), without a plan for transition, funds may be locked forever.
* **Transfer of Funds to Wrong Address.** Funds should always be sent to the multisig vault account, and not the multisig account address. Due to the design of the Squads Protocol program, funds deposited to the multisig account may not be recovered.
* **Config Authority**. If the config\_authority of a multisig is compromised, an attacker can change multisig settings, potentially reducing the required threshold for transaction execution or instantly being able to remove and add new members (changing config\_authority ownership is only possible programatically and is subject to threshold requirements).
* **SVM Forks**. If the underlying SVM compatible blockchain undergoes a fork and a user had sent funds to the orphaned chain, the state of the blockchain may not interpret the owner of funds to be original one.
* **Time Locks**. While setting time locks be certain of the duration you are comfortable with so your funds remain accessible when needed.
* **SOL for Network Fees**. Always ensure multisig participants maintain a minimum balance of the native token needed for transaction fees.


# Self Custody Society (SCS)

## What is the Self Custody Society?

The Self Custody Society (SCS for short) is a collective of teams that help guide and support the development and adoption of the multisig standard.&#x20;

Moving forward, SCS will continue to provide feedback on the codebase and user experience as well as help us promote the benefits of self-custody and multisig use throughout the Solana ecosystem and beyond.&#x20;

## Which teams form SCS?

Currently, SCS consists of the following teams: Grape, Cardinal, Dialect, Hubble, Strata, Genopets, Drift, PsyOptions, Tensor, Helius, Jito Labs, Magna, Ratio Finance, Marginfi, Streamflow, Superteam, OptiFi, Wordcel, mtnPay, FRAKT, Bridgesplit, Asymmetric, Everlend, OtterSec, Dual Finance, Ironforge, Xenon, Dispatch, Integral, Coinable, Amulet Protocol, Lulo Finance, Samo, Cypher, Unique, Francium, Sharky, Cega, Elusiv, ape16z, LadderCaster, Pyth, Light Protocol, Solworks, Raydium, Solend, Step Finance, Lab Eleven, Phantasia. We also welcome secure individuals: Sebastian Bor, Kyle Samani, Ben Sparango, Rob Sarrow, Vishal Kankani.

## What are the benefits of being an SCS member?

Currently, SCS members have early access to new features and get integration preference, but this is just the beginning as there are a lot more things in store. Reach out if you would like to join SCS today.


# How secure is Squads

The Squads platform is built on top of Squads Protocol — the smart account standard on Solana and the SVM, securing $10 billion across 40+ thousand smart accounts.&#x20;

To ensure that it is secure, we have taken the following actions:

1. [Multiple security audits](/main/security/security-audits);
2. [Several formal verifications of the program](/main/security/formal-verifications);
3. [A perpetual bug bounty program](/main/security/bug-bounty).

Squads Protocol's codebase is open-sourced (available to view [here](https://github.com/Squads-Protocol/v4)) and the programs have been written in [Anchor](https://www.anchor-lang.com/), a framework for building secure Solana programs.

Additionally, we strongly believe that core primitives existing on open and permissionless networks should be made immutable as soon as practically possible. We are committed to making Squads Protocol programs immutable within months of public release.

* Squads Protocol v3 (powering Squads Legacy) has been [immutable since February 2023](https://x.com/SquadsProtocol/status/1628776620243963904?s=20) and Squads Labs nor anyone else can alter the on-chain code in any way.
* Squads Protocol v4 (powering Squads) was launched in October 2023 and it has been [immutable since November 2024](https://x.com/SquadsProtocol/status/1859947607671607443), unalterable by Squads Labs or any third party.


# Security Audits

Squads Labs has engaged several reputable audit firms to thoroughly review the codebase of Squads Protocol and its associated programs:

* [Security audits of Squads Protocol v4](/main/security/security-audits/squads-protocol-v4) (powering Squads);
* [Security audits of Squads Protocol v3](/main/security/security-audits/squads-protocol-v3) (powering Squads Legacy).

These third-party audits ensure a neutral and in-depth assessment of the security of Squads Protocol.


# Squads Protocol v4

Find all the audits our v4 program has gone through.

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Trail of Bits Security Audit</strong> <strong>2023</strong></td><td><a href="/files/wGAkXArDMHjDTOEf1GKn">/files/wGAkXArDMHjDTOEf1GKn</a></td><td><a href="https://github.com/Squads-Protocol/v4/blob/main/audits/trail_of_bits_squads_v4_security_audit.pdf">https://github.com/Squads-Protocol/v4/blob/main/audits/trail_of_bits_squads_v4_security_audit.pdf</a></td><td></td></tr><tr><td><strong>Neodyme Security Audit 2023</strong></td><td><a href="/files/wWYLCki5hrzFHtgKAbxp">/files/wWYLCki5hrzFHtgKAbxp</a></td><td><a href="https://github.com/Squads-Protocol/v4/blob/main/audits/neodyme_squads_v4_report.pdf">https://github.com/Squads-Protocol/v4/blob/main/audits/neodyme_squads_v4_report.pdf</a></td><td></td></tr><tr><td><strong>OtterSec Security Audit 2023</strong></td><td><a href="/files/2M58gZY9oQQc9ro66ZLR">/files/2M58gZY9oQQc9ro66ZLR</a></td><td><a href="https://github.com/Squads-Protocol/v4/blob/main/audits/ottersec_squads_v4_audit.pdf">https://github.com/Squads-Protocol/v4/blob/main/audits/ottersec_squads_v4_audit.pdf</a></td><td></td></tr><tr><td><strong>Certora Security Audit Oct 2023</strong></td><td><a href="/files/4bT66ivh2zXv3dtrvEOs">/files/4bT66ivh2zXv3dtrvEOs</a></td><td><a href="https://github.com/Squads-Protocol/v4/blob/main/audits/certora_squads_v4_security_report_and_formal_verification.pdf">https://github.com/Squads-Protocol/v4/blob/main/audits/certora_squads_v4_security_report_and_formal_verification.pdf</a></td><td></td></tr><tr><td><strong>Certora Security Audit Dec 2023</strong></td><td><a href="/files/4bT66ivh2zXv3dtrvEOs">/files/4bT66ivh2zXv3dtrvEOs</a></td><td><a href="https://github.com/Squads-Protocol/v4/blob/main/audits/certora_squads_v4_security_report_and_formal_verification_2024.pdf">https://github.com/Squads-Protocol/v4/blob/main/audits/certora_squads_v4_security_report_and_formal_verification_2024.pdf</a></td><td></td></tr><tr><td><strong>Neodyme Security Audit 2024</strong></td><td><a href="/files/wWYLCki5hrzFHtgKAbxp">/files/wWYLCki5hrzFHtgKAbxp</a></td><td><a href="https://github.com/Squads-Protocol/v4/blob/main/audits/neodyme_squads_v4_report_2024.pdf">https://github.com/Squads-Protocol/v4/blob/main/audits/neodyme_squads_v4_report_2024.pdf</a></td><td></td></tr><tr><td><strong>OtterSec Security Audit 2024</strong></td><td><a href="/files/2M58gZY9oQQc9ro66ZLR">/files/2M58gZY9oQQc9ro66ZLR</a></td><td><a href="https://github.com/Squads-Protocol/v4/blob/main/audits/ottersec_squads_v4_audit_2024.pdf">https://github.com/Squads-Protocol/v4/blob/main/audits/ottersec_squads_v4_audit_2024.pdf</a></td><td><a href="https://github.com/Squads-Protocol/v4/blob/main/audits/ottersec_squads_v4_audit_2024.pdf">https://github.com/Squads-Protocol/v4/blob/main/audits/ottersec_squads_v4_audit_2024.pdf</a></td></tr></tbody></table>


# Squads Protocol v3

Find all the audits our v3 program has gone through.

<table data-view="cards"><thead><tr><th></th><th data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Bramah Security Audit</strong></td><td></td><td><a href="https://github.com/Squads-Protocol/squads-mpl/blob/main/Squads_V3_Audit_Bramah.pdf">https://github.com/Squads-Protocol/squads-mpl/blob/main/Squads_V3_Audit_Bramah.pdf</a></td><td><a href="/files/5OsOhuy1yK1WSeoAWwO5">/files/5OsOhuy1yK1WSeoAWwO5</a></td></tr><tr><td><strong>OtterSec Security Audit</strong></td><td></td><td><a href="https://github.com/Squads-Protocol/squads-mpl/blob/main/Squads%20V3%20-%20OtterSec%20Audit.pdf">https://github.com/Squads-Protocol/squads-mpl/blob/main/Squads%20V3%20-%20OtterSec%20Audit.pdf</a></td><td><a href="/files/2M58gZY9oQQc9ro66ZLR">/files/2M58gZY9oQQc9ro66ZLR</a></td></tr><tr><td><strong>Neodyme Security Audit</strong></td><td></td><td><a href="https://github.com/Squads-Protocol/squads-mpl/blob/main/Squads_V3_MPL_Audit_Neodyme.pdf">https://github.com/Squads-Protocol/squads-mpl/blob/main/Squads_V3_MPL_Audit_Neodyme.pdf</a></td><td><a href="/files/wWYLCki5hrzFHtgKAbxp">/files/wWYLCki5hrzFHtgKAbxp</a></td></tr></tbody></table>


# Formal Verifications

{% hint style="info" %}
**What is formal verification?**

Formal verification (FV) is the process of using a formal specification to verify the correctness of a system. The goal of FV is to ensure that a program is free of bugs and meets its requirements.
{% endhint %}

As of today:&#x20;

* Squads Protocol v3 was the first program formally verified on Solana. The report made by OtterSec is accessible [here](/main/security/formal-verifications/squads-protocol-v3).&#x20;
* Squads Protocol v4 is formally verified by [two independent auditors](/main/security/formal-verifications/squads-protocol-v4).

As opposed to a security audit which specifically focuses on identifying security vulnerabilities, Formal verification is a different, mathematical approach to evaluating that a program is working as intended.&#x20;

When a program is connected to the internet, there is the new risk that bugs may introduce security holes into your system. Even simple buffer overflows can be exploited by skilled attackers to compromise the integrity of a program. Formal verification is one of the most effective methods to ensure a program is free from such vulnerabilities.

OtterSec developed and released the first framework for formally verifying Solana programs in January of this year (2023). They chose Squads Protocol v3 as a case study to showcase the efficacy of this method: <https://osec.io/blog/2023-01-26-formally-verifying-solana-programs>&#x20;


# Squads Protocol v4

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>OtterSec Formal Verification</strong> </td><td><a href="/files/2M58gZY9oQQc9ro66ZLR">/files/2M58gZY9oQQc9ro66ZLR</a></td><td><a href="https://github.com/Squads-Protocol/v4/blob/main/audits/ottersec_squads_v4_audit_2024.pdf">https://github.com/Squads-Protocol/v4/blob/main/audits/ottersec_squads_v4_audit_2024.pdf</a></td></tr><tr><td><strong>Certora Formal Verification</strong> </td><td><a href="/files/4bT66ivh2zXv3dtrvEOs">/files/4bT66ivh2zXv3dtrvEOs</a></td><td><a href="https://github.com/Squads-Protocol/v4/blob/main/audits/certora_squads_v4_security_report_and_formal_verification_2024_final.pdf">https://github.com/Squads-Protocol/v4/blob/main/audits/certora_squads_v4_security_report_and_formal_verification_2024_final.pdf</a></td></tr></tbody></table>


# Squads Protocol v3

<table data-view="cards"><thead><tr><th></th><th data-type="files"></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>OtterSec Formal Verification</strong> </td><td></td><td><a href="/files/2M58gZY9oQQc9ro66ZLR">/files/2M58gZY9oQQc9ro66ZLR</a></td><td><a href="https://osec.io/blog/2023-01-26-formally-verifying-solana-programs#case-study-squads-multisig">https://osec.io/blog/2023-01-26-formally-verifying-solana-programs#case-study-squads-multisig</a></td></tr></tbody></table>


# Bug bounty

Learn more about the Squads perpetual bug bounty program

1. Reporting security problems&#x20;
2. Incident response process
3. Security bug bounties&#x20;

## Reporting security problems

DO NOT CREATE AN ISSUE to report a security problem. Instead, please send an email to **<security@sqds.io>** and provide your GitHub username so we can add you to a new draft security advisory for further discussion.

For security reasons, we do not accept vulnerability disclosures presently via email, nor do we accept attachments when provided via email for vulnerability disclosures.&#x20;

We suggest that you ensure that multi-factor authentication is enabled on your account prior to submitting.

## **Incident response process**

In case an incident is discovered or reported, the following process will be followed to contain, respond and remediate:

### **1.** Establish a new draft security advisory

In response to an email to **<security@sqds.io>**, a member of the Squads team will:

* create a new draft security advisory for the incident at
  * [Squads-Protocol/squads-mpl](https://github.com/Squads-Protocol/squads-mpl) if the security vulnerability has been found in the Squads Protocol v3 program,&#x20;
  * or at [Squads-Protocol/v4](https://github.com/Squads-Protocol/v4) if it has been found in the Squads Protocol v4 program.
* add the reporter's github user and the squads-protocol/security-incident-response-team group to the draft security advisory&#x20;
* create a private fork of the repository (grey button towards the bottom of the page)&#x20;
* respond to the reporter by email, sharing a link to the draft security advisory.&#x20;

If the advisory is the result of an audit finding, a similar but slightly modified process is followed:

* follow the same process as above but add the auditor's GitHub username and begin the title with "\[Audit]".

### 2. Triage

Within the draft security advisory, the Squads protocol team and the reporter will discuss and determine the severity of the issue. The Squads Protocol team will ultimately be the determining party for any aspects related to the severity of the issue (and any associated bounty).&#x20;

If necessary, members of the squads-protocol/security-incident-response-team group may add other GitHub users to the advisory to assist with triage.&#x20;

In the event of a non-critical advisory, the Squads team will work to communicate as broadly where possible with relevant stakeholders and interested parties.

### 3. Prepare fixes

For the affected branches prepare a fix for the issue and push them to the corresponding branch in the private repository associated with the draft security advisory.&#x20;

Normal CI procedures will not be present within the private repository so you must build from source and manually verify fixes.&#x20;

Code review from the reporter is ideal, as well as from multiple members of the Squads development team.

### 4. Ship the patch&#x20;

Once the fix is accepted, a member of the squads-protocol/security-incident-response-team group should prepare a single patch file for each affected branch.&#x20;

The commit title for the patch should only contain the advisory id, and not disclose any further details about the incident.

### **5. Public disclosure and release**

Once the fix has been deployed, the patches from the security advisory may be merged into the main source repository. At this time, more broad public disclosure may occur via the official Squads Twitter account and other official mediums of communication.&#x20;

A new official release for each affected branch should be shipped and upgraded to as quickly as possible.

### **6. Security advisory bounty accounting and cleanup**

If this issue is eligible for a bounty, prefix the title of the security advisory with one of the following, depending on the severity:&#x20;

* being able to steal funds&#x20;
* being able to freeze funds or render them inaccessible by their owners
* being able to perform replay attacks on the same chain&#x20;
* being able to change Squad settings or module settings without consent of owners&#x20;

Confirm with the reporter that they agree with the severity assessment, and discuss as required to reach a conclusion.

## **Security bug bounties**

We offer bounties for critical security issues. Please see below for more details. Either a demonstration or a valid bug report is all that's necessary to submit a bug bounty.&#x20;

A patch to fix the issue isn't required.

#### Ability to Steal Funds

$300,000 USD in locked SOL tokens (locked for 12 months)

* theft of funds without users signature from any account&#x20;
* theft of funds without users interaction with the Multisig program&#x20;
* theft of funds that requires users signature - creating a Multisig program that drains funds.

#### Loss of Availability / Ability to Freeze Funds

$200,000 USD in locked SOL tokens (locked for 12 months):&#x20;

* Ability to freeze a User’s ability to claim funds from a Multisig

#### Replay Attacks&#x20;

$25,000 USD in locked SOL tokens (locked for 12 months):&#x20;

* Ability to replay a previously executed transaction involving a Squads Multisig&#x20;

#### Settings Modifications

$10,000 USD in locked SOL tokens (locked for 12 months):&#x20;

* Modification of any Multisig or module settings without proper authorization by the owners of the Multisig

### In Scope

These are the two on-chain programs in scope for the bug bounty:

* Squads Protocol v4 on-chain program ([SQDS4ep65T869zMMBKyuUq6aD6EgTu8psMjkvj52pCf](https://explorer.solana.com/address/SQDS4ep65T869zMMBKyuUq6aD6EgTu8psMjkvj52pCf))&#x20;
* Squads Protocol v3 on-chain program ([SMPLecH534NA9acpos4G6x7uf3LWbCAwZQE9e8ZekMu](https://explorer.solana.com/address/SQDS4ep65T869zMMBKyuUq6aD6EgTu8psMjkvj52pCf))

### Out of Scope

The following components are out of scope for the bounty program:&#x20;

* any encrypted credentials, auth tokens, etc. checked into the repo&#x20;
* bugs in dependencies, please take them upstream!&#x20;
* attacks that require social engineering&#x20;
* any files, modules or libraries other than the ones mentioned above&#x20;
* any points listed as an already known weaknesses&#x20;
* any points listed in the audit reports&#x20;
* any points fixed in a newer version.

### Eligibility

The participant submitting the bug report shall follow the process outlined within this document.&#x20;

Multiple submissions for the same class of exploit are still eligible for compensation, though may be compensated at a lower rate, however these will be assessed on a case-by-case basis.&#x20;

Participants located in OFAC sanctioned countries may not participate in the bug bounty program at this time.

### Duplicate reports

Compensation for duplicative reports will be split among reporters with first to report taking priority using the following equation:&#x20;

`R: total reports`&#x20;

`ri: report priority`&#x20;

`bi: bounty share`

`bi = 2 ^ (R - ri) / ((2^R) - 1)`

### Payment of Bug Bounties

Bounties are paid out NET and are reviewed on a rolling basis. We try to respond to every submission within 24 hours, but some may take longer as we assess relevance and impact.

### Responsible Disclosure Policy&#x20;

If you comply with the policies below when reporting a security issue to us, we will not undergo legal action or a law enforcement investigation against you in response to your report.

We ask that:&#x20;

* You give us reasonable time to investigate and mitigate an issue you report before making public any information about the report or sharing such information with others.&#x20;
* You make a good faith effort to avoid security violations and disruptions to others, including (but not limited to) destruction of data and interruption or degradation of our services.&#x20;
* You do not exploit a security issue you discover for any reason. This includes demonstrating additional risk, such as an attempted compromise of sensitive company data or probing for additional issues.&#x20;
* You have not violated any other applicable laws or regulations.&#x20;
* You are not currently subject to any U.S. sanctions administered by the Office of Foreign Assets Control of the U.S. Department of the Treasury (“OFAC”).


# What is Squads Protocol

Introduction to building on Squads Protocol

Squads Protocol is a collection of programs on the Solana blockchain that implements smart contract-level account abstraction and acts as the perfect foundation for building products that will help onboard the next billion users into crypto.

It secures $10+ billion in value and the leading product built on top of it, the Squads platform, is trusted and used by over 250 teams in the ecosystem, such as Jupiter, Pyth, Raydium, Marginfi, Backpack, Drift, Helius, Kamino, Jito, Tensor, Helium and many others.

Squads Protocol is a collection of programs (smart contracts) that enables developers to use smart account technology to build novel asset management and self-custody solutions.

Since its launch in 2021, Squads Protocol has become Solana's smart account standard - securing $10+ billion in value for leading teams, applications, and institutions. We are trusted and used by over 250 teams in the ecosystem, such as Jupiter, Pyth, Raydium, Marginfi, Backpack, Drift, Helius, Kamino, Jito, Tensor, Helium, and many others.

Due to its permissionless nature, developers can seamlessly integrate Squads Protocol's programs into their own applications, enabling enhanced features that leverage multi-signature functionality and Solana's account abstraction capabilities. These features include spending limits, sub-accounts, time locks, and more.

To start your journey into interacting with Squads Protocol and the v4 program, you can read our [Quickstart](/main/development/introduction/quickstart) guide. It will walk you through creating a complete workflow using the Squads Typescript SDK in just 10 minutes.

For more specific instructions, head to the [Overview](/main/development/typescript/overview) page.


# Use Cases

What can you build with Squads?

Squads is a powerful primitive that enables a variety of use-cases related to self-custody and account abstraction. Here are few of the major use-cases for Squads' tools:

### **Configurable App Vaults**

Use Squads to custody funds associated with your app, and allow various stakeholders to have control over the flow of these funds. An example of this would be a crowdfunding app, where funds raised are custodied in Squads, with the fundraiser admins and members of the app team as members.

### **Custom User Interfaces**

Use the Squads v4 SDK to create a custom UI, built to your liking for your Squad. This allows for a bespoke smart account experience, and less dependency on Squads' official services. For reference, check out our [public UI](https://github.com/Squads-Protocol/squads-v4-public-ui).

### Squads Blinks

Build custom Solana actions and blockchain links (blinks) associated with a Squad that are shareable on a variety of websites like X.


# Quickstart

A 10 minute overview on how to interact with Squads Protocol using Typescript.

## Set up your workspace (1 minute)

**Important note**: You can find the code for this quickstart guide [here](https://github.com/Squads-Protocol/v4-examples/blob/main/typescript/main.ts).

Let's set up a new Typescript project. \
First, create a new directory.

```
mkdir squads_quickstart
```

```
cd squads_quickstart
```

Now, create a new file named `tsconfig.json`

```json
{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es6",
    "esModuleInterop": true
  }
}
```

Add a `package.json` file and add this content

```json
{
  "scripts": {
    "test": "npx mocha -r ts-node/register 'main.ts' --timeout 10000"
  },
  "dependencies": {
    "@solana/web3.js": "^1.73.0",
    "@sqds/multisig": "^2.1.3"
  },
  "devDependencies": {
    "@types/chai": "^4.3.3",
    "@types/mocha": "^10.0.6",
    "chai": "^4.3.6",
    "mocha": "^10.3.0",
    "ts-mocha": "^10.0.0",
    "typescript": "^4.8.3"
  }
}
```

Here, the main takeaway is that we are going to use the `@sqds/multisig` package.

Last but not least, create a `main.ts` file at the same location, and add this code:

```typescript
import * as multisig from "@sqds/multisig";
import {
  Connection,
  Keypair,
  LAMPORTS_PER_SOL,
  SystemProgram,
  TransactionMessage,
  clusterApiUrl,
} from "@solana/web3.js";

const { Permission, Permissions } = multisig.types;

// Use 'https://api.devnet.solana.com' if there are struggles running locally
const connection = new Connection("http://localhost:8899", "confirmed");
```

## Let's get to the code (8 minutes)

### Create a multisig (2 minutes)

Let's set up a testing flow in which we're going to create a multisig, propose a new transaction, vote on that transaction and execute it.

First, let's add our first step: Setting up the multisig members and creating the multisig.

```typescript
describe("Interacting with the Squads V4 SDK", () => {
  const creator = Keypair.generate();
  const secondMember = Keypair.generate();
  before(async () => {
    const airdropSignature = await connection.requestAirdrop(
      creator.publicKey,
      1 * LAMPORTS_PER_SOL
    );
    await connection.confirmTransaction(airdropSignature);
  });

  const createKey = Keypair.generate();

  // Derive the multisig account PDA
  const [multisigPda] = multisig.getMultisigPda({
    createKey: createKey.publicKey,
  });

  it("Create a new multisig", async () => {
    const programConfigPda = multisig.getProgramConfigPda({})[0];

    console.log("Program Config PDA: ", programConfigPda.toBase58());

    const programConfig =
      await multisig.accounts.ProgramConfig.fromAccountAddress(
        connection,
        programConfigPda
      );

    const configTreasury = programConfig.treasury;

    // Create the multisig
    const signature = await multisig.rpc.multisigCreateV2({
      connection,
      // One time random Key
      createKey,
      // The creator & fee payer
      creator,
      multisigPda,
      configAuthority: null,
      timeLock: 0,
      members: [
        {
          key: creator.publicKey,
          permissions: Permissions.all(),
        },
        {
          key: secondMember.publicKey,
          // This permission means that the user will only be able to vote on transactions
          permissions: Permissions.fromPermissions([Permission.Vote]),
        },
      ],
      // This means that there needs to be 2 votes for a transaction proposal to be approved
      threshold: 2,
      rentCollector: null,
      treasury: configTreasury,
      sendOptions: { skipPreflight: true },
    });
    await connection.confirmTransaction(signature);
    console.log("Multisig created: ", signature);
  });
```

### Create transaction proposal (2 minutes)

Now, let's create a transaction proposal. We want the multisig to send 0.1 SOL to the creator.\
For purposes of this tutorial, we first have to send that amount to the multisig, and can then create a message containing the instruction that needs to be executed.

```typescript
  it("Create a transaction proposal", async () => {
    const [vaultPda] = multisig.getVaultPda({
      multisigPda,
      index: 0,
    });
    const instruction = SystemProgram.transfer({
      // The transfer is being signed from the Squads Vault, that is why we use the VaultPda
      fromPubkey: vaultPda,
      toPubkey: creator.publicKey,
      lamports: 1 * LAMPORTS_PER_SOL,
    });
    // This message contains the instructions that the transaction is going to execute
    const transferMessage = new TransactionMessage({
      payerKey: vaultPda,
      recentBlockhash: (await connection.getLatestBlockhash()).blockhash,
      instructions: [instruction],
    });

    // Get the current multisig transaction index
    const multisigInfo = await multisig.accounts.Multisig.fromAccountAddress(
      connection,
      multisigPda
    );

    const currentTransactionIndex = Number(multisigInfo.transactionIndex);

    const newTransactionIndex = BigInt(currentTransactionIndex + 1);

    const signature1 = await multisig.rpc.vaultTransactionCreate({
      connection,
      feePayer: creator,
      multisigPda,
      transactionIndex: newTransactionIndex,
      creator: creator.publicKey,
      vaultIndex: 0,
      ephemeralSigners: 0,
      transactionMessage: transferMessage,
      memo: "Transfer 0.1 SOL to creator",
    });

    await connection.confirmTransaction(signature1);

    console.log("Transaction created: ", signature1);

    const signature2 = await multisig.rpc.proposalCreate({
      connection,
      feePayer: creator,
      multisigPda,
      transactionIndex: newTransactionIndex,
      creator,
    });

    await connection.confirmTransaction(signature2);

    console.log("Transaction proposal created: ", signature2);
  });
```

### Vote on the transaction proposal (2 minutes)

Let's now vote on the transaction proposal we just made using the two Keypairs we created at the start of this tutorial: creator and secondMember.

```typescript
  it("Vote on the created proposal", async () => {
    const transactionIndex =
      await multisig.accounts.Multisig.fromAccountAddress(
        connection,
        multisigPda
      ).then((info) => Number(info.transactionIndex));

    const signature1 = await multisig.rpc.proposalApprove({
      connection,
      feePayer: creator,
      multisigPda,
      transactionIndex: BigInt(transactionIndex),
      member: creator,
    });

    await connection.confirmTransaction(signature1);

    const signature2 = await multisig.rpc.proposalApprove({
      connection,
      feePayer: creator,
      multisigPda,
      transactionIndex: BigInt(transactionIndex),
      member: secondMember,
    });

    await connection.confirmTransaction(signature2);
  });
```

### Execute the transaction (2 minutes)

Now the most important part, actually executing that transaction we proposed.

```typescript
  it("Execute the proposal", async () => {
    const transactionIndex =
      await multisig.accounts.Multisig.fromAccountAddress(
        connection,
        multisigPda
      ).then((info) => Number(info.transactionIndex));

    const [proposalPda] = multisig.getProposalPda({
      multisigPda,
      transactionIndex: BigInt(transactionIndex),
    });
    const signature = await multisig.rpc.vaultTransactionExecute({
      connection,
      feePayer: creator,
      multisigPda,
      transactionIndex: BigInt(transactionIndex),
      member: creator.publicKey,
      signers: [creator],
      sendOptions: { skipPreflight: true },
    });

    await connection.confirmTransaction(signature);
    console.log("Transaction executed: ", signature);
  });
  
// Don't forget to close the describe block here
});
```

## Start a local validator (1 minute)

Now that you have a completed flow, let's actually execute these transactions on chain.\
For the purpose of this tutorial, we are going to do so on a local Solana instance.

If you do not yet have the Solana CLI installed, please do so by reading the following [guide](https://docs.solana.com/cli/install-solana-cli-tools).

Now, start up a local validator with the Squads V4 program preloaded.

**Note**: You will also have to clone the program config account from mainnet.

```
solana-test-validator --url m --clone-upgradeable-program SQDS4ep65T869zMMBKyuUq6aD6EgTu8psMjkvj52pCf -c BSTq9w3kZwNwpBXJEvTZz2G9ZTNyKBvoSeXMvwb4cNZr -c Fy3YMJCvwbAXUgUM5b91ucUVA3jYzwWLHL3MwBqKsh8n
```

## &#x20;Set Your Environment to Devnet (Optional, 1 minute)

If you run into issues creating a local validator and cloning the necessary accounts, you can optionally use Solana's devnet cluster. This is a useful alternative because all needed accounts will already be available.

To switch to devnet, edit the `connection` variable you defined earlier in the guide:

<pre class="language-typescript"><code class="lang-typescript"><strong>const connection = new Connection("http://localhost:8899", "confirmed");
</strong></code></pre>

When using devnet, you may run into rate limit issues when attempting to request an airdrop. To circumvent this, we can use the keypair from our Solana CLI, and manually fund any keypairs we create. To do this, we can refactor the beginning of our script to accomplish this:

```typescript
// Add these two dependencies
import path from "path";
import dotenv from "dotenv";

dotenv.config();

// Add this before you define `describe`
const keyFileContents = JSON.parse(
  readFileSync(path.join(process.env.HOME, ".config/solana/id.json")).toString()
);

const creator = Keypair.fromSecretKey(new Uint8Array(keyFileContents));
const secondMember = Keypair.generate();
```

and then add this snippet at the beginning of your first test:

```typescript
try {
    // Attempt an airdrop
    await connection.requestAirdrop(
      secondMember.publicKey,
      1 * LAMPORTS_PER_SOL
    );
} catch (e) {
    // If it fails due to rate limits, send from the filesystem keypair
    console.log("airdrop failed");

    const tx = new VersionedTransaction(
      new TransactionMessage({
        payerKey: creator.publicKey,
        recentBlockhash: await (
          await connection.getLatestBlockhash()
        ).blockhash,
        instructions: [
          SystemProgram.transfer({
            fromPubkey: creator.publicKey,
            toPubkey: secondMember.publicKey,
            lamports: 1_000_000,
          }),
        ],
      }).compileToV0Message()
    );

    tx.sign([creator]);

    console.log("✨ Sending SOL...");
    await connection.sendTransaction(tx);
    console.log("✅ SOL sent.");
}
```

## Execute the script

Okay, let's execute the script and see what happens.

```
yarn test
```

If you are encountering any issues here, try using another version of Node.js (above 20.xx). Additionally, switching SDK versions (to `2.1.1` or `2.1.0`) may alleviate any ESM resoultion issues.

If you get a "fetch failed" error, make sure your local validator is running.

## Visualize your transactions

Once the tests have passed, you can go to the [Solana Explorer](https://explorer.solana.com/?cluster=custom\&customUrl=http%3A%2F%2Flocalhost%3A8899) and visualize your transactions by pasting their signature in the search bar and modifying the cluster endpoint to the one you want (mainnet, devnet, localnet...).

### What can I do from here?

<table data-view="cards"><thead><tr><th></th><th></th><th></th></tr></thead><tbody><tr><td></td><td><a href="/pages/gZ4PKNPW7HGaEDjpfHSG">Read more about development on Squads</a></td><td></td></tr><tr><td></td><td><a href="https://discord.com/invite/squadsprotocol">Join the Squads Discord</a></td><td></td></tr></tbody></table>


# Building with Next.js

Get started building with Squads in a Next.js app within 10 minutes

## Set up your workspace (1 minute)

**Important note**: You can find the code for this quickstart guide [here](https://github.com/Squads-Protocol/v4-examples/blob/main/typescript/main.ts).

Let's set up a new Next.js project.&#x20;

```
npx create-next-app squads-quickstart-next
```


# Building with Node

Get started building with Squads in a Node.js app


# More Examples

Extra examples for the Squads v4 SDK


# Overview

Build with the Squads v4 Typescript SDK

This section is made for developers wanting to integrate Squads Protocol into their own projects by interacting with v4.

It is structured as straightforward as possible with two sections, with the first being how to read data from the v4 program and the second being how to interact with it. In each section you will be able to find a detailed list of every account and instruction included in the Squads v4 SDK and Crate.

### Program ID

The Squads V4 program is deployed on the Solana mainnet-beta cluster.

```
SQDS4ep65T869zMMBKyuUq6aD6EgTu8psMjkvj52pCf
```

### Interacting

Here are different ways to use the SDK:

* `multisig.instructions`: This will return selected instructions, to be processed and sent by your client.
* `multisig.rpc` : This will build selected instructions, put it in a transaction, and send immediately.
* `multisig.transactions`: This will create selected instructions, and return a VersionedTransaction with the instruction added.
* `multisig.accounts`: Various account types within the Squads program, and utility methods for working with them
* `multisig.utils`: Provides helper functions for working with Squads
* `multisig.types`: Various types related to Squads

### Table of Contents

Here is a list of the different categories this section contains.

#### Reading data from Squads (Accounts)

* [Read Multisig data](/main/development/typescript/accounts/multisig)
* [Read Transaction data](/main/development/typescript/accounts/transactions)
* [Read Proposal data](/main/development/typescript/accounts/proposal)

#### Interact with the Squads program (Instructions)

* [Create Multisig](/main/development/typescript/instructions/create-multisig)
* [Add Member](/main/development/typescript/instructions/controlled-multisig-instructions/add-member)
* [Add Spending Limit](/main/development/typescript/instructions/controlled-multisig-instructions/add-spending-limit)
* [Remove Spending Limit](/main/development/typescript/instructions/controlled-multisig-instructions/remove-spending-limit)
* [Create Vault Transaction](/main/development/typescript/instructions/create-vault-transaction)
* [Create Proposal](/main/development/typescript/instructions/create-proposal)
* [Approve Transaction](/main/development/typescript/instructions/approve-proposal)
* [Reject Proposal](/main/development/typescript/instructions/reject-proposal)
* [Cancel Proposal](/main/development/typescript/instructions/cancel-proposal)
* [Execute Transaction](/main/development/typescript/instructions/execute-vault-transaction)


# Guides


# Create a Squad and execute your first transaction

Using multisigCreateV2 and Vault Transactions to execute your first actions with Squads


# Execute a batch of transactions

Leverage batches to couple transactions


# Reclaim transaction rent


# Add members and change threshold


# Instructions


# Create Multisig

Create a Squads multisig

{% hint style="warning" %}
Be sure to use `multisigCreateV2`, rather than the deprecated `multisigCreate`
{% endhint %}

This instruction will create a Multisig account with the necessary fields. This instruction requires that both the `creator` of the multisig, and the `createKey` be signers.

## Example

<pre class="language-typescript"><code class="lang-typescript">import * as multisig from "@sqds/multisig";
import { Connection, Keypair } from "@solana/web3.js";

// Defines permissions enum
const { Permission, Permissions } = multisig.types;

async function main() {
<strong>    // Cluster Connection
</strong><strong>    // Required argument if you use the .rpc method
</strong>    const connection = new Connection("&#x3C; your rpc here >");
    
    // Random Public Key that will be used to derive a multisig PDA
    // This will need to be a signer on the transaction
    const createKey = Keypair.generate().publicKey;
    
    // Creator should be a Keypair or a Wallet Adapter wallet
    const creator = Keypair.generate();
    
    // Derive the multisig PDA
    const [multisigPda] = multisig.getMultisigPda({
        createKey,
    });
    
    const programConfigPda = multisig.getProgramConfigPda({})[0];

    const programConfig =
        await multisig.accounts.ProgramConfig.fromAccountAddress(
          connection,
          programConfigPda
        );

    const configTreasury = programConfig.treasury;
    
    const ix = await multisig.instructions.multisigCreateV2({
        // Must sign the transaction, unless the .rpc method is used.
        createKey: createKey.publicKey,
        // The creator &#x26; fee payer
        creator: creator.publicKey,
        // The PDA of the multisig you are creating, derived by a random PublicKey
        multisigPda,
        // Here the config authority will be the system program
        configAuthority: null,
        // Create without any time-lock
        timeLock: 0,
        // List of the members to add to the multisig
        members: [{
                // Members Public Key
                key: creator.publicKey,
                // Granted Proposer, Voter, and Executor permissions
                permissions: Permissions.all(),
            },
            {
                key: secondMember.publicKey,
                // Member can only add votes to proposed transactions
                permissions: Permissions.fromPermissions([Permission.Vote]),
            },
        ],
        // This means that there needs to be 2 votes for a transaction proposal to be approved
        threshold: 2,
        // This is for the program config treasury account
        treasury: configTreasury,
        // Rent reclaim account
        rentCollector: null
    });
    
    console.log("Multisig created: ", signature)
}
</code></pre>

### Notes

* Must specify permissions upfront for each member
* Only specify a `configAuthority` if you want one admin key to be able to override all config
* `createKey` must be a signer if using methods other than `.rpc`


# Create Config Transaction

Change global config on your multisig

Config Transactions are a little more complicated than the other ones, as there are multiple configuration arguments that you can supply to such a transaction.

Here are list of action types you can execute with Config Transactions, and their arguments:

* **AddMember**&#x20;
  * *new\_member* (**Member**): Key & corresponding permissions for the member you want to add.
* **RemoveMember**&#x20;
  * *old\_member* (**PublicKey**): Key of the member that you want to remove
* **ChangeThreshold**&#x20;
  * *new\_threshold* (**number**): New approval threshold that you want to enforce
* **SetTimeLock**&#x20;
  * *new\_time\_lock* (**number**): Change the `time_lock` of the multisig.&#x20;
* **AddSpendingLimit**
  * *create\_key* (**PublicKey**): Key that is used to seed the SpendingLimit PDA.&#x20;
  * *vault\_index* (**number**): The index of the vault that the spending limit is for.
  * *mint* (**PublicKey**): The token mint the spending limit is for.
  * *amount* (**number**): The amount of tokens that can be spent in a period. This is respective of the mint's decimals. (i.e USDC has 6 decimals, so 1 USDC would be 1\_000\_000)
  * *members* (**PublicKey\[]**): Members of the multisig that can use the spending limit. In case a member is removed from the multisig, the spending limit will remain existent, but unusable until deleted.
  * *destinations* (**PublicKey\[]**): The destination addresses the spending limit is allowed to sent funds to. If empty, funds can be sent to any address.
* **RemoveSpendingLimit**
  * *spending\_limit* (**Pubkey**): Account for the spending limit you want to remove.
* **SetRentCollector**&#x20;
  * *new\_rent\_collector* (**PublicKey | null**): Set the `rent_collector` config parameter of the multisig.

## Example (Change Threshold)

<pre class="language-typescript"><code class="lang-typescript"><strong>import * as multisig from "@sqds/multisig";
</strong><strong>import { Connection, PublicKey } from "@solana/web3.js";
</strong>
async function main(member: PublicKey) {
    // Cluster Connection
    // Required argument if you use the .rpc method
    const connection = new Connection("&#x3C;your rpc url>");
    
    // If you've saved your createKey, you can define it as a static PublicKey
    const createKey = new PublicKey("&#x3C;your createkey>")
    
    // Derive the multisig PDA
    const [multisigPda] = multisig.getMultisigPda({
        createKey,
    });
    // or
    // const multisigPda = new PublicKey("&#x3C;your multisig key>");
    
    // Derive the PDA of the Squads Vault
    const [vaultPda] = multisig.getVaultPda({
        multisigPda,
        index: 0,
    });
    
    // Get deserialized multisig account info
    const multisigInfo = await multisig.accounts.Multisig.fromAccountAddress(
      connection,
      multisigPda
    );

    // Get the updated transaction index
    const currentTransactionIndex = Number(multisigInfo.transactionIndex);
    const newTransactionIndex = BigInt(currentTransactionIndex + 1);
    
    // Create a config transaction, of type changeThreshold
    const ix = await multisig.instructions.configTransactionCreate({
        feePayer: member,
        multisigPda: controlledMultisigPda,
        // Replace with current index if needed
        transactionIndex: newTransactionIndex,
        // Member must have at least "Proposer" permissions
        creator: member,
        actions: [{
            // Type of action
            __kind: "ChangeThreshold",
            newThreshold: 3
        }],
    }),
}
</code></pre>

### Notes

* This is instruction is used for changing config in most multisigs (ones with no configAuthority)
* Exectuing certain config transactions will invalidate other Active transactions (both config and vault type). This behavior is present with AddMember, RemoveMember, ChangeThreshold, and SetTimeLock
* Multiple actions can be specified between instructions
* For more information, see the [Config Transaction](/main/development/typescript/accounts/transactions#config-transactions) section and [reference](/main/development/reference/accounts#config-transaction).


# Create Vault Transaction

Add arbitrary transactions to execute through your multisig

Vault Transactions allow you to take actions from programs all across Solana, and execute them inside of your multisig.&#x20;

To create one, you need the latest transaction index from your multisig account, a message with the instructions you want to execute, and the index of the vault you'd like to execute from. Additionally, you can also add `n` number of ephemeral signers, in case that extra signatures are required.&#x20;

## Example

```typescript
import * as multisig from "@sqds/multisig";
import { PublicKey, Connection, SystemProgram, TransactionMessage } from "@solana/web3.js";

async function main(member: PublicKey) {
    // Cluster Connection
    const connection = new Connection("<your rpc url>");
    
    // If you've saved your createKey, you can define it as a static PublicKey
    const createKey = new PublicKey("<your createkey>")
    
    // Derive the multisig PDA
    const [multisigPda] = multisig.getMultisigPda({
        createKey,
    });
    // or
    // const multisigPda = new PublicKey("<your multisig key>");
    
    // Derive the PDA of the Squads Vault
    const [vaultPda] = multisig.getVaultPda({
        multisigPda,
        index: 0,
    });
    
    // Get deserialized multisig account info
    const multisigInfo = await multisig.accounts.Multisig.fromAccountAddress(
      connection,
      multisigPda
    );

    // Get the updated transaction index
    const currentTransactionIndex = Number(multisigInfo.transactionIndex);
    const newTransactionIndex = BigInt(currentTransactionIndex + 1);
    
    const to = new PublicKey("<>");
    
    const transferInstruction = SystemProgram.transfer({
        // The transfer is being signed by the vault that's executing
        fromPubkey: vaultPda,
        toPubkey: to,
        lamports: 1 * LAMPORTS_PER_SOL
    });
    
    // Build a message with instructions we want to execute
    const testTransferMessage = new TransactionMessage({
        payerKey: vaultPda,
        recentBlockhash: (await connection.getLatestBlockhash()).blockhash,
        instructions: [transferInstruction],
    });
    
    const ix = await multisig.instructions.vaultTransactionCreate({
        multisigPda,
        transactionIndex,
        creator: member,
        vaultIndex: 0,
        ephemeralSigners: 0,
        transactionMessage: testTransferMessage,
        memo: "Our first transfer!"
    });
}
```

### Notes

* Vault transactions are built with a TransactionMessage containing the instructions you want to execute
* Proposal accounts must be created to successfully vote and execute vault transactions
* For more information, see the [Vault Transaction](/main/development/typescript/accounts/transactions#vault-transactions) section and [reference](/main/development/reference/accounts#vault-transaction).


# Create Proposal

Handle consensus and enable execution for Transactions

Proposals are tied to transactions one-to-one, enabling consensus and subsequent execution. They use the `transactionIndex` for mapping, which means that the index you used to create a transaction will be used to create a proposal for it.

## Example

```typescript
import * as multisig from "@sqds/multisig";
import { Connection, PublicKey } from "@solana/web3.js"

async function main(member: PublicKey) {
    // Cluster Connection
    const connection = new Connection("<your rpc url>");
    
    // If you've saved your createKey, you can define it as a static PublicKey
    const createKey = new PublicKey("<your createkey>")
    
    // Derive the multisig PDA
    const [multisigPda] = multisig.getMultisigPda({
        createKey,
    });
    // or
    // const multisigPda = new PublicKey("<your multisig key>");
    
    // Get deserialized multisig account info
    const multisigInfo = await multisig.accounts.Multisig.fromAccountAddress(
      connection,
      multisigPda
    );

    // Get the current transaction index
    const transactionIndex = Number(multisigInfo.transactionIndex);
    // or, if this is tied to your first transaction
    // const transactionIndex = 1n;
    
    const ix = await multisig.instructions.proposalCreate({
        multisigPda,
        transactionIndex,
        // Must have "Voter" permissions at minimum
        creator: member,
    });
}
```

### Notes

* Proposal accounts must be created to successfully vote and execute vault transactions
* For more information, see the [Vault Transaction](/main/development/typescript/accounts/transactions#vault-transactions) section and [reference](/main/development/reference/accounts#vault-transaction).


# Approve Proposal

Cast an approval on a given transaction's proposal

Proposals require approvals equal to the threshold for the underlying transaction to be executed. Any qualifying member key with "Voter" permissions can cast an approval on proposal. Additionally, an approval will fail if the proposal is stale (Proposal `transactionIndex` < Multisig `staleTransactionIndex`).

## Example

```typescript
import * as multisig from "@sqds/multisig";
import { Connection, PublicKey } from "@solana/web3.js"

async function main(member: PublicKey) {
    // Cluster Connection
    const connection = new Connection("<your rpc url>");
    
    // If you've saved your createKey, you can define it as a static PublicKey
    const createKey = new PublicKey("<your createkey>")
    
    // Derive the multisig PDA
    const [multisigPda] = multisig.getMultisigPda({
        createKey,
    });
    // or
    // const multisigPda = new PublicKey("<your multisig key>");
    
    // Get deserialized multisig account info
    const multisigInfo = await multisig.accounts.Multisig.fromAccountAddress(
      connection,
      multisigPda
    );

    // Get the current transaction index
    const transactionIndex = Number(multisigInfo.transactionIndex);
    // or, if this is tied to your first transaction
    // const transactionIndex = 1n;
    
    const ix = await multisig.instructions.proposalApprove({
      multisigPda,
      transactionIndex,
      // Member must have "Voter" permissions
      member: member,
    });
}
```

### Notes

* Approving members must have "Voter" permissions
* A Proposal can not be approved if the transaction index is less than the stale transaction index (see [Multisig reference](/main/development/reference/accounts#multisig))


# Reject Proposal

Cast a rejection on a given transaction's proposal

Opposite of approval, any qualifying member key with "Voter" permissions can cast a rejection on proposal. Additionally, a rejection will fail if the proposal is stale (Proposal `transactionIndex` < Multisig `staleTransactionIndex`).

## Example

```typescript
import * as multisig from "@sqds/multisig";
import { Connection, PublicKey } from "@solana/web3.js"

async function main(member: PublicKey) {
    // Cluster Connection
    const connection = new Connection("<your rpc url>");
    
    // If you've saved your createKey, you can define it as a static PublicKey
    const createKey = new PublicKey("<your createkey>")
    
    // Derive the multisig PDA
    const [multisigPda] = multisig.getMultisigPda({
        createKey,
    });
    // or
    // const multisigPda = new PublicKey("<your multisig key>");
    
    // Get deserialized multisig account info
    const multisigInfo = await multisig.accounts.Multisig.fromAccountAddress(
      connection,
      multisigPda
    );

    // Get the current transaction index
    const transactionIndex = Number(multisigInfo.transactionIndex);
    // or, if this is tied to your first transaction
    // const transactionIndex = 1n;
    
    const ix = await multisig.instructions.proposalReject({
      multisigPda,
      transactionIndex,
      // Member must have "Voter" permissions
      member: member,
    });
}
```

### Notes

* Rejecting members must have "Voter" permissions
* A Proposal can not be rejected if the transaction index is less than the stale transaction index (see [Multisig reference](/main/development/reference/accounts#multisig))


# Cancel Proposal

Cancel a proposal that is stale, or of approved status

Cancelling a proposal will invalidate it. This requires that the member conducting the action have `Voter` permissions, the proposal is of `Approved` status, or the proposal is stale (Proposal `transactionIndex` < Multisig `staleTransactionIndex`).

## Example

<pre class="language-typescript"><code class="lang-typescript">import * as multisig from "@sqds/multisig";
import { Connection, PublicKey } from "@solana/web3.js"

<strong>async function main(member: PublicKey) {
</strong>    // Cluster Connection
    const connection = new Connection("&#x3C;your rpc url>");
    
    // If you've saved your createKey, you can define it as a static PublicKey
    const createKey = new PublicKey("&#x3C;your createkey>")
    
    // Derive the multisig PDA
    const [multisigPda] = multisig.getMultisigPda({
        createKey,
    });
    // or
    // const multisigPda = new PublicKey("&#x3C;your multisig key>");
    
    // Get deserialized multisig account info
    const multisigInfo = await multisig.accounts.Multisig.fromAccountAddress(
      connection,
      multisigPda
    );

    // Get the current transaction index
    const transactionIndex = Number(multisigInfo.transactionIndex);
    // or, if this is tied to your first transaction
    // const transactionIndex = 1n;
    
    const ix = await multisig.instructions.proposalCancel({
        multisigPda,
        transactionIndex,
        // Member must have "Voter" permissions
        member: member,
    });
}
</code></pre>

### Notes

* Cancelling members must have "Voter" permissions
* A Proposal can be cancelled if stale. The transaction index must be less than the stale transaction index (see [Multisig reference](/main/development/reference/accounts#multisig))


# Execute Config Transaction

Execute an approved Config Transaction

Executing a config transaction will simply execute the action specified in the Config Transaction. This execution can range from a simple account field change on the Multisig, to multiple field changes and corresponding account creation.&#x20;

This instruction requires that the Proposal accounts for the transaction is of `Approved` status, and the member running the instruction has `Executor` permissions.

## Example

```typescript
import * as multisig from "@sqds/multisig";
import { Connection, PublicKey } from "@solana/web3.js"

async function main(member: PublicKey) {
    // Cluster Connection
    const connection = new Connection("<your rpc url>");
    
    // If you've saved your createKey, you can define it as a static PublicKey
    const createKey = new PublicKey("<your createkey>")
    
    // Derive the multisig PDA
    const [multisigPda] = multisig.getMultisigPda({
        createKey,
    });
    // or
    // const multisigPda = new PublicKey("<your multisig key>");
    
    // Get deserialized multisig account info
    const multisigInfo = await multisig.accounts.Multisig.fromAccountAddress(
      connection,
      multisigPda
    );

    // Get the current transaction index
    const transactionIndex = Number(multisigInfo.transactionIndex);
    // or, if this is tied to your first transaction
    // const transactionIndex = 1n;
    
    const ix = multisig.instructions.configTransactionExecute({
        multisigPda,
        transactionIndex: newTransactionIndex,
        // Member must have "Executor" permissions
        member: creator.publicKey,
    });
}
```

### Notes

* Member must have "Executor" permissions
* Requires the corresponding proposal to be of `Approved` status
* Will execute the specified action in the [Config Transaction](/main/development/reference/accounts#config-transaction) account


# Execute Vault Transaction

Execute an approved vault transaction

Executing a vault transaction will take all of the instructions saved in the `message` field of the corresponding Vault Transaction account, and atomically execute them via CPI. This requires that the Proposal accounts for the transaction is of `Approved` status, and the member running the instruction has `Executor` permissions.

## Example

```typescript
import * as multisig from "@sqds/multisig";
import { Connection, PublicKey } from "@solana/web3.js"

async function main(member: PublicKey) {
    // Cluster Connection
    const connection = new Connection("<your rpc url>");
    
    // If you've saved your createKey, you can define it as a static PublicKey
    const createKey = new PublicKey("<your createkey>")
    
    // Derive the multisig PDA
    const [multisigPda] = multisig.getMultisigPda({
        createKey,
    });
    // or
    // const multisigPda = new PublicKey("<your multisig key>");
    
    // Get deserialized multisig account info
    const multisigInfo = await multisig.accounts.Multisig.fromAccountAddress(
      connection,
      multisigPda
    );

    // Get the current transaction index
    const transactionIndex = Number(multisigInfo.transactionIndex);
    // or, if this is tied to your first transaction
    // const transactionIndex = 1n;
    
    const ix = await multisig.instructions.vaultTransactionExecute({
        multisigPda,
        transactionIndex,
        // Member must have "Executor" permissions
        member: member,
    });
}
```

### Notes

* Member must have "Executor" permissions
* Requires the corresponding proposal to be of `Approved` status
* Will execute each instruction via CPI, requiring the instructions to be valid
  * Since this is an asynchronous process, some instructions may become stale due to external program checks like slippage.


# Create Batch

Creating a batch for coupling transactions

Batches allow you to approve, reject, cancel, or execute multiple transactions with a single action.&#x20;

When working with batches, you can follow this general procedure:

1. Create a batch&#x20;
2. Create a proposal as a draft&#x20;
3. Add transactions to the batch&#x20;
4. Activate the proposal&#x20;
5. Vote on the proposal&#x20;
6. Execute the proposal

## Example

```typescript
import * as multisig from "@sqds/multisig";
import { Connection, PublicKey } from "@solana/web3.js"

async function main(member: PublicKey) {
    // Cluster Connection
    const connection = new Connection("<your rpc url>");
    
    // If you've saved your createKey, you can define it as a static PublicKey
    const createKey = new PublicKey("<your createkey>")
    
    // Derive the multisig PDA
    const [multisigPda] = multisig.getMultisigPda({
        createKey,
    });
    // or
    // const multisigPda = new PublicKey("<your multisig key>");
    
    // Get deserialized multisig account info
    const multisigInfo = await multisig.accounts.Multisig.fromAccountAddress(
      connection,
      multisigPda
    );

    // Get the current transaction index
    const transactionIndex = Number(multisigInfo.transactionIndex);
    // or, if this is tied to your first transaction
    // const transactionIndex = 1n;
    
    // Create the batch, which we can add transactions to
    const batchCreateIx = await multisig.instructions.batchCreate({
        batchIndex: transactionIndex,
        creator: member,
        multisigPda,
        vaultIndex: 0,
        memo: "Creating a batch",
    });
    
    // Create the proposal for voting on the transactions
    const proposalCreateIx = await multisig.instructions.proposalCreate({
        multisigPda,
        // Created with the same index as the batch
        transactionIndex: transactionIndex,
        creator: member,
        // Proposal is created as a draft
        isDraft: true,
    });
}
```

### Notes

* Batches are for coupling multiple vault transactions under one proposal
* They have their own `transactionIndex` context, starting at 1


# Add To Batch

Adding a transaction to an active batch account

When adding to a batch, a few things need to be kept in mind:

* When a new transaction is added, a vault transaction will be initialized with this method, and the batch's local index will be incremented
* The `batchIndex` field refers to the global index of the batch account (like any other transaction), while `transactionIndex` refers to the batch's inner index for the transaction being initialized (will start at 1 for the first transaction)

## Example

```typescript
import * as multisig from "@sqds/multisig";
import { Connection, PublicKey } from "@solana/web3.js"

async function main(member: PublicKey) {
    // Cluster Connection
    const connection = new Connection("<your rpc url>");
    
    // If you've saved your createKey, you can define it as a static PublicKey
    const createKey = new PublicKey("<your createkey>")
    
    // Derive the multisig PDA
    const [multisigPda] = multisig.getMultisigPda({
        createKey,
    });
    // or
    // const multisigPda = new PublicKey("<your multisig key>");
    
    // Get deserialized multisig account info
    const multisigInfo = await multisig.accounts.Multisig.fromAccountAddress(
      connection,
      multisigPda
    );

    // Get the current transaction index
    const transactionIndex = Number(multisigInfo.transactionIndex);
    // or, if this is tied to your first transaction
    // const transactionIndex = 1n;
    
    const instruction = SystemProgram.transfer({
        fromPubkey: vaultPda,
        toPubkey: creator.publicKey,
        lamports: 1,
    });
      // This message contains the instructions that the transaction is going to execute
    const transferMessage = new TransactionMessage({
        payerKey: vaultPda,
        recentBlockhash: (await connection.getLatestBlockhash()).blockhash,
        instructions: [instruction],
    });
    
    // Add transaction to the batch
    const batchAddIx = await multisig.instructions.batchAddTransaction({
        // Index of the batch globally, like any other transaction
        batchIndex: BigInt(newTransactionIndex),
        multisigPda,
        vaultIndex: 0,
        transactionMessage: transferMessage,
        // Index of the transaction inside of the batch! Not globally. Starts at 1
        transactionIndex: 1,
        ephemeralSigners: 0,
        member: creator,
    });
}
```

### Notes

* A Vault Transaction is initialized when you add to a batch
* `batchIndex` field refers to a global index, while `transactionIndex` refers to the batch's inner index


# Close Vault Transaction Account

Reclaim rent from a stale, cancelled, or executed Vault Transaction

This instruction will reclaim rent from a Vault Transaction account, and close the account. This requires the transaction to be stale (`transactionIndex` < `staleTransactionIndex`), the  corresponding proposal to be Cancelled, or the transaction itself be Executed.

## Example

```typescript
import * as multisig from "@sqds/multisig";
import { Connection, PublicKey } from "@solana/web3.js"

async function main(member: PublicKey) {
    // Cluster Connection
    const connection = new Connection("<your rpc url>");
    
    // If you've saved your createKey, you can define it as a static PublicKey
    const createKey = new PublicKey("<your createkey>")
    
    // Derive the multisig PDA
    const [multisigPda] = multisig.getMultisigPda({
        createKey,
    });
    // or
    // const multisigPda = new PublicKey("<your multisig key>");
    
    // Get deserialized multisig account info
    const multisigInfo = await multisig.accounts.Multisig.fromAccountAddress(
      connection,
      multisigPda
    );

    // Get the current transaction index
    const transactionIndex = Number(multisigInfo.transactionIndex);
    // or, if this is tied to your first transaction
    // const transactionIndex = 1n;
    
    const ix = await multisig.instructions.vaultTransactionAccountsClose({
        multisigPda,
        // This value should be the current rent collector Public Key of the Multisig.
        rentCollector: vaultPda,
        transactionIndex,
        multisig.programId,
    });
}
```

### Notes

* Vault Transactions can be reclaimed when they are stale (`transactionIndex` < `staleTransactionIndex`), or of status Cancelled or Executed.
* Reclaimed rent will be returned to the set rent collector on the Multisig account.


# Controlled Multisig Instructions

Instructions that are only accessible to multisigs with a Config Authority.

{% hint style="info" %}
Most multisigs are not Controlled Multisigs. To learn more, view the [reference](/main/development/reference/controlled-multisigs).
{% endhint %}

There instructions below are only accessible for Squads function as Controlled Multisigs, meaning the multisig has a [Config Authority](/main/development/reference/accounts#multisig).

For most multisigs, the following instructions can be achieved with a [Config Transaction](/main/development/typescript/instructions/create-config-transaction).




---

[Next Page](/main/llms-full.txt/1)

