as_multi

Call v123 → v148, v149 → current #1

Register approval for a dispatch, executing if threshold is reached.

View calls on chain

Click items to navigate. Pan and zoom to explore.

Used by: developerswalletsvalidatorsstakers

The Big Picture

This is the core multisig call. Multiple parties must approve before a call executes. The first approver reserves a deposit and stores the call on-chain.

Use Cases

  • Shared custody of funds requiring multiple approvals
  • Team treasury management with governance
  • Security-critical operations requiring sign-off
  • Escrow arrangements requiring multiple parties

From Chain Metadata

See [`Pallet::as_multi`].

Input Parameters

#NameTypeDescription
0
threshold
u16 Number of approvals required (2 or higher)
1
other_signatories
Vec<AccountId> Vec List of other signatory accounts (sorted, excludes caller)
2
maybe_timepoint
→ timepoint
Option Option<Timepoint<BlockNumberFor<T>>>Timepoint from first approval (None for first approval)
3
call
RuntimeCall Box<<T as Config>::RuntimeCall>The call to approve/execute
4
max_weight
Weight Maximum weight allowed for the call execution

Permissions

Origin
Unknown
Required Role

Permission data inferred from metadata. May be incomplete.

Requirements

  • Caller is one of the signatories
  • Threshold is 2 or greater
  • If first approval: maybe_timepoint must be None
  • If subsequent approval: maybe_timepoint must match original
  • All signatories are unique and sorted

Effects

Storage Modified

Postconditions

  • Approval recorded for this signatory
  • If threshold reached: call is executed
  • If not reached: call stored awaiting more approvals

Side Effects

  • Deposit reserved on first approval (DepositBase + threshold * DepositFactor)
  • Deposit returned when call executes or is cancelled
  • Emits NewMultisig (first approval) or MultisigApproval/MultisigExecuted

Code Examples

// ----------------------------------------------------------------------
// HEADS UP: 2 args below have a complex type with no usable default.
// Look for `undefined as any` and replace them with real values
// before running — the snippet compiles, but will fail at runtime as-is.
// ----------------------------------------------------------------------
import { createClient, Binary } from "polkadot-api";
import { getWsProvider } from "polkadot-api/ws";
import { sub } from "@polkadot-api/descriptors"; // generated by: npx papi add sub -w wss://entrypoint-finney.opentensor.ai:443

const client = createClient(getWsProvider("wss://entrypoint-finney.opentensor.ai:443"));
const api = client.getTypedApi(sub);

// Build as_multi call (typed, named args)
const threshold = 0;
const other_signatories = [] as [];
const timepoint = undefined;
const call = undefined as any /* RuntimeCall — replace with real value */;
const max_weight = undefined as any /* Weight — replace with real value */;

const tx = api.tx.Multisig.as_multi({
  threshold,
  other_signatories,
  maybe_timepoint: timepoint,
  call,
  max_weight,
});

Version History

v123 block 720,235 5 args
v149 block 3,014,339 5 args Current

Runtime Info

Pallet Index
13
Call Index
1
First Version
v123
Current Version
v411