import { Duration, DurationAmino, DurationSDKType } from '../../../../google/protobuf/duration';
import { Coin, CoinAmino, CoinSDKType } from '../../../cosmos/base/v1beta1/coin';
import { BinaryReader, BinaryWriter } from '../../../../binary';
/**
 * Parameters for changing the weights in a balancer pool smoothly from
 * a start weight and end weight over a period of time.
 * Currently, the only smooth change supported is linear changing between
 * the two weights, but more types may be added in the future.
 * When these parameters are set, the weight w(t) for pool time `t` is the
 * following:
 *   t <= start_time: w(t) = initial_pool_weights
 *   start_time < t <= start_time + duration:
 *     w(t) = initial_pool_weights + (t - start_time) *
 *       (target_pool_weights - initial_pool_weights) / (duration)
 *   t > start_time + duration: w(t) = target_pool_weights
 */
export interface SmoothWeightChangeParams {
    /**
     * The start time for beginning the weight change.
     * If a parameter change / pool instantiation leaves this blank,
     * it should be generated by the state_machine as the current time.
     */
    startTime: Date;
    /** Duration for the weights to change over */
    duration: Duration;
    /**
     * The initial pool weights. These are copied from the pool's settings
     * at the time of weight change instantiation.
     * The amount PoolAsset.token.amount field is ignored if present,
     * future type refactorings should just have a type with the denom & weight
     * here.
     */
    initialPoolWeights: PoolAsset[];
    /**
     * The target pool weights. The pool weights will change linearly with respect
     * to time between start_time, and start_time + duration. The amount
     * PoolAsset.token.amount field is ignored if present, future type
     * refactorings should just have a type with the denom & weight here.
     */
    targetPoolWeights: PoolAsset[];
}
export interface SmoothWeightChangeParamsProtoMsg {
    typeUrl: '/osmosis.gamm.v1beta1.SmoothWeightChangeParams';
    value: Uint8Array;
}
/**
 * Parameters for changing the weights in a balancer pool smoothly from
 * a start weight and end weight over a period of time.
 * Currently, the only smooth change supported is linear changing between
 * the two weights, but more types may be added in the future.
 * When these parameters are set, the weight w(t) for pool time `t` is the
 * following:
 *   t <= start_time: w(t) = initial_pool_weights
 *   start_time < t <= start_time + duration:
 *     w(t) = initial_pool_weights + (t - start_time) *
 *       (target_pool_weights - initial_pool_weights) / (duration)
 *   t > start_time + duration: w(t) = target_pool_weights
 */
export interface SmoothWeightChangeParamsAmino {
    /**
     * The start time for beginning the weight change.
     * If a parameter change / pool instantiation leaves this blank,
     * it should be generated by the state_machine as the current time.
     */
    start_time?: string;
    /** Duration for the weights to change over */
    duration?: DurationAmino;
    /**
     * The initial pool weights. These are copied from the pool's settings
     * at the time of weight change instantiation.
     * The amount PoolAsset.token.amount field is ignored if present,
     * future type refactorings should just have a type with the denom & weight
     * here.
     */
    initial_pool_weights?: PoolAssetAmino[];
    /**
     * The target pool weights. The pool weights will change linearly with respect
     * to time between start_time, and start_time + duration. The amount
     * PoolAsset.token.amount field is ignored if present, future type
     * refactorings should just have a type with the denom & weight here.
     */
    target_pool_weights?: PoolAssetAmino[];
}
export interface SmoothWeightChangeParamsAminoMsg {
    type: 'osmosis/gamm/smooth-weight-change-params';
    value: SmoothWeightChangeParamsAmino;
}
/**
 * Parameters for changing the weights in a balancer pool smoothly from
 * a start weight and end weight over a period of time.
 * Currently, the only smooth change supported is linear changing between
 * the two weights, but more types may be added in the future.
 * When these parameters are set, the weight w(t) for pool time `t` is the
 * following:
 *   t <= start_time: w(t) = initial_pool_weights
 *   start_time < t <= start_time + duration:
 *     w(t) = initial_pool_weights + (t - start_time) *
 *       (target_pool_weights - initial_pool_weights) / (duration)
 *   t > start_time + duration: w(t) = target_pool_weights
 */
export interface SmoothWeightChangeParamsSDKType {
    start_time: Date;
    duration: DurationSDKType;
    initial_pool_weights: PoolAssetSDKType[];
    target_pool_weights: PoolAssetSDKType[];
}
/**
 * PoolParams defined the parameters that will be managed by the pool
 * governance in the future. This params are not managed by the chain
 * governance. Instead they will be managed by the token holders of the pool.
 * The pool's token holders are specified in future_pool_governor.
 */
