@oakagentkit/core 0.3.5 → 0.3.6

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 (517) hide show
  1. package/build/dist/api/addresses.d.ts +14 -0
  2. package/build/dist/api/addresses.js +1 -1
  3. package/build/dist/api/chain.js +1 -1
  4. package/build/dist/api/history.d.ts +2 -0
  5. package/build/dist/api/history.js +1 -1
  6. package/build/dist/api/identity-link.js +1 -1
  7. package/build/dist/api/metadata.js +1 -1
  8. package/build/dist/api/modules/beefy/boosts.js +1 -1
  9. package/build/dist/api/modules/beefy/clm.js +1 -1
  10. package/build/dist/api/modules/beefy/guard.js +1 -1
  11. package/build/dist/api/modules/beefy/index.js +1 -1
  12. package/build/dist/api/modules/beefy/liquidity.js +1 -1
  13. package/build/dist/api/modules/beefy/management.js +1 -1
  14. package/build/dist/api/modules/beefy/vaults.js +1 -1
  15. package/build/dist/api/modules/borro/actions.js +1 -1
  16. package/build/dist/api/modules/borro/index.js +1 -1
  17. package/build/dist/api/modules/borro/liquidity.js +1 -1
  18. package/build/dist/api/modules/borro/positions.js +1 -1
  19. package/build/dist/api/modules/borro/reader.js +1 -1
  20. package/build/dist/api/modules/chop/display.js +1 -1
  21. package/build/dist/api/modules/chop/guard.js +1 -1
  22. package/build/dist/api/modules/chop/index.js +1 -1
  23. package/build/dist/api/modules/clanker/extensions.js +1 -1
  24. package/build/dist/api/modules/clanker/index.js +1 -1
  25. package/build/dist/api/modules/clanker/manage.js +1 -1
  26. package/build/dist/api/modules/clanker/pool-config.js +1 -1
  27. package/build/dist/api/modules/clanker/protocol.js +1 -1
  28. package/build/dist/api/modules/clanker/state.js +1 -1
  29. package/build/dist/api/modules/earn/index.js +1 -1
  30. package/build/dist/api/modules/erc8004/common.js +1 -1
  31. package/build/dist/api/modules/erc8004/domain.js +1 -1
  32. package/build/dist/api/modules/erc8004/index.js +1 -1
  33. package/build/dist/api/modules/erc8004/management.js +1 -1
  34. package/build/dist/api/modules/erc8004/reputation.js +1 -1
  35. package/build/dist/api/modules/erc8004/services.js +1 -1
  36. package/build/dist/api/modules/erc8004/thesis.js +1 -1
  37. package/build/dist/api/modules/erc8004/validation.js +1 -1
  38. package/build/dist/api/modules/fobo/index.js +1 -1
  39. package/build/dist/api/modules/fobo/intent.js +1 -1
  40. package/build/dist/api/modules/fobo/steps.js +1 -1
  41. package/build/dist/api/modules/fobo/verify.js +1 -1
  42. package/build/dist/api/modules/grove/index.js +1 -1
  43. package/build/dist/api/modules/heyresearch/builder-feed.js +1 -1
  44. package/build/dist/api/modules/heyresearch/index.js +1 -1
  45. package/build/dist/api/modules/heyresearch/public-reads.js +1 -1
  46. package/build/dist/api/modules/heyresearch/token-facts.js +1 -1
  47. package/build/dist/api/modules/hoodag/chain-reads.js +1 -1
  48. package/build/dist/api/modules/hoodag/index.js +1 -1
  49. package/build/dist/api/modules/hoodag/management.js +1 -1
  50. package/build/dist/api/modules/hoodag/public-reads.js +1 -1
  51. package/build/dist/api/modules/hoodag/reconstruct.js +1 -1
  52. package/build/dist/api/modules/hoodlock/airdrop.js +1 -1
  53. package/build/dist/api/modules/hoodlock/buyback.js +1 -1
  54. package/build/dist/api/modules/hoodlock/commerce.js +1 -1
  55. package/build/dist/api/modules/hoodlock/fee.js +1 -1
  56. package/build/dist/api/modules/hoodlock/guard.js +1 -1
  57. package/build/dist/api/modules/hoodlock/index.js +1 -1
  58. package/build/dist/api/modules/hoodlock/lifecycle.js +1 -1
  59. package/build/dist/api/modules/hoodlock/locks-burn.js +1 -1
  60. package/build/dist/api/modules/hoodlock/public.js +1 -1
  61. package/build/dist/api/modules/hookr/actions.d.ts +39 -2
  62. package/build/dist/api/modules/hookr/actions.js +1 -1
  63. package/build/dist/api/modules/hookr/addons.js +1 -1
  64. package/build/dist/api/modules/hookr/agent-gate.d.ts +14 -2
  65. package/build/dist/api/modules/hookr/agent-gate.js +1 -1
  66. package/build/dist/api/modules/hookr/agent-link.d.ts +17 -0
  67. package/build/dist/api/modules/hookr/agent-link.js +1 -0
  68. package/build/dist/api/modules/hookr/api-client.d.ts +9 -0
  69. package/build/dist/api/modules/hookr/api-client.js +1 -0
  70. package/build/dist/api/modules/hookr/blocks/advisory.d.ts +41 -0
  71. package/build/dist/api/modules/hookr/blocks/advisory.js +1 -0
  72. package/build/dist/api/modules/hookr/blocks/buy-sell-block.d.ts +7 -0
  73. package/build/dist/api/modules/hookr/blocks/buy-sell-block.js +1 -0
  74. package/build/dist/api/modules/hookr/blocks/core-settings.d.ts +6 -0
  75. package/build/dist/api/modules/hookr/blocks/core-settings.js +1 -0
  76. package/build/dist/api/modules/hookr/blocks/exit-clock.d.ts +14 -0
  77. package/build/dist/api/modules/hookr/blocks/exit-clock.js +1 -0
  78. package/build/dist/api/modules/hookr/blocks/holder-pot.d.ts +30 -0
  79. package/build/dist/api/modules/hookr/blocks/holder-pot.js +1 -0
  80. package/build/dist/api/modules/hookr/blocks/managed-fee.d.ts +96 -0
  81. package/build/dist/api/modules/hookr/blocks/managed-fee.js +1 -0
  82. package/build/dist/api/modules/hookr/blocks/market-guard.d.ts +116 -0
  83. package/build/dist/api/modules/hookr/blocks/market-guard.js +1 -0
  84. package/build/dist/api/modules/hookr/blocks/market-hours-fee.d.ts +87 -0
  85. package/build/dist/api/modules/hookr/blocks/market-hours-fee.js +1 -0
  86. package/build/dist/api/modules/hookr/blocks/pay-later.d.ts +199 -0
  87. package/build/dist/api/modules/hookr/blocks/pay-later.js +1 -0
  88. package/build/dist/api/modules/hookr/blocks/sandwich-guard.d.ts +3 -0
  89. package/build/dist/api/modules/hookr/blocks/sandwich-guard.js +1 -0
  90. package/build/dist/api/modules/hookr/blocks/storm-fee.d.ts +3 -0
  91. package/build/dist/api/modules/hookr/blocks/storm-fee.js +1 -0
  92. package/build/dist/api/modules/hookr/blocks/swap-cut.d.ts +3 -0
  93. package/build/dist/api/modules/hookr/blocks/swap-cut.js +1 -0
  94. package/build/dist/api/modules/hookr/blocks/swap-reward-mint.d.ts +125 -0
  95. package/build/dist/api/modules/hookr/blocks/swap-reward-mint.js +1 -0
  96. package/build/dist/api/modules/hookr/blocks/wallet-cap.d.ts +3 -0
  97. package/build/dist/api/modules/hookr/blocks/wallet-cap.js +1 -0
  98. package/build/dist/api/modules/hookr/blocks/zap-source.d.ts +161 -0
  99. package/build/dist/api/modules/hookr/blocks/zap-source.js +1 -0
  100. package/build/dist/api/modules/hookr/blocks/zap-target.d.ts +51 -0
  101. package/build/dist/api/modules/hookr/blocks/zap-target.js +1 -0
  102. package/build/dist/api/modules/hookr/claims.d.ts +53 -0
  103. package/build/dist/api/modules/hookr/claims.js +1 -0
  104. package/build/dist/api/modules/hookr/contracts.d.ts +3 -1
  105. package/build/dist/api/modules/hookr/contracts.js +1 -1
  106. package/build/dist/api/modules/hookr/create-cancel.js +1 -1
  107. package/build/dist/api/modules/hookr/discovery.d.ts +2 -2
  108. package/build/dist/api/modules/hookr/discovery.js +1 -1
  109. package/build/dist/api/modules/hookr/fill-bounty.d.ts +2 -0
  110. package/build/dist/api/modules/hookr/fill-bounty.js +1 -1
  111. package/build/dist/api/modules/hookr/gas.d.ts +48 -0
  112. package/build/dist/api/modules/hookr/gas.js +1 -0
  113. package/build/dist/api/modules/hookr/gates.d.ts +51 -0
  114. package/build/dist/api/modules/hookr/gates.js +1 -0
  115. package/build/dist/api/modules/hookr/hook-blocks.d.ts +304 -0
  116. package/build/dist/api/modules/hookr/hook-blocks.js +1 -0
  117. package/build/dist/api/modules/hookr/index.d.ts +4 -2
  118. package/build/dist/api/modules/hookr/index.js +1 -1
  119. package/build/dist/api/modules/hookr/jobs.d.ts +7 -0
  120. package/build/dist/api/modules/hookr/jobs.js +1 -0
  121. package/build/dist/api/modules/hookr/launch-options.d.ts +52 -3
  122. package/build/dist/api/modules/hookr/launch-options.js +1 -1
  123. package/build/dist/api/modules/hookr/launch-profile.d.ts +8 -0
  124. package/build/dist/api/modules/hookr/launch-profile.js +1 -1
  125. package/build/dist/api/modules/hookr/launch-receipt.js +1 -1
  126. package/build/dist/api/modules/hookr/launch.d.ts +24 -0
  127. package/build/dist/api/modules/hookr/launch.js +1 -1
  128. package/build/dist/api/modules/hookr/liquidity.js +1 -1
  129. package/build/dist/api/modules/hookr/lp-positions.js +1 -1
  130. package/build/dist/api/modules/hookr/lp-reads.js +1 -1
  131. package/build/dist/api/modules/hookr/lp-receipt.js +1 -1
  132. package/build/dist/api/modules/hookr/lp-state.d.ts +90 -2
  133. package/build/dist/api/modules/hookr/lp-state.js +1 -1
  134. package/build/dist/api/modules/hookr/pay-later-actions.d.ts +52 -0
  135. package/build/dist/api/modules/hookr/pay-later-actions.js +1 -0
  136. package/build/dist/api/modules/hookr/pins.d.ts +5 -0
  137. package/build/dist/api/modules/hookr/pins.js +1 -1
  138. package/build/dist/api/modules/hookr/pm-liquidity.d.ts +215 -0
  139. package/build/dist/api/modules/hookr/pm-liquidity.js +1 -0
  140. package/build/dist/api/modules/hookr/public-reads.d.ts +1 -1
  141. package/build/dist/api/modules/hookr/public-reads.js +1 -1
  142. package/build/dist/api/modules/hookr/read-utils.js +1 -1
  143. package/build/dist/api/modules/hookr/relay.js +1 -1
  144. package/build/dist/api/modules/hookr/revenue.d.ts +4 -1
  145. package/build/dist/api/modules/hookr/revenue.js +1 -1
  146. package/build/dist/api/modules/hookr/scan.d.ts +25 -0
  147. package/build/dist/api/modules/hookr/scan.js +1 -0
  148. package/build/dist/api/modules/hookr/swap.d.ts +161 -0
  149. package/build/dist/api/modules/hookr/swap.js +1 -0
  150. package/build/dist/api/modules/kyberswap/index.js +1 -1
  151. package/build/dist/api/modules/kyberswap/source-pools.js +1 -1
  152. package/build/dist/api/modules/layerbank/abi.js +1 -1
  153. package/build/dist/api/modules/layerbank/actions.js +1 -1
  154. package/build/dist/api/modules/layerbank/checks.js +1 -1
  155. package/build/dist/api/modules/layerbank/index.js +1 -1
  156. package/build/dist/api/modules/layerbank/merkl.js +1 -1
  157. package/build/dist/api/modules/layerbank/reader.js +1 -1
  158. package/build/dist/api/modules/layerbank/reserve.js +1 -1
  159. package/build/dist/api/modules/lighter/index.js +1 -1
  160. package/build/dist/api/modules/longbow/administration.js +1 -1
  161. package/build/dist/api/modules/longbow/analytics.js +1 -1
  162. package/build/dist/api/modules/longbow/fixed.js +1 -1
  163. package/build/dist/api/modules/longbow/index.js +1 -1
  164. package/build/dist/api/modules/longbow/nft.js +1 -1
  165. package/build/dist/api/modules/longbow/rebates.js +1 -1
  166. package/build/dist/api/modules/longbow/staking.js +1 -1
  167. package/build/dist/api/modules/meridian/index.js +1 -1
  168. package/build/dist/api/modules/meridian/markets.js +1 -1
  169. package/build/dist/api/modules/meridian/rfq.js +1 -1
  170. package/build/dist/api/modules/merkl/discovery.js +1 -1
  171. package/build/dist/api/modules/merkl/index.js +1 -1
  172. package/build/dist/api/modules/merkl/manage.js +1 -1
  173. package/build/dist/api/modules/merkl/protocol.js +1 -1
  174. package/build/dist/api/modules/morpho/allocator.js +1 -1
  175. package/build/dist/api/modules/morpho/bundles.js +1 -1
  176. package/build/dist/api/modules/morpho/in-kind.js +1 -1
  177. package/build/dist/api/modules/morpho/index.js +1 -1
  178. package/build/dist/api/modules/morpho/local-guard.js +1 -1
  179. package/build/dist/api/modules/morpho/midnight.js +1 -1
  180. package/build/dist/api/modules/morpho/protocol.js +1 -1
  181. package/build/dist/api/modules/morpho/vault-management.js +1 -1
  182. package/build/dist/api/modules/morpho/vault-tools.js +1 -1
  183. package/build/dist/api/modules/morpho/vault-v2.js +1 -1
  184. package/build/dist/api/modules/netnet/card-plan.js +1 -1
  185. package/build/dist/api/modules/netnet/card-read.js +1 -1
  186. package/build/dist/api/modules/netnet/card-recovery.js +1 -1
  187. package/build/dist/api/modules/netnet/desk-action.js +1 -1
  188. package/build/dist/api/modules/netnet/desk-read.js +1 -1
  189. package/build/dist/api/modules/netnet/financial.js +1 -1
  190. package/build/dist/api/modules/netnet/index.js +1 -1
  191. package/build/dist/api/modules/netnet/staking.js +1 -1
  192. package/build/dist/api/modules/orbio/index.js +1 -1
  193. package/build/dist/api/modules/orbio/positions.js +1 -1
  194. package/build/dist/api/modules/pendle/costs.js +1 -1
  195. package/build/dist/api/modules/pendle/index.js +1 -1
  196. package/build/dist/api/modules/pendle/markets.js +1 -1
  197. package/build/dist/api/modules/pendle/positions.js +1 -1
  198. package/build/dist/api/modules/pendle/pricecheck.js +1 -1
  199. package/build/dist/api/modules/pendle/reader.js +1 -1
  200. package/build/dist/api/modules/pendle/redeem.js +1 -1
  201. package/build/dist/api/modules/pendle/trade.js +1 -1
  202. package/build/dist/api/modules/pendle/validate.js +1 -1
  203. package/build/dist/api/modules/pendle/verify.js +1 -1
  204. package/build/dist/api/modules/pons/claim.js +1 -1
  205. package/build/dist/api/modules/pons/index.js +1 -1
  206. package/build/dist/api/modules/pons/launch-status.js +1 -1
  207. package/build/dist/api/modules/pons/prices.js +1 -1
  208. package/build/dist/api/modules/pons/reads.js +1 -1
  209. package/build/dist/api/modules/pons/swap-terms.js +1 -1
  210. package/build/dist/api/modules/pons/trade.js +1 -1
  211. package/build/dist/api/modules/poolstrade/index.js +1 -1
  212. package/build/dist/api/modules/priors/coverage.js +1 -1
  213. package/build/dist/api/modules/priors/discovery.js +1 -1
  214. package/build/dist/api/modules/priors/features.js +1 -1
  215. package/build/dist/api/modules/priors/holdings.js +1 -1
  216. package/build/dist/api/modules/priors/index.js +1 -1
  217. package/build/dist/api/modules/priors/integration.js +1 -1
  218. package/build/dist/api/modules/priors/market.js +1 -1
  219. package/build/dist/api/modules/priors/pt.js +1 -1
  220. package/build/dist/api/modules/priors/savings-exit.js +1 -1
  221. package/build/dist/api/modules/priors/starter-line.js +1 -1
  222. package/build/dist/api/modules/priors/stock-swap.js +1 -1
  223. package/build/dist/api/modules/raeto/index.js +1 -1
  224. package/build/dist/api/modules/relay/bootstrap.js +1 -1
  225. package/build/dist/api/modules/relay/discovery.js +1 -1
  226. package/build/dist/api/modules/relay/inbound.js +1 -1
  227. package/build/dist/api/modules/relay/index.js +1 -1
  228. package/build/dist/api/modules/relay/outbound-status.js +1 -1
  229. package/build/dist/api/modules/relay/reads.js +1 -1
  230. package/build/dist/api/modules/spark/actions.js +1 -1
  231. package/build/dist/api/modules/spark/details.js +1 -1
  232. package/build/dist/api/modules/spark/index.js +1 -1
  233. package/build/dist/api/modules/spark/management.js +1 -1
  234. package/build/dist/api/modules/steakhouse/analytics.js +1 -1
  235. package/build/dist/api/modules/steakhouse/erc4626.js +1 -1
  236. package/build/dist/api/modules/steakhouse/index.js +1 -1
  237. package/build/dist/api/modules/steakhouse/local-guard.js +1 -1
  238. package/build/dist/api/modules/steakhouse/management.js +1 -1
  239. package/build/dist/api/modules/steakhouse/v2-exit.js +1 -1
  240. package/build/dist/api/modules/tickerspring/basket-routes.js +1 -1
  241. package/build/dist/api/modules/tickerspring/contract-reads.js +1 -1
  242. package/build/dist/api/modules/tickerspring/discovery.js +1 -1
  243. package/build/dist/api/modules/tickerspring/exit-preview.js +1 -1
  244. package/build/dist/api/modules/tickerspring/guards.js +1 -1
  245. package/build/dist/api/modules/tickerspring/index.js +1 -1
  246. package/build/dist/api/modules/tickerspring/journeys.js +1 -1
  247. package/build/dist/api/modules/tickerspring/ladder.js +1 -1
  248. package/build/dist/api/modules/tickerspring/maker.js +1 -1
  249. package/build/dist/api/modules/tickerspring/order-accounting.js +1 -1
  250. package/build/dist/api/modules/tickerspring/research.js +1 -1
  251. package/build/dist/api/modules/tickerspring/strategies.js +1 -1
  252. package/build/dist/api/modules/uniswap/auction-create.js +1 -1
  253. package/build/dist/api/modules/uniswap/auction.js +1 -1
  254. package/build/dist/api/modules/uniswap/batch.js +1 -1
  255. package/build/dist/api/modules/uniswap/common.js +1 -1
  256. package/build/dist/api/modules/uniswap/fees.js +1 -1
  257. package/build/dist/api/modules/uniswap/index.js +1 -1
  258. package/build/dist/api/modules/uniswap/local-guard.js +1 -1
  259. package/build/dist/api/modules/uniswap/oracle.js +1 -1
  260. package/build/dist/api/modules/uniswap/pool-math.js +1 -1
  261. package/build/dist/api/modules/uniswap/pools.js +1 -1
  262. package/build/dist/api/modules/uniswap/position.js +1 -1
  263. package/build/dist/api/modules/uniswap/protocol.js +1 -1
  264. package/build/dist/api/modules/uniswap/quote-guard.js +1 -1
  265. package/build/dist/api/modules/uniswap/stock-prices.d.ts +25 -0
  266. package/build/dist/api/modules/uniswap/stock-prices.js +1 -1
  267. package/build/dist/api/modules/uniswap/stocks.js +1 -1
  268. package/build/dist/api/modules/uniswap/token-jar.js +1 -1
  269. package/build/dist/api/modules/uniswap/trade-batch.js +1 -1
  270. package/build/dist/api/modules/uniswap/trade.js +1 -1
  271. package/build/dist/api/modules/uniswap/v2.js +1 -1
  272. package/build/dist/api/modules/uniswap/v3.js +1 -1
  273. package/build/dist/api/modules/uniswap/v4.js +1 -1
  274. package/build/dist/api/modules/uniswap/wrap.js +1 -1
  275. package/build/dist/api/modules/upoch/index.js +1 -1
  276. package/build/dist/api/modules/upoch/reads.js +1 -1
  277. package/build/dist/api/modules/velora/claims.js +1 -1
  278. package/build/dist/api/modules/velora/delta-reads.js +1 -1
  279. package/build/dist/api/modules/velora/index.js +1 -1
  280. package/build/dist/api/modules/wormhole/index.js +1 -1
  281. package/build/dist/api/modules/wormhole/scan-text.d.ts +1 -1
  282. package/build/dist/api/positions.js +1 -1
  283. package/build/dist/api/pricenote.js +1 -1
  284. package/build/dist/api/prices.js +1 -1
  285. package/build/dist/api/rpc.js +1 -1
  286. package/build/dist/api/send.js +1 -1
  287. package/build/dist/api/signing-registry.js +1 -1
  288. package/build/dist/api/signing.js +1 -1
  289. package/build/dist/api/simulate.js +1 -1
  290. package/build/dist/api/swap.d.ts +2 -0
  291. package/build/dist/api/swap.js +1 -1
  292. package/build/dist/api/tokens.d.ts +9 -1
  293. package/build/dist/api/tokens.js +1 -1
  294. package/build/dist/api/tool-policy.js +1 -1
  295. package/build/dist/api/universal-router.js +1 -1
  296. package/build/dist/api/usd-estimate.js +1 -1
  297. package/build/dist/chunks/{DMDOSHV7.js → 266VIESP.js} +1 -1
  298. package/build/dist/chunks/{R66NSNNQ.js → 2BKZLF5A.js} +1 -1
  299. package/build/dist/chunks/{HFVXNKA5.js → 2BM2WX2G.js} +1 -1
  300. package/build/dist/chunks/{OY5W7ZSL.js → 2H2OZE6X.js} +1 -1
  301. package/build/dist/chunks/{E76Z2TT4.js → 2QQ5CGQI.js} +1 -1
  302. package/build/dist/chunks/{4PLLS6CT.js → 2VYA6WIN.js} +1 -1
  303. package/build/dist/chunks/{LCH6F5HT.js → 342OZP53.js} +1 -1
  304. package/build/dist/chunks/{C57DITTF.js → 3HF6WE4L.js} +1 -1
  305. package/build/dist/chunks/3M7RMROZ.js +1 -0
  306. package/build/dist/chunks/3RGED2KO.js +1 -0
  307. package/build/dist/chunks/{4HQEJHCD.js → 3XIJCHT7.js} +1 -1
  308. package/build/dist/chunks/3XY44BP5.js +1 -0
  309. package/build/dist/chunks/3YNXQ3EZ.js +1 -0
  310. package/build/dist/chunks/45QP74CE.js +1 -0
  311. package/build/dist/chunks/{SX5YNFHG.js → 4GAU3JLN.js} +1 -1
  312. package/build/dist/chunks/{Y2QADJOB.js → 4P6DRKY3.js} +1 -1
  313. package/build/dist/chunks/{W3DGFMQE.js → 4RTXP2YP.js} +1 -1
  314. package/build/dist/chunks/{QMIH6HXH.js → 4SXRXNHG.js} +1 -1
  315. package/build/dist/chunks/{ZTKT3ZQK.js → 53VBLEYS.js} +1 -1
  316. package/build/dist/chunks/{FRT6AC6M.js → 5677LZOV.js} +1 -1
  317. package/build/dist/chunks/{ADIPEGNN.js → 5AO2QPWE.js} +1 -1
  318. package/build/dist/chunks/{GQITAJVF.js → 5BPFF7NX.js} +1 -1
  319. package/build/dist/chunks/{JDHPMS7X.js → 5DWQUEBA.js} +1 -1
  320. package/build/dist/chunks/{WAKZWSHB.js → 5KKAN7XQ.js} +1 -1
  321. package/build/dist/chunks/{VVAM3EAK.js → 5N6YJFFA.js} +1 -1
  322. package/build/dist/chunks/{QIB6OMQV.js → 5O67QQIY.js} +1 -1
  323. package/build/dist/chunks/5PNFV7HH.js +1 -0
  324. package/build/dist/chunks/5RAZFRO4.js +1 -0
  325. package/build/dist/chunks/{FAH7FKUT.js → 5UWVXEPD.js} +1 -1
  326. package/build/dist/chunks/5VKVAUFQ.js +1 -0
  327. package/build/dist/chunks/5Y457HYC.js +1 -0
  328. package/build/dist/chunks/64LAWFBE.js +1 -0
  329. package/build/dist/chunks/{3BQ5XHDJ.js → 6EWSLHXL.js} +1 -1
  330. package/build/dist/chunks/{6F527FLN.js → 6HNQAYBM.js} +1 -1
  331. package/build/dist/chunks/{FUP53K6G.js → 6LDC5D2S.js} +1 -1
  332. package/build/dist/chunks/{TZ7S5KRB.js → 6QXTL65K.js} +1 -1
  333. package/build/dist/chunks/6RVAV6BB.js +1 -0
  334. package/build/dist/chunks/{WSILNJS2.js → 6STUQOFL.js} +1 -1
  335. package/build/dist/chunks/{RUHNLNVX.js → 6Y2546JA.js} +1 -1
  336. package/build/dist/chunks/{4Z3IGMU6.js → 7AYP4ATZ.js} +1 -1
  337. package/build/dist/chunks/{YGW4ODAP.js → 7EPU3XGY.js} +1 -1
  338. package/build/dist/chunks/7GL547YZ.js +1 -0
  339. package/build/dist/chunks/7JTXYMNP.js +1 -0
  340. package/build/dist/chunks/{A3BJSQ23.js → 7VU5VCTL.js} +1 -1
  341. package/build/dist/chunks/{Z7FGEWO2.js → 7WXAS54T.js} +1 -1
  342. package/build/dist/chunks/{WQ2XTDHO.js → 7X5JVF3F.js} +1 -1
  343. package/build/dist/chunks/{DRLBTB4E.js → A72ADVYF.js} +1 -1
  344. package/build/dist/chunks/{ANIF3JMV.js → AG66NM3J.js} +1 -1
  345. package/build/dist/chunks/AODUTN65.js +1 -0
  346. package/build/dist/chunks/{DBOGRUPS.js → AONO47JX.js} +1 -1
  347. package/build/dist/chunks/{JTPHZCO3.js → AQJLEG6B.js} +1 -1
  348. package/build/dist/chunks/AZBTNUXF.js +1 -0
  349. package/build/dist/chunks/{TOIKOIY6.js → B5BU645H.js} +1 -1
  350. package/build/dist/chunks/{ZX43P4BK.js → B75SS7H6.js} +1 -1
  351. package/build/dist/chunks/{GBIBRYOV.js → B7HVPHSS.js} +1 -1
  352. package/build/dist/chunks/{LT5P6PZW.js → B7WZJHIJ.js} +1 -1
  353. package/build/dist/chunks/{3A2IKFTV.js → BIFANUTV.js} +1 -1
  354. package/build/dist/chunks/BM4KHOFB.js +1 -0
  355. package/build/dist/chunks/{N65J3L2H.js → BSV65PCA.js} +1 -1
  356. package/build/dist/chunks/{ZVY7GGSP.js → BW755PNH.js} +1 -1
  357. package/build/dist/chunks/{VXCGMALF.js → BWE5PXRE.js} +1 -1
  358. package/build/dist/chunks/{7U62MMUQ.js → BY2OWKZB.js} +1 -1
  359. package/build/dist/chunks/{CNDIAF3P.js → C2H3BWN5.js} +1 -1
  360. package/build/dist/chunks/{F7MGYRPU.js → CCPG6PRL.js} +1 -1
  361. package/build/dist/chunks/{OI3N4EW4.js → CG7ABZXH.js} +1 -1
  362. package/build/dist/chunks/CJMVRV34.js +1 -0
  363. package/build/dist/chunks/CQPIR6ER.js +1 -0
  364. package/build/dist/chunks/{A4K5GXVO.js → CR7DPGI6.js} +1 -1
  365. package/build/dist/chunks/{UUF4Z6K6.js → CVVNAFUE.js} +1 -1
  366. package/build/dist/chunks/{MI5HZDMH.js → D6JOXK7Q.js} +1 -1
  367. package/build/dist/chunks/{2PS4GCOZ.js → DJRS3TR5.js} +1 -1
  368. package/build/dist/chunks/{IZFED3R2.js → DLNDJZR4.js} +1 -1
  369. package/build/dist/chunks/{MQXSCNUL.js → DPSFR3ZS.js} +1 -1
  370. package/build/dist/chunks/{LKUZAJPZ.js → DV2HVFTM.js} +1 -1
  371. package/build/dist/chunks/{NMJVQX5M.js → DWRRIFXS.js} +1 -1
  372. package/build/dist/chunks/{3ZH5SOC2.js → EFOC337C.js} +1 -1
  373. package/build/dist/chunks/EHQRAA3R.js +1 -0
  374. package/build/dist/chunks/{A4FLWHLP.js → EJIP7RBG.js} +1 -1
  375. package/build/dist/chunks/EWZFZUVF.js +1 -0
  376. package/build/dist/chunks/{OB7BFDOV.js → EYE3ZAJB.js} +1 -1
  377. package/build/dist/chunks/{MQ5F2VOK.js → EZUQMTLE.js} +1 -1
  378. package/build/dist/chunks/{O2QBSINK.js → F36IA5RI.js} +1 -1
  379. package/build/dist/chunks/{XTXXWRN2.js → F74ARK4H.js} +1 -1
  380. package/build/dist/chunks/{HPS4KOU4.js → FGGDAAHW.js} +1 -1
  381. package/build/dist/chunks/FMEO7RX7.js +1 -0
  382. package/build/dist/chunks/{FHB7QYJO.js → FN6XY6ET.js} +1 -1
  383. package/build/dist/chunks/G4IX4CYN.js +1 -0
  384. package/build/dist/chunks/G53U6Y4L.js +1 -0
  385. package/build/dist/chunks/{HDBZZOHJ.js → GBIL2I2K.js} +1 -1
  386. package/build/dist/chunks/{MJGEGNDU.js → GCFHKJIO.js} +1 -1
  387. package/build/dist/chunks/{O5QTITN6.js → GRHBE4MQ.js} +1 -1
  388. package/build/dist/chunks/GTJ6LBGB.js +1 -0
  389. package/build/dist/chunks/GV6Z3MET.js +1 -0
  390. package/build/dist/chunks/{GK3D7OKG.js → GVCNTGLC.js} +1 -1
  391. package/build/dist/chunks/GX2RCAHG.js +1 -0
  392. package/build/dist/chunks/{7TRO6MBQ.js → H5KU4DUU.js} +1 -1
  393. package/build/dist/chunks/H7ZJ7LAB.js +1 -0
  394. package/build/dist/chunks/{DCGNVMKG.js → HC3QFA5I.js} +1 -1
  395. package/build/dist/chunks/{6CKCZJ3F.js → HEQBTHFS.js} +1 -1
  396. package/build/dist/chunks/{C76D54YG.js → HGSFRN57.js} +1 -1
  397. package/build/dist/chunks/HJI7KO6F.js +1 -0
  398. package/build/dist/chunks/{KO7ANIKY.js → HNBYPHTA.js} +1 -1
  399. package/build/dist/chunks/{MSRCJ2BS.js → HPBTSJW7.js} +1 -1
  400. package/build/dist/chunks/HPO673QQ.js +1 -0
  401. package/build/dist/chunks/{4IOHSX3Z.js → HRGLFGFL.js} +1 -1
  402. package/build/dist/chunks/{DGDMRATN.js → ICHT3H3W.js} +1 -1
  403. package/build/dist/chunks/IJVBCEA2.js +1 -0
  404. package/build/dist/chunks/{N742W5KX.js → IKVRFAUP.js} +1 -1
  405. package/build/dist/chunks/IM7ZF7XZ.js +1 -0
  406. package/build/dist/chunks/{I4473OC6.js → IMD33NQS.js} +1 -1
  407. package/build/dist/chunks/IR7KDBFU.js +1 -0
  408. package/build/dist/chunks/{X24YTJST.js → IY7FWTAL.js} +1 -1
  409. package/build/dist/chunks/IYOWMW5B.js +1 -0
  410. package/build/dist/chunks/J2J73XYU.js +1 -0
  411. package/build/dist/chunks/JCS24YBB.js +1 -0
  412. package/build/dist/chunks/JQVTHPUO.js +1 -0
  413. package/build/dist/chunks/{USGMGKAG.js → JTWJT2O3.js} +1 -1
  414. package/build/dist/chunks/{W7BFM6CK.js → K4CYAWNL.js} +1 -1
  415. package/build/dist/chunks/{7VH6JQ2H.js → K5C6QBOO.js} +1 -1
  416. package/build/dist/chunks/K5OXLIPK.js +1 -0
  417. package/build/dist/chunks/{ZKBOPZH5.js → K6GECT3F.js} +1 -1
  418. package/build/dist/chunks/{6LVHN33V.js → KB2JWQZ4.js} +1 -1
  419. package/build/dist/chunks/{YW4W3LPQ.js → KHLM6NIZ.js} +1 -1
  420. package/build/dist/chunks/{OIQTZOBN.js → KKGHXNM4.js} +1 -1
  421. package/build/dist/chunks/{SUNTJ6IU.js → KYANIEPX.js} +1 -1
  422. package/build/dist/chunks/{JJSCDDQO.js → L3IAEXQR.js} +1 -1
  423. package/build/dist/chunks/{ZZ6FZGHF.js → L4UFGM7M.js} +1 -1
  424. package/build/dist/chunks/{YWVPK3DV.js → L76P6WIH.js} +1 -1
  425. package/build/dist/chunks/{QMNUB2GM.js → LBT6WR4U.js} +1 -1
  426. package/build/dist/chunks/LD3A2KLN.js +1 -0
  427. package/build/dist/chunks/{WRUTW6CG.js → LFSNAQ7V.js} +1 -1
  428. package/build/dist/chunks/{ZQPC54J5.js → LKRAUTYI.js} +1 -1
  429. package/build/dist/chunks/{23HNDJ76.js → M2SWILNG.js} +1 -1
  430. package/build/dist/chunks/{IT2JLILU.js → MFKDNAHB.js} +1 -1
  431. package/build/dist/chunks/MFQTBUSD.js +1 -0
  432. package/build/dist/chunks/{V4UJMUIB.js → MLN5KTG7.js} +1 -1
  433. package/build/dist/chunks/{S4JUFCT4.js → MSQNOK3I.js} +1 -1
  434. package/build/dist/chunks/{O4P5IQCP.js → MXI7LX2F.js} +1 -1
  435. package/build/dist/chunks/N6YNJGEF.js +1 -0
  436. package/build/dist/chunks/{DXAPKN7H.js → NLC36QHL.js} +1 -1
  437. package/build/dist/chunks/NUTTPUYJ.js +1 -0
  438. package/build/dist/chunks/{O4S6XAYV.js → O7L55XM3.js} +1 -1
  439. package/build/dist/chunks/{NAO7VWZF.js → OCIEVYPR.js} +1 -1
  440. package/build/dist/chunks/{4NBXBKOX.js → OD7CY6BY.js} +1 -1
  441. package/build/dist/chunks/{RUTSEGGD.js → OHZHQSCA.js} +1 -1
  442. package/build/dist/chunks/{E47UYYK4.js → OIGTTRN5.js} +1 -1
  443. package/build/dist/chunks/{2I7XHRTI.js → P6JE2NRA.js} +1 -1
  444. package/build/dist/chunks/PD5NXIRT.js +1 -0
  445. package/build/dist/chunks/{TXGZ6NWN.js → PG7HZIZL.js} +1 -1
  446. package/build/dist/chunks/{VREGY7E6.js → PMFR47H3.js} +1 -1
  447. package/build/dist/chunks/{PV7FEVBD.js → PXVF2SHU.js} +1 -1
  448. package/build/dist/chunks/{2FOI2625.js → Q43WPRYU.js} +1 -1
  449. package/build/dist/chunks/QAAKUIWE.js +1 -0
  450. package/build/dist/chunks/{ZXFJKW6H.js → QAVP3CWL.js} +1 -1
  451. package/build/dist/chunks/{YXXK6EPI.js → QBHY2QRC.js} +1 -1
  452. package/build/dist/chunks/{ELHRXA5U.js → QFK335LC.js} +1 -1
  453. package/build/dist/chunks/{3PHJUFU2.js → QFUSCK5C.js} +1 -1
  454. package/build/dist/chunks/{IPU656WB.js → QKH7ED6B.js} +1 -1
  455. package/build/dist/chunks/{XW3VGWXK.js → QMWHQRYC.js} +1 -1
  456. package/build/dist/chunks/{ZXRIJG6H.js → QP2B7AYX.js} +1 -1
  457. package/build/dist/chunks/{TJU644I7.js → QZ6V6J6W.js} +1 -1
  458. package/build/dist/chunks/{MDLJFCT4.js → R5Z4HPCA.js} +1 -1
  459. package/build/dist/chunks/RKJFSDGV.js +1 -0
  460. package/build/dist/chunks/RKS3M7L5.js +1 -0
  461. package/build/dist/chunks/{GDOHHXNH.js → RLX6YTNT.js} +1 -1
  462. package/build/dist/chunks/{IZP3EKKS.js → RYEQIZ2H.js} +1 -1
  463. package/build/dist/chunks/{USEF3QKG.js → S432S6NA.js} +1 -1
  464. package/build/dist/chunks/{2OVJ2BTJ.js → SEXKWYUM.js} +1 -1
  465. package/build/dist/chunks/{KKTOBXIT.js → SRYX65GZ.js} +1 -1
  466. package/build/dist/chunks/{GKUPC4DO.js → TMENUIBC.js} +1 -1
  467. package/build/dist/chunks/{BSX4LFYI.js → TNHU5UBQ.js} +1 -1
  468. package/build/dist/chunks/{PDPTJMTJ.js → TT2ST3Q3.js} +1 -1
  469. package/build/dist/chunks/TTBB6EFN.js +1 -0
  470. package/build/dist/chunks/{FRVCSDKU.js → TWVDWNTG.js} +1 -1
  471. package/build/dist/chunks/TZG7HTVM.js +1 -0
  472. package/build/dist/chunks/{OVM4QIET.js → U4MSIH4G.js} +1 -1
  473. package/build/dist/chunks/{G5AMH4IP.js → UGFRBJDQ.js} +1 -1
  474. package/build/dist/chunks/{OB3YMTDI.js → UIVOYAO2.js} +1 -1
  475. package/build/dist/chunks/{XRDLMTBJ.js → UMY6SP7C.js} +1 -1
  476. package/build/dist/chunks/UNBRUWSV.js +1 -0
  477. package/build/dist/chunks/{LGLWEGPY.js → UPX3OWKA.js} +1 -1
  478. package/build/dist/chunks/{TGXEKBLV.js → URTQNYWU.js} +1 -1
  479. package/build/dist/chunks/{4RCYYN6O.js → V7HTGO23.js} +1 -1
  480. package/build/dist/chunks/{HZSYMGJ2.js → VS7ZA4OF.js} +1 -1
  481. package/build/dist/chunks/{BJ2U2VXJ.js → VTWAVH74.js} +1 -1
  482. package/build/dist/chunks/{LZM3DO5Q.js → W5GWK72I.js} +1 -1
  483. package/build/dist/chunks/{65OITTDL.js → W73SLWBT.js} +1 -1
  484. package/build/dist/chunks/{3YH5B5NQ.js → WUONMIA2.js} +1 -1
  485. package/build/dist/chunks/{XL3W7DAQ.js → X3BB6WME.js} +1 -1
  486. package/build/dist/chunks/{XADHV2DT.js → X53QVHBC.js} +1 -1
  487. package/build/dist/chunks/{GBPB7JIB.js → XSQJOOEY.js} +1 -1
  488. package/build/dist/chunks/XUDQYSPU.js +1 -0
  489. package/build/dist/chunks/{S37D7HOK.js → XWZ5SL5Q.js} +1 -1
  490. package/build/dist/chunks/{NIWAVMDR.js → XXLQDQEX.js} +1 -1
  491. package/build/dist/chunks/{QBNASL3T.js → Y5T36EEU.js} +1 -1
  492. package/build/dist/chunks/{R73R4KN3.js → YBLJ2MCR.js} +1 -1
  493. package/build/dist/chunks/ZSGW2ZSO.js +1 -0
  494. package/build/dist/chunks/{HRAHGYNK.js → ZTNBX4VH.js} +1 -1
  495. package/package.json +1 -1
  496. package/build/dist/chunks/5H7NVE6O.js +0 -1
  497. package/build/dist/chunks/7OOCAZBE.js +0 -1
  498. package/build/dist/chunks/DFM4T6ZE.js +0 -1
  499. package/build/dist/chunks/FCVH4FYH.js +0 -1
  500. package/build/dist/chunks/GDUKZYE2.js +0 -1
  501. package/build/dist/chunks/GYPMUYB5.js +0 -1
  502. package/build/dist/chunks/J7OZLXSG.js +0 -1
  503. package/build/dist/chunks/JFC2QCMW.js +0 -1
  504. package/build/dist/chunks/M6JNGU4E.js +0 -1
  505. package/build/dist/chunks/M7OVMIIE.js +0 -1
  506. package/build/dist/chunks/MQK6OP7S.js +0 -1
  507. package/build/dist/chunks/N624NR7Y.js +0 -1
  508. package/build/dist/chunks/OSMOBKRQ.js +0 -1
  509. package/build/dist/chunks/Q3Q3YHEX.js +0 -1
  510. package/build/dist/chunks/QQD4PV64.js +0 -1
  511. package/build/dist/chunks/RN3WUJIO.js +0 -1
  512. package/build/dist/chunks/RP5VCG54.js +0 -1
  513. package/build/dist/chunks/TI727O2H.js +0 -1
  514. package/build/dist/chunks/UHIJMDD2.js +0 -1
  515. package/build/dist/chunks/W32UECOL.js +0 -1
  516. package/build/dist/chunks/WWNAGOCD.js +0 -1
  517. package/build/dist/chunks/XWC6IC5E.js +0 -1
