SettleMint
Deployment

Fireblocks policy for DALP vaults

The Fireblocks policy rules each DALP vault needs with account abstraction off and on, and the limits DALP enforces where a Fireblocks rule cannot see them.

A Fireblocks workspace decides whether each DALP signing request runs, waits for approvers, or stops. It decides with its policy, the ordered list of rules Fireblocks calls the Transaction Authorization Policy. This page lists the rules each DALP vault needs and shows where DALP enforces the limits that a Fireblocks rule cannot see.

A wrong policy stops DALP in one of two ways. A missing allow rule blocks every request from a vault. An approval rule on a vault that must sign without a person fails every sponsored operation, for every user, until someone changes the rule. Both appear on the first transaction after the policy changes, so set the policy before you onboard investors and test it with one transfer per mode.

DALP signs in one of two modes. With account abstraction off, each wallet is a Fireblocks vault, and the vault sends its own transactions. With account abstraction on, each wallet is a Smart Wallet, a contract account under ERC-4337. The Fireblocks vault then holds only the wallet's owner key and signs user operations, the signed instructions that the Smart Wallet executes.

With account abstraction off, Fireblocks sees the token call. With it on, Fireblocks sees only signatures over typed data.Two panels compare what a Fireblocks policy can read in each DALP signing mode. With account abstraction off, the investor vault holds the wallet key and sends a contract call to the token contract, filed to a one-time address. Fireblocks reads that call itself, so asset, amount, and destination rules apply to it. With account abstraction on, three vaults take part. The owner vault signs the user operation as a typed message. The paymaster vault signs the sponsorship ticket as a typed message and must allow it without approval. The bundler vault sends the bundle to the entry-point contract as a contract call and must also allow it without approval. The Smart Wallet, a contract and not a Fireblocks vault, then runs the call against the token contract. Fireblocks reads only signatures over typed data, so DALP enforces the amount and destination limits.With account abstraction off, Fireblocks sees the token call. With it on, Fireblocks sees only signatures over typed data.Two panels compare what a Fireblocks policy can read in each DALP signing mode. With account abstraction off, the investor vault holds the wallet key and sends a contract call to the token contract, filed to a one-time address. Fireblocks reads that call itself, so asset, amount, and destination rules apply to it. With account abstraction on, three vaults take part. The owner vault signs the user operation as a typed message. The paymaster vault signs the sponsorship ticket as a typed message and must allow it without approval. The bundler vault sends the bundle to the entry-point contract as a contract call and must also allow it without approval. The Smart Wallet, a contract and not a Fireblocks vault, then runs the call against the token contract. Fireblocks reads only signatures over typed data, so DALP enforces the amount and destination limits.

What a Fireblocks policy can read in each DALP signing mode.

Rules per vault

ModeVaultFireblocks rule typeSettings
Account abstraction offEach vault that holds investor tokensContract CallSource: the vault. Asset: the DALP token. Amount: the range that needs approval. Destination type: one-time address. Action: require approval from an approver group with a threshold.
Account abstraction offThe same vaultsTransferCovers native coin transfers, which have no call data. Use the same source and approval settings.
Account abstraction onOwner vault of each Smart WalletTyped MessageSource: the vault. Asset: the chain's base asset. Set the designated signers, the approver group, and its threshold.
Account abstraction onBundler vaultContract CallSource: the vault. Destination type: one-time address. Action: allow without approval.
Account abstraction onPaymaster vaultTyped MessageSource: the vault. Action: allow without approval.
BothEvery vault DALP signs fromRule orderAllow rules for Typed Message and Contract Call for the API user DALP signs as, above the catch-all block rule.

Each request DALP files reaches the approver with a note that names the operation: the action, the asset or contract, the amount, and the counterparty. Approvers read that note on the request in Fireblocks before they decide.

Rule order decides the outcome

Fireblocks checks a request against the rules from the top of the policy down, and the first rule that matches decides. A request that matches no rule meets the catch-all block rule at the bottom of every policy, and Fireblocks blocks it.

