import { StorageFeeModel } from '../../sdk/WalletStorage.interfaces';
/**
 * An output of this satoshis amount will be adjusted to the largest fundable amount.
 */
export declare const maxPossibleSatoshis = 2099999999999999;
export interface GenerateChangeSdkResult {
    allocatedChangeInputs: GenerateChangeSdkChangeInput[];
    changeOutputs: GenerateChangeSdkChangeOutput[];
    size: number;
    fee: number;
    satsPerKb: number;
    maxPossibleSatoshisAdjustment?: {
        fixedOutputIndex: number;
        satoshis: number;
    };
}
/**
 * Simplifications:
 *  - only support one change type with fixed length scripts.
 *  - only support satsPerKb fee model.
 *
 * Confirms for each availbleChange output that it remains available as they are allocated and selects alternate if not.
 *
 * @param params
 * @returns
 */
export declare function generateChangeSdk(params: GenerateChangeSdkParams, allocateChangeInput: (targetSatoshis: number, exactSatoshis?: number) => Promise<GenerateChangeSdkChangeInput | undefined>, releaseChangeInput: (outputId: number) => Promise<void>): Promise<GenerateChangeSdkResult>;
export declare function validateGenerateChangeSdkResult(params: GenerateChangeSdkParams, r: GenerateChangeSdkResult): {
    ok: boolean;
    log: string;
};
export interface GenerateChangeSdkParams {
    fixedInputs: GenerateChangeSdkInput[];
    fixedOutputs: GenerateChangeSdkOutput[];
    feeModel: StorageFeeModel;
    /**
     * Target for number of new change outputs added minus number of funding change outputs consumed.
     * If undefined, only a single change output will be added if excess fees must be recaptured.
     */
    targetNetCount?: number;
    /**
     * Satoshi amount to initialize optional new change outputs.
     */
    changeInitialSatoshis: number;
    /**
     * Lowest amount value to assign to a change output.
     * Drop the output if unable to satisfy.
     * default 285
     */
    changeFirstSatoshis: number;
    /**
     * Fixed change locking script length.
     *
     * For P2PKH template, 25 bytes
     */
    changeLockingScriptLength: number;
    /**
     * Fixed change unlocking script length.
     *
     * For P2PKH template, 107 bytes
     */
    changeUnlockingScriptLength: number;
    randomVals?: number[];
    noLogging?: boolean;
    log?: string;
}
export interface GenerateChangeSdkInput {
    satoshis: number;
    unlockingScriptLength: number;
}
export interface GenerateChangeSdkOutput {
    satoshis: number;
    lockingScriptLength: number;
}
export interface GenerateChangeSdkChangeInput {
    outputId: number;
    satoshis: number;
}
export interface GenerateChangeSdkChangeOutput {
    satoshis: number;
    lockingScriptLength: number;
}
export interface ValidateGenerateChangeSdkParamsResult {
    hasMaxPossibleOutput?: number;
}
export declare function validateGenerateChangeSdkParams(params: GenerateChangeSdkParams): ValidateGenerateChangeSdkParamsResult;
export interface GenerateChangeSdkStorageChange extends GenerateChangeSdkChangeInput {
    spendable: boolean;
}
export declare function generateChangeSdkMakeStorage(availableChange: GenerateChangeSdkChangeInput[]): {
    allocateChangeInput: (targetSatoshis: number, exactSatoshis?: number) => Promise<GenerateChangeSdkChangeInput | undefined>;
    releaseChangeInput: (outputId: number) => Promise<void>;
    getLog: () => string;
};
//# sourceMappingURL=generateChange.d.ts.map