@oakagentkit/core 0.1.0 → 0.1.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.
Files changed (118) hide show
  1. package/build/dist/api/addresses.d.ts +1 -1
  2. package/build/dist/api/addresses.js +1 -1
  3. package/build/dist/api/amounts.js +1 -1
  4. package/build/dist/api/canonical.js +1 -1
  5. package/build/dist/api/chain.js +1 -1
  6. package/build/dist/api/errors.d.ts +1 -0
  7. package/build/dist/api/errors.js +1 -1
  8. package/build/dist/api/gas.d.ts +5 -0
  9. package/build/dist/api/gas.js +1 -0
  10. package/build/dist/api/grandfather.js +1 -1
  11. package/build/dist/api/history.js +1 -1
  12. package/build/dist/api/http.js +1 -1
  13. package/build/dist/api/identity-link.js +1 -1
  14. package/build/dist/api/merkle.js +1 -1
  15. package/build/dist/api/metadata.js +1 -1
  16. package/build/dist/api/module.js +1 -1
  17. package/build/dist/api/modules/beefy/index.js +1 -1
  18. package/build/dist/api/modules/clanker/index.js +1 -1
  19. package/build/dist/api/modules/erc8004/index.d.ts +11 -0
  20. package/build/dist/api/modules/erc8004/index.js +1 -1
  21. package/build/dist/api/modules/grove/index.js +1 -1
  22. package/build/dist/api/modules/heyresearch/index.js +1 -1
  23. package/build/dist/api/modules/hoodag/index.js +1 -1
  24. package/build/dist/api/modules/hoodlock/airdrop.js +1 -1
  25. package/build/dist/api/modules/hoodlock/index.js +1 -1
  26. package/build/dist/api/modules/hoodlock/locks-burn.js +1 -1
  27. package/build/dist/api/modules/hookr/create-cancel.js +1 -1
  28. package/build/dist/api/modules/hookr/fill-bounty.js +1 -1
  29. package/build/dist/api/modules/hookr/index.js +1 -1
  30. package/build/dist/api/modules/kyberswap/index.js +1 -1
  31. package/build/dist/api/modules/lighter/index.js +1 -1
  32. package/build/dist/api/modules/longbow/index.js +1 -1
  33. package/build/dist/api/modules/meridian/index.js +1 -1
  34. package/build/dist/api/modules/meridian/markets.js +1 -1
  35. package/build/dist/api/modules/meridian/rfq.js +1 -1
  36. package/build/dist/api/modules/merkl/index.js +1 -1
  37. package/build/dist/api/modules/morpho/index.js +1 -1
  38. package/build/dist/api/modules/netnet/index.js +1 -1
  39. package/build/dist/api/modules/orbio/index.js +1 -1
  40. package/build/dist/api/modules/pons/claim.js +1 -1
  41. package/build/dist/api/modules/pons/index.js +1 -1
  42. package/build/dist/api/modules/pons/launch-status.js +1 -1
  43. package/build/dist/api/modules/pons/prices.js +1 -1
  44. package/build/dist/api/modules/pons/trade.js +1 -1
  45. package/build/dist/api/modules/poolstrade/index.js +1 -1
  46. package/build/dist/api/modules/priors/index.js +1 -1
  47. package/build/dist/api/modules/relay/inbound.d.ts +2 -0
  48. package/build/dist/api/modules/relay/inbound.js +1 -1
  49. package/build/dist/api/modules/relay/index.js +1 -1
  50. package/build/dist/api/modules/relay/outbound-status.js +1 -1
  51. package/build/dist/api/modules/spark/index.js +1 -1
  52. package/build/dist/api/modules/steakhouse/index.js +1 -1
  53. package/build/dist/api/modules/tickerspring/index.js +1 -1
  54. package/build/dist/api/modules/uniswap/index.js +1 -1
  55. package/build/dist/api/modules/uniswap/v3.js +1 -1
  56. package/build/dist/api/modules/uniswap/v4.js +1 -1
  57. package/build/dist/api/modules/velora/index.js +1 -1
  58. package/build/dist/api/positions.js +1 -1
  59. package/build/dist/api/pricenote.js +1 -1
  60. package/build/dist/api/prices.js +1 -1
  61. package/build/dist/api/pricing.js +1 -1
  62. package/build/dist/api/routes.js +1 -1
  63. package/build/dist/api/secret-fields.js +1 -1
  64. package/build/dist/api/simulate.js +1 -1
  65. package/build/dist/api/swap.d.ts +5 -1
  66. package/build/dist/api/swap.js +1 -1
  67. package/build/dist/api/tokens.js +1 -1
  68. package/build/dist/api/tx.js +1 -1
  69. package/build/dist/api/types.d.ts +3 -0
  70. package/build/dist/api/vendor-limits.js +1 -1
  71. package/build/dist/chunks/{OOSNTGDJ.js → 5B3UVWMV.js} +1 -1
  72. package/build/dist/chunks/5BP72XOA.js +1 -0
  73. package/build/dist/chunks/5SH3C7XP.js +1 -0
  74. package/build/dist/chunks/{YEE3KKTA.js → 6YQ2RX5I.js} +1 -1
  75. package/build/dist/chunks/{64EN6Y7E.js → 74X7PXPR.js} +1 -1
  76. package/build/dist/chunks/{B5RZYFQC.js → 7I6TXFXR.js} +1 -1
  77. package/build/dist/chunks/A5O3SRHY.js +1 -0
  78. package/build/dist/chunks/{D45AODDL.js → B2LA6VVF.js} +1 -1
  79. package/build/dist/chunks/{ZERWRK6X.js → CWQ5WXZQ.js} +1 -1
  80. package/build/dist/chunks/{YTHDLCHL.js → F3TOOLFQ.js} +1 -1
  81. package/build/dist/chunks/GOIVHR4B.js +1 -0
  82. package/build/dist/chunks/{47PKSOXA.js → M643PYHO.js} +1 -1
  83. package/build/dist/chunks/{P7Q6MJZH.js → MEZH7RPA.js} +1 -1
  84. package/build/dist/chunks/{AE6YEEZP.js → NDHEJGWR.js} +1 -1
  85. package/build/dist/chunks/NNJLMS7F.js +1 -0
  86. package/build/dist/chunks/{ZKOMJGNH.js → PQHU5A3U.js} +1 -1
  87. package/build/dist/chunks/{UL2L7NHO.js → R5CBH2CR.js} +1 -1
  88. package/build/dist/chunks/{VZPFBWVH.js → RYOVSHKO.js} +1 -1
  89. package/build/dist/chunks/{75D6Q7L3.js → SUQ6PIAV.js} +1 -1
  90. package/build/dist/chunks/{KFMNCJXJ.js → SXBGOGYQ.js} +1 -1
  91. package/build/dist/chunks/{LZK6C5LT.js → T4IYMYZD.js} +1 -1
  92. package/build/dist/chunks/{IABIXUNX.js → TFYLOWFO.js} +1 -1
  93. package/build/dist/chunks/{ZUAXW2ZD.js → TU3KHOZK.js} +1 -1
  94. package/build/dist/chunks/{SGDWO7XI.js → UB5U6SI2.js} +1 -1
  95. package/build/dist/chunks/UIJWIFGV.js +1 -0
  96. package/build/dist/chunks/{VZWOWR6G.js → VBWJOG3N.js} +1 -1
  97. package/build/dist/chunks/{KP7VSXIQ.js → WFE3NXBF.js} +1 -1
  98. package/build/dist/chunks/XAB4OIE3.js +1 -0
  99. package/build/dist/chunks/XEN45QST.js +1 -0
  100. package/build/dist/chunks/{MGEJPRXP.js → XKZOMGC3.js} +1 -1
  101. package/build/dist/chunks/{JMPOXXNJ.js → XTUXR43N.js} +1 -1
  102. package/build/dist/chunks/{UZH4FQEL.js → Y2SGXWFM.js} +1 -1
  103. package/build/dist/chunks/Z3FZWNAJ.js +1 -0
  104. package/build/dist/chunks/Z53DADZ4.js +1 -0
  105. package/build/dist/chunks/ZJUNO5N7.js +1 -0
  106. package/build/dist/chunks/ZZLHDHOT.js +1 -0
  107. package/package.json +9 -13
  108. package/build/dist/chunks/24JYIH53.js +0 -1
  109. package/build/dist/chunks/25EOXUBI.js +0 -1
  110. package/build/dist/chunks/4P6XI564.js +0 -1
  111. package/build/dist/chunks/6YU3JLQQ.js +0 -1
  112. package/build/dist/chunks/BH3CI6WO.js +0 -1
  113. package/build/dist/chunks/CUBRTOMA.js +0 -1
  114. package/build/dist/chunks/FSSCJNAQ.js +0 -1
  115. package/build/dist/chunks/S3YSJ7XH.js +0 -1
  116. package/build/dist/chunks/T5E4OJEU.js +0 -1
  117. package/build/dist/chunks/VBV366XQ.js +0 -1
  118. package/build/dist/chunks/XUL6NKAK.js +0 -1
