> ## Documentation Index
> Fetch the complete documentation index at: https://docs.therootnetwork.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Multisig

## Calls

### approveAsMulti

Register approval for a dispatch to be made from a deterministic composite account if approved by a total of `threshold - 1` of `other_signatories`.

Payment: `DepositBase` will be reserved if this is the first approval, plus `threshold` times `DepositFactor`. It is returned once this dispatch happens or is cancelled.

The dispatch origin for this call must be *Signed*.

* `threshold`: The total number of approvals for this dispatch before it is executed.

* `other_signatories`: The accounts (other than the sender) who can approve this dispatch. May not be empty.

* `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is not the first approval, then it must be `Some`, with the timepoint (block number and transaction index) of the first approval transaction.

* `call_hash`: The hash of the call to be executed.

NOTE: If this is the final approval, you will want to use `as_multi` instead.

**Namespace**

```
api.tx.multisig.approveAsMulti
```

**Type**

```
function approveAsMulti(
  threshold: u16,
  other_signatories: Vec<SeedPrimitivesSignatureAccountId20>,
  maybe_timepoint: Option<PalletMultisigTimepoint>,
  call_hash: [u8;32],
  max_weight: WeightV1
)
```

### asMulti

Register approval for a dispatch to be made from a deterministic composite account if approved by a total of `threshold - 1` of `other_signatories`.

If there are enough, then dispatch the call.

Payment: `DepositBase` will be reserved if this is the first approval, plus `threshold` times `DepositFactor`. It is returned once this dispatch happens or is cancelled.

The dispatch origin for this call must be *Signed*.

* `threshold`: The total number of approvals for this dispatch before it is executed.

* `other_signatories`: The accounts (other than the sender) who can approve this dispatch. May not be empty.

* `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is not the first approval, then it must be `Some`, with the timepoint (block number and transaction index) of the first approval transaction.

* `call`: The call to be executed.

NOTE: Unless this is the final approval, you will generally want to use `approve_as_multi` instead, since it only requires a hash of the call.

Result is equivalent to the dispatched result if `threshold` is exactly `1`. Otherwise on success, result is `Ok` and the result from the interior call, if it was executed, may be found in the deposited `MultisigExecuted` event.

**Namespace**

```
api.tx.multisig.asMulti
```

**Type**

```
function asMulti(
  threshold: u16,
  other_signatories: Vec<SeedPrimitivesSignatureAccountId20>,
  maybe_timepoint: Option<PalletMultisigTimepoint>,
  call: WrapperKeepOpaque<Call>,
  store_call: bool,
  max_weight: WeightV1
)
```

### asMultiThreshold1

Immediately dispatch a multi-signature call using a single approval from the caller.

The dispatch origin for this call must be *Signed*.

* `other_signatories`: The accounts (other than the sender) who are part of the multi-signature, but do not participate in the approval process.

* `call`: The call to be executed.

Result is equivalent to the dispatched result.

**Namespace**

```
api.tx.multisig.asMultiThreshold1
```

**Type**

```
function asMultiThreshold1(
  other_signatories: Vec<SeedPrimitivesSignatureAccountId20>,
  call: Call
)
```

### cancelAsMulti

Cancel a pre-existing, on-going multisig transaction. Any deposit reserved previously for this operation will be unreserved on success.

The dispatch origin for this call must be *Signed*.

* `threshold`: The total number of approvals for this dispatch before it is executed.

* `other_signatories`: The accounts (other than the sender) who can approve this dispatch. May not be empty.

* `timepoint`: The timepoint (block number and transaction index) of the first approval transaction for this dispatch.

* `call_hash`: The hash of the call to be executed.

**Namespace**

```
api.tx.multisig.cancelAsMulti
```

**Type**

```
function cancelAsMulti(
  threshold: u16,
  other_signatories: Vec<SeedPrimitivesSignatureAccountId20>,
  timepoint: PalletMultisigTimepoint,
  call_hash: [u8;32]
)
```

## Storage

### calls

**Namespace**

```
api.query.multisig.calls
```

**Type**

```
function calls(
  [u8;32]
): Option<(WrapperKeepOpaque<Call>,SeedPrimitivesSignatureAccountId20,u128)>
```

### multisigs

The set of open multisig operations.

**Namespace**

```
api.query.multisig.multisigs
```

**Type**

```
function multisigs(
  SeedPrimitivesSignatureAccountId20,
  [u8;32]
): Option<PalletMultisigMultisig>
```

