SettleMint
Deployment

Gas settings per network

The per-network gas keys a DALP instance reads before it asks for funds, the layer order that decides each one, and the chains that ship calibrated.

A DALP Instance prices work before it does it. When a wallet cannot pay for the transaction the platform is about to send, the platform pauses that work, names the wallet, and asks for a deposit rather than letting the write fail at the node. Every figure in that decision comes from a per-network gas block: how much to ask for, how long the ask stays open, how large an ask is too large to be believable, and whether the chain charges anything at all.

Each network carries its own block, because the same figure is right on one chain and absurd on another. A chain whose token trades in thousands and a chain whose token trades in cents need the same gas allowance, not the same native amount, which is why most of these settings are measured in gas rather than in tokens.

Four layers decide each gas setting, field by field.A gas setting resolves through four layers in order. The network's own saved settings win first. The deployment's network entry comes next. Below that sit the per-chain-id defaults the platform ships for chains it has already measured. The built-in defaults answer last. Each field resolves on its own, so one saved figure leaves every other figure inherited.Four layers decide each gas setting, field by field.A gas setting resolves through four layers in order. The network's own saved settings win first. The deployment's network entry comes next. Below that sit the per-chain-id defaults the platform ships for chains it has already measured. The built-in defaults answer last. Each field resolves on its own, so one saved figure leaves every other figure inherited.

Each field resolves through the layers on its own. Setting one value on a network leaves every other value live against the layer below, so a later calibration change still reaches that network.

Where a value can be set

A gas setting can arrive from four places, and the first one that names the field decides it:

  1. The network's own saved settings. A platform administrator writes these through the platform-admin network catalogue. They take effect without a redeploy.
  2. The deployment's network entry. The gas block on the network in the values you pass to the Helm chart, which mirror config.yml. Changing it is a release event.
  3. The per-chain-id defaults. The chainGasDefaults section, keyed by chain ID, carrying calibrated figures for chains the platform has already measured. See Chains that ship calibrated.
  4. The built-in defaults. The figures in the table below, used when nothing above names the field.

Resolution is per field, not per block. A network that saves only pauseWindowSeconds keeps every other figure live against the layer beneath it, so a later change to the deployment entry or to the shipped chain defaults still reaches that network. The reverse is also true: a figure saved on the network freezes at the value you saved, and no later calibration change moves it until you clear it.

The two sponsorship bounds fall through differently at the bottom. When no layer names them, they take the deployment's global paymaster.maxGasCostCeiling and paymaster.autoSponsorshipMaxGasCost rather than a gas-block default, so a chain that never mentions sponsorship behaves exactly as it did before per-network gas settings existed.

How to read a key name

The names are predictable, so you can tell a key's unit from its spelling:

SuffixUnitExample
GasAn amount of gasdeployFallbackGas
SecondsA duration in secondspauseWindowSeconds
No suffixThe chain's smallest native unitsponsorshipMaxGasCostCeiling

No key names a chain-specific unit. A gas amount is priced at the fee of the transaction being sized, at the moment of the ask, so one figure holds its meaning as the fee market moves and across chains whose tokens are worth very different amounts. A native amount is a raw integer in the chain's smallest unit and travels as a string of digits, because the values involved are larger than a JavaScript number represents exactly.

The settings

KeyWhat it decidesAccepted rangeBuilt-in default
zeroGasWhether the chain charges for gas at all.true or falseUnset; the platform measures
opsAllowanceGas.deployerGas held in reserve for a deployer wallet after a deployment, so the next operations do not pause again.1 to 2,000,000,00010,000,000
opsAllowanceGas.organisationThe same reserve for an organisation wallet.1 to 2,000,000,0007,000,000
deployFallbackGasThe size a deployment is funded for when the node refuses to estimate it, so a failed estimate still asks for a worst case rather than a placeholder.1 to 2,000,000,00025,000,000
maxReasonableGasThe ceiling above which a funding request is refused as implausible. 0 turns the ceiling off.0 or more200,000,000
feeCapBaseFeeMultiplierHow far above the pending base fee a transaction's fee cap is set.1 to 502
feeCapBaseFeeFloorThe smallest base-fee allowance a fee cap is given, however low the pending base fee is. Read from the deployment's values only.Digits only1,000,000,000 (1 gwei)
pauseWindowSecondsHow long a funding request stays open before it expires.60 to 604,8001,800
pauseSettleDelaySecondsHow long the platform waits after the deposit appears on chain before it retries the paused work.0 to 3,600120
sponsorshipMaxGasCostCeilingThe largest gas cost a sponsorship ticket may authorise on this chain.Digits onlyThe deployment's paymaster ceiling
sponsorshipAutoMaxGasCostWhat a ticket authorises when the caller names no amount. Never above the resolved ceiling.Digits onlyThe deployment's paymaster automatic amount
fallbackGasPrice.baseFeeThe base fee to price a transaction with when the chain cannot be read and no price was ever seen for it. See Where the gas price comes from.Digits onlyUnset
fallbackGasPrice.tipThe tip that goes with that fallback base fee.Digits only0