export interface PoolParams {
    swapFee: string;
    /**
     * N.B.: exit fee is disabled during pool creation in x/poolmanager. While old
     * pools can maintain a non-zero fee. No new pool can be created with non-zero
     * fee anymore
     */
    exitFee: string;
    smoothWeightChangeParams?: SmoothWeightChangeParams;
}
export interface PoolParamsProtoMsg {
    typeUrl: '/osmosis.gamm.v1beta1.PoolParams';
    value: Uint8Array;
}
/**
 * PoolParams defined the parameters that will be managed by the pool
 * governance in the future. This params are not managed by the chain
 * governance. Instead they will be managed by the token holders of the pool.
 * The pool's token holders are specified in future_pool_governor.
 */
export interface PoolParamsAmino {
    swap_fee?: string;
    /**
     * N.B.: exit fee is disabled during pool creation in x/poolmanager. While old
     * pools can maintain a non-zero fee. No new pool can be created with non-zero
     * fee anymore
     */
    exit_fee?: string;
    smooth_weight_change_params?: SmoothWeightChangeParamsAmino;
}
export interface PoolParamsAminoMsg {
    type: 'osmosis/gamm/BalancerPoolParams';
    value: PoolParamsAmino;
}
/**
 * PoolParams defined the parameters that will be managed by the pool
 * governance in the future. This params are not managed by the chain
 * governance. Instead they will be managed by the token holders of the pool.
 * The pool's token holders are specified in future_pool_governor.
 */
export interface PoolParamsSDKType {
    swap_fee: string;
    exit_fee: string;
    smooth_weight_change_params?: SmoothWeightChangeParamsSDKType;
}
/**
 * Pool asset is an internal struct that combines the amount of the
 * token in the pool, and its balancer weight.
 * This is an awkward packaging of data,
 * and should be revisited in a future state migration.
 */
export interface PoolAsset {
    /**
     * Coins we are talking about,
     * the denomination must be unique amongst all PoolAssets for this pool.
     */
    token: Coin;
    /** Weight that is not normalized. This weight must be less than 2^50 */
    weight: string;
}
export interface PoolAssetProtoMsg {
    typeUrl: '/osmosis.gamm.v1beta1.PoolAsset';
    value: Uint8Array;
}
/**
 * Pool asset is an internal struct that combines the amount of the
 * token in the pool, and its balancer weight.
 * This is an awkward packaging of data,
 * and should be revisited in a future state migration.
 */
export interface PoolAssetAmino {
    /**
     * Coins we are talking about,
     * the denomination must be unique amongst all PoolAssets for this pool.
     */
    token?: CoinAmino;
    /** Weight that is not normalized. This weight must be less than 2^50 */
    weight?: string;
}
export interface PoolAssetAminoMsg {
    type: 'osmosis/gamm/pool-asset';
    value: PoolAssetAmino;
}
/**
 * Pool asset is an internal struct that combines the amount of the
 * token in the pool, and its balancer weight.
 * This is an awkward packaging of data,
 * and should be revisited in a future state migration.
 */
