/** * Fee handling for the deploy framework. Each account pays per its own {@link FeePolicy} — which * may override the spec-wide default: * * - `sponsored` → a SponsoredFPC pays (the local-network default). All sponsored accounts share * one payment method. * - `fee-juice` → the account pays from its own Fee Juice; if below `threshold` with work to do, * bridge `fundAmount` from L1. The bridge claim is single-use: the first paying tx claims it * (`FeeJuicePaymentMethodWithClaim`) and the rest spend the balance. Pending claims are persisted * (see ./state.ts) so a crash between bridge and claim resumes. */ import type { AztecAddress } from '@aztec/aztec.js/addresses'; import { type FeePaymentMethod } from '@aztec/aztec.js/fee'; import { Fr } from '@aztec/aztec.js/fields'; import type { AztecNode } from '@aztec/aztec.js/node'; import type { Wallet } from '@aztec/aztec.js/wallet'; import type { GasFees } from '@aztec/stdlib/gas'; import type { Hex } from 'viem'; import type { AccountFunding, DeployReporter } from './reporter.js'; import type { DeployState } from './state.js'; import type { FeePolicy } from './types.js'; /** The `fee` field of a send-options object. */ export interface SendFee { paymentMethod?: FeePaymentMethod; gasSettings?: { maxFeesPerGas: GasFees; }; } /** * Sane fee defaults: local pays via SponsoredFPC; every other network pays from bridged Fee Juice. * The threshold/fundAmount pair trades off L1 round-trips (too low → frequent re-bridges) against * stranding Fee Juice, which is non-transferable, on the account (too high). */ export declare function defaultFeePolicy(local: boolean): FeePolicy; /** The public Fee Juice balance of `address` (any address — contract or account), read via `from`. */ export declare function publicFeeJuiceBalance(wallet: Wallet, address: AztecAddress, from: AztecAddress): Promise; /** * Resolves an account's funding posture under `policy` — what the plan reports and what * {@link prepareFeeSession} acts on. `idle` accounts (no pending work) are never funded; sponsored * accounts never read a balance; fee-juice accounts are `funded` iff their balance clears the * threshold, else `not-funded` (a bridge will top them up). */ export declare function accountFunding(policy: FeePolicy, wallet: Wallet, account: AztecAddress, hasWork: boolean): Promise; /** What {@link obtainFeeJuiceClaim} needs to produce a consumable claim for a recipient. */ export interface ObtainFeeJuiceClaimOpts { /** Whether the target is a local (anvil) network — drives warp-vs-poll + L1 defaults. */ local: boolean; node: AztecNode; /** The node's URL — reaches its debug API for local time-warping while the bridge settles. */ nodeUrl?: string; recipient: AztecAddress; /** Amount to bridge (wei). */ amount: bigint; /** L1 connection + funder, defaulted per {@link resolveL1Config}. */ l1: { l1FunderKey?: Hex; l1RpcUrl?: string; l1ChainId?: number; }; state: DeployState; persist: () => void; reporter: DeployReporter; } /** * A single-use Fee Juice claim for `recipient` (used by `fund` steps): resumes the persisted claim * when present, else bridges `amount` from L1 and waits for the L1→L2 message. The claim persists * before the wait, so a crash mid-wait resumes it instead of stranding the bridged funds. The * caller consumes it (e.g. via `FeeJuice.claim`) and calls `onConsumed` once that tx mines. */ export declare function obtainFeeJuiceClaim(opts: ObtainFeeJuiceClaimOpts): Promise<{ claimAmount: bigint; claimSecret: Fr; messageLeafIndex: bigint; /** Drops the persisted resume entry — call once the consuming tx mines. */ onConsumed: () => void; }>; /** Per-account fee dispensing for one run, prepared by {@link prepareFeeSession}. */ export interface FeeSession { /** * Fee options for the next tx from `account`, plus `onConsumed` to call after it lands (clears a * one-time bridge claim from persisted state). Subsequent calls pay from balance. */ next(account: AztecAddress): { fee: SendFee; onConsumed: () => void; }; /** * Whether `account`'s next tx will carry its one-time bridge claim. The runner serializes such an * account's first tx: the claim must mine before its balance-paying txs fan out. */ hasPendingClaim(account: AztecAddress): boolean; } /** What {@link prepareFeeSession} needs to fund a run's working accounts. */ export interface PrepareFeeSessionOpts { /** Whether the target is a local (anvil) network — drives warp-vs-poll + L1 defaults. */ local: boolean; node: AztecNode; /** The node's URL — reaches its debug API for local time-warping while a bridge settles. */ nodeUrl?: string; wallet: Wallet; /** * Working accounts (those with pending work) with their resolved {@link FeePolicy} + funding (from * {@link accountFunding}) — so this function doesn't re-read balances. */ accounts: { address: AztecAddress; policy: FeePolicy; funding: AccountFunding; }[]; state: DeployState; persist: () => void; reporter: DeployReporter; } /** * Resolves fees ahead of execution, per account: registers the shared SponsoredFPC (for sponsored * accounts), or tops up a fee-juice account via a bridge (reusing a persisted pending claim when * present). Returns a {@link FeeSession} that dispenses the right fee per tx, by sending account. */ export declare function prepareFeeSession(opts: PrepareFeeSessionOpts): Promise; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RlcGxveS9mZWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFDSCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQWtDLEtBQUssZ0JBQWdCLEVBQTZCLE1BQU0scUJBQXFCLENBQUM7QUFDdkgsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVDLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRELE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUloQyxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM5QyxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFPNUMsZ0RBQWdEO0FBQ2hELE1BQU0sV0FBVyxPQUFPO0lBQ3RCLGFBQWEsQ0FBQyxFQUFFLGdCQUFnQixDQUFDO0lBQ2pDLFdBQVcsQ0FBQyxFQUFFO1FBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQTtLQUFFLENBQUM7Q0FDMUM7QUFFRDs7OztHQUlHO0FBQ0gsd0JBQWdCLGdCQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEdBQUcsU0FBUyxDQVMxRDtBQUVELHdHQUFzRztBQUN0Ryx3QkFBc0IscUJBQXFCLENBQ3pDLE1BQU0sRUFBRSxNQUFNLEVBQ2QsT0FBTyxFQUFFLFlBQVksRUFDckIsSUFBSSxFQUFFLFlBQVksR0FDakIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUdqQjtBQUVEOzs7OztHQUtHO0FBQ0gsd0JBQXNCLGNBQWMsQ0FDbEMsTUFBTSxFQUFFLFNBQVMsRUFDakIsTUFBTSxFQUFFLE1BQU0sRUFDZCxPQUFPLEVBQUUsWUFBWSxFQUNyQixPQUFPLEVBQUUsT0FBTyxHQUNmLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FXekI7QUFvQkQsNEZBQTRGO0FBQzVGLE1BQU0sV0FBVyx1QkFBdUI7SUFDdEMsMkZBQXlGO0lBQ3pGLEtBQUssRUFBRSxPQUFPLENBQUM7SUFDZixJQUFJLEVBQUUsU0FBUyxDQUFDO0lBQ2hCLGdHQUE4RjtJQUM5RixPQUFPLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDakIsU0FBUyxFQUFFLFlBQVksQ0FBQztJQUN4Qiw4QkFBOEI7SUFDOUIsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUNmLHFFQUFxRTtJQUNyRSxFQUFFLEVBQUU7UUFBRSxXQUFXLENBQUMsRUFBRSxHQUFHLENBQUM7UUFBQyxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUM7UUFBQyxTQUFTLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDO0lBQ2pFLEtBQUssRUFBRSxXQUFXLENBQUM7SUFDbkIsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0lBQ3BCLFFBQVEsRUFBRSxjQUFjLENBQUM7Q0FDMUI7QUFFRDs7Ozs7R0FLRztBQUNILHdCQUFzQixtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLEdBQUcsT0FBTyxDQUFDO0lBQ2hGLFdBQVcsRUFBRSxNQUFNLENBQUM7SUFDcEIsV0FBVyxFQUFFLEVBQUUsQ0FBQztJQUNoQixnQkFBZ0IsRUFBRSxNQUFNLENBQUM7SUFDekIsNkVBQTJFO0lBQzNFLFVBQVUsRUFBRSxNQUFNLElBQUksQ0FBQztDQUN4QixDQUFDLENBMENEO0FBRUQscUZBQXFGO0FBQ3JGLE1BQU0sV0FBVyxVQUFVO0lBQ3pCOzs7T0FHRztJQUNILElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxHQUFHO1FBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQztRQUFDLFVBQVUsRUFBRSxNQUFNLElBQUksQ0FBQTtLQUFFLENBQUM7SUFDdEU7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUcsT0FBTyxDQUFDO0NBQ2pEO0FBRUQsNkVBQTZFO0FBQzdFLE1BQU0sV0FBVyxxQkFBcUI7SUFDcEMsMkZBQXlGO0lBQ3pGLEtBQUssRUFBRSxPQUFPLENBQUM7SUFDZixJQUFJLEVBQUUsU0FBUyxDQUFDO0lBQ2hCLDhGQUE0RjtJQUM1RixPQUFPLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDakIsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUNmOzs7T0FHRztJQUNILFFBQVEsRUFBRTtRQUFFLE9BQU8sRUFBRSxZQUFZLENBQUM7UUFBQyxNQUFNLEVBQUUsU0FBUyxDQUFDO1FBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQTtLQUFFLEVBQUUsQ0FBQztJQUNsRixLQUFLLEVBQUUsV0FBVyxDQUFDO0lBQ25CLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztJQUNwQixRQUFRLEVBQUUsY0FBYyxDQUFDO0NBQzFCO0FBRUQ7Ozs7R0FJRztBQUNILHdCQUFzQixpQkFBaUIsQ0FBQyxJQUFJLEVBQUUscUJBQXFCLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQXlHeEYifQ==