swapnet-sdk-test-1
Version:
TypeScript SDK for SwapNet API.
48 lines (47 loc) • 1.88 kB
JavaScript
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
]);
}