UNPKG

@hyperlane-xyz/sdk

Version:

The official SDK for the Hyperlane Network

144 lines 5.85 kB
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