import { Duration, DurationAmino, DurationSDKType } from '../../../google/protobuf/duration';
import { Coin, CoinAmino, CoinSDKType } from '../../cosmos/base/v1beta1/coin';
import { BinaryReader, BinaryWriter } from '../../../binary';
/**
 * LockQueryType defines the type of the lock query that can
 * either be by duration or start time of the lock.
 */
export declare enum LockQueryType {
    ByDuration = 0,
    ByTime = 1,
    NoLock = 2,
    ByGroup = 3,
    UNRECOGNIZED = -1
}
export declare const LockQueryTypeSDKType: typeof LockQueryType;
export declare const LockQueryTypeAmino: typeof LockQueryType;
export declare function lockQueryTypeFromJSON(object: any): LockQueryType;
export declare function lockQueryTypeToJSON(object: LockQueryType): string;
/**
 * PeriodLock is a single lock unit by period defined by the x/lockup module.
 * It's a record of a locked coin at a specific time. It stores owner, duration,
 * unlock time and the number of coins locked. A state of a period lock is
 * created upon lock creation, and deleted once the lock has been matured after
 * the `duration` has passed since unbonding started.
 */
export interface PeriodLock {
    /**
     * ID is the unique id of the lock.
     * The ID of the lock is decided upon lock creation, incrementing by 1 for
     * every lock.
     */
    ID: bigint;
    /**
     * Owner is the account address of the lock owner.
     * Only the owner can modify the state of the lock.
     */
    owner: string;
    /**
     * Duration is the time needed for a lock to mature after unlocking has
     * started.
     */
    duration: Duration;
    /**
     * EndTime refers to the time at which the lock would mature and get deleted.
     * This value is first initialized when an unlock has started for the lock,
     * end time being block time + duration.
     */
    endTime: Date;
    /** Coins are the tokens locked within the lock, kept in the module account. */
    coins: Coin[];
    /**
     * Reward Receiver Address is the address that would be receiving rewards for
     * the incentives for the lock. This is set to owner by default and can be
     * changed via separate msg.
     */
    rewardReceiverAddress: string;
}
export interface PeriodLockProtoMsg {
    typeUrl: '/osmosis.lockup.PeriodLock';
    value: Uint8Array;
}
/**
 * PeriodLock is a single lock unit by period defined by the x/lockup module.
 * It's a record of a locked coin at a specific time. It stores owner, duration,
 * unlock time and the number of coins locked. A state of a period lock is
 * created upon lock creation, and deleted once the lock has been matured after
 * the `duration` has passed since unbonding started.
 */
export interface PeriodLockAmino {
    /**
     * ID is the unique id of the lock.
     * The ID of the lock is decided upon lock creation, incrementing by 1 for
     * every lock.
     */
    ID?: string;
    /**
     * Owner is the account address of the lock owner.
     * Only the owner can modify the state of the lock.
     */
    owner?: string;
    /**
     * Duration is the time needed for a lock to mature after unlocking has
     * started.
     */
    duration?: DurationAmino;
    /**
     * EndTime refers to the time at which the lock would mature and get deleted.
     * This value is first initialized when an unlock has started for the lock,
     * end time being block time + duration.
     */
    end_time?: string;
    /** Coins are the tokens locked within the lock, kept in the module account. */
    coins?: CoinAmino[];
    /**
     * Reward Receiver Address is the address that would be receiving rewards for
     * the incentives for the lock. This is set to owner by default and can be
     * changed via separate msg.
     */
    reward_receiver_address?: string;
}
export interface PeriodLockAminoMsg {
    type: 'osmosis/lockup/period-lock';
    value: PeriodLockAmino;
}
/**
 * PeriodLock is a single lock unit by period defined by the x/lockup module.
 * It's a record of a locked coin at a specific time. It stores owner, duration,
 * unlock time and the number of coins locked. A state of a period lock is
 * created upon lock creation, and deleted once the lock has been matured after
 * the `duration` has passed since unbonding started.
 */
