Files
proxmox/packages/economics-toolkit/src/path-gate.ts
defiQUG dbd517b279 Sync workspace: config, docs, scripts, CI, operator rules, and submodule pointers.
- Update dbis_core, cross-chain-pmm-lps, explorer-monorepo, metamask-integration, pr-workspace/chains
- Omit embedded publish git dirs and empty placeholders from index

Made-with: Cursor
2026-04-12 06:12:20 -07:00

55 lines
1.5 KiB
TypeScript

import { evaluateEconomics, impliedGrossPct, type EconomicsInput } from './economics-engine.js';
import { pmmQuoteAmountOutFromChain } from './chain138-pmm-quote.js';
export interface PathGateParams {
rpcUrl: string;
poolAddress: string;
tokenIn: string;
amountIn: bigint;
traderForView: string;
/** Token decimals for both legs (typical: 6 for cUSDT/cUSDC). */
decimals: number;
economics: Omit<EconomicsInput, 'grossPct'>;
}
export interface PathGateResult {
amountOut: bigint | null;
impliedGrossPct: number;
economics: ReturnType<typeof evaluateEconomics>;
passesEconomicsGate: boolean;
error?: string;
}
export async function evaluatePathGate(params: PathGateParams): Promise<PathGateResult> {
const amountOut = await pmmQuoteAmountOutFromChain({
rpcUrl: params.rpcUrl,
poolAddress: params.poolAddress,
tokenInLookup: params.tokenIn,
amountIn: params.amountIn,
traderForView: params.traderForView,
});
if (amountOut === null) {
return {
amountOut: null,
impliedGrossPct: 0,
economics: evaluateEconomics({ grossPct: 0, flashFeePct: params.economics.flashFeePct }),
passesEconomicsGate: false,
error: 'quote_failed_or_invalid_token_pair',
};
}
const gross = impliedGrossPct(params.amountIn, amountOut, params.decimals);
const economics = evaluateEconomics({
grossPct: gross,
...params.economics,
});
return {
amountOut,
impliedGrossPct: gross,
economics,
passesEconomicsGate: economics.passesResidual,
};
}