Transactions

multisig-execute

Approve and, if the threshold is met, execute a multisig call (final approval).

View as Markdown

Sends the full inner call along with an approval. If this is the first approval (omit timepoint), it opens the operation and reserves a deposit from the signer, returned when the operation completes or is cancelled. If it is the final approval — bringing the count to threshold — the inner call executes as the multisig account in the same extrinsic. Intermediate signers can use the cheaper multisig_approve (hash only), but whoever approves last must use this intent so the chain has the call to run. Every approval must repeat the same threshold, signatory set, and call; later approvals must also pass the opening timepoint or they will not match the pending operation.

SignerPalletWraps
coldkeyMultisigMultisig.as_multi

Parameters

ParameterTypeRequiredDescription
thresholdintegeryesNumber of approvals required to execute, counting the signer. Together with the full signatory set it identifies the multisig account, so it must match on every approval.
other_signatoriesarrayyesThe other members of the multisig (every signatory except the signer), as a JSON list of addresses. The same set must be given on every approval; order does not matter (sorted automatically).
callobjectyesThe inner call to dispatch from the multisig account, as a JSON object {"op": <intent name>, ...args}. All approvals must describe the identical call — it is matched by hash. Its arguments must be fully explicit, since it runs as the multisig account, not the signer's wallet.
timepointobjectnoBlock height and extrinsic index of the approval that opened the operation, as a JSON object {"height": ..., "index": ...}. Omit on the first approval; required on every later one (read it with the multisig query).

Address parameters (--hotkey, --coldkey, --dest, ...) accept a raw ss58 address, an address-book or proxy-book name, or a local wallet/hotkey name.

CLI

Preview with --dry-run (shows fee, effects, and policy result without submitting), then submit:

btcli tx multisig-execute \
  --threshold <int> \
  --other-signatories <a,b,c> \
  --call '<json>' --dry-run
btcli tx multisig-execute \
  --threshold <int> \
  --other-signatories <a,b,c> \
  --call '<json>' -w my_coldkey

Python

import bittensor as sub
from bittensor.wallet import Wallet

wallet = Wallet(name="my_coldkey", hotkey="my_hotkey")
intent = sub.MultisigExecute(threshold=0, other_signatories=[...], call={...})

async with sub.Client("finney") as client:
    plan = await client.plan(intent, wallet)   # fee, effects, policy — no submission
    result = await client.execute(intent, wallet)
    if not result.success:
        print(result.error.code, result.error.remediation)

Or build it by op name, as an agent would:

await client.execute_tool("multisig_execute", {...}, wallet)