import { UserOperation } from "../entity/userOperation";
import { ethers } from "ethers";
import { NumberLike } from "../defines/numberLike";
/**
 * guardian class
 * @class Guardian
 */
export declare class Guardian {
    private _singletonFactory;
    /**
     * Creates an instance of Guardian.
     * @param {string} singletonFactory singleton factory address
     * @constructor
     * @returns {Guardian}
     */
    constructor(singletonFactory: string);
    private getInitializeData;
    private getGuardianCode;
    private getPackedInitCode;
    /**
     * sign a user operation with guardian signatures
     * @param {Number} validAfter valid after (block time)
     * @param {Number} validUntil valid until (block time)
     * @param {guardianSignature[]} signatures guardian signatures
     * @param {string} guardianLogicAddress guardian logic contract address
     * @param {string[]} guardians guardian addresses
     * @param {Number} threshold threshold
     * @param {string} salt salt
     * @param {string} [guardianAddress] guardian contract address,if provided will check if equal to the calculated guardian address
     * @returns {string} signature
     */
    packGuardiansSign(validAfter: number, validUntil: number, signature: guardianSignature[], guardianLogicAddress: string, guardians: string[], threshold: number, salt: string, guardianAddress?: string): string;
    /**
     * sign a user operation with guardian signatures
     *
     * @param {string} guardianAddress
     * @param {guardianSignature[]} signature
     * @param {string} [initCode='0x']
     * @param {number} [validAfter=0]
     * @param {number} [validUntil=0]
     * @return {*}  {string}
     * @memberof Guardian
     */
    packGuardiansSignByInitCode(guardianAddress: string, signature: guardianSignature[], initCode?: string, validAfter?: number, validUntil?: number): string;
    /**
     * calculate Guardian address and deploy code (initCode)
     * @param {String} guardianLogicAddress guardian logic contract address
     * @param {String[]} guardians guardian addresses
     * @param {Number} threshold threshold
     * @param {String} salt salt
     * @returns {String,String} address is the guardian contract address,initCode is the deploy code
     */
    calculateGuardianAndInitCode(guardianLogicAddress: string, guardians: string[], threshold: number, salt: string): {
        address: string;
        initCode: string;
    };
    private walletContract;
    /**
     * get guardian info
     * @param {ethers.providers.BaseProvider} etherProvider
     * @param {String} walletAddress  wallet address
     * @param {Number} [now=0] current timestamp ( 0: use current timestamp, >0:unix timestamp  )
     * @returns {Promise<{currentGuardian:String,guardianDelay:Number}>} (currentGuardian, guardianDelay)
     */
    getGuardian(etherProvider: ethers.providers.BaseProvider, walletAddress: string, now?: number): Promise<{
        currentGuardian: string;
        nextGuardian: string;
        nextGuardianActivateTime: any;
        guardianDelay: number;
    } | null>;
    private _guardian;
    /**
     * set guardian
     * @param {String} walletAddress wallet address
     * @param {String} guardian new guardian address
     * @param {Number} nonce nonce
     * @param {String} paymasterAddress paymaster address
     * @param {Number} maxFeePerGas max fee per gas
     * @param {Number} maxPriorityFeePerGas max priority fee per gas
     * @returns {Promise<UserOperation>} userOperation
     */
    setGuardian(walletAddress: string, guardian: string, nonce: NumberLike, paymasterAddress: string, maxFeePerGas: NumberLike, maxPriorityFeePerGas: NumberLike): UserOperation;
    /**
     * transfer owner
     * @param {String} walletAddress wallet address
     * @param {Number} nonce nonce
     * @param {String} paymasterAddress paymaster address
     * @param {Number} maxFeePerGas max fee per gas
     * @param {Number} maxPriorityFeePerGas max priority fee per gas
     * @param {String} newOwner new owner address
     * @returns {Promise<UserOperation>} userOperation
     */
    transferOwner(walletAddress: string, nonce: NumberLike, paymasterAddress: string, maxFeePerGas: NumberLike, maxPriorityFeePerGas: NumberLike, newOwner: string): UserOperation;
    /**
     * pack guardian signature
     * @param {guardianSignature[]} signature
     * @returns {String} packed signature
     */
    guardianSign(signature: guardianSignature[]): string;
}
/**
 * guardian signature
 * @interface guardianSignature
 * @property {boolean} contract is contract wallet
 * @property {string} address guardian address
 * @property {string} signature guardian signature
 */
export interface guardianSignature {
    contract: boolean;
    address: string;
    signature: string;
}