@@ -1 +0,0 @@
1
- import{b as B,o as E}from"./VBV366XQ.js";import{c as G}from"./ZUAXW2ZD.js";import{b as J}from"./SGDWO7XI.js";import{a as p,i as W}from"./25EOXUBI.js";import{a as z}from"./B5RZYFQC.js";import{a as r}from"./T5E4OJEU.js";import{decodeFunctionResult as se,encodeAbiParameters as P,encodeFunctionData as v,erc20Abi as O,isAddress as ee,parseAbi as ne,parseAbiParameters as $,toHex as re,zeroAddress as L}from"viem";var h=W[p].clanker,H=ne(["function deployToken(((address tokenAdmin,string name,string symbol,bytes32 salt,string image,string metadata,string context,uint256 originatingChainId) tokenConfig,(address hook,address pairedToken,int24 tickIfToken0IsClanker,int24 tickSpacing,bytes poolData) poolConfig,(address locker,address[] rewardAdmins,address[] rewardRecipients,uint16[] rewardBps,int24[] tickLower,int24[] tickUpper,uint16[] positionBps,bytes lockerData) lockerConfig,(address mevModule,bytes mevModuleData) mevModuleConfig,(address extension,uint256 msgValue,uint16 extensionBps,bytes extensionData)[] extensionConfigs) config) payable returns (address)","function tokenDeploymentInfo(address) view returns ((address,address,address,address[]))"]),k=ne(["function availableFees(address,address) view returns (uint256)","function claim(address,address)","function collectRewards(address)","function mevModuleEnabled(bytes32) view returns (bool)","function mevModuleOperational(bytes32) returns (bool)"]),A={address:h.paired_weth.address,symbol:"WETH",decimals:18,chainId:p},ie="https://www.clanker.world/api/tokens",K={type:"string",pattern:"^\\d+$"},Q={type:"string",pattern:"^0x[0-9a-fA-F]{40}$"},X={type:"string",pattern:"^0x[0-9a-fA-F]{64}$"};function D(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function b(e){if(typeof e!="string"||!ee(e,{strict:!1})||e.toLowerCase()===L)throw new r("Provide a valid nonzero address.");return e}function Y(e,t){if(typeof e!="string"||!/^0x[0-9a-fA-F]{64}$/.test(e))throw new r(`Provide an explicit bytes32 ${t}.`);return e}function C(e,t,i=!1){if(e===void 0&&!i)return"";if(typeof e!="string"||i&&!e.trim())throw new r(`Provide ${t} as text.`);return e}function F(e,t=256){let i=z(e);if(i>=1n<<BigInt(t))throw new r(`Amount exceeds the uint${t} range.`);return i}function R(e){if(typeof e!="bigint"||e<0n||e>=1n<<256n)throw new r("The contract returned an invalid amount.");return e.toString()}function U(e,t){let i=Object.keys(e).find(m=>!t.includes(m));if(i)throw new r(`Unsupported Clanker input: ${i}.`)}function Z(e,t){return t.changes.map(({token:i,amount:m})=>{let w=m.startsWith("-");return`${w?"-":"+"}${e.formatAmount(w?m.slice(1):m,i.decimals)} ${i.symbol} (${i.address}, chain ${i.chainId})`}).join("; ")}function ae(e){return D(e)&&Array.isArray(e.data)&&Number.isSafeInteger(e.total)&&Number(e.total)>=0&&Number.isSafeInteger(e.tokensDeployed)&&Number(e.tokensDeployed)>=0&&(e.cursor===null||typeof e.cursor=="string"||e.cursor===void 0&&e.data.length===0&&e.total===0&&e.tokensDeployed===0)&&e.data.every(t=>D(t)&&typeof t.name=="string"&&typeof t.symbol=="string"&&Number.isSafeInteger(t.chain_id)&&["contract_address","admin","msg_sender","factory_address"].every(i=>typeof t[i]=="string"&&ee(t[i],{strict:!1})))}async function de(e,t={}){U(t,["q","limit","cursor","deployer"]);let i=t.limit??10;if(typeof i!="number"||!Number.isInteger(i)||i<1||i>20)throw new r("Choose an indexer limit from 1 to 20.");let m=new URL(ie);m.searchParams.set("chainId",String(p)),m.searchParams.set("limit",String(i)),t.q!==void 0&&m.searchParams.set("q",C(t.q,"search")),t.cursor!==void 0&&m.searchParams.set("cursor",C(t.cursor,"cursor",!0)),t.deployer!==void 0&&m.searchParams.set("msgSender",b(t.deployer));let w=await G(e.http,m.toString(),{headers:{"User-Agent":"Oak-Clanker/1.0"}},ae);return{tokens:w.data.filter(x=>x.chain_id===p&&x.factory_address.toLowerCase()===h.factory.address.toLowerCase()),total:w.total,cursor:w.cursor||null,tokensDeployed:w.tokensDeployed}}var ce=e=>{let t=()=>e.clientFor(p),i=async n=>{try{return await n()}catch(s){throw new r(e.plainError(s))}},m=(n,s,l,d="0")=>e.unsignedTx({to:n,data:s,value:d,chainId:p,description:l}),w=async(n,s)=>R(await t().readContract({address:h.fee_locker.address,abi:k,functionName:"availableFees",args:[n,s]})),x=async n=>{if(n.toLowerCase()===A.address.toLowerCase())return A;let[s,l]=await Promise.all([t().readContract({address:n,abi:O,functionName:"symbol"}),t().readContract({address:n,abi:O,functionName:"decimals"})]);if(typeof s!="string"||!s.trim()||!Number.isInteger(l)||l<0||l>255)throw new r("The contract returned invalid token metadata.");return{address:n,chainId:p,symbol:s,decimals:l}},q=n=>de(e,n),te=async(n,s)=>{if(U(n,["name","symbol","salt","image","metadata","context","vanity","initialBuy","minAmountOut","slippageBps"]),n.vanity!==void 0&&n.vanity!==!1)throw new r("Clanker launches use vanity false and an explicit salt.");let l=C(n.name,"token name",!0),d=C(n.symbol,"token symbol",!0),g=Y(n.salt,"salt"),f=F(n.initialBuy??"0"),c=n.slippageBps??B;if(typeof c!="number")throw new r("Slippage must be an integer from 0 to 9999 bps.");E("0",c);let o=n.minAmountOut===void 0?void 0:F(n.minAmountOut,128);if(o!==void 0&&o<=1n)throw new r("Initial-buy minimum must exceed one base unit.");if(!f&&o!==void 0)throw new r("A minimum requires a positive initial buy.");let u={tokenConfig:{tokenAdmin:s,name:l,symbol:d,salt:g,image:C(n.image,"image"),metadata:C(n.metadata,"metadata"),context:n.context===void 0?JSON.stringify({interface:"Oak",platform:"robinhood"}):C(n.context,"context"),originatingChainId:BigInt(p)},poolConfig:{hook:h.fee_static_hook_v2.address,pairedToken:A.address,tickIfToken0IsClanker:-230400,tickSpacing:200,poolData:P($("(address,bytes,bytes)"),[[L,"0x",P($("uint24,uint24"),[1e4,1e4])]])},lockerConfig:{locker:h.locker.address,rewardAdmins:[s],rewardRecipients:[s],rewardBps:[1e4],tickLower:[-230400],tickUpper:[-12e4],positionBps:[1e4],lockerData:P($("(uint8[])"),[[[0]]])},mevModuleConfig:{mevModule:h.mev_module.address,mevModuleData:P($("(uint24,uint24,uint256)"),[[666777,41673,15n]])},extensionConfigs:[]},y=await t().simulateContract({address:h.factory.address,abi:H,functionName:"deployToken",args:[u],account:s,value:0n}),a=b(y.result),S=V=>{let M=f?[{extension:h.devbuy.address,msgValue:f,extensionBps:0,extensionData:P($("(address,address,uint24,int24,address),uint128,address"),[[L,L,0,0,L],V,s])}]:[];return m(h.factory.address,v({abi:H,functionName:"deployToken",args:[{...u,extensionConfigs:M}]}),`Launch ${l} (${d}); initial buy ${f} native ETH base units.`,f.toString())};if(f&&o===void 0){let M=(await e.preview([S(0n)],s)).changes.filter(T=>T.token.chainId===p&&T.token.address.toLowerCase()===a.toLowerCase()&&T.token.decimals===18).reduce((T,j)=>T+(/^-?\d+$/.test(j.amount)?BigInt(j.amount):(()=>{throw new r("Invalid initial-buy simulation amount.")})()),0n);if(M<=0n)throw new r("Initial-buy simulation returned no token output.");if(o=F(E(M.toString(),c),128),o<=1n)throw new r("Initial-buy output is too small for a protected minimum.")}let I=[S(o??0n)],N=await e.preview(I,s);return{txs:I,preview:N,predictedToken:a,token:{address:a,chainId:p,symbol:d,decimals:18},...o!==void 0?{minAmountOut:o.toString()}:{},summary:`Launch ${d} at ${a} (CREATE2 address predicted from simulation); vanity false; salt ${g}. Supply 100000000000000000000000000000 base units (18 decimals). Static LP fee 1%; protocol adds 20% of LP fees. Reward allocation: ${s} 10000 bps, both assets. Position 10000 bps, ticks -230400 to -120000, spacing 200. Sniper fees 666777 to 41673 over 15 seconds. ${N.summary} ${Z(e,N)}`}},oe=async(n,s)=>{if(U(n,["token","poolId"]),n.poolId!==void 0&&n.token===void 0)throw new r("A pool ID requires its Clanker token.");let l=[A],d=[];if(n.token!==void 0){let o=b(n.token);if(o.toLowerCase()===A.address.toLowerCase())throw new r("Provide the launched Clanker token, not WETH.");if(n.poolId!==void 0){let u=Y(n.poolId,"pool ID for fee collection"),y=await t().readContract({address:h.factory.address,abi:H,functionName:"tokenDeploymentInfo",args:[o]});if(!Array.isArray(y)||y.length!==4||typeof y[0]!="string"||y[0].toLowerCase()!==o.toLowerCase())throw new r("The factory did not identify this Clanker token.");let a=b(y[1]),S=b(y[2]),I=await t().readContract({address:a,abi:k,functionName:"mevModuleEnabled",args:[u]});if(typeof I!="boolean")throw new r("The hook returned an invalid MEV guard state.");I&&d.push(m(a,v({abi:k,functionName:"mevModuleOperational",args:[u]}),"Update the Clanker pool MEV guard before collection.")),d.push(m(S,v({abi:k,functionName:"collectRewards",args:[o]}),"Collect pending LP fees into the fee locker."))}l.push(await x(o))}let g;if(d.length){if(await t().getChainId()!==p)throw new r("Fee simulation endpoint is on the wrong chain.");let o=[...d.map(a=>({from:s,to:a.to,data:a.data,value:re(BigInt(a.value))})),...l.map(a=>({from:s,to:h.fee_locker.address,data:v({abi:k,functionName:"availableFees",args:[s,a.address]}),value:"0x0"}))],u=await t().request({method:"eth_simulateV1",params:[{blockStateCalls:[{calls:o}],validation:!1,traceTransfers:!1},"latest"]},{retryCount:0});if(!Array.isArray(u)||u.length!==1||!D(u[0])||!Array.isArray(u[0].calls)||u[0].calls.length!==o.length)throw new r("The endpoint returned an unexpected fee simulation response.");let y=u[0].calls;if(!y.every(a=>D(a)&&a.status==="0x1"&&!a.error))throw new r("Clanker fee collection simulation failed.");g=y.slice(d.length).map(a=>{if(!D(a)||typeof a.returnData!="string"||!/^0x[0-9a-fA-F]{64}$/.test(a.returnData))throw new r("The endpoint returned an invalid fee balance.");return R(se({abi:k,functionName:"availableFees",data:a.returnData}))})}else g=await Promise.all(l.map(o=>w(s,o.address)));let f=l.flatMap((o,u)=>BigInt(g[u])>0n?[{token:o,amount:g[u]}]:[]);if(!f.length)throw new r("No claimable fees for this wallet; pending LP fees may require the MEV window to end.");for(let{token:o}of f)d.push(m(h.fee_locker.address,v({abi:k,functionName:"claim",args:[s,o.address]}),`Claim ${o.symbol} fees to ${s}.`));let c=await e.preview(d,s);return{txs:d,preview:c,fees:f,summary:`Claim fees to ${s}. WETH fees aggregate across all Clanker launches for this recipient. ${c.summary} ${Z(e,c)}`}},_=(n,s,l,d)=>({name:`clanker_${n}`,inputSchema:{type:"object",properties:s,required:l,additionalProperties:!1},execute:(g,f)=>i(async()=>d(g,b(f)))});return{tools:[_("launch",{name:{type:"string"},symbol:{type:"string"},salt:X,image:{type:"string"},metadata:{type:"string"},context:{type:"string"},vanity:{const:!1},initialBuy:{...K,description:"Native ETH base units, 18 decimals."},minAmountOut:{...K,description:"Minimum new token base units, 18 decimals; derived from simulation when omitted."},slippageBps:{type:"integer",minimum:0,maximum:9999,default:B}},["name","symbol","salt"],te),_("claim",{token:{...Q,description:"Optional launched token to claim already-collected token fees or collect LP fees."},poolId:{...X,description:"Optional pool ID used with token to sync the MEV guard and collect pending LP fees before claiming."}},[],oe),_("browse",{q:{type:"string"},limit:{type:"integer",minimum:1,maximum:20},cursor:{type:"string"},deployer:Q},[],q)],positions:n=>i(async()=>{b(n);let s=new Map,l=new Set,d;do{let c=await q({deployer:n,limit:20,...d?{cursor:d}:{}});for(let o of c.tokens)o.msg_sender.toLowerCase()===n.toLowerCase()&&s.set(o.contract_address.toLowerCase(),o);if(c.cursor&&l.has(c.cursor))throw new r("The Clanker indexer repeated a pagination cursor.");c.cursor&&l.add(c.cursor),d=c.cursor??void 0}while(d);let g=[],f=[A];for(let[c,o]of s){let u=await x(o.contract_address),y=R(await t().readContract({address:u.address,abi:O,functionName:"balanceOf",args:[n]}));g.push({module:"clanker",id:`launch:${c}`,chainId:p,assets:[{token:u,amount:y}],description:`Indexed launch ${o.name}; wallet token balance, not locked LP principal.`}),f.some(a=>a.address.toLowerCase()===u.address.toLowerCase())||f.push(u)}for(let c of f){let o=await w(n,c.address);BigInt(o)>0n&&g.push({module:"clanker",id:`fees:${c.address.toLowerCase()}`,chainId:p,assets:[{token:c,amount:o}],description:"Collected fees across launches for this recipient. Pending LP fees excluded; token-side discovery covers indexed launches by this wallet."})}return g})}},he=e=>J("clanker",[ce(e)]);export{de as a,ce as b,he as c};
@@ -1 +0,0 @@
1
- import{a as r}from"./T5E4OJEU.js";var a=4663,o=46630,p=18,f=6,x="finalized",h="recipient",A="direct",v="totalSupply",s={4663:{pons:{factory:{address:"0x7eD598BcEf8bd9Edd8C97A195C6d13f40801EC7e",source:"Recorded chain and API observations",pointer:"/pons/factory",block:"100307770",blockKind:"read",blockPointer:"/pinnedBlocks/ponsReads"},launchAndBuyRouter:{address:"0xe33E9E479dF8802cb0866d5d05258bEc4cF62948",source:"Recorded chain and API observations",pointer:"/pons/launchAndBuyRouter",block:"100307770",blockKind:"read",blockPointer:"/pinnedBlocks/ponsReads"},memeHook:{address:"0xE5e702641Ea86F4ae6cC3cDaeD2B886f976Be044",source:"Recorded chain and API observations",pointer:"/pons/memeHook",block:"100307770",blockKind:"read",blockPointer:"/pinnedBlocks/ponsReads"},feeEscrow:{address:"0xd3AFEB2a57f70eF218Aa82451c51B2fb0416Ac9e",source:"Recorded chain and API observations",pointer:"/pons/feeEscrow",block:"100307770",blockKind:"read",blockPointer:"/pinnedBlocks/ponsReads"},buybackVault:{address:"0x42df2a798f82289E177311362e8f5ccC45c1219c",source:"Recorded chain and API observations",pointer:"/pons/buybackVault",block:"100307770",blockKind:"read",blockPointer:"/pinnedBlocks/ponsReads"},locker:{address:"0x267444D099b10fB5Ed7c3Cc7B7c767AdcA574952",source:"Recorded chain and API observations",pointer:"/pons/locker",block:"100307770",blockKind:"read",blockPointer:"/pinnedBlocks/ponsReads"},launchDeployer:{address:"0x3711ceA4feaDE896C913C68F01Eda97Cb06D1A42",source:"Recorded chain and API observations",pointer:"/pons/launchDeployer",block:"100307770",blockKind:"read",blockPointer:"/pinnedBlocks/ponsReads"},graduationExecutor:{address:"0xC7819B64A1dAECD7eC19856d026cb14EfBd89046",source:"Recorded chain and API observations",pointer:"/pons/graduationExecutor",block:"100307770",blockKind:"read",blockPointer:"/pinnedBlocks/ponsReads"},graduationGuard:{address:"0xf5695117b99B6f6401e67d4195BD653628176C6C",source:"Recorded chain and API observations",pointer:"/pons/graduationGuard",block:"100307770",blockKind:"read",blockPointer:"/pinnedBlocks/ponsReads"},poolManager:{address:"0x8366a39CC670B4001A1121B8F6A443A643e40951",source:"Recorded chain and API observations",pointer:"/pons/poolManager",block:"100307770",blockKind:"read",blockPointer:"/pinnedBlocks/ponsReads"},positionManager:{address:"0x58daec3116aae6D93017bAAea7749052E8a04fA7",source:"Recorded chain and API observations",pointer:"/pons/positionManager",block:"100307770",blockKind:"read",blockPointer:"/pinnedBlocks/ponsReads"}},oracle:{ethUsdgPool:{address:"0x52e65B17fB6E5BA00Ed806f37Afcd2DaA50271Ca",source:"Recorded chain and API observations",pointer:"/ethUsdgPool/address",block:"100307735",blockKind:"read",blockPointer:"/ethUsdgPool/rawReading/block"}},tokens:{USDG:{address:"0x5fc5360d0400a0fd4f2af552add042d716f1d168",source:"Recorded chain and API observations",pointer:"/usdg/address",block:null,blockKind:"latest",caveat:"Token reads around head 100305826; not individually pinned (Part B section 1.2)."},WETH:{address:"0x0bd7d308f8e1639fab988df18a8011f41eacad73",source:"Recorded chain and API observations",pointer:"/routers/wrappedNative",block:null,blockKind:"latest"}},routes:{kyberswap:{address:"0x6131B5fae19EA4f9D964eAc0408E4408b66337b5",source:"Recorded chain and API observations",pointer:"/routers/kyberswap/router",block:null,blockKind:"latest",caveat:"Historical API target; validate each fresh quote/build chain and target."},velora:{address:"0x6a000f20005980200259b80c5102003040001068",source:"Recorded chain and API observations",pointer:"/routers/velora/router",block:null,blockKind:"latest",caveat:"Historical API target; validate each fresh quote/build chain and target."}},ponsClaims:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",source:"Recorded chain and API observations",pointer:"/addresses/multicall3/address",block:null,blockKind:"unanchored",caveat:"Code present in the source snapshot; exact code-read block not recorded."}},ponsTrade:{universal_router:{address:"0x204faca1764b154221e35c0d20abb3c525710498",source:"Recorded chain and API observations",pointer:"/contracts/universal_router/address",block:"100372649",blockKind:"read",blockPointer:"/limitations/0"},pool_manager:{address:"0x8366a39cc670b4001a1121b8f6a443a643e40951",source:"Recorded chain and API observations",pointer:"/contracts/pool_manager/address",block:"100372649",blockKind:"read",blockPointer:"/limitations/0"},state_view:{address:"0xf3334192d15450cdd385c8b70e03f9a6bd9e673b",source:"Recorded chain and API observations",pointer:"/contracts/state_view/address",block:"100372649",blockKind:"read",blockPointer:"/limitations/0"},quoter:{address:"0x8dc178efb8111bb0973dd9d722ebeff267c98f94",source:"Recorded chain and API observations",pointer:"/contracts/quoter/address",block:"100372649",blockKind:"read",blockPointer:"/limitations/0"},permit2:{address:"0x000000000022d473030f116ddee9f6b43ac78ba3",source:"Recorded chain and API observations",pointer:"/contracts/permit2/address",block:"100372649",blockKind:"read",blockPointer:"/limitations/0"}},uniswap:{v3_factory:{address:"0x1f7d7550b1b028f7571e69a784071f0205fd2efa",source:"Recorded chain and API observations",pointer:"/addresses/v3_factory/address",block:"100361663",blockKind:"snapshot",blockPointer:"/snapshots/v3_block/number"},v3_position_manager:{address:"0x73991a25c818bf1f1128deaab1492d45638de0d3",source:"Recorded chain and API observations",pointer:"/addresses/v3_position_manager/address",block:"100361663",blockKind:"snapshot",blockPointer:"/snapshots/v3_block/number"},v4_pool_manager:{address:"0x8366a39cc670b4001a1121b8f6a443a643e40951",source:"Recorded chain and API observations",pointer:"/addresses/v4_pool_manager/address",block:"100363029",blockKind:"snapshot",blockPointer:"/snapshots/v4_block"},v4_position_manager:{address:"0x58daec3116aae6d93017baaea7749052e8a04fa7",source:"Recorded chain and API observations",pointer:"/addresses/v4_position_manager/address",block:"100363029",blockKind:"snapshot",blockPointer:"/snapshots/v4_block"},v4_state_view:{address:"0xf3334192d15450cdd385c8b70e03f9a6bd9e673b",source:"Recorded chain and API observations",pointer:"/addresses/v4_state_view/address",block:"100363029",blockKind:"snapshot",blockPointer:"/snapshots/v4_block"},swap_router02:{address:"0xcaf681a66d020601342297493863e78c959e5cb2",source:"Recorded chain and API observations",pointer:"/addresses/swap_router02/address",block:"100361663",blockKind:"snapshot",blockPointer:"/snapshots/v3_block/number"},permit2:{address:"0x000000000022d473030f116ddee9f6b43ac78ba3",source:"Recorded chain and API observations",pointer:"/addresses/permit2/address",block:"100361663",blockKind:"snapshot",blockPointer:"/snapshots/v3_block/number"},WETH:{address:"0x0bd7d308f8e1639fab988df18a8011f41eacad73",source:"Recorded chain and API observations",pointer:"/addresses/WETH/address",block:"100361663",blockKind:"snapshot",blockPointer:"/snapshots/v3_block/number"},USDG:{address:"0x5fc5360d0400a0fd4f2af552add042d716f1d168",source:"Recorded chain and API observations",pointer:"/addresses/USDG/address",block:"100361663",blockKind:"snapshot",blockPointer:"/snapshots/v3_block/number"}},clanker:{factory:{address:"0xD3f2cC1731b7Fd17f28798835C2E02f0a1839A94",source:"Recorded chain and API observations",pointer:"/contracts/factory/address",block:"100375756",blockKind:"fork",blockPointer:"/chain/fork_block_number"},locker:{address:"0xE4910b09709423aFafD995dD76D8A81CF9134A09",source:"Recorded chain and API observations",pointer:"/contracts/locker/address",block:"100375756",blockKind:"fork",blockPointer:"/chain/fork_block_number"},legacy_locker_v1:{address:"0x290f735f63824bb5836cde24a35f5103a5b5bc99",source:"Recorded chain and API observations",pointer:"/contracts/legacy_locker_v1/address",block:"100375756",blockKind:"fork",blockPointer:"/chain/fork_block_number"},fee_locker:{address:"0x88db2340bE5991B2b5Fca2Baee39B5CE048Cd70c",source:"Recorded chain and API observations",pointer:"/contracts/fee_locker/address",block:"100375756",blockKind:"fork",blockPointer:"/chain/fork_block_number"},fee_static_hook_v2:{address:"0x48B8F6AD3A1b4aA477314c9a23035b8F84dDe8cc",source:"Recorded chain and API observations",pointer:"/contracts/fee_static_hook_v2/address",block:"100375756",blockKind:"fork",blockPointer:"/chain/fork_block_number"},fee_dynamic_hook_v2:{address:"0x65efDF8Cce99b53C925DF878Df275Df21cB6E8Cc",source:"Recorded chain and API observations",pointer:"/contracts/fee_dynamic_hook_v2/address",block:"100375756",blockKind:"fork",blockPointer:"/chain/fork_block_number"},mev_module:{address:"0xEA1Fe197dF140e5d88fC6B49f2d21Ea05092299e",source:"Recorded chain and API observations",pointer:"/contracts/mev_module/address",block:"100375756",blockKind:"fork",blockPointer:"/chain/fork_block_number"},devbuy:{address:"0xa27b1986e5c7e5371Cb6507f87918fBD0302fF5a",source:"Recorded chain and API observations",pointer:"/contracts/devbuy/address",block:"100375756",blockKind:"fork",blockPointer:"/chain/fork_block_number"},vault:{address:"0x99B2a80ed21c7af1F5cc1A97383DADeEC7DD1427",source:"Recorded chain and API observations",pointer:"/contracts/vault/address",block:"100375756",blockKind:"fork",blockPointer:"/chain/fork_block_number"},airdrop:{address:"0x6f27372FF493A3855E6746b9a4fe6Ed2Cc3034B5",source:"Recorded chain and API observations",pointer:"/contracts/airdrop/address",block:"100375756",blockKind:"fork",blockPointer:"/chain/fork_block_number"},paired_weth:{address:"0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73",source:"Recorded chain and API observations",pointer:"/contracts/paired_weth/address",block:"100375756",blockKind:"fork",blockPointer:"/chain/fork_block_number"}},clankerDependencies:{pool_manager:{address:"0x8366a39CC670B4001A1121B8F6A443A643e40951",source:"Recorded chain and API observations",pointer:"/contracts/uniswap_v4_dependencies/pool_manager/address",block:"100375756",blockKind:"fork",blockPointer:"/chain/fork_block_number"},position_manager:{address:"0x58daec3116aae6D93017bAAea7749052E8a04fA7",source:"Recorded chain and API observations",pointer:"/contracts/uniswap_v4_dependencies/position_manager/address",block:"100375756",blockKind:"fork",blockPointer:"/chain/fork_block_number"},universal_router:{address:"0x53BF6B0684Ec7eF91e1387Da3D1a1769bC5A6F77",source:"Recorded chain and API observations",pointer:"/contracts/uniswap_v4_dependencies/universal_router/address",block:"100375756",blockKind:"fork",blockPointer:"/chain/fork_block_number"},permit2:{address:"0x000000000022D473030F116dDEE9F6B43aC78BA3",source:"Recorded chain and API observations",pointer:"/contracts/uniswap_v4_dependencies/permit2/address",block:"100375756",blockKind:"fork",blockPointer:"/chain/fork_block_number"}},hoodag:{registry:{address:"0x3E717dc89AAF4605b607324329EEeB0a8B3C8A1c",source:"Recorded chain and API observations",pointer:"/contracts/registry/address",block:null,blockKind:"range",blockPointer:"/measuredBlockRange"},universalResolver:{address:"0xa9ed3C73F522875F18DAa631429125da893D8E53",source:"Recorded chain and API observations",pointer:"/contracts/universalResolver/address",block:null,blockKind:"range",blockPointer:"/measuredBlockRange"},registrar:{address:"0x9a122C54e15B6287c164b90833bcDA6E16520D50",source:"Recorded chain and API observations",pointer:"/contracts/registrar/address",block:null,blockKind:"range",blockPointer:"/measuredBlockRange"},publicResolver:{address:"0x072C7a66a6D52B23274470b86096AFCBF816CA0B",source:"Recorded chain and API observations",pointer:"/contracts/publicResolver/address",block:null,blockKind:"range",blockPointer:"/measuredBlockRange"},registrarController:{address:"0x7900b2B8Cc3f0616B18C68AdA7E115A9022Ca04a",source:"Recorded chain and API observations",pointer:"/contracts/registrarController/address",block:null,blockKind:"range",blockPointer:"/measuredBlockRange"},reverseRegistrar:{address:"0x4be6D0379f56404B563afAe17c6b095b1dfcf479",source:"Recorded chain and API observations",pointer:"/contracts/reverseRegistrar/address",block:null,blockKind:"range",blockPointer:"/measuredBlockRange"}},hoodlock:{locker:{address:"0xd0f7d8c6e9f6d80c297bebe4f7fd1b9c8125c32f",source:"Recorded chain and API observations",pointer:"/contracts/locker/address",block:"100356379",blockKind:"read",blockPointer:"/chain/liveStateBlock"},burner:{address:"0x6bf43ca706faa8ea46803299c191484e82280652",source:"Recorded chain and API observations",pointer:"/contracts/burner/address",block:"100356379",blockKind:"read",blockPointer:"/chain/liveStateBlock"},airdrop:{address:"0x6B1fE7b821001144Ee74EEA258b0AafdE20102E8",source:"Recorded chain and API observations",pointer:"/contracts/airdrop/address",block:"100356379",blockKind:"read",blockPointer:"/chain/liveStateBlock"},liquidityLocker:{address:"0x91Aa2dA1956C77F8448E18DCaf53383bCc658e67",source:"Recorded chain and API observations",pointer:"/contracts/liquidityLocker/address",block:"100356379",blockKind:"read",blockPointer:"/chain/liveStateBlock"}},hookr:{HookrLimitOrders:{address:"0x0c376cc30b1AC98b8ef80a4F516212D3B99402fA",source:"Recorded chain and API observations",pointer:"/q1_liveness/contracts/HookrLimitOrders/address",block:"100371423",blockKind:"fork",blockPointer:"/fork_block_number"},HookrRoot:{address:"0x89c9FB50d1f03192230FFB1c279BB6E7d3Fe6aCc",source:"Recorded chain and API observations",pointer:"/q1_liveness/contracts/HookrRoot/address",block:"100371423",blockKind:"fork",blockPointer:"/fork_block_number"},HookrRouter:{address:"0xC2Bc9a3fe6c4Ce8C2F7EB4655b0869b01D8c93C9",source:"Recorded chain and API observations",pointer:"/q1_liveness/contracts/HookrRouter/address",block:"100371423",blockKind:"fork",blockPointer:"/fork_block_number"},HookrQuoter:{address:"0x445D7891381Aa7F91F5048EdBC6a611ccBDe7865",source:"Recorded chain and API observations",pointer:"/q1_liveness/contracts/HookrQuoter/address",block:"100371423",blockKind:"fork",blockPointer:"/fork_block_number"},HookrLauncher:{address:"0x1cf2748A6670572425eAbf9Ab9e5BC4eb2eB8Ef4",source:"Recorded chain and API observations",pointer:"/q1_liveness/contracts/HookrLauncher/address",block:"100371423",blockKind:"fork",blockPointer:"/fork_block_number"},HookrRules:{address:"0x4a71c270b1520F94064268102AebD744b0DE7942",source:"Recorded chain and API observations",pointer:"/q1_liveness/contracts/HookrRules/address",block:"100371423",blockKind:"fork",blockPointer:"/fork_block_number"},HookrRegistry:{address:"0x463c82beA1a52F4Cc05ca0741a24F0AD24bA4602",source:"Recorded chain and API observations",pointer:"/q1_liveness/contracts/HookrRegistry/address",block:"100371423",blockKind:"fork",blockPointer:"/fork_block_number"},HookrTreasury:{address:"0x2242F7FC75606500503075f29ea8cDA684EfB4a9",source:"Recorded chain and API observations",pointer:"/q1_liveness/contracts/HookrTreasury/address",block:"100371423",blockKind:"fork",blockPointer:"/fork_block_number"},HookrForwarder:{address:"0xe7863CC0E2Fb783b44c279aB159bcD812c2ceA1c",source:"Recorded chain and API observations",pointer:"/q1_liveness/contracts/HookrForwarder/address",block:"100371423",blockKind:"fork",blockPointer:"/fork_block_number"},HookrOwnedRootFactory:{address:"0xA6c2a401597301dFf57A59bC8F70a9622499f3ec",source:"Recorded chain and API observations",pointer:"/q1_liveness/contracts/HookrOwnedRootFactory/address",block:"100371423",blockKind:"fork",blockPointer:"/fork_block_number"},HookrRootFactory:{address:"0x21E438FaBE10770afb4407cF6b09d32369CBdCE4",source:"Recorded chain and API observations",pointer:"/q1_liveness/contracts/HookrRootFactory/address",block:"100371423",blockKind:"fork",blockPointer:"/fork_block_number"},HookrFamilyRouter:{address:"0x854f3Fa7AC342B244DF0d9A8c8F597b051aAE559",source:"Recorded chain and API observations",pointer:"/q1_liveness/contracts/HookrFamilyRouter/address",block:"100371423",blockKind:"fork",blockPointer:"/fork_block_number"},HookrFamilyLock:{address:"0xfAFEcE64099C1E791C4B46189c277f00c0c7e00b",source:"Recorded chain and API observations",pointer:"/q1_liveness/contracts/HookrFamilyLock/address",block:"100371423",blockKind:"fork",blockPointer:"/fork_block_number"},PoolManager:{address:"0x8366a39CC670B4001A1121B8F6A443A643e40951",source:"Recorded chain and API observations",pointer:"/q1_liveness/contracts/PoolManager/address",block:"100371423",blockKind:"fork",blockPointer:"/fork_block_number"},HOOKR_Token:{address:"0x18E674231A58c239Dc7DaeDcffE15Ec3A24cff5c",source:"Recorded chain and API observations",pointer:"/q1_liveness/contracts/HOOKR_Token/address",block:"100371423",blockKind:"fork",blockPointer:"/fork_block_number"}},merkl:{distributor:{address:"0x3Ef3D8bA38EBe18DB133cEc108f4D14CE00Dd9Ae",source:"Recorded chain and API observations",pointer:"/contracts/distributor/address",block:null,blockKind:"latest"},distributionCreator:{address:"0x8BB4C975Ff3c250e0ceEA271728547f3802B36Fd",source:"Recorded chain and API observations",pointer:"/contracts/distributionCreator/address",block:null,blockKind:"latest"},accessControlManager:{address:"0x5D36e13F076f34eE2Bf69fEAEa784887754465f8",source:"Recorded chain and API observations",pointer:"/contracts/accessControlManager/address",block:null,blockKind:"latest"}},poolsTrade:{liquidityLauncher:{address:"0x0000FffFBE8efE702c8703aE3477FF5dE3d319C0",source:"Recorded chain and API observations",pointer:"/contracts/liquidityLauncher/address",block:"100369897",blockKind:"census",blockPointer:"/chain/headAtFirstCensus"},instantLaunchStrategyFeesOn:{address:"0x7c48DDe3B447381F4d986334679b3Afc7F2D35C2",source:"Recorded chain and API observations",pointer:"/contracts/instantLaunchStrategyFeesOn/address",block:"100369897",blockKind:"census",blockPointer:"/chain/headAtFirstCensus"},instantLaunchStrategyFeesOff:{address:"0xC9566675b1Ea42861546f3c5B74Ace2c79c49572",source:"Recorded chain and API observations",pointer:"/contracts/instantLaunchStrategyFeesOff/address",block:"100369897",blockKind:"census",blockPointer:"/chain/headAtFirstCensus"},feeSplitterFeesOn:{address:"0x9411fa7F956f64aa7981AA27cB3bC6eC0415449C",source:"Recorded chain and API observations",pointer:"/contracts/feeSplitterFeesOn/address",block:"100369897",blockKind:"census",blockPointer:"/chain/headAtFirstCensus"},feeSplitterFeesOff:{address:"0x882Ae5e2095435A62Fd1BBDEfcb637f5CeAFc0ee",source:"Recorded chain and API observations",pointer:"/contracts/feeSplitterFeesOff/address",block:"100369897",blockKind:"census",blockPointer:"/chain/headAtFirstCensus"},uerc20BeneficiaryVault:{address:"0x26d2F7AcB07707034406a0dC458351Bb63C02553",source:"Recorded chain and API observations",pointer:"/contracts/uerc20BeneficiaryVault/address",block:"100369897",blockKind:"census",blockPointer:"/chain/headAtFirstCensus"},compoundingClaimRecipient:{address:"0xf585b5D728A8fdE743027307BF5F3556E3B9C58D",source:"Recorded chain and API observations",pointer:"/contracts/compoundingClaimRecipient/address",block:"100369897",blockKind:"census",blockPointer:"/chain/headAtFirstCensus"},universalRouterStrategyApp:{address:"0x1242c9439d589cAE85E121B1f79f2aF51e91DCEE",source:"Recorded chain and API observations",pointer:"/contracts/universalRouterStrategyApp/address",block:"100369897",blockKind:"census",blockPointer:"/chain/headAtFirstCensus"},uerc20Factory:{address:"0x000000e200088D55C39a11F609E5F667729ad49b",source:"Recorded chain and API observations",pointer:"/contracts/uerc20Factory/address",block:"100369897",blockKind:"census",blockPointer:"/chain/headAtFirstCensus"},universalRouter:{address:"0x8876789976dEcBfCbBbe364623C63652db8C0904",source:"Recorded chain and API observations",pointer:"/contracts/universalRouter/address",block:"100369897",blockKind:"census",blockPointer:"/chain/headAtFirstCensus"},v4PoolManager:{address:"0x8366a39CC670B4001A1121B8F6A443A643e40951",source:"Recorded chain and API observations",pointer:"/contracts/v4PoolManager/address",block:"100369897",blockKind:"census",blockPointer:"/chain/headAtFirstCensus"},v4PositionManager:{address:"0x58daec3116aae6D93017bAAea7749052E8a04fA7",source:"Recorded chain and API observations",pointer:"/contracts/v4PositionManager/address",block:"100369897",blockKind:"census",blockPointer:"/chain/headAtFirstCensus"},permit2:{address:"0x000000000022D473030F116dDEE9F6B43aC78BA3",source:"Recorded chain and API observations",pointer:"/contracts/permit2/address",block:"100369897",blockKind:"census",blockPointer:"/chain/headAtFirstCensus"},v4Quoter:{address:"0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94",source:"Recorded chain and API observations",pointer:"/contracts/v4Quoter/address",block:"100369897",blockKind:"census",blockPointer:"/chain/headAtFirstCensus"},protocolFeeController:{address:"0x6d0009504D129CF5002Dba61D9Ae8575AA79314c",source:"Recorded chain and API observations",pointer:"/contracts/protocolFeeController/address",block:"100369897",blockKind:"census",blockPointer:"/chain/headAtFirstCensus"}},priors:{pool:{address:"0x281210097f0de7A8FB6F87310AF0f089c9C8DE21",source:"Recorded chain and API observations",pointer:"/contracts/pool/address",block:null,blockKind:"latest",blockPointer:"/recorded-calls/8"},lens:{address:"0x9d7035722bd42C551f82FEB9FDDd17453AEF3D9B",source:"Recorded chain and API observations",pointer:"/contracts/lens/address",block:null,blockKind:"latest",blockPointer:"/recorded-calls/8"},usdg:{address:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",source:"Recorded chain and API observations",pointer:"/contracts/usdg/address",block:null,blockKind:"latest",blockPointer:"/recorded-calls/8"},registry:{address:"0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",source:"Recorded chain and API observations",pointer:"/contracts/registry/address",block:null,blockKind:"latest",blockPointer:"/recorded-calls/8"},stockVault:{address:"0xbEcd07EC689988e16b870C121756C4c2C8cb02B6",source:"Recorded chain and API observations",pointer:"/contracts/stockVault/address",block:null,blockKind:"latest",blockPointer:"/recorded-calls/8"}},morpho:{morpho_blue:{address:"0x9D53d5E3bd5E8d4Cbfa6DB1ca238AEA02E651010",source:"Recorded chain and API observations",pointer:"/addresses/morpho_blue/address",block:"100362239",blockKind:"read",blockPointer:"/chain/read_block"},adaptive_curve_irm:{address:"0x2BD3d5965B26B51814AC95127B2b80dD6CcC0fa1",source:"Recorded chain and API observations",pointer:"/addresses/adaptive_curve_irm/address",block:"100362239",blockKind:"read",blockPointer:"/chain/read_block"},USDG:{address:"0x5fc5360d0400a0fd4f2af552add042d716f1d168",source:"Recorded chain and API observations",pointer:"/addresses/USDG/address",block:"100362239",blockKind:"read",blockPointer:"/chain/read_block"},WETH:{address:"0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73",source:"Recorded chain and API observations",pointer:"/addresses/WETH/address",block:"100362239",blockKind:"read",blockPointer:"/chain/read_block"}},tickerSpring:{limitOrderHook:{address:"0xa31729621a2280C0Ff9Aaff5B3F357cFF1bEC040",source:"Recorded chain and API observations",pointer:"/liveness/contracts/limitOrderHook/address",block:null,blockKind:"range",blockPointer:"/chain/verifiedAtBlockRange"},gridStrategy:{address:"0xd597785134307B5324f469A9506066fAd4827730",source:"Recorded chain and API observations",pointer:"/liveness/contracts/gridStrategy/address",block:null,blockKind:"range",blockPointer:"/chain/verifiedAtBlockRange"},ladderStrategy:{address:"0x23c7906D8fa3ede698A00AbE66D28605A41b4177",source:"Recorded chain and API observations",pointer:"/liveness/contracts/ladderStrategy/address",block:null,blockKind:"range",blockPointer:"/chain/verifiedAtBlockRange"},basketZap:{address:"0xFca65c50325b83F8f1E07cD103c00De0cEa4Fb39",source:"Recorded chain and API observations",pointer:"/liveness/contracts/basketZap/address",block:null,blockKind:"range",blockPointer:"/chain/verifiedAtBlockRange"},usdg:{address:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",source:"Recorded chain and API observations",pointer:"/liveness/contracts/usdg/address",block:null,blockKind:"range",blockPointer:"/chain/verifiedAtBlockRange"}},orbio:{credit:{address:"0xe33322da1380e61e5ae5dfb21e7f62924c73004c",source:"Recorded chain and API observations",pointer:"/orbio/credit/address",block:"100313751",blockKind:"fork",caveat:"Fork anchor block recorded from chain observations; individual code reads were latest."},exchange:{address:"0x6951ffd32630b05e06f50062aea801625a58ebc0",source:"Recorded chain and API observations",pointer:"/orbio/exchange/address",block:"100313751",blockKind:"fork",caveat:"Fork anchor block recorded from chain observations; individual code reads were latest."}},vaults:{steakhouse:{address:"0xBeEff033F34C046626B8D0A041844C5d1A5409dd",source:"Recorded chain and API observations",pointer:"/vaults/eligible/0/address",block:"100320900",blockKind:"read",blockPointer:"/vaults/verifiedAtBlock",caveat:"Historical eligibility only; recheck asset and >=1e12 USDG totalAssets on every listing."},spark:{address:"0xde770c84fe66e063336b31737cfe9790f18c4087",source:"Recorded chain and API observations",pointer:"/vaults/eligible/1/address",block:"100320900",blockKind:"read",blockPointer:"/vaults/verifiedAtBlock",caveat:"Historical eligibility only; recheck asset and >=1e12 USDG totalAssets on every listing."},netnet:{address:"0x99347d5F70D3838763f6Bddcf80304C8aa953B57",source:"Recorded chain and API observations",pointer:"/vaults/eligible/2/address",block:"100320900",blockKind:"read",blockPointer:"/vaults/verifiedAtBlock",caveat:"Historical eligibility only; recheck asset and >=1e12 USDG totalAssets on every listing."},morphoV2Factory:{address:"0x0fbad98595b0186da120e41f77c102beb49f803c",source:"Recorded chain and API observations",pointer:"/vaults/morphoVaultV2Factory",block:null,blockKind:"latest"},longbowCore:{address:"0x026df18fbd2A7639089D0a16293383ec687A5Ca1",source:"Recorded chain and API observations",pointer:"/projects/0/deployments/0/address",block:"100355967",blockKind:"read",blockPointer:"/projects/0/deployments/0/read_block",caveat:"Below USDG threshold or wrong asset at measurement; deployment context only."},longbowFrontier:{address:"0x65dC90cd3a0BCDE967c8AE6019d6790b616E78F7",source:"Recorded chain and API observations",pointer:"/projects/0/deployments/1/address",block:"100355967",blockKind:"read",blockPointer:"/projects/0/deployments/1/read_block",caveat:"Below USDG threshold or wrong asset at measurement; deployment context only."},longbowEth:{address:"0xe129D4Cb2d454C4ACFAc909d1576453A9b835f61",source:"Recorded chain and API observations",pointer:"/projects/0/deployments/2/address",block:"100355967",blockKind:"read",blockPointer:"/projects/0/deployments/2/read_block",caveat:"Below USDG threshold or wrong asset at measurement; deployment context only."},beefyTestedLpVault:{address:"0xC447184BF75a84Ace3087515CCFFb54937838FC8",source:"Recorded chain and API observations",pointer:"/projects/1/tested_lp_vault",block:"100357163",blockKind:"fork",blockPointer:"/fork_environment/fork_block",caveat:"LP adapter only; not an eligible USDG ERC-4626 vault. Other per-vault/strategy addresses remain dynamic."},groveAlm:{address:"0xBEEff039907422219Fb367e525954DDC092854d9",source:"Recorded chain and API observations",pointer:"/projects/2/address",block:"100355967",blockKind:"read",blockPointer:"/raw_reads/longbow_grove_control/4/block",caveat:"Public Grove x Steakhouse USDG ERC-4626 vault; below $1M USDG threshold at measurement."}},identity:{identityRegistry:{address:"0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",source:"Recorded chain and API observations",pointer:"/erc8004/identityRegistry",block:null,blockKind:"latest"},reputationRegistry:{address:"0x8004BAa17C55a88189AE136b182e5fdA19dE9b63",source:"Recorded chain and API observations",pointer:"/erc8004/reputationRegistry",block:null,blockKind:"latest"},validationRegistry:{address:"0x8004Cc8439f36fd5F9F049D9fF86523Df6dAAB58",source:"Recorded chain and API observations",pointer:"/erc8004/validationRegistry",block:null,blockKind:"latest"}},meridian:{PredictionMarketEscrow:{address:"0xE4cea507b19796362A5a28Fa7cb705A3F1866213",source:"Recorded chain and API observations",pointer:"/addresses/PredictionMarketEscrow/address",block:null,blockKind:"latest",caveat:"Code census not individually block-pinned; fork execution at 100370553 is separate."},SecondaryMarketEscrow:{address:"0x7E318ef37c3bC3d0cBA205Af2D1Fc9F9CeFEB5df",source:"Recorded chain and API observations",pointer:"/addresses/SecondaryMarketEscrow/address",block:null,blockKind:"latest",caveat:"Code census not individually block-pinned; fork execution at 100370553 is separate."},MeridianRobinhoodVault:{address:"0x79cB914f3F336426E89FaB55A9488AB25770552D",source:"Recorded chain and API observations",pointer:"/addresses/MeridianRobinhoodVault/address",block:null,blockKind:"latest",caveat:"Code census not individually block-pinned; fork execution at 100370553 is separate."},CollateralToken_USDe:{address:"0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34",source:"Recorded chain and API observations",pointer:"/addresses/CollateralToken_USDe/address",block:null,blockKind:"latest",caveat:"Code census not individually block-pinned; fork execution at 100370553 is separate."}},relay:{depository:{address:"0x4cd00e387622c35bddb9b4c962c136462338bc31",source:"Recorded chain and API observations",pointer:"/addresses/depository_4663",block:"100355691",blockKind:"fork",blockPointer:"/fork/fork_block",caveat:"Only quoted depositNative path fork-tested; bridge settlement is external and unmeasured."}},lighter:{settlement:{address:"0x94bAB9693Ba2f6358507eFfcbd372b0660AFfF9d",source:"Recorded chain and API observations",pointer:"/contracts_on_4663/lighter_rh_settlement_proxy/address",block:"100355574",blockKind:"read",blockPointer:"/block_number",caveat:"Settlement/custody metadata only; funding tool uses HTTP, not this contract."}},heyResearch:{heyToken:{address:"0xB33eb16782776b4D738c0Fd643577cb0284Db610",source:"Recorded chain and API observations",pointer:"/addresses/heyToken/address",block:null,blockKind:"unanchored",caveat:"API-only tools; source has time range but no block anchor."}}},46630:{deployments:{test_USDG:{address:"0x7E955252E15c84f5768B83c41a71F9eba181802F",source:"Recorded chain and API observations",pointer:"/code_probes/0/address",block:"144387817",blockKind:"read",blockPointer:"/code_probes/0/block",caveat:"Code presence alone does not establish a complete testnet integration."},test_WETH:{address:"0x7943e237c7F95DA44E0301572D358911207852Fa",source:"Recorded chain and API observations",pointer:"/code_probes/1/address",block:"144387817",blockKind:"read",blockPointer:"/code_probes/1/block",caveat:"Code presence alone does not establish a complete testnet integration."},test_gateway:{address:"0x77bF00A6A90c600f214b34BAFBB7918c0cF113A8",source:"Recorded chain and API observations",pointer:"/code_probes/2/address",block:"144387817",blockKind:"read",blockPointer:"/code_probes/2/block",caveat:"Code presence alone does not establish a complete testnet integration."},test_identity:{address:"0x8004A818BFB912233c491871b3d84c89A494BD9e",source:"Recorded chain and API observations",pointer:"/code_probes/3/address",block:"144387817",blockKind:"read",blockPointer:"/code_probes/3/block",caveat:"Code presence alone does not establish a complete testnet integration."},test_USDG_implementation:{address:"0xf0863d7a29a55d0c4263c11bfac754312ff078df",source:"Recorded chain and API observations",pointer:"/code_probes/15/address",block:"latest",blockKind:"latest",blockPointer:"/code_probes/15/block",caveat:"Code presence alone does not establish a complete testnet integration."},facet_0xef55bec6:{address:"0x08f560a85db40a7d4ac49b4F44f1D38e5B8aB811",source:"Recorded chain and API observations",pointer:"/code_probes/17/address",block:"latest",blockKind:"latest",blockPointer:"/code_probes/17/block",caveat:"Code presence alone does not establish a complete testnet integration."},Uniswap_v4_production_poolmanager:{address:"0x8366a39CC670B4001A1121B8F6A443A643e40951",source:"Recorded chain and API observations",pointer:"/code_probes/22/address",block:"144389821",blockKind:"read",blockPointer:"/code_probes/22/block",caveat:"Code presence alone does not establish a complete testnet integration."},Uniswap_v3_community_test_candidate:{address:"0xFECCB63CD759d768538458Ea56F47eA8004323c1",source:"Recorded chain and API observations",pointer:"/code_probes/50/address",block:"144389821",blockKind:"read",blockPointer:"/code_probes/50/block",caveat:"Community v3 is not canonically endorsed; v4 native stack is incomplete."},Uniswap_v4_PositionManager:{address:"0x58daec3116aae6D93017bAAea7749052E8a04fA7",source:"Recorded chain and API observations",pointer:"/code_probes/52/address",block:"144390120",blockKind:"read",blockPointer:"/code_probes/52/block",caveat:"Code presence alone does not establish a complete testnet integration."},Uniswap_v4_Quoter:{address:"0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94",source:"Recorded chain and API observations",pointer:"/code_probes/54/address",block:"144390120",blockKind:"read",blockPointer:"/code_probes/54/block",caveat:"Code presence alone does not establish a complete testnet integration."},Uniswap_v4_StateView:{address:"0xF3334192D15450CdD385c8B70e03f9A6bD9E673b",source:"Recorded chain and API observations",pointer:"/code_probes/56/address",block:"144390120",blockKind:"read",blockPointer:"/code_probes/56/block",caveat:"Code presence alone does not establish a complete testnet integration."},test_Permit2:{address:"0x000000000022D473030F116dDEE9F6B43aC78BA3",source:"Recorded chain and API observations",pointer:"/code_probes/77/address",block:"latest",blockKind:"latest",blockPointer:"/code_probes/77/block",caveat:"Code presence alone does not establish a complete testnet integration."},v3_test_WETH9:{address:"0x37E402B8081eFcE1D82A09a066512278006e4691",source:"Recorded chain and API observations",pointer:"/code_probes/78/address",block:"latest",blockKind:"latest",blockPointer:"/code_probes/78/block",caveat:"Community v3 is not canonically endorsed; v4 native stack is incomplete."}}}},i=s[4663].tokens.USDG.address,d=s[46630].deployments.test_USDG.address,g=s[4663].pons.factory.address,m=s[4663].pons.memeHook.address,y=s[4663].pons.poolManager.address,P=s[4663].pons.feeEscrow.address,R=s[4663].oracle.ethUsdgPool.address,l={name:"Global Dollar",version:"1",chainId:a,verifyingContract:i},u={name:"Global Dollar",version:"1",chainId:o,verifyingContract:d},_={chainId:o,address:d},t={mainnet:{chainId:a,usdg:i,usdgDomain:l,weth:s[a].tokens.WETH.address,identityRegistry:s[a].identity.identityRegistry.address},testnet:{chainId:o,usdg:d,usdgDomain:u,weth:s[o].deployments.test_WETH.address,identityRegistry:s[o].deployments.test_identity.address}};function I(e="mainnet"){if(e!=="mainnet"&&e!=="testnet")throw new r("Set OAK_NETWORK to mainnet or testnet.");return e}function F(e,n){if(n.toLowerCase()!==t[e].usdg.toLowerCase())throw new r(`USDG does not match the pinned ${e} deployment on chain ${t[e].chainId}.`)}async function C(e,n){let c=await n.getChainId();if(c!==t[e].chainId)throw new r(`RPC chain ${c} does not match OAK_NETWORK ${e} (chain ${t[e].chainId}).`)}var B={4663:{"pons-claims":{"/stackResolution/calls":[{to:"token",sig:"launchFactory()",selector:"0x536dac9b",returns:"address"},{to:"token",sig:"curve()",selector:"0x7165485d",returns:"address"},{to:"factory",sig:"getLaunchedToken(address)",selector:"0x3cf28b5a",returns:"(address token,address curve,address deployer,address creatorFeeRecipient,address pairToken,uint256 graduationThreshold,uint24 poolFee,int24 tickSpacing,uint16 creatorTaxBps,bool buybackEnabled,uint8 phase,uint256 sweptQuote,uint256 sweptTokens,uint256 sweptAt,bool exists)",phase:{0:"curve",1:"swept (fees already credited, no pool)",2:"graduated (v4 pool)",3:"rescued"}},{to:"curve",sig:"feeEscrow()",selector:"0xc4b7de97",returns:"address"},{to:"curve",sig:"factory()",selector:"0xc45a0155",returns:"address"},{to:"factory",sig:"memeHook()",returns:"address"}],"/claim_fees":{apiKey:!1,signup:!1,allowlist:!1,caller:"the coin's current creatorFeeRecipient only (claim pays msg.sender's ledger; no claim-for)",reads:[{to:"escrow",sig:"balanceOf(address)",selector:"0x70a08231",meaning:"native ETH owed, per wallet, across all its coins on this escrow"},{to:"escrow",sig:"balanceOfToken(address,address)",selector:"0xf59e38b7",args:"(wallet, asset)",meaning:"per-asset ledger: custom-pair quote asset, or the coin for released buyback vests"},{to:"curve",sig:"quoteFeeBalance()",selector:"0xed479c47",phase:0},{to:"curve",sig:"creatorTaxBalance()",selector:"0xdb2bd533",phase:0},{to:"curve",sig:"protocolFeeShareBps()",selector:"0x9040f866",observed:3e3},{to:"hook",sig:"pendingFees(bytes32,address)",selector:"0x359b4f30",phase:2,args:"(poolId, currency) for both currencies"},{to:"hook",sig:"pendingCreatorTax(bytes32,address)",selector:"0xc8eaa792",phase:2}],poolId:"keccak256(abi.encode(currency0, currency1, poolFee, tickSpacing, hook)); currencies sorted by address, native ETH 0x0 is currency0",creatorCreditFormula:"fee - floor(fee * protocolFeeShareBps / 10000) + tax (creator gets the rounding remainder; buyback off)",roundingEvidence:{poolFee:"204796497163896",protocolCredit:"61438949149168",creatorCredit:"348154045178624"},writes:[{phase:0,when:"unswept curve fees > 0",tx:{to:"curve",sig:"sweepFees(uint256)",selector:"0x3729bb9a",args:["0 (minBuybackTokensOut)"]}},{phase:2,when:"pendingFees/pendingCreatorTax on the launch-token side == 0 and quote side > 0",tx:{to:"hook",sig:"sweepPoolFees(bytes32,uint256,uint256)",selector:"0x3d61055e",args:["poolId","0 (minConversionQuoteOut)","0 (minBuybackTokensOut)"]}},{phase:"any",when:"escrow.balanceOf(wallet) > 0",tx:{to:"escrow",sig:"claim()",selector:"0x4e71d92d",args:[]}},{phase:"any",when:"escrow.balanceOfToken(wallet, asset) > 0",tx:{to:"escrow",sig:"claimToken(address)",selector:"0x32f289cf",args:["asset"]}}],cannotSelfSweep:["phase 2 with any launch-token-side fee pending (InternalSwapRequiresOperator)","buyback-on coins (docs; not fork-tested)"],decideBy:"eth_call the sweep from the wallet before offering it; preview sweep+claim with eth_simulateV1",errors:{"0x8d42130c":"NotFeeSweepOperator()","0x31cdb504":"InternalSwapRequiresOperator()","0xc2caa2a6":"NoBalance()","0xe6a0d45f":"AlreadyGraduated()","0xb9f93944":"NotCreatorFeeRecipient() (part A)"},otherSelectors:{"claim(uint256)":"0x379607f5","claimToken(address,uint256)":"0x1698755f"},walletCoinDiscovery:{logs:["TokenLaunched topic3 (initiating wallet) == wallet","CreatorFeeRecipientUpdated(address indexed token,address indexed old,address indexed new) topic3 == wallet, topic0 0x308c390ed1ab5873392818e036cabdf408bc8ad042fbaead3108954ff75ba980"],gap:"a coin launched by another wallet naming this wallet as recipient at launch appears in neither (CreatorFeeRecipientUpdated is not emitted at launch: 32 vs 280 launches in the same 100,000 blocks)"},gas:{claimMainnetEstimate:42546,claimFork:32632,sweepFeesFork:92661,sweepPoolFeesFork:84141,gasPriceWei:2062e4,ethUsd:2353.86,claimCostUsd:.0021},projectFees:"none on the claim; the creator share is set per trade (config 0: base 1%, Pons keeps 30% of it; creator tax set at launch, cap 1000 bps)"},"/find_launches/chainSource/step2":{method:"eth_call Multicall3.aggregate3((address,bool,bytes)[])",selector:"0x82ad56cb",perLaunch:["factory.getLaunchedToken(token)","token.name()","token.symbol()","curve.getReserves()","curve.realQuoteReserve()"],measured:{subcalls:50,allOk:!0}}},"pons-oracle":{"/pons/selectors":{launchAndBuy:"0xf85f8e41",launchToken3:"0xf35abbcf",launchToken4:"0xa72101af",getLaunchedToken:"0x3cf28b5a",previewLaunchEconomics:"0xf718b78c",launchFee:"0xcf3cf573",canLaunch:"0x58373f04",createGraduatedPool:"0x2f53ef2f",transferCreatorFeeRecipient:"0x2931861b",setCreatorFeeRecipient_ownerProposal:"0xe102c9aa",executeCreatorFeeRecipientChange:"0x3d3d2d58",pendingCreatorFeeRecipient:"0x9beacf4a",setBuybackEnabled:"0xb18f1db1","curve.buy":"0x59a87bc1","curve.sell":"0xd04c6983","curve.sweepFees":"0x3729bb9a","curve.graduated":"0xe7c2b772","hook.sweepPoolFees":"0x3d61055e","hook.pendingFees":"0x359b4f30","hook.pendingCreatorTax":"0xc8eaa792","escrow.claim":"0x4e71d92d","escrow.balanceOf":"0x70a08231","token.burn":"0x42966c68","token.burnFrom":"0x79cc6790"},"/ponsFeeClaim":{address:"0xd3AFEB2a57f70eF218Aa82451c51B2fb0416Ac9e",selector:"0x4e71d92d",signature:"claim()",args:[],caller:"the recipient itself (pays msg.sender's native ledger); no claim-for",revertWhenZero:"NoBalance() 0xc2caa2a6",readableClaimable:"balanceOf(address) 0x70a08231",paymentInstruction:"native ETH CALL to msg.sender forwarding all remaining gas (storage-writing receive() ran with gasleft 1020298867 / 1018685354)",preClaimSweeps:{curvePhase:{address:"<curve>",selector:"0x3729bb9a",signature:"sweepFees(uint256 minBuybackTokensOut)",callers:"current creator fee recipient or fee sweep operator; others NotFeeSweepOperator()",afterGraduation:"AlreadyGraduated(); graduation itself credits accrued curve fees to the escrow"},poolPhase:{address:"0xE5e702641Ea86F4ae6cC3cDaeD2B886f976Be044",selector:"0x3d61055e",signature:"sweepPoolFees(bytes32 poolId,uint256 minConversionQuoteOut,uint256 minBuybackTokensOut)",callers:"recipient only when no internal swap is needed; operator otherwise (operator needs minConversionQuoteOut>0 else MinimumOutputRequired())"}}},"/ponsRecipientTransfer":{address:"0x7eD598BcEf8bd9Edd8C97A195C6d13f40801EC7e",selector:"0x2931861b",signature:"transferCreatorFeeRecipient(address token,address newRecipient)",caller:"current creator fee recipient only",revert:"NotCreatorFeeRecipient() 0xb9f93944",effect:"immediate; updates factory record and hook.launches(poolId); credited escrow balances do not move"}},"chain-backends":{"/usdg/eip3009/selectorsPresent":{"receiveWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)":"0xef55bec6","receiveWithAuthorization(address,address,uint256,uint256,uint256,bytes32,bytes)":"0x88b7ab63","transferWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)":"0xe3ee160e","transferWithAuthorization(address,address,uint256,uint256,uint256,bytes32,bytes)":"0xcf092995","cancelAuthorization(address,bytes32,uint8,bytes32,bytes32)":"0x5a049a70","cancelAuthorization(address,bytes32,bytes)":"0xb7b72899","authorizationState(address,bytes32)":"0xe94a0102","RECEIVE_WITH_AUTHORIZATION_TYPEHASH()":"0x7f2eecc3","TRANSFER_WITH_AUTHORIZATION_TYPEHASH()":"0xa0cc6a68"},"/orbio/selectors":{"buyAndActivate(uint256,uint256,bytes32,uint256)":"0x6ebadb6e","getActivationQuote(uint256,uint256)":"0x578850c3"},"/erc8004/selectors":{"register()":"0x1aa3a008","register(string)":"0xf2c298be","register(string,(string,bytes)[])":"0x8ea42286"}},clanker:{"/calls":{launch_token:{contract:"0xD3f2cC1731b7Fd17f28798835C2E02f0a1839A94",function_name:"deployToken",signature:"deployToken(((address,string,string,bytes32,string,string,string,uint256),(address,address,int24,int24,bytes),(address,address[],address[],uint16[],int24[],int24[],uint16[],bytes),(address,bytes),(address,uint256,uint16,bytes)[]))",selector:"0xdf40224a",state_mutability:"payable",msg_value_rule:"0 wei if no devBuy extension; exact devBuy.ethAmount in wei if ClankerUniV4EthDevBuy (0xa27b1986e5c7e5371Cb6507f87918fBD0302fF5a) is included in extensionConfigs",returns:"(address tokenAddress)",event_emitted:{name:"TokenCreated",topic0:"0x9299d1d1a88d8e1abdc591ae7a167a6bc63a8f17d695804e9091ee33aa89fb67",indexed_fields:["tokenAddress","tokenAdmin"]},inner_abi_encodings:{static_fee_data:"abi.encode(uint24 clankerFeeUniBps, uint24 pairedFeeUniBps) // 10000 = 1%",pool_data_v4_1:"abi.encode(tuple(address extension, bytes extensionData, bytes feeData))",locker_data:"abi.encode(tuple(uint8[] feePreference)) // 0=Both, 1=Paired(WETH), 2=Clanker",mev_module_data:"abi.encode(tuple(uint24 startingFee, uint24 endingFee, uint256 secondsToDecay)) // default (666777, 41673, 15)",devbuy_extension_data:"abi.encode(tuple(address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks), uint128 amountOutMin, address recipient)"}},claim_fees:{available_fees_view:{contract:"0x88db2340bE5991B2b5Fca2Baee39B5CE048Cd70c",function_name:"availableFees",signature:"availableFees(address,address)",selector:"0x8296535a",alias_signature:"feesToClaim(address,address)",alias_selector:"0x8417645e",arguments:["address feeOwner","address rewardToken (e.g. WETH 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73 or Clanker token)"],returns:"(uint256 claimableWei)"},claim_write:{contract:"0x88db2340bE5991B2b5Fca2Baee39B5CE048Cd70c",function_name:"claim",signature:"claim(address,address)",selector:"0x21c0b342",state_mutability:"nonpayable",arguments:["address feeOwner","address rewardToken (e.g. WETH 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73 or Clanker token)"],revert_on_zero_balance:{error:"NoFeesToClaim()",selector:"0x846d8c5c"},event_emitted:{name:"ClaimTokens",topic0:"0xf98eaa9c1f790e5c18b1f227bd5bade62600f9f3e3587c7644b90c50b9bf13c5"}},collect_rewards_flush:{contract:"0xE4910b09709423aFafD995dD76D8A81CF9134A09",function_name:"collectRewards",signature:"collectRewards(address)",selector:"0x5763dbd0",state_mutability:"nonpayable",arguments:["address clankerToken"],notes:"Flushes unharvested LP fees from the Uniswap v4 position into ClankerFeeLocker. If >120s since deploy with 0 post-decay swaps, call ClankerHookStaticFeeV2.mevModuleOperational(bytes32 poolId) (0x58f8cd54) first."}}}},hoodag:{"/selectors":{UniversalResolver:{"resolve(string)":"0x461a4478","reverse(address)":"0xe30bd740","resolveText(string,string)":"0xcb7cef3c","namehash(string)":"0x09879962"},RegistrarController:{"valid(string)":"0x9791c097","available(string)":"0xaeb8ce9b","priceUSDG(string,uint256)":"0x404f64da","priceUSD(string,uint256)":"0xe1271ab8","price(string,uint256)":"0x19b989a0","registerManyUSDG(string[],address,uint256,address,(uint256,uint256,uint8,bytes32,bytes32))":"0x630d6692","renewUSDG(string,uint256,(uint256,uint256,uint8,bytes32,bytes32))":"0x6e4cc14a","makeCommitment(string,address,bytes32)":"0xf49826be","commit(bytes32)":"0xf14fcbc8","register(string,address,uint256,bytes32)":"0x85f6d155","register(string,address,uint256,bytes32,address)":"0x83c3f2b9","registerMany(string[],address,uint256,address)":"0xe8839807","renew(string,uint256)":"0xacf1a841"},ReverseRegistrar:{"setName(string)":"0xc47f0027","node(address)":"0xbffbe61c"},PublicResolver:{"addr(bytes32)":"0x3b3b57de","setAddr(bytes32,address)":"0xd5fa2b00","text(bytes32,string)":"0x59d1d43c","setText(bytes32,string,string)":"0x10f13a8c","name(bytes32)":"0x691f3431","setName(bytes32,string)":"0x77372213"},Registrar:{"ownerOf(uint256)":"0x6352211e","nameExpires(uint256)":"0xd6e4fa86","available(uint256)":"0x96e494e8"}}},hoodlock:{"/contracts/locker/functions":{lock:{signature:"lock(address,uint256,uint256)",selector:"0xe2ab691d",payable:!0,args:["token","amount (base units)","unlockTime (unix seconds, > block.timestamp, no maximum)"],returns:"uint256 lockId",value:"fee() read immediately before; >= fee, excess refunded to msg.sender",requiresPriorApprove:!0,source:"Recorded chain and API observations",pointer:"/contracts/locker/functions/lock"},withdraw:{signature:"withdraw(uint256)",selector:"0x2e1a7d4d",rule:"lock owner only, once, block.timestamp >= unlockTime",source:"Recorded chain and API observations",pointer:"/contracts/locker/functions/withdraw"},extend:{signature:"extend(uint256,uint256)",selector:"0xc89258db",rule:"lock owner only, newUnlockTime > unlockTime",source:"Recorded chain and API observations",pointer:"/contracts/locker/functions/extend"},transferLockOwnership:{signature:"transferLockOwnership(uint256,address)",selector:"0x5a04fb69",source:"Recorded chain and API observations",pointer:"/contracts/locker/functions/transferLockOwnership"},fee:{signature:"fee()",selector:"0xddca3f43",source:"Recorded chain and API observations",pointer:"/contracts/locker/functions/fee"},getLock:{signature:"getLock(uint256)",selector:"0xd68f4dd1",returns:"(address owner, address token, uint256 amount, uint256 unlockTime, bool withdrawn)",source:"Recorded chain and API observations",pointer:"/contracts/locker/functions/getLock"},lockedAmount:{signature:"lockedAmount(uint256)",selector:"0xcf1cb351",source:"Recorded chain and API observations",pointer:"/contracts/locker/functions/lockedAmount"},isUnlocked:{signature:"isUnlocked(uint256)",selector:"0x72abc8b7",source:"Recorded chain and API observations",pointer:"/contracts/locker/functions/isUnlocked"},timeRemaining:{signature:"timeRemaining(uint256)",selector:"0xea3d9020",source:"Recorded chain and API observations",pointer:"/contracts/locker/functions/timeRemaining"},locksByOwner:{signature:"locksByOwner(address)",selector:"0xc8645841",note:"keeps listing a lock under previous owners; check getLock(id).owner",source:"Recorded chain and API observations",pointer:"/contracts/locker/functions/locksByOwner"},locksByToken:{signature:"locksByToken(address)",selector:"0x03091773",note:"append-only; anyone can pad it with 1-wei locks",source:"Recorded chain and API observations",pointer:"/contracts/locker/functions/locksByToken"},totalLocks:{signature:"totalLocks()",selector:"0xd2d18eac",source:"Recorded chain and API observations",pointer:"/contracts/locker/functions/totalLocks"},nextLockId:{signature:"nextLockId()",selector:"0x6518a0b3",source:"Recorded chain and API observations",pointer:"/contracts/locker/functions/nextLockId"}},"/contracts/burner/functions":{burn:{signature:"burn(address,uint256)",selector:"0x9dc29fac",payable:!0,args:["token","amount (base units)"],returns:"uint256 burnId",value:"fee() read immediately before; >= fee, excess refunded",requiresPriorApprove:!0,effect:"transferFrom(msg.sender, DEAD, amount); totalSupply unchanged",source:"Recorded chain and API observations",pointer:"/contracts/burner/functions/burn"},fee:{signature:"fee()",selector:"0xddca3f43",source:"Recorded chain and API observations",pointer:"/contracts/burner/functions/fee"},getBurn:{signature:"getBurn(uint256)",selector:"0x2eb3f49b",returns:"(address burner, address token, uint256 amount, uint256 timestamp)",source:"Recorded chain and API observations",pointer:"/contracts/burner/functions/getBurn"},totalBurnedOf:{signature:"totalBurnedOf(address)",selector:"0x90d88803",source:"Recorded chain and API observations",pointer:"/contracts/burner/functions/totalBurnedOf"},burnsByBurner:{signature:"burnsByBurner(address)",selector:"0x57f63a1d",source:"Recorded chain and API observations",pointer:"/contracts/burner/functions/burnsByBurner"},burnsByToken:{signature:"burnsByToken(address)",selector:"0x29d96f28",source:"Recorded chain and API observations",pointer:"/contracts/burner/functions/burnsByToken"},totalBurns:{signature:"totalBurns()",selector:"0x694ca01d",source:"Recorded chain and API observations",pointer:"/contracts/burner/functions/totalBurns"},DEAD:{signature:"DEAD()",selector:"0x03fd2a45",source:"Recorded chain and API observations",pointer:"/contracts/burner/functions/DEAD"},nextBurnId:{signature:"nextBurnId()",selector:"0xf3b218a7",source:"Recorded chain and API observations",pointer:"/contracts/burner/functions/nextBurnId"}},"/contracts/airdrop/functions":{create:{signature:"create(address,bytes32,uint256,uint32,uint64,string)",selector:"0xbbb04edc",payable:!0,args:["token","merkleRoot (non-zero)","total (base units; full amount must arrive)","maxClaims (1..250000; ceiling on successful claims)","endTime (0 = never sweepable, else >= block.timestamp + 604800)",'uri (<= 256 bytes; "" allowed)'],returns:"uint256 airdropId",value:"== quote(maxClaims) exactly",requiresPriorApprove:!0,source:"Recorded chain and API observations",pointer:"/contracts/airdrop/functions/create"},claim:{signature:"claim(uint256,uint256,address,uint256,bytes32[])",selector:"0x5d4df3bf",rule:"anyone may send; tokens always go to account",source:"Recorded chain and API observations",pointer:"/contracts/airdrop/functions/claim"},sweep:{signature:"sweep(uint256)",selector:"0xaa60e733",rule:"creator only, once, at or after endTime; returns remaining",source:"Recorded chain and API observations",pointer:"/contracts/airdrop/functions/sweep"},quote:{signature:"quote(uint32)",selector:"0x6f8b0eac",source:"Recorded chain and API observations",pointer:"/contracts/airdrop/functions/quote"},getAirdrop:{signature:"getAirdrop(uint256)",selector:"0x052dd94e",returns:"(address creator, uint64 endTime, uint32 maxClaims, address token, uint32 claims, bool swept, bytes32 merkleRoot, uint128 total, uint128 remaining)",source:"Recorded chain and API observations",pointer:"/contracts/airdrop/functions/getAirdrop"},isClaimed:{signature:"isClaimed(uint256,uint256)",selector:"0xf364c90c",source:"Recorded chain and API observations",pointer:"/contracts/airdrop/functions/isClaimed"},listURI:{signature:"listURI(uint256)",selector:"0x4398a943",source:"Recorded chain and API observations",pointer:"/contracts/airdrop/functions/listURI"},totalAirdrops:{signature:"totalAirdrops()",selector:"0x971a1ca2",source:"Recorded chain and API observations",pointer:"/contracts/airdrop/functions/totalAirdrops"},nextAirdropId:{signature:"nextAirdropId()",selector:"0xaff38dc8",source:"Recorded chain and API observations",pointer:"/contracts/airdrop/functions/nextAirdropId"},accruedFees:{signature:"accruedFees()",selector:"0x682c2058",source:"Recorded chain and API observations",pointer:"/contracts/airdrop/functions/accruedFees"}},"/contracts/liquidityLocker/functions":{lock:{signature:"lock(address,uint256,uint256,address,bool,uint16)",selector:"0xf997cbd9",payable:!0,args:["manager (v3 or v4 position manager)","tokenId","unlockTime (unix seconds, <= now + 100 years)","feeRecipient","acceptUnverifiedHook (v4 only)","maxCollectFeeBps (>= live collectFeeBps)"],returns:"uint256 lockId",value:">= fixedFee(), excess refunded",requiresPriorApprove:"ERC-721 approve(liquidityLocker, tokenId)",source:"Recorded chain and API observations",pointer:"/contracts/liquidityLocker/functions/lock"},lockIdOf:{signature:"lockIdOf(address,uint256)",selector:"0x61ed62f1",source:"Recorded chain and API observations",pointer:"/contracts/liquidityLocker/functions/lockIdOf"},getLock:{signature:"getLock(uint256)",selector:"0xd68f4dd1",returns:"(address owner, uint40 unlockTime, uint16 collectFeeBps, bool isV4, bool hookVerified, bool withdrawn, address feeRecipient, address token0, address token1, uint256 tokenId)",source:"Recorded chain and API observations",pointer:"/contracts/liquidityLocker/functions/getLock"},withdraw:{signature:"withdraw(uint256,address)",selector:"0x00f714ce",source:"Recorded chain and API observations",pointer:"/contracts/liquidityLocker/functions/withdraw"},extend:{signature:"extend(uint256,uint256)",selector:"0xc89258db",source:"Recorded chain and API observations",pointer:"/contracts/liquidityLocker/functions/extend"},collect:{signature:"collect(uint256)",selector:"0xce3f865f",source:"Recorded chain and API observations",pointer:"/contracts/liquidityLocker/functions/collect"},fixedFee:{signature:"fixedFee()",selector:"0x91792d5b",source:"Recorded chain and API observations",pointer:"/contracts/liquidityLocker/functions/fixedFee"},collectFeeBps:{signature:"collectFeeBps()",selector:"0xea09c4f9",source:"Recorded chain and API observations",pointer:"/contracts/liquidityLocker/functions/collectFeeBps"},paused:{signature:"paused()",selector:"0x5c975abb",source:"Recorded chain and API observations",pointer:"/contracts/liquidityLocker/functions/paused"},hookAllowed:{signature:"hookAllowed(address)",selector:"0x7dedbe63",source:"Recorded chain and API observations",pointer:"/contracts/liquidityLocker/functions/hookAllowed"},locksOf:{signature:"locksOf(address)",selector:"0xc3f9ab58",source:"Recorded chain and API observations",pointer:"/contracts/liquidityLocker/functions/locksOf"}},"/selectorCensus":{method:"cast selectors $(cast code <addr>) vs cast sig of every documented function",documentedSignatures:55,matched:55,undocumentedGetters:["0x6518a0b3 nextLockId()","0xf3b218a7 nextBurnId()","0x682c2058 accruedFees()","0xaff38dc8 nextAirdropId()"]}},hookr:{"/q2_exact_calls/selectors":{"HookrLimitOrders.createOrder":{selector:"0xce9ab0b4",signature:"createOrder(((address,address,uint24,int24,address),bool,uint128,uint128,uint160,address,uint40,uint128))",returns:"(uint256 orderId)",payable:!0,msg_value_rule:"bounty + (inputIsNativeETH ? amountIn : 0)"},"HookrLimitOrders.cancel":{selector:"0x57d682c4",signature:"cancel(uint256,address)",returns:"()",payable:!1},"HookrLimitOrders.fill":{selector:"0x3fda5389",signature:"fill(uint256)",returns:"(uint256 amountOut)",payable:!1},"HookrLimitOrders.claimBounty":{selector:"0x98ff8075",signature:"claimBounty(address)",returns:"(uint256 amount)",payable:!1},"HookrLimitOrders.getOrder":{selector:"0xd09ef241",signature:"getOrder(uint256)",returns:"(((address,address,uint24,int24,address),address,uint40,uint40,bool,uint8,address,uint128,uint128,uint128,uint160))",payable:!1},"HookrLimitOrders.quoteFill":{selector:"0xe9ba1309",signature:"quoteFill(uint256)",returns:"(bool fillable, uint256 amountOut)",payable:!1},"HookrLimitOrders.bountyBounds":{selector:"0x0b33e015",signature:"bountyBounds((address,address,uint24,int24,address),bool,uint128,uint128)",returns:"(uint128 minBounty, uint128 defaultBounty, uint128 maxBounty)",payable:!1},"HookrLimitOrders.lastOrderId":{selector:"0x5662ecc7",signature:"lastOrderId()",returns:"(uint256)",payable:!1},"HookrLimitOrders.claimableBounty":{selector:"0x715c8eff",signature:"claimableBounty(address)",returns:"(uint256)",payable:!1},"HookrLimitOrders.liabilities":{selector:"0xb01083e2",signature:"liabilities(address)",returns:"(uint256)",payable:!1},"HookrRouter.swap":{selector:"0x19b36adf",signature:"swap(((address,address,uint24,int24,address),bool,int128,uint128,uint160,address,uint256),address,uint256[])",returns:"(uint256 amountIn, uint256 amountOut)",payable:!0},"HookrRouter.swapGated":{selector:"0xd70dbb98",signature:"swapGated(((address,address,uint24,int24,address),bool,int128,uint128,uint160,address,uint256),address,address,bytes,address,uint256[])",returns:"(uint256 amountIn, uint256 amountOut)",payable:!0},"HookrQuoter.quote":{selector:"0x55f5bdd3",signature:"quote(((address,address,uint24,int24,address),bool,int128,uint128,uint160,address,uint256),address)",returns:"((bytes32,bytes32,address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint24))",payable:!1},"HookrQuoter.quoteExactInputSingle":{selector:"0xaa9d21cb",signature:"quoteExactInputSingle(((address,address,uint24,int24,address),bool,uint128,bytes))",returns:"(uint256 amountOut, uint256 gasEstimate)",payable:!1},"HookrLauncher.launch":{selector:"0xf0859aea",signature:"launch((address,string,string,uint256,bytes32),address,(address,int24,uint160,int24,int24,uint128,uint128,uint128,(address,address,address,address,address,uint24,(uint24,uint24,uint16),uint32,uint32,uint8,bool,bytes32),(uint40,uint24,uint24,uint24,uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint32,uint128,uint128,address,address),(bool,uint16,uint16,uint32,uint16,uint16,uint128,uint32))[],uint256)",returns:"(bytes32 familyId, address subject)",payable:!0},"HookrLauncher.launchWithBuy":{selector:"0xf371db3b",signature:"launchWithBuy((address,string,string,uint256,bytes32),address,(address,int24,uint160,int24,int24,uint128,uint128,uint128,(address,address,address,address,address,uint24,(uint24,uint24,uint16),uint32,uint32,uint8,bool,bytes32),(uint40,uint24,uint24,uint24,uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint32,uint128,uint128,address,address),(bool,uint16,uint16,uint32,uint16,uint16,uint128,uint32))[],bytes[],(uint8,uint128,uint128,uint32),uint256)",returns:"(bytes32 familyId, address subject, uint256 subjectOut)",payable:!0},"HookrLauncher.predictToken":{selector:"0xa3da6500",signature:"predictToken(address,(address,string,string,uint256,bytes32))",returns:"(address)",payable:!1}}},merkl:{"/abiAndSelectors/functions":{"claim(address[],address[],uint256[],bytes32[][])":"0x71ee95c0","claimWithRecipient(address[],address[],uint256[],bytes32[][],address[],bytes[])":"0x9fb67b58","claimed(address,address)":"0x0c9cbf0e","getMerkleRoot()":"0x49590657","tree()":"0xfd54b228","lastTree()":"0xcce80e7a","toggleOperator(address,address)":"0xbdac7ca3","operators(address,address)":"0x2637588e","onlyOperatorCanClaim(address)":"0x14769142","setClaimRecipient(address,address)":"0x68508c98","claimRecipient(address,address)":"0x4d272d95","endOfDisputePeriod()":"0x5cec892a"}},poolstrade:{"/selectors":{"multicall(bytes[])":"0xac9650d8","createToken(address,string,string,uint8,uint128,address,bytes)":"0xdec14be1","distributeToken(address,(address,uint128,bytes),bytes32)":"0xb6982b48","distributeWithNative(address,bytes,bytes32,uint256)":"0x0ef847b6","getGraffiti(address)":"0x65c08017","getUERC20Address(string,string,uint8,address,bytes32)":"0xf752070e","collectFees(uint256[])":"0x1f2a2e46","claim(uint256,uint256,uint256)":"0xefa9a9be","amounts(uint256)":"0x45f0a44f","ownerOf(uint256)":"0x6352211e","transferFrom(address,address,uint256)":"0x23b872dd","execute(bytes,bytes[],uint256)":"0x3593564c","getSplits()":"0x520db906","graffiti()":"0xf56a499f","nextTokenId()":"0x75794a3c"}},priors:{"/selectors":{"deposit(uint256,address,uint256)":"0xbc157ac1","withdraw(uint256,address)":"0x00f714ce","borrow(uint256,uint256,uint64,address,uint256)":"0x1a29492b","repay(uint256,uint256,uint256)":"0x895a7485","quoteFee(uint256,uint256,uint64)":"0xaed9e43f","getAgent(uint256)":"0x2de5aaf7","getLoan(uint256)":"0x504006ca","loansOf(uint256)":"0x3b7ae807","shares(address)":"0xce7c2ac2","available(uint256)":"0x96e494e8","creditReport(uint256)":"0xfff59127","balanceOf(address)":"0x70a08231","tokenOfOwnerByIndex(address,uint256)":"0x2f745c59","getAgentWallet(uint256)":"0x00339509","register(string)":"0xf2c298be","setDelegate(uint256,address)":"0x94dcf2e6","approve(address,uint256)":"0x095ea7b3","markDefault(uint256)":"0xe1d927c8"}},"morpho-borrow":{"/methods":[{tool:"supply_collateral",to:"0x9D53d5E3bd5E8d4Cbfa6DB1ca238AEA02E651010",signature:"supplyCollateral((address,address,address,address,uint256),uint256,address,bytes)",selector:"0x238d6579",arguments:["marketParams","collateralAssets","wallet","0x"],return_shape:"0x (no return data)",value:"0",chain_id:4663},{tool:"borrow",to:"0x9D53d5E3bd5E8d4Cbfa6DB1ca238AEA02E651010",signature:"borrow((address,address,address,address,uint256),uint256,uint256,address,address)",selector:"0x50d8cd4b",arguments:["marketParams","loanAssets","0","wallet","wallet"],return_shape:"ABI (uint256 assetsBorrowed,uint256 sharesBorrowed)",value:"0",chain_id:4663},{tool:"repay",to:"0x9D53d5E3bd5E8d4Cbfa6DB1ca238AEA02E651010",signature:"repay((address,address,address,address,uint256),uint256,uint256,address,bytes)",selector:"0x20b76e81",arguments:["marketParams","0","position.borrowShares","wallet","0x"],return_shape:"ABI (uint256 assetsRepaid,uint256 sharesRepaid)",value:"0",chain_id:4663},{tool:"withdraw_collateral",to:"0x9D53d5E3bd5E8d4Cbfa6DB1ca238AEA02E651010",signature:"withdrawCollateral((address,address,address,address,uint256),uint256,address,address)",selector:"0x8720316d",arguments:["marketParams","collateralAssets","wallet","wallet"],return_shape:"0x (no return data)",value:"0",chain_id:4663}]},tickerspring:{"/selectors":{erc20Approve:{signature:"approve(address,uint256)",selector:"0x095ea7b3"},groupedOrderHook:{create:{signature:"create((bytes32,int24,bool,address,uint128,uint128,uint256,uint16,uint64))",selector:"0xc25d6637"},createMarketOrder:{signature:"createMarketOrder((bytes32,int24,bool,address,uint128,uint128,uint256,uint16,uint64),address,uint160,uint160,uint160)",selector:"0x3e993775"},cancel:{signature:"cancel(uint256,uint256,uint256,uint64,uint8)",selector:"0xb66f0998"},claim:{signature:"claim(uint256,bool)",selector:"0x71baa1af"},claimBoth:{signature:"claimBoth(uint256)",selector:"0x8de9148b"},realize:{signature:"realize(uint256)",selector:"0x770fc860"},orders:{signature:"orders(uint256)",selector:"0xd09ef241"},ordersCount:{signature:"ordersCount()",selector:"0x8f328855"},marketsCount:{signature:"marketsCount()",selector:"0x063eb469"}},limitStrategy:{open:{signature:"open((address,int24,int24,uint16,bool,uint128,uint16,bool,uint64))",selector:"0xa31bba7f"},openWithMarket:{signature:"openWithMarket((address,int24,int24,uint16,bool,uint128,uint16,bool,uint64),uint160,uint160,uint160)",selector:"0x385012a0"},close:{signature:"close(uint256)",selector:"0x1f28b8c5"},setRepeat:{signature:"setRepeat(uint256,bool)",selector:"0xe1acf590"},collect:{signature:"collect(uint256)",selector:"0xd51ae60a"}}}},"uniswap-lp":{"/selectors":{"mint((address,address,uint24,int24,int24,uint256,uint256,uint256,uint256,address,uint256))":"0x88316456","increaseLiquidity((uint256,uint256,uint256,uint256,uint256,uint256))":"0x219f5d17","decreaseLiquidity((uint256,uint128,uint256,uint256,uint256))":"0x0c49ccbe","collect((uint256,address,uint128,uint128))":"0xfc6f7865","burn(uint256)":"0x42966c68","positions(uint256)":"0x99fbab88","approve(address,uint256)":"0x095ea7b3","approve(address,address,uint160,uint48)":"0x87517c45","modifyLiquidities(bytes,uint256)":"0xdd46508f","poolKeys(bytes25)":"0x86b6be7d","getSlot0(bytes32)":"0xc815641c","getLiquidity(bytes32)":"0xfa6793d5","getPositionLiquidity(uint256)":"0x1efeed33","execute(bytes,bytes[],uint256)":"0x3593564c","getPool(address,address,uint24)":"0x1698ee82"}},"pons-trade":{"/selectors":{"buy(uint256,uint256,address)":"0x59a87bc1","sell(uint256,uint256,address)":"0xd04c6983","getLaunchedToken(address)":"0x3cf28b5a","getReserves()":"0x0902f1ac","realQuoteReserve()":"0x4f1f58fd","graduationThreshold()":"0x8b0bc501","sellableTokens()":"0x808bcddc","reservedTokens()":"0x15a55347","readyToGraduate()":"0xc68360a5","graduated()":"0xe7c2b772","feeBps()":"0x24a9d853","creatorTaxBps()":"0xc1bb8901","currentSnipeTaxBps(address)":"0xd7e1ef39","snipeTaxStartBps()":"0x50e25ac2","snipeTaxSeconds()":"0x6783774b","snipeTaxExempt(address)":"0xd44bdfe7","launchedAt()":"0xbf56b371","totalSupply()":"0x18160ddd","decimals()":"0x313ce567","getSlot0(bytes32)":"0xc815641c","getLiquidity(bytes32)":"0xfa6793d5","getLaunchFeePolicy(address)":"0x470ef5fc","createGraduatedPool(address)":"0x2f53ef2f","approve(address,uint256)":"0x095ea7b3","approve(address,address,uint160,uint48)":"0x87517c45","quoteExactInputSingle(((address,address,uint24,int24,address),bool,uint128,bytes))":"0xaa9d21cb","execute(bytes,bytes[],uint256)":"0x3593564c","sweepFees(uint256)":"0x3729bb9a","sweepPoolFees(bytes32,uint256,uint256)":"0x3d61055e","claim()":"0x4e71d92d","claimToken(address)":"0x32f289cf","balanceOf(address)":"0x70a08231","balanceOfToken(address,address)":"0xf59e38b7","getTokenInfo()":"0xabb1dc44","launchFee()":"0xcf3cf573","previewLaunchEconomics(uint256,address)":"0xf718b78c","launchToken((string,string,string,string,(string,string,string,string,string),address,uint16,bool,bytes32,bytes32),uint256,address)":"0xf35abbcf","launchAndBuy((string,string,string,string,(string,string,string,string,string),address,uint16,bool,bytes32,bytes32),uint256,address,uint256,uint256,address,address[])":"0xf85f8e41","WrongGraduationPhase()":"0x9465dbd4","CurveGraduated()":"0x025ac17e","V4TooLittleReceived(uint256,uint256)":"0x8b063d73","SlippageExceeded(uint256,uint256)":"0x71c4efed"}},meridian:{"/selectors":{PredictionMarketEscrow:{"mint(((address,bytes,uint8)[],uint256,uint256,address,address,uint256,uint256,uint256,uint256,bytes,bytes,bytes32,bytes,bytes,address,bytes))":"0x2e3f9da8","settle(bytes32,bytes32)":"0xd32a9cd9","redeem(address,uint256,bytes32)":"0x992c3e4b","getClaimableAmount(bytes32,address,uint256)":"0x0f5f7793","getNonce(address)":"0x2d0335ab","getMintApprovalHash(bytes32,address,uint256,uint256,uint256)":"0x5f85aa75","getPrediction(bytes32)":"0xdc6423ab","getPickConfig(bytes32)":"0xaf6c986d","collateralToken()":"0xb2016bd4"},SecondaryMarketEscrow:{"executeTrade((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes32,bytes,bytes))":"0x52bb0979","getTradeApprovalHash(bytes32,address,uint256,uint256)":"0xb2cd9c7f","isNonceUsed(address,uint256)":"0xcab7e8eb"},ConditionResolver:{"isValidCondition(bytes)":"0x6443f7b5","getResolution(bytes)":"0x27919a3c","getResolutions(bytes[])":"0x87c428ea","isFinalized(bytes)":"0xbcdbda94","lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)":"0x13137d65","endpoint()":"0x5e280f11"},ERC20_USDe:{"approve(address,uint256)":"0x095ea7b3","allowance(address,address)":"0xdd62ed3e","balanceOf(address)":"0x70a08231"}}},relay:{"/selectors":{"0x49290c1c":{signature:"depositNative(address,bytes32)",argument_types:["address","bytes32"],value:"1000000000000000"}}},erc8004:{"/selectors":{"register()":"0x1aa3a008","register(string)":"0xf2c298be","register(string,(string,bytes)[])":"0x8ea42286","setAgentURI(uint256,string)":"0x0af28bd3","ownerOf(uint256)":"0x6352211e","tokenURI(uint256)":"0xc87b56dd","setMetadata(uint256,string,bytes)":"0x466648da","getMetadata(uint256,string)":"0xcb4799f2","getAgentWallet(uint256)":"0x00339509","setAgentWallet(uint256,address,uint256,bytes)":"0x2d1ef5ae","unsetAgentWallet(uint256)":"0x3fddcf19","approve(address,uint256)":"0x095ea7b3","setApprovalForAll(address,bool)":"0xa22cb465","getApproved(uint256)":"0x081812fc","isApprovedForAll(address,address)":"0xe985e9c5","transferFrom(address,address,uint256)":"0x23b872dd","safeTransferFrom(address,address,uint256)":"0x42842e0e"}},vaults:{"/selectors":{"asset()":"0x38d52e0f","totalAssets()":"0x01e1d114","balanceOf(address)":"0x70a08231","approve(address,uint256)":"0x095ea7b3","deposit(uint256,address)":"0x6e553f65","withdraw(uint256,address,address)":"0xb460af94","redeem(uint256,address,address)":"0xba087652","previewDeposit(uint256)":"0xef8b30f7","previewWithdraw(uint256)":"0x0a28a477","previewRedeem(uint256)":"0x4cdad506","convertToAssets(uint256)":"0x07a2d13a","maxDeposit(address)":"0x402d267d","maxWithdraw(address)":"0xce96cb77","maxRedeem(address)":"0xd905777e","performanceFee()":"0x87788782","managementFee()":"0xa6f7f5d6","want()":"0x1f1fcd51","balance()":"0xb69ef8a8","getPricePerFullShare()":"0x77c7b8fc","deposit(uint256)":"0xb6b55f25","withdraw(uint256)":"0x2e1a7d4d","withdrawAll()":"0x853828b6","deposit(address,address,uint256,uint256)":"0x20e8c565","redeem(address,uint256,address,uint256,bool)":"0x769f8e5d","assetInfo()":"0xa40bee50","exchangeRate()":"0x3ba0b9a9","getTokensIn()":"0x213cae63","getTokensOut()":"0x071bc3c9","deposit(uint224,address,bytes32[])":"0x1dbd773b","redeem(uint256)":"0xdb006a75","claim(address,uint32[])":"0xc12e43e6","requestsOf(address,uint256,uint256)":"0xd4935972","shareManager()":"0x5c60173d","sharesOf(address)":"0xf5eb42dc","activeSharesOf(address)":"0x9d66201b","flags()":"0x64cc4aa5","depositFeeD6()":"0xe3707d18","redeemFeeD6()":"0xbf9587fb","performanceFeeD6()":"0xa51fac22","protocolFeeD6()":"0x8005c6de"}}},46630:{source:"Recorded chain and API observations",pointer:"/read_only_call_probes",writesProven:!1}},E={4663:{pons:{source:"Recorded chain and API observations",callPointers:["/pons/selectors","/ponsFeeClaim","/ponsRecipientTransfer"]},ponsClaims:{source:"Recorded chain and API observations",callPointers:["/stackResolution/calls","/claim_fees","/find_launches"]},ponsTrade:{source:"Recorded chain and API observations",callPointers:["/selectors","/http_checks","/v4_execution"]},uniswap:{source:"Recorded chain and API observations",callPointers:["/selectors","/calls","/endpoints"]},kyberswap:{source:"Recorded chain and API observations",callPointers:["/routers/kyberswap"]},velora:{source:"Recorded chain and API observations",callPointers:["/routers/velora"]},stocks:{source:"Recorded chain and API observations",callPointers:["/stockTokenApi"]},orbio:{source:"Recorded chain and API observations",callPointers:["/orbio"]},vaults:{source:"Recorded chain and API observations",callPointers:["/interfaces","/selectors","/endpoints","/projects"]},morpho:{source:"Recorded chain and API observations",callPointers:["/methods","/api"]},erc8004:{source:"Recorded chain and API observations",callPointers:["/calls","/selectors"]},clanker:{source:"Recorded chain and API observations",callPointers:["/calls","/http_endpoints"]},hoodag:{source:"Recorded chain and API observations",callPointers:["/oakToolCallPlan","/selectors","/httpEndpoints"]},hoodlock:{source:"Recorded chain and API observations",callPointers:["/contracts","/selectorCensus","/http"]},hookr:{source:"Recorded chain and API observations",callPointers:["/q2_exact_calls"]},merkl:{source:"Recorded chain and API observations",callPointers:["/abiAndSelectors/functions","/api"]},poolsTrade:{source:"Recorded chain and API observations",callPointers:["/calls","/selectors","/http"]},priors:{source:"Recorded chain and API observations",callPointers:["/calls","/selectors","/endpoints"]},tickerSpring:{source:"Recorded chain and API observations",callPointers:["/selectors","/httpEndpoints"]},meridian:{source:"Recorded chain and API observations",callPointers:["/selectors","/endpoints"]},relay:{source:"Recorded chain and API observations",callPointers:["/selectors","/endpoints","/quotes"]},heyResearch:{source:"Recorded chain and API observations",callPointers:["/oakTools","/endpointsProbed"]},lighter:{source:"Recorded chain and API observations",callPointers:["/endpoints"]}},46630:{source:"Recorded chain and API observations",callPointers:["/read_only_call_probes","/dependencies","/limits"]}},w={4663:{kyberswap:"0xe21fd0e9",velora:"0xe3ead59e"}},b={4663:{kyberswap:{address:"0x8F10B468b06c6FD214B65F87778827F7D113f996",source:"https://raw.githubusercontent.com/KyberNetwork/kyberswap-documentation/main/developer-guide/aggregator-api/contracts.md",pointer:"Robinhood / AggregationExecutorProxy",block:"100861304",blockKind:"read",caveat:"Corroborated by successful transaction 0x4a2474960f846f412d4d1cbdebb86727c81f92a0859ad743425fdc544d8973e8; approveTarget is zero."},velora:{address:"0x006d0e0d006109f0020f3050000a713780b7b000",source:"https://rpc.mainnet.chain.robinhood.com",pointer:"eth_getTransactionByHash / 0x70bc411f8427d622798ff82e6088d6cf3c011ae04b063c731664215f982ecfba / input / executor",block:"100861280",blockKind:"read",caveat:"Observed v6.2 executor, corroborated by six fresh Velora builds on 2026-10-29; no vendor executor list for 4663. Inner route targets vary; this pin does not authenticate them."}}},D=BigInt("0x45a6e007c874ffc6321d6fb90eac272dd6864bfa")<<96n|1n<<92n|1n,K=[b[4663].velora.address,"0x082738d007001080a00099a000004f3006152085"];export{a,o as b,p as c,f as d,x as e,h as f,A as g,v as h,s as i,i as j,d as k,g as l,m,y as n,P as o,R as p,l as q,u as r,_ as s,t,I as u,F as v,C as w,B as x,E as y,w as z,b as A,D as B,K as C};
@@ -1 +0,0 @@
1
- import{a as me,b as le,g as W,h as Y,i as fe,m as _,n as Z,v as ee,w as be}from"./VBV366XQ.js";import{a as pe,b as q}from"./S3YSJ7XH.js";import{a as D}from"./VZWOWR6G.js";import{a as w,i as J}from"./25EOXUBI.js";import{a as de}from"./B5RZYFQC.js";import{a as i}from"./T5E4OJEU.js";import{a as ce}from"./XN4WDN3O.js";import{randomUUID as ye}from"node:crypto";import{encodeAbiParameters as F,encodeFunctionData as te,erc20Abi as he,getAddress as xe,parseAbi as C,parseAbiParameters as Q,zeroAddress as H}from"viem";var we=J[w].pons,B=J[w].ponsTrade,Ae=C(["function getLaunchedToken(address) view returns ((address token,address curve,address deployer,address creatorFeeRecipient,address pairToken,uint256 graduationThreshold,uint24 poolFee,int24 tickSpacing,uint16 creatorTaxBps,bool buybackEnabled,uint8 phase,uint256 sweptQuote,uint256 sweptTokens,uint256 sweptAt,bool exists))"]),L=C(["function getReserves() view returns (uint256 quoteReserve,uint256 tokenReserve)","function feeBps() view returns (uint256)","function creatorTaxBps() view returns (uint256)","function currentSnipeTaxBps(address) view returns (uint256)","function sellableTokens() view returns (uint256)","function buy(uint256 quoteIn,uint256 minTokensOut,address recipient) payable returns (uint256)","function sell(uint256 tokensIn,uint256 minQuoteOut,address recipient) returns (uint256)"]),Se=C(["function quoteExactInputSingle(((address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks) poolKey,bool zeroForOne,uint128 exactAmount,bytes hookData) params) returns (uint256 amountOut,uint256 gasEstimate)"]),Pe=C(["function execute(bytes commands,bytes[] inputs,uint256 deadline) payable"]),Ie=C(["function approve(address token,address spender,uint160 amount,uint48 expiration)"]),Ne=Q("((address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks) poolKey,bool zeroForOne,uint128 amountIn,uint128 amountOutMinimum,uint256 minHopPriceX36,bytes hookData)"),O={address:pe,chainId:w,decimals:18,symbol:"ETH"},ve="There is no on-chain expiry. The signed transaction is protected by its minimum output.",Ee=`Quote expiry is enforced by Oak before signing only. ${ve}`,v=10000n,ne=(1n<<256n)-1n,ke=(1n<<128n)-1n,T=(a,o)=>({token:a,amount:o.toString()}),ge=(a,o)=>(a+o-1n)/o,qe={type:"object",additionalProperties:!1,required:["token","amountIn"],properties:{token:{type:"string",pattern:"^0x[0-9a-fA-F]{40}$",description:"Pons launch token address on chain 4663."},amountIn:{type:"string",pattern:"^[0-9]+$",description:"Positive base units: native ETH for buy, launch token for sell."},slippageBps:{type:"integer",minimum:0,maximum:9999,default:100}}};async function Te(a,o,l,e,f=!1){if(D(l),Object.keys(o).some(m=>!["token","amountIn","slippageBps"].includes(m)))throw new i("Provide only token, amountIn and optional slippageBps.");if(typeof o.token!="string")throw new i("Provide a launch token address.");D(o.token);let t=xe(o.token),n=de(o.amountIn);if(n===0n||n>ne)throw new i("Trade amount must be positive and within the uint256 range.");let u=o.slippageBps??100;if(typeof u!="number"||!Number.isInteger(u)||u<0||u>=1e4)throw new i("Slippage must be an integer from 0 to 9999 basis points.");let k=m=>m*(v-BigInt(u))/v,s=a.clientFor(w),c=await s.getBlock(),r=await s.readContract({address:we.factory.address,abi:Ae,functionName:"getLaunchedToken",args:[t],blockNumber:c.number});if(!r.exists||r.token.toLowerCase()!==t.toLowerCase())throw new i("This address is not a Pons launch token.");if(f&&r.phase!==0)throw new W("Pons curve quotes are only available before graduation.");if(r.phase===1)throw new i("Pons graduation is pending; the curve is closed and the pool is not ready.");if(r.phase===3)throw new i("This Pons launch was rescued and has no active trade route.");if(r.phase!==0&&r.phase!==2)throw new i("This Pons launch has an unknown trade phase.");if(r.pairToken.toLowerCase()!==H)throw new i("This trade route supports native ETH pairs only.");let[U,x]=await Promise.all([s.readContract({address:t,abi:he,functionName:"symbol",blockNumber:c.number}),s.readContract({address:t,abi:he,functionName:"decimals",blockNumber:c.number})]),y={address:t,chainId:w,symbol:ce(U),decimals:x},N=e?O:y,z=e?y:O,A=[],K=(m,P,b,g)=>a.unsignedTx({to:m,data:P,value:b.toString(),chainId:w,description:g}),p,d,$,S=n,oe=null,X;if(r.phase===0){let m=h=>s.readContract({address:r.curve,abi:L,functionName:h,blockNumber:c.number}),[[P,b],g,I,re,M]=await Promise.all([s.readContract({address:r.curve,abi:L,functionName:"getReserves",blockNumber:c.number}),m("feeBps"),m("creatorTaxBps"),e?s.readContract({address:r.curve,abi:L,functionName:"currentSnipeTaxBps",args:[l],blockNumber:c.number}):Promise.resolve(0n),e?m("sellableTokens"):Promise.resolve(0n)]);if(P<=0n||b<=0n||g+I>v-100n)throw new i("Pons curve reserves or fee settings are unavailable.");let ie=v-g-I-100n,G=re<ie?re:ie,ae=h=>({base:h*g/v,creator:h*I/v,snipe:h*G/v}),ue=h=>{let E=ae(h);return h-E.base-E.creator-E.snipe},R;if(e){if(M<=0n||M>=b)throw new i("The curve has no available sellable tokens.");let h=ue(n);if(p=h*b/(P+h),p>=M){p=M;let E=p*P/(b-p)+1n;S=ge(E*v,v-g-I-G),S>n&&(S=n)}R=S,d=k(p),$=ge(d*n,S)}else R=n*P/(b+n),p=ue(R),d=k(p),A.push(a.approval(t,r.curve,n.toString(),w));let V=ae(R);oe={base:T(O,V.base),creator:T(O,V.creator),snipe:T(O,V.snipe)},X=`Curve fees included: ${g} base, ${I} creator and ${G} opening-tax basis points, each rounded separately.`,A.push(K(r.curve,te({abi:L,functionName:e?"buy":"sell",args:[n,$??d,l]}),e?n:0n,e?"Buy Pons curve tokens with native ETH.":"Sell Pons curve tokens for native ETH."))}else{if(n>ke)throw new i("Trade amount exceeds the router uint128 range.");let m={currency0:H,currency1:t,fee:r.poolFee,tickSpacing:r.tickSpacing,hooks:we.memeHook.address};if(p=(await s.simulateContract({address:B.quoter.address,abi:Se,functionName:"quoteExactInputSingle",args:[{poolKey:m,zeroForOne:e,exactAmount:n,hookData:"0x"}],account:l,blockNumber:c.number})).result[0],d=k(p),d>ke)throw new i("Minimum output exceeds the router uint128 range.");let b=c.timestamp+300n;if(b>=1n<<48n)throw new i("Permit2 expiry exceeds its timestamp range.");e||(A.push(a.approval(t,B.permit2.address,n.toString(),w)),A.push(K(B.permit2.address,te({abi:Ie,functionName:"approve",args:[t,B.universal_router.address,n,Number(b)]}),0n,"Approve the exact token amount to the Pons router through Permit2 for five minutes.")));let g=[F(Ne,[{poolKey:m,zeroForOne:e,amountIn:n,amountOutMinimum:d,minHopPriceX36:0n,hookData:"0x"}]),F(Q("address,uint256"),[e?H:t,n]),F(Q("address,uint256"),[e?t:H,d])],I=F(Q("bytes,bytes[]"),["0x060c0f",g]);A.push(K(B.universal_router.address,te({abi:Pe,functionName:"execute",args:["0x10",[I],b]}),e?n:0n,"Trade through Pons Universal Router v2.1.2.")),X="Quoter output is net of Pons hook fees; no additional fee is subtracted."}if(p<=0n||d<=0n||d>ne||($??d)>ne)throw new i("Trade output or minimum is outside the supported positive range.");let se=f?{changes:[],summary:"Quote only; preview is required before sending."}:await a.preview(A,l),j=n-S;return{txs:A,changes:se.changes,summary:`${e?"Buy":"Sell"} ${y.symbol} (${y.address}) on chain ${w}. ${X} ${r.phase===0?`${ve} `:""}${j>0n?`Expected native refund: ${a.formatAmount(j.toString(),18)} ETH; minimum output uses the expected spend after refund. `:""}${se.summary}`,quote:{phase:r.phase,amountIn:T(N,n),amountOut:T(z,p),minAmountOut:T(z,d),minimumKind:"absolute",calldataMinAmountOut:T(z,$??d),expectedSpend:T(N,S),expectedRefund:T(N,j),fees:oe,blockNumber:c.number.toString()}}}function Le(a){let o=new Map,l=e=>{if(BigInt(_())>=BigInt(e.expiresAt))throw new Y};return{name:"pons",async quote(e,f){e={...e,from:q(e.from),to:q(e.to)};let t=Z(e.from);if(t===Z(e.to))throw new W("Pons curve quotes require native ETH and a launch token.");let n=String(_()+me),u=await Te(a,{token:t?e.to:e.from,amountIn:e.amountIn,slippageBps:e.slippageBps??le},f,t,!0),k=u.txs.at(-1),s=u.quote,c=s.minAmountOut.amount,r=s.fees,U=`Pons curve fees included in net output: ${r.base.amount} base, ${r.creator.amount} creator and ${r.snipe.amount} opening tax, in native ETH base units (18 decimals). Oak swap fee: 0 (venue fee is never Oak income). ${Ee}`,x=be({...e,quoteId:`pons:${ye()}`,provider:"pons",wallet:f,chainId:w,router:k.to,spender:k.to,expiresAt:n,data:k.data,value:k.value,amountOut:s.amountOut.amount,minAmountOut:c,blockNumber:s.blockNumber,ponsCurveToken:t?e.to:e.from,calldataMinAmountOut:s.calldataMinAmountOut.amount,expectedSpend:s.expectedSpend.amount,expectedRefund:s.expectedRefund.amount,feeDisclosure:U,oakFee:"0"});ee(k,x),l(x);for(let[y,N]of o)BigInt(_())>=BigInt(N.quote.expiresAt)&&o.delete(y);for(;o.size>=fe;)o.delete(o.keys().next().value);return o.set(x.quoteId,{quote:{...x},txs:u.txs.map(y=>({...y})),summary:u.summary}),x},async build(e,f){let t=o.get(e);if(!t)throw new Y;if(l(t.quote),D(f),f.toLowerCase()!==t.quote.wallet.toLowerCase())throw new i("Quote was issued for a different wallet.");let n=t.txs.map(s=>({...s}));ee(n.at(-1),t.quote);let u=await a.preview(n,f);if(l(t.quote),u.changes.filter(s=>q(s.token.address).toLowerCase()===q(t.quote.to).toLowerCase()).reduce((s,c)=>s+BigInt(c.amount),0n)<BigInt(t.quote.minAmountOut))throw new i("Preview retained output is below the accepted minimum.");return{txs:n,summary:`${t.summary} ${u.summary} ${t.quote.feeDisclosure}`}}}}var Be=a=>({tools:[!0,!1].map(o=>({name:o?"pons_buy":"pons_sell",inputSchema:qe,async execute(l,e){try{return await Te(a,l,e,o)}catch(f){throw new i(a.plainError(f))}}}))}),Qe=Be;export{Le as a,Be as b,Qe as c};
@@ -1 +0,0 @@
1
- import{b as re,o as z}from"./VBV366XQ.js";import{a as K}from"./S3YSJ7XH.js";import{b as oe}from"./SGDWO7XI.js";import{a as T,i as se}from"./25EOXUBI.js";import{a as ie}from"./B5RZYFQC.js";import{a}from"./T5E4OJEU.js";import{decodeErrorResult as me,decodeEventLog as X,encodeAbiParameters as $,encodeFunctionData as S,erc20Abi as he,getAddress as ye,isAddress as ge,parseAbi as de,parseAbiParameters as C,toHex as we,zeroAddress as k}from"viem";var m=se[T].poolsTrade,E=m.liquidityLauncher.address,H=m.uerc20BeneficiaryVault.address,G=m.universalRouter.address,W=10n**27n,L=(1n<<128n)-1n,ae=`0x${"00".repeat(32)}`,be=63127652n,J=10000000n,Te={address:K,symbol:"ETH",decimals:18,chainId:T},h=de(["function multicall(bytes[] data) payable returns (bytes[])","function createToken(address factory,string name,string symbol,uint8 decimals,uint128 initialSupply,address recipient,bytes tokenData) payable returns (address)","function distributeToken(address token,(address strategy,uint128 amount,bytes configData) distribution,bytes32 salt) payable","function distributeWithNative(address strategy,bytes configData,bytes32 salt,uint256 nativeAmount) payable","function getGraffiti(address sender) view returns (bytes32)","function getUERC20Address(string name,string symbol,uint8 decimals,address recipient,bytes32 graffiti) view returns (address)","function execute(bytes commands,bytes[] inputs,uint256 deadline) payable","function collectFees(uint256[] ids)","function claim(uint256 id,uint256 minCurrency0Amount,uint256 minCurrency1Amount)","function amounts(uint256 id) view returns (uint128 eth,uint128 token)","function ownerOf(uint256 id) view returns (address)","function approve(address token,address spender,uint160 amount,uint48 expiration)","error V4TooLittleReceived(uint256 minAmountOut,uint256 amountOut)"]),D=de(["event TokenLaunched(bytes32 indexed poolId,address indexed token,address indexed feeSplitter,(address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks) poolKey)","event Transfer(address indexed from,address indexed to,uint256 indexed tokenId)"]),M=[m.instantLaunchStrategyFeesOn.address,m.instantLaunchStrategyFeesOff.address],p=(o,c)=>o.toLowerCase()===c.toLowerCase();function ce(o){if(o.status!=="success")throw new a("The launch receipt did not succeed.");let c=[];for(let f of o.logs){let y=M.findIndex(x=>p(x,f.address));if(y===-1||f.topics[0]!=="0x3b3d2bafdcae274a232217e1f80ee4305d3af6aa25c8b14b1681bd68d18042a4")continue;let F=X({abi:D,eventName:"TokenLaunched",data:f.data,topics:[...f.topics]}),{token:g,poolId:q,poolKey:I,feeSplitter:U}=F.args,j=y===0?m.feeSplitterFeesOn.address:m.feeSplitterFeesOff.address;if(!p(U,j)||!p(I.currency0,k)||!p(I.currency1,g)||I.fee!==2500||I.tickSpacing!==25||!p(I.hooks,k))throw new a("The launch does not match the current native ETH strategy.");let B=o.logs.filter(x=>p(x.address,m.v4PositionManager.address)).flatMap(x=>{if(x.topics[0]!=="0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef")return[];let O=X({abi:D,eventName:"Transfer",data:x.data,topics:[...x.topics]}).args;return p(O.from,k)&&p(O.to,M[y])?[O.tokenId]:[]});if(B.length!==1)throw new a("The launch receipt must identify one matching position mint.");c.push({token:g,poolId:q,positionId:B[0].toString(),creatorFees:y===0})}return c}function A(o){if(typeof o!="string"||!ge(o,{strict:!1}))throw new a("Provide a valid wallet or token address.");return ye(o)}function R(o,c,f=!1){if(typeof o!="string")throw new a(`${c} must be an integer string in base units.`);let y=ie(o);if(!f&&y===0n||y>=1n<<256n)throw new a(`${c} is outside its supported range.`);return y}function P(o,c,f=!1){if(f&&o===void 0)return"";if(typeof o!="string"||!f&&!o.trim()||o.length>4096)throw new a(`Provide a valid ${c}.`);return o}function xe(o){if(typeof o!="string"||!/^0x[0-9a-fA-F]{64}$/.test(o))throw new a("Provide a valid launch transaction hash.");return o}function Q(o,c,f="minAmountOut"){let y=c.slippageBps??re;if(typeof y!="number")throw new a("Slippage must be an integer in basis points.");let F=z(o.toString(),y),g=c[f]===void 0?BigInt(F):R(c[f],f,o===0n);if(g>o||o>0n&&g===0n||g>L)throw new a("The minimum output must be positive and no larger than the simulated output.");return g}function V(o){return o!==null&&typeof o=="object"&&!Array.isArray(o)}var Ae=o=>{let c=o.clientFor(T),f=(e,s,i,r)=>o.unsignedTx({to:e,data:s,value:i.toString(),chainId:T,description:r}),y=e=>{throw new a(o.plainError(e))};async function F(){if(await c.getChainId()!==T)throw new a("pools.trade requires Robinhood Chain 4663.")}async function g(e,s,i){let r=await o.preview(e,s),n=r.changes.map(({token:t,amount:d})=>{let u=d.startsWith("-");return`${u?"-":""}${o.formatAmount(u?d.slice(1):d,t.decimals)} ${t.symbol} (${t.address}, chain ${t.chainId})`});return{txs:e,summary:[i,r.summary,...n].join(" ")}}async function q(){return(await c.getBlock()).timestamp+600n}function I(e,s,i,r,n,t){let d=[k,e,2500,25,k],u=[$(C("((address,address,uint24,int24,address),bool,uint128,uint128,uint256,bytes)"),[[d,s,i,r,0n,"0x"]]),$(C("address,uint256"),[s?k:e,i]),$(C("address,address,uint256"),[s?e:k,n,0n])],l=[$(C("bytes,bytes[]"),["0x060c0e",u])];return{inputs:l,encoded:$(C("bytes,bytes[],uint256"),["0x10",l,t])}}async function U(e,s){let i=await c.request({method:"eth_simulateV1",params:[{blockStateCalls:[{calls:e.map(u=>({from:s,to:u.to,data:u.data,value:we(BigInt(u.value))}))}],validation:!1,traceTransfers:!1},"latest"]},{retryCount:0});if(!Array.isArray(i)||i.length!==1||!V(i[0])||!Array.isArray(i[0].calls)||i[0].calls.length!==e.length)throw new a("The output simulation returned a malformed response.");let r=i[0].calls;if(!r.slice(0,-1).every(u=>V(u)&&u.status==="0x1"&&!u.error))throw new a("A prerequisite failed during the output simulation.");let n=r.at(-1);if(!V(n)||n.status!=="0x0")throw new a("The output simulation did not return the expected minimum-output control.");let t=typeof n.returnData=="string"&&n.returnData!=="0x"?n.returnData:V(n.error)?n.error.data:void 0;if(typeof t!="string"||!/^0x[0-9a-fA-F]+$/.test(t))throw new a("The output simulation did not report an expected amount.");let d=me({abi:h,data:t});if(d.errorName!=="V4TooLittleReceived"||d.args[0]!==L||d.args[1]<=0n||d.args[1]>=L)throw new a("The output simulation did not report a valid amount.");return d.args[1]}async function j(e,s){let i=await c.getBlockNumber(),r=new Map,n=new Set;for(let t=be;t<=i;t+=J){let d=t+J-1n>i?i:t+J-1n,u=await c.getLogs({address:M,event:D[0],...s?{args:{token:s}}:{},fromBlock:t,toBlock:d,strict:!0});for(let l of u){if(!l.transactionHash)throw new a("A launch log is missing its transaction hash.");r.has(l.transactionHash)||r.set(l.transactionHash,await c.getTransactionReceipt({hash:l.transactionHash}))}if(e){let l=await c.getLogs({address:H,event:D[1],args:{to:e},fromBlock:t,toBlock:d,strict:!0});for(let b of l){let N=X({abi:D,eventName:"Transfer",data:b.data,topics:b.topics}).args;n.add(N.tokenId.toString())}}}return{receipts:[...r.values()],feeIds:n}}async function B(e){let i=(e.launchTx!==void 0?[await c.getTransactionReceipt({hash:xe(e.launchTx)})]:(await j(void 0,e.token===void 0?void 0:A(e.token))).receipts).flatMap(ce).filter(r=>e.positionId!==void 0?r.positionId===R(e.positionId,"positionId").toString():p(r.token,A(e.token)));if(i.length!==1)throw new a("No unique current-strategy launch was found. Older strategy generations are unsupported.");return i[0]}async function x(e,s){if(typeof e.creatorFees!="boolean")throw new a("creatorFees must be an explicit boolean; the choice is permanent.");if(e.pair!==void 0&&!p(A(e.pair),k)&&!p(A(e.pair),K))throw new a("Only the native ETH pair is supported.");if(e.decimals!==void 0&&e.decimals!==18)throw new a("Instant Launch requires 18 decimals.");if(e.supply!==void 0&&R(e.supply,"supply")!==W)throw new a("Instant Launch requires a supply of one billion tokens.");let i=A(e.feeBeneficiary);if(p(i,k)||p(i,E))throw new a("The fee beneficiary must be a wallet other than the launcher or zero address.");let r=P(e.name,"name"),n=P(e.symbol,"symbol"),t=e.initialBuy===void 0?0n:R(e.initialBuy,"initialBuy",!0);if(t>L)throw new a("The initial buy exceeds uint128.");if(t===0n&&e.minAmountOut!==void 0)throw new a("A minimum output requires an initial buy.");let d=await c.readContract({address:E,abi:h,functionName:"getGraffiti",args:[s]}),u=A(await c.readContract({address:m.uerc20Factory.address,abi:h,functionName:"getUERC20Address",args:[r,n,18,E,d]})),l=await c.getCode({address:u});if(l&&l!=="0x")throw new a("This wallet already launched that name and symbol.");let b=$(C("(string,string,string,bytes)"),[[P(e.description,"description",!0),P(e.website,"website",!0),P(e.imageUri,"image URI",!0),"0x"]]),N=e.creatorFees?M[0]:M[1],ue=[S({abi:h,functionName:"createToken",args:[m.uerc20Factory.address,r,n,18,W,E,b]}),S({abi:h,functionName:"distributeToken",args:[u,{strategy:N,amount:W,configData:$(C("address"),[i])},ae]})],fe=await q(),ee=le=>{let ne=[...ue];if(t>0n){let pe=$(C("(address,address,bytes)"),[[G,s,I(u,!0,t,le,s,fe).encoded]]);ne.push(S({abi:h,functionName:"distributeWithNative",args:[m.universalRouterStrategyApp.address,pe,ae,t]}))}return f(E,S({abi:h,functionName:"multicall",args:[ne]}),t,`Atomic Instant Launch: creator fees ${e.creatorFees?"on":"off"} (permanent); beneficiary ${i}.`)},te=t>0n?Q(await U([ee(L)],s),e):0n;return g([ee(te)],s,`Launch ${r} (${u}, chain 4663), supply 1000000000, decimals 18. Creator fees ${e.creatorFees?"on":"off"} are permanent; fee beneficiary ${i}. Creator ETH fees come from buys only (recorded 0.09996%); sells compound into locked liquidity. Initial-buy minimum ${te} token base units. Off-chain image/display unproven; no private metadata registration. No transaction sent.`)}async function O(e,s,i){let r=R(e.amountIn,"amountIn");if(r>L)throw new a("The trade amount exceeds uint128.");let n=A(e.token);await B(e);let t=await q(),d=[];i||(await c.readContract({address:n,abi:he,functionName:"allowance",args:[s,m.permit2.address]})<r&&d.push(o.approval(n,m.permit2.address,r.toString(),T)),d.push(f(m.permit2.address,S({abi:h,functionName:"approve",args:[n,G,r,Number(t)]}),0n,`Permit the exact ${r} token base units until ${t}.`)));let u=N=>[...d,f(G,S({abi:h,functionName:"execute",args:["0x10",I(n,i,r,N,s,t).inputs,t]}),i?r:0n,`${i?"Buy":"Sell"} ${n} with minimum output ${N}.`)],l=await U(u(L),s),b=Q(l,e);return g(u(b),s,`${i?"Buy":"Sell"} token ${n} (chain 4663, 18 decimals), amountIn ${r}, minimum output ${b} ${i?"token":"ETH"} base units (18 decimals). Recorded swap fee 0.2899%; creator ETH fees from buys only, none from sells. No transaction sent.`)}async function Y(e,s,i){let r=await B(e),n=BigInt(r.positionId),t=r.creatorFees?m.feeSplitterFeesOn.address:m.feeSplitterFeesOff.address,d=await c.readContract({address:m.v4PositionManager.address,abi:h,functionName:"ownerOf",args:[n]});if(!p(d,t))throw new a("The position is not locked in its current-strategy splitter.");if(!i)return g([f(t,S({abi:h,functionName:"collectFees",args:[[n]]}),0n,`Collect fees for position ${n}; permissionless.`)],s,"Collect fees for the entitled recipients; collection does not transfer creator fees to the collector. No transaction sent.");if(!r.creatorFees)throw new a("Creator fees are permanently disabled for this position.");let u=await c.readContract({address:H,abi:h,functionName:"ownerOf",args:[n]});if(!p(u,s))throw new a("Only the current fee NFT holder is entitled to claim.");let l=await c.readContract({address:H,abi:h,functionName:"amounts",args:[n]}),b=Q(l[0],e,"minEth");if(l[1]!==0n)throw new a("The current buy-only creator fee configuration returned unexpected token fees.");return g([f(H,S({abi:h,functionName:"claim",args:[n,b,0n]}),0n,`Claim collected ETH fees for position ${n} to ${s}.`)],s,`Claim collected fees: ${l[0]} ETH base units (18 decimals), minimum ${b}. Uncollected fees require poolstrade_collect first. No transaction sent.`)}let w={type:"string"},v={type:"string",pattern:"^[0-9]+$"},Z={chainId:{type:"integer",const:T},slippageBps:{type:"integer",minimum:0,maximum:9999}};function _(e,s,i,r){return{name:`poolstrade_${e}`,inputSchema:{type:"object",additionalProperties:!1,properties:{...Z,...s},required:i},execute:async(n,t)=>{try{let d=new Set([...Object.keys(Z),...Object.keys(s)]);if(Object.keys(n).some(u=>!d.has(u)))throw new a("Unsupported input; only the current atomic Instant Launch workflow is supported.");if(n.chainId!==void 0&&n.chainId!==T)throw new a("pools.trade requires chain 4663.");if(A(t),n.slippageBps!==void 0){if(typeof n.slippageBps!="number")throw new a("Slippage must be an integer in basis points.");z("10000",n.slippageBps)}return await F(),await r(n,t)}catch(d){y(d)}}}}return{tools:[_("launch",{name:w,symbol:w,creatorFees:{type:"boolean",description:"Permanent choice; must be explicit."},feeBeneficiary:w,pair:w,decimals:{type:"integer",const:18},supply:v,initialBuy:v,minAmountOut:v,description:w,website:w,imageUri:w},["name","symbol","creatorFees","feeBeneficiary"],x),...["buy","sell"].map(e=>_(e,{token:w,amountIn:v,minAmountOut:v,launchTx:w},["token","amountIn"],(s,i)=>O(s,i,e==="buy"))),_("collect",{positionId:v,launchTx:w},["positionId"],(e,s)=>Y(e,s,!1)),_("claim",{positionId:v,launchTx:w,minEth:v},["positionId"],(e,s)=>Y(e,s,!0))],positions:async e=>{try{A(e),await F();let{receipts:s,feeIds:i}=await j(e),r=[];for(let n of s)for(let t of ce(n)){let d=!1;if(t.creatorFees&&(i.has(t.positionId)||p(n.from,e))&&(d=p(await c.readContract({address:H,abi:h,functionName:"ownerOf",args:[BigInt(t.positionId)]}),e)),!d&&!p(n.from,e))continue;let u=d?[{token:Te,amount:(await c.readContract({address:H,abi:h,functionName:"amounts",args:[BigInt(t.positionId)]}))[0].toString()}]:[];r.push({module:"poolstrade",id:t.positionId,chainId:T,assets:u,description:`Current Instant Launch ${t.token} (18 decimals, supply 1000000000), pool ${t.poolId}; creator fees ${t.creatorFees?"on":"off"} (permanent). ${d?"Collected ETH fees only; uncollected fees excluded.":"Launch record; no fee entitlement held."} Liquidity is permanently locked.`})}return r}catch(s){return y(s)}}}};function Le(o){return oe("poolstrade",[Ae(o)])}export{ce as a,Ae as b,Le as c};
@@ -1 +0,0 @@
1
- import{a as q}from"./S3YSJ7XH.js";import{a as H}from"./VZWOWR6G.js";import{a as p,i as I}from"./25EOXUBI.js";import{a as d}from"./T5E4OJEU.js";import{encodeAbiParameters as K,encodeFunctionData as P,erc20Abi as D,keccak256 as Q,parseAbi as R,zeroAddress as b}from"viem";var s=R(["function launchFactory() view returns (address)","function curve() view returns (address)","function factory() view returns (address)","function feeEscrow() view returns (address)","function memeHook() view returns (address)","function getLaunchedToken(address) view returns ((address token,address curve,address deployer,address creatorFeeRecipient,address pairToken,uint256 graduationThreshold,uint24 poolFee,int24 tickSpacing,uint16 creatorTaxBps,bool buybackEnabled,uint8 phase,uint256 sweptQuote,uint256 sweptTokens,uint256 sweptAt,bool exists))","function balanceOf(address) view returns (uint256)","function quoteFeeBalance() view returns (uint256)","function creatorTaxBalance() view returns (uint256)","function pendingFees(bytes32,address) view returns (uint256)","function pendingCreatorTax(bytes32,address) view returns (uint256)"]),h=R(["function sweepFees(uint256 minBuybackTokensOut)","function sweepPoolFees(bytes32 poolId,uint256 minConversionQuoteOut,uint256 minBuybackTokensOut)","function claim()","error InternalSwapRequiresOperator()"]),F={address:q,chainId:p,symbol:"ETH",decimals:18};function u(n){if(typeof n!="string")throw new d("Provide a valid Pons coin address.");if(H(n),n.toLowerCase()===b)throw new d("Provide a nonzero Pons coin or contract address.");return n.toLowerCase()}function $(n){let l=new Set;for(;n&&typeof n=="object"&&!l.has(n)&&l.size<16;){l.add(n);let r=n;if(r.data==="0x31cdb504"||r.data&&typeof r.data=="object"&&r.data.errorName==="InternalSwapRequiresOperator")return!0;n=r.cause}return!1}async function G(n,l,r){if(!l||Object.keys(l).some(o=>o!=="token"))throw new d("Unsupported input. Provide only the Pons coin token address.");let i=u(l.token),A=u(r),e=n.clientFor(p);if(await e.getChainId()!==p)throw new d(`Pons claims require chain ${p}.`);let t=await e.getBlockNumber(),[U,j]=await Promise.all([e.readContract({address:i,abi:s,functionName:"launchFactory",blockNumber:t}),e.readContract({address:i,abi:s,functionName:"curve",blockNumber:t})]),k=u(I[p].pons.factory.address);if(u(U)!==k)throw new d("The coin must belong to the pinned Pons factory.");let f=u(j),[a,L,M]=await Promise.all([e.readContract({address:k,abi:s,functionName:"getLaunchedToken",args:[i],blockNumber:t}),e.readContract({address:f,abi:s,functionName:"factory",blockNumber:t}),e.readContract({address:f,abi:s,functionName:"feeEscrow",blockNumber:t})]);if(!a.exists||u(a.token)!==i||u(a.curve)!==f||u(L)!==k)throw new d("The coin does not resolve to a consistent Pons launch.");if(a.phase<0||a.phase>3)throw new d("This Pons launch phase is unsupported.");let x=u(a.creatorFeeRecipient);if(x!==A)throw new d("Only the current creator fee recipient can claim these fees. Use the recipient wallet or Safe.");if(a.pairToken.toLowerCase()!==b)throw new d("This claim tool supports native ETH pairs. Custom-pair token claims are not supported.");let T=u(M),S=await e.readContract({address:T,abi:s,functionName:"balanceOf",args:[A],blockNumber:t}),w=[],m=[],v=!1,C=!1,N=(o,c,g)=>n.unsignedTx({to:o,data:c,value:"0",chainId:p,description:g});if(a.phase===0){let[o,c]=await Promise.all([e.readContract({address:f,abi:s,functionName:"quoteFeeBalance",blockNumber:t}),e.readContract({address:f,abi:s,functionName:"creatorTaxBalance",blockNumber:t})]);o+c>0n&&(m.push({token:F,amount:(o+c).toString()}),a.buybackEnabled?C=!0:(await e.simulateContract({address:f,abi:h,functionName:"sweepFees",args:[0n],account:r,blockNumber:t}),w.push(N(f,P({abi:h,functionName:"sweepFees",args:[0n]}),"Sweep native curve fees into the recipient escrow."))))}else if(a.phase===2){let o=u(await e.readContract({address:k,abi:s,functionName:"memeHook",blockNumber:t})),c=Q(K([{type:"address"},{type:"address"},{type:"uint24"},{type:"int24"},{type:"address"}],[b,i,a.poolFee,a.tickSpacing,o])),[g,E,B,O]=await Promise.all([e.readContract({address:o,abi:s,functionName:"pendingFees",args:[c,b],blockNumber:t}),e.readContract({address:o,abi:s,functionName:"pendingCreatorTax",args:[c,b],blockNumber:t}),e.readContract({address:o,abi:s,functionName:"pendingFees",args:[c,i],blockNumber:t}),e.readContract({address:o,abi:s,functionName:"pendingCreatorTax",args:[c,i],blockNumber:t})]);if(g+E>0n&&m.push({token:F,amount:(g+E).toString()}),B+O>0n){let[y,z]=await Promise.all([e.readContract({address:i,abi:D,functionName:"symbol",blockNumber:t}),e.readContract({address:i,abi:D,functionName:"decimals",blockNumber:t})]);m.push({token:{address:i,chainId:p,symbol:y,decimals:z},amount:(B+O).toString()})}if(m.length)if(a.buybackEnabled)C=!0;else try{await e.simulateContract({address:o,abi:h,functionName:"sweepPoolFees",args:[c,0n,0n],account:r,blockNumber:t}),w.push(N(o,P({abi:h,functionName:"sweepPoolFees",args:[c,0n,0n]}),"Sweep native pool fees into the recipient escrow."))}catch(y){if(!$(y))throw y;v=!0}}(S>0n||w.length>0)&&w.push(N(T,P({abi:h,functionName:"claim"}),"Claim the caller\u2019s full native ETH escrow balance across all coins."));let V=await n.preview(w,r),_=[w.length?"Unsigned Pons fee claim prepared for the current recipient. The claim withdraws all native ETH owed to this wallet on this escrow across its coins.":"No native ETH claim is available from this escrow.",v?"Pending token-side conversion is awaiting Pons\u2019s keeper; the hook sweep was skipped.":"",C?"Buyback-enabled fee sweeps are not built here; pending fees await Pons\u2019s operator.":"","Pending amounts are pre-sweep fee and tax totals, not a guaranteed creator payout. Preview excludes gas. No transaction was sent."].filter(Boolean).join(" ");return{txs:w,summary:_,preview:V,claimable:{token:F,amount:S.toString()},pendingBeforeSweep:m,waitingForKeeper:v,recipient:x,escrow:T,phase:a.phase,blockNumber:t.toString()}}var ee=n=>({tools:[{name:"pons_claim",inputSchema:{type:"object",additionalProperties:!1,required:["token"],properties:{token:{type:"string",pattern:"^0x[0-9a-fA-F]{40}$",description:"Pons coin address on chain 4663."}}},execute:async(l,r)=>{try{return await G(n,l,r)}catch(i){throw new d(n.plainError(i))}}}]});export{ee as a};
@@ -1 +0,0 @@
1
- import{b as K,o as de}from"./VBV366XQ.js";import{a as _,b as ae}from"./VZWOWR6G.js";import{a as g,i as M}from"./25EOXUBI.js";import{a as E,c as be}from"./B5RZYFQC.js";import{a as d,b as j,c as S}from"./T5E4OJEU.js";import{decodeFunctionResult as xe,encodeFunctionData as L,getAddress as m,parseAbi as G,zeroAddress as Y}from"viem";var ce=-887272,ue=887272,O=(1n<<128n)-1n,Te="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",Ce="0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",Le="0x3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f",Q=2000n,Ne=5,qe=1800n,f=Object.freeze({factory:m(M[4663].uniswap.v3_factory.address),positionManager:m(M[4663].uniswap.v3_position_manager.address),swapRouter02:m(M[4663].uniswap.swap_router02.address),permit2:m(M[4663].uniswap.permit2.address),weth:m(M[4663].uniswap.WETH.address),usdg:m(M[4663].uniswap.USDG.address),ethUsdgPool:m(M[4663].oracle.ethUsdgPool.address)}),$e=Object.freeze({100:1,500:10,3e3:60,1e4:200}),tn=Object.freeze([{fee:100,tickSpacing:1,address:m("0x52e65B17fB6E5BA00Ed806f37Afcd2DaA50271Ca"),token0:f.weth,token1:f.usdg,recordedLiquidity:"1957537485734736219",recordedSqrtPriceX96:"3839219776288481168641554",recordedTick:-198707,feeProtocol:68},{fee:500,tickSpacing:10,address:m("0x69bfaf19c9f377bb306a89aed9f6b07e2c1a8d9a"),token0:f.weth,token1:f.usdg,recordedLiquidity:"714542894544667104",recordedSqrtPriceX96:"3839644024453020182443671",recordedTick:-198705,feeProtocol:68},{fee:3e3,tickSpacing:60,address:m("0xa9188730fe85be88ad499d7d52b099e800fb0334"),token0:f.weth,token1:f.usdg,recordedLiquidity:"310559629687003603",recordedSqrtPriceX96:"3843235825752878635548672",recordedTick:-198686,feeProtocol:102},{fee:1e4,tickSpacing:200,address:m("0x5f009e071f07e92b6c624e83f52f17bbda34680d"),token0:f.weth,token1:f.usdg,recordedLiquidity:"5822966536584155",recordedSqrtPriceX96:"3853297838190389678059735",recordedTick:-198634,feeProtocol:102}]),v=G(["function positions(uint256 tokenId) view returns (uint96 nonce, address operator, address token0, address token1, uint24 fee, int24 tickLower, int24 tickUpper, uint128 liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128, uint128 tokensOwed0, uint128 tokensOwed1)","function ownerOf(uint256 tokenId) view returns (address)","function balanceOf(address owner) view returns (uint256)","function tokenOfOwnerByIndex(address owner, uint256 index) view returns (uint256)","function mint((address token0, address token1, uint24 fee, int24 tickLower, int24 tickUpper, uint256 amount0Desired, uint256 amount1Desired, uint256 amount0Min, uint256 amount1Min, address recipient, uint256 deadline) params) payable returns (uint256 tokenId, uint128 liquidity, uint256 amount0, uint256 amount1)","function increaseLiquidity((uint256 tokenId, uint256 amount0Desired, uint256 amount1Desired, uint256 amount0Min, uint256 amount1Min, uint256 deadline) params) payable returns (uint128 liquidity, uint256 amount0, uint256 amount1)","function decreaseLiquidity((uint256 tokenId, uint128 liquidity, uint256 amount0Min, uint256 amount1Min, uint256 deadline) params) payable returns (uint256 amount0, uint256 amount1)","function collect((uint256 tokenId, address recipient, uint128 amount0Max, uint128 amount1Max) params) payable returns (uint256 amount0, uint256 amount1)","function burn(uint256 tokenId) payable"]),ve=G(["function getPool(address tokenA, address tokenB, uint24 fee) view returns (address pool)","function feeAmountTickSpacing(uint24 fee) view returns (int24)"]),Ee=G(["function slot0() view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked)","function liquidity() view returns (uint128)","function tickSpacing() view returns (int24)","function fee() view returns (uint24)","function token0() view returns (address)","function token1() view returns (address)"]),_e=G(["function exactInputSingle((address tokenIn, address tokenOut, uint24 fee, address recipient, uint256 amountIn, uint256 amountOutMinimum, uint160 sqrtPriceLimitX96) params) payable returns (uint256 amountOut)"]),me=G(["function decimals() view returns (uint8)","function symbol() view returns (string)","function allowance(address owner, address spender) view returns (uint256)"]),Oe="0xd0e30db0";function Re(n){if(typeof n!="string")return!1;let e=n.trim().toLowerCase();return e===Y||e===Te||e==="eth"||e==="native"}function R(n,e){if(Re(n))throw new d(`Uniswap v3 requires wrapped ERC-20 WETH (${f.weth}) rather than native ETH in ${e}.`);if(typeof n!="string")throw new d(`${e} must be a valid 20-byte hex address.`);return _(n),m(n)}function Be(n,e,t){let r=Number(n),o=Number(e),i=Number(t);if(!Number.isInteger(i)||i<=0)throw new d("Uniswap v3 tickSpacing must be a positive integer.");if(!Number.isInteger(r)||!Number.isInteger(o))throw new d("Uniswap v3 tickLower and tickUpper must be integers.");if(r<ce||o>ue||r>ue||o<ce)throw new d(`Uniswap v3 ticks are out of bounds [${ce}, ${ue}].`);if(r>=o)throw new d("Uniswap v3 tickLower must be strictly less than tickUpper.");if(r%i!==0||o%i!==0)throw new d(`Uniswap v3 tickLower (${r}) and tickUpper (${o}) must be divisible by tickSpacing (${i}).`);return{tickLower:r,tickUpper:o,tickSpacing:i}}function De(n,e){let t=n.trim(),r=t.startsWith("-"),o=r||t.startsWith("+")?t.slice(1):t,i=be(E(o).toString(),e);return r&&i!=="0"?`-${i}`:i}function Ve(n){let e=typeof n=="string"?xe({abi:v,functionName:"positions",data:n}):n;return{nonce:BigInt(e[0]),operator:m(String(e[1])),token0:m(String(e[2])),token1:m(String(e[3])),fee:Number(e[4]),tickLower:Number(e[5]),tickUpper:Number(e[6]),liquidity:BigInt(e[7]),feeGrowthInside0LastX128:BigInt(e[8]),feeGrowthInside1LastX128:BigInt(e[9]),tokensOwed0:BigInt(e[10]),tokensOwed1:BigInt(e[11])}}function ke(n,e){if(!n||!Array.isArray(n.logs))return[];let t=e?m(e).toLowerCase():void 0,r=f.positionManager.toLowerCase(),o=new Set;for(let i of n.logs){if(!i||typeof i.address!="string"||i.address.toLowerCase()!==r)continue;let s=Array.isArray(i.topics)?i.topics.map(u=>String(u).toLowerCase()):[],a=s[0];if(a===Ce&&s.length>=4){let c=`0x${s[2].slice(-40)}`;if(!t||c===t){let p=BigInt(s[3]).toString();p!=="0"&&o.add(p)}}else if(a===Le&&s.length>=2&&!t){let u=BigInt(s[1]).toString();u!=="0"&&o.add(u)}}return[...o]}function on(n){let e=t=>typeof t=="bigint"?t:E(t);return L({abi:_e,functionName:"exactInputSingle",args:[{tokenIn:m(n.tokenIn),tokenOut:m(n.tokenOut),fee:n.fee,recipient:m(n.recipient),amountIn:e(n.amountIn),amountOutMinimum:e(n.amountOutMinimum),sqrtPriceLimitX96:n.sqrtPriceLimitX96!==void 0?e(n.sqrtPriceLimitX96):0n}]})}var ye=1n<<96n;function he(n){let e=Math.abs(n),t=(e&1)!==0?0xfffcb933bd6fad37aa2d162d1a594001n:0x100000000000000000000000000000000n;return(e&2)!==0&&(t=t*0xfff97272373d413259a46990580e213an>>128n),(e&4)!==0&&(t=t*0xfff2e50f5f656932ef12357cf3c7fdccn>>128n),(e&8)!==0&&(t=t*0xffe5caca7e10e4e61c3624eaa0941cd0n>>128n),(e&16)!==0&&(t=t*0xffcb9843d60f6159c9db58835c926644n>>128n),(e&32)!==0&&(t=t*0xff973b41fa98c081472e6896dfb254c0n>>128n),(e&64)!==0&&(t=t*0xff2ea16466c96a3843ec78b326b52861n>>128n),(e&128)!==0&&(t=t*0xfe5dee046a99a2a811c461f1969c3053n>>128n),(e&256)!==0&&(t=t*0xfcbe86c7900a88aedcffc83b479aa3a4n>>128n),(e&512)!==0&&(t=t*0xf987a7253ac413176f2b074cf7815e54n>>128n),(e&1024)!==0&&(t=t*0xf3392b0822b70005940c7a398e4b70f3n>>128n),(e&2048)!==0&&(t=t*0xe7159475a2c29b7443b29c7fa6e889d9n>>128n),(e&4096)!==0&&(t=t*0xd097f3bdfd2022b8845ad8f792aa5825n>>128n),(e&8192)!==0&&(t=t*0xa9f746462d870fdf8a65dc1f90e061e5n>>128n),(e&16384)!==0&&(t=t*0x70d869a156d2a1b890bb3df62baf32f7n>>128n),(e&32768)!==0&&(t=t*0x31be135f97d08fd981231505542fcfa6n>>128n),(e&65536)!==0&&(t=t*0x9aa508b5b7a84e1c677de54f3e99bc9n>>128n),(e&131072)!==0&&(t=t*0x5d6af8dedb81196699c329225ee604n>>128n),(e&262144)!==0&&(t=t*0x2216e584f5fa1ea926041bedfe98n>>128n),(e&524288)!==0&&(t=t*0x48a170391f7dc42444e8fa2n>>128n),n>0&&(t=((1n<<256n)-1n)/t),(t>>32n)+(t%(1n<<32n)===0n?0n:1n)}function He(n,e,t,r){if(r<=0n)return{amount0:0n,amount1:0n};let[o,i]=e<t?[e,t]:[t,e];if(n<=o)return{amount0:(r<<96n)*(i-o)/i/o,amount1:0n};if(n<i){let a=(r<<96n)*(i-n)/i/n,u=r*(n-o)/ye;return{amount0:a,amount1:u}}return{amount0:0n,amount1:r*(i-o)/ye}}async function U(n,e,t,r){let o=m(e),i,s;if(t===g&&o===f.weth?(i=18,s="WETH"):t===g&&o===f.usdg&&(i=6,s="USDG"),i===void 0){let a=await n.readContract({address:o,abi:me,functionName:"decimals"});i=Number(a)}if(s===void 0)try{let a=await n.readContract({address:o,abi:me,functionName:"symbol"});if(typeof a!="string"||!a.trim())throw new d("Token symbol is unavailable.");s=a.trim()}catch(a){throw new d(`Could not read token metadata. ${S(a)}`)}if(!Number.isInteger(i)||i<0||i>255)throw new d("Token decimals are invalid.");if(r!=null){let a=Number(r);if(!Number.isInteger(a)||a!==i)throw new d(`Token ${o} on chain ${t} has ${i} decimals, not ${String(r)}.`)}return{address:o,symbol:s,decimals:i,chainId:t}}async function We(n){try{if(!n.getBlock)throw new d("Block timestamps are unavailable.");let e=await n.getBlock();if(typeof e.timestamp!="bigint")throw new d("Invalid block timestamp.");return e.timestamp}catch(e){throw new d(`Could not read the current block timestamp. ${S(e)}`)}}function X(n,e){if(typeof n=="bigint"){if(n<0n)throw new d(`${e} must be a non-negative integer.`);return n}if(typeof n=="number"){if(!Number.isSafeInteger(n)||n<0)throw new d(`${e} must be a non-negative integer.`);return BigInt(n)}if(typeof n=="string")return E(n);throw new d(`${e} must be a non-negative integer.`)}async function Ie(n,e){let t=await We(n);if(e==null)return t+qe;let r=X(e,"deadline");if(r<=t)throw new d(`Uniswap v3 deadline (${r.toString()}) has expired at timestamp ${t.toString()}.`);return r}function B(n,e){if(typeof n!="string"||!/^\d+$/.test(n))throw new d(`${e} must be a non-negative integer string in base units.`);return E(n)}function Se(n){let e=n.slippageBps??K;if(typeof e!="number")throw new d("Slippage must be an integer from 0 to 9999 bps.");return de("0",e),e}function J(n,e,t,r){let o=n===void 0?E(de(e.toString(),t)):B(n,r);if(o<=1n)throw new d(`${r} must exceed 1 base unit; the simulated amount may be too small.`);return o}function F(n,e){return ae({to:f.positionManager,data:n,value:"0",chainId:g,description:e})}async function Z(n,e,t){try{if(!n.request)throw new d("Sequential transaction simulation is unavailable.");let o=await n.request({method:"eth_simulateV1",params:[{blockStateCalls:[{calls:e.map(i=>({from:t,to:i.to,data:i.data,value:`0x${BigInt(i.value).toString(16)}`}))}],validation:!1,traceTransfers:!0},"latest"]},{retryCount:0});if(!Array.isArray(o)||o.length!==1||!Array.isArray(o[0]?.calls)||o[0].calls.length!==e.length)throw new d("Unexpected batch simulation response.");return o[0].calls.map((i,s)=>{if(i.status!=="0x1"||i.error||typeof i.returnData!="string"||!/^0x([a-fA-F0-9]{2})*$/.test(i.returnData))throw new d(`Simulation call ${s+1} failed. ${S(i.error)}`);return i.returnData})}catch(r){throw new d(`Uniswap v3 simulation failed. ${S(r)}`)}}function ee(n,e){try{return xe({abi:v,functionName:n,data:e})}catch{throw new d(`Uniswap v3 ${n} simulation returned invalid amounts.`)}}function z(n,e={}){if(e.chainId!==void 0&&Number(e.chainId)!==g)throw new d(`Uniswap v3 is only supported on Robinhood Chain (${g}).`);if(e.version!==void 0&&e.version!=="v3")throw new d(`Uniswap v3 handler received unsupported version "${String(e.version)}".`);let t=n.clientFor(g);return{...t,readContract:async r=>{try{return await t.readContract(r)}catch(o){throw new d(`Could not read Uniswap v3 ${r.functionName}. ${S(o)}`,{cause:o})}}}}async function fe(n,e,t){let r;try{r=await n.readContract({address:f.positionManager,abi:v,functionName:"ownerOf",args:[e]})}catch(s){throw new d(`Could not verify owner of Uniswap v3 position #${e}. ${S(s)}`)}let o=m(String(r)),i=m(t);if(o!==i)throw new d(`Wallet ${i} is not the owner of Uniswap v3 position #${e.toString()} (owned by ${o}).`);return o}async function ne(n,e){let t=await n.readContract({address:f.positionManager,abi:v,functionName:"positions",args:[e]});return Ve(t)}function pe(n,e){if(!Array.isArray(e.changes)||!e.changes.length)return n;let t=e.changes.map(r=>`${De(r.amount,r.token.decimals)} ${r.token.symbol}`);return`${n} (${t.join(", ")})`}async function Fe(n,e,t){_(t);let r=m(t),o=z(n,e),i=await Ie(o,e.deadline),s=Se(e),a=e.tokenId===void 0?void 0:X(e.tokenId,"tokenId"),u;if(a!==void 0){if(a<=0n)throw new d("Uniswap v3 tokenId must be a positive integer.");await fe(o,a,r),u=await ne(o,a)}let c=u?.token0??R(e.token0,"token0"),p=u?.token1??R(e.token1,"token1");if(BigInt(c)>=BigInt(p))throw new d("Uniswap v3 requires distinct sorted token addresses.");let w=u?.fee??Number(e.fee??100),l=$e[w];if(!l)throw new d("Unsupported Uniswap v3 fee tier.");let y=m(String(await o.readContract({address:f.factory,abi:ve,functionName:"getPool",args:[c,p,w]})));if(y===Y)throw new d("No Uniswap v3 pool exists for these tokens and fee tier.");let{tickLower:h,tickUpper:T,tickSpacing:N}=Be(u?.tickLower??e.tickLower,u?.tickUpper??e.tickUpper,l),A=await U(o,c,g,e.token0Decimals),b=await U(o,p,g,e.token1Decimals),k=B(e.amount0Desired,"amount0Desired"),x=B(e.amount1Desired,"amount1Desired");if(k===0n&&x===0n)throw new d("Liquidity addition requires a positive desired amount.");let P=e.recipient===void 0?r:R(e.recipient,"recipient");if(P!==r)throw new d("Uniswap recipient must be the signing wallet.");if(e.wrapNative===!0&&c!==f.weth&&p!==f.weth)throw new d("Wrapping requires a positive WETH desired amount.");let D=await Promise.all([c,p].map(async C=>BigInt(await o.readContract({address:C,abi:me,functionName:"allowance",args:[r,f.positionManager]})))),q=(C,H)=>{let re=[];if(e.wrapNative===!0){let W=c===f.weth?C:H;W>0n&&re.push(ae({to:f.weth,data:Oe,value:W.toString(),chainId:g,description:"Wrap ETH into WETH."}))}for(let[W,Ue]of[c,p].entries()){let se=W===0?C:H;se>0n&&D[W]<se&&re.push(n.approval(Ue,f.positionManager,se.toString(),g))}return re},$=a===void 0?"mint":"increaseLiquidity",le=(C,H)=>F(a===void 0?L({abi:v,functionName:"mint",args:[{token0:c,token1:p,fee:w,tickLower:h,tickUpper:T,amount0Desired:k,amount1Desired:x,amount0Min:C,amount1Min:H,recipient:P,deadline:i}]}):L({abi:v,functionName:"increaseLiquidity",args:[{tokenId:a,amount0Desired:k,amount1Desired:x,amount0Min:C,amount1Min:H,deadline:i}]}),`${$==="mint"?"Mint":"Increase"} Uniswap v3 ${A.symbol}/${b.symbol} liquidity.`),ge=await Z(o,[...q(k,x),le(0n,0n)],r),I=ee($,ge[ge.length-1]),Pe=I[I.length-2],Me=I[I.length-1];if(Pe>k||Me>x)throw new d("Simulated liquidity spend exceeds the desired amounts.");let V=q(k,x),ie=J(e.amount0Min,I[I.length-2],s,"amount0Min"),oe=J(e.amount1Min,I[I.length-1],s,"amount1Min");if(ie>k||oe>x)throw new d("Uniswap v3 minimum amount cannot exceed desired amount.");V.push(le(ie,oe));let we=await n.preview(V,r);return{txs:V,preview:we,summary:pe(V[V.length-1].description,we),details:{version:"v3",action:$,...a===void 0?{}:{tokenId:a.toString()},pool:y,fee:w,tickSpacing:N,tickLower:h,tickUpper:T,token0:A,token1:b,amount0Desired:k.toString(),amount1Desired:x.toString(),amount0Min:ie.toString(),amount1Min:oe.toString(),deadline:i.toString(),recipient:P,expectedAmount0:I[I.length-2].toString(),expectedAmount1:I[I.length-1].toString()}}}async function Ge(n,e,t){_(t);let r=m(t),o=z(n,e),i=X(e.tokenId,"tokenId");if(i<=0n)throw new d("Uniswap v3 tokenId must be a positive integer.");await fe(o,i,r);let s=await ne(o,i),a=await U(o,s.token0,g),u=await U(o,s.token1,g),c=e.recipient===void 0?r:R(e.recipient,"recipient");if(c!==r)throw new d("Uniswap recipient must be the signing wallet.");let p=e.amount0Max===void 0?O:B(e.amount0Max,"amount0Max"),w=e.amount1Max===void 0?O:B(e.amount1Max,"amount1Max");if(p===0n&&w===0n||p>O||w>O)throw new d("Collect requires a positive amountMax within uint128.");let l=[F(L({abi:v,functionName:"collect",args:[{tokenId:i,recipient:c,amount0Max:p,amount1Max:w}]}),`Collect Uniswap v3 fees from position #${i}.`)],y=ee("collect",(await Z(o,l,r))[0]),h=await n.preview(l,r);return{txs:l,preview:h,summary:pe(l[0].description,h),details:{version:"v3",action:"collect",tokenId:i.toString(),recipient:c,token0:a,token1:u,amount0Max:p.toString(),amount1Max:w.toString(),expectedAmount0:y[0].toString(),expectedAmount1:y[1].toString()}}}async function Xe(n,e,t){_(t);let r=m(t),o=z(n,e),i=X(e.tokenId,"tokenId");if(i<=0n)throw new d("Uniswap v3 tokenId must be a positive integer.");await fe(o,i,r);let s=await ne(o,i);if(s.liquidity<=0n)throw new d("Position has zero active liquidity to remove.");if(e.liquidity===void 0)throw new d('Provide a liquidity amount or explicitly choose liquidity "all" for a full exit.');let a=e.liquidity==="all"?s.liquidity:B(e.liquidity,"liquidity");if(a<=0n)throw new d("Liquidity to remove must be positive.");if(a>s.liquidity)throw new d("Requested liquidity exceeds position liquidity.");let u=await Ie(o,e.deadline),c=Se(e),p=await U(o,s.token0,g),w=await U(o,s.token1,g),l=e.recipient===void 0?r:R(e.recipient,"recipient");if(l!==r)throw new d("Uniswap recipient must be the signing wallet.");let y=(D,q)=>F(L({abi:v,functionName:"decreaseLiquidity",args:[{tokenId:i,liquidity:a,amount0Min:D,amount1Min:q,deadline:u}]}),`Decrease ${a} liquidity on Uniswap v3 position #${i}.`),h=ee("decreaseLiquidity",(await Z(o,[y(0n,0n)],r))[0]),T=J(e.amount0Min,h[0],c,"amount0Min"),N=J(e.amount1Min,h[1],c,"amount1Min"),A=[y(T,N),F(L({abi:v,functionName:"collect",args:[{tokenId:i,recipient:l,amount0Max:O,amount1Max:O}]}),`Collect principal and fees from Uniswap v3 position #${i}.`)],b=a===s.liquidity,k=b&&e.burn===!0;k&&A.push(F(L({abi:v,functionName:"burn",args:[i]}),`Burn empty Uniswap v3 position #${i}.`));let x=ee("collect",(await Z(o,A,r))[1]),P=await n.preview(A,r);return{txs:A,preview:P,summary:pe(`Remove Uniswap v3 liquidity from position #${i}${k?" and burn NFT":""}`,P),details:{version:"v3",action:"remove",tokenId:i.toString(),recipient:l,token0:p,token1:w,liquidityRemoved:a.toString(),amount0Min:T.toString(),amount1Min:N.toString(),deadline:u.toString(),expectedAmount0:x[0].toString(),expectedAmount1:x[1].toString(),fullExit:b,burned:k}}}async function ze(n,e,t={}){let r=m(e),o=new Set;if(Array.isArray(t.tokenIds))for(let s of t.tokenIds){let a=X(s,"tokenId");a>0n&&o.add(a.toString())}if(Array.isArray(t.receipts))for(let s of t.receipts)for(let a of ke(s,r))o.add(a);let i=!1;try{let s=BigInt(await n.readContract({address:f.positionManager,abi:v,functionName:"balanceOf",args:[r]})),a=s>64n?64n:s;for(let u=0n;u<a;u++){try{let c=BigInt(await n.readContract({address:f.positionManager,abi:v,functionName:"tokenOfOwnerByIndex",args:[r,u]}));c>0n&&o.add(c.toString())}catch(c){if(!j(c,3,-32601,-32004))throw c;break}u+1n===s&&(i=!0)}s===0n&&(i=!0)}catch(s){if(!j(s,3,-32601,-32004))throw s}if(typeof n.getLogs=="function"&&typeof n.getBlockNumber=="function")try{let s=t.toBlock??await n.getBlockNumber(),a=t.maxChunks??Ne,u=t.fromBlock??(s>Q*BigInt(a)?s-Q*BigInt(a)+1n:0n),c=s,p=0;for(;c>=u&&p<a;){let w=c>=Q-1n?c-(Q-1n):0n,l=w<u?u:w,y=await n.getLogs({address:f.positionManager,fromBlock:l,toBlock:c});for(let h of ke({logs:y},r))o.add(h);if(p+=1,l===0n||l<=u)break;c=l-1n}}catch(s){throw new d(`Could not discover Uniswap v3 positions from logs. ${S(s)}`)}else if(!i&&t.tokenIds===void 0&&t.receipts===void 0)throw new d("Uniswap v3 position discovery is unavailable; supply candidate token IDs or receipts.");return[...o].map(s=>BigInt(s)).sort((s,a)=>s<a?-1:s>a?1:0)}async function Ae(n,e,t={}){_(e);let r=m(e),o=z(n),i=await ze(o,r,t),s=[];for(let a of i){let u;try{let b=await o.readContract({address:f.positionManager,abi:v,functionName:"ownerOf",args:[a]});u=m(String(b))}catch(b){if(j(b,3))continue;throw new d(`Could not verify owner of position #${a}. ${S(b)}`)}if(u!==r)continue;let c;try{c=await ne(o,a)}catch(b){throw new d(`Could not read position #${a}. ${S(b)}`)}if(c.liquidity===0n&&c.tokensOwed0===0n&&c.tokensOwed1===0n&&!t.includeEmpty)continue;let w=await U(o,c.token0,g),l=await U(o,c.token1,g),y=0n,h=0n;if(c.liquidity>0n)try{let b=await o.readContract({address:f.factory,abi:ve,functionName:"getPool",args:[c.token0,c.token1,c.fee]}),k=m(String(b));if(k===Y)throw new d("Position pool was not found.");if(k!==Y){let x=await o.readContract({address:k,abi:Ee,functionName:"slot0"}),P=BigInt(x[0]);if(P<=0n)throw new d("Position pool has no initialized price.");let D=he(c.tickLower),q=he(c.tickUpper),$=He(P,D,q,c.liquidity);y=$.amount0,h=$.amount1}}catch(b){throw new d(`Could not value Uniswap v3 position #${a}. ${S(b)}`)}let T=y+c.tokensOwed0,N=h+c.tokensOwed1,A=[{token:w,amount:T.toString()},{token:l,amount:N.toString()}];s.push({module:"uniswap",id:`uniswap:v3:${a.toString()}`,chainId:g,assets:A,description:`Uniswap v3 LP position #${a.toString()} (${w.symbol}/${l.symbol} fee ${c.fee} ticks [${c.tickLower}, ${c.tickUpper}] liquidity ${c.liquidity.toString()})`})}return s}async function je(n,e,t){z(n,e);let r=e.wallet!==void 0?R(e.wallet,"wallet"):m(t),o=Array.isArray(e.tokenIds)?e.tokenIds:void 0,i=Array.isArray(e.receipts)?e.receipts:void 0,s=e.includeEmpty===!0,a=await Ae(n,r,{tokenIds:o,receipts:i,includeEmpty:s});return{positions:a,details:{version:"v3",wallet:r,count:a.length,positionManager:f.positionManager}}}function Ke(n){return[{name:"uniswap_add",inputSchema:{type:"object",description:"Mint a new Uniswap v3 concentrated liquidity position or increase liquidity on an existing v3 NFT position on Robinhood Chain (4663).",properties:{version:{type:"string",enum:["v3"],default:"v3"},tokenId:{type:"string",description:"Optional existing v3 NFT tokenId for increaseLiquidity."},token0:{type:"string",description:"Sorted ERC-20 token0 address (e.g. WETH)."},token1:{type:"string",description:"Sorted ERC-20 token1 address (e.g. USDG)."},fee:{type:"integer",enum:[100,500,3e3,1e4],default:100},tickLower:{type:"integer",description:"Lower tick boundary divisible by tickSpacing."},tickUpper:{type:"integer",description:"Upper tick boundary divisible by tickSpacing."},amount0Desired:{type:"string",description:"Desired token0 amount in decimal base units."},amount1Desired:{type:"string",description:"Desired token1 amount in decimal base units."},amount0Min:{type:"string",description:"Minimum token0 amount in decimal base units."},amount1Min:{type:"string",description:"Minimum token1 amount in decimal base units."},slippageBps:{type:"integer",minimum:0,maximum:9999,default:K},deadline:{type:"integer",description:"Unix timestamp deadline (> current block timestamp)."},wrapNative:{type:"boolean",description:"Optional: wrap native ETH into WETH before minting."}}},execute:(i,s)=>Fe(n,i,s)},{name:"uniswap_collect",inputSchema:{type:"object",description:"Collect accrued Uniswap v3 LP fees for an owned NonfungiblePositionManager NFT.",properties:{version:{type:"string",enum:["v3"],default:"v3"},tokenId:{type:"string",description:"Uniswap v3 NFT tokenId."},recipient:{type:"string",description:"Optional fee recipient; must be the signing wallet."},amount0Max:{type:"string",description:"Max token0 to collect (defaults to uint128 max)."},amount1Max:{type:"string",description:"Max token1 to collect (defaults to uint128 max)."}},required:["tokenId"]},execute:(i,s)=>Ge(n,i,s)},{name:"uniswap_remove",inputSchema:{type:"object",description:"Decrease liquidity on an owned Uniswap v3 NFT position, collect principal and fees, and optionally burn the empty NFT.",properties:{version:{type:"string",enum:["v3"],default:"v3"},tokenId:{type:"string",description:"Uniswap v3 NFT tokenId."},liquidity:{type:"string",description:"Positive base-unit liquidity amount, or all for a full exit."},amount0Min:{type:"string",description:"Minimum token0 principal in decimal base units."},amount1Min:{type:"string",description:"Minimum token1 principal in decimal base units."},slippageBps:{type:"integer",minimum:0,maximum:9999,default:K},deadline:{type:"integer",description:"Unix timestamp deadline (> current block timestamp)."},burn:{type:"boolean",description:"Whether to burn the NFT after removing 100% of liquidity."}},required:["tokenId"]},execute:(i,s)=>Xe(n,i,s)},{name:"uniswap_list_positions",inputSchema:{type:"object",description:"List active Uniswap v3 LP positions owned by the wallet from NFT receipts and Transfer logs.",properties:{version:{type:"string",enum:["v3"],default:"v3"},wallet:{type:"string",description:"Optional wallet address override."},tokenIds:{type:"array",items:{type:"string"},description:"Optional candidate v3 NFT tokenIds to inspect."}}},execute:(i,s)=>je(n,i,s)}]}var te=n=>({tools:Ke(n),positions:e=>Ae(n,e)}),rn=te,sn=te,an=te,dn=te;export{ce as a,ue as b,O as c,f as d,$e as e,tn as f,v as g,ve as h,Ee as i,_e as j,Be as k,De as l,Ve as m,ke as n,on as o,Fe as p,Ge as q,Xe as r,Ae as s,je as t,Ke as u,te as v,rn as w,sn as x,an as y,dn as z};
@@ -1 +0,0 @@
1
- import{b as qe,o as se}from"./VBV366XQ.js";import{a as P}from"./S3YSJ7XH.js";import{a as Ae}from"./VZWOWR6G.js";import{a as q,i as ge}from"./25EOXUBI.js";import{a as be}from"./B5RZYFQC.js";import{a as t}from"./T5E4OJEU.js";import{decodeFunctionData as Re,erc20Abi as Ce,isAddress as Se,parseAbi as Pe}from"viem";var Ee="https://api.relay.link",T="0x0000000000000000000000000000000000000000",Oe=60,$e=30,Be=Pe(["function depositNative(address depositor, bytes32 id) payable"]),n=ge[q].relay.depository.address.toLowerCase(),Y="0x59916da825d2d2ec1bf878d71c88826f6633ecca",_e=new Map([[1,{chainId:"ethereum",depository:n}],[10,{chainId:"optimism",depository:n}],[25,{chainId:"cronos",depository:Y}],[56,{chainId:"bnb",depository:n}],[100,{chainId:"gnosis",depository:n}],[130,{chainId:"unichain",depository:n}],[137,{chainId:"polygon",depository:n}],[143,{chainId:"monad",depository:n}],[146,{chainId:"sonic",depository:n}],[169,{chainId:"manta",depository:n}],[196,{chainId:"xlayer",depository:n}],[288,{chainId:"boba",depository:n}],[324,{chainId:"zksync",depository:n}],[360,{chainId:"shape",depository:n}],[480,{chainId:"worldchain",depository:n}],[747,{chainId:"flow",depository:n}],[988,{chainId:"stable",depository:n}],[999,{chainId:"hyperevm",depository:n}],[1088,{chainId:"metis",depository:Y}],[1135,{chainId:"lisk",depository:n}],[1868,{chainId:"soneium",depository:n}],[2020,{chainId:"ronin",depository:n}],[2741,{chainId:"abstract",depository:n}],[2818,{chainId:"morph",depository:n}],[4217,{chainId:"tempo",depository:n}],[4326,{chainId:"megaeth",depository:n}],[5e3,{chainId:"mantle",depository:Y}],[5031,{chainId:"somnia",depository:n}],[5042,{chainId:"arc",depository:n}],[8453,{chainId:"base",depository:n}],[9745,{chainId:"plasma",depository:n}],[33139,{chainId:"apechain",depository:n}],[34443,{chainId:"mode",depository:n}],[42018,{chainId:"mythos",depository:n}],[42161,{chainId:"arbitrum",depository:n}],[42220,{chainId:"celo",depository:n}],[43114,{chainId:"avalanche",depository:n}],[48900,{chainId:"zircuit",depository:n}],[57073,{chainId:"ink",depository:n}],[59144,{chainId:"linea",depository:Y}],[60808,{chainId:"bob",depository:n}],[80094,{chainId:"berachain",depository:n}],[97477,{chainId:"doma",depository:n}],[98866,{chainId:"plume",depository:n}],[534352,{chainId:"scroll",depository:n}],[685689,{chainId:"gensyn",depository:n}],[747474,{chainId:"katana",depository:n}],[5064014,{chainId:"ethereal",depository:n}],[7777777,{chainId:"zora",depository:n}]]),ae={type:"string",pattern:"^[0-9]+$"},J={type:"string",pattern:"^0x[0-9a-fA-F]{40}$"};function s(e){if(!e||typeof e!="object"||Array.isArray(e))throw new t("Relay returned an unexpected response.");return e}function E(e){if(typeof e!="string"||!Se(e,{strict:!1}))throw new t("Provide a token or wallet address.");return e.toLowerCase()}function I(e){let o=E(e);return o===P?T:o}function w(e,o){return E(e)===E(o)}function l(e){if(typeof e!="string")throw new t("Provide a decimal base-unit amount string.");return be(e),e}function X(e){let o=l(e);if(BigInt(o)<=0n)throw new t("Provide a positive base-unit amount.");return o}function Me(e){if(typeof e!="number"||!Number.isSafeInteger(e)||e<=0)throw new t("Provide a positive integer origin chain ID.");return e}function ke(e,o){if(typeof e!="number"||!Number.isSafeInteger(e)||e<=0)throw new t(`${o} is missing or invalid.`);return e}async function z(e,o,c,i,p){let a=s(c);if(a.chainId!==i||I(a.address)!==p||typeof a.symbol!="string"||!/^[A-Za-z0-9._-]{1,32}$/.test(a.symbol))throw new t("Relay quote token metadata does not match the requested chain and address.");if(p===T){if(a.decimals!==18)throw new t("Native token decimals must be 18.");return{address:P,chainId:i,symbol:a.symbol,decimals:18}}let g=`${i}:${p}`,m=o.get(g);if(m===void 0){let d=await e.clientFor(i).readContract({address:p,abi:Ce,functionName:"decimals"}),f=typeof d=="bigint"?Number(d):d;if(typeof f!="number"||!Number.isInteger(f)||f<0||f>255)throw new t("Could not read valid ERC-20 decimals() on-chain.");m=f,o.set(g,m)}return{address:p,chainId:i,symbol:a.symbol,decimals:m}}async function Fe(e,o,c,i,p,a,g){if(c.swap===void 0)return[];let m=s(c.swap),d=s(m.from);if(d.chainId!==p)throw new t("The swap prerequisite token must be on the origin chain.");let f=await z(e,o,d,p,I(d.address)),O=a===T?P:a;if(w(f.address,O))throw new t("The swap prerequisite must use a different input token.");let de=X(m.amountIn),y=m.slippageBps;if(y!==void 0&&(typeof y!="number"||!Number.isInteger(y)||y<0||y>1e4))throw new t("Provide swap slippage in basis points from 0 to 10000.");let v=await e.quoteSwap({from:f.address,to:O,amountIn:de,...y===void 0?{}:{slippageBps:y}},i);if(BigInt(l(v.expiresAt))<=BigInt(Math.floor(Date.now()/1e3)))throw new t("The swap prerequisite quote expired. Request a fresh quote.");if(BigInt(l(v.minAmountOut))<BigInt(g))throw new t("The swap prerequisite minimum cannot cover the bridge amount.");let R=await e.buildSwap(v.quoteId,i);if(!("txs"in R)||!R.txs.length)throw new t("The swap prerequisite must return unsigned transactions.");if(R.txs.some(x=>x.chainId!==p))throw new t("The injected swap coordinator does not support this origin chain.");return R.txs.map(x=>e.unsignedTx(x))}async function je(e,o,c){Ae(c);let i=Me(o.originChainId);if(i===q)throw new t("Inbound bridging requires an origin chain other than 4663.");let p=_e.get(i);if(!p)throw new t("Relay inbound does not support this origin chain.");if(o.destinationChainId!==void 0&&o.destinationChainId!==q)throw new t("Inbound bridge destination must be chain 4663.");let a=I(o.originCurrency??P),g=I(o.destinationCurrency??P),m=E(o.recipient??c),d=X(o.amount),f=o.minAmountOut===void 0?void 0:l(o.minAmountOut),O=o.slippageBps===void 0?qe:o.slippageBps;if(se("0",O),await e.clientFor(i).getChainId()!==i)throw new t("The RPC chain does not match the inbound origin chain.");let y=new Map,v=await Fe(e,y,o,c,i,a,d),R,x=process.env.OAK_RELAY_API_KEY?.trim();try{let r=await e.http(`${Ee}/quote/v2`,{method:"POST",headers:{"content-type":"application/json","user-agent":"oak-core/0.1.0",...x?{"x-api-key":x}:{}},body:JSON.stringify({user:c,recipient:m,originChainId:i,destinationChainId:q,originCurrency:a,destinationCurrency:g,amount:d,tradeType:"EXACT_INPUT"})});if(!r.ok)throw new Error("Relay HTTP failure.");R=await r.json()}catch{throw new t("Relay quote request failed. Please try again.")}let b=s(R);if(typeof b.requestId!="string"||!/^0x[0-9a-fA-F]{64}$/.test(b.requestId))throw new t("Relay returned an invalid request ID.");let D=b.requestId,ue=`/intents/status/v3?requestId=${D}`,B=s(b.details);if(!w(B.sender,c)||!w(B.recipient,m))throw new t("Relay quote sender or recipient does not match the request.");let ce=s(B.currencyIn),Z=s(B.currencyOut),ee=await z(e,y,ce.currency,i,a),N=await z(e,y,Z.currency,q,g);if(l(ce.amount)!==d)throw new t("Relay quote input amount does not match the request.");let _=X(Z.amount),S=X(Z.minimumAmount);if(BigInt(S)>BigInt(_))throw new t("Relay quote minimum output exceeds the expected output.");if(f!==void 0){if(S!==f)throw new t("Relay order minimum must exactly match minAmountOut. Request a new quote.")}else{let r=se(_,O);if(BigInt(S)<BigInt(r))throw new t("Relay order minimum is below the allowed slippage minimum. Request a new quote.")}let pe=s(s(b.fees).relayer),me=s(pe.currency),H=await z(e,y,me,i,I(me.address)),he={token:H,amount:l(pe.amount)},ye=s(B.refundCurrency),Te=s(ye.currency),M=await z(e,y,Te,i,a),te=l(ye.amount),F=s(s(b.protocol).v2);if(typeof F.orderId!="string"||!/^0x[0-9a-fA-F]{64}$/.test(F.orderId))throw new t("Relay returned an invalid order ID.");let K=F.orderId.toLowerCase(),G=s(F.paymentDetails),j=E(G.depository);if(G.chainId!==p.chainId||j!==p.depository||I(G.currency)!==a||l(G.amount)!==d)throw new t("Relay payment details do not match the origin chain depository and input.");let V=s(F.orderData),$=s(V.output);if($.chainId!=="robinhood"||!Array.isArray($.calls)||$.calls.length!==0||!Array.isArray($.payments)||$.payments.length!==1)throw new t("Relay order output does not match destination chain 4663.");let Q=s($.payments[0]);if(!w(Q.recipient,m)||I(Q.currency)!==g||l(Q.minimumAmount)!==S||l(Q.expectedAmount)!==_)throw new t("Relay order output payment does not match the quoted recipient and amounts.");let ne=ke($.deadline,"Relay order output deadline");if(!Array.isArray(V.inputs)||!V.inputs.length)throw new t("Relay order has no inputs.");let W=[],oe=[];for(let r of V.inputs){let u=s(r),k=s(u.payment);if(k.chainId!==p.chainId||I(k.currency)!==a||l(k.amount)!==d||!Array.isArray(u.refunds)||!u.refunds.length)throw new t("Relay order input does not match the quoted input.");for(let C of u.refunds){let h=s(C);if(!w(h.recipient,c))throw new t("Relay refund recipient does not match the agent wallet. Request a new quote.");if(W.push(ke(h.deadline,"Relay order refund deadline")),oe.push(l(h.minimumAmount)),!(h.chainId===p.chainId?w(h.recipient,c)&&I(h.currency)===a:h.chainId==="robinhood"&&I(h.currency)===g))throw new t("Relay order refund terms do not match the sender or recipient.")}}let le=Math.min(ne,...W),L=0,fe=()=>{let r=Math.floor(Date.now()/1e3),u=L||r+Oe;if(le-r<=$e)throw new t("Relay order deadline is expired or too soon to sign safely. Request a new quote.");if(L=Math.min(u,le-$e),L<=r)throw new t("Relay quote expired before signing. Request a new quote.")};if(fe(),!Array.isArray(b.steps)||!b.steps.length)throw new t("Relay returned no origin transactions.");let A=[];for(let r of b.steps){let u=s(r);if(u.kind!=="transaction"||u.requestId!==D||!Array.isArray(u.items)||!u.items.length)throw new t("Relay returned an unsupported origin step.");for(let k of u.items){let C=s(k),h=s(C.data),re=s(C.check);if(C.status!=="incomplete"||h.chainId!==i||!w(h.from,c))throw new t("Relay transaction does not match the origin chain and sender.");if(re.method!=="GET"||re.endpoint!==ue)throw new t("Relay status endpoint does not match the request ID.");A.push(e.unsignedTx({to:E(h.to),data:h.data,value:l(h.value),chainId:i,description:`Relay inbound deposit for request ${D}; destination chain 4663.`}))}}if(!A.length)throw new t("Relay returned no origin transactions.");if(a===T&&A.length!==1)throw new t("Relay native deposit must be a single depositNative transaction.");if(a!==T&&A.length>2)throw new t("Relay ERC-20 deposit allows at most one exact-amount approval before depositNative.");for(let r of A.slice(0,-1)){if(!r.data.toLowerCase().startsWith("0x095ea7b3"))throw new t("Relay returned an unsupported prerequisite transaction.");let u=Re({abi:Ce,data:r.data});if(u.functionName!=="approve")throw new t("Relay returned an invalid approval.");let[k,C]=u.args;if(a===T||!w(r.to,a)||!w(k,j)||C!==BigInt(d)||r.value!=="0")throw new t("Relay approval must authorize the exact input amount for the origin depository.");r.description=`Approve exactly ${e.formatAmount(d,ee.decimals)} ${ee.symbol} (${d} base units of ${a}) for ${j} on chain ${i}.`}let U=A[A.length-1],ve=a===T?d:"0";if(!w(U.to,j)||U.value!==ve||!/^0x[0-9a-fA-F]{136}$/.test(U.data))throw new t("Relay deposit transaction does not target the origin depository with depositNative calldata.");let ie;try{ie=Re({abi:Be,data:U.data})}catch{throw new t("Relay deposit transaction must call depositNative(address,bytes32).")}if(ie.functionName!=="depositNative")throw new t("Relay deposit transaction must call depositNative(address,bytes32).");let[xe,De]=ie.args;if(!w(xe,c)||De.toLowerCase()!==K)throw new t("Relay depositNative depositor or orderId does not match the wallet and quoted protocol.v2.orderId.");U.description=`Relay inbound depositNative for order ${K} (request ${D}); destination chain 4663.`;let we=[...v,...A],Ie=await e.preview(we,c);fe();let Ne=Ie.changes.map(r=>{let u=r.amount.startsWith("-");return`${u?"-":""}${e.formatAmount(u?r.amount.slice(1):r.amount,r.token.decimals)} ${r.token.symbol} (${r.token.address}, chain ${r.token.chainId})`});return{txs:we,preview:Ie,requestId:D,orderId:K,depository:j,originChainId:i,destinationChainId:q,recipient:m,amountIn:{token:ee,amount:d},amountOut:{token:N,amount:_},minAmountOut:S,relayerFee:he,refundCurrency:{token:M,amount:te,minimumAmounts:oe},orderDeadline:String(ne),refundDeadlines:W.map(String),expiresAt:String(L),status:"pending",statusEndpoint:ue,summary:`${v.length?"Swap prerequisite first, then ":""}Relay inbound from chain ${i} to chain 4663 for ${m}; expected ${e.formatAmount(_,N.decimals)} ${N.symbol}, minimum ${e.formatAmount(S,N.decimals)} ${N.symbol} (${N.address}). Quoted relay fee ${e.formatAmount(he.amount,H.decimals)} ${H.symbol} (${H.address}, chain ${i}); output is net of quoted fees. Order ${K} (request ${D}); output deadline ${ne}, refund deadlines ${W.join(", ")}, quote expires ${L}. Refund terms: details.refundCurrency quotes ${e.formatAmount(te,M.decimals)} ${M.symbol} (${te} base units) on chain ${M.chainId} (${M.address}), but protocol.v2 order refund floor is ${oe.join(", ")} base units. ${Ne.join("; ")}. Unsigned origin transactions only; destination fulfillment remains pending. Track with relay_status; timeout or refund is not fulfillment.`}}var Qe=e=>({tools:[{name:"relay_bridge_in",inputSchema:{type:"object",additionalProperties:!1,required:["originChainId","amount"],properties:{originChainId:{type:"integer",minimum:1},destinationChainId:{const:q},originCurrency:J,destinationCurrency:J,amount:ae,minAmountOut:ae,slippageBps:{type:"integer",minimum:0,maximum:9999},recipient:J,swap:{type:"object",additionalProperties:!1,required:["from","amountIn"],properties:{from:{type:"object",additionalProperties:!1,required:["address","chainId","symbol","decimals"],properties:{address:J,chainId:{type:"integer",minimum:1},symbol:{type:"string"},decimals:{type:"integer",minimum:0,maximum:255}}},amountIn:ae,slippageBps:{type:"integer",minimum:0,maximum:1e4}}}}},async execute(o,c){try{return await je(e,o,c)}catch(i){throw new t(e.plainError(i))}}}]});export{Qe as a};
@@ -1 +0,0 @@
1
- import{a as O,b as _}from"./LIUXNOLP.js";import{a as R}from"./P7Q6MJZH.js";import{a as M,b as x}from"./VZWOWR6G.js";import{a as P,b as N,i as L,t as T}from"./25EOXUBI.js";import{a as d,b as E,c as C}from"./T5E4OJEU.js";import{decodeFunctionResult as V,encodeFunctionData as W,erc20Abi as G,getAddress as F,isAddress as j,toEventSelector as q,toHex as v,zeroAddress as J}from"viem";var p="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";function Q(e){let s=e.toLowerCase();return s===J||s===p?p:e}var X=q("Transfer(address,address,uint256)"),H="Simulation only: transfer-based token changes exclude gas and do not prove external settlement. No transaction was sent.";function b(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function y(){throw new d("The endpoint returned an unexpected simulation response.")}async function $(e,s,l,o){let r=await e.getChainId();if(r!==s)throw new d(`Preview is on chain ${s}, but the endpoint reports chain ${r}.`);let c=await O(e),t=await _(e,c);if(c.number===null||typeof c.baseFeePerGas!="bigint"||c.baseFeePerGas<0n||typeof t!="bigint"||t<c.baseFeePerGas)throw new d("Current block base fee and gas price are unavailable or inconsistent. Retry the preview.");return e.request({method:"eth_simulateV1",params:[{blockStateCalls:[{blockOverrides:{baseFeePerGas:v(c.baseFeePerGas)},calls:l.map(n=>({from:o,to:n.to,data:n.data,value:v(BigInt(n.value)),gasPrice:v(t)}))}],validation:!1,traceTransfers:!0},v(c.number)]},{retryCount:0})}function I(e,s,l,o){(!Array.isArray(e)||e.length!==1||!b(e[0])||!Array.isArray(e[0].calls)||e[0].calls.length!==s)&&y();let r=new Map;for(let[c,t]of e[0].calls.entries()){if(b(t)||y(),t.status==="0x0")throw new d(`Preview call ${c+1} on chain ${o} reverted. ${C(t.error)}`);(t.status!=="0x1"||t.error||!Array.isArray(t.logs))&&y();for(let n of t.logs){if((!b(n)||!Array.isArray(n.topics))&&y(),typeof n.topics[0]!="string"||n.topics[0].toLowerCase()!==X||n.topics.length===4)continue;(n.topics.length!==3||typeof n.address!="string"||!j(n.address,{strict:!1})||typeof n.data!="string"||!/^0x[0-9a-fA-F]{64}$/.test(n.data)||!n.topics.slice(1).every(i=>typeof i=="string"&&/^0x0{24}[0-9a-fA-F]{40}$/.test(i)))&&y();let f=n.topics[1].slice(-40).toLowerCase(),g=n.topics[2].slice(-40).toLowerCase(),u=l.slice(2).toLowerCase(),A=BigInt(n.data),a=(g===u?A:0n)-(f===u?A:0n);if(a!==0n){let i=Q(n.address.toLowerCase());r.set(i,(r.get(i)??0n)+a)}}}return r}async function U(e,s,l,o){let r=s===P?T.mainnet:s===N?T.testnet:void 0,c=r&&[{address:r.usdg,symbol:"USDG",decimals:6},{address:r.weth,symbol:"WETH",decimals:18},...s===P?[{address:L[4663].meridian.CollateralToken_USDe.address,symbol:"USDe",decimals:18}]:[]].find(n=>n.address.toLowerCase()===e);if(c)return{...c,address:F(e),chainId:s};let t;if(e===p){let n=l.chain?.nativeCurrency??(s===4663?{symbol:"ETH",decimals:18}:void 0);if(!n)throw new d(`Native token metadata is unavailable for chain ${s}.`);t={address:e,chainId:s,symbol:n.symbol,decimals:n.decimals}}else if(o)t=await o(e,s,l);else{let n=await R(l,s,e,"decimals");t={address:e,chainId:s,symbol:e,decimals:n}}if(!t||typeof t.address!="string"||t.address.toLowerCase()!==e||t.chainId!==s||typeof t.symbol!="string"||!t.symbol.trim()||!Number.isInteger(t.decimals)||t.decimals<0||t.decimals>255)throw new d(`Invalid token metadata for ${e} on chain ${s}.`);return{address:e===p?e:F(e),chainId:s,symbol:e===p?t.symbol:F(e),decimals:t.decimals}}function se(e){return async(s,l)=>{M(l);let o=s.map(x),r=o[0]?.chainId;if(r===void 0)return{txs:o,changes:[],summary:H};let c=o.find(t=>t.chainId!==r);if(c)throw new d(`Preview cannot combine chain ${r} with chain ${c.chainId}. Preview each chain separately.`);try{let t=e.clientFor(r),n;try{n=await $(t,r,o,l)}catch(a){if(!E(a,-32601,-32004)||!e.anvilFor)throw a;t=await e.anvilFor(r),n=await $(t,r,o,l)}let f=I(n,o.length,l,r),g=new Map,u=[];for(let[a,i]of f)if(i!==0n)try{g.set(a,await U(a,r,t,e.tokenFor))}catch(k){if(a===p||e.tokenFor||(await t.getCode({address:a})??"0x")!=="0x")throw k;u.push(a)}if(u.length){let a=u.flatMap(h=>["symbol","decimals"].map(m=>x({to:h,data:W({abi:G,functionName:m}),value:"0",chainId:r,description:`Read simulated token ${m}.`}))),i=await $(t,r,[...o,...a],l);(!Array.isArray(i)||i.length!==1||!b(i[0])||!Array.isArray(i[0].calls)||i[0].calls.length!==o.length+a.length)&&y();let k=i[0].calls,D=I([{calls:k.slice(0,o.length)}],o.length,l,r);if(f.size!==D.size||[...f].some(([h,m])=>D.get(h)!==m))throw new d("Simulation changed while reading new-token metadata. Refresh the preview.");for(let[h,m]of u.entries()){let S=(B,K)=>{let w=k[o.length+h*2+K];if(!b(w)||w.status!=="0x1"||w.error||typeof w.returnData!="string"||!/^0x[0-9a-fA-F]+$/.test(w.returnData))throw new d(`Invalid simulated token metadata for ${m} on chain ${r}.`);return V({abi:G,functionName:B,data:w.returnData})},z={address:m,chainId:r,symbol:S("symbol",0),decimals:S("decimals",1)};g.set(m,await U(m,r,t,async()=>z))}}let A=[...f].filter(([,a])=>a!==0n).map(([a,i])=>({token:g.get(a),amount:i.toString()}));return{txs:o,changes:A,summary:H}}catch(t){throw new d(`Preview on chain ${r} failed: ${C(t)}`)}}}export{p as a,Q as b,se as c};
@@ -1 +0,0 @@
1
- import{a as i,b as u}from"./XN4WDN3O.js";var o=class extends Error{name="OakError"};function d(e){let n=[],s=new Set;for(;e&&typeof e=="object"&&!s.has(e)&&n.length<16;){s.add(e);let a=e;n.push(a),e=a.cause}return n}function r(e,...n){return d(e).some(s=>typeof s.code=="number"&&n.includes(s.code))}function f(e){if(e instanceof o)return u(e.message)||e.message.length>1024?i(e.message):e.message;let n=d(e),s=n.find(t=>t instanceof o&&/^(?:The RPC request timed out\. Please try again\.|The RPC endpoint returned malformed JSON\.|The RPC endpoint returned HTTP [1-5]\d{2}\. Please try again\.|The RPC endpoint is busy; retry in [1-9]\d* seconds\.)$/.test(t.message));if(s)return String(s.message);if(n.some(t=>t.name==="TimeoutError"))return"The request timed out. Please try again.";if(n.some(t=>t.name==="AbortError"))return"The request was cancelled.";if(r(e,4001))return"The request was declined.";if(r(e,-32601,-32004))return"This endpoint does not support the requested operation.";let a=n.map(t=>typeof t.message=="string"?t.message:"").join(" ");return/insufficient funds for gas \* price \+ value/i.test(a)?"Insufficient funds for the simulation gas budget. Check wallet ETH and the endpoint or fork block gas limit; no transaction was sent.":/revert/i.test(a)||r(e,3)?"The contract call reverted.":/fetch failed|ECONNREFUSED|ENOTFOUND|network/i.test(a)?"The service could not be reached. Please try again.":"The request failed. Please try again."}export{o as a,r as b,f as c};
@@ -1 +0,0 @@
1
- import{b as C}from"./S3YSJ7XH.js";import{c as H}from"./64EN6Y7E.js";import{a as f,b as $,c as J}from"./VZWOWR6G.js";import{A as R,B as X,C as Y,a as b,i as V,z as U}from"./25EOXUBI.js";import{a as o,d as Z}from"./B5RZYFQC.js";import{a as r}from"./T5E4OJEU.js";import{decodeFunctionData as k,encodeFunctionData as Q,parseAbi as K}from"viem";var ce=60,j=50,ke=200,ee=K(["function buy(uint256 quoteIn,uint256 minTokensOut,address recipient) payable returns (uint256)","function sell(uint256 tokensIn,uint256 minQuoteOut,address recipient) returns (uint256)"]),le="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",W="0x0000000000000000000000000000000000000000",B=V[4663].routes.kyberswap.address,L=V[4663].routes.velora.address,te=U[4663].kyberswap.toLowerCase(),ne=U[4663].velora.toLowerCase(),me="0x0000000000000000000000000000000000000000000000000000000000000000",P=K(["function swap((address callTarget, address approveTarget, bytes targetData, (address srcToken, address dstToken, address[] srcReceivers, uint256[] srcAmounts, address[] feeReceivers, uint256[] feeAmounts, address dstReceiver, uint256 amount, uint256 minReturnAmount, uint256 flags, bytes permit) desc, bytes clientData) execution) payable returns (uint256 returnAmount, uint256 gasUsed)"]),_=K(["function swapExactAmountIn(address executor, (address srcToken, address destToken, uint256 fromAmount, uint256 toAmount, uint256 quotedAmount, bytes32 metadata, address beneficiary) swapData, uint256 partnerAndFee, bytes permit, bytes executorData) payable returns (uint256 receivedAmount, uint256 submittedAmount, uint256 augustusFeeAmount)"]),E=class extends r{name="NoRouteError";constructor(t="No swap route is available for this token pair and amount."){super(t)}},F=class extends r{name="ExpiredQuoteError";constructor(t="Quote has expired. Request a fresh quote."){super(t)}},pe=1e3,S=new Map;function oe(e){for(let[t,n]of S)BigInt(e)>=o(n.expiresAt)&&S.delete(t)}function G(e){return{...e,...e.txs?{txs:e.txs.map(t=>({...t}))}:{}}}function q(e){let t=G(e);return t.txs&&(t.txs.forEach(Object.freeze),Object.freeze(t.txs)),Object.freeze(t)}var fe=["router","from","to","wallet","amountIn","amountOut","minAmountOut","expiresAt","chainId","spender","value","ponsCurveToken","blockNumber","calldataMinAmountOut","expectedSpend","expectedRefund"];function N(e,t,n=!1){for(let i of fe)if(!(i==="expiresAt"&&n&&o(e.expiresAt)<=o(t.expiresAt))&&e[i]!==void 0&&String(e[i]).toLowerCase()!==String(t[i]).toLowerCase())throw new r(`Quote ${i} does not match the accepted quote.`)}function M(e=Date.now){let t=e();if(!Number.isFinite(t)||t<0)throw new r("Clock must return a non-negative timestamp.");return t>1e11?Math.floor(t/1e3):Math.floor(t)}function I(e){let t=e.toLowerCase();return t===le.toLowerCase()||t===W.toLowerCase()}function we(e,t=j){if(!Number.isInteger(t)||t<0||t>=1e4)throw new r("Slippage must be an integer from 0 to 9999 bps.");return Z(e,String(1e4-t),"10000","floor")}function re(e){return o(e)*10000n/9999n+1n}function ae(e){if(e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");let t=e.provider??"venue";return`Venue fee: ${e.venueFee} base units (${e.venueFeeBps} bps) retained by ${t}; Oak swap fee: 0 (venue fee is never Oak income).`}function Ae(e){f(e.from),f(e.to),f(e.wallet);let t=e.callTarget??R[b].kyberswap.address,n=e.approveTarget??W;f(t),f(n);let i=o(e.amountIn),a=o(e.minAmountOut);return Q({abi:P,functionName:"swap",args:[{callTarget:t,approveTarget:n,targetData:e.targetData??"0x",desc:{srcToken:e.from,dstToken:e.to,srcReceivers:I(e.from)?[]:[t],srcAmounts:I(e.from)?[]:[i],feeReceivers:[],feeAmounts:[],dstReceiver:e.wallet,amount:i,minReturnAmount:a,flags:0n,permit:"0x"},clientData:e.clientData??"0x"}]})}function ge(e){f(e.from),f(e.to),f(e.wallet);let t=e.executor??R[b].velora.address;return f(t),Q({abi:_,functionName:"swapExactAmountIn",args:[t,{srcToken:e.from,destToken:e.to,fromAmount:o(e.amountIn),toAmount:o(e.minAmountOut),quotedAmount:o(e.amountOut),metadata:e.metadata??me,beneficiary:e.wallet},e.partnerAndFee??0n,"0x",e.executorData??"0x"]})}function ve(e){if(typeof e!="string"||!/^0x([0-9a-fA-F]{2})+$/.test(e)||e.length<10)throw new r("Swap calldata must contain a 4-byte function selector.");let t=e.slice(0,10).toLowerCase();if(t===te)return k({abi:P,data:e}).args[0].desc.minReturnAmount;if(t===ne)return k({abi:_,data:e}).args[1].toAmount;let n=k({abi:ee,data:e});if(n.functionName==="buy"||n.functionName==="sell")return n.args[1];throw new r(`Unsupported swap router selector ${t}.`)}function se(e,t,n=!1){let i=o(t),a=ve(e);if(a!==i&&!(n&&a>i))throw new r(`Built swap calldata minimum output (${a}) does not match the accepted quote minimum (${i}).`);return a}function ue(e,t){let{from:n,to:i,wallet:a,amountIn:d}=t;if(!n||!i||!a||d===void 0)throw new r("Accepted quote must include input, output, amount and wallet.");for(let s of[n,i,a,t.router,e.to])f(s);let l=(s,c,A)=>{if(s.toLowerCase()!==c.toLowerCase())throw new r(`Built swap ${A} does not match the accepted quote.`)};if(l(e.to,t.router,"router"),e.chainId!==(t.chainId??b))throw new r("Built swap chain does not match the accepted quote.");let g=I(n)?o(d):0n;if(o(e.value)!==g||t.value!==void 0&&o(t.value)!==g)throw new r("Built swap value does not match the accepted quote input.");let w=e.data.slice(0,10).toLowerCase(),u=t.router.toLowerCase(),p;if(u===B.toLowerCase()&&w===te){l(t.spender??t.router,B,"spender");let s=k({abi:P,data:e.data});if(Q({abi:P,...s}).toLowerCase()!==e.data.toLowerCase())throw new r("KyberSwap calldata must be canonically decodable.");let{callTarget:c,approveTarget:A,desc:m}=s.args[0];l(c,R[b].kyberswap.address,"executor"),l(A,W,"executor approval target");let v=I(n);if(m.srcReceivers.length!==(v?0:1)||m.srcAmounts.length!==(v?0:1)||!v&&(m.srcReceivers[0].toLowerCase()!==c.toLowerCase()||m.srcAmounts[0]!==o(d)))throw new r("KyberSwap source transfers must send the exact input to the pinned executor.");if(m.feeReceivers.length||m.feeAmounts.length||m.flags!==0n&&m.flags!==512n||m.permit!=="0x")throw new r("KyberSwap fee recipients, fee amounts, flags and permit must match the pinned zero-fee policy.");p={from:m.srcToken,to:m.dstToken,wallet:m.dstReceiver,amount:m.amount}}else if(u===L.toLowerCase()&&w===ne){l(t.spender??t.router,L,"spender");let s=k({abi:_,data:e.data});if(Q({abi:_,...s}).toLowerCase()!==e.data.toLowerCase())throw new r("Velora calldata must be canonically decodable.");let[c,A,m,v]=s.args;if(!Y.some(T=>T.toLowerCase()===c.toLowerCase()))throw new r("Built swap executor does not match the accepted quote.");if(m!==0n&&(m!==X||t.venueFeeBps!==1)||v!=="0x")throw new r("Velora partnerAndFee and permit must match the pinned venue fee policy.");if(t.calldataMinAmountOut!==void 0&&o(t.calldataMinAmountOut)!==re(t.minAmountOut))throw new r("Velora calldata minimum must cover the accepted net output, venue fee and router dust.");if(t.calldataMinAmountOut!==void 0&&(A.quotedAmount!==o(t.grossAmountOut??"0")||A.quotedAmount<o(t.calldataMinAmountOut)))throw new r("Velora quoted gross output must match the accepted quote and cover its calldata minimum.");if(m!==0n&&t.calldataMinAmountOut===void 0)throw new r("Velora venue fee requires a fee-adjusted calldata minimum.");p={from:A.srcToken,to:A.destToken,wallet:A.beneficiary,amount:A.fromAmount}}else if(t.provider==="pons"&&t.ponsCurveToken){let s=k({abi:ee,data:e.data}),c=I(n);if(s.functionName!==(c?"buy":"sell")||!I(c?n:i))throw new r("Pons curve direction does not match the accepted quote.");l(c?i:n,t.ponsCurveToken,"curve token"),l(t.spender??t.router,t.router,"curve spender"),p={from:n,to:i,wallet:s.args[2],amount:s.args[0]}}else throw new r("Built swap selector does not match the accepted router.");if(l(p.from,n,"input token"),l(p.to,i,"output token"),l(p.wallet,a,"recipient"),p.amount!==o(d))throw new r("Built swap input amount does not match the accepted quote.");se(e.data,t.calldataMinAmountOut??t.minAmountOut,u===B.toLowerCase())}function z(e,t={}){if(!e||typeof e.quoteId!="string"||!e.quoteId.trim())throw new r("Quote must include a non-empty quoteId.");if(f(e.router),e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");let n=o(e.amountOut),i=e.destAmountAfterFee??e.netAmountOut,a,d,l;if(i!==void 0){if(d=o(i),a=e.grossAmountOut!==void 0?o(e.grossAmountOut):n>=d?n:d,a<d)throw new r("Gross output cannot be less than net output.");l=e.venueFee!==void 0?o(e.venueFee):a-d}else if(e.grossAmountOut!==void 0){if(a=o(e.grossAmountOut),d=n,a<d)throw new r("Gross output cannot be less than net output.");l=e.venueFee!==void 0?o(e.venueFee):a-d}else e.venueFee!==void 0?(l=o(e.venueFee),d=n,a=d+l):(d=n,a=n,l=0n);if(d<=0n)throw new E("Quote output amount must be positive.");let g=t.slippageBps??e.slippageBps??j,w=e.minAmountOut!==void 0?o(e.minAmountOut):o(we(d.toString(),g));if(w<=0n||w>a)throw new r("Quote minAmountOut must be positive and not exceed gross output.");if((t.provider??e.provider)==="velora"&&e.calldataMinAmountOut!==void 0){if(o(e.calldataMinAmountOut)!==re(w.toString())||o(e.calldataMinAmountOut)>a)throw new r("Velora calldata minimum must cover the accepted net output, venue fee and router dust.")}else if(e.calldataMinAmountOut!==void 0||e.ponsCurveToken!==void 0){if((t.provider??e.provider)!=="pons"||!e.ponsCurveToken)throw new r("Curve minimum requires a Pons curve quote.");f(e.ponsCurveToken);let h=o(t.amountIn??e.amountIn??"0"),x=o(e.expectedSpend??"0"),ie=o(e.expectedRefund??"0"),de=o(e.calldataMinAmountOut??"0");if(h<=0n||x<=0n||x+ie!==h||de*x/h!==w)throw new r("Pons actual minimum and refund do not match the encoded minimum.")}let u=M(t.now),p=BigInt(u+ce),s=e.expiresAt!==void 0?o(e.expiresAt):p,c=(s>p?p:s).toString(),A=l.toString(),m=e.venueFeeBps??(a>0n&&l>0n?Number((l*10000n+a/2n)/a):0),v=t.provider??e.provider??(e.router.toLowerCase()===L.toLowerCase()?"velora":"kyberswap"),T=v==="pons"&&e.feeDisclosure?e.feeDisclosure:ae({provider:v,venueFee:A,venueFeeBps:m,oakFee:"0"}),O={...e,quoteId:e.quoteId,amountOut:d.toString(),minAmountOut:w.toString(),router:e.router,expiresAt:c,provider:v,grossAmountOut:a.toString(),destAmountAfterFee:d.toString(),netAmountOut:d.toString(),venueFee:A,venueFeeBps:m,oakFee:"0",feeDisclosure:T,...t.from??e.from?{from:C(t.from??e.from)}:{},...t.to??e.to?{to:C(t.to??e.to)}:{},...t.amountIn??e.amountIn?{amountIn:t.amountIn??e.amountIn}:{},...t.wallet??e.wallet?{wallet:t.wallet??e.wallet}:{},slippageBps:g,chainId:t.chainId??e.chainId??b,spender:e.spender??e.router,...t.allowance??e.allowance?{allowance:t.allowance??e.allowance}:{}};if(BigInt(u)>=o(c))throw new F;if(t.cache===!1)return O;if(oe(u),BigInt(u)>=o(c))throw new F;let y=S.get(O.quoteId);if(y){N(O,y,!0);let h=q({...y,expiresAt:O.expiresAt});return S.set(h.quoteId,h),G(h)}for(;S.size>=pe;)S.delete(S.keys().next().value);let D=q(O);return S.set(D.quoteId,D),G(D)}async function Ee(e,t,n={}){e={...e},f(e.from),f(e.to),f(e.wallet),e.from=C(e.from),e.to=C(e.to);let i=o(e.amountIn);if(i<=0n)throw new r("Swap amountIn must be greater than zero.");let a=e.slippageBps??j;if(!Number.isInteger(a)||a<0||a>=1e4)throw new r("Slippage must be an integer from 0 to 9999 bps.");if(!Array.isArray(t)||t.length===0)throw new E;let d={from:e.from,to:e.to,amountIn:i.toString(),slippageBps:a},l=await Promise.allSettled(t.map(async u=>{let p=await(u.quotePrices??u.quote).call(u,{...d},e.wallet);return{quote:z(p,{provider:u.name,from:e.from,to:e.to,amountIn:i.toString(),wallet:e.wallet,slippageBps:a,chainId:e.chainId??b,allowance:e.allowance,now:e.now,cache:!1}),provider:u}})),g,w=[];for(let u of l)u.status==="rejected"&&(g??=H(u.reason)),u.status==="fulfilled"&&o(u.value.quote.expiresAt)>BigInt(M(e.now))&&w.push(u.value);if(w.length===0)throw g??new E;w.sort((u,p)=>{let c=o(p.quote.amountOut)-o(u.quote.amountOut)||o(p.quote.minAmountOut)-o(u.quote.minAmountOut);return c>0n?1:c<0n?-1:0});for(let{quote:u,provider:p}of w)try{if(BigInt(M(e.now))>=o(u.expiresAt))continue;if(n.deferBuild||!p.prepareQuote)return z(u,{now:e.now});let s=await p.prepareQuote(u.quoteId,e.wallet);if(s.quoteId!==u.quoteId)throw new r("Prepared quote ID does not match the selected route.");if(N(s,u,!0),!s.data)throw new r("Selected route did not return swap calldata.");let c={...u,expiresAt:s.expiresAt,data:s.data,value:s.value,allowance:s.allowance??u.allowance};return ue($({to:c.router,data:s.data,value:s.value??"0",chainId:c.chainId??b,description:"Selected swap route"}),c),z(c,{now:e.now})}catch(s){g??=H(s);continue}throw g??new E}function Te(e,t={}){if(!e||typeof e.quoteId!="string"||!e.quoteId.trim())throw new r("Provide a valid quote to build a swap.");f(e.router);let n=S.get(e.quoteId),i=M(t.now);if(oe(i),!n||BigInt(i)>=o(n.expiresAt))throw S.delete(e.quoteId),new F;if(e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");N(e,n),N({...n,...t},n);let a=n.from,d=n.to,l=n.amountIn,g=n.wallet;if(!a||!d||!g||l===void 0)throw new r("Accepted quote must include input, output, amount and wallet.");let w=n.chainId??b,u=n.spender??n.router,p=t.allowance??e.allowance??n?.allowance??"0";f(a),f(d),f(g),f(u);let s=o(l);if(s<=0n)throw new r("Swap amountIn must be greater than zero.");let c=o(n.minAmountOut);if(c<=0n)throw new r("Swap minAmountOut must be greater than zero.");let A=e.router.toLowerCase()===L.toLowerCase(),m=t.data??e.data??n?.data??(A?ge({from:a,to:d,amountIn:s.toString(),amountOut:n.amountOut,minAmountOut:c.toString(),wallet:g}):Ae({from:a,to:d,amountIn:s.toString(),minAmountOut:c.toString(),wallet:g}));se(m,n.calldataMinAmountOut??c.toString(),n.router.toLowerCase()===B.toLowerCase());let v=n.venueFee??"0",T=n.venueFeeBps??0,O=n.provider??(A?"velora":"kyberswap"),y=n.feeDisclosure??ae({provider:O,venueFee:v,venueFeeBps:T,oakFee:"0"}),D=I(a),h=t.value??e.value??n?.value??(D?s.toString():"0"),x=$({to:e.router,data:m,value:h,chainId:w,description:`Swap ${s} base units of ${a} for at least ${c} base units of ${d} via ${O} (${e.router}). ${y}`});return ue(x,n),D||o(p)>=s?[x]:[J(a,u,s.toString(),w),x]}export{ce as a,j as b,ke as c,ee as d,le as e,W as f,E as g,F as h,pe as i,G as j,q as k,N as l,M as m,I as n,we as o,re as p,ae as q,Ae as r,ge as s,ve as t,se as u,ue as v,z as w,Ee as x,Te as y};
@@ -1 +0,0 @@
1
- import{b as $}from"./SGDWO7XI.js";import{a as y}from"./VZWOWR6G.js";import{t as C}from"./25EOXUBI.js";import{a as d}from"./T5E4OJEU.js";import{a as M}from"./XN4WDN3O.js";import{Buffer as k}from"node:buffer";import{decodeEventLog as j,encodeFunctionData as U,parseAbi as W,toEventSelector as O}from"viem";var m=W(["function register(string agentURI) returns (uint256 agentId)","function setMetadata(uint256 agentId,string metadataKey,bytes metadataValue)","event MetadataSet(uint256 indexed agentId,string indexed indexedMetadataKey,string metadataKey,bytes metadataValue)","function setAgentURI(uint256 agentId,string newURI)","function ownerOf(uint256 agentId) view returns (address)","function tokenURI(uint256 agentId) view returns (string)","function getApproved(uint256 agentId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)","function getAgentWallet(uint256 agentId) view returns (address)","function getMetadata(uint256 agentId,string metadataKey) view returns (bytes)","event Registered(uint256 indexed agentId,string agentURI,address indexed owner)","event URIUpdated(uint256 indexed agentId,string newURI,address indexed updatedBy)"]),ae={register:"erc8004_register"};function h(e){let{chainId:t,identityRegistry:n}=C[e.network??"mainnet"];return{chainId:t,registry:n,registryId:`eip155:${t}:${n}`}}var q="https://eips.ethereum.org/EIPS/eip-8004#registration-v1",I="oak.registrar",P="0x6f616b",B="Profile contents and oak.registrar are mutable, self-asserted metadata, not registry-validated claims or proof of provenance.",H={type:"string",pattern:"^[0-9]+$",description:"Agent ID as a decimal uint256 integer string."},_={type:"object",required:["type","name","description","image","services","x402Support","active","registrations"],properties:{type:{const:q},name:{type:"string",minLength:1},description:{type:"string"},image:{type:"string"},services:{type:"array",items:{type:"object",required:["name","endpoint"]}},x402Support:{type:"boolean"},active:{type:"boolean"},registrations:{type:"array"},tags:{type:"array",items:{type:"string"}},supportedTrust:{type:"array",items:{type:"string"}}}};function A(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function f(e,t){return e.toLowerCase()===t.toLowerCase()}function v(e){if(typeof e!="string"||!/^[0-9]+$/.test(e)||e.length>78||BigInt(e)>=2n**256n)throw new d("Provide an agent ID as a decimal uint256 integer string.");return BigInt(e)}function w(e,t,n=!1){if(typeof e!="string"||!n&&!e.trim())throw new d(`Provide a valid profile ${t}.`)}function N(e,t){w(e,t);try{let n=new URL(e);if(!["https:","ipfs:"].includes(n.protocol)||!n.hostname||n.username||n.password)throw new Error}catch{throw new d(`Profile ${t} must be an HTTPS or IPFS URI without credentials.`)}}function J(e,t,n,r){let{registryId:s}=h(e);if(!A(t))throw new d("Provide a registration-v1 profile object.");if(n!==void 0&&typeof n!="boolean")throw new d("The tag option must be a boolean.");if(t.type!==q)throw new d("Use the ERC-8004 registration-v1 profile type.");if(w(t.name,"name"),w(t.description,"description",!0),N(t.image,"image"),typeof t.active!="boolean"||typeof t.x402Support!="boolean")throw new d("Profile active and x402Support must be booleans.");if(!Array.isArray(t.services)||!Array.isArray(t.registrations))throw new d("Profile services and registrations must be arrays.");for(let o of t.services){if(!A(o))throw new d("Provide valid profile services.");w(o.name,"service name"),N(o.endpoint,"service endpoint"),o.version!==void 0&&w(o.version,"service version")}for(let o of["tags","supportedTrust"])if(t[o]!==void 0&&(!Array.isArray(t[o])||!t[o].every(p=>typeof p=="string"&&p.trim())))throw new d(`Profile ${o} must be an array of nonempty strings.`);let g=t.registrations.map(o=>{if(!A(o)||typeof o.agentRegistry!="string"||!/^eip155:[1-9][0-9]*:0x[0-9a-fA-F]{40}$/.test(o.agentRegistry))throw new d("Provide a valid agentRegistry for every registration.");let p=typeof o.agentId=="number"&&Number.isSafeInteger(o.agentId)?String(o.agentId):o.agentId,l=v(p);if(f(o.agentRegistry,s)){if(r===void 0)throw new d("Do not predict a registration ID; obtain it from the mined Registered receipt.");if(l!==r)throw new d("Profile registration ID does not match the agent being updated.")}return{...o}});r!==void 0&&!g.some(o=>f(o.agentRegistry,s))&&g.push({agentId:r.toString(),agentRegistry:s});let i=[...new Set((t.tags??[]).filter(o=>o!==I))];n!==!1&&i.push(I);let c={...t,registrations:g,...i.length?{tags:i}:{}};i.length||delete c.tags;let a;try{if(a=JSON.stringify(c),k.byteLength(a)>65536)throw new Error;JSON.parse(a)}catch{throw new d("Profile must be JSON data no larger than 64 KiB.")}return`data:application/json;base64,${k.from(a,"utf8").toString("base64")}`}async function R(e,t){try{let{chainId:n,registry:r}=h(e),s=v(t),g=e.clientFor(n),i=await g.readContract({address:r,abi:m,functionName:"ownerOf",args:[s]});y(i);let[c,a,o]=await Promise.all([g.readContract({address:r,abi:m,functionName:"tokenURI",args:[s]}),g.readContract({address:r,abi:m,functionName:"getAgentWallet",args:[s]}),g.readContract({address:r,abi:m,functionName:"getMetadata",args:[s,I]})]);if(y(a),typeof c!="string"||typeof o!="string"||!/^0x([0-9a-fA-F]{2})*$/.test(o))throw new d("The registry returned invalid identity data.");return{agentId:s.toString(),chainId:n,registry:r,owner:i,uri:c,agentWallet:a,registrarMetadata:o,registryValidated:!1,summary:B}}catch(n){throw new d(e.plainError(n))}}async function ie(e,t){let n=await R(e,t);return{...n,uri:M(n.uri)}}async function E(e,t,n){let{chainId:r,registry:s}=h(e),g=e.clientFor(r),i=await g.readContract({address:s,abi:m,functionName:"ownerOf",args:[t]});if(y(i),f(i,n))return;let[c,a]=await Promise.all([g.readContract({address:s,abi:m,functionName:"getApproved",args:[t]}),g.readContract({address:s,abi:m,functionName:"isApprovedForAll",args:[i,n]})]);if(y(c),typeof a!="boolean")throw new d("The registry returned invalid operator approval data.");if(!f(c,n)&&!a)throw new d("Only the agent owner or an approved operator can update this profile.")}async function L(e,t,n,r){let{chainId:s,registry:g}=h(e);if(typeof t!="string"||!/^0x[0-9a-fA-F]{64}$/.test(t))throw new d("Provide the mined transaction hash.");let i=e.clientFor(s),c=await i.getTransactionReceipt({hash:t});if(!c)throw new d("The transaction is not mined yet. Try again after confirmation.");if(c.status!=="success"||!c.to||!f(c.to,g)||!f(c.from,n)||!f(c.transactionHash,t))throw new d("The receipt is not a successful matching registry transaction.");let a=await i.getTransaction({hash:t});if(a.chainId!==s||a.value!==0n||!a.to||!f(a.to,g)||!f(a.from,n))throw new d("The transaction does not match this chain, registry and wallet.");if(typeof a.input!="string"||!f(a.input,r))throw new d("The mined transaction calldata does not match the exact operation Oak built.");return c}async function z(e,t,n,r,s,g){let{registry:i}=h(e),c=await L(e,t,n,s),a=g===void 0?"Registered":"URIUpdated",o=O(g===void 0?"Registered(uint256,string,address)":"URIUpdated(uint256,string,address)"),p=c.logs.filter(x=>f(x.address,i)&&x.topics[0]===o&&!x.removed);if(p.length!==1)throw new d(`The receipt must contain one matching ${a} event.`);let l=p[0],u=j({abi:m,eventName:a,topics:l.topics,data:l.data,strict:!0}),b=u.args.agentId,K=u.eventName==="Registered"?u.args.agentURI:u.args.newURI,V=u.eventName==="Registered"?u.args.owner:u.args.updatedBy;if(g!==void 0&&b!==g||K!==r||!f(V,n))throw new d("The registry event does not match the expected agent, URI and wallet.");let T=await R(e,b.toString());if(T.uri!==r||g===void 0&&!f(T.owner,n))throw new d("The current agent owner or URI does not match the confirmed operation.");return T}function S(e,t){let{chainId:n,registry:r}=h(e);return e.unsignedTx({to:r,chainId:n,value:"0",data:U({abi:m,functionName:"setMetadata",args:[t,I,P]}),description:`Set mutable oak.registrar metadata to oak for agent ${t}.`})}async function G(e,t,n,r){let{registry:s}=h(e),g=v(r.agentId),i=await L(e,t,n,S(e,g).data),c=O("MetadataSet(uint256,string,string,bytes)"),a=i.logs.filter(u=>f(u.address,s)&&u.topics[0]===c&&!u.removed);if(a.length!==1)throw new d("The receipt must contain one matching MetadataSet event.");let o=a[0],{args:p}=j({abi:m,eventName:"MetadataSet",topics:o.topics,data:o.data,strict:!0});if(p.agentId!==g||p.metadataKey!==I||p.metadataValue!==P)throw new d("The metadata event does not match this agent and registrar marker.");let l=await R(e,r.agentId);if(l.registrarMetadata!==P||l.uri!==r.uri||!f(l.owner,r.owner))throw new d("The current agent metadata, owner or URI does not match the confirmed operation.");return l}async function F(e,t,n,r){let s=await e.preview(t,n),g=s.changes.map(({amount:i,token:c})=>{let a=i.startsWith("-");return`${a?"-":""}${e.formatAmount(a?i.slice(1):i,c.decimals)} ${c.symbol} (${c.address}, chain ${c.chainId})`});return{txs:t,summary:`${s.summary} ${g.join("; ")} ${B} ${r}`}}async function D(e,t,n,r){let{chainId:s,registry:g}=h(e);if(y(r),n.chainId!==void 0&&n.chainId!==s)throw new d(`ERC-8004 actions are supported only on chain ${s}.`);let i=t?v(n.agentId):void 0,c=J(e,n.profile,n.tag,i),a=n.tag!==!1;if(n.metadataTransactionHash!==void 0&&(!a||n.transactionHash===void 0))throw new d("A metadata transaction hash requires tagging and the profile transaction hash.");let o=i===void 0?U({abi:m,functionName:"register",args:[c]}):U({abi:m,functionName:"setAgentURI",args:[i,c]});if(n.transactionHash!==void 0){let l=await z(e,n.transactionHash,r,c,o,i);if(!a)return l;if(n.metadataTransactionHash!==void 0)return G(e,n.metadataTransactionHash,r,l);let u=v(l.agentId);await E(e,u,r);let b=await F(e,[S(e,u)],r,`Profile transaction confirmed for agent ${u}; onchain registrar metadata is pending. Submit this metadata transaction locally if not already submitted, then repeat the original arguments with transactionHash and metadataTransactionHash to verify both calls.`);return{...l,...b}}i!==void 0&&await E(e,i,r);let p=[e.unsignedTx({to:g,data:o,value:"0",chainId:s,description:i===void 0?"Register an ERC-8004 agent profile.":`Update ERC-8004 agent ${i} profile.`})];return i!==void 0&&a&&p.push(S(e,i)),F(e,p,r,`Submit locally, then repeat the original arguments with transactionHash to verify the profile receipt and URI.${a?i===void 0?" The mined Registered event supplies the actual agent ID; confirmation then builds a separate setMetadata transaction for oak.registrar. Both transactions require network gas.":" Submit the profile and metadata transactions in order, then supply metadataTransactionHash as well to verify the onchain oak.registrar marker. Both transactions require network gas.":" No registrar metadata transaction is built; --no-tag does not clear existing onchain metadata."}${i===void 0?" Update the profile registrations with the mined ID afterward.":""}`)}var Q=e=>{let t=(r,s,g)=>({name:r,inputSchema:s,execute:async(i,c)=>{try{let a=await g(i,c);return A(a)&&typeof a.uri=="string"?{...a,uri:M(a.uri)}:a}catch(a){throw new d(e.plainError(a))}}}),n=r=>({type:"object",additionalProperties:!1,required:r?["agentId","profile"]:["profile"],properties:{profile:_,tag:{type:"boolean",default:!0,description:"Set false for --no-tag; removes the profile tag and skips setMetadata, leaving existing onchain metadata unchanged."},transactionHash:{type:"string",pattern:"^0x[0-9a-fA-F]{64}$",description:"After local submission, verify exact calldata, event and URI; if tagged, build the metadata follow-up unless metadataTransactionHash is supplied."},metadataTransactionHash:{type:"string",pattern:"^0x[0-9a-fA-F]{64}$",description:"Hash of the separate setMetadata transaction; supplied with transactionHash to complete tagged confirmation."},...r?{agentId:H}:{}}});return{tools:[t("erc8004_register",n(!1),(r,s)=>D(e,!1,r,s)),t("erc8004_update",n(!0),(r,s)=>D(e,!0,r,s)),t("erc8004_identity",{type:"object",additionalProperties:!1,required:["agentId"],properties:{agentId:H}},r=>R(e,r.agentId))]}},oe=e=>$("erc8004",[Q(e)]);export{m as a,ae as b,ie as c,Q as d,oe as e};