@oakagentkit/core 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/dist/api/history.js +1 -1
- package/build/dist/api/modules/beefy/clm.d.ts +9 -0
- package/build/dist/api/modules/beefy/clm.js +1 -1
- package/build/dist/api/modules/beefy/guard.js +1 -1
- package/build/dist/api/modules/beefy/index.js +1 -1
- package/build/dist/api/modules/beefy/liquidity.js +1 -1
- package/build/dist/api/modules/borro/index.js +1 -1
- package/build/dist/api/modules/borro/positions.js +1 -1
- package/build/dist/api/modules/borro/reader.js +1 -1
- package/build/dist/api/modules/chop/actions.js +1 -1
- package/build/dist/api/modules/chop/checks.js +1 -1
- package/build/dist/api/modules/chop/copy.js +1 -1
- package/build/dist/api/modules/chop/guard.js +1 -1
- package/build/dist/api/modules/chop/index.js +1 -1
- package/build/dist/api/modules/chop/pins.d.ts +13 -0
- package/build/dist/api/modules/chop/pins.js +1 -1
- package/build/dist/api/modules/chop/positions.js +1 -1
- package/build/dist/api/modules/chop/reader.js +1 -1
- package/build/dist/api/modules/clanker/index.js +1 -1
- package/build/dist/api/modules/earn/index.js +1 -1
- package/build/dist/api/modules/fobo/client.d.ts +9 -0
- package/build/dist/api/modules/fobo/client.js +1 -0
- package/build/dist/api/modules/fobo/index.d.ts +16 -0
- package/build/dist/api/modules/fobo/index.js +1 -0
- package/build/dist/api/modules/fobo/intent.d.ts +243 -0
- package/build/dist/api/modules/fobo/intent.js +1 -0
- package/build/dist/api/modules/fobo/pins.d.ts +178 -0
- package/build/dist/api/modules/fobo/pins.js +1 -0
- package/build/dist/api/modules/fobo/steps.d.ts +25 -0
- package/build/dist/api/modules/fobo/steps.js +1 -0
- package/build/dist/api/modules/fobo/verify.d.ts +89 -0
- package/build/dist/api/modules/fobo/verify.js +1 -0
- package/build/dist/api/modules/gloam/copy.d.ts +1 -1
- package/build/dist/api/modules/gloam/copy.js +1 -1
- package/build/dist/api/modules/gloam/index.js +1 -1
- package/build/dist/api/modules/grove/index.js +1 -1
- package/build/dist/api/modules/heyresearch/index.js +1 -1
- package/build/dist/api/modules/heyresearch/public-reads.js +1 -1
- package/build/dist/api/modules/hoodlock/airdrop.js +1 -1
- package/build/dist/api/modules/hoodlock/fee.js +1 -1
- package/build/dist/api/modules/hoodlock/guard.js +1 -1
- package/build/dist/api/modules/hoodlock/index.js +1 -1
- package/build/dist/api/modules/hoodlock/lifecycle.js +1 -1
- package/build/dist/api/modules/hoodlock/locks-burn.js +1 -1
- package/build/dist/api/modules/hoodlock/public.js +1 -1
- package/build/dist/api/modules/hookr/actions.js +1 -1
- package/build/dist/api/modules/hookr/create-cancel.js +1 -1
- package/build/dist/api/modules/hookr/discovery.js +1 -1
- package/build/dist/api/modules/hookr/fill-bounty.js +1 -1
- package/build/dist/api/modules/hookr/index.js +1 -1
- package/build/dist/api/modules/hookr/launch-options.js +1 -1
- package/build/dist/api/modules/hookr/launch-receipt.js +1 -1
- package/build/dist/api/modules/hookr/launch.js +1 -1
- package/build/dist/api/modules/hookr/liquidity.js +1 -1
- package/build/dist/api/modules/hookr/lp-positions.js +1 -1
- package/build/dist/api/modules/hookr/lp-reads.js +1 -1
- package/build/dist/api/modules/hookr/lp-receipt.js +1 -1
- package/build/dist/api/modules/hookr/lp-state.js +1 -1
- package/build/dist/api/modules/hookr/public-reads.js +1 -1
- package/build/dist/api/modules/hookr/relay.js +1 -1
- package/build/dist/api/modules/kyberswap/index.js +1 -1
- package/build/dist/api/modules/layerbank/actions.js +1 -1
- package/build/dist/api/modules/layerbank/index.js +1 -1
- package/build/dist/api/modules/layerbank/reader.js +1 -1
- package/build/dist/api/modules/longbow/administration.js +1 -1
- package/build/dist/api/modules/longbow/fixed.js +1 -1
- package/build/dist/api/modules/longbow/index.js +1 -1
- package/build/dist/api/modules/meridian/index.js +1 -1
- package/build/dist/api/modules/meridian/rfq.js +1 -1
- package/build/dist/api/modules/merkl/discovery.js +1 -1
- package/build/dist/api/modules/merkl/index.js +1 -1
- package/build/dist/api/modules/merkl/manage.js +1 -1
- package/build/dist/api/modules/morpho/bundles.js +1 -1
- package/build/dist/api/modules/morpho/in-kind.js +1 -1
- package/build/dist/api/modules/morpho/index.d.ts +2 -1
- package/build/dist/api/modules/morpho/index.js +1 -1
- package/build/dist/api/modules/morpho/local-guard.d.ts +3 -2
- package/build/dist/api/modules/morpho/local-guard.js +1 -1
- package/build/dist/api/modules/morpho/midnight.js +1 -1
- package/build/dist/api/modules/morpho/protocol.js +1 -1
- package/build/dist/api/modules/morpho/surface.js +1 -1
- package/build/dist/api/modules/morpho/vault-tools.js +1 -1
- package/build/dist/api/modules/netnet/card-plan.js +1 -1
- package/build/dist/api/modules/netnet/card-read.js +1 -1
- package/build/dist/api/modules/netnet/card-recovery.js +1 -1
- package/build/dist/api/modules/netnet/desk-action.js +1 -1
- package/build/dist/api/modules/netnet/financial.js +1 -1
- package/build/dist/api/modules/netnet/index.js +1 -1
- package/build/dist/api/modules/orbio/index.js +1 -1
- package/build/dist/api/modules/pendle/index.js +1 -1
- package/build/dist/api/modules/pendle/reader.js +1 -1
- package/build/dist/api/modules/pons/claim.js +1 -1
- package/build/dist/api/modules/pons/index.js +1 -1
- package/build/dist/api/modules/pons/launch-status.js +1 -1
- package/build/dist/api/modules/pons/reads.js +1 -1
- package/build/dist/api/modules/pons/swap-terms.d.ts +2 -8
- package/build/dist/api/modules/pons/swap-terms.js +1 -1
- package/build/dist/api/modules/pons/trade.js +1 -1
- package/build/dist/api/modules/poolstrade/index.js +1 -1
- package/build/dist/api/modules/priors/coverage.js +1 -1
- package/build/dist/api/modules/priors/discovery.js +1 -1
- package/build/dist/api/modules/priors/holdings.js +1 -1
- package/build/dist/api/modules/priors/index.js +1 -1
- package/build/dist/api/modules/priors/integration.js +1 -1
- package/build/dist/api/modules/priors/stock-swap.js +1 -1
- package/build/dist/api/modules/raeto/index.js +1 -1
- package/build/dist/api/modules/relay/discovery.js +1 -1
- package/build/dist/api/modules/relay/inbound.js +1 -1
- package/build/dist/api/modules/relay/index.js +1 -1
- package/build/dist/api/modules/relay/outbound-status.js +1 -1
- package/build/dist/api/modules/spark/index.js +1 -1
- package/build/dist/api/modules/steakhouse/analytics.js +1 -1
- package/build/dist/api/modules/steakhouse/index.js +1 -1
- package/build/dist/api/modules/steakhouse/local-guard.js +1 -1
- package/build/dist/api/modules/steakhouse/management.js +1 -1
- package/build/dist/api/modules/steakhouse/v2-exit.js +1 -1
- package/build/dist/api/modules/tickerspring/basket-routes.js +1 -1
- package/build/dist/api/modules/tickerspring/contract-reads.js +1 -1
- package/build/dist/api/modules/tickerspring/exit-preview.js +1 -1
- package/build/dist/api/modules/tickerspring/guards.js +1 -1
- package/build/dist/api/modules/tickerspring/index.js +1 -1
- package/build/dist/api/modules/tickerspring/journeys.js +1 -1
- package/build/dist/api/modules/tickerspring/ladder.js +1 -1
- package/build/dist/api/modules/tickerspring/maker.js +1 -1
- package/build/dist/api/modules/tickerspring/order-accounting.js +1 -1
- package/build/dist/api/modules/tickerspring/research.js +1 -1
- package/build/dist/api/modules/tickerspring/strategies.js +1 -1
- package/build/dist/api/modules/uniswap/auction-create.js +1 -1
- package/build/dist/api/modules/uniswap/auction.js +1 -1
- package/build/dist/api/modules/uniswap/batch.js +1 -1
- package/build/dist/api/modules/uniswap/common.js +1 -1
- package/build/dist/api/modules/uniswap/fees.js +1 -1
- package/build/dist/api/modules/uniswap/index.js +1 -1
- package/build/dist/api/modules/uniswap/local-guard.js +1 -1
- package/build/dist/api/modules/uniswap/oracle.js +1 -1
- package/build/dist/api/modules/uniswap/pool-math.js +1 -1
- package/build/dist/api/modules/uniswap/pools.js +1 -1
- package/build/dist/api/modules/uniswap/position.js +1 -1
- package/build/dist/api/modules/uniswap/protocol.js +1 -1
- package/build/dist/api/modules/uniswap/quote-guard.js +1 -1
- package/build/dist/api/modules/uniswap/token-jar.js +1 -1
- package/build/dist/api/modules/uniswap/trade-batch.js +1 -1
- package/build/dist/api/modules/uniswap/trade.js +1 -1
- package/build/dist/api/modules/uniswap/v2.js +1 -1
- package/build/dist/api/modules/uniswap/v3.js +1 -1
- package/build/dist/api/modules/uniswap/v4.js +1 -1
- package/build/dist/api/modules/uniswap/wrap.js +1 -1
- package/build/dist/api/modules/velora/claims.js +1 -1
- package/build/dist/api/modules/velora/index.js +1 -1
- package/build/dist/api/modules/wormhole/index.js +1 -1
- package/build/dist/api/prices.d.ts +5 -0
- package/build/dist/api/prices.js +1 -1
- package/build/dist/api/signing-registry.js +1 -1
- package/build/dist/api/swap.d.ts +1 -0
- package/build/dist/api/swap.js +1 -1
- package/build/dist/api/tokens.js +1 -1
- package/build/dist/api/universal-router.d.ts +45 -0
- package/build/dist/api/universal-router.js +1 -0
- package/build/dist/api/usd-estimate.js +1 -1
- package/build/dist/chunks/{ROQQ62LP.js → 22TU5PFT.js} +1 -1
- package/build/dist/chunks/{2WRXH6BL.js → 257N7343.js} +1 -1
- package/build/dist/chunks/{B2HSLY5F.js → 27PVS6BU.js} +1 -1
- package/build/dist/chunks/{24Q3FNGX.js → 35LXCSHY.js} +1 -1
- package/build/dist/chunks/{OYDKAIS2.js → 3BMM3V4P.js} +1 -1
- package/build/dist/chunks/{VZVW5J7J.js → 3FU6XP6S.js} +1 -1
- package/build/dist/chunks/{KH4QFN72.js → 3PHJUFU2.js} +1 -1
- package/build/dist/chunks/{TMRAF2L2.js → 3UQXTZ5R.js} +1 -1
- package/build/dist/chunks/43BG2JRB.js +1 -0
- package/build/dist/chunks/{KMSAUFYV.js → 47HSRR7G.js} +1 -1
- package/build/dist/chunks/{M7BUKZW2.js → 4RCYYN6O.js} +1 -1
- package/build/dist/chunks/4ZD5D2UP.js +1 -0
- package/build/dist/chunks/{6OCLWSMZ.js → 5CPB33XA.js} +1 -1
- package/build/dist/chunks/{X5AL3DUK.js → 6D3XNCOX.js} +1 -1
- package/build/dist/chunks/{W4RYRLL5.js → 6GWXPQZ6.js} +1 -1
- package/build/dist/chunks/{D2IYA4LP.js → 72EV7TGI.js} +1 -1
- package/build/dist/chunks/{KBU3PYP7.js → 73BZPPRS.js} +1 -1
- package/build/dist/chunks/{XV3YJ4P6.js → 7FIEBJOZ.js} +1 -1
- package/build/dist/chunks/{CI5ENLYA.js → 7FZXSYFD.js} +1 -1
- package/build/dist/chunks/{K4P5VYDP.js → 7TSIF3F4.js} +1 -1
- package/build/dist/chunks/{KZA5GYZR.js → AWV24X7F.js} +1 -1
- package/build/dist/chunks/{WOGWLFAL.js → BGVC5NI6.js} +1 -1
- package/build/dist/chunks/BJK75C7G.js +1 -0
- package/build/dist/chunks/BSX4LFYI.js +1 -0
- package/build/dist/chunks/{OTYB6BHK.js → BZPFPQ2I.js} +1 -1
- package/build/dist/chunks/{XBNZ7GTY.js → CXH46MHJ.js} +1 -1
- package/build/dist/chunks/{PQXYTOV5.js → DCGNVMKG.js} +1 -1
- package/build/dist/chunks/{OTLUQWLF.js → DLNA5272.js} +1 -1
- package/build/dist/chunks/{VMZYFO6I.js → DXAPKN7H.js} +1 -1
- package/build/dist/chunks/{NMQBOBWJ.js → EHGH646D.js} +1 -1
- package/build/dist/chunks/{PZEF5LBL.js → ETMD747Y.js} +1 -1
- package/build/dist/chunks/{GP6YO24Z.js → FSYYD3OM.js} +1 -1
- package/build/dist/chunks/{XEBMS5KU.js → GGMVT5A6.js} +1 -1
- package/build/dist/chunks/GK3D7OKG.js +1 -0
- package/build/dist/chunks/GYPMUYB5.js +1 -0
- package/build/dist/chunks/{U7UPLF4F.js → H64QC4QR.js} +1 -1
- package/build/dist/chunks/{HS5HWBMU.js → HIG7JY3J.js} +1 -1
- package/build/dist/chunks/{65356YKW.js → HPY2ONAS.js} +1 -1
- package/build/dist/chunks/{C6VJAL5B.js → HUKDISRE.js} +1 -1
- package/build/dist/chunks/{XPWGPZ2C.js → HZSYMGJ2.js} +1 -1
- package/build/dist/chunks/{QMEGAKLI.js → I3ZBOSSH.js} +1 -1
- package/build/dist/chunks/{YARZE7SJ.js → I4473OC6.js} +1 -1
- package/build/dist/chunks/{DMB64UIN.js → IJ4HZIDG.js} +1 -1
- package/build/dist/chunks/{YBLJ75U5.js → IPU656WB.js} +1 -1
- package/build/dist/chunks/{QLAOBULN.js → JTPHZCO3.js} +1 -1
- package/build/dist/chunks/{CSOO4SW7.js → K4GUZ5QS.js} +1 -1
- package/build/dist/chunks/{WBNFRPAT.js → KLEJ3W4T.js} +1 -1
- package/build/dist/chunks/{ACH4BSME.js → KOKLM63Q.js} +1 -1
- package/build/dist/chunks/{VB36EHIR.js → KVVBT43U.js} +1 -1
- package/build/dist/chunks/{6MDYKE2O.js → KXX7ZBFY.js} +1 -1
- package/build/dist/chunks/{I6PQW2JI.js → L2AE32SL.js} +1 -1
- package/build/dist/chunks/{KOTGFD2V.js → LGLWEGPY.js} +1 -1
- package/build/dist/chunks/{2HN3U6OG.js → LQSPWRHN.js} +1 -1
- package/build/dist/chunks/{C3WBHFLX.js → LTDF2LNP.js} +1 -1
- package/build/dist/chunks/{RNCMXKKS.js → M4AGEGWW.js} +1 -1
- package/build/dist/chunks/{OODSXDIH.js → MGVX5EUH.js} +1 -1
- package/build/dist/chunks/NCAV7Q4C.js +6 -0
- package/build/dist/chunks/{CZQ2CGYV.js → NUERUFH7.js} +1 -1
- package/build/dist/chunks/NV6FDIYT.js +1 -0
- package/build/dist/chunks/{A2V4NFVA.js → O3CC5SRM.js} +1 -1
- package/build/dist/chunks/{JI5DXDMY.js → ODV3XT5U.js} +1 -1
- package/build/dist/chunks/{HVFMIURK.js → OFWTO4N6.js} +1 -1
- package/build/dist/chunks/{B7BNDW35.js → OY5W7ZSL.js} +1 -1
- package/build/dist/chunks/{CD2JQ32C.js → PDGYM2WG.js} +1 -1
- package/build/dist/chunks/PHGHJ7SN.js +1 -0
- package/build/dist/chunks/{5R576SDB.js → PKYQ3XVA.js} +1 -1
- package/build/dist/chunks/{FN6GNTPR.js → PWJVC2FV.js} +1 -1
- package/build/dist/chunks/{PSGRZWES.js → QN45T4N3.js} +1 -1
- package/build/dist/chunks/{LJJYYUEG.js → QPY6UTLU.js} +1 -1
- package/build/dist/chunks/{ATEVAJ5Y.js → RA7DOR7F.js} +1 -1
- package/build/dist/chunks/{U762746N.js → RUSXMQSJ.js} +1 -1
- package/build/dist/chunks/{UPKVD7WG.js → RXP7ZUPY.js} +1 -1
- package/build/dist/chunks/{2QGLPY2D.js → SMKO7GKX.js} +1 -1
- package/build/dist/chunks/{EHK7CDTU.js → SNCV6HV7.js} +1 -1
- package/build/dist/chunks/{Q7L3BX6U.js → SO6O7JK2.js} +1 -1
- package/build/dist/chunks/{2ZQ7X223.js → SOJHYMD7.js} +1 -1
- package/build/dist/chunks/SVKG4JOY.js +3 -0
- package/build/dist/chunks/{ORG6LVKJ.js → UBI3HBXD.js} +1 -1
- package/build/dist/chunks/{NWPAQER2.js → UCHJYWGU.js} +1 -1
- package/build/dist/chunks/{N64JJN37.js → UEHN2IDF.js} +1 -1
- package/build/dist/chunks/{FTMA24EC.js → UHIJMDD2.js} +1 -1
- package/build/dist/chunks/UJQYOTO5.js +1 -0
- package/build/dist/chunks/{MMCM3GSM.js → V4UJMUIB.js} +1 -1
- package/build/dist/chunks/{ZNPVBNC5.js → VC5ZCQYZ.js} +1 -1
- package/build/dist/chunks/{FGEGJOAA.js → VDJPDIBV.js} +1 -1
- package/build/dist/chunks/{TGFQQCRY.js → VFM2BICB.js} +1 -1
- package/build/dist/chunks/{MSMHS456.js → VOJULRNU.js} +1 -1
- package/build/dist/chunks/{5W74Z4WZ.js → W3DGFMQE.js} +1 -1
- package/build/dist/chunks/{QLFPAN6S.js → W7QNSNOH.js} +1 -1
- package/build/dist/chunks/{2ZBSE2LD.js → WCI3FHWT.js} +1 -1
- package/build/dist/chunks/X5I5EJ5T.js +6 -0
- package/build/dist/chunks/{JPPQDELB.js → XKLXVTSE.js} +3 -3
- package/build/dist/chunks/{OQFNUDMQ.js → XVOW6UCI.js} +1 -1
- package/build/dist/chunks/{P6OB2AFW.js → Y7HBFQYG.js} +1 -1
- package/build/dist/chunks/{25C4DTVA.js → YAVWSW3G.js} +1 -1
- package/build/dist/chunks/{LDJI2JAL.js → YGW4ODAP.js} +1 -1
- package/build/dist/chunks/{U243AWCH.js → YW4W3LPQ.js} +1 -1
- package/build/dist/chunks/{S4UJDZGN.js → ZDCCFEVL.js} +1 -1
- package/build/dist/chunks/{D7QXZM3S.js → ZOLHVZDK.js} +1 -1
- package/build/dist/chunks/{SMSXZ3FN.js → ZSVAGOF2.js} +1 -1
- package/package.json +1 -1
- package/build/dist/chunks/4R3G3H42.js +0 -1
- package/build/dist/chunks/LKX5WDOQ.js +0 -1
- package/build/dist/chunks/ND32LJWI.js +0 -1
- package/build/dist/chunks/URBEK2VV.js +0 -1
- package/build/dist/chunks/UVAR6BHU.js +0 -1
- package/build/dist/chunks/V6SDKPZS.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as Be,b as he,g as Z,h as be,i as Oe,m as ee,n as D,y as ke,z as Ee}from"./LKX5WDOQ.js";import{b as y,c as qe}from"./URBEK2VV.js";import{a as fe,b as H}from"./Z7FGEWO2.js";import{a as Q}from"./43LI5NKJ.js";import{a as Ie}from"./IOYRL6AY.js";import{a as $e}from"./66F5ZH34.js";import{c as le,g as P}from"./NWNYJ26T.js";import{b as Se}from"./IX3GZMTM.js";import{b,j as me}from"./TI727O2H.js";import{a as d}from"./XSD5NL7J.js";import{a as pe}from"./JXOEJPJ4.js";import{randomUUID as ze}from"node:crypto";import{encodeAbiParameters as ne,encodeFunctionData as we,erc20Abi as ge,getAddress as F,parseAbi as X,parseAbiParameters as oe,zeroAddress as K}from"viem";var Re=me[b].pons,C=me[b].ponsTrade,_e=X(["function getLaunchedToken(address) view returns ((address token,address curve,address deployer,address creatorFeeRecipient,address pairToken,uint256 graduationThreshold,uint24 poolFee,int24 tickSpacing,uint16 creatorTaxBps,bool buybackEnabled,uint8 phase,uint256 sweptQuote,uint256 sweptTokens,uint256 sweptAt,bool exists))"]),te=X(["function getReserves() view returns (uint256 quoteReserve,uint256 tokenReserve)","function feeBps() view returns (uint256)","function creatorTaxBps() view returns (uint256)","function currentSnipeTaxBps(address) view returns (uint256)","function sellableTokens() view returns (uint256)","function buy(uint256 quoteIn,uint256 minTokensOut,address recipient) payable returns (uint256)","function sell(uint256 tokensIn,uint256 minQuoteOut,address recipient) returns (uint256)"]),He=X(["function quoteExactInputSingle(((address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks) poolKey,bool zeroForOne,uint128 exactAmount,bytes hookData) params) returns (uint256 amountOut,uint256 gasEstimate)"]),Ke=X(["function execute(bytes commands,bytes[] inputs,uint256 deadline) payable"]),Xe=X(["function approve(address token,address spender,uint160 amount,uint48 expiration)"]),je=oe("((address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks) poolKey,bool zeroForOne,uint128 amountIn,uint128 amountOutMinimum,uint256 minHopPriceX36,bytes hookData)"),Ge={address:fe,chainId:b,decimals:18,symbol:"ETH"},Qe="There is no on-chain expiry. The signed transaction is protected by its minimum output.",Ve="This trade must be sent within 5 minutes of its quote. If you approve later, Oak shows you fresh terms first.",We=`Quote expiry is enforced by Oak before signing only. ${Qe}`,$=10000n,Te=(1n<<256n)-1n,Ne=(1n<<128n)-1n,I=(n,t)=>({token:n,amount:t.toString()}),Ce=(n,t)=>(n+t-1n)/t,Me="Reuse existing exact allowance";async function Je(n,t,r,o,c){try{let e=await n.readContract({address:t,abi:ge,functionName:"allowance",args:[r,o],blockNumber:c});return typeof e=="bigint"?e:void 0}catch{return}}var Ye={type:"object",additionalProperties:!1,required:["token","amountIn"],properties:{token:{...le,description:"Pons launch token address on chain 4663."},amountIn:$e('Input in base units: pair token for buys (use its decimals), launch token for sells (18 decimals). Examples: "1000000" = 1 pair token at 6 decimals; "1000000000000000000" = 1 launch token.'),pairToken:{...le,description:"The launch pair from pons_status. Required to buy a custom-pair launch, so amountIn is never read in the wrong units; omit or use the zero address for native ETH."},slippageBps:{description:"Slippage tolerance in basis points (50 = 0.5%).",type:"integer",minimum:0,maximum:9999,default:he}}};function De(n,t,r,o){if(n===void 0){if(r&&y(t)!==K)throw new d(`This Pons launch is paired with ${o}; amountIn is in that token's base units. Repeat with pairToken "${t}" to confirm the input asset.`);return}if(typeof n!="string")throw new d("pairToken must be a token address.");if(Q(n),!P(y(n),y(t)))throw new Z(`This Pons launch trades only against ${o}.`)}async function Fe(n,t,r,o,{quoteOnly:c=!1,curveOnly:e=!1,blockNumber:p}={}){if(Q(r),Object.keys(t).some(f=>!["token","amountIn","slippageBps","pairToken"].includes(f)))throw new d("Provide only token, amountIn, optional pairToken and optional slippageBps.");if(typeof t.token!="string")throw new d("Provide a launch token address.");Q(t.token);let s=F(t.token),i=Se(t.amountIn);if(i===0n||i>Te)throw new d("Trade amount must be positive and within the uint256 range.");let m=t.slippageBps??he;if(typeof m!="number"||!Number.isInteger(m)||m<0||m>=1e4)throw new d("Slippage must be an integer from 0 to 9999 basis points.");let x=f=>f*($-BigInt(m))/$,a=n.clientFor(b),l=p===void 0?await a.getBlock():await a.getBlock({blockNumber:p});if(p!==void 0&&l.number!==p)throw new d("Pons quote snapshot is unavailable.");let u=await a.readContract({address:Re.factory.address,abi:_e,functionName:"getLaunchedToken",args:[s],blockNumber:l.number});if(!u.exists||!P(u.token,s))throw new d("This address is not a Pons launch token.");if(e&&u.phase!==0)throw new Z("Pons curve quotes are only available before graduation.");if(u.phase===1)throw new d("Pons graduation is pending; the curve is closed and the pool is not ready.");if(u.phase===3)throw new d("This Pons launch was rescued and has no active trade route.");if(u.phase!==0&&u.phase!==2)throw new d("This Pons launch has an unknown trade phase.");let g=y(u.pairToken)===K,M=F(u.pairToken);if(P(M,s))throw new d("This Pons launch has an invalid pair.");let j=f=>Promise.all([a.readContract({address:f,abi:ge,functionName:"symbol",blockNumber:l.number}),a.readContract({address:f,abi:ge,functionName:"decimals",blockNumber:l.number})]),[[B,U],L]=await Promise.all([j(s),g?void 0:j(M)]),w=L?{address:M,chainId:b,symbol:pe(L[0]),decimals:L[1]}:Ge,G=g?"native ETH":`${w.symbol} (${w.address})`;De(t.pairToken,M,o,`${G}, ${w.decimals} decimals`);let V={address:s,chainId:b,symbol:pe(B),decimals:U},se=o?w:V,ie=o?V:w,q=[],re=(f,h,S,A)=>n.unsignedTx({to:f,data:h,value:S.toString(),chainId:b,description:A}),T,k,W,O=i,ve=null,ae,ye="",ue;if(u.phase===0){let f=v=>a.readContract({address:u.curve,abi:te,functionName:v,blockNumber:l.number}),[[h,S],A,R,E,_]=await Promise.all([a.readContract({address:u.curve,abi:te,functionName:"getReserves",blockNumber:l.number}),f("feeBps"),f("creatorTaxBps"),o?a.readContract({address:u.curve,abi:te,functionName:"currentSnipeTaxBps",args:[r],blockNumber:l.number}):Promise.resolve(0n),o?f("sellableTokens"):Promise.resolve(0n)]);if(h<=0n||S<=0n||A+R>$-100n)throw new d("Pons curve reserves or fee settings are unavailable.");let J=$-A-R-100n,N=E<J?E:J,Ae=v=>({base:v*A/$,creator:v*R/$,snipe:v*N/$}),Pe=v=>{let z=Ae(v);return v-z.base-z.creator-z.snipe},Y;if(o){if(_<=0n||_>=S)throw new d("The curve has no available sellable tokens.");let v=Pe(i);if(T=v*S/(h+v),T>=_){T=_;let z=T*h/(S-T)+1n;O=Ce(z*$,$-A-R-N),O>i&&(O=i)}Y=O,k=x(T),W=Ce(k*i,O),g||q.push(n.approval(w.address,u.curve,i.toString(),b))}else Y=i*h/(S+i),T=Pe(Y),k=x(T),q.push(n.approval(s,u.curve,i.toString(),b));let ce=Ae(Y);ve={base:I(w,ce.base),creator:I(w,ce.creator),snipe:I(w,ce.snipe)},ae=`Curve fees included: ${A} base, ${R} creator and ${N} opening-tax basis points, each rounded separately.`,q.push(re(u.curve,we({abi:te,functionName:o?"buy":"sell",args:[i,W??k,r]}),o&&g?i:0n,o?`Buy Pons curve tokens with ${G}.`:`Sell Pons curve tokens for ${G}.`))}else{if(i>Ne)throw new d("Trade amount exceeds the router uint128 range.");let f=qe(u.pairToken,s,u.poolFee,u.tickSpacing),h=o?y(u.pairToken):s,S=o?s:y(u.pairToken),A=P(h,f.currency0);if(T=(await a.simulateContract({address:C.quoter.address,abi:He,functionName:"quoteExactInputSingle",args:[{poolKey:f,zeroForOne:A,exactAmount:i,hookData:"0x"}],account:r,gas:Ie,blockNumber:l.number})).result[0],k=x(T),k>Ne)throw new d("Minimum output exceeds the router uint128 range.");let E=l.timestamp+300n;if(ue=E.toString(),E>=1n<<48n)throw new d("Permit2 expiry exceeds its timestamp range.");if(h!==K){let N=!c&&await Je(a,h,r,C.permit2.address,l.number)===i;N||q.push(n.approval(h,C.permit2.address,i.toString(),b)),ye=N?`${Me}: ${i} input base units already approved to Permit2. `:"",q.push(re(C.permit2.address,we({abi:Xe,functionName:"approve",args:[h,C.universal_router.address,i,Number(E)]}),0n,`${N?`${Me}. `:""}Approve the exact token amount to the Pons router through Permit2 for five minutes.`))}let _=[ne(je,[{poolKey:f,zeroForOne:A,amountIn:i,amountOutMinimum:k,minHopPriceX36:0n,hookData:"0x"}]),ne(oe("address,uint256"),[h,i]),ne(oe("address,uint256"),[S,k])],J=ne(oe("bytes,bytes[]"),["0x060c0f",_]);q.push(re(C.universal_router.address,we({abi:Ke,functionName:"execute",args:["0x10",[J],E]}),h===K?i:0n,"Trade through Pons Universal Router v2.1.2.")),ae="Quoter output is net of Pons hook fees; no additional fee is subtracted."}if(T<=0n||k<=0n||k>Te||(W??k)>Te)throw new d("Trade output or minimum is outside the supported positive range.");let xe=c?{changes:[],summary:"Quote only; preview is required before sending."}:await n.preview(q,r),de=i-O;return{txs:q,changes:xe.changes,...ue===void 0?{}:{expiresAt:ue},summary:`${o?"Buy":"Sell"} ${V.symbol} (${V.address}) on chain ${b}${g?"":` ${o?"with":"for"} ${G}`}. ${ae} ${ye}${u.phase===0?`${Qe} `:`${Ve} `}${de>0n?`Expected ${g?"native refund":"refund"}: ${n.formatAmount(de.toString(),w.decimals)} ${w.symbol}; minimum output uses the expected spend after refund. `:""}${xe.summary}`,pairToken:w,quote:{phase:u.phase,amountIn:I(se,i),amountOut:I(ie,T),minAmountOut:I(ie,k),minimumKind:"absolute",calldataMinAmountOut:I(ie,W??k),expectedSpend:I(se,O),expectedRefund:I(se,de),fees:ve,blockNumber:l.number.toString(),blockTimestamp:l.timestamp.toString()}}}function hn(n){return Ue(n,!0)}function Ue(n,t=!1,r){let o=new Map,c=e=>{if(BigInt(ee())>=BigInt(e.expiresAt))throw new be};return{name:"pons",async quote(e,p){if(e={...e,from:H(e.from),to:H(e.to)},D(e.from)&&D(e.to))throw new Z("Pons quotes require a launch token and its pair token.");let s=D(e.from)||!D(e.to)&&await Ze(n,e.from,e.to,r),i=ee(),m=await Fe(n,{token:s?e.to:e.from,amountIn:e.amountIn,slippageBps:e.slippageBps,pairToken:y(s?e.from:e.to)},p,s,{quoteOnly:!0,curveOnly:t,blockNumber:r}),x=m.txs.at(-1),a=m.quote,l=String(BigInt(r===void 0?i:a.blockTimestamp)+BigInt(Be)),u=a.minAmountOut.amount,g=a.fees,M=D(m.pairToken.address)?"native ETH base units (18 decimals)":`${m.pairToken.symbol} (${m.pairToken.address}) base units (${m.pairToken.decimals} decimals)`,j=g?`Pons curve fees included in net output: ${g.base.amount} base, ${g.creator.amount} creator and ${g.snipe.amount} opening tax, in ${M}. Oak swap fee: 0 (venue fee is never Oak income). ${We}`:"Quoter output is net of Pons hook fees; no additional fee is subtracted. Oak swap fee: 0.",B=Ee({...e,quoteId:`pons:${ze()}`,provider:"pons",wallet:p,chainId:b,router:x.to,spender:a.phase===0?x.to:C.permit2.address,expiresAt:l,data:x.data,value:x.value,amountOut:a.amountOut.amount,minAmountOut:u,blockNumber:a.blockNumber,...a.phase===0?{ponsCurveToken:s?e.to:e.from,calldataMinAmountOut:a.calldataMinAmountOut.amount}:{ponsPoolToken:s?e.to:e.from},expectedSpend:a.expectedSpend.amount,expectedRefund:a.expectedRefund.amount,feeDisclosure:j,oakFee:"0"});ke(x,B),c(B);for(let[U,L]of o)BigInt(ee())>=BigInt(L.quote.expiresAt)&&o.delete(U);for(;o.size>=Oe;)o.delete(o.keys().next().value);return o.set(B.quoteId,{quote:{...B},txs:m.txs.map(U=>({...U})),summary:m.summary}),B},async build(e,p){let s=o.get(e);if(!s)throw new be;if(c(s.quote),Q(p),!P(p,s.quote.wallet))throw new d("Quote was issued for a different wallet.");let i=s.txs.map(a=>({...a}));ke(i.at(-1),s.quote);let m=await n.preview(i,p);if(c(s.quote),m.changes.filter(a=>P(H(a.token.address),H(s.quote.to))).reduce((a,l)=>a+BigInt(l.amount),0n)<BigInt(s.quote.minAmountOut))throw new d("Preview retained output is below the accepted minimum.");return{txs:i,summary:`${s.summary} ${m.summary} ${s.quote.feeDisclosure}`}}}}async function Le(n,t,r){return n.clientFor(b).readContract({address:Re.factory.address,abi:_e,functionName:"getLaunchedToken",args:[F(t)],...r===void 0?{}:{blockNumber:r}})}async function Ze(n,t,r,o){let c=await Le(n,r,o);return c.exists&&P(c.token,r)&&P(y(c.pairToken),y(t))}async function bn(n,t,r,o,c){if(typeof r.token!="string")throw new d("Provide a launch token address.");Q(r.token);let e=F(r.token),p=await Le(n,e,c);if(!p.exists||!P(p.token,e))throw new d("This address is not a Pons launch token.");let s=y(p.pairToken)===K?fe:F(p.pairToken);return De(r.pairToken,F(p.pairToken),t,s),{quote:await Ue(n,!1,c).quote({from:t?s:e,to:t?e:s,amountIn:String(r.amountIn),...r.slippageBps===void 0?{}:{slippageBps:r.slippageBps}},o),input:t?s:e}}var en=n=>({tools:[!0,!1].map(t=>({name:t?"pons_buy":"pons_sell",inputSchema:Ye,async execute(r,o){try{return await Fe(n,r,o,t)}catch(c){throw new d(n.plainError(c))}}}))}),kn=en;export{hn as a,Ue as b,bn as c,en as d,kn as e};
|
|
1
|
+
import{A as Ee,a as Be,b as he,g as Z,h as be,i as Oe,m as ee,n as D,y as ke}from"./GYPMUYB5.js";import{b as y,c as qe}from"./GK3D7OKG.js";import{a as fe,b as H}from"./Z7FGEWO2.js";import{a as Q}from"./43LI5NKJ.js";import{a as Ie}from"./IOYRL6AY.js";import{a as $e}from"./66F5ZH34.js";import{c as le,g as P}from"./NWNYJ26T.js";import{b as Se}from"./IX3GZMTM.js";import{b,j as me}from"./TI727O2H.js";import{a as d}from"./XSD5NL7J.js";import{a as pe}from"./JXOEJPJ4.js";import{randomUUID as ze}from"node:crypto";import{encodeAbiParameters as ne,encodeFunctionData as we,erc20Abi as ge,getAddress as F,parseAbi as X,parseAbiParameters as oe,zeroAddress as K}from"viem";var Re=me[b].pons,C=me[b].ponsTrade,_e=X(["function getLaunchedToken(address) view returns ((address token,address curve,address deployer,address creatorFeeRecipient,address pairToken,uint256 graduationThreshold,uint24 poolFee,int24 tickSpacing,uint16 creatorTaxBps,bool buybackEnabled,uint8 phase,uint256 sweptQuote,uint256 sweptTokens,uint256 sweptAt,bool exists))"]),te=X(["function getReserves() view returns (uint256 quoteReserve,uint256 tokenReserve)","function feeBps() view returns (uint256)","function creatorTaxBps() view returns (uint256)","function currentSnipeTaxBps(address) view returns (uint256)","function sellableTokens() view returns (uint256)","function buy(uint256 quoteIn,uint256 minTokensOut,address recipient) payable returns (uint256)","function sell(uint256 tokensIn,uint256 minQuoteOut,address recipient) returns (uint256)"]),He=X(["function quoteExactInputSingle(((address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks) poolKey,bool zeroForOne,uint128 exactAmount,bytes hookData) params) returns (uint256 amountOut,uint256 gasEstimate)"]),Ke=X(["function execute(bytes commands,bytes[] inputs,uint256 deadline) payable"]),Xe=X(["function approve(address token,address spender,uint160 amount,uint48 expiration)"]),je=oe("((address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks) poolKey,bool zeroForOne,uint128 amountIn,uint128 amountOutMinimum,uint256 minHopPriceX36,bytes hookData)"),Ge={address:fe,chainId:b,decimals:18,symbol:"ETH"},Qe="There is no on-chain expiry. The signed transaction is protected by its minimum output.",Ve="This trade must be sent within 5 minutes of its quote. If you approve later, Oak shows you fresh terms first.",We=`Quote expiry is enforced by Oak before signing only. ${Qe}`,$=10000n,Te=(1n<<256n)-1n,Ne=(1n<<128n)-1n,I=(n,t)=>({token:n,amount:t.toString()}),Ce=(n,t)=>(n+t-1n)/t,Me="Reuse existing exact allowance";async function Je(n,t,r,o,c){try{let e=await n.readContract({address:t,abi:ge,functionName:"allowance",args:[r,o],blockNumber:c});return typeof e=="bigint"?e:void 0}catch{return}}var Ye={type:"object",additionalProperties:!1,required:["token","amountIn"],properties:{token:{...le,description:"Pons launch token address on chain 4663."},amountIn:$e('Input in base units: pair token for buys (use its decimals), launch token for sells (18 decimals). Examples: "1000000" = 1 pair token at 6 decimals; "1000000000000000000" = 1 launch token.'),pairToken:{...le,description:"The launch pair from pons_status. Required to buy a custom-pair launch, so amountIn is never read in the wrong units; omit or use the zero address for native ETH."},slippageBps:{description:"Slippage tolerance in basis points (50 = 0.5%).",type:"integer",minimum:0,maximum:9999,default:he}}};function De(n,t,r,o){if(n===void 0){if(r&&y(t)!==K)throw new d(`This Pons launch is paired with ${o}; amountIn is in that token's base units. Repeat with pairToken "${t}" to confirm the input asset.`);return}if(typeof n!="string")throw new d("pairToken must be a token address.");if(Q(n),!P(y(n),y(t)))throw new Z(`This Pons launch trades only against ${o}.`)}async function Fe(n,t,r,o,{quoteOnly:c=!1,curveOnly:e=!1,blockNumber:p}={}){if(Q(r),Object.keys(t).some(f=>!["token","amountIn","slippageBps","pairToken"].includes(f)))throw new d("Provide only token, amountIn, optional pairToken and optional slippageBps.");if(typeof t.token!="string")throw new d("Provide a launch token address.");Q(t.token);let s=F(t.token),i=Se(t.amountIn);if(i===0n||i>Te)throw new d("Trade amount must be positive and within the uint256 range.");let m=t.slippageBps??he;if(typeof m!="number"||!Number.isInteger(m)||m<0||m>=1e4)throw new d("Slippage must be an integer from 0 to 9999 basis points.");let x=f=>f*($-BigInt(m))/$,a=n.clientFor(b),l=p===void 0?await a.getBlock():await a.getBlock({blockNumber:p});if(p!==void 0&&l.number!==p)throw new d("Pons quote snapshot is unavailable.");let u=await a.readContract({address:Re.factory.address,abi:_e,functionName:"getLaunchedToken",args:[s],blockNumber:l.number});if(!u.exists||!P(u.token,s))throw new d("This address is not a Pons launch token.");if(e&&u.phase!==0)throw new Z("Pons curve quotes are only available before graduation.");if(u.phase===1)throw new d("Pons graduation is pending; the curve is closed and the pool is not ready.");if(u.phase===3)throw new d("This Pons launch was rescued and has no active trade route.");if(u.phase!==0&&u.phase!==2)throw new d("This Pons launch has an unknown trade phase.");let g=y(u.pairToken)===K,M=F(u.pairToken);if(P(M,s))throw new d("This Pons launch has an invalid pair.");let j=f=>Promise.all([a.readContract({address:f,abi:ge,functionName:"symbol",blockNumber:l.number}),a.readContract({address:f,abi:ge,functionName:"decimals",blockNumber:l.number})]),[[B,U],L]=await Promise.all([j(s),g?void 0:j(M)]),w=L?{address:M,chainId:b,symbol:pe(L[0]),decimals:L[1]}:Ge,G=g?"native ETH":`${w.symbol} (${w.address})`;De(t.pairToken,M,o,`${G}, ${w.decimals} decimals`);let V={address:s,chainId:b,symbol:pe(B),decimals:U},se=o?w:V,ie=o?V:w,q=[],re=(f,h,S,A)=>n.unsignedTx({to:f,data:h,value:S.toString(),chainId:b,description:A}),T,k,W,O=i,ve=null,ae,ye="",ue;if(u.phase===0){let f=v=>a.readContract({address:u.curve,abi:te,functionName:v,blockNumber:l.number}),[[h,S],A,R,E,_]=await Promise.all([a.readContract({address:u.curve,abi:te,functionName:"getReserves",blockNumber:l.number}),f("feeBps"),f("creatorTaxBps"),o?a.readContract({address:u.curve,abi:te,functionName:"currentSnipeTaxBps",args:[r],blockNumber:l.number}):Promise.resolve(0n),o?f("sellableTokens"):Promise.resolve(0n)]);if(h<=0n||S<=0n||A+R>$-100n)throw new d("Pons curve reserves or fee settings are unavailable.");let J=$-A-R-100n,N=E<J?E:J,Ae=v=>({base:v*A/$,creator:v*R/$,snipe:v*N/$}),Pe=v=>{let z=Ae(v);return v-z.base-z.creator-z.snipe},Y;if(o){if(_<=0n||_>=S)throw new d("The curve has no available sellable tokens.");let v=Pe(i);if(T=v*S/(h+v),T>=_){T=_;let z=T*h/(S-T)+1n;O=Ce(z*$,$-A-R-N),O>i&&(O=i)}Y=O,k=x(T),W=Ce(k*i,O),g||q.push(n.approval(w.address,u.curve,i.toString(),b))}else Y=i*h/(S+i),T=Pe(Y),k=x(T),q.push(n.approval(s,u.curve,i.toString(),b));let ce=Ae(Y);ve={base:I(w,ce.base),creator:I(w,ce.creator),snipe:I(w,ce.snipe)},ae=`Curve fees included: ${A} base, ${R} creator and ${N} opening-tax basis points, each rounded separately.`,q.push(re(u.curve,we({abi:te,functionName:o?"buy":"sell",args:[i,W??k,r]}),o&&g?i:0n,o?`Buy Pons curve tokens with ${G}.`:`Sell Pons curve tokens for ${G}.`))}else{if(i>Ne)throw new d("Trade amount exceeds the router uint128 range.");let f=qe(u.pairToken,s,u.poolFee,u.tickSpacing),h=o?y(u.pairToken):s,S=o?s:y(u.pairToken),A=P(h,f.currency0);if(T=(await a.simulateContract({address:C.quoter.address,abi:He,functionName:"quoteExactInputSingle",args:[{poolKey:f,zeroForOne:A,exactAmount:i,hookData:"0x"}],account:r,gas:Ie,blockNumber:l.number})).result[0],k=x(T),k>Ne)throw new d("Minimum output exceeds the router uint128 range.");let E=l.timestamp+300n;if(ue=E.toString(),E>=1n<<48n)throw new d("Permit2 expiry exceeds its timestamp range.");if(h!==K){let N=!c&&await Je(a,h,r,C.permit2.address,l.number)===i;N||q.push(n.approval(h,C.permit2.address,i.toString(),b)),ye=N?`${Me}: ${i} input base units already approved to Permit2. `:"",q.push(re(C.permit2.address,we({abi:Xe,functionName:"approve",args:[h,C.universal_router.address,i,Number(E)]}),0n,`${N?`${Me}. `:""}Approve the exact token amount to the Pons router through Permit2 for five minutes.`))}let _=[ne(je,[{poolKey:f,zeroForOne:A,amountIn:i,amountOutMinimum:k,minHopPriceX36:0n,hookData:"0x"}]),ne(oe("address,uint256"),[h,i]),ne(oe("address,uint256"),[S,k])],J=ne(oe("bytes,bytes[]"),["0x060c0f",_]);q.push(re(C.universal_router.address,we({abi:Ke,functionName:"execute",args:["0x10",[J],E]}),h===K?i:0n,"Trade through Pons Universal Router v2.1.2.")),ae="Quoter output is net of Pons hook fees; no additional fee is subtracted."}if(T<=0n||k<=0n||k>Te||(W??k)>Te)throw new d("Trade output or minimum is outside the supported positive range.");let xe=c?{changes:[],summary:"Quote only; preview is required before sending."}:await n.preview(q,r),de=i-O;return{txs:q,changes:xe.changes,...ue===void 0?{}:{expiresAt:ue},summary:`${o?"Buy":"Sell"} ${V.symbol} (${V.address}) on chain ${b}${g?"":` ${o?"with":"for"} ${G}`}. ${ae} ${ye}${u.phase===0?`${Qe} `:`${Ve} `}${de>0n?`Expected ${g?"native refund":"refund"}: ${n.formatAmount(de.toString(),w.decimals)} ${w.symbol}; minimum output uses the expected spend after refund. `:""}${xe.summary}`,pairToken:w,quote:{phase:u.phase,amountIn:I(se,i),amountOut:I(ie,T),minAmountOut:I(ie,k),minimumKind:"absolute",calldataMinAmountOut:I(ie,W??k),expectedSpend:I(se,O),expectedRefund:I(se,de),fees:ve,blockNumber:l.number.toString(),blockTimestamp:l.timestamp.toString()}}}function hn(n){return Ue(n,!0)}function Ue(n,t=!1,r){let o=new Map,c=e=>{if(BigInt(ee())>=BigInt(e.expiresAt))throw new be};return{name:"pons",async quote(e,p){if(e={...e,from:H(e.from),to:H(e.to)},D(e.from)&&D(e.to))throw new Z("Pons quotes require a launch token and its pair token.");let s=D(e.from)||!D(e.to)&&await Ze(n,e.from,e.to,r),i=ee(),m=await Fe(n,{token:s?e.to:e.from,amountIn:e.amountIn,slippageBps:e.slippageBps,pairToken:y(s?e.from:e.to)},p,s,{quoteOnly:!0,curveOnly:t,blockNumber:r}),x=m.txs.at(-1),a=m.quote,l=String(BigInt(r===void 0?i:a.blockTimestamp)+BigInt(Be)),u=a.minAmountOut.amount,g=a.fees,M=D(m.pairToken.address)?"native ETH base units (18 decimals)":`${m.pairToken.symbol} (${m.pairToken.address}) base units (${m.pairToken.decimals} decimals)`,j=g?`Pons curve fees included in net output: ${g.base.amount} base, ${g.creator.amount} creator and ${g.snipe.amount} opening tax, in ${M}. Oak swap fee: 0 (venue fee is never Oak income). ${We}`:"Quoter output is net of Pons hook fees; no additional fee is subtracted. Oak swap fee: 0.",B=Ee({...e,quoteId:`pons:${ze()}`,provider:"pons",wallet:p,chainId:b,router:x.to,spender:a.phase===0?x.to:C.permit2.address,expiresAt:l,data:x.data,value:x.value,amountOut:a.amountOut.amount,minAmountOut:u,blockNumber:a.blockNumber,...a.phase===0?{ponsCurveToken:s?e.to:e.from,calldataMinAmountOut:a.calldataMinAmountOut.amount}:{ponsPoolToken:s?e.to:e.from},expectedSpend:a.expectedSpend.amount,expectedRefund:a.expectedRefund.amount,feeDisclosure:j,oakFee:"0"});ke(x,B),c(B);for(let[U,L]of o)BigInt(ee())>=BigInt(L.quote.expiresAt)&&o.delete(U);for(;o.size>=Oe;)o.delete(o.keys().next().value);return o.set(B.quoteId,{quote:{...B},txs:m.txs.map(U=>({...U})),summary:m.summary}),B},async build(e,p){let s=o.get(e);if(!s)throw new be;if(c(s.quote),Q(p),!P(p,s.quote.wallet))throw new d("Quote was issued for a different wallet.");let i=s.txs.map(a=>({...a}));ke(i.at(-1),s.quote);let m=await n.preview(i,p);if(c(s.quote),m.changes.filter(a=>P(H(a.token.address),H(s.quote.to))).reduce((a,l)=>a+BigInt(l.amount),0n)<BigInt(s.quote.minAmountOut))throw new d("Preview retained output is below the accepted minimum.");return{txs:i,summary:`${s.summary} ${m.summary} ${s.quote.feeDisclosure}`}}}}async function Le(n,t,r){return n.clientFor(b).readContract({address:Re.factory.address,abi:_e,functionName:"getLaunchedToken",args:[F(t)],...r===void 0?{}:{blockNumber:r}})}async function Ze(n,t,r,o){let c=await Le(n,r,o);return c.exists&&P(c.token,r)&&P(y(c.pairToken),y(t))}async function bn(n,t,r,o,c){if(typeof r.token!="string")throw new d("Provide a launch token address.");Q(r.token);let e=F(r.token),p=await Le(n,e,c);if(!p.exists||!P(p.token,e))throw new d("This address is not a Pons launch token.");let s=y(p.pairToken)===K?fe:F(p.pairToken);return De(r.pairToken,F(p.pairToken),t,s),{quote:await Ue(n,!1,c).quote({from:t?s:e,to:t?e:s,amountIn:String(r.amountIn),...r.slippageBps===void 0?{}:{slippageBps:r.slippageBps}},o),input:t?s:e}}var en=n=>({tools:[!0,!1].map(t=>({name:t?"pons_buy":"pons_sell",inputSchema:Ye,async execute(r,o){try{return await Fe(n,r,o,t)}catch(c){throw new d(n.plainError(c))}}}))}),kn=en;export{hn as a,Ue as b,bn as c,en as d,kn as e};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as g,j as k}from"./
|
|
1
|
+
import{i as g,j as k}from"./27PVS6BU.js";import{d as p,f}from"./7TSIF3F4.js";import{q as m}from"./GGMVT5A6.js";import{c as u,f as h}from"./MI5HZDMH.js";import{a as d}from"./SPJCSEKP.js";import{g as l}from"./NWNYJ26T.js";import{a as i}from"./XSD5NL7J.js";var w=["hoodlock_lock","hoodlock_burn","hoodlock_airdrop_create","hoodlock_airdrop_claim",...p,...u];async function H(e,r,t,s){if(!w.includes(e))throw new i("Unknown HoodLock action; nothing was signed.");let o=async()=>{throw new i("HoodLock does not require a swap for this action.")},n=d({clientFor:()=>s,http:fetch,preview:async a=>({txs:a,changes:[],summary:"Locally reconstructed HoodLock intent."}),quoteSwap:o,buildSwap:o}),c=await[g(n),k(n),...m(n).tools,...f(n).tools,...h(n).tools].find(a=>a.name===e).execute(r,t);if(!Array.isArray(c.txs)||c.txs.length===0)throw new i("HoodLock action has no transactions; use the read route.");return c.txs.map(a=>({...a}))}function I(e,r){if(!r.length||e.length!==r.length||e.some((t,s)=>{let o=r[s];return t.chainId!==o.chainId||!l(t.to,o.to)||!l(t.data,o.data)||t.value!==o.value}))throw new i("HoodLock transaction differs from the locally reconstructed request; nothing was signed.")}export{w as a,H as b,I as c};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{e as T,f as re,g as B,i as ae,j as O}from"./X5AL3DUK.js";import{F as I,a as ee,b as oe,c as _,f as L,h as S,m as te,n as y,r as z,s as se,t as ne,v as ie}from"./WBNFRPAT.js";import{a as U}from"./YEIM6BZQ.js";import{f as W,g as Q}from"./ATEVAJ5Y.js";import{a as K}from"./Z7FGEWO2.js";import{a as J}from"./43LI5NKJ.js";import{g as E}from"./NWNYJ26T.js";import{b as k,n as Z}from"./TI727O2H.js";import{a as b,b as F,e as Y}from"./XSD5NL7J.js";import{decodeAbiParameters as we,getAddress as v,pad as de,parseAbi as fe,parseAbiParameters as Pe,toEventSelector as be,toHex as ce,zeroAddress as pe}from"viem";var ke=be("Initialize(bytes32,address,address,uint24,int24,address,uint160,int24)"),ye=Pe("uint24 fee, int24 tickSpacing, address hooks, uint160 sqrtPriceX96, int24 tick"),Ae=10000000n,Ie=10000n,me=25,X=200,R=16,ve=3e3,Ce=500,Se=500n,q=100,$=fe(["function getSlot0(bytes32 poolId) view returns (uint160 sqrtPriceX96, int24 tick, uint24 protocolFee, uint24 lpFee)","function getLiquidity(bytes32 poolId) view returns (uint128 liquidity)"]),_e=fe(["function poolKeys(bytes25 poolId) view returns (address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks)"]);function Le(o){let e=o.trim().toLowerCase();return e==="eth"||e==="native"||e===pe||e===K.toLowerCase()}function le(o,e){if(o!=null){if(typeof o!="string")throw new b(`${e} must be a token address, or "eth" for native ETH.`);return Le(o)?{eth:!0}:(J(o),{eth:!1,address:v(o)})}}var he=(o,e)=>BigInt(o)<BigInt(e)?-1:BigInt(o)>BigInt(e)?1:0;function x(o){return{address:o.address,symbol:o.symbol,decimals:o.decimals}}async function ge(o,e,r,i,a){let[t,s,f]=await Promise.all([o.readContract({address:e,abi:O,functionName:"slot0"}),o.readContract({address:e,abi:O,functionName:"liquidity"}),o.readContract({address:e,abi:O,functionName:"tickSpacing"})]),n=BigInt(t[0]);return{version:"v3",id:e,feePercent:U(a),highFee:a>=5e4,token0:x(r),token1:x(i),fee:a,tickSpacing:Number(f),initialized:n>0n,liquidity:BigInt(s).toString(),sqrtPriceX96:n.toString(),tick:Number(t[1]),price:n>0n?W(n,r.decimals,i.decimals):"0",addSupported:!0}}async function H(o,e,r){let i=r??ne(e),[a,t]=await Promise.all([I(o,e.currency0,k),I(o,e.currency1,k)]),[s,f]=await Promise.all([o.readContract({address:_,abi:$,functionName:"getSlot0",args:[i]}),o.readContract({address:_,abi:$,functionName:"getLiquidity",args:[i]})]),n=BigInt(s[0]),w=ie(e,Number(s[3]));return{version:"v4",id:i,feePercent:U((e.fee&8388608)!==0?Number(s[3]):e.fee),highFee:((e.fee&8388608)!==0?Number(s[3]):e.fee)>=5e4,token0:x(a),token1:x(t),fee:e.fee,tickSpacing:e.tickSpacing,hooks:v(e.hooks),initialized:n>0n,liquidity:BigInt(f).toString(),sqrtPriceX96:n.toString(),tick:Number(s[1]),price:n>0n?W(n,a.decimals,t.decimals):"0",addSupported:z.has(e.hooks.toLowerCase()),feeNote:w.feeNote,...z.has(e.hooks.toLowerCase())?{}:{note:e.hooks.toLowerCase()===Z.toLowerCase()?new te(se(e.currency0)?e.currency1:void 0).message:`Hook ${v(e.hooks)} is not one Oak has measured, so uniswap_add will refuse this pool.`}}}async function Ne(o,e,r,i){let a=await o.getBlockNumber(),t=[],s=new Set,f=!1,n=Ae;for(let d=a;;){let u=d+1n>n?d-n+1n:0n,l;try{l=await o.request({method:"eth_getLogs",params:[{address:ee.toLowerCase(),topics:[ke,null,e?de(e):null,r?de(r):null],fromBlock:ce(u),toBlock:ce(d)}]})}catch(p){if(F(p,-32601)||n<=Ie)throw p;n/=2n;continue}if(!Array.isArray(l))throw new b("Invalid v4 Initialize log response.");let P=[];for(let p of l){if(!Array.isArray(p.topics)||p.topics.length!==4||typeof p.data!="string")throw new b("Invalid v4 Initialize log.");let[A,C,N]=we(ye,p.data),D={currency0:v(`0x${p.topics[2].slice(-40)}`),currency1:v(`0x${p.topics[3].slice(-40)}`),fee:Number(A),tickSpacing:Number(C),hooks:v(N)};P.push({key:D,id:p.topics[1]}),s.add(p.topics[1].toLowerCase())}if(t.push(P),u===0n)break;if(s.size>=i){f=!0;break}d=u-1n}let w=new Map;for(let d of t.reverse())for(let u of d)w.set(u.id.toLowerCase(),u);return{pools:[...w.values()],cut:f}}async function Ee(o,e,r){let i=e.eth?T.weth:e.address,a=r.eth?T.weth:r.address;if(i===a)return[];let[t,s]=he(i,a)<0?[i,a]:[a,i],[f,n]=await Promise.all([I(o,t,k),I(o,s,k)]),w=[];for(let d of Object.keys(re).map(Number)){let u=v(String(await o.readContract({address:T.factory,abi:ae,functionName:"getPool",args:[t,s,d]})));u!==pe&&w.push(await ge(o,u,f,n,d))}return w}function ue(o){return o?o.eth?[S,L]:o.address===L?[L,S]:[o.address]:null}async function Te(o,e){let r=new Map;if(e.length===0)return r;if(typeof o.multicall=="function"&&o.chain?.contracts?.multicall3)try{return(await o.multicall({allowFailure:!0,contracts:e.map(a=>({address:_,abi:$,functionName:"getLiquidity",args:[a]}))})).forEach((a,t)=>r.set(e[t].toLowerCase(),a.status==="success"?BigInt(a.result):0n)),r}catch{}for(let i=0;i<e.length;i+=R)(await Promise.allSettled(e.slice(i,i+R).map(async t=>BigInt(await o.readContract({address:_,abi:$,functionName:"getLiquidity",args:[t]}))))).forEach((t,s)=>r.set(e[i+s].toLowerCase(),t.status==="fulfilled"?t.value:0n));return r}async function Be(o,e,r,i){let a=ue(e),t=ue(r),s=new Map,f=(c,h)=>{if(c&&h){if(c===h)return;let[m,g]=he(c,h)<0?[c,h]:[h,c];s.set(`${m}/${g}`,[m,g])}else if(c||h){let m=c??h;s.set(`${m}/*0`,[m,null]),s.set(`${m}/*1`,[null,m])}};for(let c of a??[null])for(let h of t??[null])f(c,h);let n=new Map;for(let c of y)[...s.values()].some(([m,g])=>(!m||E(c.key.currency0,m))&&(!g||E(c.key.currency1,g)))&&n.set(c.poolId.toLowerCase(),{key:c.key,id:c.poolId});let d=typeof o.multicall=="function"&&!!o.chain?.contracts?.multicall3?ve:Ce,u=!1;for(let[c,h]of s.values()){let m=await Ne(o,c,h,d+y.length);u||=m.cut;for(let g of m.pools)n.set(g.id.toLowerCase(),g)}let l=new Set(y.map(c=>c.poolId.toLowerCase())),P=[...n.values()],p=P.filter(c=>l.has(c.id.toLowerCase())),A=P.filter(c=>!l.has(c.id.toLowerCase())).reverse();(A.length>d||u)&&i.push(`${u?"At least ":""}${A.length} v4 pools match; only the newest ${d} non-measured ones were considered. Pass both tokens, or a poolId, to narrow.`);let C=A.slice(0,d),N=await Te(o,C.map(c=>c.id)),D=C.sort((c,h)=>{let m=N.get(c.id.toLowerCase())??0n,g=N.get(h.id.toLowerCase())??0n;return m===g?0:m<g?1:-1}),V=[...p,...D];V.length>X&&i.push(`${V.length} v4 pools match; full state was read for Oak's measured pools plus the deepest of the rest (${X} total). Pass both tokens, or a poolId, to narrow.`);let G=[],M=0,j=V.slice(0,X);for(let c=0;c<j.length;c+=R){let h=await Promise.allSettled(j.slice(c,c+R).map(({key:m,id:g})=>H(o,m,g)));for(let m of h)m.status==="fulfilled"?G.push(m.value):M++}return M>0&&i.push(`${M} pool(s) were skipped because a token or pool state could not be read.`),G}async function Oe(o,e){let r=y.find(n=>E(n.poolId,e));if(r)return H(o,r.key,r.poolId);let[i,a,t,s,f]=await o.readContract({address:oe,abi:_e,functionName:"poolKeys",args:[e.slice(0,52)]});if(i===S&&a===S&&Number(s)===0)throw new b(`No Uniswap v4 pool ${e} is known to the PositionManager (no position was ever minted in it, or it is not initialized). Search by token pair instead.`);return H(o,{currency0:i,currency1:a,fee:Number(t),tickSpacing:Number(s),hooks:f},e)}function qe(o){let e=new Set([...y.map(t=>t.poolId.toLowerCase()),...B.map(t=>t.address.toLowerCase())]),r=new Set([S,K.toLowerCase(),L.toLowerCase()]),i=t=>r.has(t.address.toLowerCase())?"ETH":t.address.toLowerCase(),a=new Map;for(let t of o.filter(s=>s.initialized&&BigInt(s.liquidity)>0n)){let s=`${i(t.token0)}/${i(t.token1)}`;a.set(s,[...a.get(s)??[],t])}for(let t of a.values()){let s=t.filter(d=>e.has(d.id.toLowerCase()));if(s.length===0&&t.length<3)continue;let n=(s.length>0?s:t).map(d=>BigInt(d.sqrtPriceX96)).sort((d,u)=>d<u?-1:d>u?1:0),w=n[Math.floor(n.length/2)];for(let d of t){if(e.has(d.id.toLowerCase()))continue;let u=Q(BigInt(d.sqrtPriceX96),w);u>Se&&(d.priceOutlierBps=Number(u),d.note=`${d.note?`${d.note} `:""}Price differs ${u} bps from the ${s.length>0?"Oak-measured":"median"} price for this pair; do not treat this pool as the market price.`)}}}async function Re(o,e){let r=e.version;if(r!==void 0&&r!=="v3"&&r!=="v4")throw new b('version must be "v3" or "v4"; omit it to search both.');let i=e.limit===void 0?me:Number(e.limit);if(!Number.isInteger(i)||i<1||i>q)throw new b(`limit must be an integer from 1 to ${q}.`);let a=le(e.tokenA,"tokenA"),t=le(e.tokenB,"tokenB");if(!a&&t)throw new b("Provide tokenA when searching by token; tokenB narrows the search to a pair.");let s=o.clientFor(k),f=[],n=[];if(e.poolId!==void 0){if(typeof e.poolId!="string"||!/^0x[0-9a-fA-F]{64}$/.test(e.poolId))throw new b("poolId must be a 32-byte hex v4 poolId. For v3 search by tokenA/tokenB.");n=[await Oe(s,e.poolId)]}else if(a){if(r!=="v4"&&(t?n.push(...await Ee(s,a,t)):f.push("v3 pools are looked up per pair; pass tokenB to include them.")),r!=="v3")try{n.push(...await Be(s,a,t,f))}catch(l){throw F(l,-32601)?l:new b(`Could not search v4 pools. ${Y(l)}`)}}else{f.push("No token filter given: showing the pools Oak has measured. Pass tokenA (and tokenB) to search the chain for every pool of a pair.");let l=await Promise.all(B.map(async p=>{let[A,C]=await Promise.all([I(s,p.token0,k),I(s,p.token1,k)]);return ge(s,p.address,A,C,p.fee)})),P=await Promise.all(y.map(p=>H(s,p.key,p.poolId)));n=[...r==="v4"?[]:l,...r==="v3"?[]:P]}qe(n);let w=new Set([...y.map(l=>l.poolId.toLowerCase()),...B.map(l=>l.address.toLowerCase())]),d=0;n=n.filter(l=>!l.highFee||w.has(l.id.toLowerCase())?!0:e.includeHighFeePools===!0?(l.note=`Do not trade here: ${l.feePercent} fee.${l.note?` ${l.note}`:""}`,!0):(d++,!1)),d&&f.push(`${d} pools with fees of 5% or more were left out. To see them, pass includeHighFeePools: true.`),n.sort((l,P)=>BigInt(P.liquidity)>BigInt(l.liquidity)?1:BigInt(P.liquidity)<BigInt(l.liquidity)?-1:0),n.length>i&&f.push(`Showing the ${i} deepest of ${n.length} pools found; raise limit (max ${q}) to see more.`),n=n.slice(0,i);let u=n.filter(l=>l.initialized&&BigInt(l.liquidity)>0n).length;return n.length===0&&d===0&&f.push("No pool exists for this pair. Create one with uniswap_create_pool, or create it and add the first liquidity together with uniswap_add plus initialPrice."),{pools:n,notes:f,summary:`Found ${n.length} Uniswap pool(s), ${u} with active liquidity. price is token1 per 1 token0.`}}function ze(o){return{tools:[{name:"uniswap_pools",inputSchema:{type:"object",description:"Read-only pool discovery on Robinhood Chain (4663): every Uniswap v3 and v4 pool for a token pair with fee, tick spacing, hook, liquidity and price, or one v4 pool by poolId. No tokens given: the measured pools.",properties:{version:{type:"string",enum:["v3","v4"],description:"Limit to one version; omit to search both."},tokenA:{type:"string",description:'Token address, or "eth" for native ETH (searches v3 WETH and v4 native/WETH pools).'},tokenB:{type:"string",description:"Second token of the pair. Required for v3 lookups."},poolId:{type:"string",description:"32-byte v4 poolId to inspect."},includeHighFeePools:{description:"Include pools above the usual fee threshold in discovery.",type:"boolean"},limit:{description:"Maximum number of results to return, within the stated bounds.",type:"integer",minimum:1,maximum:q,default:me}}},execute:async r=>Re(o,r)}]}}export{Re as a,ze as b};
|
|
1
|
+
import{e as T,f as re,g as B,i as ae,j as O}from"./6D3XNCOX.js";import{F as I,a as ee,b as oe,c as _,f as L,h as S,m as te,n as y,r as z,s as se,t as ne,v as ie}from"./KLEJ3W4T.js";import{a as U}from"./YEIM6BZQ.js";import{f as W,g as Q}from"./RA7DOR7F.js";import{a as K}from"./Z7FGEWO2.js";import{a as J}from"./43LI5NKJ.js";import{g as E}from"./NWNYJ26T.js";import{b as k,n as Z}from"./TI727O2H.js";import{a as b,b as F,e as Y}from"./XSD5NL7J.js";import{decodeAbiParameters as we,getAddress as v,pad as de,parseAbi as fe,parseAbiParameters as Pe,toEventSelector as be,toHex as ce,zeroAddress as pe}from"viem";var ke=be("Initialize(bytes32,address,address,uint24,int24,address,uint160,int24)"),ye=Pe("uint24 fee, int24 tickSpacing, address hooks, uint160 sqrtPriceX96, int24 tick"),Ae=10000000n,Ie=10000n,me=25,X=200,R=16,ve=3e3,Ce=500,Se=500n,q=100,$=fe(["function getSlot0(bytes32 poolId) view returns (uint160 sqrtPriceX96, int24 tick, uint24 protocolFee, uint24 lpFee)","function getLiquidity(bytes32 poolId) view returns (uint128 liquidity)"]),_e=fe(["function poolKeys(bytes25 poolId) view returns (address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks)"]);function Le(o){let e=o.trim().toLowerCase();return e==="eth"||e==="native"||e===pe||e===K.toLowerCase()}function le(o,e){if(o!=null){if(typeof o!="string")throw new b(`${e} must be a token address, or "eth" for native ETH.`);return Le(o)?{eth:!0}:(J(o),{eth:!1,address:v(o)})}}var he=(o,e)=>BigInt(o)<BigInt(e)?-1:BigInt(o)>BigInt(e)?1:0;function x(o){return{address:o.address,symbol:o.symbol,decimals:o.decimals}}async function ge(o,e,r,i,a){let[t,s,f]=await Promise.all([o.readContract({address:e,abi:O,functionName:"slot0"}),o.readContract({address:e,abi:O,functionName:"liquidity"}),o.readContract({address:e,abi:O,functionName:"tickSpacing"})]),n=BigInt(t[0]);return{version:"v3",id:e,feePercent:U(a),highFee:a>=5e4,token0:x(r),token1:x(i),fee:a,tickSpacing:Number(f),initialized:n>0n,liquidity:BigInt(s).toString(),sqrtPriceX96:n.toString(),tick:Number(t[1]),price:n>0n?W(n,r.decimals,i.decimals):"0",addSupported:!0}}async function H(o,e,r){let i=r??ne(e),[a,t]=await Promise.all([I(o,e.currency0,k),I(o,e.currency1,k)]),[s,f]=await Promise.all([o.readContract({address:_,abi:$,functionName:"getSlot0",args:[i]}),o.readContract({address:_,abi:$,functionName:"getLiquidity",args:[i]})]),n=BigInt(s[0]),w=ie(e,Number(s[3]));return{version:"v4",id:i,feePercent:U((e.fee&8388608)!==0?Number(s[3]):e.fee),highFee:((e.fee&8388608)!==0?Number(s[3]):e.fee)>=5e4,token0:x(a),token1:x(t),fee:e.fee,tickSpacing:e.tickSpacing,hooks:v(e.hooks),initialized:n>0n,liquidity:BigInt(f).toString(),sqrtPriceX96:n.toString(),tick:Number(s[1]),price:n>0n?W(n,a.decimals,t.decimals):"0",addSupported:z.has(e.hooks.toLowerCase()),feeNote:w.feeNote,...z.has(e.hooks.toLowerCase())?{}:{note:e.hooks.toLowerCase()===Z.toLowerCase()?new te(se(e.currency0)?e.currency1:void 0).message:`Hook ${v(e.hooks)} is not one Oak has measured, so uniswap_add will refuse this pool.`}}}async function Ne(o,e,r,i){let a=await o.getBlockNumber(),t=[],s=new Set,f=!1,n=Ae;for(let d=a;;){let u=d+1n>n?d-n+1n:0n,l;try{l=await o.request({method:"eth_getLogs",params:[{address:ee.toLowerCase(),topics:[ke,null,e?de(e):null,r?de(r):null],fromBlock:ce(u),toBlock:ce(d)}]})}catch(p){if(F(p,-32601)||n<=Ie)throw p;n/=2n;continue}if(!Array.isArray(l))throw new b("Invalid v4 Initialize log response.");let P=[];for(let p of l){if(!Array.isArray(p.topics)||p.topics.length!==4||typeof p.data!="string")throw new b("Invalid v4 Initialize log.");let[A,C,N]=we(ye,p.data),D={currency0:v(`0x${p.topics[2].slice(-40)}`),currency1:v(`0x${p.topics[3].slice(-40)}`),fee:Number(A),tickSpacing:Number(C),hooks:v(N)};P.push({key:D,id:p.topics[1]}),s.add(p.topics[1].toLowerCase())}if(t.push(P),u===0n)break;if(s.size>=i){f=!0;break}d=u-1n}let w=new Map;for(let d of t.reverse())for(let u of d)w.set(u.id.toLowerCase(),u);return{pools:[...w.values()],cut:f}}async function Ee(o,e,r){let i=e.eth?T.weth:e.address,a=r.eth?T.weth:r.address;if(i===a)return[];let[t,s]=he(i,a)<0?[i,a]:[a,i],[f,n]=await Promise.all([I(o,t,k),I(o,s,k)]),w=[];for(let d of Object.keys(re).map(Number)){let u=v(String(await o.readContract({address:T.factory,abi:ae,functionName:"getPool",args:[t,s,d]})));u!==pe&&w.push(await ge(o,u,f,n,d))}return w}function ue(o){return o?o.eth?[S,L]:o.address===L?[L,S]:[o.address]:null}async function Te(o,e){let r=new Map;if(e.length===0)return r;if(typeof o.multicall=="function"&&o.chain?.contracts?.multicall3)try{return(await o.multicall({allowFailure:!0,contracts:e.map(a=>({address:_,abi:$,functionName:"getLiquidity",args:[a]}))})).forEach((a,t)=>r.set(e[t].toLowerCase(),a.status==="success"?BigInt(a.result):0n)),r}catch{}for(let i=0;i<e.length;i+=R)(await Promise.allSettled(e.slice(i,i+R).map(async t=>BigInt(await o.readContract({address:_,abi:$,functionName:"getLiquidity",args:[t]}))))).forEach((t,s)=>r.set(e[i+s].toLowerCase(),t.status==="fulfilled"?t.value:0n));return r}async function Be(o,e,r,i){let a=ue(e),t=ue(r),s=new Map,f=(c,h)=>{if(c&&h){if(c===h)return;let[m,g]=he(c,h)<0?[c,h]:[h,c];s.set(`${m}/${g}`,[m,g])}else if(c||h){let m=c??h;s.set(`${m}/*0`,[m,null]),s.set(`${m}/*1`,[null,m])}};for(let c of a??[null])for(let h of t??[null])f(c,h);let n=new Map;for(let c of y)[...s.values()].some(([m,g])=>(!m||E(c.key.currency0,m))&&(!g||E(c.key.currency1,g)))&&n.set(c.poolId.toLowerCase(),{key:c.key,id:c.poolId});let d=typeof o.multicall=="function"&&!!o.chain?.contracts?.multicall3?ve:Ce,u=!1;for(let[c,h]of s.values()){let m=await Ne(o,c,h,d+y.length);u||=m.cut;for(let g of m.pools)n.set(g.id.toLowerCase(),g)}let l=new Set(y.map(c=>c.poolId.toLowerCase())),P=[...n.values()],p=P.filter(c=>l.has(c.id.toLowerCase())),A=P.filter(c=>!l.has(c.id.toLowerCase())).reverse();(A.length>d||u)&&i.push(`${u?"At least ":""}${A.length} v4 pools match; only the newest ${d} non-measured ones were considered. Pass both tokens, or a poolId, to narrow.`);let C=A.slice(0,d),N=await Te(o,C.map(c=>c.id)),D=C.sort((c,h)=>{let m=N.get(c.id.toLowerCase())??0n,g=N.get(h.id.toLowerCase())??0n;return m===g?0:m<g?1:-1}),V=[...p,...D];V.length>X&&i.push(`${V.length} v4 pools match; full state was read for Oak's measured pools plus the deepest of the rest (${X} total). Pass both tokens, or a poolId, to narrow.`);let G=[],M=0,j=V.slice(0,X);for(let c=0;c<j.length;c+=R){let h=await Promise.allSettled(j.slice(c,c+R).map(({key:m,id:g})=>H(o,m,g)));for(let m of h)m.status==="fulfilled"?G.push(m.value):M++}return M>0&&i.push(`${M} pool(s) were skipped because a token or pool state could not be read.`),G}async function Oe(o,e){let r=y.find(n=>E(n.poolId,e));if(r)return H(o,r.key,r.poolId);let[i,a,t,s,f]=await o.readContract({address:oe,abi:_e,functionName:"poolKeys",args:[e.slice(0,52)]});if(i===S&&a===S&&Number(s)===0)throw new b(`No Uniswap v4 pool ${e} is known to the PositionManager (no position was ever minted in it, or it is not initialized). Search by token pair instead.`);return H(o,{currency0:i,currency1:a,fee:Number(t),tickSpacing:Number(s),hooks:f},e)}function qe(o){let e=new Set([...y.map(t=>t.poolId.toLowerCase()),...B.map(t=>t.address.toLowerCase())]),r=new Set([S,K.toLowerCase(),L.toLowerCase()]),i=t=>r.has(t.address.toLowerCase())?"ETH":t.address.toLowerCase(),a=new Map;for(let t of o.filter(s=>s.initialized&&BigInt(s.liquidity)>0n)){let s=`${i(t.token0)}/${i(t.token1)}`;a.set(s,[...a.get(s)??[],t])}for(let t of a.values()){let s=t.filter(d=>e.has(d.id.toLowerCase()));if(s.length===0&&t.length<3)continue;let n=(s.length>0?s:t).map(d=>BigInt(d.sqrtPriceX96)).sort((d,u)=>d<u?-1:d>u?1:0),w=n[Math.floor(n.length/2)];for(let d of t){if(e.has(d.id.toLowerCase()))continue;let u=Q(BigInt(d.sqrtPriceX96),w);u>Se&&(d.priceOutlierBps=Number(u),d.note=`${d.note?`${d.note} `:""}Price differs ${u} bps from the ${s.length>0?"Oak-measured":"median"} price for this pair; do not treat this pool as the market price.`)}}}async function Re(o,e){let r=e.version;if(r!==void 0&&r!=="v3"&&r!=="v4")throw new b('version must be "v3" or "v4"; omit it to search both.');let i=e.limit===void 0?me:Number(e.limit);if(!Number.isInteger(i)||i<1||i>q)throw new b(`limit must be an integer from 1 to ${q}.`);let a=le(e.tokenA,"tokenA"),t=le(e.tokenB,"tokenB");if(!a&&t)throw new b("Provide tokenA when searching by token; tokenB narrows the search to a pair.");let s=o.clientFor(k),f=[],n=[];if(e.poolId!==void 0){if(typeof e.poolId!="string"||!/^0x[0-9a-fA-F]{64}$/.test(e.poolId))throw new b("poolId must be a 32-byte hex v4 poolId. For v3 search by tokenA/tokenB.");n=[await Oe(s,e.poolId)]}else if(a){if(r!=="v4"&&(t?n.push(...await Ee(s,a,t)):f.push("v3 pools are looked up per pair; pass tokenB to include them.")),r!=="v3")try{n.push(...await Be(s,a,t,f))}catch(l){throw F(l,-32601)?l:new b(`Could not search v4 pools. ${Y(l)}`)}}else{f.push("No token filter given: showing the pools Oak has measured. Pass tokenA (and tokenB) to search the chain for every pool of a pair.");let l=await Promise.all(B.map(async p=>{let[A,C]=await Promise.all([I(s,p.token0,k),I(s,p.token1,k)]);return ge(s,p.address,A,C,p.fee)})),P=await Promise.all(y.map(p=>H(s,p.key,p.poolId)));n=[...r==="v4"?[]:l,...r==="v3"?[]:P]}qe(n);let w=new Set([...y.map(l=>l.poolId.toLowerCase()),...B.map(l=>l.address.toLowerCase())]),d=0;n=n.filter(l=>!l.highFee||w.has(l.id.toLowerCase())?!0:e.includeHighFeePools===!0?(l.note=`Do not trade here: ${l.feePercent} fee.${l.note?` ${l.note}`:""}`,!0):(d++,!1)),d&&f.push(`${d} pools with fees of 5% or more were left out. To see them, pass includeHighFeePools: true.`),n.sort((l,P)=>BigInt(P.liquidity)>BigInt(l.liquidity)?1:BigInt(P.liquidity)<BigInt(l.liquidity)?-1:0),n.length>i&&f.push(`Showing the ${i} deepest of ${n.length} pools found; raise limit (max ${q}) to see more.`),n=n.slice(0,i);let u=n.filter(l=>l.initialized&&BigInt(l.liquidity)>0n).length;return n.length===0&&d===0&&f.push("No pool exists for this pair. Create one with uniswap_create_pool, or create it and add the first liquidity together with uniswap_add plus initialPrice."),{pools:n,notes:f,summary:`Found ${n.length} Uniswap pool(s), ${u} with active liquidity. price is token1 per 1 token0.`}}function ze(o){return{tools:[{name:"uniswap_pools",inputSchema:{type:"object",description:"Read-only pool discovery on Robinhood Chain (4663): every Uniswap v3 and v4 pool for a token pair with fee, tick spacing, hook, liquidity and price, or one v4 pool by poolId. No tokens given: the measured pools.",properties:{version:{type:"string",enum:["v3","v4"],description:"Limit to one version; omit to search both."},tokenA:{type:"string",description:'Token address, or "eth" for native ETH (searches v3 WETH and v4 native/WETH pools).'},tokenB:{type:"string",description:"Second token of the pair. Required for v3 lookups."},poolId:{type:"string",description:"32-byte v4 poolId to inspect."},includeHighFeePools:{description:"Include pools above the usual fee threshold in discovery.",type:"boolean"},limit:{description:"Maximum number of results to return, within the stated bounds.",type:"integer",minimum:1,maximum:q,default:me}}},execute:async r=>Re(o,r)}]}}export{Re as a,ze as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as K}from"./MSRCJ2BS.js";import{b as Y,d as Z,e as Q}from"./V74F6IDY.js";import{a as J}from"./JDSSYT6R.js";import{a as W,c as x,d as B,h as F,i as E,j as L}from"./VVJO6OYK.js";import{a as P}from"./IBL6TL2Q.js";import{ea as z,ja as H}from"./HHYE42JG.js";import{k as j}from"./UVAR6BHU.js";import{j as M}from"./QLFPAN6S.js";import{a as $}from"./IOYRL6AY.js";import{e as O,h as U}from"./NWNYJ26T.js";import{a as v}from"./XSD5NL7J.js";import{erc20Abi as X,formatUnits as G,parseAbiItem as q}from"viem";var ee=q("event CreateVaultV2(address indexed caller,address indexed owner,bytes32 salt,address indexed vault)"),te=r=>H("unverified",{...r?{vaultLabel:r}:{}});function ae(r){if(!O(r)||!O(r.chain)||r.chain.id!==4663||!Array.isArray(r.contracts)||!Array.isArray(r.markets)||r.contracts.length>1e3||r.markets.length>1e3)throw new v("Borro vault discovery returned an unreadable candidate list.");let i=[...r.contracts.filter(O).filter(e=>e.name==="BorroUSDGVault").map(e=>e.address),...r.markets.filter(O).map(e=>O(e.vault)?e.vault.address:void 0)];return[...new Set(i.map(x))]}function se(r){return r.sort((i,e)=>+(e.symbol==="USDG")-+(i.symbol==="USDG")||0)}var re=6e4;function oe(r,i={}){let e=i.resolveAllowedAsset??E(i.officialStockTokens),g=L({resolveAllowedAsset:e}),S=new WeakMap,A=s=>{let t=S.get(s);return t||(t={},S.set(s,t)),t},m=s=>{if(s?.aborted)throw new v("Borro read was cancelled.")};async function h(s,t,u){let c=A(s);if(c.inventory&&Date.now()<c.inventory.expiresAt)return structuredClone(c.inventory);let a={items:[],sources:[],incomplete:!1,warnings:[],expiresAt:0},o=new Map;m(u);try{for(let l of ae(await Y(r.http,"contracts",u)))o.set(l.toLowerCase(),{vault:l});a.sources.push("contracts.json")}catch{a.incomplete=!0,a.warnings.push("Borro candidate discovery is unavailable; this inventory may be incomplete.")}if(i.factoryEvents!==!1)try{let l=new Map;for(let p=BigInt(P.factory.fromBlock);p<=t;p+=10000000n){m(u);let k=p+9999999n<t?p+9999999n:t,y=await s.getLogs({address:P.factory.address,event:ee,fromBlock:p,toBlock:k,strict:!0});if(y.length>1e3)throw new v("Borro factory inventory exceeds the read limit.");for(let d of y){let n=x(d.args.vault);if(d.removed||!U(d.address,P.factory.address)||d.blockNumber===null||d.blockNumber<p||d.blockNumber>k||l.has(n.toLowerCase()))throw new v("Borro factory events are unreadable.");l.set(n.toLowerCase(),{vault:n,block:d.blockNumber})}if(l.size>1e3)throw new v("Borro factory inventory exceeds the read limit.")}for(let[p,k]of l)o.set(p,k);a.sources.push("factory-events")}catch{a.incomplete=!0,a.warnings.push("Borro factory discovery is unavailable; vault creation dates or inventory may be incomplete.")}return m(u),a.items=[...o.values()],a.expiresAt=Date.now()+re,a.incomplete||(c.inventory=structuredClone(a)),a}let w=async(s,t={})=>{m(t.signal);let u=await F(s),c=A(s);if(!t.wallet&&c.verified&&Date.now()<c.verified.expiresAt)return structuredClone(c.verified.result);let a=await h(s,u,t.signal),o={vaults:[],refused:[],sources:a.sources,incomplete:a.incomplete,warnings:a.warnings,measuredAtBlock:u.toString()},l=a.items;if(t.heldOnly){if(!t.wallet)throw new v("Provide a wallet for Borro holdings.");m(t.signal);let y=l.length?await s.multicall({allowFailure:!1,batchSize:0,contracts:l.map(({vault:d})=>({address:d,abi:X,functionName:"balanceOf",args:[t.wallet]})),blockNumber:u}):[];if(!Array.isArray(y)||y.length!==l.length)throw new v("Borro share balances could not be read completely. Please try again.");o.shareBalances=l.map((d,n)=>({vault:d.vault,amount:B(y[n]).toString()})),l=l.filter((d,n)=>BigInt(o.shareBalances[n].amount)>0n)}m(t.signal);let p=e;if(l.length&&!i.resolveAllowedAsset&&!i.officialStockTokens)try{p=E(await M({http:r.http,allowAmbiguousSymbols:!0}))}catch{o.incomplete=!0,o.warnings.push("Official stock identities could not be checked; held-share exits remain available by vault address.")}let k=L({resolveAllowedAsset:p});for(let y=0;y<l.length;y+=4){m(t.signal);let d=await Promise.all(l.slice(y,y+4).map(async n=>{try{let b=await k(s,n.vault,t.wallet?"withdraw":"deposit",{blockNumber:u,...t.wallet?{wallet:t.wallet}:{}});if(n.block!==void 0)try{let V=await s.getBlock({blockNumber:n.block}),f=B(V.timestamp);f<=8640000000000n&&V.number===n.block&&(b.deployedAt=new Date(Number(f)*1e3).toISOString())}catch{}return{facts:b}}catch{return{rejected:{vault:n.vault,reason:te(n.vault)}}}}));for(let n of d)n.facts&&o.vaults.push(n.facts),n.rejected&&o.refused.push(n.rejected)}return m(t.signal),se(o.vaults),!t.wallet&&!o.incomplete&&(c.verified={result:structuredClone(o),expiresAt:a.expiresAt}),o},T=async(s,t={})=>{m(t.signal);let u=A(s),c;if(t.wallet||t.signal)c=await w(s,t);else{let a=u.pending??w(s);u.pending=a;try{c=structuredClone(await a)}finally{u.pending===a&&(u.pending=void 0)}}return m(t.signal),{...c,vaults:c.vaults.filter(a=>!t.asset||a.symbol.toUpperCase()===t.asset.toUpperCase())}};return{discoverVaults:T,verifyVault:g,resolveVault:async(s,t,u,c)=>{if(t.asset!==void 0&&!/^[A-Za-z0-9.$_-]{1,32}$/.test(t.asset))throw new v("Provide an official asset symbol.");if(t.vault){let y=await g(s,t.vault,u,{wallet:c});if(t.asset&&y.symbol.toUpperCase()!==t.asset.toUpperCase())throw new v("The asset symbol does not match the verified vault.");return y}if(!t.asset)throw new v("Provide an asset symbol or the vault address.");let a=await T(s,{asset:t.asset,...u==="withdraw"?{wallet:c}:{}});if(a.incomplete)throw new v("Borro discovery is incomplete. Provide the vault address for on-chain verification.");let o=a.vaults.length===1?a.vaults[0]:void 0;if(!o&&t.asset.toUpperCase()==="USDG"&&a.vaults.length>1){let y=await F(s);try{if(a.vaults.some(f=>!U(f.asset,P.assetRule.usdg.address)||f.assetDecimals!==6))throw new v("Unreadable USDG identity.");let d=a.vaults.filter(f=>f.setup.drift.length===0&&f.assetAllowed),n=await Promise.all(d.map(async f=>({facts:f,total:B(await s.readContract({address:f.vault,abi:W,functionName:"totalAssets",blockNumber:y}))})));n.sort((f,_)=>f.total>_.total?-1:f.total<_.total?1:0);let[b,V]=n;b&&b.total>=100000000n&&(!V||b.total>=V.total*10n)&&(o=b.facts)}catch{}}if(!o)throw new v(a.vaults.length?"More than one Borro vault uses this symbol. Provide the vault address.":"No verified Borro vault matched this asset. Provide the vault address to check it on chain.");let l=e;if(!i.resolveAllowedAsset&&!i.officialStockTokens&&!U(o.asset,P.assetRule.usdg.address))try{l=E(await M({http:r.http,allowAmbiguousSymbols:!0}))}catch{}let k=await L({resolveAllowedAsset:l})(s,o.vault,u,{wallet:c});if(k.symbol.toUpperCase()!==t.asset.toUpperCase())throw new v("The asset symbol does not match the verified vault.");return{...k,...o.deployedAt?{deployedAt:o.deployedAt}:{}}}}}var N=(r,i)=>({token:r,amount:i.toString()});async function ne(r,i,e){try{let[g,S]=await Promise.all([i.getGasPrice(),j("ETH",{client:i,http:r.http,chainId:4663,blockNumber:e})]);if(!/^\d+$/.test(S.usdE18)||BigInt(S.usdE18)<=0n||B(g)===0n)return{};let A=w=>Number(G(w*g*BigInt(S.usdE18)/10n**18n,18)),m=A($*2n),h=A($);return[m,h].every(w=>Number.isFinite(w)&&w>0)?{gasInUsd:m,gasOutUsd:h}:{}}catch{return{}}}async function ie(r,i,e,g,S=new Map,A){let m={vault:e.vault,verified:!0,symbol:e.symbol,vaultSymbol:e.vaultSymbol,setup:e.setup,measuredAtBlock:(A??BigInt(e.measuredAtBlock)).toString(),verifiedAtBlock:e.measuredAtBlock,...e.owner?{owner:e.owner}:{},...e.curator?{curator:e.curator}:{},...e.deployedAt?{deployedAt:e.deployedAt}:{}};try{let h=A??BigInt(e.measuredAtBlock),w={address:e.asset,symbol:e.symbol,decimals:e.assetDecimals,chainId:4663},T={address:e.vault,symbol:e.vaultSymbol,decimals:18,chainId:4663},R=(D,C,I=[])=>i.readContract({address:D,abi:[...W,...X],functionName:C,args:I,blockNumber:h}),[s,t,u,c,a,o,l]=await Promise.all([R(e.vault,"totalAssets"),R(e.vault,"performanceFee"),R(e.asset,"balanceOf",[g]),R(e.vault,"balanceOf",[g]),J(i,e,h),ne(r,i,h),i.getBlock({blockNumber:h})]),p=B(c),k=B(t);if(k>10n**18n)throw new v("Borro performance fee is unreadable.");let y=B(await R(e.vault,"convertToAssets",[p])),d={};if(e.owner)try{let[D,C]=await Promise.all([R(e.owner,"getThreshold"),R(e.owner,"getOwners")]),I=B(D);if(!Array.isArray(C)||C.length>1e3||new Set(C.map(x)).size!==C.length||I<1n||I>BigInt(C.length))throw new v("Unreadable group wallet.");d={safeThreshold:Number(I),safeOwners:C.length}}catch{}let n;if(U(e.asset,P.assetRule.usdg.address))try{let D=(await K(i,h)).rateBasePct;Number.isFinite(D)&&D>=0&&(n=D)}catch{}let b=Q(S,w,e.vault);if(l.number!==h)throw new v("Borro block timestamp could not be verified.");let V=Number(B(l.timestamp)),f=e.deployedAt?Date.parse(e.deployedAt)/1e3:void 0,_=z({symbol:e.symbol,kind:U(e.asset,P.assetRule.usdg.address)?"usdg":"stock",nowSeconds:V,...f===void 0?{}:{deployedAtSeconds:f},threshold:d.safeThreshold,owners:d.safeOwners,borroRatePct:b.apr===void 0?void 0:b.apr*100,feePct:Number(G(k,16)),layerbankRatePct:n,totalAmount:G(B(s),e.assetDecimals),readyAmount:a.readyBase===void 0?void 0:G(a.readyBase,e.assetDecimals),gasInUsd:o.gasInUsd===void 0?void 0:`up to $${o.gasInUsd.toFixed(4)}`,gasOutUsd:o.gasOutUsd===void 0?void 0:`up to $${o.gasOutUsd.toFixed(4)}`});return{...m,asset:w,shares:T,totalAssets:N(w,B(s)),performanceFeeWad:k.toString(),walletAssetBalance:N(w,B(u)),walletShares:N(T,p),walletShareValue:N(w,y),liquidityKind:a.kind,...a.readyBase===void 0?{}:{cashOnHand:N(w,a.readyBase)},...d,...o,...n===void 0?{}:{layerbankRateBasePct:n},...b.apr===void 0?{}:{apr:b.apr,rateSource:b.source},...b.readyToWithdraw?{vendorReadyToWithdraw:b.readyToWithdraw}:{},...f!==void 0&&f<=V?{ageSeconds:String(Math.floor(V-f))}:{},risk:{title:"Lending on Borro",text:_,source:"Oak"}}}catch{return{...m,error:"This Borro vault can't be read right now. Please try again."}}}async function ge(r,i,e={},g={},S){if(e.vault&&!g.resolveAllowedAsset&&!g.officialStockTokens)try{g={...g,officialStockTokens:await M({http:r.http,allowAmbiguousSymbols:!0})}}catch{}let A=r.clientFor(4663),m=S??oe(r,g);x(i);let h;if(e.vault){let s=await m.resolveVault(A,e,"deposit",i);h={vaults:[s],refused:[],sources:[],incomplete:!1,warnings:[],measuredAtBlock:s.measuredAtBlock}}else h=await m.discoverVaults(A,e.asset?{asset:e.asset}:{});let[w,T]=await Promise.all([Z(r.http),F(A)]),R=[];for(let s=0;s<h.vaults.length;s+=4)R.push(...await Promise.all(h.vaults.slice(s,s+4).map(t=>ie(r,A,t,i,w,T))));return{...h,vaults:R}}export{ae as a,se as b,oe as c,N as d,ie as e,ge as f};
|
|
1
|
+
import{a as K}from"./MSRCJ2BS.js";import{b as Y,d as Z,e as Q}from"./V74F6IDY.js";import{a as J}from"./JDSSYT6R.js";import{a as W,c as x,d as B,h as F,i as E,j as L}from"./VVJO6OYK.js";import{a as P}from"./IBL6TL2Q.js";import{ea as z,ja as H}from"./HHYE42JG.js";import{m as j}from"./NV6FDIYT.js";import{j as M}from"./W7QNSNOH.js";import{a as $}from"./IOYRL6AY.js";import{e as O,h as U}from"./NWNYJ26T.js";import{a as v}from"./XSD5NL7J.js";import{erc20Abi as X,formatUnits as G,parseAbiItem as q}from"viem";var ee=q("event CreateVaultV2(address indexed caller,address indexed owner,bytes32 salt,address indexed vault)"),te=r=>H("unverified",{...r?{vaultLabel:r}:{}});function ae(r){if(!O(r)||!O(r.chain)||r.chain.id!==4663||!Array.isArray(r.contracts)||!Array.isArray(r.markets)||r.contracts.length>1e3||r.markets.length>1e3)throw new v("Borro vault discovery returned an unreadable candidate list.");let i=[...r.contracts.filter(O).filter(e=>e.name==="BorroUSDGVault").map(e=>e.address),...r.markets.filter(O).map(e=>O(e.vault)?e.vault.address:void 0)];return[...new Set(i.map(x))]}function se(r){return r.sort((i,e)=>+(e.symbol==="USDG")-+(i.symbol==="USDG")||0)}var re=6e4;function oe(r,i={}){let e=i.resolveAllowedAsset??E(i.officialStockTokens),g=L({resolveAllowedAsset:e}),S=new WeakMap,A=s=>{let t=S.get(s);return t||(t={},S.set(s,t)),t},m=s=>{if(s?.aborted)throw new v("Borro read was cancelled.")};async function h(s,t,u){let c=A(s);if(c.inventory&&Date.now()<c.inventory.expiresAt)return structuredClone(c.inventory);let a={items:[],sources:[],incomplete:!1,warnings:[],expiresAt:0},o=new Map;m(u);try{for(let l of ae(await Y(r.http,"contracts",u)))o.set(l.toLowerCase(),{vault:l});a.sources.push("contracts.json")}catch{a.incomplete=!0,a.warnings.push("Borro candidate discovery is unavailable; this inventory may be incomplete.")}if(i.factoryEvents!==!1)try{let l=new Map;for(let p=BigInt(P.factory.fromBlock);p<=t;p+=10000000n){m(u);let k=p+9999999n<t?p+9999999n:t,y=await s.getLogs({address:P.factory.address,event:ee,fromBlock:p,toBlock:k,strict:!0});if(y.length>1e3)throw new v("Borro factory inventory exceeds the read limit.");for(let d of y){let n=x(d.args.vault);if(d.removed||!U(d.address,P.factory.address)||d.blockNumber===null||d.blockNumber<p||d.blockNumber>k||l.has(n.toLowerCase()))throw new v("Borro factory events are unreadable.");l.set(n.toLowerCase(),{vault:n,block:d.blockNumber})}if(l.size>1e3)throw new v("Borro factory inventory exceeds the read limit.")}for(let[p,k]of l)o.set(p,k);a.sources.push("factory-events")}catch{a.incomplete=!0,a.warnings.push("Borro factory discovery is unavailable; vault creation dates or inventory may be incomplete.")}return m(u),a.items=[...o.values()],a.expiresAt=Date.now()+re,a.incomplete||(c.inventory=structuredClone(a)),a}let w=async(s,t={})=>{m(t.signal);let u=await F(s),c=A(s);if(!t.wallet&&c.verified&&Date.now()<c.verified.expiresAt)return structuredClone(c.verified.result);let a=await h(s,u,t.signal),o={vaults:[],refused:[],sources:a.sources,incomplete:a.incomplete,warnings:a.warnings,measuredAtBlock:u.toString()},l=a.items;if(t.heldOnly){if(!t.wallet)throw new v("Provide a wallet for Borro holdings.");m(t.signal);let y=l.length?await s.multicall({allowFailure:!1,batchSize:0,contracts:l.map(({vault:d})=>({address:d,abi:X,functionName:"balanceOf",args:[t.wallet]})),blockNumber:u}):[];if(!Array.isArray(y)||y.length!==l.length)throw new v("Borro share balances could not be read completely. Please try again.");o.shareBalances=l.map((d,n)=>({vault:d.vault,amount:B(y[n]).toString()})),l=l.filter((d,n)=>BigInt(o.shareBalances[n].amount)>0n)}m(t.signal);let p=e;if(l.length&&!i.resolveAllowedAsset&&!i.officialStockTokens)try{p=E(await M({http:r.http,allowAmbiguousSymbols:!0}))}catch{o.incomplete=!0,o.warnings.push("Official stock identities could not be checked; held-share exits remain available by vault address.")}let k=L({resolveAllowedAsset:p});for(let y=0;y<l.length;y+=4){m(t.signal);let d=await Promise.all(l.slice(y,y+4).map(async n=>{try{let b=await k(s,n.vault,t.wallet?"withdraw":"deposit",{blockNumber:u,...t.wallet?{wallet:t.wallet}:{}});if(n.block!==void 0)try{let V=await s.getBlock({blockNumber:n.block}),f=B(V.timestamp);f<=8640000000000n&&V.number===n.block&&(b.deployedAt=new Date(Number(f)*1e3).toISOString())}catch{}return{facts:b}}catch{return{rejected:{vault:n.vault,reason:te(n.vault)}}}}));for(let n of d)n.facts&&o.vaults.push(n.facts),n.rejected&&o.refused.push(n.rejected)}return m(t.signal),se(o.vaults),!t.wallet&&!o.incomplete&&(c.verified={result:structuredClone(o),expiresAt:a.expiresAt}),o},T=async(s,t={})=>{m(t.signal);let u=A(s),c;if(t.wallet||t.signal)c=await w(s,t);else{let a=u.pending??w(s);u.pending=a;try{c=structuredClone(await a)}finally{u.pending===a&&(u.pending=void 0)}}return m(t.signal),{...c,vaults:c.vaults.filter(a=>!t.asset||a.symbol.toUpperCase()===t.asset.toUpperCase())}};return{discoverVaults:T,verifyVault:g,resolveVault:async(s,t,u,c)=>{if(t.asset!==void 0&&!/^[A-Za-z0-9.$_-]{1,32}$/.test(t.asset))throw new v("Provide an official asset symbol.");if(t.vault){let y=await g(s,t.vault,u,{wallet:c});if(t.asset&&y.symbol.toUpperCase()!==t.asset.toUpperCase())throw new v("The asset symbol does not match the verified vault.");return y}if(!t.asset)throw new v("Provide an asset symbol or the vault address.");let a=await T(s,{asset:t.asset,...u==="withdraw"?{wallet:c}:{}});if(a.incomplete)throw new v("Borro discovery is incomplete. Provide the vault address for on-chain verification.");let o=a.vaults.length===1?a.vaults[0]:void 0;if(!o&&t.asset.toUpperCase()==="USDG"&&a.vaults.length>1){let y=await F(s);try{if(a.vaults.some(f=>!U(f.asset,P.assetRule.usdg.address)||f.assetDecimals!==6))throw new v("Unreadable USDG identity.");let d=a.vaults.filter(f=>f.setup.drift.length===0&&f.assetAllowed),n=await Promise.all(d.map(async f=>({facts:f,total:B(await s.readContract({address:f.vault,abi:W,functionName:"totalAssets",blockNumber:y}))})));n.sort((f,_)=>f.total>_.total?-1:f.total<_.total?1:0);let[b,V]=n;b&&b.total>=100000000n&&(!V||b.total>=V.total*10n)&&(o=b.facts)}catch{}}if(!o)throw new v(a.vaults.length?"More than one Borro vault uses this symbol. Provide the vault address.":"No verified Borro vault matched this asset. Provide the vault address to check it on chain.");let l=e;if(!i.resolveAllowedAsset&&!i.officialStockTokens&&!U(o.asset,P.assetRule.usdg.address))try{l=E(await M({http:r.http,allowAmbiguousSymbols:!0}))}catch{}let k=await L({resolveAllowedAsset:l})(s,o.vault,u,{wallet:c});if(k.symbol.toUpperCase()!==t.asset.toUpperCase())throw new v("The asset symbol does not match the verified vault.");return{...k,...o.deployedAt?{deployedAt:o.deployedAt}:{}}}}}var N=(r,i)=>({token:r,amount:i.toString()});async function ne(r,i,e){try{let[g,S]=await Promise.all([i.getGasPrice(),j("ETH",{client:i,http:r.http,chainId:4663,blockNumber:e})]);if(!/^\d+$/.test(S.usdE18)||BigInt(S.usdE18)<=0n||B(g)===0n)return{};let A=w=>Number(G(w*g*BigInt(S.usdE18)/10n**18n,18)),m=A($*2n),h=A($);return[m,h].every(w=>Number.isFinite(w)&&w>0)?{gasInUsd:m,gasOutUsd:h}:{}}catch{return{}}}async function ie(r,i,e,g,S=new Map,A){let m={vault:e.vault,verified:!0,symbol:e.symbol,vaultSymbol:e.vaultSymbol,setup:e.setup,measuredAtBlock:(A??BigInt(e.measuredAtBlock)).toString(),verifiedAtBlock:e.measuredAtBlock,...e.owner?{owner:e.owner}:{},...e.curator?{curator:e.curator}:{},...e.deployedAt?{deployedAt:e.deployedAt}:{}};try{let h=A??BigInt(e.measuredAtBlock),w={address:e.asset,symbol:e.symbol,decimals:e.assetDecimals,chainId:4663},T={address:e.vault,symbol:e.vaultSymbol,decimals:18,chainId:4663},R=(D,C,I=[])=>i.readContract({address:D,abi:[...W,...X],functionName:C,args:I,blockNumber:h}),[s,t,u,c,a,o,l]=await Promise.all([R(e.vault,"totalAssets"),R(e.vault,"performanceFee"),R(e.asset,"balanceOf",[g]),R(e.vault,"balanceOf",[g]),J(i,e,h),ne(r,i,h),i.getBlock({blockNumber:h})]),p=B(c),k=B(t);if(k>10n**18n)throw new v("Borro performance fee is unreadable.");let y=B(await R(e.vault,"convertToAssets",[p])),d={};if(e.owner)try{let[D,C]=await Promise.all([R(e.owner,"getThreshold"),R(e.owner,"getOwners")]),I=B(D);if(!Array.isArray(C)||C.length>1e3||new Set(C.map(x)).size!==C.length||I<1n||I>BigInt(C.length))throw new v("Unreadable group wallet.");d={safeThreshold:Number(I),safeOwners:C.length}}catch{}let n;if(U(e.asset,P.assetRule.usdg.address))try{let D=(await K(i,h)).rateBasePct;Number.isFinite(D)&&D>=0&&(n=D)}catch{}let b=Q(S,w,e.vault);if(l.number!==h)throw new v("Borro block timestamp could not be verified.");let V=Number(B(l.timestamp)),f=e.deployedAt?Date.parse(e.deployedAt)/1e3:void 0,_=z({symbol:e.symbol,kind:U(e.asset,P.assetRule.usdg.address)?"usdg":"stock",nowSeconds:V,...f===void 0?{}:{deployedAtSeconds:f},threshold:d.safeThreshold,owners:d.safeOwners,borroRatePct:b.apr===void 0?void 0:b.apr*100,feePct:Number(G(k,16)),layerbankRatePct:n,totalAmount:G(B(s),e.assetDecimals),readyAmount:a.readyBase===void 0?void 0:G(a.readyBase,e.assetDecimals),gasInUsd:o.gasInUsd===void 0?void 0:`up to $${o.gasInUsd.toFixed(4)}`,gasOutUsd:o.gasOutUsd===void 0?void 0:`up to $${o.gasOutUsd.toFixed(4)}`});return{...m,asset:w,shares:T,totalAssets:N(w,B(s)),performanceFeeWad:k.toString(),walletAssetBalance:N(w,B(u)),walletShares:N(T,p),walletShareValue:N(w,y),liquidityKind:a.kind,...a.readyBase===void 0?{}:{cashOnHand:N(w,a.readyBase)},...d,...o,...n===void 0?{}:{layerbankRateBasePct:n},...b.apr===void 0?{}:{apr:b.apr,rateSource:b.source},...b.readyToWithdraw?{vendorReadyToWithdraw:b.readyToWithdraw}:{},...f!==void 0&&f<=V?{ageSeconds:String(Math.floor(V-f))}:{},risk:{title:"Lending on Borro",text:_,source:"Oak"}}}catch{return{...m,error:"This Borro vault can't be read right now. Please try again."}}}async function ge(r,i,e={},g={},S){if(e.vault&&!g.resolveAllowedAsset&&!g.officialStockTokens)try{g={...g,officialStockTokens:await M({http:r.http,allowAmbiguousSymbols:!0})}}catch{}let A=r.clientFor(4663),m=S??oe(r,g);x(i);let h;if(e.vault){let s=await m.resolveVault(A,e,"deposit",i);h={vaults:[s],refused:[],sources:[],incomplete:!1,warnings:[],measuredAtBlock:s.measuredAtBlock}}else h=await m.discoverVaults(A,e.asset?{asset:e.asset}:{});let[w,T]=await Promise.all([Z(r.http),F(A)]),R=[];for(let s=0;s<h.vaults.length;s+=4)R.push(...await Promise.all(h.vaults.slice(s,s+4).map(t=>ie(r,A,t,i,w,T))));return{...h,vaults:R}}export{ae as a,se as b,oe as c,N as d,ie as e,ge as f};
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as N,f as q,j as $,k as K}from"./UVAR6BHU.js";import{a as M}from"./Y2QADJOB.js";import{b as B,j as I}from"./TI727O2H.js";import{formatUnits as Z,getAddress as z,parseAbi as H}from"viem";var l={chainId:4663,usdg:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",v4:{poolManager:"0x8366a39CC670B4001A1121B8F6A443A643e40951",swapper:"0x7Cd4E04E433E69e588728c86A3832753B5F846d4",quoter:"0x8dc178efb8111bb0973dd9d722ebeff267c98f94",stateView:"0xf3334192d15450cdd385c8b70e03f9a6bd9e673b"},v3:{router:"0xCaf681a66D020601342297493863E78C959E5cb2",quoter:"0x33e885eD0Ec9bF04EcfB19341582aADCb4c8A9E7",factory:"0x1f7d7550B1b028f7571E69A784071F0205FD2EfA"},tokens:[{symbol:"AAPL",token:"0xaF3D76f1834A1d425780943C99Ea8A608f8a93f9",pools:[{v:3,fee:500,pool:"0xAae0d815EE56e4092a5E5C2911E676Fea50B2d6D"},{v:4,fee:3e3,tickSpacing:60,id:"0xc748f4671a867db48b552f6b7650bf3255e05f80f00e3f7aad1b17ccb7898fdb"},{v:3,fee:3e3,pool:"0x783C9bbB765047CFdD2b84b92b2Ca9F11D34b7Ed"}]},{symbol:"AMD",token:"0x86923f96303D656E4aa86D9d42D1e57ad2023fdC",pools:[{v:3,fee:3e3,pool:"0x48D284A2A4d3DC1b3Da08231Fe44317e7e7Aa51f"}]},{symbol:"AMZN",token:"0x12f190a9F9d7D37a250758b26824B97CE941bF54",pools:[{v:3,fee:3e3,pool:"0x8AC92DA74AB5F3b1d024Dc1943Ad7e15Dc4179Ef"},{v:4,fee:2400,tickSpacing:24,id:"0xefc94885c96b02696b9b45de43eeeb8ac53c0199cab42b4daae4911b96fb8825"}]},{symbol:"ASML",token:"0x47F93d52cBeC7C6D2CfC080e154002370a60dAEA",pools:[{v:3,fee:1e4,pool:"0xedb22516B14Eb2d1C86927Db373B0E8bF70F5cD1"}]},{symbol:"BABA",token:"0xad25Ac6C84D497db898fa1E8387bf6Af3532a1c4",pools:[{v:4,fee:1e3,tickSpacing:10,id:"0x1791fc651cc794a282e5dbcb56d0b2b38eff8754b677c8876e86901521ecc439"},{v:3,fee:3e3,pool:"0xa57ab582b310dd6f9e934EA1EEEa152741545E6A"}]},{symbol:"COIN",token:"0x6330D8C3178a418788dF01a47479c0ce7CCF450b",pools:[{v:4,fee:2500,tickSpacing:25,id:"0xe2e1a0e32205e854525e0fb1d3667a53bd3b4919f032b9bcd2a038b6b6dac314"},{v:4,fee:1e4,tickSpacing:200,id:"0x007a13fa152f6dc383cad20a8eaab4e1e2538b606936eae2a424f8aa47d6db31"}]},{symbol:"CRCL",token:"0xdF0992E440dD0be65BD8439b609d6D4366bf1CB5",pools:[{v:3,fee:3e3,pool:"0x654E4143e82a5824445Ade0824351C2A9ACD95a8"},{v:4,fee:3e3,tickSpacing:30,id:"0x628c98ab436ee34a6a7decd606242890582591bdf7c9a35d90e0d08021c31ea0"},{v:4,fee:1500,tickSpacing:15,id:"0x5177eac8c2176468bbf15e44081e151d35c2e7d068e96d3db94f496a4dc944b2"}]},{symbol:"CRWV",token:"0x5f10A1C971B69e47e059e1dC91901B59b3fB49C3",pools:[{v:4,fee:9e3,tickSpacing:90,id:"0x237014478f7ef98afbe7412ac35b6a3f96b8fb111de48b7c4dbf49dba4bd9c4b"}]},{symbol:"DELL",token:"0x941AE714EC6D8130c7B75d67160Ca08f1e7d11Dd",pools:[{v:3,fee:1e4,pool:"0xc30c89cB7815A1488b7998D15eEC73961707Fc5a"}]},{symbol:"GME",token:"0x1b0E319c6A659F002271B69dB8A7df2F911c153E",pools:[{v:3,fee:500,pool:"0xE2b46c905E12Ab8E2f864e4821a4325884C1B126"}]},{symbol:"GOOGL",token:"0x2e0847E8910a9732eB3fb1bb4b70a580ADAD4FE3",pools:[{v:3,fee:500,pool:"0x34D0dC122CF9A8Eb296fC5e0D3A233625D7d19b7"},{v:4,fee:300,tickSpacing:3,id:"0x43fe16b75cabbf38f5b185d16142b02d1d9200d8f1ba17cb6cf899f562c6197f"},{v:4,fee:3e3,tickSpacing:60,id:"0xd4ecb79fdc521d7725d22b33ed43cb4e47aa96bfad76aa29577e3151f723ac5e"}]},{symbol:"INTC",token:"0xc72b96e0E48ecd4DC75E1e45396e26300BC39681",pools:[{v:3,fee:3e3,pool:"0x2e5a92f5013a64661A49312111be2e8aBd33F56a"}]},{symbol:"META",token:"0xc0D6457C16Cc70d6790Dd43521C899C87ce02f35",pools:[{v:4,fee:310,tickSpacing:3,id:"0xc58bb68060bcb7b3ea0f6d4a4afef1e57f628722e808db12afb6d1733552872f"},{v:3,fee:3e3,pool:"0x107a7Cb40d8665360ba10E59471Af06150A50922"},{v:4,fee:3e3,tickSpacing:60,id:"0x5875d407a42965b0e768c8925cea290e06fa50603ef34fc99eb92a1050e6ae36"}]},{symbol:"MSFT",token:"0xe93237C50D904957Cf27E7B1133b510C669c2e74",pools:[{v:3,fee:3e3,pool:"0xeb60bCD1D920ad6E102690CCFC6fB488899E1510"},{v:4,fee:3e3,tickSpacing:60,id:"0x9194a557b6a6bb2236b49ea7e2bbccec5d3eeb705aef00903be4b3de1d949579"}]},{symbol:"MSTR",token:"0xec262a75e413fAfD0dF80480274532C79D42da09",pools:[{v:4,fee:2500,tickSpacing:25,id:"0x319bac87e616a89e241c10aeb8afd4892a852cdd8b373cd9765ecddc40b87cfe"},{v:4,fee:2400,tickSpacing:24,id:"0xc105b8300ff65d750a0e4e63c7a879e20504069b770713464a5315e797735326"}]},{symbol:"MU",token:"0xfF080c8ce2E5feadaCa0Da81314Ae59D232d4afD",pools:[{v:3,fee:3e3,pool:"0xd057B1Bc54917855BBee58eAd58647f47caB35E5"}]},{symbol:"NBIS",token:"0x9D9c6684F596F66a64C030B93A886D51Fd4D7931",pools:[{v:4,fee:9900,tickSpacing:99,id:"0x7c2f9ce1214ba9baf56d1b6a1fc640c1b63e9a711172c0c7d10e5a9c4a3d4f0c"}]},{symbol:"NVDA",token:"0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC",pools:[{v:3,fee:500,pool:"0xd4EB21209C4D6093f80B5b84f5C45cc093EA14a3"},{v:4,fee:100,tickSpacing:1,id:"0x6444a8e0b267406a15db74ca00c4a24bdfa81ed3180f5b6d0851f8ed6f4f29c5"},{v:4,fee:3e3,tickSpacing:60,id:"0x3bb34a44f1b2b5f32c034c38a53065a521a47b199700fa9bd19d60985ff24bf1"}]},{symbol:"ORCL",token:"0xb0992820E760d836549ba69BC7598b4af75dEE03",pools:[{v:4,fee:1e4,tickSpacing:200,id:"0xc2ce4784e1e72cf0221b51b30c8aaadf6c0b12863cf03ab3687854fb7b1d850a"}]},{symbol:"PLTR",token:"0x894E1EC2D74FFE5AEF8Dc8A9e84686acCB964F2A",pools:[{v:4,fee:1500,tickSpacing:15,id:"0xc59eaeda6d1a6f031bc7e1d039772f2d675e7b4de2c8668610f4471bd60b3802"},{v:3,fee:3e3,pool:"0x851680416A4f4E1c463d45171d61ACDdBc8554c0"}]},{symbol:"QQQ",token:"0xD5f3879160bc7c32ebb4dC785F8a4F505888de68",pools:[{v:3,fee:500,pool:"0xD60A5d14dB690B7Afad71F76B108071D7175597d"}]},{symbol:"SGOV",token:"0x92FD66527192E3e61d4DDd13322Aa222DE86F9B5",pools:[{v:3,fee:500,pool:"0x6Ba50150B17Ffd0972915Aaf04fFd5E8f4Fa49b4"},{v:3,fee:3e3,pool:"0xfAb520051f96F4D2a32c22B6a3dD7fFfdf231bFe"}]},{symbol:"SLV",token:"0x411eFb0E7f985935DAec3D4C3ebaEa0d0AD7D89f",pools:[{v:3,fee:3e3,pool:"0x8cB787e6c315D464775289BaD00FDD67d53Ecb3D"},{v:3,fee:1e4,pool:"0x0Fa7BC480885DCf58Ad2ef63eC7289cF2481D51c"}]},{symbol:"SNDK",token:"0xB90A19fF0Af67f7779afF50A882A9CfF42446400",pools:[{v:4,fee:1e4,tickSpacing:200,id:"0x2707cb88a6a40fa0f948f58958051ba097d6f6a3cf7f87929bd68ccc5becea24"}]},{symbol:"SPCX",token:"0x4a0E65A3EcceC6dBe60AE065F2e7bb85Fae35eEa",pools:[{v:3,fee:500,pool:"0xc61284332117c3FB23A2A56cceFFD07F7aF60029"},{v:3,fee:3e3,pool:"0xEb07d9587eFD1778dFb9c385Ec43EF6d5F9fE401"}]},{symbol:"SPY",token:"0x117cc2133c37B721F49dE2A7a74833232B3B4C0C",pools:[{v:4,fee:100,tickSpacing:1,id:"0xe1ae6a4c6ccc9f037389a8d50a4f577bde1a9fe01d85d88ecbbd39955ce53288"},{v:3,fee:500,pool:"0xa7Bb1AC63BBaB0C44316E6c8C455213441689167"},{v:4,fee:500,tickSpacing:5,id:"0xe5923c8a8be481ec89a2ca784a2bbfa4235de6d88f92260fd66b660c4babf907"}]},{symbol:"TSLA",token:"0x322F0929c4625eD5bAd873c95208D54E1c003b2d",pools:[{v:3,fee:3e3,pool:"0xf4ACdAEEB7022862A763C9B1B885e11191c889E3"},{v:4,fee:3e3,tickSpacing:60,id:"0x8517f8071ae5b831b738052f12125e8e3d6c158b78728aa44ce3b25e5104d32e"}]},{symbol:"TSM",token:"0x58FfE4a942d3885bAa22D7520691F611EF09e7AA",pools:[{v:4,fee:7500,tickSpacing:75,id:"0x0ba5d53d2f6255f334b7c8ead4f56b6aef5af3402c5e4d11180afd38c6b85fb1"},{v:3,fee:1e4,pool:"0x07e8Ea83D4C1340774c8965125e26e12bf943bf1"}]},{symbol:"USAR",token:"0xd917B029C761D264c6A312BBbcDA868658eF86a6",pools:[{v:3,fee:3e3,pool:"0x04391780F519B7d3ba59c9590459D76e23d225C4"}]},{symbol:"USO",token:"0xa30FA36Db767ad9eD3f7a60fC79526fB4d56D344",pools:[{v:4,fee:1200,tickSpacing:15,id:"0x1f2ad5a274a776d8e1408292bde1d92d8fa7b6444acf14ad60b9c3e4e5b66420"},{v:3,fee:3e3,pool:"0x02175608F1b5E6b5ed221cCFdC7Be197D111D915"}]}],notOffered:{CLSK:"thin",EWY:"thin",IONQ:"thin",RGTI:"thin",RKLB:"thin"},sourceCommit:"02230282d8888e00794207ed271ee01b4ce30309"};var u=10n**18n,G=1n<<192n,V=H(["function slot0() view returns (uint160,int24,uint16,uint16,uint16,uint8,bool)","function liquidity() view returns (uint128)","function getSlot0(bytes32) view returns (uint160,int24,uint24,uint24)","function getLiquidity(bytes32) view returns (uint128)"]),ee=H(["function getLaunchedToken(address) view returns ((address token,address curve,address deployer,address creatorFeeRecipient,address pairToken,uint256 graduationThreshold,uint24 poolFee,int24 tickSpacing,uint16 creatorTaxBps,bool buybackEnabled,uint8 phase,uint256 sweptQuote,uint256 sweptTokens,uint256 sweptAt,bool exists))"]),c=d=>({usdEstimate:null,estimateLabel:"price unavailable",estimateReason:d}),p=d=>`${d.chainId}:${d.address.toLowerCase()}`;async function se(d,h,A={}){let E=Number.isFinite(A.budgetMs)?Math.min(3e3,Math.max(0,A.budgetMs)):3e3,C=`Oak stopped pricing after ${E===3e3?"3 seconds":`${E} milliseconds`}`,g=new Map,k=[...new Map(h.map(e=>[p(e.token),e.token])).values()],r=!1,x=0,D=[];async function v(e){if(r)throw new Error(C);if(x>=6?await new Promise(t=>D.push(t)):x++,r)throw new Error(C);try{return await e()}finally{let t=D.shift();t?t():x--}}let y=new Map,S=new Map,w=new Map,T;function m(e){let t=y.get(e);if(!t){let a=d.clientFor(e);t=new Proxy(a,{get(n,o,f){let s=Reflect.get(n,o,f);return o==="readContract"?(...i)=>v(async()=>Reflect.apply(s,n,i)):s}}),y.set(e,t)}return t}function P(e){let t=S.get(e);return t||(t=v(()=>m(e).getBlockNumber({cacheTime:0})),S.set(e,t)),t}function O(e,t){return T??=$(e,void 0,t).then(a=>{let n=BigInt(a);if(n<=0n)throw new Error("ETH average unavailable");return n}),T}function Q(e,t){let a=`${e}:${t}`,n=w.get(a);return n||(n=v(()=>m(e).getBlock({blockNumber:t})).then(o=>{if(!(o.number!==t||typeof o.timestamp!="bigint"||o.timestamp<=0n))return o.timestamp.toString()}).catch(()=>{}),w.set(a,n)),n}async function W(e,t){let a=m(e.chainId),n=await P(e.chainId),o;for(let s of t.pools)try{let i=s.v===3,b=z(i?s.pool:l.v4.stateView),J=await a.readContract({address:b,abi:V,functionName:i?"slot0":"getSlot0",args:i?[]:[s.id],blockNumber:n}),F=await a.readContract({address:b,abi:V,functionName:i?"liquidity":"getLiquidity",args:i?[]:[s.id],blockNumber:n}),U=J[0];U>0n&&F>0n&&(!o||F>o.liquidity)&&(o={liquidity:F,sqrt:U})}catch{}if(!o)return c("Oak has no pinned pool with in-range liquidity for this token");let f=BigInt(e.address)<BigInt(l.usdg);return{numerator:f?o.sqrt**2n:G,denominator:(f?G:o.sqrt**2n)*10n**6n,source:`current price in the Uniswap USDG/${t.symbol} pool; on-chain trading can differ from the stock market`,block:n}}async function _(e){if(N(e))return{numerator:1n,denominator:10n**6n,source:"USDG counted at $1.00"};if(e.chainId!==B)return c("Oak has no source for this token");if(A.chopShareTokens?.some(i=>i.toLowerCase()===e.address.toLowerCase()))return c("chop_logs shows this log's backing");let t=e.symbol;if(t.startsWith("untrusted "))try{let i=JSON.parse(t.slice(10));typeof i=="string"&&(t=i)}catch{}if(t==="CHOP")return c("Oak has no pinned market for CHOP. A quote is a sale for this amount only; Oak never uses it to value a balance.");let a=l.tokens.find(i=>i.token.toLowerCase()===e.address.toLowerCase());if(a)return W(e,a);if(Object.hasOwn(l.notOffered,t))return c("Oak has no pinned market for this token");let n=m(e.chainId),o=await P(e.chainId);if(q(e))return{numerator:await O(n,o),denominator:u*u,source:"30-minute average of the Uniswap ETH/USDG pool",block:o};let f=(d.oakTokenAddress??process.env.OAK_TOKEN_ADDRESS)?.toLowerCase()===e.address.toLowerCase();if(f)try{let i=d.resolvePrice?await d.resolvePrice(e,o):await K(e,{client:n,blockNumber:o,oakTokenAddress:e.address,officialStockTokens:[]}),b=BigInt(i.usdE18);if(b<=0n)throw new Error("OAK price unavailable");return{numerator:b,denominator:u*10n**BigInt(e.decimals),source:"OAK price",block:o}}catch{}if(f&&(await n.readContract({address:I[B].pons.factory.address,abi:ee,functionName:"getLaunchedToken",args:[e.address],blockNumber:o})).phase!==2)return c("Oak has no graduated Pons pool price for OAK");let s=await M(e,n,o);return s.numerator<=0n||s.denominator<=0n?c("Oak has no source for this token"):{numerator:await O(n,o)*s.numerator,denominator:u*s.denominator*10n**BigInt(e.decimals),source:f?"OAK's current Pons pool price; fewer than enough trades in 30 minutes for a price":"current Pons pool price",block:o}}let L=0;async function j(){for(;!r&&L<k.length;){let e=k[L++],t;try{if(!Number.isInteger(e.decimals)||e.decimals<0||e.decimals>255)throw new Error("Invalid decimals");if(t=await _(e),r||g.set(p(e),t),"numerator"in t&&t.block!==void 0){let a=await Q(e.chainId,t.block);r||(t.observedAt=a)}}catch{t=c("Oak has no source for this token")}r||g.set(p(e),t)}}let R,Y=new Promise(e=>{R=setTimeout(()=>{r=!0;for(let t of D.splice(0))t();e()},E)});try{await Promise.race([Promise.all(Array.from({length:Math.min(6,k.length)},j)),Y])}finally{clearTimeout(R),r=!0}return h.map(e=>{let t;try{if(!/^\d+$/.test(e.amount)||!Number.isInteger(e.token.decimals)||e.token.decimals<0||e.token.decimals>255)throw new Error("Invalid amount");t="humanAmount"in e&&typeof e.humanAmount=="string"?e.humanAmount:Z(BigInt(e.amount),e.token.decimals);let a=g.get(p(e.token));if(a&&"numerator"in a){let o=(BigInt(e.amount)*a.numerator*100n*2n+a.denominator)/(a.denominator*2n);return{...e,humanAmount:t,usdEstimate:`${o/100n}.${(o%100n).toString().padStart(2,"0")}`,estimateLabel:"estimate, not a quote",estimateSource:a.source,unitUsdE18:(a.numerator*10n**BigInt(e.token.decimals)*u/a.denominator).toString(),...a.observedAt===void 0?{}:{observedAt:a.observedAt},...a.block===void 0?{}:{estimateAsOf:a.block.toString()}}}return{...e,humanAmount:t,...a??c(C)}}catch{return{...e,...t===void 0?{}:{humanAmount:t},...c("Oak cannot format this token amount")}}})}export{se as a};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as V}from"./CQ5WRWV4.js";import{a as S,b as C,c as W,d as re}from"./IV4K7FMD.js";import{a as ae,d as se,e as ie}from"./URBEK2VV.js";import{d as ue}from"./OIQTZOBN.js";import{b as F}from"./Z7FGEWO2.js";import{a as f,b as j,c as oe}from"./43LI5NKJ.js";import{c as G}from"./5TUXSOMI.js";import{b as o,e as ne}from"./IX3GZMTM.js";import{A as te,b as x,j as z,x as K,y as _}from"./TI727O2H.js";import{a as r}from"./XSD5NL7J.js";import{decodeFunctionData as R,encodeFunctionData as M,parseAbi as ce}from"viem";var ve=60,Z=50,Ne=200;var he="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",J="0x0000000000000000000000000000000000000000",T=z[4663].routes.kyberswap.address,y=z[4663].routes.velora.address,q=K[4663].kyberswap.toLowerCase(),le=K[4663].velora.toLowerCase(),Se="0x0000000000000000000000000000000000000000000000000000000000000000",N=ce(["function swap((address callTarget, address approveTarget, bytes targetData, (address srcToken, address dstToken, address[] srcReceivers, uint256[] srcAmounts, address[] feeReceivers, uint256[] feeAmounts, address dstReceiver, uint256 amount, uint256 minReturnAmount, uint256 flags, bytes permit) desc, bytes clientData) execution) payable returns (uint256 returnAmount, uint256 gasUsed)"]),$=ce(["function swapExactAmountIn(address executor, (address srcToken, address destToken, uint256 fromAmount, uint256 toAmount, uint256 quotedAmount, bytes32 metadata, address beneficiary) swapData, uint256 partnerAndFee, bytes permit, bytes executorData) payable returns (uint256 receivedAmount, uint256 submittedAmount, uint256 augustusFeeAmount)"]),E=class extends r{name="NoRouteError";constructor(t="No swap route is available for this token pair and amount."){super(t)}},L=class extends r{name="ExpiredQuoteError";constructor(t="Quote has expired. Request a fresh quote."){super(t)}},be=1e3,k=new Map;function me(e){for(let[t,n]of k)BigInt(e)>=o(n.expiresAt)&&k.delete(t)}function Y(e){return{...e,...e.sourcePoolRoute!==void 0?{sourcePoolRoute:structuredClone(e.sourcePoolRoute)}:{},...e.txs?{txs:e.txs.map(t=>({...t}))}:{}}}function de(e){let t=Y(e);return t.txs&&(t.txs.forEach(Object.freeze),Object.freeze(t.txs)),Object.freeze(t)}var Oe=["router","from","to","wallet","amountIn","amountOut","minAmountOut","expiresAt","chainId","spender","value","ponsCurveToken","ponsPoolToken","blockNumber","calldataMinAmountOut","expectedSpend","expectedRefund","oakFee","oakFeeBps","oakFeeToken","grossAmountOut","venueFee","venueFeeBps"];function U(e,t,n=!1){for(let u of Oe)if(!(u==="expiresAt"&&n&&o(e.expiresAt)<=o(t.expiresAt))&&e[u]!==void 0&&String(e[u]).toLowerCase()!==String(t[u]).toLowerCase())throw new r(`Quote ${u} does not match the accepted quote.`)}function H(e=Date.now){let t=e();if(!Number.isFinite(t)||t<0)throw new r("Clock must return a non-negative timestamp.");return t>1e11?Math.floor(t/1e3):Math.floor(t)}function P(e){let t=e.toLowerCase();return t===he.toLowerCase()||t===J.toLowerCase()}function ke(e,t=Z){if(!Number.isInteger(t)||t<0||t>=1e4)throw new r("Slippage must be an integer from 0 to 9999 bps.");return ne(e,String(1e4-t),"10000","floor")}var Ie=200;function $e(e){if(typeof e!="number"||!Number.isFinite(e)||!/^\d+(?:\.\d{1,2})?$/.test(String(e)))throw new r("Velora returned an unsupported venue fee. Request a fresh quote.");let[t,n=""]=String(e).split("."),u=Number(t)*100+Number(n.padEnd(2,"0"));return ee(u),u}function ee(e){if(!Number.isInteger(e)||e<0||e>Ie)throw new r("Velora returned an unsupported venue fee. Request a fresh quote.")}function pe(e,t=S.bps){return ee(t),o(e)*10000n/BigInt(1e4-t)+1n}function xe(e,t){if(ee(t),t!==S.bps||e!==W)throw new r("Velora partnerAndFee must match the pinned Oak fee, recipient and flags.")}function fe(e){if(e.oakFeeBps===S.bps)return`${re()} ${e.provider==="velora"?"Oak\u2019s share is paid to the Oak treasury.":"Paid to the Oak treasury."} Venue fee: ${e.venueFee} base units (${e.venueFeeBps} bps) retained by ${e.provider??"venue"}. Output and minimum are net.${e.provider==="velora"?" Velora retains 15% of the partner fee; Oak receives 85% (about 21.25 bps).":""}`;if(e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak fee requires the pinned rate and token; venue fees must never be counted as Oak income.");let t=e.provider??"venue";return`Venue fee: ${e.venueFee} base units (${e.venueFeeBps} bps) retained by ${t}; Oak swap fee: 0 (venue fee is never Oak income).`}function Fe(e){f(e.from),f(e.to),f(e.wallet);let t=e.callTarget??_[x].kyberswap.address,n=e.approveTarget??J;f(t),f(n);let u=o(e.amountIn),a=o(e.minAmountOut);return M({abi:N,functionName:"swap",args:[{callTarget:t,approveTarget:n,targetData:e.targetData??"0x",desc:{srcToken:e.from,dstToken:e.to,srcReceivers:P(e.from)?[]:[t],srcAmounts:P(e.from)?[]:[u-BigInt(C(e.amountIn))],feeReceivers:[S.recipient],feeAmounts:[BigInt(S.bps)],dstReceiver:e.wallet,amount:u,minReturnAmount:a,flags:640n,permit:"0x"},clientData:e.clientData??"0x"}]})}function Ee(e){f(e.from),f(e.to),f(e.wallet);let t=e.executor??_[x].velora.address;return f(t),M({abi:$,functionName:"swapExactAmountIn",args:[t,{srcToken:e.from,destToken:e.to,fromAmount:o(e.amountIn),toAmount:o(e.minAmountOut),quotedAmount:o(e.amountOut),metadata:e.metadata??Se,beneficiary:e.wallet},e.partnerAndFee??W,"0x",e.executorData??"0x"]})}function De(e){if(typeof e!="string"||!/^0x([0-9a-fA-F]{2})+$/.test(e)||e.length<10)throw new r("Swap calldata must contain a 4-byte function selector.");let t=e.slice(0,10).toLowerCase();if(t===q)return R({abi:N,data:e}).args[0].desc.minReturnAmount;if(t===le)return R({abi:$,data:e}).args[1].toAmount;if(t==="0x3593564c")return se(e).swap.amountOutMinimum;let n=R({abi:ae,data:e});if(n.functionName==="buy"||n.functionName==="sell")return n.args[1];throw new r(`Unsupported swap router selector ${t}.`)}function we(e,t,n=!1){let u=o(t),a=De(e);if(a<=0n||u<=0n||a!==u&&!(n&&(a>u||e.slice(0,10).toLowerCase()===q&&a+1n===u)))throw new r(`Built swap calldata minimum output (${a}) does not match the accepted quote minimum (${u}).`);return a}function Ae(e,t){let{from:n,to:u,wallet:a,amountIn:d}=t;if(!n||!u||!a||d===void 0)throw new r("Accepted quote must include input, output, amount and wallet.");for(let i of[n,u,a,t.router,e.to])f(i);let p=(i,l,w)=>{if(i.toLowerCase()!==l.toLowerCase())throw new r(`Built swap ${w} does not match the accepted quote.`)};if(p(e.to,t.router,"router"),e.chainId!==(t.chainId??x))throw new r("Built swap chain does not match the accepted quote.");let g=P(n)?o(d):0n;if(o(e.value)!==g||t.value!==void 0&&o(t.value)!==g)throw new r("Built swap value does not match the accepted quote input.");let A=e.data.slice(0,10).toLowerCase(),s=t.router.toLowerCase();if(s===T.toLowerCase()||s===y.toLowerCase()){let i=s===T.toLowerCase(),l=i?d:t.grossAmountOut,w=i?n:u;if(t.oakFeeBps!==S.bps||l===void 0||t.oakFee!==C(l)||t.oakFeeToken?.toLowerCase()!==F(w).toLowerCase())throw new r("Oak fee must match the pinned rate, token and amount.")}let c;if(s===T.toLowerCase()&&A===q){p(t.spender??t.router,T,"spender");let i=R({abi:N,data:e.data});if(M({abi:N,...i}).toLowerCase()!==e.data.toLowerCase())throw new r("KyberSwap calldata must be canonically decodable.");let{callTarget:l,approveTarget:w,desc:m}=i.args[0];p(l,_[x].kyberswap.address,"executor"),p(w,J,"executor approval target");let I=P(n);if(m.srcReceivers.length!==m.srcAmounts.length||(I?m.srcReceivers.length!==0:m.srcReceivers.length===0||m.srcAmounts.some(v=>v<=0n)||m.srcAmounts.reduce((v,b)=>v+b,0n)!==o(d)-BigInt(C(d))))throw new r("KyberSwap source transfers must send the exact input less the pinned fee to the pinned executor or verified input pool.");for(let v of m.srcReceivers)if(v.toLowerCase()!==l.toLowerCase()&&!ue(n,v,e.data))throw new r(`KyberSwap source transfers: receiver ${v} is not a verified input pool or the pinned executor.`);if(m.feeReceivers.length!==1||m.feeAmounts.length!==1||m.feeReceivers[0].toLowerCase()!==S.recipient.toLowerCase()||m.feeAmounts[0]!==BigInt(S.bps)||m.flags!==640n||m.permit!=="0x")throw new r("KyberSwap fee recipients, fee amounts, flags and permit must match the pinned Oak input-fee policy.");c={from:m.srcToken,to:m.dstToken,wallet:m.dstReceiver,amount:m.amount}}else if(s===y.toLowerCase()&&A===le){p(t.spender??t.router,y,"spender");let i=R({abi:$,data:e.data});if(M({abi:$,...i}).toLowerCase()!==e.data.toLowerCase())throw new r("Velora calldata must be canonically decodable.");let[l,w,m,I]=i.args;if(!te.some(v=>v.toLowerCase()===l.toLowerCase()))throw new r("Built swap executor does not match the accepted quote.");if(I!=="0x")throw new r("Velora permit must match the pinned empty-permit policy.");if(xe(m,t.oakFeeBps??S.bps),t.calldataMinAmountOut!==void 0&&o(t.calldataMinAmountOut)!==pe(t.minAmountOut,S.bps))throw new r("Velora calldata minimum must cover the accepted net output, venue fee and router dust.");if(t.calldataMinAmountOut!==void 0&&(w.quotedAmount!==o(t.grossAmountOut??"0")||w.quotedAmount<o(t.calldataMinAmountOut)))throw new r("Velora quoted gross output must match the accepted quote and cover its calldata minimum.");if(m!==0n&&t.calldataMinAmountOut===void 0)throw new r("Velora venue fee requires a fee-adjusted calldata minimum.");c={from:w.srcToken,to:w.destToken,wallet:w.beneficiary,amount:w.fromAmount}}else if(t.provider==="pons"&&(t.ponsPoolToken||t.ponsCurveToken))c=ie(e,{...t,from:n,to:u,wallet:a});else throw new r("Built swap selector does not match the accepted router.");if(p(c.from,n,"input token"),p(c.to,u,"output token"),p(c.wallet,a,"recipient"),c.amount!==o(d))throw new r("Built swap input amount does not match the accepted quote.");we(e.data,t.calldataMinAmountOut??t.minAmountOut,s===T.toLowerCase())}function X(e,t={}){if(!e||typeof e.quoteId!="string"||!e.quoteId.trim())throw new r("Quote must include a non-empty quoteId.");if(f(e.router),e.oakFeeBps!==void 0){let h=t.provider??e.provider,O=h==="kyberswap"?t.amountIn??e.amountIn:e.grossAmountOut,Q=h==="kyberswap"?t.from??e.from:t.to??e.to;if(!["kyberswap","velora"].includes(h??"")||e.oakFeeBps!==S.bps||O===void 0||e.oakFee!==C(O)||!Q||e.oakFeeToken?.toLowerCase()!==F(Q).toLowerCase())throw new r("Oak fee must match the pinned rate, token and amount.")}else if(e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak fee requires the pinned rate and token; venue fees must never be counted as Oak income.");let n=o(e.amountOut),u=e.destAmountAfterFee??e.netAmountOut,a,d,p;if(u!==void 0){if(d=o(u),a=e.grossAmountOut!==void 0?o(e.grossAmountOut):n>=d?n:d,a<d)throw new r("Gross output cannot be less than net output.");p=e.venueFee!==void 0?o(e.venueFee):a-d}else if(e.grossAmountOut!==void 0){if(a=o(e.grossAmountOut),d=n,a<d)throw new r("Gross output cannot be less than net output.");p=e.venueFee!==void 0?o(e.venueFee):a-d}else e.venueFee!==void 0?(p=o(e.venueFee),d=n,a=d+p):(d=n,a=n,p=0n);if(d<=0n)throw new E("Quote output amount must be positive.");let g=t.slippageBps??e.slippageBps??Z,A=e.minAmountOut!==void 0?o(e.minAmountOut):o(ke(d.toString(),g));if(A<=0n||A>a)throw new r("Quote minAmountOut must be positive and not exceed gross output.");if((t.provider??e.provider)==="velora"&&e.calldataMinAmountOut!==void 0){if(o(e.calldataMinAmountOut)!==pe(A.toString(),S.bps)||o(e.calldataMinAmountOut)>a)throw new r("Velora calldata minimum must cover the accepted net output, venue fee and router dust.")}else if(e.calldataMinAmountOut!==void 0||e.ponsCurveToken!==void 0){if((t.provider??e.provider)!=="pons"||!e.ponsCurveToken)throw new r("Curve minimum requires a Pons curve quote.");f(e.ponsCurveToken);let h=o(t.amountIn??e.amountIn??"0"),O=o(e.expectedSpend??"0"),Q=o(e.expectedRefund??"0"),ge=o(e.calldataMinAmountOut??"0");if(h<=0n||O<=0n||O+Q!==h||ge*O/h!==A)throw new r("Pons actual minimum and refund do not match the encoded minimum.")}let s=H(t.now),c=BigInt(s+ve),i=e.expiresAt!==void 0?o(e.expiresAt):c,l=(i>c?c:i).toString(),w=p.toString(),m=e.venueFeeBps??(a>0n&&p>0n?Number((p*10000n+a/2n)/a):0),I=t.provider??e.provider??(e.router.toLowerCase()===y.toLowerCase()?"velora":"kyberswap"),v=I==="pons"&&e.feeDisclosure?e.feeDisclosure:fe({provider:I,venueFee:w,venueFeeBps:m,oakFee:e.oakFee??"0",oakFeeBps:e.oakFeeBps}),b={...e,quoteId:e.quoteId,amountOut:d.toString(),minAmountOut:A.toString(),router:e.router,expiresAt:l,provider:I,grossAmountOut:a.toString(),destAmountAfterFee:d.toString(),netAmountOut:d.toString(),venueFee:w,venueFeeBps:m,oakFee:e.oakFee??"0",feeDisclosure:v,...t.from??e.from?{from:F(t.from??e.from)}:{},...t.to??e.to?{to:F(t.to??e.to)}:{},...t.amountIn??e.amountIn?{amountIn:t.amountIn??e.amountIn}:{},...t.wallet??e.wallet?{wallet:t.wallet??e.wallet}:{},slippageBps:g,chainId:t.chainId??e.chainId??x,spender:e.spender??e.router,...t.allowance??e.allowance?{allowance:t.allowance??e.allowance}:{}};if(BigInt(s)>=o(l))throw new L;if(t.cache===!1)return b;if(me(s),BigInt(s)>=o(l))throw new L;let B=k.get(b.quoteId);if(B){U(b,B,!0);let h=de({...B,expiresAt:b.expiresAt});return k.set(h.quoteId,h),Y(h)}for(;k.size>=be;)k.delete(k.keys().next().value);let D=de(b);return k.set(D.quoteId,D),Y(D)}async function Ue(e,t,n={}){e={...e},f(e.from),f(e.to),f(e.wallet),e.from=F(e.from),e.to=F(e.to);let u=o(e.amountIn);if(u<=0n)throw new r("Swap amountIn must be greater than zero.");let a=e.slippageBps??Z;if(!Number.isInteger(a)||a<0||a>=1e4)throw new r("Slippage must be an integer from 0 to 9999 bps.");if(!Array.isArray(t)||t.length===0)throw new E;let d={from:e.from,to:e.to,amountIn:u.toString(),slippageBps:a},p=await Promise.allSettled(t.map(async s=>{let c=await(s.quotePrices??s.quote).call(s,{...d},e.wallet);return{quote:X(c,{provider:s.name,from:e.from,to:e.to,amountIn:u.toString(),wallet:e.wallet,slippageBps:a,chainId:e.chainId??x,allowance:e.allowance,now:e.now,cache:!1}),provider:s}})),g,A=[];for(let s of p)s.status==="rejected"&&(g??=G(s.reason)),s.status==="fulfilled"&&o(s.value.quote.expiresAt)>BigInt(H(e.now))&&A.push(s.value);if(A.length===0){let s=p.some(c=>c.status==="rejected"&&c.reason instanceof Error&&c.reason.message===V)&&p.every(c=>c.status==="rejected"&&(c.reason instanceof E||c.reason instanceof Error&&c.reason.message===V));throw g??new E(s?V:void 0)}A.sort((s,c)=>{let l=o(c.quote.amountOut)-o(s.quote.amountOut)||o(c.quote.minAmountOut)-o(s.quote.minAmountOut);return l>0n?1:l<0n?-1:0});for(let{quote:s,provider:c}of A)try{if(BigInt(H(e.now))>=o(s.expiresAt))continue;if(n.deferBuild||!c.prepareQuote)return X(s,{now:e.now});let i=await c.prepareQuote(s.quoteId,e.wallet);if(i.quoteId!==s.quoteId)throw new r("Prepared quote ID does not match the selected route.");if(U(i,s,!0),!i.data)throw new r("Selected route did not return swap calldata.");let l={...s,expiresAt:i.expiresAt,data:i.data,value:i.value,allowance:i.allowance??s.allowance};return Ae(j({to:l.router,data:i.data,value:i.value??"0",chainId:l.chainId??x,description:"Selected swap route"}),l),X(l,{now:e.now})}catch(i){g??=G(i);continue}throw g??new E}function He(e,t={}){if(!e||typeof e.quoteId!="string"||!e.quoteId.trim())throw new r("Provide a valid quote to build a swap.");f(e.router);let n=k.get(e.quoteId),u=H(t.now);if(me(u),!n||BigInt(u)>=o(n.expiresAt))throw k.delete(e.quoteId),new L;if(e.oakFeeBps===void 0&&e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak fee requires the pinned rate and token; venue fees must never be counted as Oak income.");U(e,n),U({...n,...t},n);let a=n.from,d=n.to,p=n.amountIn,g=n.wallet;if(!a||!d||!g||p===void 0)throw new r("Accepted quote must include input, output, amount and wallet.");let A=n.chainId??x,s=n.spender??n.router,c=t.allowance??e.allowance??n?.allowance??"0";f(a),f(d),f(g),f(s);let i=o(p);if(i<=0n)throw new r("Swap amountIn must be greater than zero.");let l=o(n.minAmountOut);if(l<=0n)throw new r("Swap minAmountOut must be greater than zero.");let w=e.router.toLowerCase()===y.toLowerCase(),m=t.data??e.data??n?.data??(w?Ee({from:a,to:d,amountIn:i.toString(),amountOut:n.grossAmountOut??n.amountOut,minAmountOut:n.calldataMinAmountOut??l.toString(),wallet:g}):Fe({from:a,to:d,amountIn:i.toString(),minAmountOut:l.toString(),wallet:g}));we(m,n.calldataMinAmountOut??l.toString(),n.router.toLowerCase()===T.toLowerCase());let I=n.venueFee??"0",v=n.venueFeeBps??0,b=n.provider??(w?"velora":"kyberswap"),B=n.feeDisclosure??fe({provider:b,venueFee:I,venueFeeBps:v,oakFee:n.oakFee??"0",oakFeeBps:n.oakFeeBps}),D=P(a),h=t.value??e.value??n?.value??(D?i.toString():"0"),O=j({to:e.router,data:m,value:h,chainId:A,description:`Swap ${i} base units of ${a} for at least ${l} base units of ${d} via ${b} (${e.router}). ${B}`});return Ae(O,n),D||o(c)>=i?[O]:[oe(a,s,i.toString(),A),O]}export{ve as a,Z as b,Ne as c,he as d,J as e,N as f,E as g,L as h,be as i,Y as j,de as k,U as l,H as m,P as n,ke as o,Ie as p,$e as q,pe as r,xe as s,fe as t,Fe as u,Ee as v,De as w,we as x,Ae as y,X as z,Ue as A,He as B};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as t}from"./LCH6F5HT.js";import{c as o}from"./QLFPAN6S.js";function s(e,n,a){return t(e,n,a,o)}export{s as a};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{g as r}from"./NWNYJ26T.js";import{b as m,j as y}from"./TI727O2H.js";import{a}from"./XSD5NL7J.js";import{decodeAbiParameters as f,decodeFunctionData as K,encodeAbiParameters as w,encodeFunctionData as T,parseAbi as S,parseAbiParameters as k,zeroAddress as v}from"viem";var I=S(["function buy(uint256 quoteIn,uint256 minTokensOut,address recipient) payable returns (uint256)","function sell(uint256 tokensIn,uint256 minQuoteOut,address recipient) returns (uint256)"]),P=S(["function execute(bytes commands,bytes[] inputs,uint256 deadline) payable"]),b=k("((address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks) poolKey,bool zeroForOne,uint128 amountIn,uint128 amountOutMinimum,uint256 minHopPriceX36,bytes hookData)"),g=k("bytes,bytes[]"),h=k("address,uint256"),O="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";function A(c){return r(c,O)?v:c}function H(c,e,d,t){let i=A(c),p=A(e),[n,o]=BigInt(i)<BigInt(p)?[i,p]:[p,i];return{currency0:n,currency1:o,fee:d,tickSpacing:t,hooks:y[m].pons.memeHook.address}}function x(c){let e=K({abi:P,data:c}),[d,t,i]=e.args;if(d!=="0x10"||t.length!==1||!r(T({abi:P,...e}),c))throw new a("Pons router must contain one canonical v4 swap command.");let[p,n]=f(g,t[0]);if(p!=="0x060c0f"||n.length!==3||!r(w(g,[p,n]),t[0]))throw new a("Pons router actions must swap, settle the exact input and take all output to the sender.");let o=f(b,n[0])[0],u=f(h,n[1]),s=f(h,n[2]);if(!r(w(b,[o]),n[0])||!r(w(h,u),n[1])||!r(w(h,s),n[2])||o.hookData!=="0x"||o.minHopPriceX36!==0n||!r(u[0],o.zeroForOne?o.poolKey.currency0:o.poolKey.currency1)||u[1]!==o.amountIn||!r(s[0],o.zeroForOne?o.poolKey.currency1:o.poolKey.currency0)||s[1]!==o.amountOutMinimum)throw new a("Pons router settlement and receipt must match the single swap.");return{swap:o,deadline:i}}function B(c,e){let d=(o,u,s)=>{if(!r(o,u))throw new a(`Built swap ${s} does not match the accepted quote.`)},t=e.ponsPoolToken??e.ponsCurveToken;if(!t||e.ponsPoolToken&&e.ponsCurveToken)throw new a("Pons quote must name exactly one curve or pool token.");let i=r(e.to,t);if(!i&&!r(e.from,t))throw new a("Pons quote must trade its launch token.");let p=i?e.from:e.to;if(r(A(p),t))throw new a("Pons quote pair must differ from its launch token.");if(e.ponsPoolToken){if(d(e.router,y[m].ponsTrade.universal_router.address,"Pons router"),d(e.spender??e.router,y[m].ponsTrade.permit2.address,"Pons spender"),!e.data)throw new a("Pons pool quote must include locally reconstructed calldata.");let{swap:o,deadline:u}=x(c.data),s=x(e.data),l=H(p,t,s.swap.poolKey.fee,s.swap.poolKey.tickSpacing);if(d(o.poolKey.currency0,l.currency0,"pool currency0"),d(o.poolKey.currency1,l.currency1,"pool currency1"),d(o.poolKey.hooks,l.hooks,"pool hook"),o.zeroForOne!==r(A(e.from),l.currency0)||o.poolKey.fee!==s.swap.poolKey.fee||o.poolKey.tickSpacing!==s.swap.poolKey.tickSpacing||u!==s.deadline)throw new a("Pons pool direction, parameters or deadline differ from the accepted quote.");return{from:e.from,to:e.to,wallet:e.wallet,amount:o.amountIn}}let n=K({abi:I,data:c.data});if(n.functionName!==(i?"buy":"sell"))throw new a("Pons curve direction does not match the accepted quote.");return d(e.spender??e.router,e.router,"curve spender"),{from:e.from,to:e.to,wallet:n.args[2],amount:n.args[0]}}export{I as a,A as b,H as c,x as d,B as e};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as A,i as U,n as X,o as V,q as j}from"./7EACRKFV.js";import{m as v,n as F}from"./WSILNJS2.js";import{a as $}from"./Y2QADJOB.js";import{b as z,e as C,o as Y}from"./QLFPAN6S.js";import{a as w,b as S}from"./Z7FGEWO2.js";import{a as k}from"./LIUXNOLP.js";import{a as P}from"./VVAM3EAK.js";import{a as B}from"./SPJCSEKP.js";import{b as q}from"./SCG5HWMN.js";import{b as T}from"./IX3GZMTM.js";import{t as y}from"./MQ5F2VOK.js";import{b as m,c as f,d as H,e as N,j as g,k as W,l as R,q as K}from"./TI727O2H.js";import{a as o}from"./XSD5NL7J.js";import{a as D,b as L}from"./JXOEJPJ4.js";import{getAddress as b,isAddress as Q,parseAbi as oe}from"viem";var J=[{inputs:[],name:"available",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"ethUsdE18",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"liquidityUsdgE6",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"phase",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"priceSigner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"signer",type:"address"}],name:"setPriceSigner",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"spotOakPerEthE18",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"supplyNet",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"syncPhase",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"wallet",type:"address"},{internalType:"uint256",name:"oakPerEthE18",type:"uint256"},{internalType:"uint64",name:"timestamp",type:"uint64"},{internalType:"bytes32",name:"nonce",type:"bytes32"}],internalType:"struct PriceNote",name:"n",type:"tuple"},{internalType:"bytes",name:"sig",type:"bytes"},{internalType:"address",name:"boundWallet",type:"address"}],name:"verifyNote",outputs:[{internalType:"uint256",name:"oakPerEthE18",type:"uint256"}],stateMutability:"view",type:"function"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"signer",type:"address"}],name:"PriceSignerSet",type:"event"},{inputs:[],name:"NotReady",type:"error"},{inputs:[],name:"NoteBadSignature",type:"error"},{inputs:[],name:"NoteExpired",type:"error"},{inputs:[],name:"NoteNotYetValid",type:"error"},{inputs:[{internalType:"uint256",name:"spot",type:"uint256"},{internalType:"uint256",name:"note",type:"uint256"}],name:"NoteOutsideGuard",type:"error"},{inputs:[],name:"NoteWrongWallet",type:"error"},{inputs:[{internalType:"address",name:"source",type:"address"}],name:"OracleUnreadable",type:"error"}];var M=300,de="1000000000000000000",te=b(g[m].tokens.USDG.address),ne=b(g[f].deployments.test_USDG.address),O=b(g[m].tokens.WETH.address),_=b(g[f].deployments.test_WETH.address);function re(n){let e=n.address.toLowerCase();return n.chainId===m?e===te.toLowerCase():n.chainId===f?e===ne.toLowerCase():!1}function ie(n){return n.chainId!==m&&n.chainId!==f?!1:S(n.address)===w}function ae(n){let e=n.address.toLowerCase();return n.chainId===m?e===O.toLowerCase():n.chainId===f?e===_.toLowerCase():!1}function ce(n){return ie(n)||ae(n)}var ue=-887272,me=887272,fe=(1n<<256n)-1n,le=oe(["function observe(uint32[] secondsAgos) view returns (int56[] tickCumulatives, uint160[] secondsPerLiquidityCumulativeX128s)","function slot0() view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked)"]);function I(n,e){if(typeof n=="bigint")return n;if(typeof n=="number"){if(!Number.isSafeInteger(n))throw new o(`Invalid ${e} timestamp.`);return BigInt(n)}if(typeof n=="string"&&/^-?\d+$/.test(n.trim()))return BigInt(n.trim());throw new o(`Invalid ${e} timestamp.`)}function _e(n,e=BigInt(Math.floor(Date.now()/1e3)),t=M){try{return l(n,e,t),!0}catch{return!1}}function l(n,e=BigInt(Math.floor(Date.now()/1e3)),t=M){if(!Number.isInteger(t)||t<0)throw new o("Maximum price age must be a non-negative integer.");let s=I(n,"price"),a=I(e,"current");if(s<=0n)throw new o("Price timestamp must be positive.");if(s>a)throw new o("Price timestamp is in the future.");let i=a-s;if(i>BigInt(t))throw new o(`Price is stale: age ${i}s exceeds ${t}s.`);return s.toString()}function be(n){if(!Number.isInteger(n)||n<ue||n>me)throw new o(`Tick ${n} is outside valid Uniswap bounds.`);let e=BigInt(n<0?-n:n),t=(e&0x1n)!==0n?0xfffcb933bd6fad37aa2d162d1a594001n:0x100000000000000000000000000000000n;return(e&0x2n)!==0n&&(t=t*0xfff97272373d413259a46990580e213an>>128n),(e&0x4n)!==0n&&(t=t*0xfff2e50f5f656932ef12357cf3c7fdccn>>128n),(e&0x8n)!==0n&&(t=t*0xffe5caca7e10e4e61c3624eaa0941cd0n>>128n),(e&0x10n)!==0n&&(t=t*0xffcb9843d60f6159c9db58835c926644n>>128n),(e&0x20n)!==0n&&(t=t*0xff973b41fa98c081472e6896dfb254c0n>>128n),(e&0x40n)!==0n&&(t=t*0xff2ea16466c96a3843ec78b326b52861n>>128n),(e&0x80n)!==0n&&(t=t*0xfe5dee046a99a2a811c461f1969c3053n>>128n),(e&0x100n)!==0n&&(t=t*0xfcbe86c7900a88aedcffc83b479aa3a4n>>128n),(e&0x200n)!==0n&&(t=t*0xf987a7253ac413176f2b074cf7815e54n>>128n),(e&0x400n)!==0n&&(t=t*0xf3392b0822b70005940c7a398e4b70f3n>>128n),(e&0x800n)!==0n&&(t=t*0xe7159475a2c29b7443b29c7fa6e889d9n>>128n),(e&0x1000n)!==0n&&(t=t*0xd097f3bdfd2022b8845ad8f792aa5825n>>128n),(e&0x2000n)!==0n&&(t=t*0xa9f746462d870fdf8a65dc1f90e061e5n>>128n),(e&0x4000n)!==0n&&(t=t*0x70d869a156d2a1b890bb3df62baf32f7n>>128n),(e&0x8000n)!==0n&&(t=t*0x31be135f97d08fd981231505542fcfa6n>>128n),(e&0x10000n)!==0n&&(t=t*0x9aa508b5b7a84e1c677de54f3e99bc9n>>128n),(e&0x20000n)!==0n&&(t=t*0x5d6af8dedb81196699c329225ee604n>>128n),(e&0x40000n)!==0n&&(t=t*0x2216e584f5fa1ea926041bedfe98n>>128n),(e&0x80000n)!==0n&&(t=t*0x48a170391f7dc42444e8fa2n>>128n),n>0&&(t=fe/t),(t>>32n)+(t%(1n<<32n)===0n?0n:1n)}async function Z(n,e,t,s){let a=async()=>{throw new o("Price identity resolution is read-only.")},i=B({network:e===f?"testnet":"mainnet",clientFor:r=>t.client??y(t.rpcUrl,r),http:t.http??q(),preview:a,quoteSwap:a,buildSwap:a}),c=await Y(n,{context:i,oakTokenAddress:t.oakTokenAddress??process.env.OAK_TOKEN_ADDRESS,officialStockTokens:t.officialStockTokens,tokenMetadata:s,blockNumber:t.blockNumber,readMetadata:async r=>{let d=t.client??y(t.rpcUrl,e),[u,p]=await Promise.all([P(d,e,r,"symbol",t.blockNumber),P(d,e,r,"decimals",t.blockNumber)]);return{address:r,symbol:u,decimals:p,chainId:e}}});return{address:c.address,symbol:c.kind==="erc20"&&s?s.symbol:c.symbol,decimals:c.decimals,chainId:c.chainId}}async function pe(n,e,t){if(typeof n=="object"&&n!==null){let r=n.chainId??e,d=S(n.address)===w?w:b(n.address),u={address:d,symbol:n.symbol,decimals:n.decimals,chainId:r};return re(u)?{address:d,symbol:"USDG",decimals:N,chainId:r}:ie(u)?{address:w,symbol:"ETH",decimals:18,chainId:r}:ae(u)?{address:d,symbol:"WETH",decimals:18,chainId:r}:Z(u.address,r,t,u)}let s=n.trim(),a=s.toUpperCase(),i=s.toLowerCase();if(a==="ETH"||Q(s,{strict:!1})&&S(s)===w)return{...z,chainId:e};if(a==="WETH"||e===m&&i===O.toLowerCase()||e===f&&i===_.toLowerCase()){if(e!==m&&e!==f)throw new o(`No canonical WETH address configured for chain ${e}.`);return{address:e===f?_:O,symbol:"WETH",decimals:18,chainId:e}}if(a==="USDG"||e===m&&i===W.toLowerCase()||e===f&&i===R.toLowerCase()){if(e!==m&&e!==f)throw new o(`No canonical USDG address configured for chain ${e}.`);return{address:e===f?ne:te,symbol:"USDG",decimals:N,chainId:e}}if(e===m&&(a==="USDE"||i===C.address.toLowerCase()))return{...C,chainId:e};let c=t.oakTokenAddress??process.env.OAK_TOKEN_ADDRESS;if(a==="OAK"||c&&s.toLowerCase()===c.toLowerCase()){if(!c&&!Q(s,{strict:!1}))throw new o("OAK token address is required to price OAK.");return{address:b(c??s),symbol:"OAK",decimals:H,chainId:e}}return Z(n,e,t)}async function h(n,e,t){if(e)return(await n.readContract({address:e,abi:J,functionName:"ethUsdE18",blockNumber:t})).toString();let a=(await n.readContract({address:b(K),abi:le,functionName:"observe",args:[[A,0]],blockNumber:t}))[0];if(!a||a.length<2)throw new o("ETH/USDG pool observation returned insufficient tick cumulatives.");let i=X(a[0],a[1],A),c=be(i);return V(c)}async function x(n,e,t,s){if(n.timestamp!==void 0)return l(n.timestamp,t(),s);if(e&&typeof e.getBlock=="function"){let i=await k(e,n.blockNumber);return l(i.timestamp,t(),s)}let a=t();return l(a,a,s)}function ee(n){if(n.startsWith("untrusted "))try{let e=JSON.parse(n.slice(10));if(typeof e=="string"&&D(e)===n)return n}catch{}return D(n)}async function Ie(n,e={}){let t=e.chainId??m,s=e.maxAgeSeconds??M,a=()=>e.now!==void 0?I(e.now,"current"):BigInt(Math.floor(Date.now()/1e3)),i=await pe(n,t,e);if((L(i.symbol)||i.symbol.length>256)&&(i.symbol=ee(i.symbol)),e.signedNote||e.priceNote){let r=e.signedNote?e.signedNote.note:e.priceNote,d=l(r.timestamp,a(),s);if(e.spotOakPerEthE18!==void 0&&!v(r.oakPerEthE18,e.spotOakPerEthE18))throw new o("Price note is outside the 50% spot guard band.");let u=e.signedNote?.signature??e.signature,p=e.signedNote?.consumer??e.consumer;if(u&&p){let G=await F({note:r,signature:u,consumer:p,signer:e.signer,now:a(),spotOakPerEthE18:e.spotOakPerEthE18,chainId:t});if(!G.valid)throw new o(G.error??"Price note verification failed.")}let E=e.ethUsdE18!==void 0?e.ethUsdE18.toString():await h(e.client??y(e.rpcUrl,t),e.oracleAddress);return{token:i,usdE18:U(E,r.oakPerEthE18),timestamp:d}}if(e.trades){let r=await x(e,e.client,a,s),d=j(e.trades,{now:a(),windowStart:e.windowStart,windowEnd:e.windowEnd});if(e.spotOakPerEthE18!==void 0&&!v(d,e.spotOakPerEthE18))throw new o("30-minute average is outside the 50% spot guard band.");let u=e.ethUsdE18!==void 0?e.ethUsdE18.toString():await h(e.client??y(e.rpcUrl,t),e.oracleAddress);return{token:i,usdE18:U(u,d),timestamp:r}}if(e.usdE18!==void 0){let r=await x(e,e.client,a,s),d=T(e.usdE18.toString());if(d<=0n)throw new o("USD price must be positive.");return{token:i,usdE18:d.toString(),timestamp:r}}if(e.resolver){let r=await e.resolver(i),d=l(r.timestamp,a(),s),u=T(r.usdE18);if(u<=0n)throw new o("USD price must be positive.");return{token:i,usdE18:u.toString(),timestamp:d}}let c=e.client??y(e.rpcUrl,t);if(re(i)){let r=await x(e,c,a,s);return{token:i,usdE18:de,timestamp:r}}if(ce(i)){let r=await x(e,c,a,s),d=await h(c,e.oracleAddress,e.blockNumber);return{token:i,usdE18:d,timestamp:r}}if(i.chainId===m)try{let r=await k(c,e.blockNumber),d=l(r.timestamp,a(),s);if(r.number===null)throw new o("Pons reference requires a mined block.");let[u,p]=await Promise.all([$(i,c,r.number),h(c,e.oracleAddress,r.number)]),E=T(p)*u.numerator/u.denominator;if(E<=0n)throw new o("Pons USD reference price must be positive.");return{token:i,usdE18:E.toString(),timestamp:d}}catch{}throw new o(`Oak has no fresh on-chain trade price for ${ee(i.symbol)}, so it shows no price. balances and positions show a labeled estimate where one exists; an estimate is not a quote.`)}export{M as a,de as b,re as c,ie as d,ae as e,ce as f,_e as g,l as h,be as i,h as j,Ie as k};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var t=["morpho_midnight_status","morpho_allocator","morpho_protocol","netnet_desk_read","netnet_financial_status","netnet_details","netnet_analytics","netnet_staking_status","longbow_fixed_offers","longbow_nft_admin","longbow_referral","longbow_details","longbow_analytics","longbow_staking_status","longbow_rebates","longbow_nft_listings","longbow_nft_offers","longbow_nft_loan","longbow_nft_loans"],o=new Set(["netnet_desk_action","netnet_financial_action","netnet_in_kind_exit","longbow_manage_nft","longbow_in_kind_exit","morpho_bundle","morpho_midnight_take","morpho_midnight_action","morpho_midnight_manage","morpho_reallocate","morpho_manage_allocator","morpho_manage","morpho_liquidate","netnet_mint","netnet_redeem","netnet_manage","netnet_force_exit","netnet_stake","netnet_claim_stake","netnet_rebase","longbow_mint","longbow_withdraw_assets","longbow_manage","longbow_force_exit","longbow_stake","longbow_unstake","longbow_claim_rewards","longbow_manage_staking","longbow_claim_rebate","longbow_manage_rebates","longbow_nft_accept_offer","longbow_nft_repay"]),e=n=>n!==void 0&&o.has(n),_=n=>n==="longbow_nft_accept_offer"||n==="longbow_nft_repay";export{t as a,o as b,e as c,_ as d};
|