A network whose resolved sponsorshipAutoMaxGasCost sits above its resolved sponsorshipMaxGasCostCeiling is refused rather than silently clamped, because every sponsored operation on it would fail validation anyway.

Choosing the values that matter

Three of these decide most of the behaviour an operator notices.

pauseWindowSeconds is a claim about attention, not about the chain. The default of half an hour suits a deployment where someone is watching and can top a wallet up. A chain funded by hand from a treasury, or a public testnet whose token comes from a faucet an operator has to go and visit, needs a day. Set it too short and work that was only waiting for money fails instead.

maxReasonableGas exists because a bad estimate is worse than no estimate. An estimator fault or a base-fee spike can produce a request many times the real cost, and an operator who pays it has lost the difference. The default catches an estimate roughly six times too large for a big deployment. Set it only after measuring the chain, and set it to 0 only on a chain whose fee behaviour is deliberately extreme.

feeCapBaseFeeMultiplier has to anticipate the market, because the cap is fixed when the transaction is signed and the base fee keeps moving. The default of 2 absorbs five consecutive maximally full blocks. A chain whose fee market climbs faster than that needs a larger number: a signed transaction whose cap the market outruns can never be mined, and it holds the head of its sender's queue while every later transaction from that sender waits behind it. Raising it also raises what an operator is asked to deposit, because the request is sized from the same cap. The headroom itself is never charged, since the sender pays the base fee plus the tip and the cap is only a ceiling.

feeCapBaseFeeFloor keeps a near-zero base fee from producing a cap with no room to move. The cap uses the base fee times the multiplier or this floor, whichever is larger, and then adds the tip. The default of 1 gwei suits a chain that charges a few gwei or more. On a chain whose base fee is far below 1 gwei, the floor alone sets the cap, and every funding request is sized against a price the chain never charges: against base fees measured in September 2026, about 200 times too much on Base and about 1.8 million times on OP Mainnet. Set it on such a chain to a value close to what the chain charges in a busy hour. The field is read from the deployment's values only; the network catalogue does not write it.

Where the gas price comes from

The platform does not sign with a fixed price. Every signature, cancellation, wallet reserve, and funding request on a chain reads one price source, and that source tries these in order:

  1. A chain that charges nothing prices every transaction at zero.
  2. The price read from the chain now: the pending base fee and the tip the node suggests. A read is reused for twelve seconds, so a funding request and the signature that follows it see the same price.
  3. The newest price seen before, of any age, when the chain cannot be read right now.
  4. fallbackGasPrice from the deployment's network entry, when the chain cannot be read and no price was ever seen for it.

When none of these exists, the platform signs nothing and the work waits with a gas-price-unknown error until the chain answers. It never guesses a price. The fee cap is the base fee times feeCapBaseFeeMultiplier, never less than feeCapBaseFeeFloor, plus the tip. A chain without a base fee is signed with a legacy gasPrice equal to the price read from the chain, with no headroom, because a legacy price is paid in full rather than capped.

Set fallbackGasPrice only for a chain whose endpoint may be unreachable when the platform first starts. A value set too low produces transactions that the chain refuses until a real price is read, so pick a base fee at or above what the chain has charged recently. The field is read from the deployment's values only; the network catalogue does not write it.

Whether the chain charges gas

zeroGas is the one setting that answers itself. Left unset, the platform probes the chain once and caches the answer, and the effective value is reported as measured rather than configured. Set it only to overrule a probe you know to be wrong.

When the probe cannot get an answer, because the endpoint is unreachable or the node offers neither fee history nor a gas price, the platform treats the chain as one that charges gas. That direction is deliberate. A chain wrongly marked as charging nothing puts every write back on the silent path, where a drained wallet's transaction dies at the node with no request raised, no wallet named, and no resumption once the wallet is funded. A chain wrongly treated as charging gas costs at most one funding request an operator declines.

