import type { Transaction } from "../../transactions/index.js";
import type { TreasuryObject, TreasuryAddress, TxString, ObjectResult, CallEnv, PassportObject, PermissionObject, PaymentObject, ReceivedObject, CoinParam, TypedPermissionObject, NamedObject, BalanceType, PaymentAddress } from "../common.js";
import type { AmountFromDepositGuard, AmountFromWithdrawGuard, PaymentInfo } from "../query/object.js";
import type { CallResult } from "./base.js";
import { CallBase } from "./base.js";
import type { GuardSubmissionToFill } from "./guard.js";
import type { AccountOrMark_Address } from "../local/index.js";
import type { ReceivedBalanceOrRecently, ReceivedObjectsOrRecently } from "../query/received.js";
export interface CallTreasury_Data {
    object: TypedPermissionObject;
    description?: string;
    receive?: ReceivedBalanceOrRecently;
    deposit?: {
        coin: CoinParam;
        by_external_deposit_guard?: string;
        payment_info: PaymentInfo;
        namedNewPayment?: NamedObject;
    };
    withdraw?: {
        amount: {
            fixed: BalanceType;
        } | {
            by_external_withdraw_guard: string;
        };
        recipient: AccountOrMark_Address;
        payment_info: PaymentInfo;
        namedNewPayment?: NamedObject;
    };
    external_deposit_guard?: {
        op: "add" | "set";
        guards: AmountFromDepositGuard[];
    } | {
        op: "remove";
        guards: string[];
    } | {
        op: "clear";
    };
    external_withdraw_guard?: {
        op: "add" | "set";
        guards: AmountFromWithdrawGuard[];
    } | {
        op: "remove";
        guards: string[];
    } | {
        op: "clear";
    };
    owner_receive?: ReceivedObjectsOrRecently;
    um?: string | null;
}
export declare class CallTreasury extends CallBase {
    data: CallTreasury_Data;
    object_address: string | undefined;
    permission_address: string | undefined;
    new_permission_description: string | undefined;
    parameter_type: string | undefined;
    constructor(data: CallTreasury_Data);
    protected prepare(env: CallEnv): Promise<void>;
    call(env: CallEnv): Promise<CallResult>;
    operate(env: CallEnv, tx: Transaction, passport?: PassportObject, submission?: GuardSubmissionToFill[]): Promise<void>;
}
export declare const MAX_EXTERNAL_DEPOSIT_GUARD_COUNT = 100;
export declare const MAX_EXTERNAL_WITHDRAW_GUARD_COUNT = 200;
export declare function newTreasury(tx: Transaction, treasury_type: string, permission: PermissionObject, description: TxString, passport?: PassportObject): ObjectResult;
export declare function description_set(tx: Transaction, treasury: TreasuryObject, treasury_type: string, permission: PermissionObject, description: TxString, passport?: PassportObject): void;
export declare function deposit(env: CallEnv, tx: Transaction, treasury: TreasuryObject, treasury_type: string, permission: PermissionObject, coin: CoinParam, payment_info: PaymentInfo, passport?: PassportObject): Promise<PaymentAddress>;
export declare function withdraw(env: CallEnv, tx: Transaction, treasury: TreasuryObject, treasury_type: string, permission: PermissionObject, amount: BalanceType, recipient: AccountOrMark_Address, payment_info: PaymentInfo, passport?: PassportObject): Promise<PaymentAddress>;
export declare function external_deposit_guard_add(tx: Transaction, treasury: TreasuryObject, treasury_type: string, permission: PermissionObject, guards: AmountFromDepositGuard[], counts?: number, passport?: PassportObject): Promise<void>;
export declare function external_deposit_guard_remove(tx: Transaction, treasury: TreasuryObject, treasury_type: string, permission: PermissionObject, guards: string[], counts?: number, passport?: PassportObject): Promise<void>;
export declare function external_deposit_guard_clear(tx: Transaction, treasury: TreasuryObject, treasury_type: string, permission: PermissionObject, passport?: PassportObject): void;
export declare function external_withdraw_guard_add(tx: Transaction, treasury: TreasuryObject, treasury_type: string, permission: PermissionObject, guards: AmountFromWithdrawGuard[], counts?: number, passport?: PassportObject): Promise<void>;
export declare function external_withdraw_guard_remove(tx: Transaction, treasury: TreasuryObject, treasury_type: string, permission: PermissionObject, guards: string[], counts?: number, passport?: PassportObject): Promise<void>;
export declare function external_withdraw_guard_clear(tx: Transaction, treasury: TreasuryObject, treasury_type: string, permission: PermissionObject, passport?: PassportObject): void;
export declare function create(tx: Transaction, treasury: TreasuryObject, treasury_type: string): TreasuryAddress;
export declare function external_deposit(env: CallEnv, tx: Transaction, treasury: TreasuryObject, treasury_type: string, passport: PassportObject, external_deposit_guard: string, coin: CoinParam, payment_info: PaymentInfo): Promise<PaymentAddress>;
export declare function external_withdraw(env: CallEnv, tx: Transaction, treasury: TreasuryObject, treasury_type: string, passport: PassportObject, external_withdraw_guard: string, recipient: AccountOrMark_Address, payment_info: PaymentInfo): Promise<PaymentAddress>;
export declare function receive(tx: Transaction, treasury: TreasuryObject, treasury_type: string, permission: PermissionObject, received: ReceivedObject, payment: PaymentObject, passport?: PassportObject): void;
export declare function um_set(tx: Transaction, treasury: TreasuryObject, treasury_type: string, permission: PermissionObject, um: string | null, passport?: PassportObject): void;