export interface PoolAssetSDKType {
    token: CoinSDKType;
    weight: string;
}
export interface Pool {
    $typeUrl?: '/osmosis.gamm.v1beta1.Pool';
    address: string;
    id: bigint;
    poolParams: PoolParams;
    /**
     * This string specifies who will govern the pool in the future.
     * Valid forms of this are:
     * {token name},{duration}
     * {duration}
     * where {token name} if specified is the token which determines the
     * governor, and if not specified is the LP token for this pool.duration is
     * a time specified as 0w,1w,2w, etc. which specifies how long the token
     * would need to be locked up to count in governance. 0w means no lockup.
     * TODO: Further improve these docs
     */
    futurePoolGovernor: string;
    /** sum of all LP tokens sent out */
    totalShares: Coin;
    /**
     * These are assumed to be sorted by denomiation.
     * They contain the pool asset and the information about the weight
     */
    poolAssets: PoolAsset[];
    /** sum of all non-normalized pool weights */
    totalWeight: string;
}
export interface PoolProtoMsg {
    typeUrl: '/osmosis.gamm.v1beta1.Pool';
    value: Uint8Array;
}
export interface PoolAmino {
    address?: string;
    id?: string;
    pool_params?: PoolParamsAmino;
    /**
     * This string specifies who will govern the pool in the future.
     * Valid forms of this are:
     * {token name},{duration}
     * {duration}
     * where {token name} if specified is the token which determines the
     * governor, and if not specified is the LP token for this pool.duration is
     * a time specified as 0w,1w,2w, etc. which specifies how long the token
     * would need to be locked up to count in governance. 0w means no lockup.
     * TODO: Further improve these docs
     */
    future_pool_governor?: string;
    /** sum of all LP tokens sent out */
    total_shares?: CoinAmino;
    /**
     * These are assumed to be sorted by denomiation.
     * They contain the pool asset and the information about the weight
     */
    pool_assets?: PoolAssetAmino[];
    /** sum of all non-normalized pool weights */
    total_weight?: string;
}
export interface PoolAminoMsg {
    type: 'osmosis/gamm/BalancerPool';
    value: PoolAmino;
}
export interface PoolSDKType {
    $typeUrl?: '/osmosis.gamm.v1beta1.Pool';
    address: string;
    id: bigint;
    pool_params: PoolParamsSDKType;
    future_pool_governor: string;
    total_shares: CoinSDKType;
    pool_assets: PoolAssetSDKType[];
    total_weight: string;
}
export declare const SmoothWeightChangeParams: {
    typeUrl: string;
    aminoType: string;
    is(o: any): o is SmoothWeightChangeParams;
    isSDK(o: any): o is SmoothWeightChangeParamsSDKType;
    isAmino(o: any): o is SmoothWeightChangeParamsAmino;
    encode(message: SmoothWeightChangeParams, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): SmoothWeightChangeParams;
    fromPartial(object: Partial<SmoothWeightChangeParams>): SmoothWeightChangeParams;
    fromAmino(object: SmoothWeightChangeParamsAmino): SmoothWeightChangeParams;
    toAmino(message: SmoothWeightChangeParams): SmoothWeightChangeParamsAmino;
    fromAminoMsg(object: SmoothWeightChangeParamsAminoMsg): SmoothWeightChangeParams;
    toAminoMsg(message: SmoothWeightChangeParams): SmoothWeightChangeParamsAminoMsg;
    fromProtoMsg(message: SmoothWeightChangeParamsProtoMsg): SmoothWeightChangeParams;
    toProto(message: SmoothWeightChangeParams): Uint8Array;
    toProtoMsg(message: SmoothWeightChangeParams): SmoothWeightChangeParamsProtoMsg;
};
export declare const PoolParams: {
    typeUrl: string;
    aminoType: string;
    is(o: any): o is PoolParams;
    isSDK(o: any): o is PoolParamsSDKType;
    isAmino(o: any): o is PoolParamsAmino;
    encode(message: PoolParams, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): PoolParams;
    fromPartial(object: Partial<PoolParams>): PoolParams;
    fromAmino(object: PoolParamsAmino): PoolParams;
    toAmino(message: PoolParams): PoolParamsAmino;
    fromAminoMsg(object: PoolParamsAminoMsg): PoolParams;
    toAminoMsg(message: PoolParams): PoolParamsAminoMsg;
    fromProtoMsg(message: PoolParamsProtoMsg): PoolParams;
    toProto(message: PoolParams): Uint8Array;
    toProtoMsg(message: PoolParams): PoolParamsProtoMsg;
};
export declare const PoolAsset: {
    typeUrl: string;
    aminoType: string;
    is(o: any): o is PoolAsset;
    isSDK(o: any): o is PoolAssetSDKType;
    isAmino(o: any): o is PoolAssetAmino;
    encode(message: PoolAsset, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): PoolAsset;
    fromPartial(object: Partial<PoolAsset>): PoolAsset;
    fromAmino(object: PoolAssetAmino): PoolAsset;
    toAmino(message: PoolAsset): PoolAssetAmino;
    fromAminoMsg(object: PoolAssetAminoMsg): PoolAsset;
    toAminoMsg(message: PoolAsset): PoolAssetAminoMsg;
    fromProtoMsg(message: PoolAssetProtoMsg): PoolAsset;
    toProto(message: PoolAsset): Uint8Array;
    toProtoMsg(message: PoolAsset): PoolAssetProtoMsg;
};
export declare const Pool: {
    typeUrl: string;
    aminoType: string;
    is(o: any): o is Pool;
    isSDK(o: any): o is PoolSDKType;
    isAmino(o: any): o is PoolAmino;
    encode(message: Pool, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): Pool;
    fromPartial(object: Partial<Pool>): Pool;
    fromAmino(object: PoolAmino): Pool;
    toAmino(message: Pool): PoolAmino;
    fromAminoMsg(object: PoolAminoMsg): Pool;
    toAminoMsg(message: Pool): PoolAminoMsg;
    fromProtoMsg(message: PoolProtoMsg): Pool;
    toProto(message: Pool): Uint8Array;
    toProtoMsg(message: Pool): PoolProtoMsg;
};
