# Multisig

## Multisig

The multisig will be used to govern program and IDL upgrades for Serum Programs, including the multisig itself.&#x20;

You can access multisig at: <http://multisig.projectserum.com/>

![](https://593228139-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MX0KCPgI-ecLKfYa3jX%2F-MYwam-y1CFvZ849c3N5%2F-MYwdUdhNrxFrvsNSgxy%2Fimage.png?alt=media\&token=24f6962c-65cf-40ae-9a0e-e21a1cb09324)

For now, the multisig being used on the mainnet is this address:

```
3uztpEgUmvirDBYRXgDamUDZiU5EcgTwArQ2pULtHJPC
```

The **program-derived-address** (i.e. the "authority" representing this multisig) is:

```
2bXuJdSb4AeAZTBY8NDtYnSbxXGjgjkMHw9dPS9gjK9r
```

{% hint style="info" %}
Smart Contract Source: <https://github.com/project-serum/multisig>
{% endhint %}

{% hint style="info" %}
UI Source: <https://github.com/project-serum/multisig-ui>
{% endhint %}

{% hint style="info" %}
Brief snippet on how the program works: <https://github.com/project-serum/multisig#multisig>
{% endhint %}

## Purpose

The primary motivation for the multisig is to manage program upgrades, but in order to use a multisig, the proper tooling must be in place:&#x20;

* (1) A multisig program&#x20;
* (2) Deterministic, verifiable builds&#x20;
* (3) A way for multisig holders to use the program (i.e. verify an upgrade against source, compiled bytecode, and then execute the upgrade)

Addressing (1): You can find the multisig repo here: <https://github.com/project-serum/multisig>

Addressing (2) is done with by building inside the docker image <https://hub.docker.com/repository/docker/projectserum/build> here. Programs written in the [Anchor](https://github.com/project-serum/anchor) can easily leverage this with the `anchor build --verifiable` and `anchor verify <program-id>` commands.\
\
Addressing (3) is done with the UI at <https://multisig.projectserum.com>.

With this tooling in place, future upgrades by any program can take advantage of them.&#x20;

## Brief Tutorial

{% hint style="danger" %}
Multisig is unaudited software. Use at your own risk.
{% endhint %}

1 - Go to <http://multisig.projectserum.com/>

![Welcome screen](https://593228139-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MX0KCPgI-ecLKfYa3jX%2F-MYwZJGIVukXdIPs7Rs-%2F-MYwZqpjbHmgIAwE5Edo%2Fimage.png?alt=media\&token=aeb72109-0d57-4395-b75d-fc1e14a7d730)

2 - Read and accept the pop-up Agreement:

> *No statement or warranty is provided in relation to the utility of this program, the safety of its code or its suitability for your use, and by using it, you agree to bear any risk associated with such potential vulnerabilities, including, but not limited to the potential loss of tokens.*

2A - If you have not done so already, press "**CONNECT WALLET**" on the upper-right of the page.

![](https://593228139-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MX0KCPgI-ecLKfYa3jX%2F-MYwZJGIVukXdIPs7Rs-%2F-MYw_NYQN2kgmh9wszBO%2Fimage.png?alt=media\&token=13583ea8-57f6-431b-ad70-a7b60ce2ca8d)

3 - To create a new multisig account, press on the large plus-sign circle ("+") on the bottom-right of the page.

4 - The New Multisig pop-up menu will appear. Input your desired Threshold and Participant (SPL wallet) address:

![New Multisig menu](https://593228139-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MX0KCPgI-ecLKfYa3jX%2F-MYwonqeywZ6EC7BwyM2%2F-MYx2L2dnMocB_LAWXie%2Fimage.png?alt=media\&token=e9e78a85-2a6a-4d27-8ce4-cf1e9cf39103)

{% hint style="warning" %}
If the New Multisig menu does not show the right number of Participant fields, try refreshing the page. Be sure to re-connect your wallet.
{% endhint %}

{% hint style="info" %}
If you are using [sollet.io](https://sollet.io) wallet, be sure to approve every action in the pop-up window or tab!
{% endhint %}

If you are successful in creating a multisig account, you will see a blue box on the bottom-left saying "Multisig created: \[*address*]".

4A - You can learn more about the Signer by pressing on the info circle to the right of the address. You will see the following box:

![Multisig Info (Signer) pop-up box](https://593228139-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MX0KCPgI-ecLKfYa3jX%2F-MYwam-y1CFvZ849c3N5%2F-MYweZSfLt1JTA2WpkCg%2Fimage.png?alt=media\&token=9bd0028e-c5e2-4c7a-a758-c724614cf635)

5 - To create a new transaction to be signed by the multisig, press the plus ("+") sign to the right of the address. You will see the following menu:

![New Transaction menu when you click the "+" arrow](https://593228139-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MX0KCPgI-ecLKfYa3jX%2F-MYwZJGIVukXdIPs7Rs-%2F-MYw_qHSW9ukkFTcTncY%2Fimage.png?alt=media\&token=c5b0cfd3-42d8-45cf-a5bc-4a86e3ae6f11)

6 - Upon selecting a new transaction and inputting the relevant fields (e.g. inputting the "Participant" addresses under the "Set owners" option), you will see in the main menu under your multisig address the "**APPROVE**" and "**EXECUTE**" buttons.

"**APPROVE**" signs the transaction on behalf of the participant. "Threshold" participants must first "**APPROVE**" in order to "**EXECUTE**" a transaction.

Once the threshold is reached, anyone can "**EXECUTE**". When you submit a transaction, you automatically "**APPROVE**".

![](https://593228139-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MX0KCPgI-ecLKfYa3jX%2F-MYwam-y1CFvZ849c3N5%2F-MYwdrBn0d1T7THQOvnS%2Fimage.png?alt=media\&token=28f70d73-064f-4482-a08f-af68d0fcba42)

![](https://593228139-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MX0KCPgI-ecLKfYa3jX%2F-MYwam-y1CFvZ849c3N5%2F-MYwdxrq5bfj1OK-5oo2%2Fimage.png?alt=media\&token=59e0306f-551a-4302-90a7-1289ee71d8be)