Two consequences follow for DALP. The API user that DALP signs as needs an allow rule for typed messages and one for contract calls on every vault it signs from. Without the typed message rule, every typed signature from that vault ends blocked by policy, while contract calls from the same vault still pass. A broad allow rule also hides any approval rule below it, because the allow rule matches first. Put the narrow rules at the top: the approval rule for a token first, then the allow rules for the paymaster and bundler vaults, then the general allow rules.

With account abstraction on, DALP enforces the limits

With account abstraction on, the tokens move from the Smart Wallet, and the Smart Wallet is a contract, not a Fireblocks vault. Fireblocks sees only the owner vault's signature over an EIP-712 user operation, the typed data format that wallets use to show a structured message before signing. A Typed Message rule has no amount field and takes no destination limit, so it cannot tell a transfer of 10 tokens from a transfer of 10 million.

DALP therefore enforces amount and destination limits. The token's compliance policy checks each transfer on chain against its eligibility, jurisdiction, holding, and approval rules, whichever wallet sends it. Fireblocks still decides who must approve: a Typed Message rule on the owner vault can name designated signers, an approver group, and a threshold.

One Typed Message rule covers every typed signature from its vault. The same rule gates user operations, token permits, trading venue orders, and governance ballots signed by that owner key, because Fireblocks sees each of them as a typed message. Scope the rule by source vault, and expect its approvers to see all four kinds of request.

Keep the paymaster and bundler vaults free of approval rules

Two vaults sign for every user, not for one investor. The paymaster vault signs a sponsorship ticket for each operation that DALP pays gas for. The vault behind the bundler wallet submits each batch of user operations to the entry-point contract, the shared ERC-4337 contract that validates and runs them. A person cannot approve at that rate, and a hold on either vault stops operations for every user at once. Give each vault an allow rule without approval, above any approval rule that would match it.

DALP stops a sponsored operation within seconds when the paymaster vault's policy holds its ticket. The operation fails with this message, which names the held Fireblocks transaction:

The paymaster vault's Fireblocks policy holds sponsorship ticket signing (Fireblocks transaction <id>). Infrastructure vaults must stay approval-free.

DALP does not retry that operation, because each attempt would put one more request in front of the approvers. It also logs one warning and adds one to the dalp_execution_infrastructure_vault_holds_total counter for each hold, with the vault role and the provider as labels. Alert on that counter to catch a policy change before users report failed operations.

Rules for vaults that send their own transactions

With account abstraction off, DALP files each token write as a Fireblocks contract call from the wallet's vault to a one-time address, the Fireblocks destination type for an address that is not on the workspace whitelist. A native coin transfer has no call data, so DALP files it as a Fireblocks transfer.

Here Fireblocks reads the call itself, so a Contract Call rule can hold large transfers for approval:

  • Source: each vault that holds investor tokens.
  • Asset: the DALP token. DALP adds each token it creates to the Fireblocks workspace as an asset, so the token appears in the rule editor.
  • Amount: the range that needs approval, for example every transfer above a threshold your risk team sets.
  • Destination type: one-time address. A rule that matches only whitelisted destinations does not match the calls DALP files.
  • Contract methods: leave the field open. Fireblocks matches contract methods only on a whitelisted contract with a verified ABI, and DALP's token roles decide which token functions each wallet can call.
  • Action: require approval from an approver group with a threshold.

Troubleshooting

What you seeCauseFix
A sponsored operation fails with "The paymaster vault's Fireblocks policy holds sponsorship ticket signing".A rule that requires approval matches typed messages from the paymaster vault.Add an allow rule without approval for typed messages from the paymaster vault above it. Reject the held request, then submit the operation again.
Typed signatures from a vault end blocked by policy, while contract calls from the same vault pass.No allow rule matches typed messages from that vault, so the catch-all block rule does.Add an allow rule for typed messages from that vault for the API user DALP signs as.
User operations stop reaching the chain while the bundler vault shows a request waiting for approval.A rule that requires approval matches contract calls from the bundler vault.Allow contract calls from the bundler vault without approval, then approve or reject the waiting request.
A large token transfer completes without the approval you configured.A broader allow rule above the approval rule matches first.Move the approval rule above the allow rule.

Fireblocks sources

On this page