export interface PeriodLockSDKType {
    ID: bigint;
    owner: string;
    duration: DurationSDKType;
    end_time: Date;
    coins: CoinSDKType[];
    reward_receiver_address: string;
}
/**
 * QueryCondition is a struct used for querying locks upon different conditions.
 * Duration field and timestamp fields could be optional, depending on the
 * LockQueryType.
 */
export interface QueryCondition {
    /** LockQueryType is a type of lock query, ByLockDuration | ByLockTime */
    lockQueryType: LockQueryType;
    /** Denom represents the token denomination we are looking to lock up */
    denom: string;
    /**
     * Duration is used to query locks with longer duration than the specified
     * duration. Duration field must not be nil when the lock query type is
     * `ByLockDuration`.
     */
    duration: Duration;
    /**
     * Timestamp is used by locks started before the specified duration.
     * Timestamp field must not be nil when the lock query type is `ByLockTime`.
     * Querying locks with timestamp is currently not implemented.
     */
    timestamp: Date;
}
export interface QueryConditionProtoMsg {
    typeUrl: '/osmosis.lockup.QueryCondition';
    value: Uint8Array;
}
/**
 * QueryCondition is a struct used for querying locks upon different conditions.
 * Duration field and timestamp fields could be optional, depending on the
 * LockQueryType.
 */
export interface QueryConditionAmino {
    /** LockQueryType is a type of lock query, ByLockDuration | ByLockTime */
    lock_query_type?: LockQueryType;
    /** Denom represents the token denomination we are looking to lock up */
    denom?: string;
    /**
     * Duration is used to query locks with longer duration than the specified
     * duration. Duration field must not be nil when the lock query type is
     * `ByLockDuration`.
     */
    duration?: DurationAmino;
    /**
     * Timestamp is used by locks started before the specified duration.
     * Timestamp field must not be nil when the lock query type is `ByLockTime`.
     * Querying locks with timestamp is currently not implemented.
     */
    timestamp?: string;
}
export interface QueryConditionAminoMsg {
    type: 'osmosis/lockup/query-condition';
    value: QueryConditionAmino;
}
/**
 * QueryCondition is a struct used for querying locks upon different conditions.
 * Duration field and timestamp fields could be optional, depending on the
 * LockQueryType.
 */
export interface QueryConditionSDKType {
    lock_query_type: LockQueryType;
    denom: string;
    duration: DurationSDKType;
    timestamp: Date;
}
/**
 * SyntheticLock is creating virtual lockup where new denom is combination of
 * original denom and synthetic suffix. At the time of synthetic lockup creation
 * and deletion, accumulation store is also being updated and on querier side,
 * they can query as freely as native lockup.
 */
export interface SyntheticLock {
    /**
     * Underlying Lock ID is the underlying native lock's id for this synthetic
     * lockup. A synthetic lock MUST have an underlying lock.
     */
    underlyingLockId: bigint;
    /**
     * SynthDenom is the synthetic denom that is a combination of
     * gamm share + bonding status + validator address.
     */
    synthDenom: string;
    /**
     * used for unbonding synthetic lockups, for active synthetic lockups, this
     * value is set to uninitialized value
     */
    endTime: Date;
    /**
     * Duration is the duration for a synthetic lock to mature
     * at the point of unbonding has started.
     */
    duration: Duration;
}
export interface SyntheticLockProtoMsg {
    typeUrl: '/osmosis.lockup.SyntheticLock';
    value: Uint8Array;
}
/**
 * SyntheticLock is creating virtual lockup where new denom is combination of
 * original denom and synthetic suffix. At the time of synthetic lockup creation
 * and deletion, accumulation store is also being updated and on querier side,
 * they can query as freely as native lockup.
 */
