UNPKG

@robertprp/intents-sdk

Version:

Shogun Network Intent-based cross-chain swaps SDK

44 lines (37 loc) 1.73 kB
import type { TypedDataDefinition } from 'viem'; import type { SupportedEvmChain } from '../../chains.js'; import type { CrossChainOrder } from '../orders/cross-chain.js'; import { EVMIntentProvider } from './intent-provider.js'; import { CROSS_CHAIN_PERMIT2_TYPES, PERMIT2_DOMAIN, SINGLE_CHAIN_LIMIT_PERMIT2_TYPES } from './permit2.js'; import type { SingleChainOrder } from '../orders/single-chain.js'; export async function getEVMSingleChainOrderTypedData( order: SingleChainOrder, ): Promise<{ orderTypedData: TypedDataDefinition; nonce: bigint }> { const randomNonce = EVMIntentProvider.getRandomNonce(); const permissionMessage = EVMIntentProvider.getSingleChainLimitPermissionMessage(order, randomNonce); const orderTypedData = { domain: PERMIT2_DOMAIN(order.chainId as SupportedEvmChain), types: SINGLE_CHAIN_LIMIT_PERMIT2_TYPES, primaryType: 'PermitWitnessTransferFrom', message: permissionMessage, }; return { orderTypedData, nonce: randomNonce }; } /** * Generates typed data for EVM order signatures * @param order The order to generate typed data for * @returns Object containing the typed data and nonce */ export async function getEVMCrossChainOrderTypedData( order: CrossChainOrder, ): Promise<{ orderTypedData: TypedDataDefinition; nonce: bigint }> { const randomNonce = EVMIntentProvider.getRandomNonce(); const permissionMessage = EVMIntentProvider.getCrossChainPermissionMessage(order, randomNonce); const orderTypedData = { domain: PERMIT2_DOMAIN(order.sourceChainId as SupportedEvmChain), types: CROSS_CHAIN_PERMIT2_TYPES, primaryType: 'PermitWitnessTransferFrom', message: permissionMessage, }; return { orderTypedData, nonce: randomNonce }; }