@oakagentkit/core 0.2.0 → 0.2.1
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/grove/index.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/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/public-reads.js +1 -1
- package/build/dist/api/modules/hookr/relay.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/morpho/bundles.js +1 -1
- package/build/dist/api/modules/morpho/in-kind.js +1 -1
- package/build/dist/api/modules/morpho/index.js +1 -1
- 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/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/priors/coverage.js +1 -1
- package/build/dist/api/modules/priors/discovery.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/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/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/prices.js +1 -1
- package/build/dist/api/signing-registry.js +1 -1
- package/build/dist/api/tokens.d.ts +4 -0
- package/build/dist/api/tokens.js +1 -1
- package/build/dist/chunks/{5VXNQFYJ.js → 22S4SFD5.js} +1 -1
- package/build/dist/chunks/{ITV52TIE.js → 2CS3M32D.js} +1 -1
- package/build/dist/chunks/{R7D256HG.js → 3R3C3CU5.js} +1 -1
- package/build/dist/chunks/{2SNQWKHA.js → 3ZVGHC6S.js} +1 -1
- package/build/dist/chunks/{5FTSKYQH.js → 5LQBHXFA.js} +1 -1
- package/build/dist/chunks/{5HW6JKME.js → 5RKWSFD2.js} +1 -1
- package/build/dist/chunks/6L6DSMCU.js +1 -0
- package/build/dist/chunks/{A25P24G2.js → 72AWP4BM.js} +1 -1
- package/build/dist/chunks/{4IPW5WZ4.js → AZGMF26W.js} +1 -1
- package/build/dist/chunks/{XKRWJCYE.js → BBVKWG65.js} +1 -1
- package/build/dist/chunks/{QZTUMSQY.js → BEPSWFJX.js} +1 -1
- package/build/dist/chunks/{ZCGVBK5K.js → BG4S6MSN.js} +1 -1
- package/build/dist/chunks/{TNRDCBGO.js → D4WURN33.js} +1 -1
- package/build/dist/chunks/{7Z5IM2QZ.js → DD7755AW.js} +1 -1
- package/build/dist/chunks/{IUXOUKQN.js → DGGOO4RN.js} +1 -1
- package/build/dist/chunks/{KQFDLDHL.js → DVKDWXEJ.js} +1 -1
- package/build/dist/chunks/{N6RL3SUZ.js → E24S22BZ.js} +1 -1
- package/build/dist/chunks/FBQWTWPT.js +1 -0
- package/build/dist/chunks/{PJ65ZOQ7.js → FKAA7VUR.js} +1 -1
- package/build/dist/chunks/{K463HFGC.js → GECX5U3F.js} +1 -1
- package/build/dist/chunks/{BFVLBENV.js → GUBB5P6V.js} +1 -1
- package/build/dist/chunks/{SDICP7BT.js → I7NUTSSX.js} +1 -1
- package/build/dist/chunks/{64AF7ECA.js → IAXKPME3.js} +1 -1
- package/build/dist/chunks/{WQZLYX64.js → IRWEY7TQ.js} +1 -1
- package/build/dist/chunks/{WDGPCPQJ.js → IUETZH6I.js} +1 -1
- package/build/dist/chunks/{ANQ43XJA.js → JG24LNUI.js} +1 -1
- package/build/dist/chunks/{U3FMCX3L.js → K7HIKXNT.js} +1 -1
- package/build/dist/chunks/LFN3OODW.js +1 -0
- package/build/dist/chunks/{3ACEWCKZ.js → MEMVFR7Z.js} +1 -1
- package/build/dist/chunks/{DLIOZCEG.js → MNFU7PO3.js} +1 -1
- package/build/dist/chunks/{NO57NGRV.js → N37ZLNCT.js} +1 -1
- package/build/dist/chunks/{NIOBE2LK.js → N3GWFLG6.js} +1 -1
- package/build/dist/chunks/{O5SU2I3G.js → NCEJZWGX.js} +1 -1
- package/build/dist/chunks/{GSI5COTD.js → NKY3DT34.js} +1 -1
- package/build/dist/chunks/{QQWF6A4P.js → NUTHT4FE.js} +1 -1
- package/build/dist/chunks/{JC4SYMBV.js → O7PQDUVT.js} +1 -1
- package/build/dist/chunks/{ZYR5LSVB.js → OMTCWXQR.js} +1 -1
- package/build/dist/chunks/{55NX776C.js → PR2QED25.js} +1 -1
- package/build/dist/chunks/{QCD33HMD.js → Q4RZQCDS.js} +1 -1
- package/build/dist/chunks/{7BTELNNI.js → QR7ALOR4.js} +1 -1
- package/build/dist/chunks/{SQH7A4O3.js → QXFJZGVB.js} +1 -1
- package/build/dist/chunks/{GHDDVBPK.js → QYHJWU5T.js} +1 -1
- package/build/dist/chunks/{Y2IWPNEW.js → RM5W63LO.js} +1 -1
- package/build/dist/chunks/T3MGNKA6.js +1 -0
- package/build/dist/chunks/{FSPNOVKB.js → TDN3C4IG.js} +1 -1
- package/build/dist/chunks/{HRG2VVPY.js → ULJ6E4HP.js} +1 -1
- package/build/dist/chunks/{BXN3MDS4.js → WLACEU2Y.js} +1 -1
- package/build/dist/chunks/{JREVERSC.js → X6G4BD35.js} +1 -1
- package/build/dist/chunks/{6PU2CMQZ.js → XGUKLFBU.js} +1 -1
- package/build/dist/chunks/XUJSQV52.js +1 -0
- package/build/dist/chunks/{LI7FYINH.js → YMB553OJ.js} +1 -1
- package/package.json +2 -2
- package/build/dist/chunks/46ZA2R5L.js +0 -1
- package/build/dist/chunks/74BPMUAG.js +0 -1
- package/build/dist/chunks/G4PDM3MX.js +0 -1
- package/build/dist/chunks/NBRMUFJP.js +0 -1
- package/build/dist/chunks/OJMYESQU.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as J,e as Y}from"./
|
|
1
|
+
import{b as J,e as Y}from"./TDN3C4IG.js";import{d as U,e as D,v as _}from"./JG24LNUI.js";import{a as R,b as Q,c as H,d as L,e as $,f as G,g as W}from"./IAXKPME3.js";import{a as E}from"./EG6M6SSO.js";import{a as S}from"./UWOFA6GV.js";import{c as l,g as B}from"./73N3TOJL.js";import{a as g,i as N}from"./XPFVT2EA.js";import{a as o}from"./5YS5V2LK.js";import{encodeAbiParameters as x,encodeFunctionData as Z,encodePacked as pe,getAddress as ie,parseAbi as V,parseAbiParameters as A,zeroAddress as w}from"viem";var ee=ie("0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7"),te=ie(N[4663].ponsTrade.quoter.address),de=V(["function execute(bytes commands,bytes[] inputs,uint256 deadline) payable"]),me=V(["function approve(address token,address spender,uint160 amount,uint48 expiration)"]),ne=V(["function factory() view returns (address)","function quoteExactInput(bytes path,uint256 amountIn) returns (uint256,uint160[],uint32[],uint256)","function quoteExactOutput(bytes path,uint256 amountOut) returns (uint256,uint160[],uint32[],uint256)"]),M="(address intermediateCurrency,uint24 fee,int24 tickSpacing,address hooks,bytes hookData)",z="(address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks)",oe=V([`function quoteExactInput((address exactCurrency,${M}[] path,uint128 exactAmount) params) returns (uint256,uint256)`,`function quoteExactOutput((address exactCurrency,${M}[] path,uint128 exactAmount) params) returns (uint256,uint256)`,`function quoteExactInputSingle((${z} poolKey,bool zeroForOne,uint128 exactAmount,bytes hookData) params) returns (uint256,uint256)`,`function quoteExactOutputSingle((${z} poolKey,bool zeroForOne,uint128 exactAmount,bytes hookData) params) returns (uint256,uint256)`]),fe=A(`(address exactCurrency,${M}[] path,uint256[] minHopPriceX36,uint128 amount,uint128 limit)`);function ye(u,t,i,d){let a=[],e=d?i:t,r=new Set([e]);for(let n of d?[...u].reverse():u){let s=n.currency0===e?n.currency1:n.currency1===e?n.currency0:void 0;if(!s||r.has(s))throw new o("V4 poolKeys must form a continuous route without repeated currencies.");a.push({intermediateCurrency:s,fee:n.fee,tickSpacing:n.tickSpacing,hooks:n.hooks,hookData:"0x"}),e=s,r.add(e)}if(e!==(d?t:i))throw new o("V4 route does not end at the requested currency.");return a}var le=A(`(${z} poolKey,bool zeroForOne,uint128 amount,uint128 limit,uint256 minHopPriceX36,bytes hookData)`),he=A("address recipient,uint256 amount,uint256 limit,bytes path,bool payerIsUser,uint256[] minHopPriceX36"),xe=A("address recipient,uint256 amount,uint256 limit,address[] path,bool payerIsUser,uint256[] minHopPriceX36"),re=A("address,uint256"),be=A("bytes,bytes[]");function we(u,t,i){let d=i?[...u].reverse():u,a=i?[...t].reverse():t,e=d[0];return a.forEach((r,n)=>{e=`${e}${pe(["uint24","address"],[r,d[n+1]]).slice(2)}`}),e}var ue={version:{type:"string",enum:["v2","v3","v4"]},tokenIn:l,tokenOut:l,path:{type:"array",minItems:2,maxItems:6,items:l},fees:{type:"array",items:{type:"integer",minimum:0,maximum:1e6}},poolKeys:{type:"array",minItems:1,maxItems:5,items:{type:"object",required:["currency0","currency1","fee","tickSpacing","hooks"],properties:{currency0:l,currency1:l,fee:{type:"integer"},tickSpacing:{type:"integer"},hooks:l},additionalProperties:!1}},poolKey:{type:"object",properties:{currency0:l,currency1:l,fee:{type:"integer"},tickSpacing:{type:"integer"},hooks:l},required:["currency0","currency1","fee","tickSpacing","hooks"],additionalProperties:!1},amountIn:S(),amountOut:S(),minAmountOut:S(),maxAmountIn:S(),slippageBps:{type:"integer",minimum:0,maximum:9999}};async function Ae(u,t,i,d=!1){W(t,Object.keys(ue));let a=t.version;if(!["v2","v3","v4"].includes(String(a)))throw new o("Provide version v2, v3 or v4.");let e=t.amountOut!==void 0;if(t.amountIn!==void 0===e)throw new o("Provide exactly one of amountIn or amountOut.");if(e&&t.minAmountOut!==void 0||!e&&t.maxAmountIn!==void 0)throw new o("Use maxAmountIn for exact output, minAmountOut for exact input.");let r=R(e?t.amountOut:t.amountIn,e?"amountOut":"amountIn",a==="v4"?128:160),n=H(t.tokenIn),s=H(t.tokenOut);if(n===s)throw new o("Swap requires different input and output currencies.");let v=u.clientFor(g),y=await v.getBlock(),F=L(t.slippageBps),I,m,q,k,h,c,C;if(a==="v4"){if(t.path!==void 0||t.fees!==void 0)throw new o("V4 uses poolKey or poolKeys; omit path and fees.");if(t.poolKey===void 0==(t.poolKeys===void 0))throw new o("Provide poolKey or poolKeys, not both.");if(t.poolKeys!==void 0){if(!Array.isArray(t.poolKeys)||t.poolKeys.length<1||t.poolKeys.length>5)throw new o("Provide 1 to 5 v4 poolKeys.");let p=t.poolKeys.map(P=>_(P));I=ye(p,n,s,e),m=(await v.simulateContract({address:te,abi:oe,functionName:e?"quoteExactOutput":"quoteExactInput",args:[{exactCurrency:e?s:n,path:I,exactAmount:r}],account:i,gas:E,blockNumber:y.number})).result[0]}else{if(h=_(t.poolKey),![h.currency0,h.currency1].includes(n)||![h.currency0,h.currency1].includes(s))throw new o("PoolKey currencies differ from the requested swap.");m=(await v.simulateContract({address:te,abi:oe,functionName:e?"quoteExactOutputSingle":"quoteExactInputSingle",args:[{poolKey:h,zeroForOne:n===h.currency0,exactAmount:r,hookData:"0x"}],account:i,gas:E,blockNumber:y.number})).result[0]}k="0x10"}else{if(t.poolKey!==void 0||t.poolKeys!==void 0||n===w||s===w)throw new o("V2/v3 routes use ERC-20 tokens; wrap ETH to WETH first.");if(c=Array.isArray(t.path)?t.path.map(Q):[n,s],c.length<2||c.length>6||c[0]!==n||c.at(-1)!==s||new Set(c).size!==c.length||c.includes(w))throw new o("Path must contain 2 to 6 distinct ERC-20 tokens in input-to-output order.");if(a==="v2"){if(t.fees!==void 0)throw new o("V2 fees are fixed by the pair; omit fees.");let p=await v.readContract({address:J,abi:Y,functionName:e?"getAmountsIn":"getAmountsOut",args:[r,c],blockNumber:y.number});m=e?p[0]:p.at(-1),k=e?"0x09":"0x08"}else{let p=t.fees;if(!Array.isArray(p)||p.length!==c.length-1||p.some(P=>typeof P!="number"||!Number.isInteger(P)||P<0||P>1e6))throw new o("Provide one integer v3 fee in pips per path hop.");if(!B(await v.readContract({address:ee,abi:ne,functionName:"factory",blockNumber:y.number}),N[4663].uniswap.v3_factory.address))throw new o("V3 quoter is not configured for the pinned factory.");C=we(c,p,e),m=(await v.simulateContract({address:ee,abi:ne,functionName:e?"quoteExactOutput":"quoteExactInput",args:[C,r],account:i,gas:E,blockNumber:y.number})).result[0],k=e?"0x01":"0x00"}}if(m<=0n)throw new o("No positive Uniswap quote is available.");let T=e?t.maxAmountIn:t.minAmountOut;if(!d&&T===void 0)throw new o(`Provide ${e?"maxAmountIn":"minAmountOut"} from uniswap_quote to confirm the trade bound.`);let f=T===void 0?e?(m*BigInt(1e4+F)+9999n)/10000n:m*BigInt(1e4-F)/10000n:R(T,e?"maxAmountIn":"minAmountOut",a==="v4"?128:160);if(f<=0n||(e?f<m:f>m))throw new o("The fresh quote does not satisfy the confirmed swap bound.");let b=e?f:r;if(b>=1n<<160n||a==="v4"&&(b>=1n<<128n||f>=1n<<128n))throw new o("Swap bounds exceed the router amount range.");let[ae,se]=await Promise.all([$(u,n,y.number),$(u,s,y.number)]),j={version:a,input:{token:ae,amount:(e?m:r).toString()},output:{token:se,amount:(e?r:m).toString()},[e?"maxAmountIn":"minAmountOut"]:f.toString(),blockNumber:y.number.toString(),expiresAt:(y.timestamp+60n).toString()};if(d)return{quote:j,summary:"Read-only on-chain quote. Repeat the same route with the returned bound in uniswap_swap; execution gets a fresh quote and preview."};let O=y.timestamp+300n,K=[];if(n!==w&&(K.push(u.approval(n,U,b.toString(),g)),K.push(u.unsignedTx({to:U,data:Z({abi:me,functionName:"approve",args:[n,D,b,Number(O)]}),value:"0",chainId:g,description:`Permit exactly ${b} input base units to Universal Router until ${O}.`}))),a==="v4"){let p=I?x(fe,[{exactCurrency:e?s:n,path:I,minHopPriceX36:[],amount:r,limit:f}]):x(le,[{poolKey:h,zeroForOne:n===h.currency0,amount:r,limit:f,minHopPriceX36:0n,hookData:"0x"}]);q=x(be,[I?e?"0x090c0f":"0x070c0f":e?"0x080c0f":"0x060c0f",[p,x(re,[n,b]),x(re,[s,e?r:f])]])}else a==="v2"?q=x(xe,[i,r,f,c,!0,[]]):q=x(he,[i,r,f,C,!0,[]]);let X=[q];return n===w&&e&&(k=`${k}04`,X.push(x(A("address,address,uint256"),[w,i,0n]))),K.push(u.unsignedTx({to:D,data:Z({abi:de,functionName:"execute",args:[k,X,O]}),value:n===w?b.toString():"0",chainId:g,description:`Uniswap ${a} ${e?"exact output":"exact input"} swap; recipient ${i}; deadline ${O}.`})),{...await G(u,K,i,"Swap through Universal Router 2.1.2. Exact approvals, fixed output/input bound and five-minute on-chain deadline. Venue fees included; gas excluded."),quote:j}}function Ee(u){return{tools:[!0,!1].map(t=>({name:t?"uniswap_quote":"uniswap_swap",inputSchema:{type:"object",additionalProperties:!1,required:["version","tokenIn","tokenOut"],properties:ue},execute:(i,d)=>Ae(u,i,d,t)}))}}export{ee as a,te as b,de as c,me as d,ne as e,oe as f,fe as g,ye as h,le as i,he as j,xe as k,we as l,Ae as m,Ee as n};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as B}from"./
|
|
1
|
+
import{a as B}from"./XGUKLFBU.js";import{c as _}from"./5RKWSFD2.js";import{c as V}from"./7B5UH2VS.js";import{c as P}from"./T6MTTMLQ.js";import{b as M}from"./YMB553OJ.js";import{k as R}from"./O47JXRXN.js";import{b as H,o as F}from"./CAU44UWP.js";import{b as W}from"./AXYOJBX6.js";import{a as k}from"./6IM6A5VA.js";import{a as G}from"./UWOFA6GV.js";import{g as A,m as I,n as O}from"./73N3TOJL.js";import{a as m,i as U}from"./XPFVT2EA.js";import{a as u}from"./5YS5V2LK.js";import{encodeFunctionData as C,getAddress as b,parseAbi as q}from"viem";var c=q(["function asset() view returns (address)","function decimals() view returns (uint8)","function totalAssets() view returns (uint256)","function performanceFee() view returns (uint256)","function managementFee() view returns (uint256)","function balanceOf(address) view returns (uint256)","function previewDeposit(uint256 assets) view returns (uint256)","function previewRedeem(uint256 shares) view returns (uint256)","function deposit(uint256 assets,address receiver) returns (uint256 shares)","function redeem(uint256 shares,address receiver,address owner) returns (uint256 assets)"]),J=q(["function deposit() payable"]),f=U[m],T=[{key:"core",name:"Longbow Core USDG",vault:f.vaults.longbowCore.address,asset:f.tokens.USDG.address,symbol:"USDG",decimals:6},{key:"frontier",name:"Longbow Frontier USDG",vault:f.vaults.longbowFrontier.address,asset:f.tokens.USDG.address,symbol:"USDG",decimals:6},{key:"eth",name:"Longbow ETH",vault:f.vaults.longbowEth.address,asset:f.tokens.WETH.address,symbol:"WETH",decimals:18}],D=[{key:"v1-usdg",name:"Longbow USDG Core V1 (legacy)",vault:b("0x8cb8AA35228c96C1C4E956E69AbAEBCc2aA7Dcfe"),asset:f.tokens.USDG.address,symbol:"USDG",decimals:6},{key:"v1-weth",name:"Longbow WETH Core V1 (legacy)",vault:b("0x93777a9b917be3c8259c84456222f43a01dd6492"),asset:f.tokens.WETH.address,symbol:"WETH",decimals:18}];function x(a,i){return O(a,`${i} must be positive and within the uint256 range.`,{notString:`${i} must be a positive integer string in base units.`,positive:!0})}function h(a){return I(a,"Longbow returned an invalid integer response.")}function j(a,i=!1){if(typeof a!="string")throw new u("Provide the address of a current Longbow vault.");let p=D.find(y=>A(y.vault,a));if(p&&!i)throw new u("Longbow V1 vaults are withdraw-only; deposit into a current V2 vault from longbow_list instead.");let g=p??T.find(y=>A(y.vault,a));if(!g)throw new u("Provide the address of a current Longbow vault, or a Longbow V1 vault to withdraw from. Other vaults are not supported.");return g}function L(a,i){if(Object.keys(a).some(p=>!i.includes(p)))throw new u("Unsupported Longbow input. Use the fields in the tool schema.")}var Q=a=>{async function i(t){try{return await t()}catch(e){throw new u(a.plainError(e))}}async function p(){let t=a.clientFor(m);if(await t.getChainId()!==m)throw new u("Longbow requires a client on chain 4663.");return t}async function g(t,e){let[o,r,s]=await Promise.all([t.readContract({address:e.vault,abi:c,functionName:"asset"}),t.readContract({address:e.vault,abi:c,functionName:"decimals"}),t.readContract({address:e.asset,abi:c,functionName:"decimals"})]);if(typeof o!="string"||!A(o,e.asset))throw new u("Longbow vault asset does not match the recorded deployment.");if(r!==18||s!==e.decimals)throw new u("Longbow token decimals do not match the recorded deployment.");return{vault:e.vault,key:e.key,name:e.name,asset:{address:b(e.asset),symbol:e.symbol,decimals:s,chainId:m},share:{address:e.vault,symbol:`${e.key} shares`,decimals:r,chainId:m}}}async function y(t,e,o,r){let s=F(o.amount,H);if(BigInt(s)===0n)throw new u("The expected output is too small for a nonzero simulation minimum.");let n=await a.preview(t,e);if(n.changes.filter(l=>l.token.chainId===o.token.chainId&&A(l.token.address,o.token.address)&&l.token.decimals===o.token.decimals).reduce((l,v)=>l+BigInt(v.amount),0n)<BigInt(s))throw new u("Longbow simulated output is below the expected minimum.");let d=n.changes.map(({token:l,amount:v})=>{let N=v.startsWith("-");return`${N?"-":"+"}${a.formatAmount(N?v.slice(1):v,l.decimals)} ${l.symbol} (${l.address}, chain ${l.chainId})`}).join("; ");return{txs:t,preview:n,expectedOutput:o,minimumOutput:{token:o.token,amount:s},minimumEnforcedOnchain:!1,summary:`${r} ${d}. Simulation only; no on-chain minimum is enforced by these ERC-4626 calls. ${n.summary}`}}async function z(t){L(t,[]);let e=await p();return Promise.all(T.map(async o=>{let[r,s,n,w]=await Promise.all([g(e,o),e.readContract({address:o.vault,abi:c,functionName:"totalAssets"}),e.readContract({address:o.vault,abi:c,functionName:"performanceFee"}),e.readContract({address:o.vault,abi:c,functionName:"managementFee"})]);return{...r,totalAssets:{token:r.asset,amount:h(s).toString()},fees:{performanceFeeE18:h(n).toString(),managementFeeE18:h(w).toString()},caveat:"Morpho V2 max views can be zero even when writes succeed. Simulate the requested action; listing does not prove availability."}}))}async function Y(t,e){L(t,["vault","amount","wrapEth"]),k(e);let o=j(t.vault),r=x(t.amount,"Deposit amount");if(t.wrapEth!==void 0&&typeof t.wrapEth!="boolean")throw new u("wrapEth must be a boolean.");if(t.wrapEth&&!A(o.asset,f.tokens.WETH.address))throw new u("Only a WETH vault accepts explicit ETH wrapping.");let s=await p(),n=await g(s,o),w=h(await s.readContract({address:n.vault,abi:c,functionName:"previewDeposit",args:[r]})),d=[];return t.wrapEth&&d.push(a.unsignedTx({to:n.asset.address,data:C({abi:J,functionName:"deposit"}),value:r.toString(),chainId:m,description:`Wrap ${a.formatAmount(r.toString(),18)} ETH into WETH for ${n.name}.`})),d.push(a.approval(n.asset.address,n.vault,r.toString(),m)),d.push(a.unsignedTx({to:n.vault,data:C({abi:c,functionName:"deposit",args:[r,b(e)]}),value:"0",chainId:m,description:`Deposit ${a.formatAmount(r.toString(),n.asset.decimals)} ${n.asset.symbol} into ${n.name}.`})),y(d,e,{token:n.share,amount:w.toString()},`Deposit into ${n.name}.`)}async function K(t,e){L(t,["vault","shares"]),k(e);let o=j(t.vault,!0),r=t.shares==="all"?void 0:x(t.shares,"Redeem shares"),s=await p(),n=await g(s,o),w=h(await s.readContract({address:n.vault,abi:c,functionName:"balanceOf",args:[e]})),d=r??w;if(d===0n||d>w)throw new u("The wallet has insufficient Longbow shares for this redemption.");let l=h(await s.readContract({address:n.vault,abi:c,functionName:"previewRedeem",args:[d]})),v=[a.unsignedTx({to:n.vault,data:C({abi:c,functionName:"redeem",args:[d,b(e),b(e)]}),value:"0",chainId:m,description:`Redeem ${a.formatAmount(d.toString(),n.share.decimals)} shares from ${n.name} into ${n.asset.symbol}.`})];return y(v,e,{token:n.asset,amount:l.toString()},`Redeem from ${n.name}.`)}let E={type:"string",enum:T.map(t=>t.vault),description:"Current vault address on chain 4663."},$=G("Positive integer base units, never a human-unit decimal."),S=(t,e,o,r)=>({name:t,inputSchema:{type:"object",properties:e,required:o,additionalProperties:!1},execute:(s,n)=>i(()=>r(s,n))});return{tools:[S("longbow_list",{},[],z),S("longbow_deposit",{vault:E,amount:$,wrapEth:{type:"boolean",default:!1,description:"Explicitly wrap this amount of native ETH before depositing into the WETH vault."}},["vault","amount"],Y),S("longbow_withdraw",{vault:{...E,enum:[...E.enum,...D.map(t=>t.vault)],description:"Current vault address, or a Longbow V1 vault (withdraw-only) on chain 4663."},shares:{anyOf:[$,{const:"all"}],description:"Share base units (18 decimals), or all for the fresh wallet share balance. Returns the underlying asset, including WETH."}},["vault","shares"],K)],positions:t=>i(async()=>{k(t);let e=await p();return(await Promise.all([...T,...D].map(async r=>{let s=await g(e,r),n=h(await e.readContract({address:s.vault,abi:c,functionName:"balanceOf",args:[t]}));if(n===0n)return[];let w=h(await e.readContract({address:s.vault,abi:c,functionName:"previewRedeem",args:[n]}));return[{module:"longbow",id:`${m}:${s.vault.toLowerCase()}`,chainId:m,assets:[{token:s.asset,amount:w.toString()}],description:`${s.name}: ${a.formatAmount(n.toString(),s.share.decimals)} shares (${s.share.address}, ${s.share.decimals} decimals). Underlying is a preview, not a guaranteed redemption.`}]}))).flat()})}};function we(a){return W("longbow",[Q(a),P(a),R(a),V(a),M(a),_(a),{tools:B(a,"longbow",T.map(i=>({vault:i.vault,asset:{address:b(i.asset),symbol:i.symbol,decimals:i.decimals,chainId:m}})))}])}export{D as a,Q as b,we as c};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as n,f as a,g as s,h as l,i as u}from"./EC5W3UZD.js";import{c as e}from"./
|
|
1
|
+
import{d as n,f as a,g as s,h as l,i as u}from"./EC5W3UZD.js";import{c as e}from"./T3MGNKA6.js";var m="In-kind exits are a separate unsupported flow.";function b(t,i){return n(t,i,e)}function V(t,i,o,r,x,p){return a(t,i,o,r,x,p,e)}function A(t,i,o){return s(t,i,o,e,m)}function P(t){return l(t,e.symbol)}function S(t,i,o,r){u(t,i,o,r,e)}export{b as a,V as b,A as c,P as d,S as e};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as c,b as T,e as v,f as F,g as I}from"./
|
|
1
|
+
import{a as c,b as T,e as v,f as F,g as I}from"./IAXKPME3.js";import{a as l}from"./UWOFA6GV.js";import{c as A,g,h as S}from"./73N3TOJL.js";import{a as h}from"./XPFVT2EA.js";import{a as d}from"./5YS5V2LK.js";import{encodeFunctionData as y,getAddress as M,parseAbi as j,parseAbiItem as D,zeroAddress as H}from"viem";var x=M("0x000000001f26a0044baa66024e7b6599c61963f8"),_=D("event AuctionCreated(address indexed auction,address indexed token,uint256 amount,bytes configData)"),n=j(["function currency() view returns (address)","function token() view returns (address)","function startBlock() view returns (uint64)","function endBlock() view returns (uint64)","function claimBlock() view returns (uint64)","function validationHook() view returns (address)","function clearingPrice() view returns (uint256)","function isGraduated() view returns (bool)","function bids(uint256) view returns ((uint64 startBlock,uint24 startCumulativeMps,uint64 exitedBlock,uint256 maxPrice,address owner,uint256 amountQ96,uint256 tokensFilled))","function submitBid(uint256 maxPrice,uint128 amount,address owner,uint256 prevTickPrice,bytes hookData) payable returns (uint256)","function exitBid(uint256)","function exitPartiallyFilledBid(uint256,uint64,uint64)","function claimTokens(uint256)","function claimTokensBatch(address,uint256[])","function checkpoint()","function sweepCurrency()","function sweepUnsoldTokens()"]);async function $(s,B){let o=T(B.auction),t=c(B.creationBlock,"creationBlock",64,!0),e=await s.getLogs({address:x,event:_,args:{auction:o},fromBlock:t,toBlock:t,strict:!0});if(e.length!==1||!g(e[0].address,x)||!S(e[0].args.auction,o))throw new d("Auction has no matching AuctionCreated event at the pinned CCA factory and creationBlock.");return o}async function Q(s,B){let o=s.clientFor(h),t=await $(o,B),e=await o.getBlockNumber(),[a,k,i,b,m,C,u,w]=await Promise.all([o.readContract({address:t,abi:n,functionName:"currency",blockNumber:e}),o.readContract({address:t,abi:n,functionName:"token",blockNumber:e}),o.readContract({address:t,abi:n,functionName:"startBlock",blockNumber:e}),o.readContract({address:t,abi:n,functionName:"endBlock",blockNumber:e}),o.readContract({address:t,abi:n,functionName:"claimBlock",blockNumber:e}),o.readContract({address:t,abi:n,functionName:"validationHook",blockNumber:e}),o.readContract({address:t,abi:n,functionName:"clearingPrice",blockNumber:e}),o.readContract({address:t,abi:n,functionName:"isGraduated",blockNumber:e})]);return{auction:t,currency:a,saleToken:k,startBlock:i,endBlock:b,claimBlock:m,validationHook:C,clearingPrice:u,graduated:w,blockNumber:e}}var U={auction:A,creationBlock:l(),bidId:l(),amount:l(),maxPrice:l(),prevTickPrice:l(),lastFullyFilledCheckpointBlock:l(),outbidBlock:l(),mode:{type:"string",enum:["full","partial"]},bidIds:{type:"array",minItems:1,maxItems:50,items:l()}};function R(s){let o=["status","bid","exit","claim","checkpoint","sweep_currency","sweep_tokens"].map(t=>({name:`uniswap_auction_${t}`,inputSchema:{type:"object",additionalProperties:!1,required:["auction","creationBlock",...t==="bid"?["amount","maxPrice","prevTickPrice"]:t==="exit"?["bidId","mode"]:[]],properties:U},async execute(e,a){I(e,["auction","creationBlock",...t==="bid"?["amount","maxPrice","prevTickPrice"]:t==="exit"?["bidId","mode","lastFullyFilledCheckpointBlock","outbidBlock"]:t==="claim"?["bidId","bidIds"]:t==="status"?["bidId"]:[]]);let i=await Q(s,e),b=s.clientFor(h),[m,C]=await Promise.all([v(s,i.currency,i.blockNumber),v(s,i.saleToken,i.blockNumber)]),u=e.bidId===void 0?void 0:await b.readContract({address:i.auction,abi:n,functionName:"bids",args:[c(e.bidId,"bidId",256,!0)],blockNumber:i.blockNumber});if(t==="status")return{auction:i.auction,paymentToken:m,saleToken:C,startBlock:i.startBlock.toString(),endBlock:i.endBlock.toString(),claimBlock:i.claimBlock.toString(),validationHook:i.validationHook,clearingPrice:i.clearingPrice.toString(),graduated:i.graduated,...u?{bid:{...u,startBlock:u.startBlock.toString(),exitedBlock:u.exitedBlock.toString(),maxPrice:u.maxPrice.toString(),amountQ96:u.amountQ96.toString(),tokensFilled:u.tokensFilled.toString()}}:{},summary:"CCA prices use currency-base-units per sale-token-base-unit in Q96. Clearing price/graduation reflect the latest checkpoint and may lag the head."};let w=[],f,N=0n;if(t==="bid"){if(i.validationHook!==H)throw new d("This auction has a validation hook. Its validation/signing contract is not configured; do not pass an off-chain signature manually.");if(i.blockNumber<i.startBlock||i.blockNumber>=i.endBlock)throw new d("Auction is not in its bidding window.");let r=c(e.amount,"amount",128),p=c(e.maxPrice,"maxPrice"),P=c(e.prevTickPrice,"prevTickPrice",256,!0);if(p<=i.clearingPrice)throw new d("Bid maxPrice must be above the checkpoint clearing price.");i.currency===H?N=r:w.push(s.approval(i.currency,i.auction,r.toString(),h)),f=y({abi:n,functionName:"submitBid",args:[p,r,a,P,"0x"]})}else if(t==="exit"){if(!u||!g(u.owner,a))throw new d("Only exit a bid owned by the signing wallet.");let r=c(e.bidId,"bidId",256,!0);if(e.mode==="full"){if(e.lastFullyFilledCheckpointBlock!==void 0||e.outbidBlock!==void 0)throw new d("Full exit takes no checkpoint hints.");f=y({abi:n,functionName:"exitBid",args:[r]})}else if(e.mode==="partial")f=y({abi:n,functionName:"exitPartiallyFilledBid",args:[r,c(e.lastFullyFilledCheckpointBlock,"lastFullyFilledCheckpointBlock",64,!0),c(e.outbidBlock,"outbidBlock",64,!0)]});else throw new d("Choose full or partial exit explicitly; partial exits require checkpoint hints.")}else if(t==="claim"){if(e.bidId===void 0==(e.bidIds===void 0))throw new d("Provide bidId or bidIds, not both.");let r=e.bidIds===void 0?[c(e.bidId,"bidId",256,!0)]:Array.isArray(e.bidIds)?e.bidIds.map(p=>c(p,"bidIds",256,!0)):[];if(r.length<1||r.length>50||new Set(r.map(String)).size!==r.length)throw new d("Provide 1 to 50 unique bid IDs.");for(let p of r){let P=await b.readContract({address:i.auction,abi:n,functionName:"bids",args:[p],blockNumber:i.blockNumber});if(!g(P.owner,a))throw new d("Claimed tokens must belong to the signing wallet.")}f=y({abi:n,functionName:"claimTokensBatch",args:[a,r]})}else f=y({abi:n,functionName:t==="checkpoint"?"checkpoint":t==="sweep_currency"?"sweepCurrency":"sweepUnsoldTokens"});return w.push(s.unsignedTx({to:i.auction,data:f,value:N.toString(),chainId:h,description:`CCA ${t} on factory-verified auction ${i.auction}. Bid owner ${a}.`})),F(s,w,a,`CCA ${t}; checkpoint/exit/claim eligibility and creator-only sweeps are checked by the contract in preview. Sweeps pay the auction's immutable funds/tokens recipient, not an arbitrary recipient.`)}}));return o.push({name:"uniswap_auctions",inputSchema:{type:"object",additionalProperties:!1,properties:{fromBlock:l(),toBlock:l()}},async execute(t){I(t,["fromBlock","toBlock"]);let e=s.clientFor(h),a=await e.getBlockNumber(),k=t.fromBlock===void 0?a>9999n?a-9999n:0n:c(t.fromBlock,"fromBlock",64,!0),i=t.toBlock===void 0?a:c(t.toBlock,"toBlock",64,!0);if(k>i||i>a||i-k>=10000n)throw new d("Scan an ordered range of at most 10000 blocks, ending at or before the head.");let b=await e.getLogs({address:x,event:_,fromBlock:k,toBlock:i,strict:!0});return{factory:x,fromBlock:k.toString(),toBlock:i.toString(),auctions:b.map(m=>({auction:m.args.auction,token:m.args.token,amount:m.args.amount.toString(),creationBlock:m.blockNumber.toString()})),summary:"Factory-verified auctions in this block window only. An empty result does not establish that no auctions exist outside it. Scan earlier windows for older launches."}}}),{tools:o}}export{x as a,_ as b,n as c,$ as d,Q as e,R as f};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as r,e as x}from"./HNMOB76J.js";import{n as F}from"./T3MGNKA6.js";import{a as k}from"./UWOFA6GV.js";import{a as p}from"./XPFVT2EA.js";import{a as d}from"./5YS5V2LK.js";import{encodeFunctionData as C,getAddress as b,parseAbi as E}from"viem";var s={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 S="(address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks)",w="(address tokenIn,address tokenOut,uint24 fee,address recipient,uint256 amountIn,uint256 amountOutMinimum,uint160 sqrtPriceLimitX96)",D=E([`function swapExactIn(${S} key,bool zeroForOne,uint128 amountIn,uint256 minOut,uint160 sqrtPriceLimitX96,address to,uint256 deadline) returns (uint256 paid,uint256 out)`,`function exactInputSingle(${w} params) payable returns (uint256 amountOut)`,"function multicall(uint256 deadline,bytes[] data) payable returns (bytes[] results)"]),O=E(["function quoteExactInputSingle((address tokenIn,address tokenOut,uint256 amountIn,uint24 fee,uint160 sqrtPriceLimitX96) params) returns (uint256 amountOut,uint160 sqrtPriceX96After,uint32 initializedTicksCrossed,uint256 gasEstimate)"]),P=E([`function quoteExactInputSingle((${S} poolKey,bool zeroForOne,uint128 exactAmount,bytes hookData) params) returns (uint256 amountOut,uint256 gasEstimate)`]),q="0x0000000000000000000000000000000000000000",A={symbol:{type:"string",enum:s.tokens.map(o=>o.symbol)},side:{type:"string",enum:["buy","sell"]},amountIn:k()};async function v(o,i){let t=s.tokens.find(c=>c.symbol===o.symbol);if(!t||o.side!=="buy"&&o.side!=="sell")throw new d("Choose a published stock symbol and buy or sell.");let e=await F(String(o.symbol),{context:i});if(e.kind!=="official_stock"||e.address!==b(t.token))throw new d("Published Priors stock pool does not match the official stock contract address. Retry after the pool mapping is updated.");let n=x(o.amountIn,"amountIn",128);if(n===0n)throw new d("amountIn must be positive base units.");return{token:t,identity:e,amount:n,input:o.side==="buy"?r.usdg:b(t.token),output:o.side==="buy"?b(t.token):r.usdg}}function B(o,i,t){let[e,n]=BigInt(r.usdg)<BigInt(o)?[r.usdg,o]:[o,r.usdg];return{currency0:e,currency1:n,fee:i,tickSpacing:t,hooks:q}}function j(o){return{tools:[{name:"priors_stock_quote",inputSchema:{type:"object",properties:A,required:Object.keys(A),additionalProperties:!1},async execute(i,t){if(o.network==="testnet")throw new d("Priors stock swaps require mainnet chain 4663.");let e=await v(i,o),n=o.clientFor(p),c=await n.getBlockNumber({cacheTime:0}),l=await Promise.all(e.token.pools.map(async(a,u)=>{try{let f=B(b(e.token.token),a.fee,"tickSpacing"in a?a.tickSpacing:0),m=a.v===3?await n.simulateContract({address:b(s.v3.quoter),abi:O,functionName:"quoteExactInputSingle",args:[{tokenIn:e.input,tokenOut:e.output,amountIn:e.amount,fee:a.fee,sqrtPriceLimitX96:0n}],account:t,blockNumber:c}):await n.simulateContract({address:b(s.v4.quoter),abi:P,functionName:"quoteExactInputSingle",args:[{poolKey:f,zeroForOne:e.input===f.currency0,exactAmount:e.amount,hookData:"0x"}],account:t,blockNumber:c});return{poolIndex:u,version:a.v,amountOut:m.result[0].toString()}}catch(f){return{poolIndex:u,version:a.v,error:o.plainError(f)}}}));return{chainId:p,blockNumber:c.toString(),token:e.identity,quotes:l,warning:"Use explicit minimum output with priors_stock_swap and inspect its preview. Issuer restrictions can prevent sale. Quote is no promise of an exit; local regional eligibility remains required."}}},{name:"priors_stock_swap",inputSchema:{type:"object",properties:{...A,poolIndex:{type:"integer",minimum:0,maximum:2},minOut:k(),deadline:k(),eligible:{type:"boolean",description:"Operator/user affirms eligibility for this stock-token trade in their jurisdiction."}},required:[...Object.keys(A),"poolIndex","minOut","deadline","eligible"],additionalProperties:!1},async execute(i,t){if(o.network==="testnet")throw new d("Priors stock swaps require mainnet chain 4663.");if(t=b(t),i.eligible!==!0)throw new d("Confirm local eligibility for Robinhood stock tokens before trading.");let e=await v(i,o),n=x(i.minOut,"minOut"),c=x(i.deadline,"deadline"),l=BigInt(Math.floor(Date.now()/1e3));if(n===0n||c<=l||c>l+1800n||!Number.isSafeInteger(i.poolIndex))throw new d("Provide positive minOut, poolIndex and a deadline within 30 minutes.");let a=e.token.pools[i.poolIndex];if(!a)throw new d("No published pool at that index. Read priors_stock_quote.");let u=B(b(e.token.token),a.fee,"tickSpacing"in a?a.tickSpacing:0),f=e.input===u.currency0,m=b(a.v===3?s.v3.router:s.v4.swapper),g=a.v===3?C({abi:D,functionName:"multicall",args:[c,[C({abi:D,functionName:"exactInputSingle",args:[{tokenIn:e.input,tokenOut:e.output,fee:a.fee,recipient:t,amountIn:e.amount,amountOutMinimum:n,sqrtPriceLimitX96:0n}]})]]}):C({abi:D,functionName:"swapExactIn",args:[u,f,e.amount,n,f?4295128740n:1461446703485210103287273052203988822378723970341n,t,c]}),y=[o.approval(e.input,m,e.amount.toString(),p),o.unsignedTx({to:m,data:g,value:"0",chainId:p,description:`Priors stock ${i.side}: ${e.amount} input base units; minimum ${n}; pinned V${a.v} pool.`})],h=await o.preview(y,t);return{txs:y,expiresAt:c.toString(),summary:`Stock ${i.side} ${i.symbol}: input ${e.amount} base units (${e.input}), minimum output ${n} (${e.output}), receiver ${t}, deadline ${c}. Issuer transfer/sale restrictions apply. Price impact is not measured by this builder; inspect minOut and the preview. ${h.summary}`}}}]}}export{D as a,j as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as _,e as oe,f as M,h as te,i as N}from"./R7D256HG.js";import{E as P,a as Z,b as J,c as v,f as C,h as b,m as A,q as x,s as Q,u as ee}from"./ANQ43XJA.js";import{f as D,g as Y}from"./3ACEWCKZ.js";import{a as $}from"./VJ3W2V3B.js";import{a as G}from"./6IM6A5VA.js";import{g as S}from"./73N3TOJL.js";import{a as w}from"./XPFVT2EA.js";import{a as k,b as X,d as j}from"./5YS5V2LK.js";import{decodeAbiParameters as fe,getAddress as y,pad as se,parseAbi as ae,parseAbiParameters as me,toEventSelector as he,toHex as ne,zeroAddress as de}from"viem";var ge=he("Initialize(bytes32,address,address,uint24,int24,address,uint160,int24)"),ke=me("uint24 fee, int24 tickSpacing, address hooks, uint160 sqrtPriceX96, int24 tick"),V=10000000n,ce=25,H=200,L=16,we=3e3,Pe=500,ye=500n,E=100,B=ae(["function getSlot0(bytes32 poolId) view returns (uint160 sqrtPriceX96, int24 tick, uint24 protocolFee, uint24 lpFee)","function getLiquidity(bytes32 poolId) view returns (uint128 liquidity)"]),be=ae(["function poolKeys(bytes25 poolId) view returns (address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks)"]);function Ae(o){let e=o.trim().toLowerCase();return e==="eth"||e==="native"||e===de||e===$.toLowerCase()}function ie(o,e){if(o!=null){if(typeof o!="string")throw new k(`${e} must be a token address, or "eth" for native ETH.`);return Ae(o)?{eth:!0}:(G(o),{eth:!1,address:y(o)})}}var le=(o,e)=>BigInt(o)<BigInt(e)?-1:BigInt(o)>BigInt(e)?1:0;function T(o){return{address:o.address,symbol:o.symbol,decimals:o.decimals}}async function ue(o,e,r,i,d){let[t,n,u]=await Promise.all([o.readContract({address:e,abi:N,functionName:"slot0"}),o.readContract({address:e,abi:N,functionName:"liquidity"}),o.readContract({address:e,abi:N,functionName:"tickSpacing"})]),s=BigInt(t[0]);return{version:"v3",id:e,token0:T(r),token1:T(i),fee:d,tickSpacing:Number(u),initialized:s>0n,liquidity:BigInt(n).toString(),sqrtPriceX96:s.toString(),tick:Number(t[1]),price:s>0n?D(s,r.decimals,i.decimals):"0",addSupported:!0}}async function q(o,e,r){let i=r??Q(e),[d,t]=await Promise.all([P(o,e.currency0,w),P(o,e.currency1,w)]),[n,u]=await Promise.all([o.readContract({address:v,abi:B,functionName:"getSlot0",args:[i]}),o.readContract({address:v,abi:B,functionName:"getLiquidity",args:[i]})]),s=BigInt(n[0]),m=ee(e,Number(n[3]));return{version:"v4",id:i,token0:T(d),token1:T(t),fee:e.fee,tickSpacing:e.tickSpacing,hooks:y(e.hooks),initialized:s>0n,liquidity:BigInt(u).toString(),sqrtPriceX96:s.toString(),tick:Number(n[1]),price:s>0n?D(s,d.decimals,t.decimals):"0",addSupported:x.has(e.hooks.toLowerCase()),feeNote:m.feeNote,...x.has(e.hooks.toLowerCase())?{}:{note:`Hook ${y(e.hooks)} is not one Oak has measured, so uniswap_add will refuse this pool.`}}}async function Ie(o,e,r){let i=await o.getBlockNumber(),d=new Map;for(let t=0n;t<=i;t+=V){let n=t+V-1n<i?t+V-1n:i,u=await o.request({method:"eth_getLogs",params:[{address:Z.toLowerCase(),topics:[ge,null,e?se(e):null,r?se(r):null],fromBlock:ne(t),toBlock:ne(n)}]});if(!Array.isArray(u))throw new k("Invalid v4 Initialize log response.");for(let s of u){if(!Array.isArray(s.topics)||s.topics.length!==4||typeof s.data!="string")throw new k("Invalid v4 Initialize log.");let[m,a,p]=fe(ke,s.data),h={currency0:y(`0x${s.topics[2].slice(-40)}`),currency1:y(`0x${s.topics[3].slice(-40)}`),fee:Number(m),tickSpacing:Number(a),hooks:y(p)};d.set(s.topics[1].toLowerCase(),{key:h,id:s.topics[1]})}}return[...d.values()]}async function ve(o,e,r){let i=e.eth?_.weth:e.address,d=r.eth?_.weth:r.address;if(i===d)return[];let[t,n]=le(i,d)<0?[i,d]:[d,i],[u,s]=await Promise.all([P(o,t,w),P(o,n,w)]),m=[];for(let a of Object.keys(oe).map(Number)){let p=y(String(await o.readContract({address:_.factory,abi:te,functionName:"getPool",args:[t,n,a]})));p!==de&&m.push(await ue(o,p,u,s,a))}return m}function re(o){return o?o.eth?[b,C]:o.address===C?[C,b]:[o.address]:null}async function Ce(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(d=>({address:v,abi:B,functionName:"getLiquidity",args:[d]}))})).forEach((d,t)=>r.set(e[t].toLowerCase(),d.status==="success"?BigInt(d.result):0n)),r}catch{}for(let i=0;i<e.length;i+=L)(await Promise.allSettled(e.slice(i,i+L).map(async t=>BigInt(await o.readContract({address:v,abi:B,functionName:"getLiquidity",args:[t]}))))).forEach((t,n)=>r.set(e[i+n].toLowerCase(),t.status==="fulfilled"?t.value:0n));return r}async function Se(o,e,r,i){let d=re(e),t=re(r),n=new Map,u=(c,f)=>{if(c&&f){if(c===f)return;let[l,g]=le(c,f)<0?[c,f]:[f,c];n.set(`${l}/${g}`,[l,g])}else if(c||f){let l=c??f;n.set(`${l}/*0`,[l,null]),n.set(`${l}/*1`,[null,l])}};for(let c of d??[null])for(let f of t??[null])u(c,f);let s=new Map;for(let c of A)[...n.values()].some(([l,g])=>(!l||S(c.key.currency0,l))&&(!g||S(c.key.currency1,g)))&&s.set(c.poolId.toLowerCase(),{key:c.key,id:c.poolId});for(let[c,f]of n.values())for(let l of await Ie(o,c,f))s.set(l.id.toLowerCase(),l);let m=new Set(A.map(c=>c.poolId.toLowerCase())),a=[...s.values()],p=a.filter(c=>m.has(c.id.toLowerCase())),h=a.filter(c=>!m.has(c.id.toLowerCase())).reverse(),I=typeof o.multicall=="function"&&!!o.chain?.contracts?.multicall3?we:Pe;h.length>I&&i.push(`${h.length} v4 pools match; only the newest ${I} non-measured ones were considered. Pass both tokens, or a poolId, to narrow.`);let U=h.slice(0,I),z=await Ce(o,U.map(c=>c.id)),pe=U.sort((c,f)=>{let l=z.get(c.id.toLowerCase())??0n,g=z.get(f.id.toLowerCase())??0n;return l===g?0:l<g?1:-1}),R=[...p,...pe];R.length>H&&i.push(`${R.length} v4 pools match; full state was read for Oak's measured pools plus the deepest of the rest (${H} total). Pass both tokens, or a poolId, to narrow.`);let K=[],O=0,W=R.slice(0,H);for(let c=0;c<W.length;c+=L){let f=await Promise.allSettled(W.slice(c,c+L).map(({key:l,id:g})=>q(o,l,g)));for(let l of f)l.status==="fulfilled"?K.push(l.value):O++}return O>0&&i.push(`${O} pool(s) were skipped because a token or pool state could not be read.`),K}async function _e(o,e){let r=A.find(s=>S(s.poolId,e));if(r)return q(o,r.key,r.poolId);let[i,d,t,n,u]=await o.readContract({address:J,abi:be,functionName:"poolKeys",args:[e.slice(0,52)]});if(i===b&&d===b&&Number(n)===0)throw new k(`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 q(o,{currency0:i,currency1:d,fee:Number(t),tickSpacing:Number(n),hooks:u},e)}function Ne(o){let e=new Set([...A.map(t=>t.poolId.toLowerCase()),...M.map(t=>t.address.toLowerCase())]),r=new Set([b,$.toLowerCase(),C.toLowerCase()]),i=t=>r.has(t.address.toLowerCase())?"ETH":t.address.toLowerCase(),d=new Map;for(let t of o.filter(n=>n.initialized&&BigInt(n.liquidity)>0n)){let n=`${i(t.token0)}/${i(t.token1)}`;d.set(n,[...d.get(n)??[],t])}for(let t of d.values()){let n=t.filter(a=>e.has(a.id.toLowerCase()));if(n.length===0&&t.length<3)continue;let s=(n.length>0?n:t).map(a=>BigInt(a.sqrtPriceX96)).sort((a,p)=>a<p?-1:a>p?1:0),m=s[Math.floor(s.length/2)];for(let a of t){if(e.has(a.id.toLowerCase()))continue;let p=Y(BigInt(a.sqrtPriceX96),m);p>ye&&(a.priceOutlierBps=Number(p),a.note=`${a.note?`${a.note} `:""}Price differs ${p} bps from the ${n.length>0?"Oak-measured":"median"} price for this pair; do not treat this pool as the market price.`)}}}async function Ee(o,e){let r=e.version;if(r!==void 0&&r!=="v3"&&r!=="v4")throw new k('version must be "v3" or "v4"; omit it to search both.');let i=e.limit===void 0?ce:Number(e.limit);if(!Number.isInteger(i)||i<1||i>E)throw new k(`limit must be an integer from 1 to ${E}.`);let d=ie(e.tokenA,"tokenA"),t=ie(e.tokenB,"tokenB");if(!d&&t)throw new k("Provide tokenA when searching by token; tokenB narrows the search to a pair.");let n=o.clientFor(w),u=[],s=[];if(e.poolId!==void 0){if(typeof e.poolId!="string"||!/^0x[0-9a-fA-F]{64}$/.test(e.poolId))throw new k("poolId must be a 32-byte hex v4 poolId. For v3 search by tokenA/tokenB.");s=[await _e(n,e.poolId)]}else if(d){if(r!=="v4"&&(t?s.push(...await ve(n,d,t)):u.push("v3 pools are looked up per pair; pass tokenB to include them.")),r!=="v3")try{s.push(...await Se(n,d,t,u))}catch(a){throw X(a,-32601)?a:new k(`Could not search v4 pools. ${j(a)}`)}}else{u.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 a=await Promise.all(M.map(async h=>{let[F,I]=await Promise.all([P(n,h.token0,w),P(n,h.token1,w)]);return ue(n,h.address,F,I,h.fee)})),p=await Promise.all(A.map(h=>q(n,h.key,h.poolId)));s=[...r==="v4"?[]:a,...r==="v3"?[]:p]}Ne(s),s.sort((a,p)=>BigInt(p.liquidity)>BigInt(a.liquidity)?1:BigInt(p.liquidity)<BigInt(a.liquidity)?-1:0),s.length>i&&u.push(`Showing the ${i} deepest of ${s.length} pools found; raise limit (max ${E}) to see more.`),s=s.slice(0,i);let m=s.filter(a=>a.initialized&&BigInt(a.liquidity)>0n).length;return s.length===0&&u.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:s,notes:u,summary:`Found ${s.length} Uniswap pool(s), ${m} with active liquidity. price is token1 per 1 token0.`}}function Me(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."},limit:{type:"integer",minimum:1,maximum:E,default:ce}}},execute:async r=>Ee(o,r)}]}}export{Ee as a,Me as b};
|
|
1
|
+
import{d as _,e as oe,f as M,h as te,i as N}from"./3R3C3CU5.js";import{E as P,a as Z,b as J,c as v,f as C,h as b,m as A,q as x,s as Q,u as ee}from"./JG24LNUI.js";import{f as D,g as Y}from"./MEMVFR7Z.js";import{a as $}from"./VJ3W2V3B.js";import{a as G}from"./6IM6A5VA.js";import{g as S}from"./73N3TOJL.js";import{a as w}from"./XPFVT2EA.js";import{a as k,b as X,d as j}from"./5YS5V2LK.js";import{decodeAbiParameters as fe,getAddress as y,pad as se,parseAbi as ae,parseAbiParameters as me,toEventSelector as he,toHex as ne,zeroAddress as de}from"viem";var ge=he("Initialize(bytes32,address,address,uint24,int24,address,uint160,int24)"),ke=me("uint24 fee, int24 tickSpacing, address hooks, uint160 sqrtPriceX96, int24 tick"),V=10000000n,ce=25,H=200,L=16,we=3e3,Pe=500,ye=500n,E=100,B=ae(["function getSlot0(bytes32 poolId) view returns (uint160 sqrtPriceX96, int24 tick, uint24 protocolFee, uint24 lpFee)","function getLiquidity(bytes32 poolId) view returns (uint128 liquidity)"]),be=ae(["function poolKeys(bytes25 poolId) view returns (address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks)"]);function Ae(o){let e=o.trim().toLowerCase();return e==="eth"||e==="native"||e===de||e===$.toLowerCase()}function ie(o,e){if(o!=null){if(typeof o!="string")throw new k(`${e} must be a token address, or "eth" for native ETH.`);return Ae(o)?{eth:!0}:(G(o),{eth:!1,address:y(o)})}}var le=(o,e)=>BigInt(o)<BigInt(e)?-1:BigInt(o)>BigInt(e)?1:0;function T(o){return{address:o.address,symbol:o.symbol,decimals:o.decimals}}async function ue(o,e,r,i,d){let[t,n,u]=await Promise.all([o.readContract({address:e,abi:N,functionName:"slot0"}),o.readContract({address:e,abi:N,functionName:"liquidity"}),o.readContract({address:e,abi:N,functionName:"tickSpacing"})]),s=BigInt(t[0]);return{version:"v3",id:e,token0:T(r),token1:T(i),fee:d,tickSpacing:Number(u),initialized:s>0n,liquidity:BigInt(n).toString(),sqrtPriceX96:s.toString(),tick:Number(t[1]),price:s>0n?D(s,r.decimals,i.decimals):"0",addSupported:!0}}async function q(o,e,r){let i=r??Q(e),[d,t]=await Promise.all([P(o,e.currency0,w),P(o,e.currency1,w)]),[n,u]=await Promise.all([o.readContract({address:v,abi:B,functionName:"getSlot0",args:[i]}),o.readContract({address:v,abi:B,functionName:"getLiquidity",args:[i]})]),s=BigInt(n[0]),m=ee(e,Number(n[3]));return{version:"v4",id:i,token0:T(d),token1:T(t),fee:e.fee,tickSpacing:e.tickSpacing,hooks:y(e.hooks),initialized:s>0n,liquidity:BigInt(u).toString(),sqrtPriceX96:s.toString(),tick:Number(n[1]),price:s>0n?D(s,d.decimals,t.decimals):"0",addSupported:x.has(e.hooks.toLowerCase()),feeNote:m.feeNote,...x.has(e.hooks.toLowerCase())?{}:{note:`Hook ${y(e.hooks)} is not one Oak has measured, so uniswap_add will refuse this pool.`}}}async function Ie(o,e,r){let i=await o.getBlockNumber(),d=new Map;for(let t=0n;t<=i;t+=V){let n=t+V-1n<i?t+V-1n:i,u=await o.request({method:"eth_getLogs",params:[{address:Z.toLowerCase(),topics:[ge,null,e?se(e):null,r?se(r):null],fromBlock:ne(t),toBlock:ne(n)}]});if(!Array.isArray(u))throw new k("Invalid v4 Initialize log response.");for(let s of u){if(!Array.isArray(s.topics)||s.topics.length!==4||typeof s.data!="string")throw new k("Invalid v4 Initialize log.");let[m,a,p]=fe(ke,s.data),h={currency0:y(`0x${s.topics[2].slice(-40)}`),currency1:y(`0x${s.topics[3].slice(-40)}`),fee:Number(m),tickSpacing:Number(a),hooks:y(p)};d.set(s.topics[1].toLowerCase(),{key:h,id:s.topics[1]})}}return[...d.values()]}async function ve(o,e,r){let i=e.eth?_.weth:e.address,d=r.eth?_.weth:r.address;if(i===d)return[];let[t,n]=le(i,d)<0?[i,d]:[d,i],[u,s]=await Promise.all([P(o,t,w),P(o,n,w)]),m=[];for(let a of Object.keys(oe).map(Number)){let p=y(String(await o.readContract({address:_.factory,abi:te,functionName:"getPool",args:[t,n,a]})));p!==de&&m.push(await ue(o,p,u,s,a))}return m}function re(o){return o?o.eth?[b,C]:o.address===C?[C,b]:[o.address]:null}async function Ce(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(d=>({address:v,abi:B,functionName:"getLiquidity",args:[d]}))})).forEach((d,t)=>r.set(e[t].toLowerCase(),d.status==="success"?BigInt(d.result):0n)),r}catch{}for(let i=0;i<e.length;i+=L)(await Promise.allSettled(e.slice(i,i+L).map(async t=>BigInt(await o.readContract({address:v,abi:B,functionName:"getLiquidity",args:[t]}))))).forEach((t,n)=>r.set(e[i+n].toLowerCase(),t.status==="fulfilled"?t.value:0n));return r}async function Se(o,e,r,i){let d=re(e),t=re(r),n=new Map,u=(c,f)=>{if(c&&f){if(c===f)return;let[l,g]=le(c,f)<0?[c,f]:[f,c];n.set(`${l}/${g}`,[l,g])}else if(c||f){let l=c??f;n.set(`${l}/*0`,[l,null]),n.set(`${l}/*1`,[null,l])}};for(let c of d??[null])for(let f of t??[null])u(c,f);let s=new Map;for(let c of A)[...n.values()].some(([l,g])=>(!l||S(c.key.currency0,l))&&(!g||S(c.key.currency1,g)))&&s.set(c.poolId.toLowerCase(),{key:c.key,id:c.poolId});for(let[c,f]of n.values())for(let l of await Ie(o,c,f))s.set(l.id.toLowerCase(),l);let m=new Set(A.map(c=>c.poolId.toLowerCase())),a=[...s.values()],p=a.filter(c=>m.has(c.id.toLowerCase())),h=a.filter(c=>!m.has(c.id.toLowerCase())).reverse(),I=typeof o.multicall=="function"&&!!o.chain?.contracts?.multicall3?we:Pe;h.length>I&&i.push(`${h.length} v4 pools match; only the newest ${I} non-measured ones were considered. Pass both tokens, or a poolId, to narrow.`);let U=h.slice(0,I),z=await Ce(o,U.map(c=>c.id)),pe=U.sort((c,f)=>{let l=z.get(c.id.toLowerCase())??0n,g=z.get(f.id.toLowerCase())??0n;return l===g?0:l<g?1:-1}),R=[...p,...pe];R.length>H&&i.push(`${R.length} v4 pools match; full state was read for Oak's measured pools plus the deepest of the rest (${H} total). Pass both tokens, or a poolId, to narrow.`);let K=[],O=0,W=R.slice(0,H);for(let c=0;c<W.length;c+=L){let f=await Promise.allSettled(W.slice(c,c+L).map(({key:l,id:g})=>q(o,l,g)));for(let l of f)l.status==="fulfilled"?K.push(l.value):O++}return O>0&&i.push(`${O} pool(s) were skipped because a token or pool state could not be read.`),K}async function _e(o,e){let r=A.find(s=>S(s.poolId,e));if(r)return q(o,r.key,r.poolId);let[i,d,t,n,u]=await o.readContract({address:J,abi:be,functionName:"poolKeys",args:[e.slice(0,52)]});if(i===b&&d===b&&Number(n)===0)throw new k(`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 q(o,{currency0:i,currency1:d,fee:Number(t),tickSpacing:Number(n),hooks:u},e)}function Ne(o){let e=new Set([...A.map(t=>t.poolId.toLowerCase()),...M.map(t=>t.address.toLowerCase())]),r=new Set([b,$.toLowerCase(),C.toLowerCase()]),i=t=>r.has(t.address.toLowerCase())?"ETH":t.address.toLowerCase(),d=new Map;for(let t of o.filter(n=>n.initialized&&BigInt(n.liquidity)>0n)){let n=`${i(t.token0)}/${i(t.token1)}`;d.set(n,[...d.get(n)??[],t])}for(let t of d.values()){let n=t.filter(a=>e.has(a.id.toLowerCase()));if(n.length===0&&t.length<3)continue;let s=(n.length>0?n:t).map(a=>BigInt(a.sqrtPriceX96)).sort((a,p)=>a<p?-1:a>p?1:0),m=s[Math.floor(s.length/2)];for(let a of t){if(e.has(a.id.toLowerCase()))continue;let p=Y(BigInt(a.sqrtPriceX96),m);p>ye&&(a.priceOutlierBps=Number(p),a.note=`${a.note?`${a.note} `:""}Price differs ${p} bps from the ${n.length>0?"Oak-measured":"median"} price for this pair; do not treat this pool as the market price.`)}}}async function Ee(o,e){let r=e.version;if(r!==void 0&&r!=="v3"&&r!=="v4")throw new k('version must be "v3" or "v4"; omit it to search both.');let i=e.limit===void 0?ce:Number(e.limit);if(!Number.isInteger(i)||i<1||i>E)throw new k(`limit must be an integer from 1 to ${E}.`);let d=ie(e.tokenA,"tokenA"),t=ie(e.tokenB,"tokenB");if(!d&&t)throw new k("Provide tokenA when searching by token; tokenB narrows the search to a pair.");let n=o.clientFor(w),u=[],s=[];if(e.poolId!==void 0){if(typeof e.poolId!="string"||!/^0x[0-9a-fA-F]{64}$/.test(e.poolId))throw new k("poolId must be a 32-byte hex v4 poolId. For v3 search by tokenA/tokenB.");s=[await _e(n,e.poolId)]}else if(d){if(r!=="v4"&&(t?s.push(...await ve(n,d,t)):u.push("v3 pools are looked up per pair; pass tokenB to include them.")),r!=="v3")try{s.push(...await Se(n,d,t,u))}catch(a){throw X(a,-32601)?a:new k(`Could not search v4 pools. ${j(a)}`)}}else{u.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 a=await Promise.all(M.map(async h=>{let[F,I]=await Promise.all([P(n,h.token0,w),P(n,h.token1,w)]);return ue(n,h.address,F,I,h.fee)})),p=await Promise.all(A.map(h=>q(n,h.key,h.poolId)));s=[...r==="v4"?[]:a,...r==="v3"?[]:p]}Ne(s),s.sort((a,p)=>BigInt(p.liquidity)>BigInt(a.liquidity)?1:BigInt(p.liquidity)<BigInt(a.liquidity)?-1:0),s.length>i&&u.push(`Showing the ${i} deepest of ${s.length} pools found; raise limit (max ${E}) to see more.`),s=s.slice(0,i);let m=s.filter(a=>a.initialized&&BigInt(a.liquidity)>0n).length;return s.length===0&&u.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:s,notes:u,summary:`Found ${s.length} Uniswap pool(s), ${m} with active liquidity. price is token1 per 1 token0.`}}function Me(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."},limit:{type:"integer",minimum:1,maximum:E,default:ce}}},execute:async r=>Ee(o,r)}]}}export{Ee as a,Me as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as $}from"./
|
|
1
|
+
import{a as $}from"./Q4RZQCDS.js";import{a as U}from"./WLACEU2Y.js";import{c as G}from"./HL2MLC3O.js";import{b as I}from"./X6G4BD35.js";import{c as k}from"./PR2QED25.js";import{g as S}from"./65QFM4JU.js";import{a as b}from"./XGUKLFBU.js";import{b as E}from"./AXYOJBX6.js";import{a as h}from"./6IM6A5VA.js";import{a as D}from"./UWOFA6GV.js";import{g as y,n as C}from"./73N3TOJL.js";import{a as s,d as P,i as w}from"./XPFVT2EA.js";import{a as m}from"./5YS5V2LK.js";import{encodeFunctionData as v,parseAbi as j}from"viem";var a=w[s].vaults.netnet.address,d={address:w[s].tokens.USDG.address,chainId:s,decimals:P,symbol:"USDG"},N={address:a,chainId:s,decimals:18,symbol:"nnUSDG"},o=j(["function asset() view returns (address)","function decimals() view returns (uint8)","function totalAssets() view returns (uint256)","function balanceOf(address owner) view returns (uint256)","function convertToAssets(uint256 shares) view returns (uint256)","function deposit(uint256 assets,address receiver) returns (uint256 shares)","function withdraw(uint256 assets,address receiver,address owner) returns (uint256 shares)","function redeem(uint256 shares,address receiver,address owner) returns (uint256 assets)"]),_=D("Positive USDG amount in integer base units (6 decimals)."),O="Preview amounts are estimates; these ERC-4626 calls have no on-chain minimum output argument. No transaction was sent.";function M(e){return C(e,"Amount must be positive and fit in uint256.",{notString:"Provide an integer amount string in base units.",positive:!0})}function g(e,f){if(Object.keys(e).some(l=>!f.includes(l)))throw new m("Unsupported NetNet argument.")}var q=e=>{async function f(t){try{return await t()}catch(n){throw new m(e.plainError(n))}}async function l(){let t=e.clientFor(s);if(await t.getChainId()!==s)throw new m("NetNet requires chain 4663.");let[n,r]=await Promise.all([t.readContract({address:a,abi:o,functionName:"asset"}),t.readContract({address:a,abi:o,functionName:"decimals"})]);if(!y(n,d.address))throw new m("NetNet does not report the pinned USDG asset.");if(r!==N.decimals)throw new m("NetNet share decimals do not match the pinned metadata.");return t}async function A(t,n,r){let i=await e.preview(t,n),p=i.changes.map(({token:u,amount:c})=>{let T=c.startsWith("-");return`${T?"-":"+"}${e.formatAmount(T?c.slice(1):c,u.decimals)} ${u.symbol}`}).join(", ");return{txs:t,preview:i,summary:`${r} ${i.summary} ${p?`Estimated changes: ${p}. `:""}${O}`}}async function R(t){return f(async()=>{h(t);let n=await l(),r=await n.readContract({address:a,abi:o,functionName:"balanceOf",args:[t]});if(r===0n)return[];let i=await n.readContract({address:a,abi:o,functionName:"convertToAssets",args:[r]});return[{module:"netnet",id:`${s}:${a}`,chainId:s,assets:[{token:{...d},amount:i.toString()}],description:`${e.formatAmount(r.toString(),N.decimals)} nnUSDG shares in NetNet Credit (${a}); underlying USDG is an estimate, not a liquidity guarantee.`}]})}return{positions:R,tools:[{name:"netnet_list",inputSchema:{type:"object",properties:{},additionalProperties:!1},execute:t=>f(async()=>{g(t,[]);let r=await(await l()).readContract({address:a,abi:o,functionName:"totalAssets"});return[{address:a,name:"NetNet Credit",chainId:s,asset:{...d},shares:{...N},totalAssets:{token:{...d},amount:r.toString()}}]})},{name:"netnet_deposit",inputSchema:{type:"object",properties:{amount:_},required:["amount"],additionalProperties:!1},execute:(t,n)=>f(async()=>{g(t,["amount"]),h(n);let r=M(t.amount);await l();let i=[e.approval(d.address,a,r.toString(),s),e.unsignedTx({to:a,data:v({abi:o,functionName:"deposit",args:[r,n]}),value:"0",chainId:s,description:`Deposit ${e.formatAmount(r.toString(),d.decimals)} USDG into NetNet Credit.`})];return A(i,n,"Approve the exact USDG amount, then deposit into NetNet Credit.")})},{name:"netnet_withdraw",inputSchema:{type:"object",properties:{amount:{anyOf:[_,{const:"max",description:"Redeem the fresh full nnUSDG share balance."}]}},required:["amount"],additionalProperties:!1},execute:(t,n)=>f(async()=>{g(t,["amount"]),h(n);let r=t.amount==="max"?void 0:M(t.amount),i=await l(),p,u;if(r===void 0){let c=await i.readContract({address:a,abi:o,functionName:"balanceOf",args:[n]});if(c===0n)throw new m("This wallet has no NetNet shares to redeem.");p=v({abi:o,functionName:"redeem",args:[c,n,n]}),u=`Redeem all ${e.formatAmount(c.toString(),N.decimals)} nnUSDG shares for USDG.`}else p=v({abi:o,functionName:"withdraw",args:[r,n,n]}),u=`Withdraw ${e.formatAmount(r.toString(),d.decimals)} USDG from NetNet Credit (unmeasured on the recorded fork; full exit uses amount "max" redeem).`;return A([e.unsignedTx({to:a,data:p,value:"0",chainId:s,description:u})],n,u)})}]}};function ie(e){return E("netnet",[q(e),S(e),k(e),G(e),$(e),U(e),I(e),{tools:b(e,"netnet",[{vault:a,asset:d}])}])}export{q as a,ie as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as j}from"./XW7RH7YY.js";import{a as V}from"./
|
|
1
|
+
import{a as j}from"./XW7RH7YY.js";import{a as V}from"./XUJSQV52.js";import{b as H,c as Z,d as z,e as J}from"./DVKDWXEJ.js";import{a as L}from"./JRVTSGAT.js";import{c as W}from"./EC5W3UZD.js";import{b as $,o as q}from"./CAU44UWP.js";import{b as _}from"./AXYOJBX6.js";import{a as x,d as B,e as E}from"./6IM6A5VA.js";import{a as D}from"./UWOFA6GV.js";import{g as A,m as R,n as U}from"./73N3TOJL.js";import{a as h,d as N,i as I,j as S}from"./XPFVT2EA.js";import{a as o}from"./5YS5V2LK.js";import{getAddress as F,parseAbi as ee}from"viem";var a=F(I[4663].vaults.groveAlm.address),te="0x29626c2d8ca49a51e4deceec5499e52983c42bd5",d=ee(["function asset() view returns (address)","function decimals() view returns (uint8)","function totalAssets() view returns (uint256)","function totalSupply() view returns (uint256)","function balanceOf(address) view returns (uint256)","function maxDeposit(address) view returns (uint256)","function maxWithdraw(address) view returns (uint256)","function previewDeposit(uint256) view returns (uint256)","function previewRedeem(uint256) view returns (uint256)","function performanceFee() view returns (uint256)","function managementFee() view returns (uint256)"]),T=D("Positive integer in token base units."),M={type:"string",description:`Public Grove vault only: ${a}. Defaults to this vault.`},K={type:"integer",minimum:0,maximum:9999,default:$};function C(t){return U(t,"Amount must be positive and within the uint256 range.",{notString:"Amount must be a positive integer string in base units.",positive:!0})}function v(t){return R(t,"Grove returned an invalid integer read.")}function O(t,m,l){if(x(m),Object.keys(t).some(u=>!["vault",...l].includes(u)))throw new o("Unsupported Grove argument.");if(t.vault!==void 0){if(typeof t.vault!="string")throw new o("Provide the public Grove vault address.");if(t.vault.toLowerCase()===te)throw new o("The Grove ALM proxy is allocator infrastructure, not the public ERC-4626 vault.");if(x(t.vault),!A(t.vault,a))throw new o("Only the public Grove ERC-4626 vault is supported.")}}function Q(t,m,l){let u=l===void 0?$:l;if(typeof u!="number")throw new o("Slippage must be an integer from 0 to 9999 bps.");let e=BigInt(q(t.toString(),u)),n=m===void 0?e:C(m);if(n<=0n||n>t)throw new o("The minimum output must be positive and no greater than the quoted output.");return n}function X(t,m){let l=0n;for(let u of t.changes)if(!(u.token.chainId!==m.chainId||!A(u.token.address,m.address))){if(u.token.decimals!==m.decimals||typeof u.amount!="string"||!/^-?\d+$/.test(u.amount))throw new o("Grove preview returned invalid token metadata or amounts.");l+=BigInt(u.amount)}return l}var ne=t=>{async function m(e){try{return await e()}catch(n){throw new o(t.plainError(n))}}async function l(){let e=t.clientFor(h);if(await e.getChainId()!==h)throw new o("Grove requires an RPC endpoint on chain 4663.");let n=await e.readContract({address:a,abi:d,functionName:"asset"});if(typeof n!="string"||!A(n,S))throw new o("The public Grove vault must use canonical USDG on chain 4663.");let[i,s]=await Promise.all([e.readContract({address:F(S),abi:d,functionName:"decimals"}),e.readContract({address:a,abi:d,functionName:"decimals"})]);if(i!==N||s!==18)throw new o("Grove token decimals differ from the evidenced USDG/share interface.");let r={address:F(S),chainId:h,decimals:i,symbol:"USDG"};return{client:e,asset:r,shareToken:{address:a,chainId:h,decimals:s,symbol:"Grove shares"}}}async function u(e,n,i,s,r,p){let f=await t.preview(e,n);if(X(f,i)!==-s)throw new o("Grove simulation did not show the exact requested token outflow.");if(X(f,r)<p)throw new o("Grove simulated output is below the minimum.");let g=f.changes.map(({token:w,amount:b})=>{let y=b.startsWith("-");return`${y?"-":"+"}${t.formatAmount(y?b.slice(1):b,w.decimals)} ${w.symbol} (${w.address}, chain ${w.chainId})`}).join("; ");return{txs:e,summary:`${f.summary} ${g}. Minimum ${p} base units of ${r.address} is a preview check, not enforced on-chain by standard ERC-4626. Re-preview before signing; execution output can change.`}}return{tools:[Z(t,"grove_details",a),L(t,"grove_analytics",a),V(t,"grove_manage",a),...j(t,"grove",a),{name:"grove_list",inputSchema:{type:"object",properties:{vault:M},additionalProperties:!1},execute:(e,n)=>m(async()=>{O(e,n,[]);let{client:i,asset:s,shareToken:r}=await l(),[p,f,c,g,w,b]=await Promise.all([i.readContract({address:a,abi:d,functionName:"totalAssets"}),i.readContract({address:a,abi:d,functionName:"totalSupply"}),i.readContract({address:a,abi:d,functionName:"maxDeposit",args:[n]}),i.readContract({address:a,abi:d,functionName:"maxWithdraw",args:[n]}),i.readContract({address:a,abi:d,functionName:"performanceFee"}),i.readContract({address:a,abi:d,functionName:"managementFee"})]);return[{vault:a,chainId:h,name:"Grove x Steakhouse USDG",asset:s,shareToken:r,totalAssets:{token:s,amount:v(p).toString()},totalSupply:{token:r,amount:v(f).toString()},maxDeposit:v(c)===0n?null:c.toString(),maxWithdraw:v(g)===0n?null:g.toString(),maxViewCaveat:"Zero Morpho V2 maximum views mean unknown capacity. Simulate the requested action; full exits use the fresh share balance.",fees:{performanceFeeRaw:v(w).toString(),managementFeeRaw:v(b).toString(),scale:"1000000000000000000",managementFeeTimeUnit:"second",performanceFeeBasis:"accrued interest"}}]})},{name:"grove_deposit",inputSchema:{type:"object",properties:{vault:M,amount:T,minSharesOut:T,slippageBps:K},required:["amount"],additionalProperties:!1},execute:(e,n)=>m(async()=>{O(e,n,["amount","minSharesOut","slippageBps"]);let i=C(e.amount),{client:s,asset:r,shareToken:p}=await l(),f=v(await s.readContract({address:a,abi:d,functionName:"previewDeposit",args:[i]})),c=Q(f,e.minSharesOut,e.slippageBps),g=B(a,r.address,i.toString(),n,h),w=[t.approval(r.address,a,i.toString(),h),t.unsignedTx(g.txs[1])];return u(w,n,r,i,p,c)})},{name:"grove_withdraw",inputSchema:{type:"object",properties:{vault:M,shares:{oneOf:[T,{const:"all",description:"Redeem the fresh full share balance."}]},minAmountOut:T,slippageBps:K,force:{type:"boolean"},maxPenaltyAssets:D()},required:["shares"],additionalProperties:!1},execute:(e,n)=>m(async()=>{O(e,n,["shares","minAmountOut","slippageBps","force","maxPenaltyAssets"]);let i=e.shares==="all"?void 0:C(e.shares),{client:s,asset:r,shareToken:p}=await l(),f=v(await s.readContract({address:a,abi:d,functionName:"balanceOf",args:[n]})),c=i??f;if(c===0n||c>f)throw new o("The Grove share balance is insufficient for this withdrawal.");if(e.force!==void 0&&typeof e.force!="boolean")throw new o("force must be a boolean.");if(e.force===!0){if(e.shares!=="all"||e.slippageBps!==void 0)throw new o("Force exit requires shares all and an explicit minAmountOut; omit slippageBps.");let k=W(e.maxPenaltyAssets),Y=C(e.minAmountOut),G=await H(t,s,a,n,c,k),P=await t.preview([G.tx],n);return J(P.changes,a,c,Y),{txs:[G.tx],preview:P,summary:`${z(G.plan)} ${P.summary}`}}if(e.maxPenaltyAssets!==void 0)throw new o("maxPenaltyAssets requires force true.");let g=v(await s.readContract({address:a,abi:d,functionName:"previewRedeem",args:[c]})),w=Q(g,e.minAmountOut,e.slippageBps),y=E(a,c.toString(),n,h).txs.map(k=>t.unsignedTx({...k,description:`Redeem ${c} Grove share base units to the wallet.`}));return u(y,n,p,c,r,w)})}],positions:e=>m(async()=>{x(e);let{client:n,asset:i,shareToken:s}=await l(),r=v(await n.readContract({address:a,abi:d,functionName:"balanceOf",args:[e]}));if(r===0n)return[];let p=v(await n.readContract({address:a,abi:d,functionName:"previewRedeem",args:[r]}));return[{module:"grove",id:`${h}:${a.toLowerCase()}`,chainId:h,assets:[{token:i,amount:p.toString()}],description:`${t.formatAmount(r.toString(),s.decimals)} Grove shares (${r} base units, ${s.decimals} decimals, ${a}); estimated USDG redemption, subject to simulation.`}]})}},he=t=>_("grove",[ne(t)]);export{ne as a,he as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as s}from"./
|
|
1
|
+
import{j as s}from"./LFN3OODW.js";import{formatUnits as c}from"viem";function l(e){return`HoodLock creation fee: ${e.eth} ETH (${e.amount} wei; ${e.usd===null?"USD unavailable: no fresh ETH/USD reference":`approximately $${e.usd} USD`}), not refundable after creation. Paid to ${e.contract}; separate from network gas.`}async function p(e,t,d,r){let o=r===0n?"0":null;if(r>0n)try{let a=await s("ETH",{client:e.clientFor(4663),chainId:4663});BigInt(a.usdE18)>0n&&(o=c(r*BigInt(a.usdE18)/10n**18n,18))}catch{}let n={contract:d,amount:r.toString(),eth:c(r,18),usd:o,refundable:!1},i=l(n);return{...t,summary:`${t.summary} ${i}`,preview:{...t.preview,summary:`${t.preview.summary} ${i}`},protocolFee:n}}export{l as a,p as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as p}from"./
|
|
1
|
+
import{j as p}from"./MEMVFR7Z.js";import{a as d}from"./VJ3W2V3B.js";import{a as f}from"./6IM6A5VA.js";import{d as a,i as c}from"./73N3TOJL.js";import{a as m}from"./RETS2ZEK.js";import{a as i}from"./XPFVT2EA.js";import{a as s}from"./5YS5V2LK.js";import{erc20Abi as u,zeroAddress as b}from"viem";function T(r,n,e=256,t=!1){if(typeof r!="string"||!/^[0-9]+$/.test(r))throw new s(`${n} must be a decimal base-unit string.`);let o=m(r);if(!t&&o===0n||o>=1n<<BigInt(e))throw new s(`${n} must be ${t?"a":"a positive"} uint${e}.`);return o}function g(r){return c(r,"Provide a token or contract address.",a)}function E(r){return typeof r=="string"&&["eth",d.toLowerCase()].includes(r.toLowerCase())?b:g(r)}function D(r){let n=r??50;if(typeof n!="number"||!Number.isInteger(n)||n<0||n>=1e4)throw new s("Slippage must be an integer from 0 to 9999 bps.");return n}async function N(r,n,e){if(n===b)return{address:d,symbol:"ETH",decimals:18,chainId:i};let t=r.clientFor(i),[o,w]=await Promise.all([t.readContract({address:n,abi:u,functionName:"symbol",blockNumber:e}),t.readContract({address:n,abi:u,functionName:"decimals",blockNumber:e})]);return{address:n,symbol:p(o,n),decimals:w,chainId:i}}async function S(r,n,e,t){return f(e),{txs:n,preview:await r.preview(n,e),summary:t}}function $(r,n){if(Object.keys(r).some(e=>!n.includes(e)))throw new s(`Provide only ${n.join(", ")}.`)}export{T as a,g as b,E as c,D as d,N as e,S as f,$ as g};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as s}from"./
|
|
1
|
+
import{b as s}from"./6L6DSMCU.js";import{a as o,c as t}from"./HNMOB76J.js";import{getAddress as i}from"viem";var u=new Set(["priors_status",...s,...t.filter(r=>r.read).map(r=>r.name),"priors_ethos_status","priors_request_borrow","priors_request_repay","priors_request_stock","priors_request_backing","priors_pt_quote","priors_pt_position","priors_stock_quote","priors_savings_liquidity","priors_market_origin","priors_market_pins","priors_capabilities"]),p=new Set(["priors_sign_consent",...t.filter(r=>r.consentRoot).map(r=>r.name)]),d=new Set([...p,"priors_starter_line"]),R=new Set([...t.filter(r=>!r.read).map(r=>r.name),"priors_root_offer","priors_autopay_on","priors_autopay_off","priors_pt_buy","priors_pt_sell","priors_pt_redeem","priors_savings_force_withdraw","priors_stock_swap","priors_market_clear_bid_budget","priors_market_revoke_nft","priors_x_link"]);function S(r){let _=t.find(e=>e.name===r);return _?[o[_.contract],..._.approval==="bid"?[o.bidSpender]:[]]:r==="priors_root_offer"?[o.pool]:r==="priors_autopay_on"||r==="priors_autopay_off"?[o.autopay]:r==="priors_savings_force_withdraw"?[o.savings]:r==="priors_stock_swap"?[i("0xCaf681a66D020601342297493863E78C959E5cb2"),i("0x7Cd4E04E433E69e588728c86A3832753B5F846d4")]:r==="priors_pt_buy"||r==="priors_pt_sell"||r==="priors_pt_redeem"?[i("0x888888888889758F76e7103c6CbF23ABbF58F946")]:r==="priors_market_clear_bid_budget"?[o.bidSpender]:r==="priors_market_revoke_nft"?[o.registry,"0x0000000000000000000000000000000000000000"]:r==="priors_x_link"?[o.registry]:[]}export{u as a,p as b,d as c,R as d,S as e};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as q}from"./SDICP7BT.js";import{b as S}from"./46ZA2R5L.js";import{b as le}from"./AXYOJBX6.js";import{a as _}from"./6IM6A5VA.js";import{g as B,i as ue}from"./73N3TOJL.js";import{a as H}from"./RETS2ZEK.js";import{a as u,i as N}from"./XPFVT2EA.js";import{a as c}from"./5YS5V2LK.js";import{a as ce}from"./JXOEJPJ4.js";import{encodeFunctionData as z,erc20Abi as me,getAddress as m,isAddress as he,parseAbi as U,zeroAddress as ke}from"viem";var T=m(N[u].hoodlock.locker.address),C=m(N[u].hoodlock.burner.address),v=m(N[u].hoodlock.liquidityLocker.address),j=m(N[u].uniswap.v3_position_manager.address),K=m(N[u].uniswap.v4_position_manager.address),qe="0x000000000000000000000000000000000000dEaD",Ae=3153600000n,Te=1000000000000n,fe=65535,D=U(["function fee() view returns (uint256)","function lock(address token, uint256 amount, uint256 unlockTime) payable returns (uint256 lockId)","function getLock(uint256 lockId) view returns (address owner, address token, uint256 amount, uint256 unlockTime, bool withdrawn)","function locksByOwner(address owner) view returns (uint256[])","function locksByToken(address token) view returns (uint256[])"]),ee=U(["function fee() view returns (uint256)","function burn(address token, uint256 amount) payable returns (uint256 burnId)","function DEAD() view returns (address)","function getBurn(uint256 burnId) view returns (address burner, address token, uint256 amount, uint256 timestamp)","function totalBurnedOf(address token) view returns (uint256)"]),O=U(["function fixedFee() view returns (uint256)","function collectFeeBps() view returns (uint16)","function paused() view returns (bool)","function lock(address manager, uint256 tokenId, uint256 unlockTime, address feeRecipient, bool acceptUnverifiedHook, uint16 maxCollectFeeBps) payable returns (uint256 lockId)","function lockIdOf(address manager, uint256 tokenId) view returns (uint256)","function getLock(uint256 lockId) view returns (address owner, uint40 unlockTime, uint16 collectFeeBps, bool isV4, bool hookVerified, bool withdrawn, address feeRecipient, address token0, address token1, uint256 tokenId)","function locksOf(address owner) view returns (uint256[])"]),ye=U(["function approve(address to, uint256 tokenId)"]);function $e(e,o,t){let a=o.trim();if(a.startsWith("-")){let k=a.slice(1),i=e(k,t);return i==="0"?"0":`-${i}`}return e(a,t)}function pe(e,o){return o.length===0?"no ERC-20 transfer deltas":o.map(t=>`${$e(e.formatAmount,t.amount,t.token.decimals)} ${t.token.symbol}`).join(", ")}function E(e,o="token"){if(typeof e!="string"||!e.trim())throw new c(`Provide a valid ${o} contract address.`);if(!he(e,{strict:!1}))throw new c(`Identify ${o} by chain and contract address, not by symbol.`);return m(e)}async function W(e,o){try{return await o()}catch(t){throw new c(e.plainError(t))}}function we(e){if(typeof e!="string")throw new c("Amount must be a non-negative integer string in base units.");let o=H(e);if(o<=0n)throw new c("Amount must be greater than zero.");return o}async function ge(e){let o=await e.getBlock();if(!o||typeof o.timestamp!="bigint")throw new c("Could not read the current chain timestamp. Please try again.");return o.timestamp}function ve(e,o){if(typeof e!="string"||!/^\d+$/.test(e.trim()))throw new c("unlockTime must be a non-negative integer string in Unix seconds.");let t=BigInt(e.trim());if(t>=Te)throw new c("unlockTime appears to be in milliseconds; provide Unix seconds at most 100 years (3153600000 seconds) in the future.");if(t<=o)throw new c(`unlockTime (${t}) must be in the future (greater than current timestamp ${o}).`);let a=o+Ae;if(t>a)throw new c(`unlockTime (${t}) exceeds the 100-year maximum lock duration (3153600000 seconds; max ${a}).`);return t}async function oe(e,o,t=u){let a=m(o),[k,i]=await Promise.all([e.readContract({address:a,abi:me,functionName:"symbol"}),e.readContract({address:a,abi:me,functionName:"decimals"})]);return{address:a,symbol:ce(String(k)),decimals:Number(i),chainId:t}}function Se(e,o){if(e==null)return o;let t=typeof e=="number"?e:typeof e=="string"&&/^\d+$/.test(e.trim())?Number(e.trim()):NaN;if(!Number.isInteger(t)||t<0||t>fe)throw new c("maxCollectFeeBps must be an integer between 0 and 65535.");if(t<o)throw new c(`Live collectFeeBps (${o}) exceeds maxCollectFeeBps (${t}): collect fee changed.`);return Math.min(t,o)}function Le(e){return e.tokenId!==void 0||e.manager!==void 0||e.feeRecipient!==void 0||e.maxCollectFeeBps!==void 0||e.acceptUnverifiedHook!==void 0||e.kind==="v3"||e.kind==="lp"||e.kind==="v4"||e.version==="v3"||e.version==="v4"}async function xe(e,o,t){_(t);let a=m(t),k=o.kind==="v4"||o.version==="v4",i=o.manager!==void 0?E(o.manager,"manager"):k?K:j,g=i===K;if(i!==j&&!g)throw new c(`Unsupported position manager ${i}; use the configured Uniswap v3 or v4 manager.`);if(k&&!g||g&&(o.kind==="v3"||o.version==="v3"))throw new c("The requested version disagrees with the position manager.");if(o.acceptUnverifiedHook!==void 0&&typeof o.acceptUnverifiedHook!="boolean")throw new c("acceptUnverifiedHook must be a boolean.");let b=o.acceptUnverifiedHook===!0;if(!g&&b)throw new c("Uniswap v3 has no hooks; omit acceptUnverifiedHook.");let s=g?"v4":"v3";if(typeof o.tokenId!="string")throw new c("Provide an NFT tokenId as a decimal string.");let f=String(o.tokenId).trim(),d=H(f),l=ue(o.feeRecipient,"Provide an explicit feeRecipient address for LP position locks."),p=e.clientFor(u),[x,I,h]=await Promise.all([ge(p),p.readContract({address:v,abi:O,functionName:"fixedFee"}),p.readContract({address:v,abi:O,functionName:"collectFeeBps"})]),y,$=!0;if(g){let P=U(["function getPoolAndPositionInfo(uint256 tokenId) view returns ((address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks) poolKey, uint256 info)","function getPositionLiquidity(uint256 tokenId) view returns (uint128)","function ownerOf(uint256 tokenId) view returns (address)"]),[Y,J,M]=await Promise.all([p.readContract({address:i,abi:P,functionName:"getPoolAndPositionInfo",args:[d]}),p.readContract({address:i,abi:P,functionName:"getPositionLiquidity",args:[d]}),p.readContract({address:i,abi:P,functionName:"ownerOf",args:[d]})]);if(m(M)!==a)throw new c("This wallet does not own that v4 position NFT.");if(J<=0n)throw new c("The v4 position has no liquidity to lock.");if(y=m(Y[0].hooks),$=y===ke||await p.readContract({address:v,abi:U(["function hookAllowed(address) view returns (bool)"]),functionName:"hookAllowed",args:[y]}),!$&&!b)throw new c(`Unverified v4 hook ${y}; review its risks and explicitly set acceptUnverifiedHook: true to proceed.`)}let A=ve(o.unlockTime,x),n=BigInt(I),r=Number(h);if(!Number.isInteger(r)||r<0||r>fe)throw new c(`Invalid on-chain collectFeeBps (${String(h)}).`);if(o.maxFee!==void 0){let P=H(String(o.maxFee));if(n>P)throw new c(`Live fixedFee (${n}) exceeds maxFee (${P}).`)}let w=Se(o.maxCollectFeeBps,r),L=(r/100).toString(),R=e.unsignedTx({to:i,data:z({abi:ye,functionName:"approve",args:[v,d]}),value:"0",chainId:u,description:`Approve Uniswap ${s} position NFT #${d} on ${i} for HoodLock LiquidityLocker ${v}.`}),F=e.unsignedTx({to:v,data:z({abi:O,functionName:"lock",args:[i,d,A,l,b,w]}),value:n.toString(),chainId:u,description:`Lock Uniswap ${s} NFT #${d} in HoodLock LiquidityLocker (${v}) until ${A} with feeRecipient ${l}, upfront fixedFee ${e.formatAmount(n.toString(),S.decimals)} ETH (${n} wei), and ongoing collect fee ${r} bps (${L}% of collected LP fees, frozen per lock).`}),X=[R,F],V=await e.preview(X,a),Q=`Approve and lock Uniswap ${s} NFT #${d} (manager ${i}) in HoodLock LiquidityLocker ${v} until Unix ${A}. Upfront fixedFee: ${e.formatAmount(n.toString(),S.decimals)} ETH (${n} wei). Ongoing LP fee share: ${r} bps (${L}% of collected LP fees, frozen per lock; maxCollectFeeBps=${w}) with feeRecipient ${l}. V4 hook: ${y??"none"}, reviewed: ${$}; acceptUnverifiedHook=${b}.`;return q(e,{txs:V.txs,summary:Q,preview:V,kind:s,contract:v,manager:i,tokenId:d.toString(),unlockTime:A.toString(),feeRecipient:l,acceptUnverifiedHook:b,collectFeeBps:r,maxCollectFeeBps:w,fixedFee:{token:S,amount:n.toString()}},v,n)}async function Ie(e,o,t){_(t);let a=m(t),k=E(o.token,"token"),i=e.clientFor(u),[g,b,s]=await Promise.all([ge(i),i.readContract({address:T,abi:D,functionName:"fee"}),oe(i,k,u)]),f=we(o.amount),d=ve(o.unlockTime,g),l=BigInt(b);if(o.maxFee!==void 0){let A=H(String(o.maxFee));if(l>A)throw new c(`Live lock fee (${l}) exceeds maxFee (${A}).`)}let p=e.approval(s.address,T,f.toString(),u),x=e.unsignedTx({to:T,data:z({abi:D,functionName:"lock",args:[s.address,f,d]}),value:l.toString(),chainId:u,description:`Lock ${e.formatAmount(f.toString(),s.decimals)} ${s.symbol} (${f} base units of ${s.address}) in HoodLock Locker ${T} until ${d} with exact fee ${e.formatAmount(l.toString(),S.decimals)} ETH (${l} wei).`}),I=[p,x],h=await e.preview(I,a),y=pe(e,h.changes),$=`Approve and lock ${e.formatAmount(f.toString(),s.decimals)} ${s.symbol} (${f} base units of ${s.address}) in HoodLock Locker ${T} until Unix ${d}. Exact fee: ${e.formatAmount(l.toString(),S.decimals)} ETH (${l} wei). Preview changes: ${y}.`;return q(e,{txs:h.txs,summary:$,preview:h,kind:"token",contract:T,token:s,amount:f.toString(),unlockTime:d.toString(),fee:{token:S,amount:l.toString()}},T,l)}function Pe(e){return{name:"hoodlock_lock",inputSchema:{type:"object",properties:{kind:{type:"string",enum:["token","v2","v3","v4"],description:"Lock mode: token/v2 LP via Locker, or Uniswap v3/v4 NFT via LiquidityLocker."},token:{type:"string",description:"ERC-20 token or v2 LP token contract address on chain 4663 (for token/v2 locks)."},amount:{type:"string",description:"Token amount as an integer string in base units (for token/v2 locks)."},manager:{type:"string",description:"Configured Uniswap v3 or v4 position manager; inferred from kind when omitted."},tokenId:{type:"string",description:"Uniswap NFT position tokenId as a decimal string."},feeRecipient:{type:"string",description:"Explicit recipient address for collected LP fees during a position lock."},acceptUnverifiedHook:{type:"boolean",description:"Explicit v4 unreviewed-hook consent; default false. A reviewed hook is not a safety guarantee."},maxFee:{type:"string",description:"Maximum upfront ETH fee in wei; the exact live fee is sent."},maxCollectFeeBps:{type:"number",description:"Maximum acceptable ongoing LP collect fee in bps (uint16, must be >= live collectFeeBps)."},unlockTime:{type:"string",description:"Unlock timestamp in Unix seconds (must be > now and <= now + 100 years)."}},required:["unlockTime"],additionalProperties:!1},async execute(o,t){return W(e,async()=>Le(o)?xe(e,o,t):Ie(e,o,t))}}}function Ce(e){return{name:"hoodlock_burn",inputSchema:{type:"object",properties:{token:{type:"string",description:"ERC-20 token contract address on chain 4663 to send to the dead address via HoodLock Burner."},amount:{type:"string",description:"Amount to burn as an integer string in base units."}},required:["token","amount"],additionalProperties:!1},async execute(o,t){return W(e,async()=>{_(t);let a=m(t),k=E(o.token,"token"),i=e.clientFor(u),[g,b,s]=await Promise.all([i.readContract({address:C,abi:ee,functionName:"fee"}),i.readContract({address:C,abi:ee,functionName:"DEAD"}),oe(i,k,u)]),f=we(o.amount),d=BigInt(g),l=m(b);if(o.maxFee!==void 0){let A=H(String(o.maxFee));if(d>A)throw new c(`Live burn fee (${d}) exceeds maxFee (${A}).`)}let p=e.approval(s.address,C,f.toString(),u),x=e.unsignedTx({to:C,data:z({abi:ee,functionName:"burn",args:[s.address,f]}),value:d.toString(),chainId:u,description:`Send ${e.formatAmount(f.toString(),s.decimals)} ${s.symbol} (${f} base units of ${s.address}) to the dead address (${l}) via HoodLock Burner ${C} (totalSupply is unchanged) with exact fee ${e.formatAmount(d.toString(),S.decimals)} ETH (${d} wei).`}),I=[p,x],h=await e.preview(I,a),y=pe(e,h.changes),$=`Approve and send ${e.formatAmount(f.toString(),s.decimals)} ${s.symbol} (${f} base units of ${s.address}) to the dead address (${l}) via HoodLock Burner ${C}. Note: tokens are transferred to ${l} and totalSupply is unchanged. Exact fee: ${e.formatAmount(d.toString(),S.decimals)} ETH (${d} wei). Preview changes: ${y}.`;return q(e,{txs:h.txs,summary:$,preview:h,contract:C,deadAddress:l,token:s,amount:f.toString(),fee:{token:S,amount:d.toString()},totalSupplyReduced:!1},C,d)})}}}async function be(e,o,t){_(o);let a=m(o),k=t?E(t,"token"):void 0,i=e.clientFor(u),g=[],b=new Set,s=n=>{for(let r of n){let w=r.toString();b.has(w)||(b.add(w),g.push(r))}};if(k){let[n,r]=await Promise.all([i.readContract({address:T,abi:D,functionName:"locksByToken",args:[k]}),i.readContract({address:T,abi:D,functionName:"locksByOwner",args:[a]})]);s(n),s(r)}else{let n=await i.readContract({address:T,abi:D,functionName:"locksByOwner",args:[a]});s(n)}let d=(await Promise.all(g.map(async n=>{let r=await i.readContract({address:T,abi:D,functionName:"getLock",args:[n]});return{id:n,owner:m(r[0]),token:m(r[1]),amount:BigInt(r[2]),unlockTime:BigInt(r[3]),withdrawn:!!r[4]}}))).filter(n=>!n.withdrawn&&n.amount>0n&&B(n.owner,a)&&(!k||B(n.token,k))),l=new Map,p=async n=>{let r=n.toLowerCase(),w=l.get(r);if(w)return w;let L=n===ke?S:await oe(i,n,u);return l.set(r,L),L},x=[],I=[];for(let n of d){let r=await p(n.token),w=n.amount.toString(),L=n.unlockTime.toString(),R={token:r,amount:w};x.push({lockId:n.id.toString(),kind:"token",contract:T,chainId:u,owner:n.owner,token:r,amount:w,asset:R,unlockTime:L,withdrawn:!1}),I.push({module:"hoodlock",id:`lock:${n.id.toString()}`,chainId:u,assets:[R],description:`HoodLock token lock #${n.id} of ${e.formatAmount(w,r.decimals)} ${r.symbol} (${r.address}) until Unix ${L}.`})}let h=await i.readContract({address:v,abi:O,functionName:"locksOf",args:[a]}),y=[...new Set(h.map(n=>n.toString()))].map(n=>BigInt(n)),$=[];for(let n of y){let r=await i.readContract({address:v,abi:O,functionName:"getLock",args:[n]}),[w,L,R,F,X,V,Q,P,Y,J]=r,M=m(w);if(V||!B(M,a))continue;let ne=m(P),te=m(Y);if(k&&!B(ne,k)&&!B(te,k))continue;let[ie,re]=await Promise.all([p(ne),p(te)]),se=m(Q),ae=Number(R),de=BigInt(L).toString(),Z=BigInt(J).toString();$.push({lockId:n.toString(),kind:F?"v4":"v3",contract:v,manager:F?K:j,chainId:u,owner:M,tokenId:Z,unlockTime:de,collectFeeBps:ae,feeRecipient:se,hookVerified:!!X,token0:ie,token1:re,withdrawn:!1}),I.push({module:"hoodlock",id:`lp-lock:${n.toString()}`,chainId:u,assets:[{token:{address:F?K:j,symbol:`UNI-${F?"V4":"V3"} #${Z}`,decimals:0,chainId:u},amount:"1"}],description:`HoodLock Uniswap ${F?"v4":"v3"} LP lock #${n} (NFT #${Z}, ${ie.symbol}/${re.symbol}, feeRecipient ${se}, collectFeeBps ${ae}) until Unix ${de}. One NFT held in LiquidityLocker custody for ${M}. Underlying token amounts are not valued.`})}let A=`Found ${x.length} active token lock(s) and ${$.length} active Uniswap v3/v4 LP lock(s) for ${a}.`;return{locks:x,lpLocks:$,positions:I,summary:A}}function Fe(e){return{name:"hoodlock_list_locks",inputSchema:{type:"object",properties:{owner:{type:"string",description:"Optional owner wallet address to query (defaults to the authenticated wallet)."},token:{type:"string",description:"Optional ERC-20 or LP token address to filter active locks owned by the wallet."}},additionalProperties:!1},async execute(o,t){let a=o.owner!==void 0?E(o.owner,"owner"):m(t),k=o.token!==void 0?E(o.token,"token"):void 0;return W(e,()=>be(e,a,k))}}}function Re(e){return async o=>(await W(e,()=>be(e,o))).positions}var G=e=>({tools:[Pe(e),Ce(e),Fe(e)],positions:Re(e)}),ze=G,je=G,Ke=e=>le("hoodlock",[G(e)]),We=G;export{T as a,C as b,v as c,j as d,K as e,qe as f,Ae as g,$e as h,Pe as i,Ce as j,Fe as k,Re as l,G as m,ze as n,je as o,Ke as p,We as q};
|
|
1
|
+
import{b as q}from"./I7NUTSSX.js";import{b as S}from"./T3MGNKA6.js";import{b as le}from"./AXYOJBX6.js";import{a as _}from"./6IM6A5VA.js";import{g as B,i as ue}from"./73N3TOJL.js";import{a as H}from"./RETS2ZEK.js";import{a as u,i as N}from"./XPFVT2EA.js";import{a as c}from"./5YS5V2LK.js";import{a as ce}from"./JXOEJPJ4.js";import{encodeFunctionData as z,erc20Abi as me,getAddress as m,isAddress as he,parseAbi as U,zeroAddress as ke}from"viem";var T=m(N[u].hoodlock.locker.address),C=m(N[u].hoodlock.burner.address),v=m(N[u].hoodlock.liquidityLocker.address),j=m(N[u].uniswap.v3_position_manager.address),K=m(N[u].uniswap.v4_position_manager.address),qe="0x000000000000000000000000000000000000dEaD",Ae=3153600000n,Te=1000000000000n,fe=65535,D=U(["function fee() view returns (uint256)","function lock(address token, uint256 amount, uint256 unlockTime) payable returns (uint256 lockId)","function getLock(uint256 lockId) view returns (address owner, address token, uint256 amount, uint256 unlockTime, bool withdrawn)","function locksByOwner(address owner) view returns (uint256[])","function locksByToken(address token) view returns (uint256[])"]),ee=U(["function fee() view returns (uint256)","function burn(address token, uint256 amount) payable returns (uint256 burnId)","function DEAD() view returns (address)","function getBurn(uint256 burnId) view returns (address burner, address token, uint256 amount, uint256 timestamp)","function totalBurnedOf(address token) view returns (uint256)"]),O=U(["function fixedFee() view returns (uint256)","function collectFeeBps() view returns (uint16)","function paused() view returns (bool)","function lock(address manager, uint256 tokenId, uint256 unlockTime, address feeRecipient, bool acceptUnverifiedHook, uint16 maxCollectFeeBps) payable returns (uint256 lockId)","function lockIdOf(address manager, uint256 tokenId) view returns (uint256)","function getLock(uint256 lockId) view returns (address owner, uint40 unlockTime, uint16 collectFeeBps, bool isV4, bool hookVerified, bool withdrawn, address feeRecipient, address token0, address token1, uint256 tokenId)","function locksOf(address owner) view returns (uint256[])"]),ye=U(["function approve(address to, uint256 tokenId)"]);function $e(e,o,t){let a=o.trim();if(a.startsWith("-")){let k=a.slice(1),i=e(k,t);return i==="0"?"0":`-${i}`}return e(a,t)}function pe(e,o){return o.length===0?"no ERC-20 transfer deltas":o.map(t=>`${$e(e.formatAmount,t.amount,t.token.decimals)} ${t.token.symbol}`).join(", ")}function E(e,o="token"){if(typeof e!="string"||!e.trim())throw new c(`Provide a valid ${o} contract address.`);if(!he(e,{strict:!1}))throw new c(`Identify ${o} by chain and contract address, not by symbol.`);return m(e)}async function W(e,o){try{return await o()}catch(t){throw new c(e.plainError(t))}}function we(e){if(typeof e!="string")throw new c("Amount must be a non-negative integer string in base units.");let o=H(e);if(o<=0n)throw new c("Amount must be greater than zero.");return o}async function ge(e){let o=await e.getBlock();if(!o||typeof o.timestamp!="bigint")throw new c("Could not read the current chain timestamp. Please try again.");return o.timestamp}function ve(e,o){if(typeof e!="string"||!/^\d+$/.test(e.trim()))throw new c("unlockTime must be a non-negative integer string in Unix seconds.");let t=BigInt(e.trim());if(t>=Te)throw new c("unlockTime appears to be in milliseconds; provide Unix seconds at most 100 years (3153600000 seconds) in the future.");if(t<=o)throw new c(`unlockTime (${t}) must be in the future (greater than current timestamp ${o}).`);let a=o+Ae;if(t>a)throw new c(`unlockTime (${t}) exceeds the 100-year maximum lock duration (3153600000 seconds; max ${a}).`);return t}async function oe(e,o,t=u){let a=m(o),[k,i]=await Promise.all([e.readContract({address:a,abi:me,functionName:"symbol"}),e.readContract({address:a,abi:me,functionName:"decimals"})]);return{address:a,symbol:ce(String(k)),decimals:Number(i),chainId:t}}function Se(e,o){if(e==null)return o;let t=typeof e=="number"?e:typeof e=="string"&&/^\d+$/.test(e.trim())?Number(e.trim()):NaN;if(!Number.isInteger(t)||t<0||t>fe)throw new c("maxCollectFeeBps must be an integer between 0 and 65535.");if(t<o)throw new c(`Live collectFeeBps (${o}) exceeds maxCollectFeeBps (${t}): collect fee changed.`);return Math.min(t,o)}function Le(e){return e.tokenId!==void 0||e.manager!==void 0||e.feeRecipient!==void 0||e.maxCollectFeeBps!==void 0||e.acceptUnverifiedHook!==void 0||e.kind==="v3"||e.kind==="lp"||e.kind==="v4"||e.version==="v3"||e.version==="v4"}async function xe(e,o,t){_(t);let a=m(t),k=o.kind==="v4"||o.version==="v4",i=o.manager!==void 0?E(o.manager,"manager"):k?K:j,g=i===K;if(i!==j&&!g)throw new c(`Unsupported position manager ${i}; use the configured Uniswap v3 or v4 manager.`);if(k&&!g||g&&(o.kind==="v3"||o.version==="v3"))throw new c("The requested version disagrees with the position manager.");if(o.acceptUnverifiedHook!==void 0&&typeof o.acceptUnverifiedHook!="boolean")throw new c("acceptUnverifiedHook must be a boolean.");let b=o.acceptUnverifiedHook===!0;if(!g&&b)throw new c("Uniswap v3 has no hooks; omit acceptUnverifiedHook.");let s=g?"v4":"v3";if(typeof o.tokenId!="string")throw new c("Provide an NFT tokenId as a decimal string.");let f=String(o.tokenId).trim(),d=H(f),l=ue(o.feeRecipient,"Provide an explicit feeRecipient address for LP position locks."),p=e.clientFor(u),[x,I,h]=await Promise.all([ge(p),p.readContract({address:v,abi:O,functionName:"fixedFee"}),p.readContract({address:v,abi:O,functionName:"collectFeeBps"})]),y,$=!0;if(g){let P=U(["function getPoolAndPositionInfo(uint256 tokenId) view returns ((address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks) poolKey, uint256 info)","function getPositionLiquidity(uint256 tokenId) view returns (uint128)","function ownerOf(uint256 tokenId) view returns (address)"]),[Y,J,M]=await Promise.all([p.readContract({address:i,abi:P,functionName:"getPoolAndPositionInfo",args:[d]}),p.readContract({address:i,abi:P,functionName:"getPositionLiquidity",args:[d]}),p.readContract({address:i,abi:P,functionName:"ownerOf",args:[d]})]);if(m(M)!==a)throw new c("This wallet does not own that v4 position NFT.");if(J<=0n)throw new c("The v4 position has no liquidity to lock.");if(y=m(Y[0].hooks),$=y===ke||await p.readContract({address:v,abi:U(["function hookAllowed(address) view returns (bool)"]),functionName:"hookAllowed",args:[y]}),!$&&!b)throw new c(`Unverified v4 hook ${y}; review its risks and explicitly set acceptUnverifiedHook: true to proceed.`)}let A=ve(o.unlockTime,x),n=BigInt(I),r=Number(h);if(!Number.isInteger(r)||r<0||r>fe)throw new c(`Invalid on-chain collectFeeBps (${String(h)}).`);if(o.maxFee!==void 0){let P=H(String(o.maxFee));if(n>P)throw new c(`Live fixedFee (${n}) exceeds maxFee (${P}).`)}let w=Se(o.maxCollectFeeBps,r),L=(r/100).toString(),R=e.unsignedTx({to:i,data:z({abi:ye,functionName:"approve",args:[v,d]}),value:"0",chainId:u,description:`Approve Uniswap ${s} position NFT #${d} on ${i} for HoodLock LiquidityLocker ${v}.`}),F=e.unsignedTx({to:v,data:z({abi:O,functionName:"lock",args:[i,d,A,l,b,w]}),value:n.toString(),chainId:u,description:`Lock Uniswap ${s} NFT #${d} in HoodLock LiquidityLocker (${v}) until ${A} with feeRecipient ${l}, upfront fixedFee ${e.formatAmount(n.toString(),S.decimals)} ETH (${n} wei), and ongoing collect fee ${r} bps (${L}% of collected LP fees, frozen per lock).`}),X=[R,F],V=await e.preview(X,a),Q=`Approve and lock Uniswap ${s} NFT #${d} (manager ${i}) in HoodLock LiquidityLocker ${v} until Unix ${A}. Upfront fixedFee: ${e.formatAmount(n.toString(),S.decimals)} ETH (${n} wei). Ongoing LP fee share: ${r} bps (${L}% of collected LP fees, frozen per lock; maxCollectFeeBps=${w}) with feeRecipient ${l}. V4 hook: ${y??"none"}, reviewed: ${$}; acceptUnverifiedHook=${b}.`;return q(e,{txs:V.txs,summary:Q,preview:V,kind:s,contract:v,manager:i,tokenId:d.toString(),unlockTime:A.toString(),feeRecipient:l,acceptUnverifiedHook:b,collectFeeBps:r,maxCollectFeeBps:w,fixedFee:{token:S,amount:n.toString()}},v,n)}async function Ie(e,o,t){_(t);let a=m(t),k=E(o.token,"token"),i=e.clientFor(u),[g,b,s]=await Promise.all([ge(i),i.readContract({address:T,abi:D,functionName:"fee"}),oe(i,k,u)]),f=we(o.amount),d=ve(o.unlockTime,g),l=BigInt(b);if(o.maxFee!==void 0){let A=H(String(o.maxFee));if(l>A)throw new c(`Live lock fee (${l}) exceeds maxFee (${A}).`)}let p=e.approval(s.address,T,f.toString(),u),x=e.unsignedTx({to:T,data:z({abi:D,functionName:"lock",args:[s.address,f,d]}),value:l.toString(),chainId:u,description:`Lock ${e.formatAmount(f.toString(),s.decimals)} ${s.symbol} (${f} base units of ${s.address}) in HoodLock Locker ${T} until ${d} with exact fee ${e.formatAmount(l.toString(),S.decimals)} ETH (${l} wei).`}),I=[p,x],h=await e.preview(I,a),y=pe(e,h.changes),$=`Approve and lock ${e.formatAmount(f.toString(),s.decimals)} ${s.symbol} (${f} base units of ${s.address}) in HoodLock Locker ${T} until Unix ${d}. Exact fee: ${e.formatAmount(l.toString(),S.decimals)} ETH (${l} wei). Preview changes: ${y}.`;return q(e,{txs:h.txs,summary:$,preview:h,kind:"token",contract:T,token:s,amount:f.toString(),unlockTime:d.toString(),fee:{token:S,amount:l.toString()}},T,l)}function Pe(e){return{name:"hoodlock_lock",inputSchema:{type:"object",properties:{kind:{type:"string",enum:["token","v2","v3","v4"],description:"Lock mode: token/v2 LP via Locker, or Uniswap v3/v4 NFT via LiquidityLocker."},token:{type:"string",description:"ERC-20 token or v2 LP token contract address on chain 4663 (for token/v2 locks)."},amount:{type:"string",description:"Token amount as an integer string in base units (for token/v2 locks)."},manager:{type:"string",description:"Configured Uniswap v3 or v4 position manager; inferred from kind when omitted."},tokenId:{type:"string",description:"Uniswap NFT position tokenId as a decimal string."},feeRecipient:{type:"string",description:"Explicit recipient address for collected LP fees during a position lock."},acceptUnverifiedHook:{type:"boolean",description:"Explicit v4 unreviewed-hook consent; default false. A reviewed hook is not a safety guarantee."},maxFee:{type:"string",description:"Maximum upfront ETH fee in wei; the exact live fee is sent."},maxCollectFeeBps:{type:"number",description:"Maximum acceptable ongoing LP collect fee in bps (uint16, must be >= live collectFeeBps)."},unlockTime:{type:"string",description:"Unlock timestamp in Unix seconds (must be > now and <= now + 100 years)."}},required:["unlockTime"],additionalProperties:!1},async execute(o,t){return W(e,async()=>Le(o)?xe(e,o,t):Ie(e,o,t))}}}function Ce(e){return{name:"hoodlock_burn",inputSchema:{type:"object",properties:{token:{type:"string",description:"ERC-20 token contract address on chain 4663 to send to the dead address via HoodLock Burner."},amount:{type:"string",description:"Amount to burn as an integer string in base units."}},required:["token","amount"],additionalProperties:!1},async execute(o,t){return W(e,async()=>{_(t);let a=m(t),k=E(o.token,"token"),i=e.clientFor(u),[g,b,s]=await Promise.all([i.readContract({address:C,abi:ee,functionName:"fee"}),i.readContract({address:C,abi:ee,functionName:"DEAD"}),oe(i,k,u)]),f=we(o.amount),d=BigInt(g),l=m(b);if(o.maxFee!==void 0){let A=H(String(o.maxFee));if(d>A)throw new c(`Live burn fee (${d}) exceeds maxFee (${A}).`)}let p=e.approval(s.address,C,f.toString(),u),x=e.unsignedTx({to:C,data:z({abi:ee,functionName:"burn",args:[s.address,f]}),value:d.toString(),chainId:u,description:`Send ${e.formatAmount(f.toString(),s.decimals)} ${s.symbol} (${f} base units of ${s.address}) to the dead address (${l}) via HoodLock Burner ${C} (totalSupply is unchanged) with exact fee ${e.formatAmount(d.toString(),S.decimals)} ETH (${d} wei).`}),I=[p,x],h=await e.preview(I,a),y=pe(e,h.changes),$=`Approve and send ${e.formatAmount(f.toString(),s.decimals)} ${s.symbol} (${f} base units of ${s.address}) to the dead address (${l}) via HoodLock Burner ${C}. Note: tokens are transferred to ${l} and totalSupply is unchanged. Exact fee: ${e.formatAmount(d.toString(),S.decimals)} ETH (${d} wei). Preview changes: ${y}.`;return q(e,{txs:h.txs,summary:$,preview:h,contract:C,deadAddress:l,token:s,amount:f.toString(),fee:{token:S,amount:d.toString()},totalSupplyReduced:!1},C,d)})}}}async function be(e,o,t){_(o);let a=m(o),k=t?E(t,"token"):void 0,i=e.clientFor(u),g=[],b=new Set,s=n=>{for(let r of n){let w=r.toString();b.has(w)||(b.add(w),g.push(r))}};if(k){let[n,r]=await Promise.all([i.readContract({address:T,abi:D,functionName:"locksByToken",args:[k]}),i.readContract({address:T,abi:D,functionName:"locksByOwner",args:[a]})]);s(n),s(r)}else{let n=await i.readContract({address:T,abi:D,functionName:"locksByOwner",args:[a]});s(n)}let d=(await Promise.all(g.map(async n=>{let r=await i.readContract({address:T,abi:D,functionName:"getLock",args:[n]});return{id:n,owner:m(r[0]),token:m(r[1]),amount:BigInt(r[2]),unlockTime:BigInt(r[3]),withdrawn:!!r[4]}}))).filter(n=>!n.withdrawn&&n.amount>0n&&B(n.owner,a)&&(!k||B(n.token,k))),l=new Map,p=async n=>{let r=n.toLowerCase(),w=l.get(r);if(w)return w;let L=n===ke?S:await oe(i,n,u);return l.set(r,L),L},x=[],I=[];for(let n of d){let r=await p(n.token),w=n.amount.toString(),L=n.unlockTime.toString(),R={token:r,amount:w};x.push({lockId:n.id.toString(),kind:"token",contract:T,chainId:u,owner:n.owner,token:r,amount:w,asset:R,unlockTime:L,withdrawn:!1}),I.push({module:"hoodlock",id:`lock:${n.id.toString()}`,chainId:u,assets:[R],description:`HoodLock token lock #${n.id} of ${e.formatAmount(w,r.decimals)} ${r.symbol} (${r.address}) until Unix ${L}.`})}let h=await i.readContract({address:v,abi:O,functionName:"locksOf",args:[a]}),y=[...new Set(h.map(n=>n.toString()))].map(n=>BigInt(n)),$=[];for(let n of y){let r=await i.readContract({address:v,abi:O,functionName:"getLock",args:[n]}),[w,L,R,F,X,V,Q,P,Y,J]=r,M=m(w);if(V||!B(M,a))continue;let ne=m(P),te=m(Y);if(k&&!B(ne,k)&&!B(te,k))continue;let[ie,re]=await Promise.all([p(ne),p(te)]),se=m(Q),ae=Number(R),de=BigInt(L).toString(),Z=BigInt(J).toString();$.push({lockId:n.toString(),kind:F?"v4":"v3",contract:v,manager:F?K:j,chainId:u,owner:M,tokenId:Z,unlockTime:de,collectFeeBps:ae,feeRecipient:se,hookVerified:!!X,token0:ie,token1:re,withdrawn:!1}),I.push({module:"hoodlock",id:`lp-lock:${n.toString()}`,chainId:u,assets:[{token:{address:F?K:j,symbol:`UNI-${F?"V4":"V3"} #${Z}`,decimals:0,chainId:u},amount:"1"}],description:`HoodLock Uniswap ${F?"v4":"v3"} LP lock #${n} (NFT #${Z}, ${ie.symbol}/${re.symbol}, feeRecipient ${se}, collectFeeBps ${ae}) until Unix ${de}. One NFT held in LiquidityLocker custody for ${M}. Underlying token amounts are not valued.`})}let A=`Found ${x.length} active token lock(s) and ${$.length} active Uniswap v3/v4 LP lock(s) for ${a}.`;return{locks:x,lpLocks:$,positions:I,summary:A}}function Fe(e){return{name:"hoodlock_list_locks",inputSchema:{type:"object",properties:{owner:{type:"string",description:"Optional owner wallet address to query (defaults to the authenticated wallet)."},token:{type:"string",description:"Optional ERC-20 or LP token address to filter active locks owned by the wallet."}},additionalProperties:!1},async execute(o,t){let a=o.owner!==void 0?E(o.owner,"owner"):m(t),k=o.token!==void 0?E(o.token,"token"):void 0;return W(e,()=>be(e,a,k))}}}function Re(e){return async o=>(await W(e,()=>be(e,o))).positions}var G=e=>({tools:[Pe(e),Ce(e),Fe(e)],positions:Re(e)}),ze=G,je=G,Ke=e=>le("hoodlock",[G(e)]),We=G;export{T as a,C as b,v as c,j as d,K as e,qe as f,Ae as g,$e as h,Pe as i,Ce as j,Fe as k,Re as l,G as m,ze as n,je as o,Ke as p,We as q};
|