> **Can't find what you're looking for?** Use `search_docs` on the docs MCP server at `https://viem-gdbqz16fk-wevm.vercel.app/api/mcp` to find what you need.

# Rotate Multisig Owners

## Overview

The initial configuration permanently derives the multisig address. Updating the current
configuration changes which owners can approve future transactions without changing that address.

This example assumes that `multisig` has already been initialized.

## Recipes

### Approve the New Configuration

Put [`multisig.updateConfig.call`](/tempo/actions/multisig.updateConfig) in the first approval. Each
current owner then reuses the returned request.

:::code-group
```ts twoslash [example.ts]
import { Account, Actions } from 'viem/tempo'
import { client } from './multisig.config'

// 1. Load the current and replacement owners.
const owner_1 = Account.fromSecp256k1(
  '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'
)
const owner_2 = Account.fromSecp256k1(
  '0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d'
)
const newOwner_1 = Account.fromSecp256k1(
  '0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a'
)
const newOwner_2 = Account.fromSecp256k1(
  '0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6'
)

// 2. Recreate the initialized multisig from its stable address.
const multisig = Account.fromMultisig(
  '0x7b378778e4b0dfd068bc74979508219e2ba2074c'
)

// 3. Store the first current owner's approval for the update.
const pending = await client.multisig.approveTransaction({
  account: owner_1,
  calls: [
    Actions.multisig.updateConfig.call({
      owners: [
        { owner: newOwner_1.address, weight: 1 },
        { owner: newOwner_2.address, weight: 1 },
      ],
      threshold: 2,
    }),
  ],
  multisig,
})

// 4. Reach quorum with the second current owner.
const success = await client.multisig.approveTransaction({
  ...pending.request,
  account: owner_2,
})
```

```ts twoslash [multisig.config.ts] filename="multisig.config.ts"
// [!include ~/snippets/tempo/multisig.config.ts:setup]
```
:::

### Approve with the New Owners

Keep using the original account address. Preparation reads its latest configuration and version,
so the new owners can coordinate the next request.

```ts twoslash
import { Account } from 'viem/tempo'
import { client } from './multisig.config'

// 1. Create the replacement owner signers.
const newOwner_1 = Account.fromSecp256k1(
  '0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a'
)
const newOwner_2 = Account.fromSecp256k1(
  '0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6'
)

// 2. Keep using the original multisig address.
const multisig = Account.fromMultisig(
  '0x7b378778e4b0dfd068bc74979508219e2ba2074c'
)

// 3. Store the first new owner's approval.
const pending = await client.multisig.approveTransaction({
  account: newOwner_1,
  calls: [
    { to: '0xcafebabecafebabecafebabecafebabecafebabe', value: 1n },
  ],
  multisig,
})

// 4. Reach quorum with the second new owner.
const success = await client.multisig.approveTransaction({
  ...pending.request,
  account: newOwner_2,
})
```

## Best Practices

### Keep the Stable Account Address

Do not derive another account from the rotated configuration. That configuration produces a
different address. Store the original address and reconstruct it with `Account.fromMultisig(address)`.

### Read the Current Configuration

Use [`multisig.getConfig`](/tempo/actions/multisig.getConfig) to display active owners, threshold,
or version. Transaction preparation resolves these values before signing.

## See More

<Cards>
  <Card icon="lucide:square-function" title="multisig.updateConfig" description="Replace a multisig account's current configuration." to="/tempo/actions/multisig.updateConfig" />

  <Card icon="lucide:settings" title="multisig.getConfig" description="Read the active owners, threshold, and version." to="/tempo/actions/multisig.getConfig" />

  <Card icon="lucide:send" title="Send Transactions" description="Coordinate approvals from the account's current owners." to="/tempo/guides/multisig/send" />
</Cards>
