@robertprp/intents-sdk
Version:
Shogun Network Intent-based cross-chain swaps SDK
44 lines (37 loc) • 1.73 kB
text/typescript
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 };
}