@hyperlane-xyz/sdk
Version:
The official SDK for the Hyperlane Network
1,384 lines • 76.1 kB
TypeScript
import { z } from 'zod';
export declare enum IcaRouterType {
REGULAR = "regular",
MINIMAL = "minimal"
}
/**
* Schema for fee token approval configuration.
* Used to pre-approve ERC-20 fee tokens for hooks (e.g., IGP inside aggregation hooks).
*/
export declare const FeeTokenApprovalSchema: z.ZodObject<{
/** ERC-20 fee token address */
feeToken: z.ZodString;
/** Hook address to approve (e.g., IGP inside StaticAggregationHook) */
hook: z.ZodString;
}, "strip", z.ZodTypeAny, {
hook: string;
feeToken: string;
}, {
hook: string;
feeToken: string;
}>;
export type FeeTokenApproval = z.infer<typeof FeeTokenApprovalSchema>;
export declare const IcaRouterConfigSchema: z.ZodObject<{
owner: z.ZodString;
ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
} & {
mailbox: z.ZodString;
hook: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodObject<{
owner: z.ZodString;
ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
} & {
type: z.ZodLiteral<"protocolFee">;
beneficiary: z.ZodString;
maxProtocolFee: z.ZodString;
protocolFee: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: "protocolFee";
owner: string;
protocolFee: string;
beneficiary: string;
maxProtocolFee: string;
ownerOverrides?: Record<string, string> | undefined;
}, {
type: "protocolFee";
owner: string;
protocolFee: string;
beneficiary: string;
maxProtocolFee: string;
ownerOverrides?: Record<string, string> | undefined;
}>, z.ZodObject<{
owner: z.ZodString;
ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
} & {
paused: z.ZodBoolean;
} & {
type: z.ZodLiteral<"pausableHook">;
}, "strip", z.ZodTypeAny, {
type: "pausableHook";
owner: string;
paused: boolean;
ownerOverrides?: Record<string, string> | undefined;
}, {
type: "pausableHook";
owner: string;
paused: boolean;
ownerOverrides?: Record<string, string> | undefined;
}>, z.ZodObject<{
owner: z.ZodString;
ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
} & {
type: z.ZodLiteral<"opStackHook">;
nativeBridge: z.ZodString;
destinationChain: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: "opStackHook";
owner: string;
nativeBridge: string;
destinationChain: string;
ownerOverrides?: Record<string, string> | undefined;
}, {
type: "opStackHook";
owner: string;
nativeBridge: string;
destinationChain: string;
ownerOverrides?: Record<string, string> | undefined;
}>, z.ZodObject<{
type: z.ZodLiteral<"merkleTreeHook">;
}, "strip", z.ZodTypeAny, {
type: "merkleTreeHook";
}, {
type: "merkleTreeHook";
}>, z.ZodObject<{
owner: z.ZodString;
ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
} & {
type: z.ZodLiteral<"interchainGasPaymaster">;
beneficiary: z.ZodString;
oracleKey: z.ZodString;
overhead: z.ZodRecord<z.ZodString, z.ZodNumber>;
oracleConfig: z.ZodRecord<z.ZodString, z.ZodObject<{
gasPrice: z.ZodString;
tokenExchangeRate: z.ZodString;
} & {
tokenDecimals: z.ZodOptional<z.ZodNumber>;
} & {
typicalCost: z.ZodOptional<z.ZodObject<{
handleGasAmount: z.ZodNumber;
totalGasAmount: z.ZodNumber;
totalUsdCost: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
handleGasAmount: number;
totalGasAmount: number;
totalUsdCost: number;
}, {
handleGasAmount: number;
totalGasAmount: number;
totalUsdCost: number;
}>>;
}, "strip", z.ZodTypeAny, {
gasPrice: string;
tokenExchangeRate: string;
tokenDecimals?: number | undefined;
typicalCost?: {
handleGasAmount: number;
totalGasAmount: number;
totalUsdCost: number;
} | undefined;
}, {
gasPrice: string;
tokenExchangeRate: string;
tokenDecimals?: number | undefined;
typicalCost?: {
handleGasAmount: number;
totalGasAmount: number;
totalUsdCost: number;
} | undefined;
}>>;
quoteSigners: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
contractVersion: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
type: "interchainGasPaymaster";
owner: string;
beneficiary: string;
oracleKey: string;
overhead: Record<string, number>;
oracleConfig: Record<string, {
gasPrice: string;
tokenExchangeRate: string;
tokenDecimals?: number | undefined;
typicalCost?: {
handleGasAmount: number;
totalGasAmount: number;
totalUsdCost: number;
} | undefined;
}>;
ownerOverrides?: Record<string, string> | undefined;
quoteSigners?: string[] | undefined;
contractVersion?: string | undefined;
}, {
type: "interchainGasPaymaster";
owner: string;
beneficiary: string;
oracleKey: string;
overhead: Record<string, number>;
oracleConfig: Record<string, {
gasPrice: string;
tokenExchangeRate: string;
tokenDecimals?: number | undefined;
typicalCost?: {
handleGasAmount: number;
totalGasAmount: number;
totalUsdCost: number;
} | undefined;
}>;
ownerOverrides?: Record<string, string> | undefined;
quoteSigners?: string[] | undefined;
contractVersion?: string | undefined;
}>, z.ZodType<import("../index.js").DomainRoutingHookConfig, z.ZodTypeDef, import("../index.js").DomainRoutingHookConfig>, z.ZodType<import("../index.js").FallbackRoutingHookConfig, z.ZodTypeDef, import("../index.js").FallbackRoutingHookConfig>, z.ZodType<import("../hook/types.js").AmountRoutingHookConfig, z.ZodTypeDef, import("../hook/types.js").AmountRoutingHookConfig>, z.ZodType<import("../index.js").AggregationHookConfig, z.ZodTypeDef, import("../index.js").AggregationHookConfig>, z.ZodObject<{
type: z.ZodLiteral<"arbL2ToL1Hook">;
arbSys: z.ZodString;
bridge: z.ZodOptional<z.ZodString>;
destinationChain: z.ZodString;
childHook: z.ZodLazy<z.ZodType<any, z.ZodTypeDef, any>>;
}, "strip", z.ZodTypeAny, {
type: "arbL2ToL1Hook";
destinationChain: string;
arbSys: string;
bridge?: string | undefined;
childHook?: any;
}, {
type: "arbL2ToL1Hook";
destinationChain: string;
arbSys: string;
bridge?: string | undefined;
childHook?: any;
}>, z.ZodObject<{
type: z.ZodLiteral<"defaultHook">;
}, "strip", z.ZodTypeAny, {
type: "defaultHook";
}, {
type: "defaultHook";
}>, z.ZodObject<{
type: z.ZodLiteral<"ccipHook">;
destinationChain: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: "ccipHook";
destinationChain: string;
}, {
type: "ccipHook";
destinationChain: string;
}>, z.ZodObject<{
type: z.ZodLiteral<"cctpHook">;
address: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: "cctpHook";
address: string;
}, {
type: "cctpHook";
address: string;
}>, z.ZodEffects<z.ZodEffects<z.ZodObject<{
owner: z.ZodString;
ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
} & {
type: z.ZodLiteral<"rateLimitedHook">;
maxCapacity: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: "rateLimitedHook";
owner: string;
maxCapacity: string;
ownerOverrides?: Record<string, string> | undefined;
}, {
type: "rateLimitedHook";
owner: string;
maxCapacity: string;
ownerOverrides?: Record<string, string> | undefined;
}>, {
type: "rateLimitedHook";
owner: string;
maxCapacity: string;
ownerOverrides?: Record<string, string> | undefined;
}, {
type: "rateLimitedHook";
owner: string;
maxCapacity: string;
ownerOverrides?: Record<string, string> | undefined;
}>, {
type: "rateLimitedHook";
owner: string;
maxCapacity: string;
ownerOverrides?: Record<string, string> | undefined;
}, {
type: "rateLimitedHook";
owner: string;
maxCapacity: string;
ownerOverrides?: Record<string, string> | undefined;
}>, z.ZodObject<{
type: z.ZodLiteral<"unknownHook">;
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
type: z.ZodLiteral<"unknownHook">;
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
type: z.ZodLiteral<"unknownHook">;
}, z.ZodTypeAny, "passthrough">>, z.ZodObject<{
type: z.ZodLiteral<"predicateHook">;
address: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: "predicateHook";
address: string;
}, {
type: "predicateHook";
address: string;
}>]>>;
interchainSecurityModule: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodObject<{
type: z.ZodLiteral<"testIsm">;
}, "strip", z.ZodTypeAny, {
type: "testIsm";
}, {
type: "testIsm";
}>, z.ZodObject<{
type: z.ZodLiteral<"opStackIsm">;
origin: z.ZodString;
nativeBridge: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: "opStackIsm";
origin: string;
nativeBridge: string;
}, {
type: "opStackIsm";
origin: string;
nativeBridge: string;
}>, z.ZodIntersection<z.ZodObject<{
owner: z.ZodString;
ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
} & {
paused: z.ZodBoolean;
}, "strip", z.ZodTypeAny, {
owner: string;
paused: boolean;
ownerOverrides?: Record<string, string> | undefined;
}, {
owner: string;
paused: boolean;
ownerOverrides?: Record<string, string> | undefined;
}>, z.ZodObject<{
type: z.ZodLiteral<"pausableIsm">;
}, "strip", z.ZodTypeAny, {
type: "pausableIsm";
}, {
type: "pausableIsm";
}>>, z.ZodObject<{
type: z.ZodLiteral<"trustedRelayerIsm">;
relayer: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: "trustedRelayerIsm";
relayer: string;
}, {
type: "trustedRelayerIsm";
relayer: string;
}>, z.ZodObject<{
type: z.ZodLiteral<"ccipIsm">;
originChain: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: "ccipIsm";
originChain: string;
}, {
type: "ccipIsm";
originChain: string;
}>, z.ZodEffects<z.ZodEffects<z.ZodObject<{
type: z.ZodLiteral<"rateLimitedIsm">;
maxCapacity: z.ZodString;
recipient: z.ZodOptional<z.ZodString>;
owner: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
type: "rateLimitedIsm";
maxCapacity: string;
owner?: string | undefined;
recipient?: string | undefined;
}, {
type: "rateLimitedIsm";
maxCapacity: string;
owner?: string | undefined;
recipient?: string | undefined;
}>, {
type: "rateLimitedIsm";
maxCapacity: string;
owner?: string | undefined;
recipient?: string | undefined;
}, {
type: "rateLimitedIsm";
maxCapacity: string;
owner?: string | undefined;
recipient?: string | undefined;
}>, {
type: "rateLimitedIsm";
maxCapacity: string;
owner?: string | undefined;
recipient?: string | undefined;
}, {
type: "rateLimitedIsm";
maxCapacity: string;
owner?: string | undefined;
recipient?: string | undefined;
}>, z.ZodIntersection<z.ZodObject<{
validators: z.ZodArray<z.ZodString, "many">;
threshold: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
threshold: number;
validators: string[];
}, {
threshold: number;
validators: string[];
}>, z.ZodObject<{
type: z.ZodUnion<[z.ZodLiteral<"merkleRootMultisigIsm">, z.ZodLiteral<"messageIdMultisigIsm">, z.ZodLiteral<"storageMerkleRootMultisigIsm">, z.ZodLiteral<"storageMessageIdMultisigIsm">]>;
}, "strip", z.ZodTypeAny, {
type: "merkleRootMultisigIsm" | "messageIdMultisigIsm" | "storageMerkleRootMultisigIsm" | "storageMessageIdMultisigIsm";
}, {
type: "merkleRootMultisigIsm" | "messageIdMultisigIsm" | "storageMerkleRootMultisigIsm" | "storageMessageIdMultisigIsm";
}>>, z.ZodIntersection<z.ZodObject<{
validators: z.ZodArray<z.ZodObject<{
signingAddress: z.ZodString;
weight: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
signingAddress: string;
weight: number;
}, {
signingAddress: string;
weight: number;
}>, "many">;
thresholdWeight: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
validators: {
signingAddress: string;
weight: number;
}[];
thresholdWeight: number;
}, {
validators: {
signingAddress: string;
weight: number;
}[];
thresholdWeight: number;
}>, z.ZodObject<{
type: z.ZodUnion<[z.ZodLiteral<"weightedMerkleRootMultisigIsm">, z.ZodLiteral<"weightedMessageIdMultisigIsm">]>;
}, "strip", z.ZodTypeAny, {
type: "weightedMerkleRootMultisigIsm" | "weightedMessageIdMultisigIsm";
}, {
type: "weightedMerkleRootMultisigIsm" | "weightedMessageIdMultisigIsm";
}>>, z.ZodType<import("../ism/types.js").RoutingIsmConfig, z.ZodTypeDef, import("../ism/types.js").RoutingIsmConfig>, z.ZodType<import("../ism/types.js").AggregationIsmConfig, z.ZodTypeDef, import("../ism/types.js").AggregationIsmConfig>, z.ZodObject<{
type: z.ZodLiteral<"arbL2ToL1Ism">;
bridge: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: "arbL2ToL1Ism";
bridge: string;
}, {
type: "arbL2ToL1Ism";
bridge: string;
}>, z.ZodObject<{
owner: z.ZodString;
ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
} & {
type: z.ZodLiteral<"offchainLookupIsm">;
urls: z.ZodArray<z.ZodString, "many">;
}, "strip", z.ZodTypeAny, {
type: "offchainLookupIsm";
owner: string;
urls: string[];
ownerOverrides?: Record<string, string> | undefined;
}, {
type: "offchainLookupIsm";
owner: string;
urls: string[];
ownerOverrides?: Record<string, string> | undefined;
}>, z.ZodObject<{
owner: z.ZodString;
ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
} & {
type: z.ZodLiteral<"interchainAccountRouting">;
isms: z.ZodRecord<z.ZodString, z.ZodString>;
}, "strip", z.ZodTypeAny, {
type: "interchainAccountRouting";
owner: string;
isms: Record<string, string>;
ownerOverrides?: Record<string, string> | undefined;
}, {
type: "interchainAccountRouting";
owner: string;
isms: Record<string, string>;
ownerOverrides?: Record<string, string> | undefined;
}>, z.ZodObject<{
type: z.ZodLiteral<"unknownIsm">;
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
type: z.ZodLiteral<"unknownIsm">;
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
type: z.ZodLiteral<"unknownIsm">;
}, z.ZodTypeAny, "passthrough">>]>>;
} & {
foreignDeployment: z.ZodOptional<z.ZodString>;
} & {
remoteRouters: z.ZodOptional<z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodObject<{
address: z.ZodString;
}, "strip", z.ZodTypeAny, {
address: string;
}, {
address: string;
}>>>;
proxyAdmin: z.ZodOptional<z.ZodObject<{
owner: z.ZodString;
ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
} & {
address: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
owner: string;
address?: string | undefined;
ownerOverrides?: Record<string, string> | undefined;
}, {
owner: string;
address?: string | undefined;
ownerOverrides?: Record<string, string> | undefined;
}>>;
tokenFee: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodObject<{
owner: z.ZodString;
} & {
maxFee: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>>;
halfAmount: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>>;
type: z.ZodLiteral<import("../index.js").TokenFeeType.LinearFee>;
bps: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodNumber, z.ZodString]>, number, string | number>, number, string | number>>;
}, "strip", z.ZodTypeAny, {
type: import("../index.js").TokenFeeType.LinearFee;
owner: string;
maxFee?: bigint | undefined;
halfAmount?: bigint | undefined;
bps?: number | undefined;
}, {
type: import("../index.js").TokenFeeType.LinearFee;
owner: string;
maxFee?: string | number | bigint | undefined;
halfAmount?: string | number | bigint | undefined;
bps?: string | number | undefined;
}>, {
type: import("../index.js").TokenFeeType.LinearFee;
owner: string;
maxFee?: bigint | undefined;
halfAmount?: bigint | undefined;
bps?: number | undefined;
}, {
type: import("../index.js").TokenFeeType.LinearFee;
owner: string;
maxFee?: string | number | bigint | undefined;
halfAmount?: string | number | bigint | undefined;
bps?: string | number | undefined;
}>, {
bps: number;
type: import("../index.js").TokenFeeType.LinearFee;
owner: string;
maxFee?: bigint | undefined;
halfAmount?: bigint | undefined;
}, {
type: import("../index.js").TokenFeeType.LinearFee;
owner: string;
maxFee?: string | number | bigint | undefined;
halfAmount?: string | number | bigint | undefined;
bps?: string | number | undefined;
}>, z.ZodEffects<z.ZodEffects<z.ZodObject<{
owner: z.ZodString;
} & {
quoteSigners: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
} & {
maxFee: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>>;
halfAmount: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>>;
type: z.ZodLiteral<import("../index.js").TokenFeeType.OffchainQuotedLinearFee>;
bps: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodNumber, z.ZodString]>, number, string | number>, number, string | number>>;
}, "strip", z.ZodTypeAny, {
type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
owner: string;
maxFee?: bigint | undefined;
halfAmount?: bigint | undefined;
bps?: number | undefined;
quoteSigners?: string[] | undefined;
}, {
type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
owner: string;
maxFee?: string | number | bigint | undefined;
halfAmount?: string | number | bigint | undefined;
bps?: string | number | undefined;
quoteSigners?: string[] | undefined;
}>, {
type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
owner: string;
maxFee?: bigint | undefined;
halfAmount?: bigint | undefined;
bps?: number | undefined;
quoteSigners?: string[] | undefined;
}, {
type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
owner: string;
maxFee?: string | number | bigint | undefined;
halfAmount?: string | number | bigint | undefined;
bps?: string | number | undefined;
quoteSigners?: string[] | undefined;
}>, {
bps: number;
type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
owner: string;
maxFee?: bigint | undefined;
halfAmount?: bigint | undefined;
quoteSigners?: string[] | undefined;
}, {
type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
owner: string;
maxFee?: string | number | bigint | undefined;
halfAmount?: string | number | bigint | undefined;
bps?: string | number | undefined;
quoteSigners?: string[] | undefined;
}>, z.ZodEffects<z.ZodObject<{
owner: z.ZodString;
} & {
type: z.ZodLiteral<import("../index.js").TokenFeeType.ProgressiveFee>;
maxFee: z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>;
halfAmount: z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>;
}, "strip", z.ZodTypeAny, {
type: import("../index.js").TokenFeeType.ProgressiveFee;
owner: string;
maxFee: bigint;
halfAmount: bigint;
}, {
type: import("../index.js").TokenFeeType.ProgressiveFee;
owner: string;
maxFee: string | number | bigint;
halfAmount: string | number | bigint;
}>, {
type: import("../index.js").TokenFeeType.ProgressiveFee;
owner: string;
maxFee: bigint;
halfAmount: bigint;
}, {
type: import("../index.js").TokenFeeType.ProgressiveFee;
owner: string;
maxFee: string | number | bigint;
halfAmount: string | number | bigint;
}>, z.ZodEffects<z.ZodObject<{
owner: z.ZodString;
} & {
type: z.ZodLiteral<import("../index.js").TokenFeeType.RegressiveFee>;
maxFee: z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>;
halfAmount: z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>;
}, "strip", z.ZodTypeAny, {
type: import("../index.js").TokenFeeType.RegressiveFee;
owner: string;
maxFee: bigint;
halfAmount: bigint;
}, {
type: import("../index.js").TokenFeeType.RegressiveFee;
owner: string;
maxFee: string | number | bigint;
halfAmount: string | number | bigint;
}>, {
type: import("../index.js").TokenFeeType.RegressiveFee;
owner: string;
maxFee: bigint;
halfAmount: bigint;
}, {
type: import("../index.js").TokenFeeType.RegressiveFee;
owner: string;
maxFee: string | number | bigint;
halfAmount: string | number | bigint;
}>, z.ZodEffects<z.ZodObject<{
owner: z.ZodString;
} & {
type: z.ZodLiteral<import("../index.js").TokenFeeType.RoutingFee>;
feeContracts: z.ZodRecord<z.ZodString, z.ZodLazy<z.ZodType<any, z.ZodTypeDef, any>>>;
}, "strip", z.ZodTypeAny, {
type: import("../index.js").TokenFeeType.RoutingFee;
owner: string;
feeContracts: Record<string, any>;
}, {
type: import("../index.js").TokenFeeType.RoutingFee;
owner: string;
feeContracts: Record<string, any>;
}>, {
type: import("../index.js").TokenFeeType.RoutingFee;
owner: string;
feeContracts: Record<string, any>;
}, {
type: import("../index.js").TokenFeeType.RoutingFee;
owner: string;
feeContracts: Record<string, any>;
}>, z.ZodEffects<z.ZodObject<{
owner: z.ZodString;
} & {
type: z.ZodLiteral<import("../index.js").TokenFeeType.CrossCollateralRoutingFee>;
feeContracts: z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodLazy<z.ZodType<any, z.ZodTypeDef, any>>>, Record<string, any>, Record<string, any>>>;
}, "strip", z.ZodTypeAny, {
type: import("../index.js").TokenFeeType.CrossCollateralRoutingFee;
owner: string;
feeContracts: Record<string, Record<string, any>>;
}, {
type: import("../index.js").TokenFeeType.CrossCollateralRoutingFee;
owner: string;
feeContracts: Record<string, Record<string, any>>;
}>, {
type: import("../index.js").TokenFeeType.CrossCollateralRoutingFee;
owner: string;
feeContracts: Record<string, Record<string, any>>;
}, {
type: import("../index.js").TokenFeeType.CrossCollateralRoutingFee;
owner: string;
feeContracts: Record<string, Record<string, any>>;
}>]>>;
} & {
/** Router variant. 'regular' (default) deploys full InterchainAccountRouter with commit-reveal;
* 'minimal' deploys MinimalInterchainAccountRouter for size-constrained chains. */
routerType: z.ZodOptional<z.ZodNativeEnum<typeof IcaRouterType>>;
/** Commitment ISM config — required for regular routers, must be omitted for minimal. */
commitmentIsm: z.ZodOptional<z.ZodObject<{
owner: z.ZodString;
ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
} & {
type: z.ZodLiteral<"offchainLookupIsm">;
urls: z.ZodArray<z.ZodString, "many">;
}, "strip", z.ZodTypeAny, {
type: "offchainLookupIsm";
owner: string;
urls: string[];
ownerOverrides?: Record<string, string> | undefined;
}, {
type: "offchainLookupIsm";
owner: string;
urls: string[];
ownerOverrides?: Record<string, string> | undefined;
}>>;
/**
* Optional: Pre-approve fee tokens for hooks.
* Use this when the ICA router will be used with ERC-20 fee tokens and
* aggregation hooks containing an IGP as a child hook.
*/
feeTokenApprovals: z.ZodOptional<z.ZodArray<z.ZodObject<{
/** ERC-20 fee token address */
feeToken: z.ZodString;
/** Hook address to approve (e.g., IGP inside StaticAggregationHook) */
hook: z.ZodString;
}, "strip", z.ZodTypeAny, {
hook: string;
feeToken: string;
}, {
hook: string;
feeToken: string;
}>, "many">>;
}, "strip", z.ZodTypeAny, {
owner: string;
mailbox: string;
ownerOverrides?: Record<string, string> | undefined;
proxyAdmin?: {
owner: string;
address?: string | undefined;
ownerOverrides?: Record<string, string> | undefined;
} | undefined;
hook?: string | {
type: "merkleTreeHook";
} | {
type: "interchainGasPaymaster";
owner: string;
beneficiary: string;
oracleKey: string;
overhead: Record<string, number>;
oracleConfig: Record<string, {
gasPrice: string;
tokenExchangeRate: string;
tokenDecimals?: number | undefined;
typicalCost?: {
handleGasAmount: number;
totalGasAmount: number;
totalUsdCost: number;
} | undefined;
}>;
ownerOverrides?: Record<string, string> | undefined;
quoteSigners?: string[] | undefined;
contractVersion?: string | undefined;
} | {
type: "protocolFee";
owner: string;
protocolFee: string;
beneficiary: string;
maxProtocolFee: string;
ownerOverrides?: Record<string, string> | undefined;
} | {
type: "pausableHook";
owner: string;
paused: boolean;
ownerOverrides?: Record<string, string> | undefined;
} | {
type: "opStackHook";
owner: string;
nativeBridge: string;
destinationChain: string;
ownerOverrides?: Record<string, string> | undefined;
} | {
type: "arbL2ToL1Hook";
destinationChain: string;
arbSys: string;
bridge?: string | undefined;
childHook?: any;
} | {
type: "defaultHook";
} | {
type: "rateLimitedHook";
owner: string;
maxCapacity: string;
ownerOverrides?: Record<string, string> | undefined;
} | {
type: "ccipHook";
destinationChain: string;
} | import("../index.js").DomainRoutingHookConfig | import("../index.js").FallbackRoutingHookConfig | import("../hook/types.js").AmountRoutingHookConfig | import("../index.js").AggregationHookConfig | {
type: "cctpHook";
address: string;
} | z.objectOutputType<{
type: z.ZodLiteral<"unknownHook">;
}, z.ZodTypeAny, "passthrough"> | {
type: "predicateHook";
address: string;
} | undefined;
interchainSecurityModule?: string | ({
threshold: number;
validators: string[];
} & {
type: "merkleRootMultisigIsm" | "messageIdMultisigIsm" | "storageMerkleRootMultisigIsm" | "storageMessageIdMultisigIsm";
}) | ({
validators: {
signingAddress: string;
weight: number;
}[];
thresholdWeight: number;
} & {
type: "weightedMerkleRootMultisigIsm" | "weightedMessageIdMultisigIsm";
}) | {
type: "testIsm";
} | ({
owner: string;
paused: boolean;
ownerOverrides?: Record<string, string> | undefined;
} & {
type: "pausableIsm";
}) | {
type: "opStackIsm";
origin: string;
nativeBridge: string;
} | {
type: "trustedRelayerIsm";
relayer: string;
} | {
type: "ccipIsm";
originChain: string;
} | {
type: "arbL2ToL1Ism";
bridge: string;
} | {
type: "rateLimitedIsm";
maxCapacity: string;
owner?: string | undefined;
recipient?: string | undefined;
} | {
type: "offchainLookupIsm";
owner: string;
urls: string[];
ownerOverrides?: Record<string, string> | undefined;
} | import("../ism/types.js").RoutingIsmConfig | import("../ism/types.js").AggregationIsmConfig | z.objectOutputType<{
type: z.ZodLiteral<"unknownIsm">;
}, z.ZodTypeAny, "passthrough"> | undefined;
foreignDeployment?: string | undefined;
remoteRouters?: Record<string | number, {
address: string;
}> | undefined;
tokenFee?: {
bps: number;
type: import("../index.js").TokenFeeType.LinearFee;
owner: string;
maxFee?: bigint | undefined;
halfAmount?: bigint | undefined;
} | {
bps: number;
type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
owner: string;
maxFee?: bigint | undefined;
halfAmount?: bigint | undefined;
quoteSigners?: string[] | undefined;
} | {
type: import("../index.js").TokenFeeType.ProgressiveFee;
owner: string;
maxFee: bigint;
halfAmount: bigint;
} | {
type: import("../index.js").TokenFeeType.RegressiveFee;
owner: string;
maxFee: bigint;
halfAmount: bigint;
} | {
type: import("../index.js").TokenFeeType.RoutingFee;
owner: string;
feeContracts: Record<string, any>;
} | {
type: import("../index.js").TokenFeeType.CrossCollateralRoutingFee;
owner: string;
feeContracts: Record<string, Record<string, any>>;
} | undefined;
routerType?: IcaRouterType | undefined;
commitmentIsm?: {
type: "offchainLookupIsm";
owner: string;
urls: string[];
ownerOverrides?: Record<string, string> | undefined;
} | undefined;
feeTokenApprovals?: {
hook: string;
feeToken: string;
}[] | undefined;
}, {
owner: string;
mailbox: string;
ownerOverrides?: Record<string, string> | undefined;
proxyAdmin?: {
owner: string;
address?: string | undefined;
ownerOverrides?: Record<string, string> | undefined;
} | undefined;
hook?: string | {
type: "merkleTreeHook";
} | {
type: "interchainGasPaymaster";
owner: string;
beneficiary: string;
oracleKey: string;
overhead: Record<string, number>;
oracleConfig: Record<string, {
gasPrice: string;
tokenExchangeRate: string;
tokenDecimals?: number | undefined;
typicalCost?: {
handleGasAmount: number;
totalGasAmount: number;
totalUsdCost: number;
} | undefined;
}>;
ownerOverrides?: Record<string, string> | undefined;
quoteSigners?: string[] | undefined;
contractVersion?: string | undefined;
} | {
type: "protocolFee";
owner: string;
protocolFee: string;
beneficiary: string;
maxProtocolFee: string;
ownerOverrides?: Record<string, string> | undefined;
} | {
type: "pausableHook";
owner: string;
paused: boolean;
ownerOverrides?: Record<string, string> | undefined;
} | {
type: "opStackHook";
owner: string;
nativeBridge: string;
destinationChain: string;
ownerOverrides?: Record<string, string> | undefined;
} | {
type: "arbL2ToL1Hook";
destinationChain: string;
arbSys: string;
bridge?: string | undefined;
childHook?: any;
} | {
type: "defaultHook";
} | {
type: "rateLimitedHook";
owner: string;
maxCapacity: string;
ownerOverrides?: Record<string, string> | undefined;
} | {
type: "ccipHook";
destinationChain: string;
} | import("../index.js").DomainRoutingHookConfig | import("../index.js").FallbackRoutingHookConfig | import("../hook/types.js").AmountRoutingHookConfig | import("../index.js").AggregationHookConfig | {
type: "cctpHook";
address: string;
} | z.objectInputType<{
type: z.ZodLiteral<"unknownHook">;
}, z.ZodTypeAny, "passthrough"> | {
type: "predicateHook";
address: string;
} | undefined;
interchainSecurityModule?: string | ({
threshold: number;
validators: string[];
} & {
type: "merkleRootMultisigIsm" | "messageIdMultisigIsm" | "storageMerkleRootMultisigIsm" | "storageMessageIdMultisigIsm";
}) | ({
validators: {
signingAddress: string;
weight: number;
}[];
thresholdWeight: number;
} & {
type: "weightedMerkleRootMultisigIsm" | "weightedMessageIdMultisigIsm";
}) | {
type: "testIsm";
} | ({
owner: string;
paused: boolean;
ownerOverrides?: Record<string, string> | undefined;
} & {
type: "pausableIsm";
}) | {
type: "opStackIsm";
origin: string;
nativeBridge: string;
} | {
type: "trustedRelayerIsm";
relayer: string;
} | {
type: "ccipIsm";
originChain: string;
} | {
type: "arbL2ToL1Ism";
bridge: string;
} | {
type: "rateLimitedIsm";
maxCapacity: string;
owner?: string | undefined;
recipient?: string | undefined;
} | {
type: "offchainLookupIsm";
owner: string;
urls: string[];
ownerOverrides?: Record<string, string> | undefined;
} | {
type: "interchainAccountRouting";
owner: string;
isms: Record<string, string>;
ownerOverrides?: Record<string, string> | undefined;
} | import("../ism/types.js").RoutingIsmConfig | import("../ism/types.js").AggregationIsmConfig | z.objectInputType<{
type: z.ZodLiteral<"unknownIsm">;
}, z.ZodTypeAny, "passthrough"> | undefined;
foreignDeployment?: string | undefined;
remoteRouters?: Record<string | number, {
address: string;
}> | undefined;
tokenFee?: {
type: import("../index.js").TokenFeeType.LinearFee;
owner: string;
maxFee?: string | number | bigint | undefined;
halfAmount?: string | number | bigint | undefined;
bps?: string | number | undefined;
} | {
type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
owner: string;
maxFee?: string | number | bigint | undefined;
halfAmount?: string | number | bigint | undefined;
bps?: string | number | undefined;
quoteSigners?: string[] | undefined;
} | {
type: import("../index.js").TokenFeeType.ProgressiveFee;
owner: string;
maxFee: string | number | bigint;
halfAmount: string | number | bigint;
} | {
type: import("../index.js").TokenFeeType.RegressiveFee;
owner: string;
maxFee: string | number | bigint;
halfAmount: string | number | bigint;
} | {
type: import("../index.js").TokenFeeType.RoutingFee;
owner: string;
feeContracts: Record<string, any>;
} | {
type: import("../index.js").TokenFeeType.CrossCollateralRoutingFee;
owner: string;
feeContracts: Record<string, Record<string, any>>;
} | undefined;
routerType?: IcaRouterType | undefined;
commitmentIsm?: {
type: "offchainLookupIsm";
owner: string;
urls: string[];
ownerOverrides?: Record<string, string> | undefined;
} | undefined;
feeTokenApprovals?: {
hook: string;
feeToken: string;
}[] | undefined;
}>;
export type IcaRouterConfig = z.infer<typeof IcaRouterConfigSchema>;
export declare const DerivedIcaRouterConfigSchema: z.ZodObject<{
owner: z.ZodString;
ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
} & {
mailbox: z.ZodString;
hook: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodObject<{
owner: z.ZodString;
ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
} & {
type: z.ZodLiteral<"protocolFee">;
beneficiary: z.ZodString;
maxProtocolFee: z.ZodString;
protocolFee: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: "protocolFee";
owner: string;
protocolFee: string;
beneficiary: string;
maxProtocolFee: string;
ownerOverrides?: Record<string, string> | undefined;
}, {
type: "protocolFee";
owner: string;
protocolFee: string;
beneficiary: string;
maxProtocolFee: string;
ownerOverrides?: Record<string, string> | undefined;
}>, z.ZodObject<{
owner: z.ZodString;
ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
} & {
paused: z.ZodBoolean;
} & {
type: z.ZodLiteral<"pausableHook">;
}, "strip", z.ZodTypeAny, {
type: "pausableHook";
owner: string;
paused: boolean;
ownerOverrides?: Record<string, string> | undefined;
}, {
type: "pausableHook";
owner: string;
paused: boolean;
ownerOverrides?: Record<string, string> | undefined;
}>, z.ZodObject<{
owner: z.ZodString;
ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
} & {
type: z.ZodLiteral<"opStackHook">;
nativeBridge: z.ZodString;
destinationChain: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: "opStackHook";
owner: string;
nativeBridge: string;
destinationChain: string;
ownerOverrides?: Record<string, string> | undefined;
}, {
type: "opStackHook";
owner: string;
nativeBridge: string;
destinationChain: string;
ownerOverrides?: Record<string, string> | undefined;
}>, z.ZodObject<{
type: z.ZodLiteral<"merkleTreeHook">;
}, "strip", z.ZodTypeAny, {
type: "merkleTreeHook";
}, {
type: "merkleTreeHook";
}>, z.ZodObject<{
owner: z.ZodString;
ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
} & {
type: z.ZodLiteral<"interchainGasPaymaster">;
beneficiary: z.ZodString;
oracleKey: z.ZodString;
overhead: z.ZodRecord<z.ZodString, z.ZodNumber>;
oracleConfig: z.ZodRecord<z.ZodString, z.ZodObject<{
gasPrice: z.ZodString;
tokenExchangeRate: z.ZodString;
} & {
tokenDecimals: z.ZodOptional<z.ZodNumber>;
} & {
typicalCost: z.ZodOptional<z.ZodObject<{
handleGasAmount: z.ZodNumber;
totalGasAmount: z.ZodNumber;
totalUsdCost: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
handleGasAmount: number;
totalGasAmount: number;
totalUsdCost: number;
}, {
handleGasAmount: number;
totalGasAmount: number;
totalUsdCost: number;
}>>;
}, "strip", z.ZodTypeAny, {
gasPrice: string;
tokenExchangeRate: string;
tokenDecimals?: number | undefined;
typicalCost?: {
handleGasAmount: number;
totalGasAmount: number;
totalUsdCost: number;
} | undefined;
}, {
gasPrice: string;
tokenExchangeRate: string;
tokenDecimals?: number | undefined;
typicalCost?: {
handleGasAmount: number;
totalGasAmount: number;
totalUsdCost: number;
} | undefined;
}>>;
quoteSigners: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
contractVersion: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
type: "interchainGasPaymaster";
owner: string;
beneficiary: string;
oracleKey: string;
overhead: Record<string, number>;
oracleConfig: Record<string, {
gasPrice: string;
tokenExchangeRate: string;
tokenDecimals?: number | undefined;
typicalCost?: {
handleGasAmount: number;
totalGasAmount: number;
totalUsdCost: number;
} | undefined;
}>;
ownerOverrides?: Record<string, string> | undefined;
quoteSigners?: string[] | undefined;
contractVersion?: string | undefined;
}, {
type: "interchainGasPaymaster";
owner: string;
beneficiary: string;
oracleKey: string;
overhead: Record<string, number>;
oracleConfig: Record<string, {
gasPrice: string;
tokenExchangeRate: string;
tokenDecimals?: number | undefined;
typicalCost?: {
handleGasAmount: number;
totalGasAmount: number;
totalUsdCost: number;
} | undefined;
}>;
ownerOverrides?: Record<string, string> | undefined;
quoteSigners?: string[] | undefined;
contractVersion?: string | undefined;
}>, z.ZodType<import("../index.js").DomainRoutingHookConfig, z.ZodTypeDef, import("../index.js").DomainRoutingHookConfig>, z.ZodType<import("../index.js").FallbackRoutingHookConfig, z.ZodTypeDef, import("../index.js").FallbackRoutingHookConfig>, z.ZodType<import("../hook/types.js").AmountRoutingHookConfig, z.ZodTypeDef, import("../hook/types.js").AmountRoutingHookConfig>, z.ZodType<import("../index.js").AggregationHookConfig, z.ZodTypeDef, import("../index.js").AggregationHookConfig>, z.ZodObject<{
type: z.ZodLiteral<"arbL2ToL1Hook">;
arbSys: z.ZodString;
bridge: z.ZodOptional<z.ZodString>;
destinationChain: z.ZodString;
childHook: z.ZodLazy<z.ZodType<any, z.ZodTypeDef, any>>;
}, "strip", z.ZodTypeAny, {
type: "arbL2ToL1Hook";
destinationChain: string;
arbSys: string;
bridge?: string | undefined;
childHook?: any;
}, {
type: "arbL2ToL1Hook";
destinationChain: string;
arbSys: string;
bridge?: string | undefined;
childHook?: any;
}>, z.ZodObject<{
type: z.ZodLiteral<"defaultHook">;
}, "strip", z.ZodTypeAny, {
type: "defaultHook";
}, {
type: "defaultHook";
}>, z.ZodObject<{
type: z.ZodLiteral<"ccipHook">;
destinationChain: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: "ccipHook";
destinationChain: string;
}, {
type: "ccipHook";
destinationChain: string;
}>, z.ZodObject<{
type: z.ZodLiteral<"cctpHook">;
address: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: "cctpHook";
address: string;
}, {
type: "cctpHook";
address: string;
}>, z.ZodEffects<z.ZodEffects<z.ZodObject<{
owner: z.ZodString;
ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
} & {
type: z.ZodLiteral<"rateLimitedHook">;
maxCapacity: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: "rateLimitedHook";
owner: string;
maxCapacity: string;
ownerOverrides?: Record<string, string> | undefined;
}, {
type: "rateLimitedHook";
owner: string;
maxCapacity: string;
ownerOverrides?: Record<string, string> | undefined;
}>, {
type: "rateLimitedHook";
owner: string;
maxCapacity: string;
ownerOverrides?: Record<string, string> | undefined;
}, {
type: "rateLimitedHook";
owner: string;
maxCapacity: string;
ownerOverrides?: Record<string, string> | undefined;
}>, {
type: "rateLimitedHook";
owner: string;
maxCapacity: string;
ownerOverrides?: Record<string, string> | undefined;
}, {
type: "rateLimitedHook";
owner: string;
maxCapacity: string;
ownerOverrides?: Record<string, string> | undefined;
}>, z.ZodObject<{
type: z.ZodLiteral<"unknownHook">;
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
type: z.ZodLiteral<"unknownHook">;
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
type: z.ZodLiteral<"unknownHook">;
}, z.ZodTypeAny, "passthrough">>, z.ZodObject<{
type: z.ZodLiteral<"predicateHook">;
address: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: "predicateHook";
address: string;
}, {
type: "predicateHook";
address: string;
}>]>>;
interchainSecurityModule: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodObject<{
type: z.ZodLiteral<"testIsm">;
}, "strip", z.ZodTypeAny, {
type: "testIsm";
}, {
type: "testIsm";
}>, z.ZodObject<{
type: z.ZodLiteral<"opStackIsm">;
origin: z.ZodString;
nativeBridge: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: "opStackIsm";
origin: string;
nativeBridge: string;
}, {
type: "opStackIsm";
origin: string;
nativeBridge: string;
}>, z.ZodIntersection<z.ZodObject<{
owner: z.ZodString;
ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
} & {
paused: z.ZodBoolean;
}, "strip", z.ZodTypeAny, {
owner: string;
paused: boolean;
ownerOverrides?: Record<string, string> | undefined;
}, {
owner: string;
paused: boolean;
ownerOverrides?: Record<string, string> | undefined;
}>, z.ZodObject<{
type: z.ZodLiteral<"pausableIsm">;
}, "strip", z.ZodTypeAny, {
type: "pausableIsm";
}, {
type: "pausableIsm";
}>>, z.ZodObject<{
type: z.ZodLiteral<"trustedRelayerIsm">;
relayer: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: "trustedRelayerIsm";
relayer: string;
}, {
type: "trustedRelayerIsm";
relayer: string;
}>, z.ZodObject<{
type: z.ZodLiteral<"ccipIsm">;
originChain: z.ZodString;
}, "strip", z.ZodTypeAny, {
type: "ccipIsm";
originChain: string;
}, {
type: "ccipIsm";
originChain: string;
}>, z.ZodEffects<z.ZodEffects<z.ZodObject<{
type: z.ZodLiteral<"rateLimitedIsm">;
maxCapacity: z.ZodString;
recipient: z.ZodOptional<z.ZodString>;
owner: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
type: "rateLimitedIsm";
maxCapacity: string;
owner?: string | undefined;
recipient?: string | undefined;
}, {
type: "rateLimitedIsm";
maxCapacity: string;
owner?: string | undefined;
recipient?: string | undefined;
}>, {
type: "rateLimitedIsm";
maxCapacity: string;
owner?: string | undefined;
recipient?: string | undefined;
}, {
type: "rateLimitedIsm";
maxCapacity: string;
owner?: string | undefined;
recipient?: string | undefined;
}>, {
type: "rateLimitedIsm";
maxCapacity: string;
owner?: string | undefined;
recipient?: string | undefined;
}, {
type: "rateLimitedIsm";
maxCapacity: st