/**
 * Fee Calculation Phase
 *
 * Calculates transaction fee based on current inputs and outputs (including change).
 * Stores both calculated fee and leftover amount for the Balance phase to verify.
 *
 * @module FeeCalculation
 * @since 2.0.0
 */
import { Effect } from "effect";
import type { BuildOptionsTag, PhaseResult, TransactionBuilderError } from "../TransactionBuilder.js";
import { PhaseContextTag, ProtocolParametersTag, TxContext } from "../TransactionBuilder.js";
/**
 * Fee Calculation Phase
 *
 * Calculates transaction fee based on current inputs and outputs (including change).
 * Stores both calculated fee and leftover amount for the Balance phase to verify.
 * This phase is deterministic once inputs and outputs are fixed.
 *
 * **Decision Flow:**
 * ```
 * Combine Inputs & Outputs
 * (base outputs + change outputs)
 *   ↓
 * Calculate Fee Iteratively
 * (account for changing tx size during fee calculation)
 *   ↓
 * Calculate Leftover After Fee
 * (inputs - outputs - change - fee)
 *   ↓
 * Store Fee & Leftover
 * (in build context for Balance phase)
 *   ↓
 * goto balance
 * ```
 *
 * **Key Principles:**
 * - Fee calculation is deterministic given fixed inputs/outputs/change
 * - Iterative calculation accounts for fee size affecting tx size
 * - Leftover = inputs - outputs - change - fee (can be 0, positive, or negative)
 * - Positive leftover triggers Balance → drainTo/burn strategies
 * - Negative leftover (shortfall) triggers Balance → reselection
 * - Zero leftover means perfectly balanced (ideal case)
 * - Change outputs are always included in fee calculation
 * - Fee is stored in context for Balance phase validation
 * - No phase retries here; Balance phase decides next step based on leftover
 */
export declare const executeFeeCalculation: () => Effect.Effect<PhaseResult, TransactionBuilderError, PhaseContextTag | TxContext | ProtocolParametersTag | BuildOptionsTag>;
//# sourceMappingURL=FeeCalculation.d.ts.map