@@ -1 +1 @@
1
- import{b as W}from"./USGMGKAG.js";import{b as N}from"./N624NR7Y.js";import{a as k}from"./66F5ZH34.js";import{c as b,i as q,l as j}from"./NWNYJ26T.js";import{b as l}from"./TI727O2H.js";import{a as o}from"./XSD5NL7J.js";import{a as R}from"./JXOEJPJ4.js";import{encodeFunctionData as ye,erc20Abi as X,getAddress as S,zeroAddress as U}from"viem";var v={locker:{address:"0xd0f7d8c6e9f6d80c297bebe4f7fd1b9c8125c32f",source:"https://sourcify.dev/server/v2/contract/4663/0xd0f7d8c6e9f6d80c297bebe4f7fd1b9c8125c32f?fields=abi,sources,compilation",match:"exact_match",verifiedAt:"2026-07-08T19:01:30Z",fetchedAt:"2026-10-31",abi:[{name:"Extended",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newUnlockTime",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeChanged",type:"event",inputs:[{name:"fee",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"LockOwnershipTransferred",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"from",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"Locked",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"owner",type:"address",indexed:!0,internalType:"address"},{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"},{name:"unlockTime",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"Withdrawn",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"owner",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"admin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"extend",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"newUnlockTime",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"fee",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"feeCollector",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"getLock",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"owner",type:"address",internalType:"address"},{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"unlockTime",type:"uint256",internalType:"uint256"},{name:"withdrawn",type:"bool",internalType:"bool"}],internalType:"struct RobinhoodLocker.Lock"}],stateMutability:"view"},{name:"isUnlocked",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"lock",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"unlockTime",type:"uint256",internalType:"uint256"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"lockedAmount",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"locks",type:"function",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"owner",type:"address",internalType:"address"},{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"unlockTime",type:"uint256",internalType:"uint256"},{name:"withdrawn",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"locksByOwner",type:"function",inputs:[{name:"o",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"locksByToken",type:"function",inputs:[{name:"t",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"nextLockId",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"setAdmin",type:"function",inputs:[{name:"a",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"setFee",type:"function",inputs:[{name:"_fee",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeCollector",type:"function",inputs:[{name:"c",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"timeRemaining",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"totalLocks",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"transferLockOwnership",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"withdraw",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"}]},burner:{address:"0x6bf43ca706faa8ea46803299c191484e82280652",source:"https://sourcify.dev/server/v2/contract/4663/0x6bf43ca706faa8ea46803299c191484e82280652?fields=abi,sources,compilation",match:"exact_match",verifiedAt:"2026-07-22T23:28:15Z",fetchedAt:"2026-10-31",abi:[{name:"Burned",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"burner",type:"address",indexed:!0,internalType:"address"},{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeChanged",type:"event",inputs:[{name:"fee",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"DEAD",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"admin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"burn",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"burns",type:"function",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"burner",type:"address",internalType:"address"},{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"timestamp",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"burnsByBurner",type:"function",inputs:[{name:"b",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"burnsByToken",type:"function",inputs:[{name:"t",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"fee",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"feeCollector",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"getBurn",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"burner",type:"address",internalType:"address"},{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"timestamp",type:"uint256",internalType:"uint256"}],internalType:"struct RobinhoodBurner.Burn"}],stateMutability:"view"},{name:"nextBurnId",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"setAdmin",type:"function",inputs:[{name:"a",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"setFee",type:"function",inputs:[{name:"_fee",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeCollector",type:"function",inputs:[{name:"c",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"totalBurnedOf",type:"function",inputs:[{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"totalBurns",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"}]},vesting:{address:"0x910e19bcC4bce46999994Ed7297E0Fc4431ec72E",source:"https://sourcify.dev/server/v2/contract/4663/0x910e19bcC4bce46999994Ed7297E0Fc4431ec72E?fields=abi,sources,compilation",match:"exact_match",verifiedAt:"2026-07-27T00:28:59Z",fetchedAt:"2026-10-31",abi:[{name:"AdminTransferStarted",type:"event",inputs:[{name:"current",type:"address",indexed:!0,internalType:"address"},{name:"pending",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"AdminTransferred",type:"event",inputs:[{name:"previous",type:"address",indexed:!0,internalType:"address"},{name:"current",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"BeneficiaryTransferred",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"from",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"Claimed",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"beneficiary",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeChanged",type:"event",inputs:[{name:"fee",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeCollectorChanged",type:"event",inputs:[{name:"collector",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{name:"FeesWithdrawn",type:"event",inputs:[{name:"collector",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"VestingCreated",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"beneficiary",type:"address",indexed:!0,internalType:"address"},{name:"creator",type:"address",indexed:!1,internalType:"address"},{name:"total",type:"uint256",indexed:!1,internalType:"uint256"},{name:"start",type:"uint64",indexed:!1,internalType:"uint64"},{name:"cliff",type:"uint64",indexed:!1,internalType:"uint64"},{name:"end",type:"uint64",indexed:!1,internalType:"uint64"}],anonymous:!1},{name:"MAX_BATCH",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MAX_FEE",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MIN_DURATION",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"acceptAdmin",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"},{name:"accruedFees",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"admin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"claim",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"claimable",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"create",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"beneficiary",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"start",type:"uint64",internalType:"uint64"},{name:"cliff",type:"uint64",internalType:"uint64"},{name:"end",type:"uint64",internalType:"uint64"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"createMany",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"beneficiaries",type:"address[]",internalType:"address[]"},{name:"amounts",type:"uint256[]",internalType:"uint256[]"},{name:"start",type:"uint64",internalType:"uint64"},{name:"cliff",type:"uint64",internalType:"uint64"},{name:"end",type:"uint64",internalType:"uint64"}],outputs:[{name:"firstId",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"fee",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"feeCollector",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"getSchedule",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"creator",type:"address",internalType:"address"},{name:"start",type:"uint64",internalType:"uint64"},{name:"beneficiary",type:"address",internalType:"address"},{name:"cliff",type:"uint64",internalType:"uint64"},{name:"token",type:"address",internalType:"address"},{name:"end",type:"uint64",internalType:"uint64"},{name:"total",type:"uint128",internalType:"uint128"},{name:"claimed",type:"uint128",internalType:"uint128"}],internalType:"struct RobinhoodVesting.Schedule"}],stateMutability:"view"},{name:"nextScheduleId",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"pendingAdmin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"schedules",type:"function",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"creator",type:"address",internalType:"address"},{name:"start",type:"uint64",internalType:"uint64"},{name:"beneficiary",type:"address",internalType:"address"},{name:"cliff",type:"uint64",internalType:"uint64"},{name:"token",type:"address",internalType:"address"},{name:"end",type:"uint64",internalType:"uint64"},{name:"total",type:"uint128",internalType:"uint128"},{name:"claimed",type:"uint128",internalType:"uint128"}],stateMutability:"view"},{name:"schedulesByBeneficiary",type:"function",inputs:[{name:"b",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"schedulesByCreator",type:"function",inputs:[{name:"c",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"schedulesByToken",type:"function",inputs:[{name:"token",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"setFee",type:"function",inputs:[{name:"_fee",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeCollector",type:"function",inputs:[{name:"c",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"totalSchedules",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"transferAdmin",type:"function",inputs:[{name:"newAdmin",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"transferBeneficiary",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"newBeneficiary",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"withdrawFees",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"}]},airdrop:{address:"0x6B1fE7b821001144Ee74EEA258b0AafdE20102E8",source:"https://sourcify.dev/server/v2/contract/4663/0x6B1fE7b821001144Ee74EEA258b0AafdE20102E8?fields=abi,sources,compilation",match:"match",verifiedAt:"2026-07-30T16:48:51Z",fetchedAt:"2026-10-31",abi:[{name:"AdminTransferStarted",type:"event",inputs:[{name:"current",type:"address",indexed:!0,internalType:"address"},{name:"pending",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"AdminTransferred",type:"event",inputs:[{name:"previous",type:"address",indexed:!0,internalType:"address"},{name:"current",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"AirdropCreated",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"creator",type:"address",indexed:!0,internalType:"address"},{name:"merkleRoot",type:"bytes32",indexed:!1,internalType:"bytes32"},{name:"total",type:"uint256",indexed:!1,internalType:"uint256"},{name:"maxClaims",type:"uint32",indexed:!1,internalType:"uint32"},{name:"endTime",type:"uint64",indexed:!1,internalType:"uint64"},{name:"listURI",type:"string",indexed:!1,internalType:"string"}],anonymous:!1},{name:"Claimed",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"index",type:"uint256",indexed:!1,internalType:"uint256"},{name:"account",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeChanged",type:"event",inputs:[{name:"feeBase",type:"uint256",indexed:!1,internalType:"uint256"},{name:"feePerWallet",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeCollectorChanged",type:"event",inputs:[{name:"collector",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{name:"FeesWithdrawn",type:"event",inputs:[{name:"collector",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"Swept",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"creator",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"MAX_FEE",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MAX_RECIPIENTS",type:"function",inputs:[],outputs:[{name:"",type:"uint32",internalType:"uint32"}],stateMutability:"view"},{name:"MAX_URI",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MIN_WINDOW",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"acceptAdmin",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"},{name:"accruedFees",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"admin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"airdrops",type:"function",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"creator",type:"address",internalType:"address"},{name:"endTime",type:"uint64",internalType:"uint64"},{name:"maxClaims",type:"uint32",internalType:"uint32"},{name:"token",type:"address",internalType:"address"},{name:"claims",type:"uint32",internalType:"uint32"},{name:"swept",type:"bool",internalType:"bool"},{name:"merkleRoot",type:"bytes32",internalType:"bytes32"},{name:"total",type:"uint128",internalType:"uint128"},{name:"remaining",type:"uint128",internalType:"uint128"}],stateMutability:"view"},{name:"claim",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"index",type:"uint256",internalType:"uint256"},{name:"account",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"proof",type:"bytes32[]",internalType:"bytes32[]"}],outputs:[],stateMutability:"nonpayable"},{name:"create",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"merkleRoot",type:"bytes32",internalType:"bytes32"},{name:"total",type:"uint256",internalType:"uint256"},{name:"maxClaims",type:"uint32",internalType:"uint32"},{name:"endTime",type:"uint64",internalType:"uint64"},{name:"uri",type:"string",internalType:"string"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"feeBase",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"feeCollector",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"feePerWallet",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"getAirdrop",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"creator",type:"address",internalType:"address"},{name:"endTime",type:"uint64",internalType:"uint64"},{name:"maxClaims",type:"uint32",internalType:"uint32"},{name:"token",type:"address",internalType:"address"},{name:"claims",type:"uint32",internalType:"uint32"},{name:"swept",type:"bool",internalType:"bool"},{name:"merkleRoot",type:"bytes32",internalType:"bytes32"},{name:"total",type:"uint128",internalType:"uint128"},{name:"remaining",type:"uint128",internalType:"uint128"}],internalType:"struct RobinhoodAirdrop.Airdrop"}],stateMutability:"view"},{name:"isClaimed",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"index",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"listURI",type:"function",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{name:"nextAirdropId",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"pendingAdmin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"quote",type:"function",inputs:[{name:"maxClaims",type:"uint32",internalType:"uint32"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"setFee",type:"function",inputs:[{name:"_feeBase",type:"uint256",internalType:"uint256"},{name:"_feePerWallet",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeCollector",type:"function",inputs:[{name:"c",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"sweep",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"totalAirdrops",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"transferAdmin",type:"function",inputs:[{name:"newAdmin",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"withdrawFees",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"}]},liquidityLocker:{address:"0x91Aa2dA1956C77F8448E18DCaf53383bCc658e67",source:"https://sourcify.dev/server/v2/contract/4663/0x91Aa2dA1956C77F8448E18DCaf53383bCc658e67?fields=abi,sources,compilation",match:"exact_match",verifiedAt:"2026-10-04T15:10:02Z",fetchedAt:"2026-10-31",abi:[{name:"AdminTransferStarted",type:"event",inputs:[{name:"next",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"AdminTransferred",type:"event",inputs:[{name:"previous",type:"address",indexed:!0,internalType:"address"},{name:"next",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"CollectFailed",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{name:"CollectFeeChanged",type:"event",inputs:[{name:"bps",type:"uint16",indexed:!1,internalType:"uint16"}],anonymous:!1},{name:"Collected",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"recipient",type:"address",indexed:!0,internalType:"address"},{name:"amount0",type:"uint256",indexed:!1,internalType:"uint256"},{name:"amount1",type:"uint256",indexed:!1,internalType:"uint256"},{name:"cut0",type:"uint256",indexed:!1,internalType:"uint256"},{name:"cut1",type:"uint256",indexed:!1,internalType:"uint256"},{name:"byAdmin",type:"bool",indexed:!1,internalType:"bool"}],anonymous:!1},{name:"CutDeferred",type:"event",inputs:[{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"CutSwept",type:"event",inputs:[{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"EthClaimed",type:"event",inputs:[{name:"recipient",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"EthCredited",type:"event",inputs:[{name:"recipient",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"Extended",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newUnlockTime",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeRecipientChanged",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"recipient",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"FeeVaultChanged",type:"event",inputs:[{name:"vault",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{name:"FixedFeeChanged",type:"event",inputs:[{name:"fee",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"HookAllowedChanged",type:"event",inputs:[{name:"hook",type:"address",indexed:!0,internalType:"address"},{name:"allowed",type:"bool",indexed:!1,internalType:"bool"}],anonymous:!1},{name:"KeeperChanged",type:"event",inputs:[{name:"keeper",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"LockOwnershipTransferred",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"from",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"Locked",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"owner",type:"address",indexed:!0,internalType:"address"},{name:"manager",type:"address",indexed:!0,internalType:"address"},{name:"tokenId",type:"uint256",indexed:!1,internalType:"uint256"},{name:"token0",type:"address",indexed:!1,internalType:"address"},{name:"token1",type:"address",indexed:!1,internalType:"address"},{name:"pool",type:"bytes32",indexed:!1,internalType:"bytes32"},{name:"unlockTime",type:"uint256",indexed:!1,internalType:"uint256"},{name:"collectFeeBps",type:"uint16",indexed:!1,internalType:"uint16"},{name:"hookVerified",type:"bool",indexed:!1,internalType:"bool"},{name:"feeRecipient",type:"address",indexed:!1,internalType:"address"},{name:"fixedFeePaid",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"PausedChanged",type:"event",inputs:[{name:"paused",type:"bool",indexed:!1,internalType:"bool"}],anonymous:!1},{name:"PreLockFeesReturned",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"to",type:"address",indexed:!0,internalType:"address"},{name:"amount0",type:"uint256",indexed:!1,internalType:"uint256"},{name:"amount1",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"Rescued",type:"event",inputs:[{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"RevenueSinkChanged",type:"event",inputs:[{name:"sink",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{name:"ShareRedirected",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"StrayPositionReturned",type:"event",inputs:[{name:"manager",type:"address",indexed:!0,internalType:"address"},{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"to",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"Withdrawn",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"to",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"BATCH_GAS_PER_LOCK",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MAX_BATCH",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MAX_COLLECT_FEE_BPS",type:"function",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{name:"MAX_FIXED_FEE",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MAX_LOCK_DURATION",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MIN_COLLECT_FEE_BPS",type:"function",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{name:"V3_FACTORY",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"V3_POSITIONS",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IV3PositionManager"}],stateMutability:"view"},{name:"V4_POOL_MANAGER",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"V4_POSITIONS",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IV4PositionManager"}],stateMutability:"view"},{name:"acceptAdmin",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"},{name:"admin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"adminCollect",type:"function",inputs:[{name:"ids",type:"uint256[]",internalType:"uint256[]"}],outputs:[],stateMutability:"nonpayable"},{name:"claimOwedEth",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"},{name:"claimOwedEthTo",type:"function",inputs:[{name:"to",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"collect",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"collectFeeBps",type:"function",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{name:"collectMany",type:"function",inputs:[{name:"ids",type:"uint256[]",internalType:"uint256[]"}],outputs:[],stateMutability:"nonpayable"},{name:"collectOneIsolated",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"byAdmin",type:"bool",internalType:"bool"}],outputs:[],stateMutability:"nonpayable"},{name:"cutOf",type:"function",inputs:[{name:"amount",type:"uint256",internalType:"uint256"},{name:"bps",type:"uint16",internalType:"uint16"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"pure"},{name:"extend",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"newUnlockTime",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"feeVault",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"fixedFee",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"getLock",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"owner",type:"address",internalType:"address"},{name:"unlockTime",type:"uint40",internalType:"uint40"},{name:"collectFeeBps",type:"uint16",internalType:"uint16"},{name:"isV4",type:"bool",internalType:"bool"},{name:"hookVerified",type:"bool",internalType:"bool"},{name:"withdrawn",type:"bool",internalType:"bool"},{name:"feeRecipient",type:"address",internalType:"address"},{name:"token0",type:"address",internalType:"address"},{name:"token1",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"}],internalType:"struct HoodLockLPLocker.Lock"}],stateMutability:"view"},{name:"hookAllowed",type:"function",inputs:[{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"isUnlocked",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"keeper",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"lock",type:"function",inputs:[{name:"manager",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"},{name:"unlockTime",type:"uint256",internalType:"uint256"},{name:"feeRecipient",type:"address",internalType:"address"},{name:"acceptUnverifiedHook",type:"bool",internalType:"bool"},{name:"maxCollectFeeBps",type:"uint16",internalType:"uint16"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"lockIdOf",type:"function",inputs:[{name:"",type:"address",internalType:"address"},{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"locksOf",type:"function",inputs:[{name:"owner",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"name",type:"function",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{name:"nextLockId",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"onERC721Received",type:"function",inputs:[{name:"",type:"address",internalType:"address"},{name:"",type:"address",internalType:"address"},{name:"",type:"uint256",internalType:"uint256"},{name:"",type:"bytes",internalType:"bytes"}],outputs:[{name:"",type:"bytes4",internalType:"bytes4"}],stateMutability:"pure"},{name:"owedEth",type:"function",inputs:[{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"paused",type:"function",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"pendingAdmin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"pendingCut",type:"function",inputs:[{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"pushOwedEth",type:"function",inputs:[{name:"who",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"rescueERC20",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"to",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"returnStrayPosition",type:"function",inputs:[{name:"manager",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"},{name:"to",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"revenueSink",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"setCollectFeeBps",type:"function",inputs:[{name:"bps",type:"uint16",internalType:"uint16"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeRecipient",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"recipient",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeVault",type:"function",inputs:[{name:"vault",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"setFixedFee",type:"function",inputs:[{name:"fee_",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"setHookAllowed",type:"function",inputs:[{name:"hook",type:"address",internalType:"address"},{name:"allowed",type:"bool",internalType:"bool"}],outputs:[],stateMutability:"nonpayable"},{name:"setKeeper",type:"function",inputs:[{name:"k",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"setPaused",type:"function",inputs:[{name:"p",type:"bool",internalType:"bool"}],outputs:[],stateMutability:"nonpayable"},{name:"setRevenueSink",type:"function",inputs:[{name:"sink",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"sweepPendingCut",type:"function",inputs:[{name:"token",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"transferAdmin",type:"function",inputs:[{name:"next",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"transferLockOwnership",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"withdraw",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"to",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"}]}};var _e=v,Ie=S(v.vesting.address),Ee=["hoodlock_read","hoodlock_record","hoodlock_vesting_status","hoodlock_public"],Le=["hoodlock_vesting_create","hoodlock_vesting_claim","hoodlock_vesting_transfer","hoodlock_withdraw","hoodlock_extend","hoodlock_transfer_lock","hoodlock_set_fee_recipient","hoodlock_collect","hoodlock_airdrop_sweep","hoodlock_recover","hoodlock_admin"],C=k("Decimal record ID, including zero for token locks, burns, vesting and airdrops. LP IDs start at one."),le={id:C,kind:{type:"string",enum:["token","v2","v3","v4"],description:"Lock type: token = ERC-20 token lock; v2 = V2 LP-token lock; v3 or v4 = Uniswap v3 or v4 liquidity-position (NFT) lock."}},Y=(1n<<256n)-1n;function m(e,n,t=256){if(typeof e!="string"||!/^\d+$/.test(e))throw new o(`${n} must be a decimal base-unit string.`);let a=BigInt(e);if(a>(1n<<BigInt(t))-1n)throw new o(`${n} exceeds uint${t}.`);return a}function f(e,n,t=!1){let a=q(e,`Provide a valid ${n} address.`);return t?a:j(a,`${n} must not be the zero address.`)}function ce(e,n){let t=m(e,n);if(t===0n||t===Y)throw new o(`${n} must be a positive exact amount, never unlimited.`);return t}function Q(e){if(typeof e!="string"||!Object.hasOwn(v,e))throw new o("Choose locker, burner, vesting, airdrop or liquidityLocker.");return e}function B(e){return v[e].abi}function h(e){return S(v[e].address)}function D(e,n){let t=B(e).find(a=>a.type==="function"&&a.name===n);if(!t)throw new o(`No published HoodLock ${e}.${n} function exists.`);return t}async function p(e,n,t,a=[]){return e.clientFor(l).readContract({address:h(n),abi:B(n),functionName:t,args:a})}function F(e,n){if(Array.isArray(e))return Object.fromEntries(n.map((t,a)=>[t,e[a]]));if(e&&typeof e=="object")return e;throw new o("HoodLock returned an invalid record. Retry the chain read.")}var me=["owner","token","amount","unlockTime","withdrawn"],fe=["owner","unlockTime","collectFeeBps","isV4","hookVerified","withdrawn","feeRecipient","token0","token1","tokenId"],ee=["creator","start","beneficiary","cliff","token","end","total","claimed"],K=["creator","endTime","maxClaims","token","claims","swept","merkleRoot","total","remaining"];function x(e){return JSON.parse(JSON.stringify(e,(n,t)=>typeof t=="bigint"?t.toString():t))}async function g(e,n){let t=f(n,"token",!0);if(t===U)return N;let a=e.clientFor(l),[i,s]=await Promise.all([a.readContract({address:t,abi:X,functionName:"symbol"}),a.readContract({address:t,abi:X,functionName:"decimals"})]);if(!Number.isInteger(s)||s<0||s>255)throw new o("Token decimals are invalid.");return{address:t,chainId:l,symbol:R(String(i)),decimals:s}}function _(e,n,t="current owner"){if(f(e,t)!==S(n))throw new o(`This wallet is not the ${t}.`)}function z(e){if(e.withdrawn)throw new o("This HoodLock lock was already withdrawn.")}function Z(e){if(!["token","v2","v3","v4"].includes(String(e.kind)))throw new o("Provide kind: token, v2, v3 or v4.");return e.kind==="token"||e.kind==="v2"?"locker":"liquidityLocker"}async function H(e,n,t){return F(await p(e,n,"getLock",[t]),n==="locker"?me:fe)}function G(e,n){if((e.kind==="v3"||e.kind==="v4")&&!!n.isV4!=(e.kind==="v4"))throw new o("Lock kind disagrees with the on-chain NFT version.")}async function T(e,n,t,a,i,s,r=0n,u=[]){let d=e.unsignedTx({to:h(t),chainId:l,value:r.toString(),data:ye({abi:B(t),functionName:a,args:i}),description:s}),c=await e.preview([...u,d],S(n));return{txs:c.txs,preview:c,summary:s,contract:h(t),chainId:l,method:a,arguments:x(i)}}function w(e,n,t,a,i){return{name:n,inputSchema:{type:"object",properties:t,required:a,additionalProperties:!1},async execute(s,r){try{return await i(s,S(r))}catch(u){throw new o(e.plainError(u))}}}}async function Te(e,n,t){let a=f(n.token,"token"),i=m(n.start,"start",64),s=m(n.cliff,"cliff",64),r=m(n.end,"end",64),[u,d,c,y,M]=await Promise.all([e.clientFor(l).getBlock(),p(e,"vesting","fee"),p(e,"vesting","MIN_DURATION"),p(e,"vesting","MAX_BATCH"),g(e,a)]);if(i>s||s>r||r<=i)throw new o("Vesting dates require start <= cliff <= end and end > start.");if(r>=1000000000000n||r<=u.timestamp+BigInt(String(c))+30n)throw new o("Vesting end must be Unix seconds, more than 24 hours plus a 30-second inclusion margin after the current block.");let I=n.entries!==void 0;if(I&&(n.beneficiary!==void 0||n.amount!==void 0))throw new o("Use entries or beneficiary/amount, not both.");if(I&&(!Array.isArray(n.entries)||n.entries.length===0||n.entries.length>Number(y)))throw new o(`Provide between 1 and ${String(y)} vesting entries.`);let L=I?n.entries:[{beneficiary:n.beneficiary,amount:n.amount}],P=L.map(A=>f(A?.beneficiary,"beneficiary")),O=L.map(A=>ce(A?.amount,"amount"));if(O.some(A=>A>=1n<<128n))throw new o("Each vesting amount must fit uint128.");let $=O.reduce((A,de)=>A+de,0n);if($>=Y)throw new o("Vesting total exceeds the exact approval range.");let E=BigInt(String(d))*BigInt(L.length);if(n.maxFee!==void 0&&E>m(n.maxFee,"maxFee"))throw new o("Live vesting fee exceeds maxFee.");let re=I?"createMany":"create",oe=I?[a,P,O,i,s,r]:[a,P[0],O[0],i,s,r],ue=`Create ${L.length} irrevocable HoodLock vesting schedule(s): ${$} ${M.symbol} base units (${a}, decimals ${M.decimals}) for ${P.join(", ")}; start ${i}, cliff ${s}, end ${r}; exact fee ${E} wei. Creator cannot cancel or recover principal. Recorded totals use tokens actually received; preserve mined schedule IDs.`;return W(e,{...await T(e,t,"vesting",re,oe,ue,E,[e.approval(a,h("vesting"),$.toString(),l)]),token:M,amount:$.toString(),fee:{token:N,amount:E.toString()}},h("vesting"),E)}async function te(e,n){let t=F(await p(e,"vesting","getSchedule",[n]),ee);if(BigInt(String(t.total))===0n)throw new o("No HoodLock vesting schedule exists for this ID.");let[a,i]=await Promise.all([p(e,"vesting","claimable",[n]),g(e,t.token)]);return{id:n.toString(),contract:h("vesting"),chainId:l,schedule:x(t),token:i,claimable:String(a),remaining:(BigInt(String(t.total))-BigInt(String(t.claimed))).toString(),proofUrl:`https://hoodlock.tech/proof/vesting/${n}`}}async function ne(e,n,t){let a=n.account===void 0?t:f(n.account,"account"),i=n.role??"beneficiary";if(!["beneficiary","creator","token"].includes(String(i)))throw new o("Choose beneficiary, creator or token for vesting discovery.");let r=await p(e,"vesting",i==="creator"?"schedulesByCreator":i==="token"?"schedulesByToken":"schedulesByBeneficiary",[a]),u=[];for(let d of[...new Set(r.map(String))]){let c=await te(e,BigInt(d));(i!=="beneficiary"||f(c.schedule.beneficiary,"beneficiary")===a)&&u.push(c)}return{account:a,role:i,schedules:u,summary:`Found ${u.length} HoodLock vesting schedule(s); completed schedules remain visible.`}}async function J(e,n,t){return n.id===void 0?ne(e,n,t):te(e,m(n.id,"id"))}function Oe(e){return{tools:[w(e,"hoodlock_vesting_create",{token:{...b,description:"Address of the ERC-20 token to vest. The wallet approves and transfers it to the vesting contract."},beneficiary:{...b,description:"Address that receives the vested tokens (single schedule). Use this with amount, or use entries, not both."},amount:k('Amount of the token to vest, in base units of that token (read its decimals). Example: "1000000000000000000" = 1 token at 18 decimals. Single schedule only.'),entries:{type:"array",minItems:1,maxItems:200,description:"Batch of schedules sharing one token, start, cliff and end. Use this instead of beneficiary and amount.",items:{type:"object",properties:{beneficiary:{...b,description:"Address that receives this entry's vested tokens."},amount:k('Amount of the token vested to this beneficiary, in base units of that token (read its decimals). Example: "1000000000000000000" = 1 token at 18 decimals.')},required:["beneficiary","amount"],additionalProperties:!1}},start:k('Vesting start time in Unix seconds, as a decimal string. Example: "1800000000".'),cliff:k("Cliff time in Unix seconds, between start and end; nothing is claimable before it."),end:k("Vesting end time in Unix seconds, more than 24 hours after the current block."),maxFee:k("Optional cap on the total creation fee in wei of native ETH (1 ETH = 10^18 wei); the call fails if the live fee is higher.")},["token","start","cliff","end"],(t,a)=>Te(e,t,a)),w(e,"hoodlock_vesting_status",{id:C,account:{...b,description:"Address to list vesting schedules for when no id is given. Defaults to the connected wallet."},role:{type:"string",enum:["beneficiary","creator","token"],description:"How account relates to the schedules when listing: beneficiary (default), creator, or the vested token address."}},[],(t,a)=>J(e,t,a)),...["claim","transfer"].map(t=>w(e,`hoodlock_vesting_${t}`,{id:C,...t==="transfer"?{beneficiary:{...b,description:"Address of the new beneficiary who takes over the remaining vesting rights."}}:{}},t==="transfer"?["id","beneficiary"]:["id"],async(a,i)=>{let s=m(a.id,"id"),r=F(await p(e,"vesting","getSchedule",[s]),ee);if(_(r.beneficiary,i,"current beneficiary"),t==="transfer"){let c=f(a.beneficiary,"beneficiary");return T(e,i,"vesting","transferBeneficiary",[s,c],`Transfer beneficiary rights for vesting #${s} from ${i} to ${c}. Remaining tokens follow the schedule; creator cannot revoke it.`)}let u=BigInt(String(await p(e,"vesting","claimable",[s])));if(u===0n)throw new o("Nothing is claimable yet; check the cliff and previous claims.");let d=await g(e,r.token);return{...await T(e,i,"vesting","claim",[s],`Claim currently ${u} ${d.symbol} base units from vesting #${s} to current beneficiary ${i}; live inclusion time determines the final amount.`),token:d,amount:u.toString()}})),...["withdraw","extend","transfer_lock","set_fee_recipient"].map(t=>w(e,`hoodlock_${t}`,{...le,...t==="withdraw"?{to:{...b,description:"Address that receives the withdrawn position NFT or LP; defaults to the connected wallet. Token locks withdraw only to the owner."}}:t==="extend"?{unlockTime:k('New unlock time in Unix seconds, later than the current unlock time and in the future (at most 100 years). Example: "1800000000".')}:t==="transfer_lock"?{owner:{...b,description:"Address of the new lock owner, who can withdraw after maturity."}}:{recipient:{...b,description:"Address that receives future collected fees for this NFT lock."}}},["kind","id",...t==="extend"?["unlockTime"]:t==="transfer_lock"?["owner"]:t==="set_fee_recipient"?["recipient"]:[]],async(a,i)=>{let s=Z(a),r=m(a.id,"id"),u=await H(e,s,r);_(u.owner,i),z(u),G(a,u);let d=(await e.clientFor(l).getBlock()).timestamp;if(t==="withdraw"){if(d<BigInt(String(u.unlockTime)))throw new o(`Still locked until Unix ${String(u.unlockTime)}; expiry never withdraws automatically.`);let y=a.to===void 0?i:f(a.to,"withdrawal recipient");if(s==="locker"&&y!==i)throw new o("Token locks withdraw only to the current owner; omit to or use this wallet.");return{...await T(e,i,s,"withdraw",s==="locker"?[r]:[r,y],`Withdraw mature HoodLock ${a.kind} lock #${r} to ${y}; ${s==="locker"?`${String(u.amount)} token base units`:`position NFT #${String(u.tokenId)}`}.`),record:x(u),recipient:y}}if(t==="extend"){let y=m(a.unlockTime,"unlockTime");if(y<=BigInt(String(u.unlockTime))||y<=d||y>d+3153600000n)throw new o("New unlockTime must extend the lock, be future Unix seconds, and at most 100 years away.");return T(e,i,s,"extend",[r,y],`Extend HoodLock ${a.kind} lock #${r} from ${String(u.unlockTime)} to ${y}; it cannot be shortened.`)}if(t==="set_fee_recipient"){if(s!=="liquidityLocker")throw new o("Only NFT locks have a fee recipient.");let y=f(a.recipient,"fee recipient");return T(e,i,s,"setFeeRecipient",[r,y],`Redirect future collected fees for HoodLock NFT lock #${r} to ${y}; ownership and maturity stay the same.`)}let c=f(a.owner,"new owner");return T(e,i,s,"transferLockOwnership",[r,c],`Transfer HoodLock ${a.kind} lock #${r} to ${c}; that owner can withdraw after maturity.${s==="liquidityLocker"?" The contract also resets feeRecipient to the new owner.":""}`)})),w(e,"hoodlock_collect",{id:C,ids:{type:"array",minItems:1,maxItems:50,description:"Several NFT lock ids to collect in one batch, 1 to 50 distinct. Use this or id, not both.",items:C}},[],async(t,a)=>{if(t.id===void 0==(t.ids===void 0))throw new o("Provide exactly one of id or ids.");let i=t.ids===void 0?[m(t.id,"id")]:ie(t.ids),s=[];for(let u of i){let d=await H(e,"liquidityLocker",u);_(d.owner,a),z(d),s.push({id:u.toString(),...x(d)})}let r=t.ids!==void 0;return{...await T(e,a,"liquidityLocker",r?"collectMany":"collect",r?[i]:[i[0]],`Collect fees for HoodLock NFT lock(s) ${i.join(", ")}; each lock's frozen collectFeeBps goes to HoodLock, the net to its recorded feeRecipient. Liquidity stays locked.${r?" Individual locks may fail; inspect Collected/CollectFailed events and balances.":""} Native ETH may become owedEth if delivery fails; refused ERC-20 fee shares fall back to the lock owner.`),locks:s}}),w(e,"hoodlock_airdrop_sweep",{id:C},["id"],async(t,a)=>{let i=m(t.id,"id"),s=F(await p(e,"airdrop","getAirdrop",[i]),K);if(_(s.creator,a,"airdrop creator"),s.swept)throw new o("This airdrop was already swept.");if(BigInt(String(s.endTime))===0n)throw new o("A zero-deadline airdrop can never be swept.");if((await e.clientFor(l).getBlock()).timestamp<BigInt(String(s.endTime)))throw new o("This airdrop has not ended; wait until endTime.");let r=await g(e,s.token);return{...await T(e,a,"airdrop","sweep",[i],`Recover the ${String(s.remaining)} remaining ${r.symbol} base units from expired airdrop #${i} to creator ${a}. This closes claims permanently.`),token:r,amount:String(s.remaining)}}),w(e,"hoodlock_record",{id:C,kind:{type:"string",enum:["token","v2","v3","v4","burn","vesting","airdrop"],description:"Record type: token, v2, v3 or v4 lock; or a burn, vesting schedule or airdrop. The id is looked up in that registry."}},["kind","id"],async(t,a)=>{let i=m(t.id,"id");if(t.kind==="vesting")return J(e,t,a);if(t.kind==="burn"){let d=F(await p(e,"burner","getBurn",[i]),["burner","token","amount","timestamp"]);if(BigInt(String(d.amount))===0n)throw new o("No HoodLock burn exists for this ID.");return{id:i.toString(),chainId:l,contract:h("burner"),record:x(d),token:await g(e,d.token),totalSupplyReduced:!1,proofUrl:`https://hoodlock.tech/proof/burn/${i}`}}if(t.kind==="airdrop"){let d=F(await p(e,"airdrop","getAirdrop",[i]),K);if(String(d.creator).toLowerCase()===U)throw new o("No HoodLock airdrop exists for this ID.");return{id:i.toString(),chainId:l,contract:h("airdrop"),record:x(d),token:await g(e,d.token),listURI:R(String(await p(e,"airdrop","listURI",[i])))}}let s=Z(t),r=await H(e,s,i);if(String(r.owner).toLowerCase()===U)throw new o("No HoodLock lock exists for this ID.");G(t,r);let u=s==="locker"?{token:await g(e,r.token)}:{token0:await g(e,r.token0),token1:await g(e,r.token1)};return{id:i.toString(),chainId:l,contract:h(s),record:x(r),...u,proofUrl:`https://hoodlock.tech/proof/${s==="locker"?"lock":"position"}/${i}`}}),w(e,"hoodlock_read",{contract:{type:"string",enum:Object.keys(v),description:"Which HoodLock contract to read: locker, burner, vesting, airdrop or liquidityLocker."},method:{type:"string",enum:be(),description:"Name of a published view or pure function on that contract."},arguments:{type:"array",maxItems:6,description:"Function arguments in ABI order: addresses as 0x strings, uint values as decimal strings, booleans as true/false.",items:{}}},["contract","method"],async t=>{let a=Q(t.contract),i=D(a,String(t.method));if(i.stateMutability!=="view"&&i.stateMutability!=="pure")throw new o("hoodlock_read accepts only published view/pure functions.");let s=V(i,t.arguments??[]),r=await p(e,a,i.name,s);return{chainId:l,contract:h(a),method:i.name,value:i.outputs.length===1&&i.outputs[0].type==="string"?R(String(r)):x(r),outputs:i.outputs,summary:"Raw contract view; owner indexes may include previous owners. Check current records. No transaction was built."}}),w(e,"hoodlock_recover",{method:{type:"string",enum:["claimOwedEth","claimOwedEthTo","pushOwedEth","sweepPendingCut"],description:"Recovery call on the liquidity locker: claimOwedEth (to you), claimOwedEthTo (to a given address), pushOwedEth (send a holder's owed ETH to that holder), sweepPendingCut (protocol cut of a token)."},arguments:{type:"array",maxItems:1,description:"ABI-ordered arguments: one address for claimOwedEthTo (recipient), pushOwedEth (holder) or sweepPendingCut (token); empty for claimOwedEth.",items:b}},["method"],async(t,a)=>{let i=String(t.method);if(!["claimOwedEth","claimOwedEthTo","pushOwedEth","sweepPendingCut"].includes(i))throw new o("Choose a published deferred ETH or protocol-cut recovery method.");let s=V(D("liquidityLocker",i),t.arguments??[]),r=i==="claimOwedEthTo"||i==="pushOwedEth"?f(s[0],"recipient"):a,u=i==="sweepPendingCut"?await p(e,"liquidityLocker","pendingCut",s):await p(e,"liquidityLocker","owedEth",[i==="pushOwedEth"?r:a]);if(BigInt(String(u))===0n)throw new o("There is no deferred balance to recover.");let d=i==="sweepPendingCut"?String(await p(e,"liquidityLocker","feeVault")):r;return T(e,a,"liquidityLocker",i,s,`HoodLock ${i}: recover ${String(u)} base units to ${d}; only the contract-recorded credit or cut can move.`)}),w(e,"hoodlock_admin",{contract:{type:"string",enum:Object.keys(v),description:"Which HoodLock contract to administer: locker, burner, vesting, airdrop or liquidityLocker. Only its admin or role holder can succeed."},method:{type:"string",enum:[...new Set(Object.values(se).flat())],description:"Admin function to call; must be supported on the chosen contract."},arguments:{type:"array",maxItems:3,description:"Function arguments in ABI order: addresses as 0x strings, uint values as decimal strings, booleans as true/false.",items:{}}},["contract","method"],(t,a)=>we(e,t,a))],positions:async t=>((await ne(e,{},t)).schedules??[]).filter(s=>BigInt(s.remaining)>0n).map(s=>({module:"hoodlock",id:`vesting:${s.id}`,chainId:l,assets:[{token:s.token,amount:s.remaining}],description:`HoodLock vesting #${s.id}: ${s.claimable} base units claimable; ${s.remaining} remain for current beneficiary ${t}.`}))}}function ie(e){if(!Array.isArray(e)||e.length===0||e.length>50)throw new o("Provide between 1 and 50 distinct decimal IDs.");let n=e.map(t=>m(t,"id"));if(new Set(n.map(String)).size!==n.length)throw new o("Duplicate IDs are not allowed in a collection batch.");return n}function be(){return[...new Set(Object.keys(v).flatMap(e=>B(e).filter(n=>n.type==="function"&&["view","pure"].includes(n.stateMutability)&&n.name!=="onERC721Received").map(n=>n.name)))]}function ae(e,n){if(e.type.endsWith("[]")){if(!Array.isArray(n)||n.length>200)throw new o("Function arrays must contain at most 200 items.");return n.map(t=>ae({...e,type:e.type.slice(0,-2)},t))}if(e.type==="address")return f(n,e.name??"address",!0);if(e.type==="bool"){if(typeof n!="boolean")throw new o("Function boolean arguments must be booleans.");return n}if(/^uint\d*$/.test(e.type))return m(n,e.name??"integer",Number(e.type.slice(4)||256));throw new o(`Unsupported published argument type ${e.type}.`)}function V(e,n){if(!Array.isArray(n)||n.length!==e.inputs.length)throw new o(`${e.name} needs ${e.inputs.length} ABI-ordered arguments.`);return e.inputs.map((t,a)=>ae(t,n[a]))}var se={locker:["setAdmin","setFee","setFeeCollector"],burner:["setAdmin","setFee","setFeeCollector"],vesting:["setFee","setFeeCollector","transferAdmin","acceptAdmin","withdrawFees"],airdrop:["setFee","setFeeCollector","transferAdmin","acceptAdmin","withdrawFees"],liquidityLocker:["setCollectFeeBps","setFixedFee","setFeeVault","setRevenueSink","setPaused","setHookAllowed","setKeeper","transferAdmin","acceptAdmin","adminCollect","rescueERC20","returnStrayPosition"]};async function we(e,n,t){let a=Q(n.contract),i=String(n.method);if(!se[a].includes(i))throw new o(`No supported admin ${a}.${i} route exists.`);let s=V(D(a,i),n.arguments??[]),r=i==="acceptAdmin"?"pendingAdmin":i==="withdrawFees"?"feeCollector":"admin",u=await p(e,a,r);if(i==="adminCollect"&&S(String(u))!==t?_(await p(e,a,"keeper"),t,"admin or keeper"):_(u,t,r),i==="adminCollect"&&ie(s[0].map(String)),i==="returnStrayPosition"){let d=f(s[0],"manager"),c=["V3_POSITIONS","V4_POSITIONS"];if(!(await Promise.all(c.map(M=>p(e,"liquidityLocker",M)))).some(M=>S(String(M))===d))throw new o("Only a configured position manager can return a stray NFT.");if(BigInt(String(await p(e,"liquidityLocker","lockIdOf",s.slice(0,2))))!==0n)throw new o("An actively locked NFT cannot be rescued.")}return T(e,t,a,i,s,`HoodLock ${a}.${i}(${JSON.stringify(x(s))}) by authorized ${r} ${t}. This changes protocol configuration or recovers only assets allowed by the contract. Existing custody rights cannot be overridden.`)}export{_e as a,Ie as b,Ee as c,Le as d,m as e,Oe as f};
1
+ import{b as W}from"./JTWJT2O3.js";import{b as N}from"./5PNFV7HH.js";import{a as k}from"./66F5ZH34.js";import{c as b,i as q,l as j}from"./NWNYJ26T.js";import{b as l}from"./EWZFZUVF.js";import{a as o}from"./XSD5NL7J.js";import{a as R}from"./JXOEJPJ4.js";import{encodeFunctionData as ye,erc20Abi as X,getAddress as S,zeroAddress as U}from"viem";var v={locker:{address:"0xd0f7d8c6e9f6d80c297bebe4f7fd1b9c8125c32f",source:"https://sourcify.dev/server/v2/contract/4663/0xd0f7d8c6e9f6d80c297bebe4f7fd1b9c8125c32f?fields=abi,sources,compilation",match:"exact_match",verifiedAt:"2026-07-08T19:01:30Z",fetchedAt:"2026-10-31",abi:[{name:"Extended",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newUnlockTime",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeChanged",type:"event",inputs:[{name:"fee",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"LockOwnershipTransferred",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"from",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"Locked",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"owner",type:"address",indexed:!0,internalType:"address"},{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"},{name:"unlockTime",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"Withdrawn",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"owner",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"admin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"extend",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"newUnlockTime",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"fee",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"feeCollector",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"getLock",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"owner",type:"address",internalType:"address"},{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"unlockTime",type:"uint256",internalType:"uint256"},{name:"withdrawn",type:"bool",internalType:"bool"}],internalType:"struct RobinhoodLocker.Lock"}],stateMutability:"view"},{name:"isUnlocked",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"lock",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"unlockTime",type:"uint256",internalType:"uint256"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"lockedAmount",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"locks",type:"function",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"owner",type:"address",internalType:"address"},{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"unlockTime",type:"uint256",internalType:"uint256"},{name:"withdrawn",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"locksByOwner",type:"function",inputs:[{name:"o",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"locksByToken",type:"function",inputs:[{name:"t",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"nextLockId",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"setAdmin",type:"function",inputs:[{name:"a",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"setFee",type:"function",inputs:[{name:"_fee",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeCollector",type:"function",inputs:[{name:"c",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"timeRemaining",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"totalLocks",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"transferLockOwnership",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"withdraw",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"}]},burner:{address:"0x6bf43ca706faa8ea46803299c191484e82280652",source:"https://sourcify.dev/server/v2/contract/4663/0x6bf43ca706faa8ea46803299c191484e82280652?fields=abi,sources,compilation",match:"exact_match",verifiedAt:"2026-07-22T23:28:15Z",fetchedAt:"2026-10-31",abi:[{name:"Burned",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"burner",type:"address",indexed:!0,internalType:"address"},{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeChanged",type:"event",inputs:[{name:"fee",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"DEAD",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"admin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"burn",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"burns",type:"function",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"burner",type:"address",internalType:"address"},{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"timestamp",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"burnsByBurner",type:"function",inputs:[{name:"b",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"burnsByToken",type:"function",inputs:[{name:"t",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"fee",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"feeCollector",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"getBurn",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"burner",type:"address",internalType:"address"},{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"timestamp",type:"uint256",internalType:"uint256"}],internalType:"struct RobinhoodBurner.Burn"}],stateMutability:"view"},{name:"nextBurnId",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"setAdmin",type:"function",inputs:[{name:"a",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"setFee",type:"function",inputs:[{name:"_fee",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeCollector",type:"function",inputs:[{name:"c",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"totalBurnedOf",type:"function",inputs:[{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"totalBurns",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"}]},vesting:{address:"0x910e19bcC4bce46999994Ed7297E0Fc4431ec72E",source:"https://sourcify.dev/server/v2/contract/4663/0x910e19bcC4bce46999994Ed7297E0Fc4431ec72E?fields=abi,sources,compilation",match:"exact_match",verifiedAt:"2026-07-27T00:28:59Z",fetchedAt:"2026-10-31",abi:[{name:"AdminTransferStarted",type:"event",inputs:[{name:"current",type:"address",indexed:!0,internalType:"address"},{name:"pending",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"AdminTransferred",type:"event",inputs:[{name:"previous",type:"address",indexed:!0,internalType:"address"},{name:"current",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"BeneficiaryTransferred",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"from",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"Claimed",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"beneficiary",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeChanged",type:"event",inputs:[{name:"fee",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeCollectorChanged",type:"event",inputs:[{name:"collector",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{name:"FeesWithdrawn",type:"event",inputs:[{name:"collector",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"VestingCreated",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"beneficiary",type:"address",indexed:!0,internalType:"address"},{name:"creator",type:"address",indexed:!1,internalType:"address"},{name:"total",type:"uint256",indexed:!1,internalType:"uint256"},{name:"start",type:"uint64",indexed:!1,internalType:"uint64"},{name:"cliff",type:"uint64",indexed:!1,internalType:"uint64"},{name:"end",type:"uint64",indexed:!1,internalType:"uint64"}],anonymous:!1},{name:"MAX_BATCH",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MAX_FEE",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MIN_DURATION",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"acceptAdmin",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"},{name:"accruedFees",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"admin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"claim",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"claimable",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"create",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"beneficiary",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"start",type:"uint64",internalType:"uint64"},{name:"cliff",type:"uint64",internalType:"uint64"},{name:"end",type:"uint64",internalType:"uint64"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"createMany",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"beneficiaries",type:"address[]",internalType:"address[]"},{name:"amounts",type:"uint256[]",internalType:"uint256[]"},{name:"start",type:"uint64",internalType:"uint64"},{name:"cliff",type:"uint64",internalType:"uint64"},{name:"end",type:"uint64",internalType:"uint64"}],outputs:[{name:"firstId",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"fee",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"feeCollector",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"getSchedule",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"creator",type:"address",internalType:"address"},{name:"start",type:"uint64",internalType:"uint64"},{name:"beneficiary",type:"address",internalType:"address"},{name:"cliff",type:"uint64",internalType:"uint64"},{name:"token",type:"address",internalType:"address"},{name:"end",type:"uint64",internalType:"uint64"},{name:"total",type:"uint128",internalType:"uint128"},{name:"claimed",type:"uint128",internalType:"uint128"}],internalType:"struct RobinhoodVesting.Schedule"}],stateMutability:"view"},{name:"nextScheduleId",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"pendingAdmin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"schedules",type:"function",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"creator",type:"address",internalType:"address"},{name:"start",type:"uint64",internalType:"uint64"},{name:"beneficiary",type:"address",internalType:"address"},{name:"cliff",type:"uint64",internalType:"uint64"},{name:"token",type:"address",internalType:"address"},{name:"end",type:"uint64",internalType:"uint64"},{name:"total",type:"uint128",internalType:"uint128"},{name:"claimed",type:"uint128",internalType:"uint128"}],stateMutability:"view"},{name:"schedulesByBeneficiary",type:"function",inputs:[{name:"b",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"schedulesByCreator",type:"function",inputs:[{name:"c",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"schedulesByToken",type:"function",inputs:[{name:"token",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"setFee",type:"function",inputs:[{name:"_fee",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeCollector",type:"function",inputs:[{name:"c",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"totalSchedules",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"transferAdmin",type:"function",inputs:[{name:"newAdmin",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"transferBeneficiary",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"newBeneficiary",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"withdrawFees",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"}]},airdrop:{address:"0x6B1fE7b821001144Ee74EEA258b0AafdE20102E8",source:"https://sourcify.dev/server/v2/contract/4663/0x6B1fE7b821001144Ee74EEA258b0AafdE20102E8?fields=abi,sources,compilation",match:"match",verifiedAt:"2026-07-30T16:48:51Z",fetchedAt:"2026-10-31",abi:[{name:"AdminTransferStarted",type:"event",inputs:[{name:"current",type:"address",indexed:!0,internalType:"address"},{name:"pending",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"AdminTransferred",type:"event",inputs:[{name:"previous",type:"address",indexed:!0,internalType:"address"},{name:"current",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"AirdropCreated",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"creator",type:"address",indexed:!0,internalType:"address"},{name:"merkleRoot",type:"bytes32",indexed:!1,internalType:"bytes32"},{name:"total",type:"uint256",indexed:!1,internalType:"uint256"},{name:"maxClaims",type:"uint32",indexed:!1,internalType:"uint32"},{name:"endTime",type:"uint64",indexed:!1,internalType:"uint64"},{name:"listURI",type:"string",indexed:!1,internalType:"string"}],anonymous:!1},{name:"Claimed",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"index",type:"uint256",indexed:!1,internalType:"uint256"},{name:"account",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeChanged",type:"event",inputs:[{name:"feeBase",type:"uint256",indexed:!1,internalType:"uint256"},{name:"feePerWallet",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeCollectorChanged",type:"event",inputs:[{name:"collector",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{name:"FeesWithdrawn",type:"event",inputs:[{name:"collector",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"Swept",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"creator",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"MAX_FEE",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MAX_RECIPIENTS",type:"function",inputs:[],outputs:[{name:"",type:"uint32",internalType:"uint32"}],stateMutability:"view"},{name:"MAX_URI",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MIN_WINDOW",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"acceptAdmin",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"},{name:"accruedFees",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"admin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"airdrops",type:"function",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"creator",type:"address",internalType:"address"},{name:"endTime",type:"uint64",internalType:"uint64"},{name:"maxClaims",type:"uint32",internalType:"uint32"},{name:"token",type:"address",internalType:"address"},{name:"claims",type:"uint32",internalType:"uint32"},{name:"swept",type:"bool",internalType:"bool"},{name:"merkleRoot",type:"bytes32",internalType:"bytes32"},{name:"total",type:"uint128",internalType:"uint128"},{name:"remaining",type:"uint128",internalType:"uint128"}],stateMutability:"view"},{name:"claim",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"index",type:"uint256",internalType:"uint256"},{name:"account",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"proof",type:"bytes32[]",internalType:"bytes32[]"}],outputs:[],stateMutability:"nonpayable"},{name:"create",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"merkleRoot",type:"bytes32",internalType:"bytes32"},{name:"total",type:"uint256",internalType:"uint256"},{name:"maxClaims",type:"uint32",internalType:"uint32"},{name:"endTime",type:"uint64",internalType:"uint64"},{name:"uri",type:"string",internalType:"string"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"feeBase",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"feeCollector",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"feePerWallet",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"getAirdrop",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"creator",type:"address",internalType:"address"},{name:"endTime",type:"uint64",internalType:"uint64"},{name:"maxClaims",type:"uint32",internalType:"uint32"},{name:"token",type:"address",internalType:"address"},{name:"claims",type:"uint32",internalType:"uint32"},{name:"swept",type:"bool",internalType:"bool"},{name:"merkleRoot",type:"bytes32",internalType:"bytes32"},{name:"total",type:"uint128",internalType:"uint128"},{name:"remaining",type:"uint128",internalType:"uint128"}],internalType:"struct RobinhoodAirdrop.Airdrop"}],stateMutability:"view"},{name:"isClaimed",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"index",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"listURI",type:"function",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{name:"nextAirdropId",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"pendingAdmin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"quote",type:"function",inputs:[{name:"maxClaims",type:"uint32",internalType:"uint32"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"setFee",type:"function",inputs:[{name:"_feeBase",type:"uint256",internalType:"uint256"},{name:"_feePerWallet",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeCollector",type:"function",inputs:[{name:"c",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"sweep",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"totalAirdrops",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"transferAdmin",type:"function",inputs:[{name:"newAdmin",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"withdrawFees",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"}]},liquidityLocker:{address:"0x91Aa2dA1956C77F8448E18DCaf53383bCc658e67",source:"https://sourcify.dev/server/v2/contract/4663/0x91Aa2dA1956C77F8448E18DCaf53383bCc658e67?fields=abi,sources,compilation",match:"exact_match",verifiedAt:"2026-10-04T15:10:02Z",fetchedAt:"2026-10-31",abi:[{name:"AdminTransferStarted",type:"event",inputs:[{name:"next",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"AdminTransferred",type:"event",inputs:[{name:"previous",type:"address",indexed:!0,internalType:"address"},{name:"next",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"CollectFailed",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{name:"CollectFeeChanged",type:"event",inputs:[{name:"bps",type:"uint16",indexed:!1,internalType:"uint16"}],anonymous:!1},{name:"Collected",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"recipient",type:"address",indexed:!0,internalType:"address"},{name:"amount0",type:"uint256",indexed:!1,internalType:"uint256"},{name:"amount1",type:"uint256",indexed:!1,internalType:"uint256"},{name:"cut0",type:"uint256",indexed:!1,internalType:"uint256"},{name:"cut1",type:"uint256",indexed:!1,internalType:"uint256"},{name:"byAdmin",type:"bool",indexed:!1,internalType:"bool"}],anonymous:!1},{name:"CutDeferred",type:"event",inputs:[{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"CutSwept",type:"event",inputs:[{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"EthClaimed",type:"event",inputs:[{name:"recipient",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"EthCredited",type:"event",inputs:[{name:"recipient",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"Extended",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newUnlockTime",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeRecipientChanged",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"recipient",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"FeeVaultChanged",type:"event",inputs:[{name:"vault",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{name:"FixedFeeChanged",type:"event",inputs:[{name:"fee",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"HookAllowedChanged",type:"event",inputs:[{name:"hook",type:"address",indexed:!0,internalType:"address"},{name:"allowed",type:"bool",indexed:!1,internalType:"bool"}],anonymous:!1},{name:"KeeperChanged",type:"event",inputs:[{name:"keeper",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"LockOwnershipTransferred",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"from",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"Locked",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"owner",type:"address",indexed:!0,internalType:"address"},{name:"manager",type:"address",indexed:!0,internalType:"address"},{name:"tokenId",type:"uint256",indexed:!1,internalType:"uint256"},{name:"token0",type:"address",indexed:!1,internalType:"address"},{name:"token1",type:"address",indexed:!1,internalType:"address"},{name:"pool",type:"bytes32",indexed:!1,internalType:"bytes32"},{name:"unlockTime",type:"uint256",indexed:!1,internalType:"uint256"},{name:"collectFeeBps",type:"uint16",indexed:!1,internalType:"uint16"},{name:"hookVerified",type:"bool",indexed:!1,internalType:"bool"},{name:"feeRecipient",type:"address",indexed:!1,internalType:"address"},{name:"fixedFeePaid",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"PausedChanged",type:"event",inputs:[{name:"paused",type:"bool",indexed:!1,internalType:"bool"}],anonymous:!1},{name:"PreLockFeesReturned",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"to",type:"address",indexed:!0,internalType:"address"},{name:"amount0",type:"uint256",indexed:!1,internalType:"uint256"},{name:"amount1",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"Rescued",type:"event",inputs:[{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"RevenueSinkChanged",type:"event",inputs:[{name:"sink",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{name:"ShareRedirected",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"StrayPositionReturned",type:"event",inputs:[{name:"manager",type:"address",indexed:!0,internalType:"address"},{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"to",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"Withdrawn",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"to",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"BATCH_GAS_PER_LOCK",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MAX_BATCH",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MAX_COLLECT_FEE_BPS",type:"function",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{name:"MAX_FIXED_FEE",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MAX_LOCK_DURATION",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MIN_COLLECT_FEE_BPS",type:"function",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{name:"V3_FACTORY",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"V3_POSITIONS",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IV3PositionManager"}],stateMutability:"view"},{name:"V4_POOL_MANAGER",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"V4_POSITIONS",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IV4PositionManager"}],stateMutability:"view"},{name:"acceptAdmin",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"},{name:"admin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"adminCollect",type:"function",inputs:[{name:"ids",type:"uint256[]",internalType:"uint256[]"}],outputs:[],stateMutability:"nonpayable"},{name:"claimOwedEth",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"},{name:"claimOwedEthTo",type:"function",inputs:[{name:"to",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"collect",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"collectFeeBps",type:"function",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{name:"collectMany",type:"function",inputs:[{name:"ids",type:"uint256[]",internalType:"uint256[]"}],outputs:[],stateMutability:"nonpayable"},{name:"collectOneIsolated",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"byAdmin",type:"bool",internalType:"bool"}],outputs:[],stateMutability:"nonpayable"},{name:"cutOf",type:"function",inputs:[{name:"amount",type:"uint256",internalType:"uint256"},{name:"bps",type:"uint16",internalType:"uint16"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"pure"},{name:"extend",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"newUnlockTime",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"feeVault",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"fixedFee",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"getLock",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"owner",type:"address",internalType:"address"},{name:"unlockTime",type:"uint40",internalType:"uint40"},{name:"collectFeeBps",type:"uint16",internalType:"uint16"},{name:"isV4",type:"bool",internalType:"bool"},{name:"hookVerified",type:"bool",internalType:"bool"},{name:"withdrawn",type:"bool",internalType:"bool"},{name:"feeRecipient",type:"address",internalType:"address"},{name:"token0",type:"address",internalType:"address"},{name:"token1",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"}],internalType:"struct HoodLockLPLocker.Lock"}],stateMutability:"view"},{name:"hookAllowed",type:"function",inputs:[{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"isUnlocked",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"keeper",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"lock",type:"function",inputs:[{name:"manager",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"},{name:"unlockTime",type:"uint256",internalType:"uint256"},{name:"feeRecipient",type:"address",internalType:"address"},{name:"acceptUnverifiedHook",type:"bool",internalType:"bool"},{name:"maxCollectFeeBps",type:"uint16",internalType:"uint16"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"lockIdOf",type:"function",inputs:[{name:"",type:"address",internalType:"address"},{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"locksOf",type:"function",inputs:[{name:"owner",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"name",type:"function",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{name:"nextLockId",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"onERC721Received",type:"function",inputs:[{name:"",type:"address",internalType:"address"},{name:"",type:"address",internalType:"address"},{name:"",type:"uint256",internalType:"uint256"},{name:"",type:"bytes",internalType:"bytes"}],outputs:[{name:"",type:"bytes4",internalType:"bytes4"}],stateMutability:"pure"},{name:"owedEth",type:"function",inputs:[{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"paused",type:"function",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"pendingAdmin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"pendingCut",type:"function",inputs:[{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"pushOwedEth",type:"function",inputs:[{name:"who",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"rescueERC20",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"to",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"returnStrayPosition",type:"function",inputs:[{name:"manager",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"},{name:"to",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"revenueSink",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"setCollectFeeBps",type:"function",inputs:[{name:"bps",type:"uint16",internalType:"uint16"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeRecipient",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"recipient",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeVault",type:"function",inputs:[{name:"vault",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"setFixedFee",type:"function",inputs:[{name:"fee_",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"setHookAllowed",type:"function",inputs:[{name:"hook",type:"address",internalType:"address"},{name:"allowed",type:"bool",internalType:"bool"}],outputs:[],stateMutability:"nonpayable"},{name:"setKeeper",type:"function",inputs:[{name:"k",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"setPaused",type:"function",inputs:[{name:"p",type:"bool",internalType:"bool"}],outputs:[],stateMutability:"nonpayable"},{name:"setRevenueSink",type:"function",inputs:[{name:"sink",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"sweepPendingCut",type:"function",inputs:[{name:"token",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"transferAdmin",type:"function",inputs:[{name:"next",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"transferLockOwnership",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"withdraw",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"to",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"}]}};var _e=v,Ie=S(v.vesting.address),Ee=["hoodlock_read","hoodlock_record","hoodlock_vesting_status","hoodlock_public"],Le=["hoodlock_vesting_create","hoodlock_vesting_claim","hoodlock_vesting_transfer","hoodlock_withdraw","hoodlock_extend","hoodlock_transfer_lock","hoodlock_set_fee_recipient","hoodlock_collect","hoodlock_airdrop_sweep","hoodlock_recover","hoodlock_admin"],C=k("Decimal record ID, including zero for token locks, burns, vesting and airdrops. LP IDs start at one."),le={id:C,kind:{type:"string",enum:["token","v2","v3","v4"],description:"Lock type: token = ERC-20 token lock; v2 = V2 LP-token lock; v3 or v4 = Uniswap v3 or v4 liquidity-position (NFT) lock."}},Y=(1n<<256n)-1n;function m(e,n,t=256){if(typeof e!="string"||!/^\d+$/.test(e))throw new o(`${n} must be a decimal base-unit string.`);let a=BigInt(e);if(a>(1n<<BigInt(t))-1n)throw new o(`${n} exceeds uint${t}.`);return a}function f(e,n,t=!1){let a=q(e,`Provide a valid ${n} address.`);return t?a:j(a,`${n} must not be the zero address.`)}function ce(e,n){let t=m(e,n);if(t===0n||t===Y)throw new o(`${n} must be a positive exact amount, never unlimited.`);return t}function Q(e){if(typeof e!="string"||!Object.hasOwn(v,e))throw new o("Choose locker, burner, vesting, airdrop or liquidityLocker.");return e}function B(e){return v[e].abi}function h(e){return S(v[e].address)}function D(e,n){let t=B(e).find(a=>a.type==="function"&&a.name===n);if(!t)throw new o(`No published HoodLock ${e}.${n} function exists.`);return t}async function p(e,n,t,a=[]){return e.clientFor(l).readContract({address:h(n),abi:B(n),functionName:t,args:a})}function F(e,n){if(Array.isArray(e))return Object.fromEntries(n.map((t,a)=>[t,e[a]]));if(e&&typeof e=="object")return e;throw new o("HoodLock returned an invalid record. Retry the chain read.")}var me=["owner","token","amount","unlockTime","withdrawn"],fe=["owner","unlockTime","collectFeeBps","isV4","hookVerified","withdrawn","feeRecipient","token0","token1","tokenId"],ee=["creator","start","beneficiary","cliff","token","end","total","claimed"],K=["creator","endTime","maxClaims","token","claims","swept","merkleRoot","total","remaining"];function x(e){return JSON.parse(JSON.stringify(e,(n,t)=>typeof t=="bigint"?t.toString():t))}async function g(e,n){let t=f(n,"token",!0);if(t===U)return N;let a=e.clientFor(l),[i,s]=await Promise.all([a.readContract({address:t,abi:X,functionName:"symbol"}),a.readContract({address:t,abi:X,functionName:"decimals"})]);if(!Number.isInteger(s)||s<0||s>255)throw new o("Token decimals are invalid.");return{address:t,chainId:l,symbol:R(String(i)),decimals:s}}function _(e,n,t="current owner"){if(f(e,t)!==S(n))throw new o(`This wallet is not the ${t}.`)}function z(e){if(e.withdrawn)throw new o("This HoodLock lock was already withdrawn.")}function Z(e){if(!["token","v2","v3","v4"].includes(String(e.kind)))throw new o("Provide kind: token, v2, v3 or v4.");return e.kind==="token"||e.kind==="v2"?"locker":"liquidityLocker"}async function H(e,n,t){return F(await p(e,n,"getLock",[t]),n==="locker"?me:fe)}function G(e,n){if((e.kind==="v3"||e.kind==="v4")&&!!n.isV4!=(e.kind==="v4"))throw new o("Lock kind disagrees with the on-chain NFT version.")}async function T(e,n,t,a,i,s,r=0n,u=[]){let d=e.unsignedTx({to:h(t),chainId:l,value:r.toString(),data:ye({abi:B(t),functionName:a,args:i}),description:s}),c=await e.preview([...u,d],S(n));return{txs:c.txs,preview:c,summary:s,contract:h(t),chainId:l,method:a,arguments:x(i)}}function w(e,n,t,a,i){return{name:n,inputSchema:{type:"object",properties:t,required:a,additionalProperties:!1},async execute(s,r){try{return await i(s,S(r))}catch(u){throw new o(e.plainError(u))}}}}async function Te(e,n,t){let a=f(n.token,"token"),i=m(n.start,"start",64),s=m(n.cliff,"cliff",64),r=m(n.end,"end",64),[u,d,c,y,M]=await Promise.all([e.clientFor(l).getBlock(),p(e,"vesting","fee"),p(e,"vesting","MIN_DURATION"),p(e,"vesting","MAX_BATCH"),g(e,a)]);if(i>s||s>r||r<=i)throw new o("Vesting dates require start <= cliff <= end and end > start.");if(r>=1000000000000n||r<=u.timestamp+BigInt(String(c))+30n)throw new o("Vesting end must be Unix seconds, more than 24 hours plus a 30-second inclusion margin after the current block.");let I=n.entries!==void 0;if(I&&(n.beneficiary!==void 0||n.amount!==void 0))throw new o("Use entries or beneficiary/amount, not both.");if(I&&(!Array.isArray(n.entries)||n.entries.length===0||n.entries.length>Number(y)))throw new o(`Provide between 1 and ${String(y)} vesting entries.`);let L=I?n.entries:[{beneficiary:n.beneficiary,amount:n.amount}],P=L.map(A=>f(A?.beneficiary,"beneficiary")),O=L.map(A=>ce(A?.amount,"amount"));if(O.some(A=>A>=1n<<128n))throw new o("Each vesting amount must fit uint128.");let $=O.reduce((A,de)=>A+de,0n);if($>=Y)throw new o("Vesting total exceeds the exact approval range.");let E=BigInt(String(d))*BigInt(L.length);if(n.maxFee!==void 0&&E>m(n.maxFee,"maxFee"))throw new o("Live vesting fee exceeds maxFee.");let re=I?"createMany":"create",oe=I?[a,P,O,i,s,r]:[a,P[0],O[0],i,s,r],ue=`Create ${L.length} irrevocable HoodLock vesting schedule(s): ${$} ${M.symbol} base units (${a}, decimals ${M.decimals}) for ${P.join(", ")}; start ${i}, cliff ${s}, end ${r}; exact fee ${E} wei. Creator cannot cancel or recover principal. Recorded totals use tokens actually received; preserve mined schedule IDs.`;return W(e,{...await T(e,t,"vesting",re,oe,ue,E,[e.approval(a,h("vesting"),$.toString(),l)]),token:M,amount:$.toString(),fee:{token:N,amount:E.toString()}},h("vesting"),E)}async function te(e,n){let t=F(await p(e,"vesting","getSchedule",[n]),ee);if(BigInt(String(t.total))===0n)throw new o("No HoodLock vesting schedule exists for this ID.");let[a,i]=await Promise.all([p(e,"vesting","claimable",[n]),g(e,t.token)]);return{id:n.toString(),contract:h("vesting"),chainId:l,schedule:x(t),token:i,claimable:String(a),remaining:(BigInt(String(t.total))-BigInt(String(t.claimed))).toString(),proofUrl:`https://hoodlock.tech/proof/vesting/${n}`}}async function ne(e,n,t){let a=n.account===void 0?t:f(n.account,"account"),i=n.role??"beneficiary";if(!["beneficiary","creator","token"].includes(String(i)))throw new o("Choose beneficiary, creator or token for vesting discovery.");let r=await p(e,"vesting",i==="creator"?"schedulesByCreator":i==="token"?"schedulesByToken":"schedulesByBeneficiary",[a]),u=[];for(let d of[...new Set(r.map(String))]){let c=await te(e,BigInt(d));(i!=="beneficiary"||f(c.schedule.beneficiary,"beneficiary")===a)&&u.push(c)}return{account:a,role:i,schedules:u,summary:`Found ${u.length} HoodLock vesting schedule(s); completed schedules remain visible.`}}async function J(e,n,t){return n.id===void 0?ne(e,n,t):te(e,m(n.id,"id"))}function Oe(e){return{tools:[w(e,"hoodlock_vesting_create",{token:{...b,description:"Address of the ERC-20 token to vest. The wallet approves and transfers it to the vesting contract."},beneficiary:{...b,description:"Address that receives the vested tokens (single schedule). Use this with amount, or use entries, not both."},amount:k('Amount of the token to vest, in base units of that token (read its decimals). Example: "1000000000000000000" = 1 token at 18 decimals. Single schedule only.'),entries:{type:"array",minItems:1,maxItems:200,description:"Batch of schedules sharing one token, start, cliff and end. Use this instead of beneficiary and amount.",items:{type:"object",properties:{beneficiary:{...b,description:"Address that receives this entry's vested tokens."},amount:k('Amount of the token vested to this beneficiary, in base units of that token (read its decimals). Example: "1000000000000000000" = 1 token at 18 decimals.')},required:["beneficiary","amount"],additionalProperties:!1}},start:k('Vesting start time in Unix seconds, as a decimal string. Example: "1800000000".'),cliff:k("Cliff time in Unix seconds, between start and end; nothing is claimable before it."),end:k("Vesting end time in Unix seconds, more than 24 hours after the current block."),maxFee:k("Optional cap on the total creation fee in wei of native ETH (1 ETH = 10^18 wei); the call fails if the live fee is higher.")},["token","start","cliff","end"],(t,a)=>Te(e,t,a)),w(e,"hoodlock_vesting_status",{id:C,account:{...b,description:"Address to list vesting schedules for when no id is given. Defaults to the connected wallet."},role:{type:"string",enum:["beneficiary","creator","token"],description:"How account relates to the schedules when listing: beneficiary (default), creator, or the vested token address."}},[],(t,a)=>J(e,t,a)),...["claim","transfer"].map(t=>w(e,`hoodlock_vesting_${t}`,{id:C,...t==="transfer"?{beneficiary:{...b,description:"Address of the new beneficiary who takes over the remaining vesting rights."}}:{}},t==="transfer"?["id","beneficiary"]:["id"],async(a,i)=>{let s=m(a.id,"id"),r=F(await p(e,"vesting","getSchedule",[s]),ee);if(_(r.beneficiary,i,"current beneficiary"),t==="transfer"){let c=f(a.beneficiary,"beneficiary");return T(e,i,"vesting","transferBeneficiary",[s,c],`Transfer beneficiary rights for vesting #${s} from ${i} to ${c}. Remaining tokens follow the schedule; creator cannot revoke it.`)}let u=BigInt(String(await p(e,"vesting","claimable",[s])));if(u===0n)throw new o("Nothing is claimable yet; check the cliff and previous claims.");let d=await g(e,r.token);return{...await T(e,i,"vesting","claim",[s],`Claim currently ${u} ${d.symbol} base units from vesting #${s} to current beneficiary ${i}; live inclusion time determines the final amount.`),token:d,amount:u.toString()}})),...["withdraw","extend","transfer_lock","set_fee_recipient"].map(t=>w(e,`hoodlock_${t}`,{...le,...t==="withdraw"?{to:{...b,description:"Address that receives the withdrawn position NFT or LP; defaults to the connected wallet. Token locks withdraw only to the owner."}}:t==="extend"?{unlockTime:k('New unlock time in Unix seconds, later than the current unlock time and in the future (at most 100 years). Example: "1800000000".')}:t==="transfer_lock"?{owner:{...b,description:"Address of the new lock owner, who can withdraw after maturity."}}:{recipient:{...b,description:"Address that receives future collected fees for this NFT lock."}}},["kind","id",...t==="extend"?["unlockTime"]:t==="transfer_lock"?["owner"]:t==="set_fee_recipient"?["recipient"]:[]],async(a,i)=>{let s=Z(a),r=m(a.id,"id"),u=await H(e,s,r);_(u.owner,i),z(u),G(a,u);let d=(await e.clientFor(l).getBlock()).timestamp;if(t==="withdraw"){if(d<BigInt(String(u.unlockTime)))throw new o(`Still locked until Unix ${String(u.unlockTime)}; expiry never withdraws automatically.`);let y=a.to===void 0?i:f(a.to,"withdrawal recipient");if(s==="locker"&&y!==i)throw new o("Token locks withdraw only to the current owner; omit to or use this wallet.");return{...await T(e,i,s,"withdraw",s==="locker"?[r]:[r,y],`Withdraw mature HoodLock ${a.kind} lock #${r} to ${y}; ${s==="locker"?`${String(u.amount)} token base units`:`position NFT #${String(u.tokenId)}`}.`),record:x(u),recipient:y}}if(t==="extend"){let y=m(a.unlockTime,"unlockTime");if(y<=BigInt(String(u.unlockTime))||y<=d||y>d+3153600000n)throw new o("New unlockTime must extend the lock, be future Unix seconds, and at most 100 years away.");return T(e,i,s,"extend",[r,y],`Extend HoodLock ${a.kind} lock #${r} from ${String(u.unlockTime)} to ${y}; it cannot be shortened.`)}if(t==="set_fee_recipient"){if(s!=="liquidityLocker")throw new o("Only NFT locks have a fee recipient.");let y=f(a.recipient,"fee recipient");return T(e,i,s,"setFeeRecipient",[r,y],`Redirect future collected fees for HoodLock NFT lock #${r} to ${y}; ownership and maturity stay the same.`)}let c=f(a.owner,"new owner");return T(e,i,s,"transferLockOwnership",[r,c],`Transfer HoodLock ${a.kind} lock #${r} to ${c}; that owner can withdraw after maturity.${s==="liquidityLocker"?" The contract also resets feeRecipient to the new owner.":""}`)})),w(e,"hoodlock_collect",{id:C,ids:{type:"array",minItems:1,maxItems:50,description:"Several NFT lock ids to collect in one batch, 1 to 50 distinct. Use this or id, not both.",items:C}},[],async(t,a)=>{if(t.id===void 0==(t.ids===void 0))throw new o("Provide exactly one of id or ids.");let i=t.ids===void 0?[m(t.id,"id")]:ie(t.ids),s=[];for(let u of i){let d=await H(e,"liquidityLocker",u);_(d.owner,a),z(d),s.push({id:u.toString(),...x(d)})}let r=t.ids!==void 0;return{...await T(e,a,"liquidityLocker",r?"collectMany":"collect",r?[i]:[i[0]],`Collect fees for HoodLock NFT lock(s) ${i.join(", ")}; each lock's frozen collectFeeBps goes to HoodLock, the net to its recorded feeRecipient. Liquidity stays locked.${r?" Individual locks may fail; inspect Collected/CollectFailed events and balances.":""} Native ETH may become owedEth if delivery fails; refused ERC-20 fee shares fall back to the lock owner.`),locks:s}}),w(e,"hoodlock_airdrop_sweep",{id:C},["id"],async(t,a)=>{let i=m(t.id,"id"),s=F(await p(e,"airdrop","getAirdrop",[i]),K);if(_(s.creator,a,"airdrop creator"),s.swept)throw new o("This airdrop was already swept.");if(BigInt(String(s.endTime))===0n)throw new o("A zero-deadline airdrop can never be swept.");if((await e.clientFor(l).getBlock()).timestamp<BigInt(String(s.endTime)))throw new o("This airdrop has not ended; wait until endTime.");let r=await g(e,s.token);return{...await T(e,a,"airdrop","sweep",[i],`Recover the ${String(s.remaining)} remaining ${r.symbol} base units from expired airdrop #${i} to creator ${a}. This closes claims permanently.`),token:r,amount:String(s.remaining)}}),w(e,"hoodlock_record",{id:C,kind:{type:"string",enum:["token","v2","v3","v4","burn","vesting","airdrop"],description:"Record type: token, v2, v3 or v4 lock; or a burn, vesting schedule or airdrop. The id is looked up in that registry."}},["kind","id"],async(t,a)=>{let i=m(t.id,"id");if(t.kind==="vesting")return J(e,t,a);if(t.kind==="burn"){let d=F(await p(e,"burner","getBurn",[i]),["burner","token","amount","timestamp"]);if(BigInt(String(d.amount))===0n)throw new o("No HoodLock burn exists for this ID.");return{id:i.toString(),chainId:l,contract:h("burner"),record:x(d),token:await g(e,d.token),totalSupplyReduced:!1,proofUrl:`https://hoodlock.tech/proof/burn/${i}`}}if(t.kind==="airdrop"){let d=F(await p(e,"airdrop","getAirdrop",[i]),K);if(String(d.creator).toLowerCase()===U)throw new o("No HoodLock airdrop exists for this ID.");return{id:i.toString(),chainId:l,contract:h("airdrop"),record:x(d),token:await g(e,d.token),listURI:R(String(await p(e,"airdrop","listURI",[i])))}}let s=Z(t),r=await H(e,s,i);if(String(r.owner).toLowerCase()===U)throw new o("No HoodLock lock exists for this ID.");G(t,r);let u=s==="locker"?{token:await g(e,r.token)}:{token0:await g(e,r.token0),token1:await g(e,r.token1)};return{id:i.toString(),chainId:l,contract:h(s),record:x(r),...u,proofUrl:`https://hoodlock.tech/proof/${s==="locker"?"lock":"position"}/${i}`}}),w(e,"hoodlock_read",{contract:{type:"string",enum:Object.keys(v),description:"Which HoodLock contract to read: locker, burner, vesting, airdrop or liquidityLocker."},method:{type:"string",enum:be(),description:"Name of a published view or pure function on that contract."},arguments:{type:"array",maxItems:6,description:"Function arguments in ABI order: addresses as 0x strings, uint values as decimal strings, booleans as true/false.",items:{}}},["contract","method"],async t=>{let a=Q(t.contract),i=D(a,String(t.method));if(i.stateMutability!=="view"&&i.stateMutability!=="pure")throw new o("hoodlock_read accepts only published view/pure functions.");let s=V(i,t.arguments??[]),r=await p(e,a,i.name,s);return{chainId:l,contract:h(a),method:i.name,value:i.outputs.length===1&&i.outputs[0].type==="string"?R(String(r)):x(r),outputs:i.outputs,summary:"Raw contract view; owner indexes may include previous owners. Check current records. No transaction was built."}}),w(e,"hoodlock_recover",{method:{type:"string",enum:["claimOwedEth","claimOwedEthTo","pushOwedEth","sweepPendingCut"],description:"Recovery call on the liquidity locker: claimOwedEth (to you), claimOwedEthTo (to a given address), pushOwedEth (send a holder's owed ETH to that holder), sweepPendingCut (protocol cut of a token)."},arguments:{type:"array",maxItems:1,description:"ABI-ordered arguments: one address for claimOwedEthTo (recipient), pushOwedEth (holder) or sweepPendingCut (token); empty for claimOwedEth.",items:b}},["method"],async(t,a)=>{let i=String(t.method);if(!["claimOwedEth","claimOwedEthTo","pushOwedEth","sweepPendingCut"].includes(i))throw new o("Choose a published deferred ETH or protocol-cut recovery method.");let s=V(D("liquidityLocker",i),t.arguments??[]),r=i==="claimOwedEthTo"||i==="pushOwedEth"?f(s[0],"recipient"):a,u=i==="sweepPendingCut"?await p(e,"liquidityLocker","pendingCut",s):await p(e,"liquidityLocker","owedEth",[i==="pushOwedEth"?r:a]);if(BigInt(String(u))===0n)throw new o("There is no deferred balance to recover.");let d=i==="sweepPendingCut"?String(await p(e,"liquidityLocker","feeVault")):r;return T(e,a,"liquidityLocker",i,s,`HoodLock ${i}: recover ${String(u)} base units to ${d}; only the contract-recorded credit or cut can move.`)}),w(e,"hoodlock_admin",{contract:{type:"string",enum:Object.keys(v),description:"Which HoodLock contract to administer: locker, burner, vesting, airdrop or liquidityLocker. Only its admin or role holder can succeed."},method:{type:"string",enum:[...new Set(Object.values(se).flat())],description:"Admin function to call; must be supported on the chosen contract."},arguments:{type:"array",maxItems:3,description:"Function arguments in ABI order: addresses as 0x strings, uint values as decimal strings, booleans as true/false.",items:{}}},["contract","method"],(t,a)=>we(e,t,a))],positions:async t=>((await ne(e,{},t)).schedules??[]).filter(s=>BigInt(s.remaining)>0n).map(s=>({module:"hoodlock",id:`vesting:${s.id}`,chainId:l,assets:[{token:s.token,amount:s.remaining}],description:`HoodLock vesting #${s.id}: ${s.claimable} base units claimable; ${s.remaining} remain for current beneficiary ${t}.`}))}}function ie(e){if(!Array.isArray(e)||e.length===0||e.length>50)throw new o("Provide between 1 and 50 distinct decimal IDs.");let n=e.map(t=>m(t,"id"));if(new Set(n.map(String)).size!==n.length)throw new o("Duplicate IDs are not allowed in a collection batch.");return n}function be(){return[...new Set(Object.keys(v).flatMap(e=>B(e).filter(n=>n.type==="function"&&["view","pure"].includes(n.stateMutability)&&n.name!=="onERC721Received").map(n=>n.name)))]}function ae(e,n){if(e.type.endsWith("[]")){if(!Array.isArray(n)||n.length>200)throw new o("Function arrays must contain at most 200 items.");return n.map(t=>ae({...e,type:e.type.slice(0,-2)},t))}if(e.type==="address")return f(n,e.name??"address",!0);if(e.type==="bool"){if(typeof n!="boolean")throw new o("Function boolean arguments must be booleans.");return n}if(/^uint\d*$/.test(e.type))return m(n,e.name??"integer",Number(e.type.slice(4)||256));throw new o(`Unsupported published argument type ${e.type}.`)}function V(e,n){if(!Array.isArray(n)||n.length!==e.inputs.length)throw new o(`${e.name} needs ${e.inputs.length} ABI-ordered arguments.`);return e.inputs.map((t,a)=>ae(t,n[a]))}var se={locker:["setAdmin","setFee","setFeeCollector"],burner:["setAdmin","setFee","setFeeCollector"],vesting:["setFee","setFeeCollector","transferAdmin","acceptAdmin","withdrawFees"],airdrop:["setFee","setFeeCollector","transferAdmin","acceptAdmin","withdrawFees"],liquidityLocker:["setCollectFeeBps","setFixedFee","setFeeVault","setRevenueSink","setPaused","setHookAllowed","setKeeper","transferAdmin","acceptAdmin","adminCollect","rescueERC20","returnStrayPosition"]};async function we(e,n,t){let a=Q(n.contract),i=String(n.method);if(!se[a].includes(i))throw new o(`No supported admin ${a}.${i} route exists.`);let s=V(D(a,i),n.arguments??[]),r=i==="acceptAdmin"?"pendingAdmin":i==="withdrawFees"?"feeCollector":"admin",u=await p(e,a,r);if(i==="adminCollect"&&S(String(u))!==t?_(await p(e,a,"keeper"),t,"admin or keeper"):_(u,t,r),i==="adminCollect"&&ie(s[0].map(String)),i==="returnStrayPosition"){let d=f(s[0],"manager"),c=["V3_POSITIONS","V4_POSITIONS"];if(!(await Promise.all(c.map(M=>p(e,"liquidityLocker",M)))).some(M=>S(String(M))===d))throw new o("Only a configured position manager can return a stray NFT.");if(BigInt(String(await p(e,"liquidityLocker","lockIdOf",s.slice(0,2))))!==0n)throw new o("An actively locked NFT cannot be rescued.")}return T(e,t,a,i,s,`HoodLock ${a}.${i}(${JSON.stringify(x(s))}) by authorized ${r} ${t}. This changes protocol configuration or recovers only assets allowed by the contract. Existing custody rights cannot be overridden.`)}export{_e as a,Ie as b,Ee as c,Le as d,m as e,Oe as f};
@@ -0,0 +1 @@
1
+ import{p as se}from"./G4IX4CYN.js";import{a as ee,c as te,d as ie,e as oe,h as re,j as L}from"./7GL547YZ.js";import{b as F,c as X,e as J,g as N,h as x,i as P,j as n,k as f,l as T,m as S,n as V,o as Z,p as A,q as C,s as $,t as D}from"./UMY6SP7C.js";import{a as B,h as K,j as Q,k as W}from"./CJMVRV34.js";import{a as p}from"./XSD5NL7J.js";import{concatHex as he,encodeAbiParameters as ne,getAddress as z,keccak256 as E,parseAbi as we,toHex as ye,zeroHash as Ae}from"viem";var ae=ee,de=we(["function getVersion() view returns (string)"]),M=z("0x8004A169FB4a3325136EB29fA0ceB6D2e539a432"),q=z("0x8004BAa17C55a88189AE136b182e5fdA19dE9b63");function Ce(s,e){let o=S(s),c=S(o.caps),g=n(o.gasLimit,32),i=n(c.maxLpFeePips,24);if(e!==ae||o.schemaHash!==ae||o.codeHash!==K(D).codeHash||o.implementation!==D||n(o.kind,8)!==1n||n(o.phaseMask,8)!==1n||f(o.failOpen)||g<400000n||g>2000000n||i>50000n||n(c.maxQuoteTakePips,24)!==0n||n(c.maxSubjectTakeBps,16)!==0n)throw new p("Hookr agent gate admission, schema or execution caps differ from the supported fail-closed BEFORE_SWAP profile. Review the deployment before entry.");return f(o.feeOnly),{...o,caps:c}}async function ke(s,e,o,c=[],g=D,i=!0){let d=await L(s,e,g,{requireAdmission:i}),t=d.profile,r=(m,l=[])=>A(s,t.address,t.abi,m,l,e),[k,u,w,a,v,H,le,pe,ce,ge,j,U]=await Promise.all([r("configSchemaHash"),Promise.resolve(d.admission),r(t.healthFunction),r("identity"),r("reputation"),r("poolManager"),r("isAgent",[o]),r("linkOf",[o]),r("MIN_ADVISORY_GAS"),r("MAX_ADVISORY_GAS"),A(s,M,de,"getVersion",[],e),A(s,q,de,"getVersion",[],e)]),ue=u;if(k!==t.schemaHash)throw new p("Hookr gate schema changed during the read.");if(a!==M||v!==q||H!==$||n(ce)!==400000n||n(ge)!==2000000n)throw new p("Hookr gate dependencies or gas limits differ from the reviewed profile.");let O=m=>{if(typeof m!="string"||!t.supportsAge&&new TextEncoder().encode(m).length>32)throw new p("Hookr registry version read is incomplete.");let l=ne([{type:"string"}],[m]),h=(l.length-2)/2;return E(t.supportsAge&&h>256?he([l.slice(0,514),ye(h,{size:32})]):l)},R,G;if(t.supportsAge){let[m,l,h]=await Promise.all([r("pins"),s.getCode({address:ie,blockNumber:e}),s.getCode({address:oe,blockNumber:e})]),y=S(m);for(let I of["identityCode","identityVersion","reputationCode","reputationVersion"])x(y[I]);if(!l||l==="0x"||!h||h==="0x")throw new p("Hookr registry runtime is unavailable.");R=E(l)!==y.identityCode||O(j)!==y.identityVersion,G=E(h)!==y.reputationCode||O(U)!==y.reputationVersion}else R=O(j)!==B.gateVersions.identity,G=O(U)!==B.gateVersions.reputation;let _=R||G,b=f(w),Y=T(pe,2),me=await Promise.all(c.map(async m=>{let[l,h]=T(await r("reviewerSet",[m]),2);if(!Array.isArray(l)||l.length===0||l.length>32||typeof h!="string")throw new p("Reviewer set is unregistered or unavailable. Supply an existing registered bytes32 set ID.");let y=l.map(I=>z(String(I)));if(y.some(I=>BigInt(I)===0n)||E(ne([{type:"address[]"},{type:"string"}],[y,h]))!==m.toLowerCase())throw new p("Hookr reviewer set does not match its registered ID.");return{id:m,clients:y,tag:h}})),fe=t.supportsAge?n(await r("ageOf",[o])).toString():null;return{address:t.address,listed:t.listed,warnings:d.warnings,age:fe,suspended:t.supportsAge?b:null,healthy:!b&&!_,healthyIdentityOnly:!b&&!R,healthyForScores:!b&&!_,retired:b,registryVersionDrift:_,schemaHash:k,admission:V(ue),identity:M,reputation:q,walletAgent:f(le),link:{linked:f(Y[0]),agentId:n(Y[1]).toString()},reviewerSets:me,reviewerSetsComplete:!1,reviewerSetsNotice:"Only explicitly requested registered set IDs are read. This is not an enumeration. No reviewed Priors alias is configured; provide a registered bytes32 set ID.",termsSchema:{flags:"uint16",minScore:"uint32",tierScore:"uint32",tierPips:"uint24",reviewers:"bytes32",...t.supportsAge?{minAge:"uint32"}:{}},defaults:{flags:"1",minScore:"0",tierScore:"0",tierPips:"0",reviewers:Ae,...t.supportsAge?{minAge:"0"}:{}},maxTierPips:"50000",minGas:"400000",maxGas:"2000000"}}async function Oe(s,e,o,c,g){if(BigInt(g)===0n)return{gated:!1,admissionRequiredForCollectOrRemove:!1};let{profile:i,warnings:d}=await L(s,e,g,{requireAdmission:!1}),[t,r,k]=await Promise.all([A(s,i.address,i.abi,"terms",[C,o],e),A(s,i.address,i.abi,"explainLiquidity",[C,o,c],e),A(s,i.address,i.abi,i.healthFunction,[],e)]),u=S(t),[w,a]=T(r,2);if(!f(u.bound)||u.launcher!==c)throw new p("Hookr gate is not bound to this family Launcher.");for(let[v,H]of[["flags",16],["minScore",32],["tierScore",32],["tierPips",24]])n(u[v],H);return x(u.reviewers),i.supportsAge&&n(u.minAge,32),{gated:!0,gate:i.address,warnings:d,suspended:i.supportsAge?f(k):null,terms:V(u),retired:f(k),liquidityEntryAllowed:f(w),entryReason:n(a,8).toString(),admissionRequiredForCollectOrRemove:!1}}function Re(s){return[{name:"hookr_agent_gate",inputSchema:{type:"object",additionalProperties:!1,properties:{...X,gate:{type:"string",description:"Optional checksummed gate address; defaults to the current gate."},poolId:{...F,description:"Optional pool ID as 0x plus 64 hex digits to read its frozen agent gate and terms."},reviewerSetIds:{type:"array",maxItems:8,uniqueItems:!0,items:F,description:"Up to eight distinct registered reviewer set IDs to read, each as 0x plus 64 hex digits."}}},execute:async(e,o)=>{if(J(e,["blockNumber","gate","poolId","reviewerSetIds"]),s.network==="testnet")throw new p("Hookr gate reads are configured only on mainnet, chain 4663.");let c=e.reviewerSetIds??[];if(!Array.isArray(c)||c.length>8)throw new p("Provide at most eight distinct reviewer set IDs.");let g=c.map(x);if(new Set(g).size!==g.length)throw new p("Provide distinct reviewer set IDs.");let i=s.clientFor(4663),d=await Q(i,N(e)),t=e.gate===void 0?te:P(e.gate),r=null;if(e.poolId!==void 0){let w=S(await A(i,C,Z("rootV1"),"poolConfig",[x(e.poolId)],d.number)),a=P(w.advisory);if(BigInt(a)===0n)throw new p("Hookr pool is unknown or has no agent gate.");if(e.gate!==void 0&&t!==a)throw new p("The supplied gate does not match the pool advisory at this block.");t=a,r=w}let k=r?await se(i,d.number,o,x(e.poolId),t,r,g):await ke(i,d.number,o,g,t,!1),u=null;if(r){let w=re(t,k.schemaHash),a=S(await A(i,t,w.abi,"terms",[C,x(e.poolId)],d.number));f(a.bound),P(a.launcher),P(a.curatedRouter),x(a.reviewers);for(let[v,H]of[["flags",16],["minScore",32],["tierScore",32],["tierPips",24]])n(a[v],H);w.supportsAge&&n(a.minAge,32),u=V(a)}return await W(i,d),{chainId:4663,blockNumber:d.number.toString(),blockHash:d.hash,timestamp:d.timestamp.toString(),...k,poolTerms:u}}}]}export{ae as a,Ce as b,ke as c,Oe as d,Re as e};
@@ -1 +1 @@
1
- import{b as me,c as Pe}from"./Z3IBPCY4.js";import{d as xe,e as Se,g as Ee,h as Oe,i as a,w as Ne}from"./Y64GFBTA.js";import{o as pe}from"./GYPMUYB5.js";import{a as B}from"./Z7FGEWO2.js";import{a as Te}from"./43LI5NKJ.js";import{a as ee}from"./66F5ZH34.js";import{c as Y,j as ve}from"./NWNYJ26T.js";import{b as Ce}from"./IX3GZMTM.js";import{b as $,j as De}from"./TI727O2H.js";import{a as t}from"./XSD5NL7J.js";import{decodeFunctionData as _e,erc20Abi as Fe}from"viem";var Ge="https://api.relay.link",He="Relay requires an authorized API key for this endpoint. Ask the operator to configure a valid OAK_RELAY_API_KEY on the server with access to this resource; never pass keys in tool arguments.",oe=class extends Error{},k="0x0000000000000000000000000000000000000000",Ye=60,Be=30,n=De[$].relay.depository.address.toLowerCase(),te="0x59916da825d2d2ec1bf878d71c88826f6633ecca",ie=new Map([[1,{chainId:"ethereum",depository:n}],[10,{chainId:"optimism",depository:n}],[25,{chainId:"cronos",depository:te}],[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:te}],[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:te}],[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:te}],[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}]]),at=Object.freeze(["robinhood",...Array.from(ie.values(),e=>e.chainId)]);function dt(e){return e===$?"robinhood":ie.get(e)?.chainId}function ut(e){return ie.get(e)?.depository}function M(e){return ve(e,"Provide a token or wallet address.")}function g(e){let i=M(e);return i===B?k:i}function w(e,i){return M(e)===M(i)}function f(e){if(typeof e!="string")throw new t("Provide a decimal base-unit amount string.");return Ce(e),e}function ne(e){let i=f(e);if(BigInt(i)<=0n)throw new t("Provide a positive base-unit amount.");return i}function Ke(e){if(typeof e!="number"||!Number.isSafeInteger(e)||e<=0)throw new t("Provide a positive integer origin chain ID.");return e}function Me(e,i){if(typeof e!="number"||!Number.isSafeInteger(e)||e<=0)throw new t(`${i} is missing or invalid.`);return e}async function K(e,i,c,r,m){let s=a(c);if(s.chainId!==r||g(s.address)!==m||typeof s.symbol!="string"||!/^[A-Za-z0-9._-]{1,32}$/.test(s.symbol))throw new t("Relay quote token metadata does not match the requested chain and address.");if(m===k){if(s.decimals!==18)throw new t("Native token decimals must be 18.");return{address:B,chainId:r,symbol:s.symbol,decimals:18}}let b=`${r}:${m}`,h=i.get(b);if(h===void 0){let d=await e.clientFor(r).readContract({address:m,abi:Fe,functionName:"decimals"}),I=typeof d=="bigint"?Number(d):d;if(typeof I!="number"||!Number.isInteger(I)||I<0||I>255)throw new t("Could not read valid ERC-20 decimals() on-chain.");h=I,i.set(b,h)}return{address:m,chainId:r,symbol:s.symbol,decimals:h}}async function Qe(e,i,c,r,m,s,b){if(c.swap===void 0)return[];let h=a(c.swap),d=a(h.from);if(d.chainId!==m)throw new t("The swap prerequisite token must be on the origin chain.");let I=await K(e,i,d,m,g(d.address)),F=s===k?B:s;if(w(I.address,F))throw new t("The swap prerequisite must use a different input token.");let he=ne(h.amountIn),y=h.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 S=await e.quoteSwap({from:I.address,to:F,amountIn:he,...y===void 0?{}:{slippageBps:y}},r);if(BigInt(f(S.expiresAt))<=BigInt(Math.floor(Date.now()/1e3)))throw new t("The swap prerequisite quote expired. Request a fresh quote.");if(BigInt(f(S.minAmountOut))<BigInt(b))throw new t("The swap prerequisite minimum cannot cover the bridge amount.");let q=await e.buildSwap(S.quoteId,r);if(!("txs"in q)||!q.txs.length)throw new t("The swap prerequisite must return unsigned transactions.");if(q.txs.some(p=>p.chainId!==m))throw new t("The injected swap coordinator does not support this origin chain.");return q.txs.map(p=>e.unsignedTx(p))}async function Ve(e,i,c){Te(c);let r=Ke(i.originChainId);if(r===$)throw new t("Inbound bridging requires an origin chain other than 4663.");let m=ie.get(r);if(!m)throw new t("Relay inbound does not support this origin chain.");if(i.destinationChainId!==void 0&&i.destinationChainId!==$)throw new t("Inbound bridge destination must be chain 4663.");let s=g(i.originCurrency??B),b=g(i.destinationCurrency??B),h=M(i.recipient??c),d=ne(i.amount),I=i.minAmountOut===void 0?void 0:f(i.minAmountOut),F=i.slippageBps===void 0?me:i.slippageBps;if(pe("0",F),await e.clientFor(r).getChainId()!==r)throw new t("The RPC chain does not match the inbound origin chain.");let y=new Map,S=await Qe(e,y,i,c,r,s,d),q;try{let o=await e.http(`${Ge}/quote/v2`,{method:"POST",headers:{"content-type":"application/json","user-agent":"oak-core/0.1.0"},body:JSON.stringify(xe({user:c,recipient:h,originChainId:r,destinationChainId:$,originCurrency:s,destinationCurrency:b,amount:d,tradeType:"EXACT_INPUT",includeProtocolData:!0,...s===k?{}:{explicitDeposit:!0}}))});if(o.status===401||o.status===403)throw new oe(He);if(!o.ok)throw new Error("Relay HTTP failure.");q=await o.json()}catch(o){throw o instanceof oe?new t(o.message):o instanceof t&&typeof o.reason=="string"&&o.reason.startsWith("keyed_")?new t(o.message):new t("Relay quote request failed. Please try again.")}let p=a(q);Se(p);let le=Ee(p.fees);if(typeof p.requestId!="string"||!/^0x[0-9a-fA-F]{64}$/.test(p.requestId))throw new t("Relay returned an invalid request ID.");let E=p.requestId,ye=`/intents/status/v3?requestId=${E}`,U=a(p.details);if(!w(U.sender,c)||!w(U.recipient,h))throw new t("Relay quote sender or recipient does not match the request.");let fe=a(U.currencyIn),re=a(U.currencyOut),O=await K(e,y,fe.currency,r,s),N=await K(e,y,re.currency,$,b);if(f(fe.amount)!==d)throw new t("Relay quote input amount does not match the request.");let P=ne(re.amount),D=ne(re.minimumAmount);if(BigInt(D)>BigInt(P))throw new t("Relay quote minimum output exceeds the expected output.");if(I!==void 0){if(D!==I)throw new t("Relay order minimum must exactly match minAmountOut. Request a new quote.")}else{let o=pe(P,F);if(BigInt(D)<BigInt(o))throw Pe(P,D)}let we=a(a(p.fees).relayer),Ie=a(we.currency),Q=await K(e,y,Ie,r,g(Ie.address)),ge={token:Q,amount:f(we.amount)},be=a(U.refundCurrency),Ue=a(be.currency),L=await K(e,y,Ue,r,s),se=f(be.amount),j=a(a(p.protocol).v2);if(typeof j.orderId!="string"||!/^0x[0-9a-fA-F]{64}$/.test(j.orderId))throw new t("Relay returned an invalid order ID.");let V=j.orderId.toLowerCase(),W=a(j.paymentDetails),R=M(W.depository);if(W.chainId!==m.chainId||R!==m.depository||g(W.currency)!==s||f(W.amount)!==d)throw new t("Relay payment details do not match the origin chain depository and input.");let z=a(j.orderData),C=a(z.output);if(C.chainId!=="robinhood"||!Array.isArray(C.calls)||C.calls.length!==0||!Array.isArray(C.payments)||C.payments.length!==1)throw new t("Relay order output does not match destination chain 4663.");let J=a(C.payments[0]);if(!w(J.recipient,h)||g(J.currency)!==b||f(J.minimumAmount)!==D||f(J.expectedAmount)!==P)throw new t("Relay order output payment does not match the quoted recipient and amounts.");let ae=Me(C.deadline,"Relay order output deadline");if(!Array.isArray(z.inputs)||!z.inputs.length)throw new t("Relay order has no inputs.");let X=[],de=[];for(let o of z.inputs){let u=a(o),T=a(u.payment);if(T.chainId!==m.chainId||g(T.currency)!==s||f(T.amount)!==d||!Array.isArray(u.refunds)||!u.refunds.length)throw new t("Relay order input does not match the quoted input.");for(let x of u.refunds){let l=a(x);if(!w(l.recipient,c))throw new t("Relay refund recipient does not match the agent wallet. Request a new quote.");if(X.push(Me(l.deadline,"Relay order refund deadline")),de.push(f(l.minimumAmount)),!(l.chainId===m.chainId?w(l.recipient,c)&&g(l.currency)===s:l.chainId==="robinhood"&&g(l.currency)===b))throw new t("Relay order refund terms do not match the sender or recipient.")}}let Ae=Math.min(ae,...X),G=0,$e=()=>{let o=Math.floor(Date.now()/1e3),u=G||o+Ye;if(Ae-o<=Be)throw new t("Relay order deadline is expired or too soon to sign safely. Request a new quote.");if(G=Math.min(u,Ae-Be),G<=o)throw new t("Relay quote expired before signing. Request a new quote.")};if($e(),!Array.isArray(p.steps)||!p.steps.length)throw new t("Relay returned no origin transactions.");let v=[];for(let o of p.steps){let u=a(o);if(u.kind!=="transaction"||u.requestId!==E||!Array.isArray(u.items)||!u.items.length)throw new t("Relay returned an unsupported origin step.");for(let T of u.items){let x=a(T),l=a(x.data),ce=a(x.check);if(x.status!=="incomplete"||l.chainId!==r||!w(l.from,c))throw new t("Relay transaction does not match the origin chain and sender.");if(ce.method!=="GET"||ce.endpoint!==ye)throw new t("Relay status endpoint does not match the request ID.");v.push(e.unsignedTx({to:M(l.to),data:l.data,value:f(l.value),chainId:r,description:`Relay inbound deposit for request ${E}; destination chain 4663.`}))}}if(!v.length)throw new t("Relay returned no origin transactions.");if(s===k&&v.length!==1)throw new t("Relay native deposit must be a single depositNative transaction.");if(s!==k&&v.length>2)throw new t("Relay ERC-20 deposit allows at most one exact-amount approval before depositErc20.");for(let o of v.slice(0,-1)){if(!o.data.toLowerCase().startsWith("0x095ea7b3"))throw new t("Relay returned an unsupported prerequisite transaction.");let u=_e({abi:Fe,data:o.data});if(u.functionName!=="approve")throw new t("Relay returned an invalid approval.");let[T,x]=u.args;if(s===k||!w(o.to,s)||!w(T,R)||x!==BigInt(d)||o.value!=="0")throw new t("Relay approval must authorize the exact input amount for the origin depository.");o.description=`Approve exactly ${e.formatAmount(d,O.decimals)} ${O.symbol} (${d} base units of ${s}) for ${R} on chain ${r}.`}let _=v[v.length-1],H=s===k,Z=H?"depositNative":"depositErc20",Re=H?"depositNative(address,bytes32)":"depositErc20(address,address,uint256,bytes32)";if(!w(_.to,R)||_.value!==(H?d:"0")||!(H?/^0x[0-9a-fA-F]{136}$/:/^0x[0-9a-fA-F]{264}$/).test(_.data))throw new t(`Relay deposit transaction does not target the origin depository with ${Z} calldata.`);let A;try{A=_e({abi:Oe,data:_.data})}catch{throw new t(`Relay deposit transaction must call ${Re}.`)}if(A.functionName!==Z)throw new t(`Relay deposit transaction must call ${Re}.`);let Le=A.args[0],je=A.functionName==="depositErc20"?A.args[3]:A.args[1];if(A.functionName==="depositErc20"&&(!w(A.args[1],s)||A.args[2]!==BigInt(d)))throw new t("Relay depositErc20 token or amount does not match the quoted input.");if(!w(Le,c)||je.toLowerCase()!==V)throw new t(`Relay ${Z} depositor or orderId does not match the wallet and quoted protocol.v2.orderId.`);_.description=`Relay inbound ${Z} for order ${V} (request ${E}); destination chain 4663.`;let ue=H?[]:await Ne(e,s,R,d,r,c);for(let[o,u]of ue.entries())u.description=ue.length===2&&o===0?`Reset the existing ${O.symbol} allowance for ${R} on chain ${r} to zero.`:`Approve exactly ${e.formatAmount(d,O.decimals)} ${O.symbol} (${d} base units of ${s}) for ${R} on chain ${r}.`;let ke=[...S,...ue,_],qe=await e.preview(ke,c);$e();let ze=qe.changes.map(o=>{let u=o.amount.startsWith("-");return`${u?"-":""}${e.formatAmount(u?o.amount.slice(1):o.amount,o.token.decimals)} ${o.token.symbol} (${o.token.address}, chain ${o.token.chainId})`});return{txs:ke,preview:qe,requestId:E,orderId:V,orderData:z,depository:R,originChainId:r,destinationChainId:$,recipient:h,amountIn:{token:O,amount:d},amountOut:{token:N,amount:P},minAmountOut:D,relayerFee:ge,fees:p.fees,...le,refundCurrency:{token:L,amount:se,minimumAmounts:de},orderDeadline:String(ae),refundDeadlines:X.map(String),expiresAt:String(G),status:"pending",statusEndpoint:ye,summary:`${le.feeDisclosure} ${S.length?"Swap prerequisite first, then ":""}Relay inbound from chain ${r} to chain 4663 for ${h}; expected ${e.formatAmount(P,N.decimals)} ${N.symbol}, minimum ${e.formatAmount(D,N.decimals)} ${N.symbol} (${N.address}). Quoted relay fee ${e.formatAmount(ge.amount,Q.decimals)} ${Q.symbol} (${Q.address}, chain ${r}); output is net of quoted fees. Order ${V} (request ${E}); output deadline ${ae}, refund deadlines ${X.join(", ")}, quote expires ${G}. Refund terms: details.refundCurrency quotes ${e.formatAmount(se,L.decimals)} ${L.symbol} (${se} base units) on chain ${L.chainId} (${L.address}), but protocol.v2 order refund floor is ${de.join(", ")} base units. ${ze.join("; ")}. Unsigned origin transactions only; destination fulfillment remains pending. Track with relay_status; timeout or refund is not fulfillment.`}}var ct=e=>({tools:[{name:"relay_bridge_in",inputSchema:{type:"object",additionalProperties:!1,required:["originChainId","amount"],properties:{originChainId:{type:"integer",minimum:1,description:"Origin chain ID."},destinationChainId:{const:$,description:"Destination chain ID; must be 4663."},originCurrency:{...Y,description:"Origin token address; defaults to the origin chain\u2019s native token."},destinationCurrency:{...Y,description:"Destination token address; defaults to native ETH."},amount:ee('Origin token amount in base units using its decimals (USDG has 6: "1000000" = 1 USDG).'),minAmountOut:ee('Minimum destination token amount in base units using its decimals (USDG has 6: "1000000" = 1 USDG).'),slippageBps:{type:"integer",minimum:0,maximum:9999,default:me,description:"Slippage in basis points (50 = 0.5%)."},recipient:{...Y,description:"Destination recipient address; defaults to your wallet."},swap:{type:"object",additionalProperties:!1,required:["from","amountIn"],properties:{from:{type:"object",additionalProperties:!1,required:["address","chainId","symbol","decimals"],properties:{address:{...Y,description:"Input token address."},chainId:{type:"integer",minimum:1,description:"Input token chain ID."},symbol:{type:"string",description:"Input token symbol."},decimals:{type:"integer",minimum:0,maximum:255,description:"Input token decimal places."}},description:"Token supplied to the origin swap."},amountIn:ee('Swap input token amount in base units using its decimals (USDG has 6: "1000000" = 1 USDG).'),slippageBps:{type:"integer",minimum:0,maximum:1e4,description:"Slippage in basis points (50 = 0.5%)."}},description:"Optional origin swap before bridging."}}},async execute(i,c){try{return await Ve(e,i,c)}catch(r){throw new t(e.plainError(r))}}}]});export{at as a,dt as b,ut as c,ct as d};
1
+ import{b as me,c as Pe}from"./Z3IBPCY4.js";import{d as xe,e as Se,g as Ee,h as Oe,i as a,w as Ne}from"./Y64GFBTA.js";import{o as pe}from"./TTBB6EFN.js";import{a as B}from"./7WXAS54T.js";import{a as Te}from"./43LI5NKJ.js";import{a as ee}from"./66F5ZH34.js";import{c as Y,j as ve}from"./NWNYJ26T.js";import{b as Ce}from"./IX3GZMTM.js";import{b as $,j as De}from"./EWZFZUVF.js";import{a as t}from"./XSD5NL7J.js";import{decodeFunctionData as _e,erc20Abi as Fe}from"viem";var Ge="https://api.relay.link",He="Relay requires an authorized API key for this endpoint. Ask the operator to configure a valid OAK_RELAY_API_KEY on the server with access to this resource; never pass keys in tool arguments.",oe=class extends Error{},k="0x0000000000000000000000000000000000000000",Ye=60,Be=30,n=De[$].relay.depository.address.toLowerCase(),te="0x59916da825d2d2ec1bf878d71c88826f6633ecca",ie=new Map([[1,{chainId:"ethereum",depository:n}],[10,{chainId:"optimism",depository:n}],[25,{chainId:"cronos",depository:te}],[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:te}],[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:te}],[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:te}],[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}]]),at=Object.freeze(["robinhood",...Array.from(ie.values(),e=>e.chainId)]);function dt(e){return e===$?"robinhood":ie.get(e)?.chainId}function ut(e){return ie.get(e)?.depository}function M(e){return ve(e,"Provide a token or wallet address.")}function g(e){let i=M(e);return i===B?k:i}function w(e,i){return M(e)===M(i)}function f(e){if(typeof e!="string")throw new t("Provide a decimal base-unit amount string.");return Ce(e),e}function ne(e){let i=f(e);if(BigInt(i)<=0n)throw new t("Provide a positive base-unit amount.");return i}function Ke(e){if(typeof e!="number"||!Number.isSafeInteger(e)||e<=0)throw new t("Provide a positive integer origin chain ID.");return e}function Me(e,i){if(typeof e!="number"||!Number.isSafeInteger(e)||e<=0)throw new t(`${i} is missing or invalid.`);return e}async function K(e,i,c,r,m){let s=a(c);if(s.chainId!==r||g(s.address)!==m||typeof s.symbol!="string"||!/^[A-Za-z0-9._-]{1,32}$/.test(s.symbol))throw new t("Relay quote token metadata does not match the requested chain and address.");if(m===k){if(s.decimals!==18)throw new t("Native token decimals must be 18.");return{address:B,chainId:r,symbol:s.symbol,decimals:18}}let b=`${r}:${m}`,h=i.get(b);if(h===void 0){let d=await e.clientFor(r).readContract({address:m,abi:Fe,functionName:"decimals"}),I=typeof d=="bigint"?Number(d):d;if(typeof I!="number"||!Number.isInteger(I)||I<0||I>255)throw new t("Could not read valid ERC-20 decimals() on-chain.");h=I,i.set(b,h)}return{address:m,chainId:r,symbol:s.symbol,decimals:h}}async function Qe(e,i,c,r,m,s,b){if(c.swap===void 0)return[];let h=a(c.swap),d=a(h.from);if(d.chainId!==m)throw new t("The swap prerequisite token must be on the origin chain.");let I=await K(e,i,d,m,g(d.address)),F=s===k?B:s;if(w(I.address,F))throw new t("The swap prerequisite must use a different input token.");let he=ne(h.amountIn),y=h.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 S=await e.quoteSwap({from:I.address,to:F,amountIn:he,...y===void 0?{}:{slippageBps:y}},r);if(BigInt(f(S.expiresAt))<=BigInt(Math.floor(Date.now()/1e3)))throw new t("The swap prerequisite quote expired. Request a fresh quote.");if(BigInt(f(S.minAmountOut))<BigInt(b))throw new t("The swap prerequisite minimum cannot cover the bridge amount.");let q=await e.buildSwap(S.quoteId,r);if(!("txs"in q)||!q.txs.length)throw new t("The swap prerequisite must return unsigned transactions.");if(q.txs.some(p=>p.chainId!==m))throw new t("The injected swap coordinator does not support this origin chain.");return q.txs.map(p=>e.unsignedTx(p))}async function Ve(e,i,c){Te(c);let r=Ke(i.originChainId);if(r===$)throw new t("Inbound bridging requires an origin chain other than 4663.");let m=ie.get(r);if(!m)throw new t("Relay inbound does not support this origin chain.");if(i.destinationChainId!==void 0&&i.destinationChainId!==$)throw new t("Inbound bridge destination must be chain 4663.");let s=g(i.originCurrency??B),b=g(i.destinationCurrency??B),h=M(i.recipient??c),d=ne(i.amount),I=i.minAmountOut===void 0?void 0:f(i.minAmountOut),F=i.slippageBps===void 0?me:i.slippageBps;if(pe("0",F),await e.clientFor(r).getChainId()!==r)throw new t("The RPC chain does not match the inbound origin chain.");let y=new Map,S=await Qe(e,y,i,c,r,s,d),q;try{let o=await e.http(`${Ge}/quote/v2`,{method:"POST",headers:{"content-type":"application/json","user-agent":"oak-core/0.1.0"},body:JSON.stringify(xe({user:c,recipient:h,originChainId:r,destinationChainId:$,originCurrency:s,destinationCurrency:b,amount:d,tradeType:"EXACT_INPUT",includeProtocolData:!0,...s===k?{}:{explicitDeposit:!0}}))});if(o.status===401||o.status===403)throw new oe(He);if(!o.ok)throw new Error("Relay HTTP failure.");q=await o.json()}catch(o){throw o instanceof oe?new t(o.message):o instanceof t&&typeof o.reason=="string"&&o.reason.startsWith("keyed_")?new t(o.message):new t("Relay quote request failed. Please try again.")}let p=a(q);Se(p);let le=Ee(p.fees);if(typeof p.requestId!="string"||!/^0x[0-9a-fA-F]{64}$/.test(p.requestId))throw new t("Relay returned an invalid request ID.");let E=p.requestId,ye=`/intents/status/v3?requestId=${E}`,U=a(p.details);if(!w(U.sender,c)||!w(U.recipient,h))throw new t("Relay quote sender or recipient does not match the request.");let fe=a(U.currencyIn),re=a(U.currencyOut),O=await K(e,y,fe.currency,r,s),N=await K(e,y,re.currency,$,b);if(f(fe.amount)!==d)throw new t("Relay quote input amount does not match the request.");let P=ne(re.amount),D=ne(re.minimumAmount);if(BigInt(D)>BigInt(P))throw new t("Relay quote minimum output exceeds the expected output.");if(I!==void 0){if(D!==I)throw new t("Relay order minimum must exactly match minAmountOut. Request a new quote.")}else{let o=pe(P,F);if(BigInt(D)<BigInt(o))throw Pe(P,D)}let we=a(a(p.fees).relayer),Ie=a(we.currency),Q=await K(e,y,Ie,r,g(Ie.address)),ge={token:Q,amount:f(we.amount)},be=a(U.refundCurrency),Ue=a(be.currency),L=await K(e,y,Ue,r,s),se=f(be.amount),j=a(a(p.protocol).v2);if(typeof j.orderId!="string"||!/^0x[0-9a-fA-F]{64}$/.test(j.orderId))throw new t("Relay returned an invalid order ID.");let V=j.orderId.toLowerCase(),W=a(j.paymentDetails),R=M(W.depository);if(W.chainId!==m.chainId||R!==m.depository||g(W.currency)!==s||f(W.amount)!==d)throw new t("Relay payment details do not match the origin chain depository and input.");let z=a(j.orderData),C=a(z.output);if(C.chainId!=="robinhood"||!Array.isArray(C.calls)||C.calls.length!==0||!Array.isArray(C.payments)||C.payments.length!==1)throw new t("Relay order output does not match destination chain 4663.");let J=a(C.payments[0]);if(!w(J.recipient,h)||g(J.currency)!==b||f(J.minimumAmount)!==D||f(J.expectedAmount)!==P)throw new t("Relay order output payment does not match the quoted recipient and amounts.");let ae=Me(C.deadline,"Relay order output deadline");if(!Array.isArray(z.inputs)||!z.inputs.length)throw new t("Relay order has no inputs.");let X=[],de=[];for(let o of z.inputs){let u=a(o),T=a(u.payment);if(T.chainId!==m.chainId||g(T.currency)!==s||f(T.amount)!==d||!Array.isArray(u.refunds)||!u.refunds.length)throw new t("Relay order input does not match the quoted input.");for(let x of u.refunds){let l=a(x);if(!w(l.recipient,c))throw new t("Relay refund recipient does not match the agent wallet. Request a new quote.");if(X.push(Me(l.deadline,"Relay order refund deadline")),de.push(f(l.minimumAmount)),!(l.chainId===m.chainId?w(l.recipient,c)&&g(l.currency)===s:l.chainId==="robinhood"&&g(l.currency)===b))throw new t("Relay order refund terms do not match the sender or recipient.")}}let Ae=Math.min(ae,...X),G=0,$e=()=>{let o=Math.floor(Date.now()/1e3),u=G||o+Ye;if(Ae-o<=Be)throw new t("Relay order deadline is expired or too soon to sign safely. Request a new quote.");if(G=Math.min(u,Ae-Be),G<=o)throw new t("Relay quote expired before signing. Request a new quote.")};if($e(),!Array.isArray(p.steps)||!p.steps.length)throw new t("Relay returned no origin transactions.");let v=[];for(let o of p.steps){let u=a(o);if(u.kind!=="transaction"||u.requestId!==E||!Array.isArray(u.items)||!u.items.length)throw new t("Relay returned an unsupported origin step.");for(let T of u.items){let x=a(T),l=a(x.data),ce=a(x.check);if(x.status!=="incomplete"||l.chainId!==r||!w(l.from,c))throw new t("Relay transaction does not match the origin chain and sender.");if(ce.method!=="GET"||ce.endpoint!==ye)throw new t("Relay status endpoint does not match the request ID.");v.push(e.unsignedTx({to:M(l.to),data:l.data,value:f(l.value),chainId:r,description:`Relay inbound deposit for request ${E}; destination chain 4663.`}))}}if(!v.length)throw new t("Relay returned no origin transactions.");if(s===k&&v.length!==1)throw new t("Relay native deposit must be a single depositNative transaction.");if(s!==k&&v.length>2)throw new t("Relay ERC-20 deposit allows at most one exact-amount approval before depositErc20.");for(let o of v.slice(0,-1)){if(!o.data.toLowerCase().startsWith("0x095ea7b3"))throw new t("Relay returned an unsupported prerequisite transaction.");let u=_e({abi:Fe,data:o.data});if(u.functionName!=="approve")throw new t("Relay returned an invalid approval.");let[T,x]=u.args;if(s===k||!w(o.to,s)||!w(T,R)||x!==BigInt(d)||o.value!=="0")throw new t("Relay approval must authorize the exact input amount for the origin depository.");o.description=`Approve exactly ${e.formatAmount(d,O.decimals)} ${O.symbol} (${d} base units of ${s}) for ${R} on chain ${r}.`}let _=v[v.length-1],H=s===k,Z=H?"depositNative":"depositErc20",Re=H?"depositNative(address,bytes32)":"depositErc20(address,address,uint256,bytes32)";if(!w(_.to,R)||_.value!==(H?d:"0")||!(H?/^0x[0-9a-fA-F]{136}$/:/^0x[0-9a-fA-F]{264}$/).test(_.data))throw new t(`Relay deposit transaction does not target the origin depository with ${Z} calldata.`);let A;try{A=_e({abi:Oe,data:_.data})}catch{throw new t(`Relay deposit transaction must call ${Re}.`)}if(A.functionName!==Z)throw new t(`Relay deposit transaction must call ${Re}.`);let Le=A.args[0],je=A.functionName==="depositErc20"?A.args[3]:A.args[1];if(A.functionName==="depositErc20"&&(!w(A.args[1],s)||A.args[2]!==BigInt(d)))throw new t("Relay depositErc20 token or amount does not match the quoted input.");if(!w(Le,c)||je.toLowerCase()!==V)throw new t(`Relay ${Z} depositor or orderId does not match the wallet and quoted protocol.v2.orderId.`);_.description=`Relay inbound ${Z} for order ${V} (request ${E}); destination chain 4663.`;let ue=H?[]:await Ne(e,s,R,d,r,c);for(let[o,u]of ue.entries())u.description=ue.length===2&&o===0?`Reset the existing ${O.symbol} allowance for ${R} on chain ${r} to zero.`:`Approve exactly ${e.formatAmount(d,O.decimals)} ${O.symbol} (${d} base units of ${s}) for ${R} on chain ${r}.`;let ke=[...S,...ue,_],qe=await e.preview(ke,c);$e();let ze=qe.changes.map(o=>{let u=o.amount.startsWith("-");return`${u?"-":""}${e.formatAmount(u?o.amount.slice(1):o.amount,o.token.decimals)} ${o.token.symbol} (${o.token.address}, chain ${o.token.chainId})`});return{txs:ke,preview:qe,requestId:E,orderId:V,orderData:z,depository:R,originChainId:r,destinationChainId:$,recipient:h,amountIn:{token:O,amount:d},amountOut:{token:N,amount:P},minAmountOut:D,relayerFee:ge,fees:p.fees,...le,refundCurrency:{token:L,amount:se,minimumAmounts:de},orderDeadline:String(ae),refundDeadlines:X.map(String),expiresAt:String(G),status:"pending",statusEndpoint:ye,summary:`${le.feeDisclosure} ${S.length?"Swap prerequisite first, then ":""}Relay inbound from chain ${r} to chain 4663 for ${h}; expected ${e.formatAmount(P,N.decimals)} ${N.symbol}, minimum ${e.formatAmount(D,N.decimals)} ${N.symbol} (${N.address}). Quoted relay fee ${e.formatAmount(ge.amount,Q.decimals)} ${Q.symbol} (${Q.address}, chain ${r}); output is net of quoted fees. Order ${V} (request ${E}); output deadline ${ae}, refund deadlines ${X.join(", ")}, quote expires ${G}. Refund terms: details.refundCurrency quotes ${e.formatAmount(se,L.decimals)} ${L.symbol} (${se} base units) on chain ${L.chainId} (${L.address}), but protocol.v2 order refund floor is ${de.join(", ")} base units. ${ze.join("; ")}. Unsigned origin transactions only; destination fulfillment remains pending. Track with relay_status; timeout or refund is not fulfillment.`}}var ct=e=>({tools:[{name:"relay_bridge_in",inputSchema:{type:"object",additionalProperties:!1,required:["originChainId","amount"],properties:{originChainId:{type:"integer",minimum:1,description:"Origin chain ID."},destinationChainId:{const:$,description:"Destination chain ID; must be 4663."},originCurrency:{...Y,description:"Origin token address; defaults to the origin chain\u2019s native token."},destinationCurrency:{...Y,description:"Destination token address; defaults to native ETH."},amount:ee('Origin token amount in base units using its decimals (USDG has 6: "1000000" = 1 USDG).'),minAmountOut:ee('Minimum destination token amount in base units using its decimals (USDG has 6: "1000000" = 1 USDG).'),slippageBps:{type:"integer",minimum:0,maximum:9999,default:me,description:"Slippage in basis points (50 = 0.5%)."},recipient:{...Y,description:"Destination recipient address; defaults to your wallet."},swap:{type:"object",additionalProperties:!1,required:["from","amountIn"],properties:{from:{type:"object",additionalProperties:!1,required:["address","chainId","symbol","decimals"],properties:{address:{...Y,description:"Input token address."},chainId:{type:"integer",minimum:1,description:"Input token chain ID."},symbol:{type:"string",description:"Input token symbol."},decimals:{type:"integer",minimum:0,maximum:255,description:"Input token decimal places."}},description:"Token supplied to the origin swap."},amountIn:ee('Swap input token amount in base units using its decimals (USDG has 6: "1000000" = 1 USDG).'),slippageBps:{type:"integer",minimum:0,maximum:1e4,description:"Slippage in basis points (50 = 0.5%)."}},description:"Optional origin swap before bridging."}}},async execute(i,c){try{return await Ve(e,i,c)}catch(r){throw new t(e.plainError(r))}}}]});export{at as a,dt as b,ut as c,ct as d};
@@ -0,0 +1 @@
1
+ import{c as b,d as L,j as P}from"./7GL547YZ.js";import{l as q,m as T,n as N,p as F}from"./BIFANUTV.js";import{e as S,g as D,j as A,l as E,n as H,p as h}from"./UMY6SP7C.js";import{i as C,j as O,k as R}from"./CJMVRV34.js";import{a}from"./XSD5NL7J.js";import{encodeAbiParameters as B,encodeFunctionData as U,getAddress as X,keccak256 as V,zeroAddress as j}from"viem";var z=[{type:"function",name:"ownerOf",stateMutability:"view",inputs:[{name:"agentId",type:"uint256"}],outputs:[{name:"",type:"address"}]},{type:"function",name:"getAgentWallet",stateMutability:"view",inputs:[{name:"agentId",type:"uint256"}],outputs:[{name:"",type:"address"}]}],Y=t=>typeof t=="string"&&/^0x[0-9a-fA-F]{40}$/.test(t),G={blockNumber:{type:"string",pattern:"^(0|[1-9][0-9]*)$",maxLength:20,description:"Optional named Robinhood Chain block; otherwise the head is captured once."}};function W(t){if(!Y(t))throw new a("The identity registry returned an incomplete wallet address.");return X(t)}function Q(t){let o=S(t,["action","agentId","blockNumber"],["action"]);if(o.action!=="link"&&o.action!=="unlink")throw new a('Choose action "link" with an agentId or "unlink".');if(o.action==="link"){if(!Object.hasOwn(o,"agentId"))throw new a("Provide an agentId to link.");return{action:o.action,agentId:q(o.agentId),blockNumber:o.blockNumber}}if(Object.hasOwn(o,"agentId"))throw new a("Unlink takes no agentId.");return{action:o.action,blockNumber:o.blockNumber}}async function Z(t,o,w){let e=Q(o);if(N(t,4663),t.network==="testnet")throw new a("Hookr gate identity actions require Robinhood Chain 4663.");let s=T(w,"connected wallet"),r=t.clientFor(4663),n=await O(r,D({blockNumber:e.blockNumber}));await C(r,n.number,[b]);let i=await P(r,n.number,b);if(i.profile.address!==b)throw new a("Hookr resolved a different gate target than the current reviewed address.");let[l,c]=await Promise.all([r.getCode({address:s,blockNumber:n.number}),h(r,i.profile.address,i.profile.abi,"linkOf",[s],n.number)]);if(l&&l!=="0x")throw new a("Hookr link actions support plain wallets only; contract and delegated wallets are not accepted.");let y=E(c,2);if(typeof y[0]!="boolean")throw new a("Hookr link status read is incomplete.");let m=y[0],v=A(y[1]),x={chainId:4663,blockNumber:n.number.toString(),blockHash:n.hash,gate:i.profile.address,wallet:s};if(e.action==="unlink"){let K=m?[t.unsignedTx({to:i.profile.address,data:U({abi:i.profile.abi,functionName:"unlink"}),value:"0",chainId:4663,description:`Unlink ${s} from the Hookr agent gate.`})]:[];return await R(r,n),{txs:K,inputs:[],summary:m?`Unlink wallet ${s} from Hookr gate ${i.profile.address}; current linked agent ID ${v}. Hookr retains the first linkedAt time for each wallet and agent ID if linked again later.`:`Wallet ${s} is already unlinked from Hookr gate ${i.profile.address}; no transaction is needed.`,facts:{...x,action:"unlink",wasLinked:m,previousAgentId:v.toString(),noOp:!m}}}let d=e.agentId,[u,k]=await Promise.all([h(r,L,z,"ownerOf",[d],n.number),h(r,L,z,"getAgentWallet",[d],n.number)]),$=W(u),p=W(k),g=$===s;if(!g&&!(p===s))throw new a("This plain wallet must own the ERC-8004 ID or be its current agent wallet. To use it as the agent wallet, set it with erc8004_set_wallet first.");let f=m&&v===d,I=A(await h(r,i.profile.address,i.profile.abi,"linkedAt",[s,d],n.number),64);if(m&&!f)throw new a(`This wallet is already linked to agent ID ${v}; unlink it before linking a different ID.`);let J=f?[]:[t.unsignedTx({to:i.profile.address,data:U({abi:i.profile.abi,functionName:"link",args:[d]}),value:"0",chainId:4663,description:`Link ERC-8004 agent ID ${d} to plain wallet ${s} on Hookr gate ${i.profile.address}.`})];await R(r,n);let M=I===0n?"The age clock will start when this transaction links; it has not started yet.":`The retained first linkedAt time is ${I}; unlinking and linking this same ID does not reset Hookr's age clock.`;return{txs:J,summary:f?`Wallet ${s} is already linked to ERC-8004 agent ID ${d} on Hookr gate ${i.profile.address}; no transaction is needed. ${M}`:`Link ERC-8004 agent ID ${d} to wallet ${s} on Hookr gate ${i.profile.address}. Authorization at block ${n.number}: ${g?"wallet owns the ID":"wallet is the registered agent wallet"}. ${M}`,inputs:[],facts:{...x,action:"link",agentId:d.toString(),owner:$,registeredAgentWallet:p,authorization:g?"owner":"agentWallet",wasLinked:m,firstLinkedAt:I.toString(),ageStartsNow:I===0n,noOp:f}}}async function ee(t,o,w){let e=S(o,["reviewer","tag","blockNumber"],["reviewer","tag"]);if(N(t,4663),t.network==="testnet")throw new a("Hookr reviewer sets require Robinhood Chain 4663.");let s=T(w,"connected wallet"),r=T(e.reviewer,"reviewer");if(e.reviewer!==r)throw new a("Provide reviewer as an EIP-55 checksummed address.");if(r===j)throw new a("Reviewer must be a nonzero checksummed address.");let n=t.clientFor(4663),i=D({blockNumber:e.blockNumber}),l=await O(n,i);await C(n,l.number,[b]);let c=await P(n,l.number,b);if(c.profile.address!==b)throw new a("Hookr resolved a different gate target than the current reviewed address.");let y=await n.getCode({address:s,blockNumber:l.number});if(y&&y!=="0x")throw new a("Hookr reviewer registration supports plain signing wallets only; contract and delegated wallets are not accepted.");let[m,v]=await Promise.all([h(n,c.profile.address,c.profile.abi,"MAX_REVIEWERS",[],l.number),h(n,c.profile.address,c.profile.abi,"MAX_TAG_LENGTH",[],l.number)]),x=A(m,256),d=A(v,256);if(x<1n||x>32n||d>256n)throw new a("Hookr reviewer limits differ from the supported bounded profile.");let u=F(e.tag,"reviewer tag",Number(d));if(new TextEncoder().encode(u).length>Number(d))throw new a(`Reviewer tag must use at most ${d} UTF-8 bytes.`);let k=V(B([{type:"address[]"},{type:"string"}],[[r],u])),$=await h(n,c.profile.address,c.profile.abi,"reviewerSet",[k],l.number),p=E($,2);if(!Array.isArray(p[0])||typeof p[1]!="string")throw new a("Hookr reviewer set read is incomplete.");let g=p[0].map(W),_=g.length===0&&p[1]==="";if(g.length>32||g.some(I=>I===j)||!_&&(g.length===0||V(B([{type:"address[]"},{type:"string"}],[g,p[1]]))!==k))throw new a("Hookr reviewer set does not match the requested ABI-encoded ID.");let f=g.length===1&&g[0]===r&&p[1]===u?[]:[t.unsignedTx({to:c.profile.address,data:U({abi:c.profile.abi,functionName:"registerReviewers",args:[[r],u]}),value:"0",chainId:4663,description:`Register Hookr reviewer set ${k}: reviewer ${r}, tag ${JSON.stringify(u)}.`})];return await R(n,l),{txs:f,inputs:[],summary:f.length?`Register one Hookr reviewer ${r} with tag ${JSON.stringify(u)}. Reviewer set ID ${k}; Hookr gate ${c.profile.address}; chain 4663 block ${l.number}.`:`Hookr reviewer set ${k} already contains reviewer ${r} and tag ${JSON.stringify(u)}; no transaction is needed.`,facts:{chainId:4663,blockNumber:l.number.toString(),blockHash:l.hash,gate:c.profile.address,connectedWallet:s,reviewer:r,tag:u,tagUtf8Bytes:new TextEncoder().encode(u).length,maxTagUtf8Bytes:d.toString(),maxReviewers:x.toString(),id:k,noOp:f.length===0}}}var te={type:"object",additionalProperties:!1,properties:{action:{type:"string",enum:["link","unlink"],description:"Choose link to attach an ERC-8004 agent ID or unlink to remove the current link."},agentId:{type:"string",pattern:"^(0|[1-9][0-9]*)$",maxLength:78,description:"ERC-8004 agent ID as a decimal string; required for link and omitted for unlink."},...G},required:["action"]},ne={type:"object",additionalProperties:!1,properties:{reviewer:{type:"string",pattern:"^0x[0-9a-fA-F]{40}$",description:"Exactly one nonzero checksummed reviewer address."},tag:{type:"string",maxLength:256,description:"Reviewer tag, bounded by the current gate maximum UTF-8 byte length."},...G},required:["reviewer","tag"]};function le(t){return[{name:"hookr_agent_link",inputSchema:te,execute:async(o,w)=>{let e=await Z(t,o,w);return e.txs.length?{txs:e.txs,preview:await t.preview(e.txs,w),summary:e.summary,facts:H(e.facts)}:{txs:[],summary:e.summary,facts:H(e.facts)}}},{name:"hookr_reviewer_set",inputSchema:ne,execute:async(o,w)=>{let e=await ee(t,o,w);return e.txs.length?{txs:e.txs,preview:await t.preview(e.txs,w),summary:e.summary,facts:H(e.facts)}:{txs:[],summary:e.summary,facts:H(e.facts)}}}]}export{Z as a,ee as b,le as c};
@@ -1 +1 @@
1
- import{a as d,d as T,e as p}from"./VXCGMALF.js";import{a as g}from"./66F5ZH34.js";import{b as r}from"./TI727O2H.js";import{a as u}from"./XSD5NL7J.js";import{encodeFunctionData as k,erc20Abi as v,getAddress as m,parseAbi as I}from"viem";var e={router:m("0x888888888889758F76e7103c6CbF23ABbF58F946"),oracle:m("0x5542be50420E88dd7D5B4a3D488FA6ED82F6DAc2"),market:m("0xc2b89e6eca583e2c232201ac557e9be58af55f4c"),pt:m("0x6982e39521A070a3C40782548bfBED6Dc8F566ef"),yt:m("0xF35Ee6bd9A93fE42BC7e628BFC4DDbdc6DE1f615"),expiry:1805932800n},$="(uint8 swapType,address extRouter,bytes extCalldata,bool needScale)",C="(uint256 salt,uint256 expiry,uint256 nonce,uint8 orderType,address token,address YT,address maker,address receiver,uint256 makingAmount,uint256 lnImpliedRate,uint256 failSafeRate,bytes permit)",w=`(${C} order,bytes signature,uint256 makingAmount)`,D=`(address limitRouter,uint256 epsSkipMarket,${w}[] normalFills,${w}[] flashFills,bytes optData)`,M=`(address tokenIn,uint256 netTokenIn,address tokenMintSy,address pendleSwap,${$} swapData)`,O=`(address tokenOut,uint256 minTokenOut,address tokenRedeemSy,address pendleSwap,${$} swapData)`,U="(uint256 guessMin,uint256 guessMax,uint256 guessOffchain,uint256 maxIteration,uint256 eps)",b=I([`function swapExactTokenForPt(address receiver,address market,uint256 minPtOut,${U} guessPtOut,${M} input,${D} limit) payable returns (uint256 netPtOut,uint256 netSyFee,uint256 netSyInterm)`,`function swapExactPtForToken(address receiver,address market,uint256 exactPtIn,${O} output,${D} limit) returns (uint256 netTokenOut,uint256 netSyFee,uint256 netSyInterm)`,`function redeemPyToToken(address receiver,address YT,uint256 netPyIn,${O} output) returns (uint256 netTokenOut,uint256 netSyInterm)`]),_=I(["function getPtToAssetRate(address market,uint32 duration) view returns (uint256)"]),F={address:e.pt,symbol:"PT-USDG",decimals:6,chainId:r},l="0x0000000000000000000000000000000000000000",h={swapType:0,extRouter:l,extCalldata:"0x",needScale:!1},A={limitRouter:l,epsSkipMarket:0n,normalFills:[],flashFills:[],optData:"0x"},G={guessMin:0n,guessMax:(1n<<256n)-1n,guessOffchain:0n,maxIteration:256n,eps:10n**14n},f=g('Exact USDG or PT-USDG amount in base units (both 6 decimals). Example: "1000000" = 1 USDG.');function Y(i){let y=async()=>{if(i.network==="testnet")throw new u("Priors PT is configured only on chain 4663.");return i.clientFor(r).getBlock()};return{tools:[{name:"priors_pt_quote",inputSchema:{type:"object",properties:{side:{type:"string",enum:["buy","sell"],description:'Choose "buy": USDG in for PT-USDG; "sell": PT-USDG in for USDG.'},amount:f},required:["side","amount"],additionalProperties:!1},async execute(n){let o=await y();if(o.timestamp>=e.expiry)throw new u("This PT market matured; use redemption.");let t=p(n.amount,"amount");if(t===0n||!["buy","sell"].includes(String(n.side)))throw new u("Provide buy or sell and a positive base-unit amount.");let a=await i.clientFor(r).readContract({address:e.oracle,abi:_,functionName:"getPtToAssetRate",args:[e.market,0]});if(a===0n)throw new u("PT oracle returned a zero rate.");return{chainId:r,token:F,market:e.market,blockNumber:o.number?.toString(),amountIn:t.toString(),estimatedOutput:(n.side==="buy"?t*10n**18n/a:t*a/10n**18n).toString(),rateE18:a.toString(),caveat:"Oracle spot estimate excludes own price impact and execution fees. Specify minOut explicitly and inspect the actual swap preview."}}},{name:"priors_pt_position",inputSchema:{type:"object",properties:{},additionalProperties:!1},async execute(n,o){let t=await y(),a=await i.clientFor(r).readContract({address:e.pt,abi:v,functionName:"balanceOf",args:[m(o)]});return{token:F,balance:a.toString(),market:e.market,expiry:e.expiry.toString(),matured:t.timestamp>=e.expiry}}},...["buy","sell","redeem"].map(n=>({name:`priors_pt_${n}`,inputSchema:{type:"object",properties:{amount:f,minOut:f},required:["amount","minOut"],additionalProperties:!1},async execute(o,t){t=m(t);let a=await y(),S=a.timestamp>=e.expiry;if(n==="redeem"!==S)throw new u(S?"Market matured; redeem PT instead.":"PT redemption opens at maturity.");let s=p(o.amount,"amount"),c=p(o.minOut,"minOut");if(s===0n||c===0n)throw new u("amount and minOut must be positive base units.");let x={tokenOut:d.usdg,minTokenOut:c,tokenRedeemSy:d.usdg,pendleSwap:l,swapData:h},R=n==="buy"?k({abi:b,functionName:"swapExactTokenForPt",args:[t,e.market,c,G,{tokenIn:d.usdg,netTokenIn:s,tokenMintSy:d.usdg,pendleSwap:l,swapData:h},A]}):n==="sell"?k({abi:b,functionName:"swapExactPtForToken",args:[t,e.market,s,x,A]}):k({abi:b,functionName:"redeemPyToToken",args:[t,e.yt,s,x]}),P=[i.approval(n==="buy"?d.usdg:e.pt,e.router,s.toString(),r),i.unsignedTx({to:e.router,data:R,value:"0",chainId:r,description:`${n} PT-USDG, exact input ${s}, minimum output ${c} (6 decimals).`})],E=await i.preview(P,t);return{txs:P,summary:`Pendle PT ${n}: ${s} base units, minimum ${c}, receiver ${t}. No external aggregator. ${E.summary}`,terms:T({expiry:e.expiry,market:e.market})}}}))]}}export{e as a,b,Y as c};
1
+ import{a as d,d as T,e as p}from"./BWE5PXRE.js";import{a as g}from"./66F5ZH34.js";import{b as r}from"./EWZFZUVF.js";import{a as u}from"./XSD5NL7J.js";import{encodeFunctionData as k,erc20Abi as v,getAddress as m,parseAbi as I}from"viem";var e={router:m("0x888888888889758F76e7103c6CbF23ABbF58F946"),oracle:m("0x5542be50420E88dd7D5B4a3D488FA6ED82F6DAc2"),market:m("0xc2b89e6eca583e2c232201ac557e9be58af55f4c"),pt:m("0x6982e39521A070a3C40782548bfBED6Dc8F566ef"),yt:m("0xF35Ee6bd9A93fE42BC7e628BFC4DDbdc6DE1f615"),expiry:1805932800n},$="(uint8 swapType,address extRouter,bytes extCalldata,bool needScale)",C="(uint256 salt,uint256 expiry,uint256 nonce,uint8 orderType,address token,address YT,address maker,address receiver,uint256 makingAmount,uint256 lnImpliedRate,uint256 failSafeRate,bytes permit)",w=`(${C} order,bytes signature,uint256 makingAmount)`,D=`(address limitRouter,uint256 epsSkipMarket,${w}[] normalFills,${w}[] flashFills,bytes optData)`,M=`(address tokenIn,uint256 netTokenIn,address tokenMintSy,address pendleSwap,${$} swapData)`,O=`(address tokenOut,uint256 minTokenOut,address tokenRedeemSy,address pendleSwap,${$} swapData)`,U="(uint256 guessMin,uint256 guessMax,uint256 guessOffchain,uint256 maxIteration,uint256 eps)",b=I([`function swapExactTokenForPt(address receiver,address market,uint256 minPtOut,${U} guessPtOut,${M} input,${D} limit) payable returns (uint256 netPtOut,uint256 netSyFee,uint256 netSyInterm)`,`function swapExactPtForToken(address receiver,address market,uint256 exactPtIn,${O} output,${D} limit) returns (uint256 netTokenOut,uint256 netSyFee,uint256 netSyInterm)`,`function redeemPyToToken(address receiver,address YT,uint256 netPyIn,${O} output) returns (uint256 netTokenOut,uint256 netSyInterm)`]),_=I(["function getPtToAssetRate(address market,uint32 duration) view returns (uint256)"]),F={address:e.pt,symbol:"PT-USDG",decimals:6,chainId:r},l="0x0000000000000000000000000000000000000000",h={swapType:0,extRouter:l,extCalldata:"0x",needScale:!1},A={limitRouter:l,epsSkipMarket:0n,normalFills:[],flashFills:[],optData:"0x"},G={guessMin:0n,guessMax:(1n<<256n)-1n,guessOffchain:0n,maxIteration:256n,eps:10n**14n},f=g('Exact USDG or PT-USDG amount in base units (both 6 decimals). Example: "1000000" = 1 USDG.');function Y(i){let y=async()=>{if(i.network==="testnet")throw new u("Priors PT is configured only on chain 4663.");return i.clientFor(r).getBlock()};return{tools:[{name:"priors_pt_quote",inputSchema:{type:"object",properties:{side:{type:"string",enum:["buy","sell"],description:'Choose "buy": USDG in for PT-USDG; "sell": PT-USDG in for USDG.'},amount:f},required:["side","amount"],additionalProperties:!1},async execute(n){let o=await y();if(o.timestamp>=e.expiry)throw new u("This PT market matured; use redemption.");let t=p(n.amount,"amount");if(t===0n||!["buy","sell"].includes(String(n.side)))throw new u("Provide buy or sell and a positive base-unit amount.");let a=await i.clientFor(r).readContract({address:e.oracle,abi:_,functionName:"getPtToAssetRate",args:[e.market,0]});if(a===0n)throw new u("PT oracle returned a zero rate.");return{chainId:r,token:F,market:e.market,blockNumber:o.number?.toString(),amountIn:t.toString(),estimatedOutput:(n.side==="buy"?t*10n**18n/a:t*a/10n**18n).toString(),rateE18:a.toString(),caveat:"Oracle spot estimate excludes own price impact and execution fees. Specify minOut explicitly and inspect the actual swap preview."}}},{name:"priors_pt_position",inputSchema:{type:"object",properties:{},additionalProperties:!1},async execute(n,o){let t=await y(),a=await i.clientFor(r).readContract({address:e.pt,abi:v,functionName:"balanceOf",args:[m(o)]});return{token:F,balance:a.toString(),market:e.market,expiry:e.expiry.toString(),matured:t.timestamp>=e.expiry}}},...["buy","sell","redeem"].map(n=>({name:`priors_pt_${n}`,inputSchema:{type:"object",properties:{amount:f,minOut:f},required:["amount","minOut"],additionalProperties:!1},async execute(o,t){t=m(t);let a=await y(),S=a.timestamp>=e.expiry;if(n==="redeem"!==S)throw new u(S?"Market matured; redeem PT instead.":"PT redemption opens at maturity.");let s=p(o.amount,"amount"),c=p(o.minOut,"minOut");if(s===0n||c===0n)throw new u("amount and minOut must be positive base units.");let x={tokenOut:d.usdg,minTokenOut:c,tokenRedeemSy:d.usdg,pendleSwap:l,swapData:h},R=n==="buy"?k({abi:b,functionName:"swapExactTokenForPt",args:[t,e.market,c,G,{tokenIn:d.usdg,netTokenIn:s,tokenMintSy:d.usdg,pendleSwap:l,swapData:h},A]}):n==="sell"?k({abi:b,functionName:"swapExactPtForToken",args:[t,e.market,s,x,A]}):k({abi:b,functionName:"redeemPyToToken",args:[t,e.yt,s,x]}),P=[i.approval(n==="buy"?d.usdg:e.pt,e.router,s.toString(),r),i.unsignedTx({to:e.router,data:R,value:"0",chainId:r,description:`${n} PT-USDG, exact input ${s}, minimum output ${c} (6 decimals).`})],E=await i.preview(P,t);return{txs:P,summary:`Pendle PT ${n}: ${s} base units, minimum ${c}, receiver ${t}. No external aggregator. ${E.summary}`,terms:T({expiry:e.expiry,market:e.market})}}}))]}}export{e as a,b,Y as c};
@@ -1 +1 @@
1
- import{a as v}from"./66F5ZH34.js";import{c as b,d as S,i as D,m as O,n as F}from"./NWNYJ26T.js";import{b as l}from"./TI727O2H.js";import{a as d}from"./XSD5NL7J.js";import{encodeFunctionData as $,erc20Abi as B,getAddress as R,parseAbi as U}from"viem";var _={source:"https://github.com/beefyfinance/beefy-v2/blob/main/src/config/promos/chain/robinhood.json",observedAt:"2026-10-31",version:2,boosts:[{id:"moo_alandale-cow-robinhood-weth-shop-vault",address:"0xdC955E855148bE11621a74A5B4588846558215d1",token:"0xEBe70034de92614ebe06Cde98C12257f9397dC0e",vaultId:"alandale-cow-robinhood-weth-shop-vault"},{id:"moo_alandale-cow-robinhood-usdg-net-vault",address:"0x3bB573076462ab4E3De4542cFDAa4f36F0Ce082d",token:"0x857b3971E8038a8f8E2C0Da797145447eFbf6b86",vaultId:"alandale-cow-robinhood-usdg-net-vault"},{id:"moo_alandale-cow-robinhood-weth-usdg-vault",address:"0x13ec60CcFFD2cf989912CCBC038D618d3F56a30E",token:"0x4ED469Ac0080bE3CD192530D482E4d321823e743",vaultId:"alandale-cow-robinhood-weth-usdg-vault"},{id:"moo_alandale-cow-robinhood-weth-lute-vault",address:"0xC5ff71a8754c9A9FC0c27EE297025Ea7eEbDD19d",token:"0xd4A452bB077618b931603DbcB60ea43c05eBEa45",vaultId:"alandale-cow-robinhood-weth-lute-vault"},{id:"moo_alandale-cow-robinhood-usdg-lute-vault",address:"0x83a074A41c06c07631e284463ea2bfc3d2f674c5",token:"0xe50D89C43D0D13eE1439Bb5E94876A1163a26434",vaultId:"alandale-cow-robinhood-usdg-lute-vault"},{id:"moo_alandale-cow-robinhood-weth-spy-vault",address:"0xcdDa7830A6F034d66a46919f3D132f53A56a356d",token:"0x87673A619Fc4F3Fc08068A0BB04f60aA2D04ca62",vaultId:"alandale-cow-robinhood-weth-spy-vault"}]};var C=_.boosts.map(c=>({...c,address:R(c.address.toLowerCase()),token:R(c.token.toLowerCase())})),H=["beefy_boost","beefy_boost_manage"],P=U(["function stakedToken() view returns(address)","function owner() view returns(address)","function whitelisted(address) view returns(bool)","function earned(address) view returns(address[],uint256[])","function stake(uint256)","function withdraw(uint256)","function getReward()","function exit()","function notifyRewardAmount(address,uint256,uint256)","function removeReward(address,address)","function rescueTokens(address,address)","function setWhitelist(address,bool)","function transferOwnership(address)","function renounceOwnership()"]);function w(c){return D(c,"Provide an address.",S)}function x(c){return O(c,"Invalid Beefy reward-pool integer.")}function I(c){return F(c,"Amount must be positive and fit in uint256.",{notString:"Provide a positive base-unit integer string.",positive:!0})}var V=c=>{async function k(e){try{return await e()}catch(o){throw new d(c.plainError(o))}}function A(e,o){if(e.chainId!==void 0&&e.chainId!==l)throw new d("Beefy requires chain 4663.");for(let n of Object.keys(e))if(!["chainId",...o].includes(n))throw new d(`Unsupported Beefy input: ${n}.`)}function T(e){let o=C.find(n=>n.address===w(e.boost));if(!o)throw new d("Choose a pinned Robinhood Beefy v2 boost from beefy_boosts.");return o}async function y(){let e=c.clientFor(l);if(await e.getChainId()!==l)throw new d("The Beefy endpoint must report chain 4663.");let o=x(await e.getBlockNumber()),n=(s,i,r=[])=>e.readContract({address:s,abi:P,functionName:i,args:r,blockNumber:o}),t=async(s,i)=>x(await e.readContract({address:s,abi:B,functionName:"balanceOf",args:[i],blockNumber:o}));async function a(s){let[i,r]=await Promise.all([e.readContract({address:s,abi:B,functionName:"symbol",blockNumber:o}),e.readContract({address:s,abi:B,functionName:"decimals",blockNumber:o})]);if(typeof i!="string"||!i.trim()||typeof r!="number"||!Number.isInteger(r)||r<0||r>255)throw new d("Invalid Beefy boost token metadata.");return{address:s,symbol:i,decimals:r,chainId:l}}async function u(s,i){if(w(await n(s.address,"stakedToken"))!==s.token)throw new d("The Beefy boost staked token no longer matches its pinned configuration.");let r=await n(s.address,"earned",[i]);if(!Array.isArray(r)||r.length!==2||!Array.isArray(r[0])||!Array.isArray(r[1])||r[0].length!==r[1].length||r[0].length>100)throw new d("Invalid Beefy boost rewards.");let m=r[0].map(w);if(new Set(m).size!==m.length)throw new d("Duplicate Beefy boost reward tokens.");let p=await Promise.all(m.map(async(h,g)=>({token:await a(h),amount:x(r[1][g]).toString()})));return{id:s.id,boost:s.address,vaultId:s.vaultId,staked:{token:await a(s.token),amount:(await t(s.address,i)).toString()},rewards:p,block:o.toString(),chainId:l,source:_.source}}return{read:n,balance:t,token:a,pool:u,blockNumber:o}}function f(e,o,n=[]){return c.unsignedTx({to:e,data:$({abi:P,functionName:o,args:n}),value:"0",chainId:l,description:`Beefy reward pool: ${o}.`})}async function E(e,o,n,t){return{txs:e,inputs:t,preview:await c.preview(e,o),summary:n}}return{tools:[{name:"beefy_boosts",inputSchema:{type:"object",properties:{chainId:{const:l,description:"Chain id; only 4663 (Robinhood Chain mainnet) is supported. Optional."}},additionalProperties:!1},execute:(e,o)=>k(async()=>{A(e,[]),o=w(o);let n=await y(),t=[];for(let a of C)t.push(await n.pool(a,o));return{boosts:t,summary:"Pinned Robinhood v2 reward pools. Staked moo receipts keep their underlying vault exposure. Earned amounts are estimates; inspect claim preview. Boost receipt acquisition depends on the corresponding vault adapter."}})},{name:"beefy_boost",inputSchema:{type:"object",properties:{boost:{...b,description:"Address of the pinned Beefy reward pool (boost) contract (from beefy_boosts)."},action:{enum:["stake","withdraw","claim","exit"],description:"stake: deposit moo receipts into the pool; withdraw: take staked receipts out; claim: collect rewards; exit: withdraw everything and claim."},amount:{description:'For stake and withdraw: amount of moo receipt (stake token) in base units of that token (read its decimals), e.g. "1000000000000000000" = 1 token at 18 decimals. "all" uses the full balance.',anyOf:[v(),{const:"all"}]},chainId:{const:l,description:"Chain id; only 4663 (Robinhood Chain mainnet) is supported. Optional."}},required:["boost","action"],additionalProperties:!1},execute:(e,o)=>k(async()=>{let n=String(e.action);if(!["stake","withdraw","claim","exit"].includes(n))throw new d("Choose stake, withdraw, claim or exit.");A(e,["boost","action",...["stake","withdraw"].includes(n)?["amount"]:[]]),o=w(o);let t=T(e),a=await y();await a.pool(t,o);let u,s=[];if(n==="stake"||n==="withdraw"){let i=n==="stake"?t.token:t.address,r=await a.balance(i,o),m=e.amount==="all"?r:I(e.amount);if(m===0n||m>r)throw new d("Provide a positive amount no greater than your current Beefy boost input balance.");s=[{token:i,amount:m.toString()}],u=[...n==="stake"?[c.approval(t.token,t.address,m.toString(),l)]:[],f(t.address,n,[m])]}else n==="exit"&&(s=[{token:t.address,amount:(await a.balance(t.address,o)).toString()}]),u=[f(t.address,n==="claim"?"getReward":"exit")];return E(u,o,`${n} Beefy boost ${t.id}. Withdraw returns moo receipts; exit also claims rewards. Redeem moo receipts with the matching supported vault adapter afterward. No output amount is guaranteed by these calls.`,s)})},{name:"beefy_boost_manage",inputSchema:{type:"object",properties:{boost:{...b,description:"Address of the pinned Beefy reward pool (boost) contract (from beefy_boosts)."},action:{enum:["notify_reward","remove_reward","rescue_tokens","set_manager","transfer_ownership","renounce_ownership"],description:"Owner or manager call: add a reward (notify_reward), remove a reward, rescue stuck tokens, set a manager, transfer ownership, or renounce it permanently."},token:{...b,description:"Address of the reward token for notify_reward, remove_reward or rescue_tokens."},amount:v('For notify_reward: reward amount in base units of the reward token (read its decimals), e.g. "1000000000000000000" = 1 token at 18 decimals.'),duration:v("For notify_reward: reward period in seconds, at least 3600 (86400 = 1 day). Decimal string."),recipient:{...b,description:"Address that receives removed or rescued tokens, or the new owner for transfer_ownership."},manager:{...b,description:"Address of the manager (reward notifier) to enable or disable with set_manager."},enabled:{type:"boolean",description:"For set_manager: true allows the manager to add rewards, false removes them."},chainId:{const:l,description:"Chain id; only 4663 (Robinhood Chain mainnet) is supported. Optional."}},required:["boost","action"],additionalProperties:!1},execute:(e,o)=>k(async()=>{let n={notify_reward:["token","amount","duration"],remove_reward:["token","recipient"],rescue_tokens:["token","recipient"],set_manager:["manager","enabled"],transfer_ownership:["recipient"],renounce_ownership:[]},t=String(e.action);if(!Object.hasOwn(n,t))throw new d("Choose a documented Beefy reward-pool management action.");A(e,["boost","action",...n[t]]),o=w(o);let a=T(e),u=await y();if(await u.pool(a,o),!(t==="notify_reward"?await u.read(a.address,"whitelisted",[o])===!0:w(await u.read(a.address,"owner"))===o))throw new d("This wallet does not hold the required Beefy reward-pool owner or manager role.");let i=[],r=[];if(t==="notify_reward"){let p=w(e.token),h=I(e.amount),g=I(e.duration);if(p===a.token||g<3600n)throw new d("Reward token must differ from the stake token and duration must be at least 3600 seconds.");if(await u.balance(p,o)<h)throw new d("Insufficient reward token balance.");r.push({token:p,amount:h.toString()}),i.push(c.approval(p,a.address,h.toString(),l),f(a.address,"notifyRewardAmount",[p,h,g]))}else if(t==="remove_reward"||t==="rescue_tokens")i.push(f(a.address,t==="remove_reward"?"removeReward":"rescueTokens",[w(e.token),w(e.recipient)]));else if(t==="set_manager"){if(typeof e.enabled!="boolean")throw new d("Provide a boolean enabled value.");i.push(f(a.address,"setWhitelist",[w(e.manager),e.enabled]))}else t==="transfer_ownership"?i.push(f(a.address,"transferOwnership",[w(e.recipient)])):i.push(f(a.address,"renounceOwnership"));let m=t==="remove_reward"?" Removing this reward discards all unclaimed entitlements for that token.":t==="renounce_ownership"?" Renouncing ownership permanently gives up owner administration.":"";return E(i,o,`Beefy owner/manager action ${t} on ${a.address}.${m} Review the exact calldata and preview before human confirmation.`,r)})}],positions:e=>k(async()=>{e=w(e);let o=await y(),n=[];for(let t of C){let a=await o.pool(t,e);a.staked.amount==="0"&&a.rewards.every(u=>u.amount==="0")||n.push({module:"beefy",id:t.address,chainId:l,assets:[a.staked,...a.rewards.filter(u=>u.amount!=="0")],description:`${t.id}: moo receipt stake and estimated claimable rewards at block ${o.blockNumber}. Unstake/exit before redeeming moo receipts.`})}return n})}};export{C as a,H as b,P as c,V as d};
1
+ import{a as v}from"./66F5ZH34.js";import{c as b,d as S,i as D,m as O,n as F}from"./NWNYJ26T.js";import{b as l}from"./EWZFZUVF.js";import{a as d}from"./XSD5NL7J.js";import{encodeFunctionData as $,erc20Abi as B,getAddress as R,parseAbi as U}from"viem";var _={source:"https://github.com/beefyfinance/beefy-v2/blob/main/src/config/promos/chain/robinhood.json",observedAt:"2026-10-31",version:2,boosts:[{id:"moo_alandale-cow-robinhood-weth-shop-vault",address:"0xdC955E855148bE11621a74A5B4588846558215d1",token:"0xEBe70034de92614ebe06Cde98C12257f9397dC0e",vaultId:"alandale-cow-robinhood-weth-shop-vault"},{id:"moo_alandale-cow-robinhood-usdg-net-vault",address:"0x3bB573076462ab4E3De4542cFDAa4f36F0Ce082d",token:"0x857b3971E8038a8f8E2C0Da797145447eFbf6b86",vaultId:"alandale-cow-robinhood-usdg-net-vault"},{id:"moo_alandale-cow-robinhood-weth-usdg-vault",address:"0x13ec60CcFFD2cf989912CCBC038D618d3F56a30E",token:"0x4ED469Ac0080bE3CD192530D482E4d321823e743",vaultId:"alandale-cow-robinhood-weth-usdg-vault"},{id:"moo_alandale-cow-robinhood-weth-lute-vault",address:"0xC5ff71a8754c9A9FC0c27EE297025Ea7eEbDD19d",token:"0xd4A452bB077618b931603DbcB60ea43c05eBEa45",vaultId:"alandale-cow-robinhood-weth-lute-vault"},{id:"moo_alandale-cow-robinhood-usdg-lute-vault",address:"0x83a074A41c06c07631e284463ea2bfc3d2f674c5",token:"0xe50D89C43D0D13eE1439Bb5E94876A1163a26434",vaultId:"alandale-cow-robinhood-usdg-lute-vault"},{id:"moo_alandale-cow-robinhood-weth-spy-vault",address:"0xcdDa7830A6F034d66a46919f3D132f53A56a356d",token:"0x87673A619Fc4F3Fc08068A0BB04f60aA2D04ca62",vaultId:"alandale-cow-robinhood-weth-spy-vault"}]};var C=_.boosts.map(c=>({...c,address:R(c.address.toLowerCase()),token:R(c.token.toLowerCase())})),H=["beefy_boost","beefy_boost_manage"],P=U(["function stakedToken() view returns(address)","function owner() view returns(address)","function whitelisted(address) view returns(bool)","function earned(address) view returns(address[],uint256[])","function stake(uint256)","function withdraw(uint256)","function getReward()","function exit()","function notifyRewardAmount(address,uint256,uint256)","function removeReward(address,address)","function rescueTokens(address,address)","function setWhitelist(address,bool)","function transferOwnership(address)","function renounceOwnership()"]);function w(c){return D(c,"Provide an address.",S)}function x(c){return O(c,"Invalid Beefy reward-pool integer.")}function I(c){return F(c,"Amount must be positive and fit in uint256.",{notString:"Provide a positive base-unit integer string.",positive:!0})}var V=c=>{async function k(e){try{return await e()}catch(o){throw new d(c.plainError(o))}}function A(e,o){if(e.chainId!==void 0&&e.chainId!==l)throw new d("Beefy requires chain 4663.");for(let n of Object.keys(e))if(!["chainId",...o].includes(n))throw new d(`Unsupported Beefy input: ${n}.`)}function T(e){let o=C.find(n=>n.address===w(e.boost));if(!o)throw new d("Choose a pinned Robinhood Beefy v2 boost from beefy_boosts.");return o}async function y(){let e=c.clientFor(l);if(await e.getChainId()!==l)throw new d("The Beefy endpoint must report chain 4663.");let o=x(await e.getBlockNumber()),n=(s,i,r=[])=>e.readContract({address:s,abi:P,functionName:i,args:r,blockNumber:o}),t=async(s,i)=>x(await e.readContract({address:s,abi:B,functionName:"balanceOf",args:[i],blockNumber:o}));async function a(s){let[i,r]=await Promise.all([e.readContract({address:s,abi:B,functionName:"symbol",blockNumber:o}),e.readContract({address:s,abi:B,functionName:"decimals",blockNumber:o})]);if(typeof i!="string"||!i.trim()||typeof r!="number"||!Number.isInteger(r)||r<0||r>255)throw new d("Invalid Beefy boost token metadata.");return{address:s,symbol:i,decimals:r,chainId:l}}async function u(s,i){if(w(await n(s.address,"stakedToken"))!==s.token)throw new d("The Beefy boost staked token no longer matches its pinned configuration.");let r=await n(s.address,"earned",[i]);if(!Array.isArray(r)||r.length!==2||!Array.isArray(r[0])||!Array.isArray(r[1])||r[0].length!==r[1].length||r[0].length>100)throw new d("Invalid Beefy boost rewards.");let m=r[0].map(w);if(new Set(m).size!==m.length)throw new d("Duplicate Beefy boost reward tokens.");let p=await Promise.all(m.map(async(h,g)=>({token:await a(h),amount:x(r[1][g]).toString()})));return{id:s.id,boost:s.address,vaultId:s.vaultId,staked:{token:await a(s.token),amount:(await t(s.address,i)).toString()},rewards:p,block:o.toString(),chainId:l,source:_.source}}return{read:n,balance:t,token:a,pool:u,blockNumber:o}}function f(e,o,n=[]){return c.unsignedTx({to:e,data:$({abi:P,functionName:o,args:n}),value:"0",chainId:l,description:`Beefy reward pool: ${o}.`})}async function E(e,o,n,t){return{txs:e,inputs:t,preview:await c.preview(e,o),summary:n}}return{tools:[{name:"beefy_boosts",inputSchema:{type:"object",properties:{chainId:{const:l,description:"Chain id; only 4663 (Robinhood Chain mainnet) is supported. Optional."}},additionalProperties:!1},execute:(e,o)=>k(async()=>{A(e,[]),o=w(o);let n=await y(),t=[];for(let a of C)t.push(await n.pool(a,o));return{boosts:t,summary:"Pinned Robinhood v2 reward pools. Staked moo receipts keep their underlying vault exposure. Earned amounts are estimates; inspect claim preview. Boost receipt acquisition depends on the corresponding vault adapter."}})},{name:"beefy_boost",inputSchema:{type:"object",properties:{boost:{...b,description:"Address of the pinned Beefy reward pool (boost) contract (from beefy_boosts)."},action:{enum:["stake","withdraw","claim","exit"],description:"stake: deposit moo receipts into the pool; withdraw: take staked receipts out; claim: collect rewards; exit: withdraw everything and claim."},amount:{description:'For stake and withdraw: amount of moo receipt (stake token) in base units of that token (read its decimals), e.g. "1000000000000000000" = 1 token at 18 decimals. "all" uses the full balance.',anyOf:[v(),{const:"all"}]},chainId:{const:l,description:"Chain id; only 4663 (Robinhood Chain mainnet) is supported. Optional."}},required:["boost","action"],additionalProperties:!1},execute:(e,o)=>k(async()=>{let n=String(e.action);if(!["stake","withdraw","claim","exit"].includes(n))throw new d("Choose stake, withdraw, claim or exit.");A(e,["boost","action",...["stake","withdraw"].includes(n)?["amount"]:[]]),o=w(o);let t=T(e),a=await y();await a.pool(t,o);let u,s=[];if(n==="stake"||n==="withdraw"){let i=n==="stake"?t.token:t.address,r=await a.balance(i,o),m=e.amount==="all"?r:I(e.amount);if(m===0n||m>r)throw new d("Provide a positive amount no greater than your current Beefy boost input balance.");s=[{token:i,amount:m.toString()}],u=[...n==="stake"?[c.approval(t.token,t.address,m.toString(),l)]:[],f(t.address,n,[m])]}else n==="exit"&&(s=[{token:t.address,amount:(await a.balance(t.address,o)).toString()}]),u=[f(t.address,n==="claim"?"getReward":"exit")];return E(u,o,`${n} Beefy boost ${t.id}. Withdraw returns moo receipts; exit also claims rewards. Redeem moo receipts with the matching supported vault adapter afterward. No output amount is guaranteed by these calls.`,s)})},{name:"beefy_boost_manage",inputSchema:{type:"object",properties:{boost:{...b,description:"Address of the pinned Beefy reward pool (boost) contract (from beefy_boosts)."},action:{enum:["notify_reward","remove_reward","rescue_tokens","set_manager","transfer_ownership","renounce_ownership"],description:"Owner or manager call: add a reward (notify_reward), remove a reward, rescue stuck tokens, set a manager, transfer ownership, or renounce it permanently."},token:{...b,description:"Address of the reward token for notify_reward, remove_reward or rescue_tokens."},amount:v('For notify_reward: reward amount in base units of the reward token (read its decimals), e.g. "1000000000000000000" = 1 token at 18 decimals.'),duration:v("For notify_reward: reward period in seconds, at least 3600 (86400 = 1 day). Decimal string."),recipient:{...b,description:"Address that receives removed or rescued tokens, or the new owner for transfer_ownership."},manager:{...b,description:"Address of the manager (reward notifier) to enable or disable with set_manager."},enabled:{type:"boolean",description:"For set_manager: true allows the manager to add rewards, false removes them."},chainId:{const:l,description:"Chain id; only 4663 (Robinhood Chain mainnet) is supported. Optional."}},required:["boost","action"],additionalProperties:!1},execute:(e,o)=>k(async()=>{let n={notify_reward:["token","amount","duration"],remove_reward:["token","recipient"],rescue_tokens:["token","recipient"],set_manager:["manager","enabled"],transfer_ownership:["recipient"],renounce_ownership:[]},t=String(e.action);if(!Object.hasOwn(n,t))throw new d("Choose a documented Beefy reward-pool management action.");A(e,["boost","action",...n[t]]),o=w(o);let a=T(e),u=await y();if(await u.pool(a,o),!(t==="notify_reward"?await u.read(a.address,"whitelisted",[o])===!0:w(await u.read(a.address,"owner"))===o))throw new d("This wallet does not hold the required Beefy reward-pool owner or manager role.");let i=[],r=[];if(t==="notify_reward"){let p=w(e.token),h=I(e.amount),g=I(e.duration);if(p===a.token||g<3600n)throw new d("Reward token must differ from the stake token and duration must be at least 3600 seconds.");if(await u.balance(p,o)<h)throw new d("Insufficient reward token balance.");r.push({token:p,amount:h.toString()}),i.push(c.approval(p,a.address,h.toString(),l),f(a.address,"notifyRewardAmount",[p,h,g]))}else if(t==="remove_reward"||t==="rescue_tokens")i.push(f(a.address,t==="remove_reward"?"removeReward":"rescueTokens",[w(e.token),w(e.recipient)]));else if(t==="set_manager"){if(typeof e.enabled!="boolean")throw new d("Provide a boolean enabled value.");i.push(f(a.address,"setWhitelist",[w(e.manager),e.enabled]))}else t==="transfer_ownership"?i.push(f(a.address,"transferOwnership",[w(e.recipient)])):i.push(f(a.address,"renounceOwnership"));let m=t==="remove_reward"?" Removing this reward discards all unclaimed entitlements for that token.":t==="renounce_ownership"?" Renouncing ownership permanently gives up owner administration.":"";return E(i,o,`Beefy owner/manager action ${t} on ${a.address}.${m} Review the exact calldata and preview before human confirmation.`,r)})}],positions:e=>k(async()=>{e=w(e);let o=await y(),n=[];for(let t of C){let a=await o.pool(t,e);a.staked.amount==="0"&&a.rewards.every(u=>u.amount==="0")||n.push({module:"beefy",id:t.address,chainId:l,assets:[a.staked,...a.rewards.filter(u=>u.amount!=="0")],description:`${t.id}: moo receipt stake and estimated claimable rewards at block ${o.blockNumber}. Unstake/exit before redeeming moo receipts.`})}return n})}};export{C as a,H as b,P as c,V as d};