export interface SyntheticLockAmino {
    /**
     * Underlying Lock ID is the underlying native lock's id for this synthetic
     * lockup. A synthetic lock MUST have an underlying lock.
     */
    underlying_lock_id?: string;
    /**
     * SynthDenom is the synthetic denom that is a combination of
     * gamm share + bonding status + validator address.
     */
    synth_denom?: string;
    /**
     * used for unbonding synthetic lockups, for active synthetic lockups, this
     * value is set to uninitialized value
     */
    end_time?: string;
    /**
     * Duration is the duration for a synthetic lock to mature
     * at the point of unbonding has started.
     */
    duration?: DurationAmino;
}
export interface SyntheticLockAminoMsg {
    type: 'osmosis/lockup/synthetic-lock';
    value: SyntheticLockAmino;
}
/**
 * SyntheticLock is creating virtual lockup where new denom is combination of
 * original denom and synthetic suffix. At the time of synthetic lockup creation
 * and deletion, accumulation store is also being updated and on querier side,
 * they can query as freely as native lockup.
 */
export interface SyntheticLockSDKType {
    underlying_lock_id: bigint;
    synth_denom: string;
    end_time: Date;
    duration: DurationSDKType;
}
export declare const PeriodLock: {
    typeUrl: string;
    aminoType: string;
    is(o: any): o is PeriodLock;
    isSDK(o: any): o is PeriodLockSDKType;
    isAmino(o: any): o is PeriodLockAmino;
    encode(message: PeriodLock, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): PeriodLock;
    fromPartial(object: Partial<PeriodLock>): PeriodLock;
    fromAmino(object: PeriodLockAmino): PeriodLock;
    toAmino(message: PeriodLock): PeriodLockAmino;
    fromAminoMsg(object: PeriodLockAminoMsg): PeriodLock;
    toAminoMsg(message: PeriodLock): PeriodLockAminoMsg;
    fromProtoMsg(message: PeriodLockProtoMsg): PeriodLock;
    toProto(message: PeriodLock): Uint8Array;
    toProtoMsg(message: PeriodLock): PeriodLockProtoMsg;
};
export declare const QueryCondition: {
    typeUrl: string;
    aminoType: string;
    is(o: any): o is QueryCondition;
    isSDK(o: any): o is QueryConditionSDKType;
    isAmino(o: any): o is QueryConditionAmino;
    encode(message: QueryCondition, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): QueryCondition;
    fromPartial(object: Partial<QueryCondition>): QueryCondition;
    fromAmino(object: QueryConditionAmino): QueryCondition;
    toAmino(message: QueryCondition): QueryConditionAmino;
    fromAminoMsg(object: QueryConditionAminoMsg): QueryCondition;
    toAminoMsg(message: QueryCondition): QueryConditionAminoMsg;
    fromProtoMsg(message: QueryConditionProtoMsg): QueryCondition;
    toProto(message: QueryCondition): Uint8Array;
    toProtoMsg(message: QueryCondition): QueryConditionProtoMsg;
};
export declare const SyntheticLock: {
    typeUrl: string;
    aminoType: string;
    is(o: any): o is SyntheticLock;
    isSDK(o: any): o is SyntheticLockSDKType;
    isAmino(o: any): o is SyntheticLockAmino;
    encode(message: SyntheticLock, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): SyntheticLock;
    fromPartial(object: Partial<SyntheticLock>): SyntheticLock;
    fromAmino(object: SyntheticLockAmino): SyntheticLock;
    toAmino(message: SyntheticLock): SyntheticLockAmino;
    fromAminoMsg(object: SyntheticLockAminoMsg): SyntheticLock;
    toAminoMsg(message: SyntheticLock): SyntheticLockAminoMsg;
    fromProtoMsg(message: SyntheticLockProtoMsg): SyntheticLock;
    toProto(message: SyntheticLock): Uint8Array;
    toProtoMsg(message: SyntheticLock): SyntheticLockProtoMsg;
};
