@hyperlane-xyz/sdk
Version:
The official SDK for the Hyperlane Network
144 lines • 5.85 kB
JavaScript
import { z } from 'zod';
import { ProtocolAgnositicGasOracleConfigWithTypicalCostSchema } from '../gas/oracle/types.js';
import { ZHash } from '../metadata/customZodTypes.js';
import { OwnableSchema, PausableSchema, } from '../types.js';
// As found in IPostDispatchHook.sol
export var OnchainHookType;
(function (OnchainHookType) {
OnchainHookType[OnchainHookType["UNUSED"] = 0] = "UNUSED";
OnchainHookType[OnchainHookType["ROUTING"] = 1] = "ROUTING";
OnchainHookType[OnchainHookType["AGGREGATION"] = 2] = "AGGREGATION";
OnchainHookType[OnchainHookType["MERKLE_TREE"] = 3] = "MERKLE_TREE";
OnchainHookType[OnchainHookType["INTERCHAIN_GAS_PAYMASTER"] = 4] = "INTERCHAIN_GAS_PAYMASTER";
OnchainHookType[OnchainHookType["FALLBACK_ROUTING"] = 5] = "FALLBACK_ROUTING";
OnchainHookType[OnchainHookType["ID_AUTH_ISM"] = 6] = "ID_AUTH_ISM";
OnchainHookType[OnchainHookType["PAUSABLE"] = 7] = "PAUSABLE";
OnchainHookType[OnchainHookType["PROTOCOL_FEE"] = 8] = "PROTOCOL_FEE";
OnchainHookType[OnchainHookType["DEPRECATED"] = 9] = "DEPRECATED";
OnchainHookType[OnchainHookType["RATE_LIMITED"] = 10] = "RATE_LIMITED";
OnchainHookType[OnchainHookType["ARB_L2_TO_L1"] = 11] = "ARB_L2_TO_L1";
OnchainHookType[OnchainHookType["OP_L2_TO_L1"] = 12] = "OP_L2_TO_L1";
OnchainHookType[OnchainHookType["MAILBOX_DEFAULT_HOOK"] = 13] = "MAILBOX_DEFAULT_HOOK";
OnchainHookType[OnchainHookType["AMOUNT_ROUTING"] = 14] = "AMOUNT_ROUTING";
})(OnchainHookType || (OnchainHookType = {}));
export const HookType = {
CUSTOM: 'custom',
MERKLE_TREE: 'merkleTreeHook',
INTERCHAIN_GAS_PAYMASTER: 'interchainGasPaymaster',
AGGREGATION: 'aggregationHook',
PROTOCOL_FEE: 'protocolFee',
OP_STACK: 'opStackHook',
ROUTING: 'domainRoutingHook',
FALLBACK_ROUTING: 'fallbackRoutingHook',
AMOUNT_ROUTING: 'amountRoutingHook',
PAUSABLE: 'pausableHook',
ARB_L2_TO_L1: 'arbL2ToL1Hook',
MAILBOX_DEFAULT: 'defaultHook',
CCIP: 'ccipHook',
};
export const HookTypeToContractNameMap = {
[HookType.MERKLE_TREE]: 'merkleTreeHook',
[HookType.INTERCHAIN_GAS_PAYMASTER]: 'interchainGasPaymaster',
[HookType.AGGREGATION]: 'staticAggregationHook',
[HookType.PROTOCOL_FEE]: 'protocolFee',
[HookType.OP_STACK]: 'opStackHook',
[HookType.ROUTING]: 'domainRoutingHook',
[HookType.FALLBACK_ROUTING]: 'fallbackDomainRoutingHook',
[HookType.AMOUNT_ROUTING]: 'amountRoutingHook',
[HookType.PAUSABLE]: 'pausableHook',
[HookType.ARB_L2_TO_L1]: 'arbL2ToL1Hook',
[HookType.MAILBOX_DEFAULT]: 'defaultHook',
[HookType.CCIP]: 'ccipHook',
};
// Hook types that can be updated in-place
export const MUTABLE_HOOK_TYPE = [
HookType.INTERCHAIN_GAS_PAYMASTER,
HookType.PROTOCOL_FEE,
HookType.ROUTING,
HookType.FALLBACK_ROUTING,
HookType.PAUSABLE,
];
export const ProtocolFeeSchema = OwnableSchema.extend({
type: z.literal(HookType.PROTOCOL_FEE),
beneficiary: z.string(),
maxProtocolFee: z.string(),
protocolFee: z.string(),
});
export const MerkleTreeSchema = z.object({
type: z.literal(HookType.MERKLE_TREE),
});
export const PausableHookSchema = PausableSchema.extend({
type: z.literal(HookType.PAUSABLE),
});
export const MailboxDefaultHookSchema = z.object({
type: z.literal(HookType.MAILBOX_DEFAULT),
});
export const OpStackHookSchema = OwnableSchema.extend({
type: z.literal(HookType.OP_STACK),
nativeBridge: z.string(),
destinationChain: z.string(),
});
export const ArbL2ToL1HookSchema = z.object({
type: z.literal(HookType.ARB_L2_TO_L1),
arbSys: z
.string()
.describe('precompile for sending messages to L1, interface here: https://github.com/OffchainLabs/nitro-contracts/blob/90037b996509312ef1addb3f9352457b8a99d6a6/src/precompiles/ArbSys.sol#L12'),
bridge: z
.string()
.optional()
.describe('address of the bridge contract on L1, optional only needed for non @arbitrum/sdk chains'),
destinationChain: z.string(),
childHook: z.lazy(() => HookConfigSchema),
});
export const IgpSchema = OwnableSchema.extend({
type: z.literal(HookType.INTERCHAIN_GAS_PAYMASTER),
beneficiary: z.string(),
oracleKey: z.string(),
overhead: z.record(z.number()),
oracleConfig: z.record(ProtocolAgnositicGasOracleConfigWithTypicalCostSchema),
});
export const DomainRoutingHookConfigSchema = z.lazy(() => OwnableSchema.extend({
type: z.literal(HookType.ROUTING),
domains: z.record(HookConfigSchema),
}));
export const FallbackRoutingHookConfigSchema = z.lazy(() => OwnableSchema.extend({
type: z.literal(HookType.FALLBACK_ROUTING),
domains: z.record(HookConfigSchema),
fallback: HookConfigSchema,
}));
export const AmountRoutingHookConfigSchema = z.lazy(() => z.object({
type: z.literal(HookType.AMOUNT_ROUTING),
threshold: z.number(),
lowerHook: HookConfigSchema,
upperHook: HookConfigSchema,
}));
export const AggregationHookConfigSchema = z.lazy(() => z.object({
type: z.literal(HookType.AGGREGATION),
hooks: z.array(HookConfigSchema),
}));
export const CCIPHookSchema = z.object({
type: z.literal(HookType.CCIP),
destinationChain: z.string(),
});
export const HookConfigSchema = z.union([
ZHash,
ProtocolFeeSchema,
PausableHookSchema,
OpStackHookSchema,
MerkleTreeSchema,
IgpSchema,
DomainRoutingHookConfigSchema,
FallbackRoutingHookConfigSchema,
AmountRoutingHookConfigSchema,
AggregationHookConfigSchema,
ArbL2ToL1HookSchema,
MailboxDefaultHookSchema,
CCIPHookSchema,
]);
// TODO: deprecate in favor of CoreConfigSchema
export const HooksConfigSchema = z.object({
default: HookConfigSchema,
required: HookConfigSchema,
});
export const HooksConfigMapSchema = z.record(HooksConfigSchema);
//# sourceMappingURL=types.js.map