UNPKG

swapnet-sdk-test-1

Version:
48 lines (47 loc) 1.88 kB
import { arrayify, joinSignature, splitSignature } from '@ethersproject/bytes'; import { CommandType } from "./routers/universalRouter/routerCommands.js"; export const toNodeType = (tokenOp)=>{ const { fromSwaps, toSwaps } = tokenOp; if (fromSwaps.length === 0 && toSwaps.length === 0) { throw new Error(`Invalid TokenOperation node!`); } if (fromSwaps.length === 0) { return 'SOURCE'; } if (toSwaps.length === 0) { return 'DESTINATION'; } if (toSwaps.length === 1) { if (fromSwaps.length === 1) { return 'PASSING_THROUGH'; } return 'MERGING'; } return 'FORKING'; }; export const toAmountOutMinimum = (amountOut, slippageTolerance)=>{ const slippageToleranceMillionth = BigInt(Math.floor(slippageTolerance * 10 ** 6)); const oneMillion = BigInt(10 ** 6); return amountOut * (oneMillion - slippageToleranceMillionth) / oneMillion; }; export const fromTokenUnits = (tokenUnits, decimals)=>{ return 10n ** BigInt(decimals) * BigInt(Math.round(tokenUnits * 1e18)) / BigInt(1e18); }; export const toTokenUnits = (tokenAmount, decimals)=>{ return Number(tokenAmount * 10n ** 9n) / 10 ** (decimals + 9); }; const SIGNATURE_LENGTH = 65; const EIP_2098_SIGNATURE_LENGTH = 64; export function encodePermit(planner, permit2) { let signature = permit2.signature; const length = arrayify(permit2.signature).length; // signature data provided for EIP-1271 may have length different from ECDSA signature if (length === SIGNATURE_LENGTH || length === EIP_2098_SIGNATURE_LENGTH) { // sanitizes signature to cover edge cases of malformed EIP-2098 sigs and v used as recovery id signature = joinSignature(splitSignature(permit2.signature)); } planner.addCommand(CommandType.PERMIT2_PERMIT, [ permit2, signature ]); }