Skip to main content
Two questions matter for a multisig vault: who pays at each lifecycle step, and how to get a number before committing. They have different answers on every chain, so this page treats them separately.

Pricing activation and execution

estimateFee builds the transaction the operation would produce and asks the node or RPC. It prices both vault operations, so pass the txType for the one you want:
ActivateMultisigInput.feeQuote is a required field, so pass the real quote:

estimateFee in detail

It really does reach the chain: the SDK builds the transaction the operation would produce and prices it against a node. A chain that cannot quote that operation throws estimateFee not supported for chain <chainId>.

TransactionEstimatingType

Import the enum and use its members. The wire values are inconsistently cased (three camelCase, three PascalCase), so a hand-typed string literal is a silent bug waiting to happen:
An unrecognised txType does not throw. It is priced as a plain transfer instead of what you asked for, which is why you should use the enum members. payload.from is the wallet the fee is priced against.

EstimatedFee

Only estimatedFee is always present. The rest are populated by whichever chain produced the quote:
The chains reuse gasLimit / gasPrice as generic slots that mean different things per chain. Read estimatedFee and currency for display; read the rest only when you know the chain.

Which txType each chain supports

Even inside estimateFee, not every chain prices every operation. This table says which combinations produce a measured number and which do not:
  • measured: builds the real transaction and queries the node or RPC. Trustworthy.
  • computed: no RPC call, but a real formula over real inputs. Trustworthy.
  • zero: that step costs nothing on that chain, so the quote is '0'.
  • fixed: a constant rather than a measurement, about 0.2 ADA or 0.000014 XRP. Order of magnitude only.
  • throws: Fee estimation not implemented for type: ….
A fixed cell carries the right currency and the right order of magnitude, but it is a constant rather than a measurement. Do not present it as an exact cost.

Who pays, per chain

On Tron, Cardano, XRP, and Bitcoin the fee comes out of the shared vault, so fund the vault before executing. On EVM and Solana it comes out of the acting owner’s personal wallet, so fund that.

Per-chain details

What actually costs money differs a lot by chain. This is what you need to plan for.
Only activation and execution cost gas. Signing is free and produces no transaction. Both are paid by the wallet that performs them, never by the vault.Before executing, the SDK checks that the executor can cover gasLimit × gasPrice and throws InsufficientBalanceError rather than letting a doomed execution proceed:
Executor 0x… has 0.0001 ETH but needs ~0.0009 ETH to pay gas. Top it up or execute from another owner wallet.
The check is fail-open: if it cannot read a balance or price the gas, it lets the node be the judge rather than blocking a valid execution.
Solana is the only chain where creating and signing also cost money, because each is its own on-chain transaction. Creating an order additionally pays rent for the accounts it opens, which dominates the cost.Two hard floors, independent of any quote:
  • Activation transfers about 0.0021 SOL to the vault as a rent top-up, on top of the fee.
  • Execution refuses to start when the executing wallet holds under 0.001 SOL.
Tron charges bandwidth and energy rather than gas. Each account gets a free daily bandwidth allowance and can freeze TRX for more of either, and only the deficit is burned as TRX. A quote therefore depends on the vault’s current resources and changes over time.Owner and threshold changes carry a flat 100 TRX system fee. Sending to an account that is not yet activated adds about 1 TRX.
Separately from any fee, Tron vault activation is refused unless the vault address already holds at least 100 TRX. Fund the vault before calling activateMultisig.
Personal sends are quoted from the current network fee rate against a real coin selection over the wallet’s UTXOs.A vault order’s fee is decided when the transaction is built and comes out of the vault’s own UTXOs, so you cannot quote it in advance through estimateFee. Read it off the built order instead.
Fees are computed locally from the Cardano protocol parameters and are small and predictable. A vault order costs more than a personal send because every required signature grows the transaction.Every output must clear the 1 ADA minimum. Native-asset transfers need pure-ADA UTXOs to pay from, so if all the ADA is locked in UTXOs that also hold tokens, the send is refused with “No pure ADA UTXOs available. Your ADA is locked in UTXOs with tokens, send the tokens first to free it.”
Fees are tiny and computed arithmetically: a multisig transaction on a 3-signer vault costs roughly 0.000056 XRP. No RPC call is needed to quote one.Reserves are not fees. They are XRP locked on the account, not spent:
  • Base reserve: 1 XRP.
  • Owner reserve: 0.2 XRP per owned object.
  • An activated vault holds a signer list, so it needs 1.2 XRP minimum. Each open trust line adds another 0.2 XRP; removing the line frees it, but only when the token balance is exactly zero.
Activation is refused below the live required reserve. sdk.getXrpAccountReserve({ address }) returns the current breakdown for a personal wallet.

Minimum balances

Each chain has a floor below which a wallet cannot transact at all. They are listed with the per-chain send rules in Transactions.

Order expiry

Expiry is not a fee, but it decides whether a fee ever gets paid. Three chains time orders out: A lapsed order moves to expired and must be recreated. EVM, Solana, and Bitcoin orders do not expire on a timer.

Multisig Vaults

Creation and activation, chain by chain.

Orders

The lifecycle these fees attach to.

Transactions

estimateFee for personal-wallet sends.

Errors

InsufficientBalanceError and friends.
Last modified on August 31, 2026