## Events

### MultisigApproval

A multisig operation has been approved by someone.

**Namespace**

```
api.events.multisig.MultisigApproval
```

**Type**

```
type MultisigApproval = {
  approving: SeedPrimitivesSignatureAccountId20,
  timepoint: PalletMultisigTimepoint,
  multisig: SeedPrimitivesSignatureAccountId20,
  call_hash: [u8;32]
}
```

### MultisigCancelled

A multisig operation has been cancelled.

**Namespace**

```
api.events.multisig.MultisigCancelled
```

**Type**

```
type MultisigCancelled = {
  cancelling: SeedPrimitivesSignatureAccountId20,
  timepoint: PalletMultisigTimepoint,
  multisig: SeedPrimitivesSignatureAccountId20,
  call_hash: [u8;32]
}
```

### MultisigExecuted

A multisig operation has been executed.

**Namespace**

```
api.events.multisig.MultisigExecuted
```

**Type**

```
type MultisigExecuted = {
  approving: SeedPrimitivesSignatureAccountId20,
  timepoint: PalletMultisigTimepoint,
  multisig: SeedPrimitivesSignatureAccountId20,
  call_hash: [u8;32],
  result: Result<Null, SpRuntimeDispatchError>
}
```

### NewMultisig

A new multisig operation has begun.

**Namespace**

```
api.events.multisig.NewMultisig
```

**Type**

```
type NewMultisig = {
  approving: SeedPrimitivesSignatureAccountId20,
  multisig: SeedPrimitivesSignatureAccountId20,
  call_hash: [u8;32]
}
```

## Errors

### AlreadyApproved

Call is already approved by this signatory.

**Namespace**

```
api.errors.multisig.AlreadyApproved
```

### AlreadyStored

The data to be stored is already stored.

**Namespace**

```
api.errors.multisig.AlreadyStored
```

### MaxWeightTooLow

The maximum weight information provided was too low.

**Namespace**

```
api.errors.multisig.MaxWeightTooLow
```

### MinimumThreshold

Threshold must be 2 or greater.

**Namespace**

```
api.errors.multisig.MinimumThreshold
```

### NoApprovalsNeeded

Call doesn't need any (more) approvals.

**Namespace**

```
api.errors.multisig.NoApprovalsNeeded
```

### NotFound

Multisig operation not found when attempting to cancel.

**Namespace**

```
api.errors.multisig.NotFound
```

### NoTimepoint

No timepoint was given, yet the multisig operation is already underway.

**Namespace**

```
api.errors.multisig.NoTimepoint
```

### NotOwner

Only the account that originally created the multisig is able to cancel it.

**Namespace**

```
api.errors.multisig.NotOwner
```

### SenderInSignatories

The sender was contained in the other signatories; it shouldn't be.

**Namespace**

```
api.errors.multisig.SenderInSignatories
```

### SignatoriesOutOfOrder

The signatories were provided out of order; they should be ordered.

**Namespace**

```
api.errors.multisig.SignatoriesOutOfOrder
```

### TooFewSignatories

There are too few signatories in the list.

**Namespace**

```
api.errors.multisig.TooFewSignatories
```

### TooManySignatories

There are too many signatories in the list.

**Namespace**

```
api.errors.multisig.TooManySignatories
```

### UnexpectedTimepoint

A timepoint was given, yet no multisig operation is underway.

**Namespace**

```
api.errors.multisig.UnexpectedTimepoint
```

### WrongTimepoint

A different timepoint was given to the multisig operation that is underway.

**Namespace**

```
api.errors.multisig.WrongTimepoint
```

## Constants

### depositBase

The base amount of currency needed to reserve for creating a multisig execution or to store a dispatch call for later.

This is held for an additional storage item whose value size is `4 + sizeof((BlockNumber, Balance, AccountId))` bytes and whose key size is `32 + sizeof(AccountId)` bytes.

**Namespace**

```
api.consts.multisig.depositBase
```

**Type**

```
type depositBase = u128
```

### depositFactor

The amount of currency needed per unit threshold when creating a multisig execution.

This is held for adding 32 bytes more into a pre-existing storage value.

**Namespace**

```
api.consts.multisig.depositFactor
```

**Type**

```
type depositFactor = u128
```

### maxSignatories

The maximum amount of signatories allowed in the multisig.

**Namespace**

```
api.consts.multisig.maxSignatories
```

**Type**

```
type maxSignatories = u16
```
