# Multisig

#### Multisig Addresses & Accounts

Each multisig created is referenced by an address that is a PDA. The PDA is derived from a `createKey` which is also saved in the multisig account for later derivation. The `createKey` can be random, or even a wallet's public key, but it is important to note this `createKey` so one can easily reference or fetch multisigs for later use.

The Multisig address is derived via the Solana Web3 function `findProgramAddress`, using the following seeds and format:

```
anchor.web3.PublicKey.findProgramAddress([
    anchor.utils.bytes.utf8.encode("squad"),
    createKey.toBuffer(),
    anchor.utils.bytes.utf8.encode("multisig")
], programId)
```

The format for multisig PDAs is:

```
["squad", createKey, "multisig"]
```

For a more in-depth look at what data is being store on-chain for a multisig, you can inspect the [Ms struct in the Squads MPL repo](https://github.com/Squads-Protocol/squads-mpl/blob/main/programs/squads-mpl/src/state/ms.rs#L7).