Chains that ship calibrated

The chainGasDefaults section carries measured figures for chains the platform already knows, keyed by chain ID. A deployment that adds one of these chains, with only an ID, a name, and an RPC endpoint, gets those figures with no entry of its own and no code change.

Chain IDNetworkWhat the shipped entry sets
36900ADI Chain mainnetBoth allowances, the deployment floor, a lower request ceiling, and a one-day request window
99999ADI Chain testnetThe same calibration as mainnet, since the fee schedule is the same
11155111SepoliaA one-day request window only; the other figures already suit this chain
31339A test chain with a deliberately volatile fee marketBoth allowances, the floors, a two-second settle delay, and fee cap headroom of 10
31337A local development chainA two-second settle delay only
31338A second local development chainA two-second settle delay only

A chain ID that is absent from this section is not a special case: it resolves to the built-in defaults. Adding an entry here is a values change, so a recalibration ships without a code release, and the platform records which layer supplied every figure it used.

Adding a chain

Work down the layers, and stop as soon as the answer is good enough.

  1. Check whether the chain is already calibrated. If its chain ID appears in the table above, add the network with its ID, name, and RPC endpoint, and set nothing else. The shipped figures apply.
  2. Otherwise start on the built-in defaults. They cover a chain within roughly a factor of two of every chain measured so far. Add the network, leave the whole gas block empty, and let the platform probe whether the chain charges gas.
  3. Adjust what the deployment's own circumstances change, not what the chain changes. pauseWindowSeconds is the usual one, because it describes who funds the wallets and how fast they respond.
  4. Measure before you set a gas amount. Run a deployment on the chain, read the effective figures and the layer each came from on the network's edit sheet, and set only the ones the measurement contradicts.
  5. Set the sponsorship bounds only if the chain's fee level differs from the rest of the deployment. They default to the deployment's global paymaster bounds, which already cover a typical operation at a moderate fee.

Frequently asked questions

Which layer supplied the value my network is actually running on?

Open the network in the platform-admin catalogue and edit it. Every gas field shows the figure it currently resolves to as its placeholder, with a line underneath naming the layer that supplied it: this network, the deployment values, the chain default, the platform default, or a measurement of the chain. An empty field with a placeholder is inheriting; a filled field is set on this network.

How do I stop inheriting and pin a value?

Type the value into the field on the network's edit sheet and save. From then on that one field is fixed on this network and no change to the layers beneath it moves the value. Clearing the field again restores inheritance for that field alone.

Do these settings apply to a chain that charges nothing?

Barely. On a chain resolved as charging no gas, the platform sizes no funding requirement at all: the requirement comes back as zero, so the allowances, the deployment fallback, and the reasonable-size ceiling never produce a figure, and no request is raised for the window or the settle delay to govern. zeroGas is the setting doing the work on such a chain, which is why leaving it for the platform to measure matters more there than anywhere else.

Why is the request I am asked to approve larger than the transaction costs?

A request covers the work being done plus an ongoing-operations allowance, so the same wallet does not pause again on its next operation, and it is sized at the fee cap rather than at the fee the transaction will actually pay. The cap is a ceiling: on a chain with a base fee and a tip, the sender pays the base fee plus the tip, and the headroom between that and the cap is never charged. A request many times larger than that is what maxReasonableGas refuses outright. A wallet whose transactions Fireblocks broadcasts (provider-native mode) is asked for three times the gas cost at the cap, because Fireblocks holds back its own fee reserve before it broadcasts and refuses a transaction the wallet cannot cover with that reserve included. Like every request sized from a refusal, that amount then gets a 25 percent margin, so the request is at least 3.75 times the gas cost before the ongoing-operations allowance is added. That applies to the first request a deployment or a write raises, before anything is sent to Fireblocks, and to the request the funding pause raises when Fireblocks refuses a transaction for its fee: the pause then asks for the reserve Fireblocks reported, or for more than the wallet holds when Fireblocks reported none. Wallets signed through any other custody provider, and Fireblocks wallets whose signed transactions DALP broadcasts itself, are asked for the gas cost alone.

Can a gas setting be changed without a redeploy?

Yes. The network's own saved settings are written through the platform-admin catalogue and take effect when the platform reloads, with no restart. Only the deployment's network entry and the shipped chain defaults need a release.

On this page