@oakagentkit/core 0.3.4 → 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 (564) 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/actions.d.ts +13 -1
  21. package/build/dist/api/modules/chop/actions.js +1 -1
  22. package/build/dist/api/modules/chop/checks.js +1 -1
  23. package/build/dist/api/modules/chop/copy.d.ts +1 -0
  24. package/build/dist/api/modules/chop/copy.js +1 -1
  25. package/build/dist/api/modules/chop/display.d.ts +36 -0
  26. package/build/dist/api/modules/chop/display.js +1 -0
  27. package/build/dist/api/modules/chop/guard.js +1 -1
  28. package/build/dist/api/modules/chop/index.js +1 -1
  29. package/build/dist/api/modules/chop/pins.d.ts +1 -0
  30. package/build/dist/api/modules/chop/pins.js +1 -1
  31. package/build/dist/api/modules/chop/positions.js +1 -1
  32. package/build/dist/api/modules/chop/reader.d.ts +6 -1
  33. package/build/dist/api/modules/chop/reader.js +1 -1
  34. package/build/dist/api/modules/chop/types.d.ts +7 -0
  35. package/build/dist/api/modules/chop/unfarm.d.ts +16 -0
  36. package/build/dist/api/modules/chop/unfarm.js +1 -0
  37. package/build/dist/api/modules/clanker/extensions.js +1 -1
  38. package/build/dist/api/modules/clanker/index.js +1 -1
  39. package/build/dist/api/modules/clanker/manage.js +1 -1
  40. package/build/dist/api/modules/clanker/pool-config.js +1 -1
  41. package/build/dist/api/modules/clanker/protocol.js +1 -1
  42. package/build/dist/api/modules/clanker/state.js +1 -1
  43. package/build/dist/api/modules/earn/index.js +1 -1
  44. package/build/dist/api/modules/erc8004/common.js +1 -1
  45. package/build/dist/api/modules/erc8004/domain.js +1 -1
  46. package/build/dist/api/modules/erc8004/index.js +1 -1
  47. package/build/dist/api/modules/erc8004/management.js +1 -1
  48. package/build/dist/api/modules/erc8004/reputation.js +1 -1
  49. package/build/dist/api/modules/erc8004/services.js +1 -1
  50. package/build/dist/api/modules/erc8004/thesis.js +1 -1
  51. package/build/dist/api/modules/erc8004/validation.js +1 -1
  52. package/build/dist/api/modules/factor/actions.js +1 -1
  53. package/build/dist/api/modules/factor/api.js +1 -1
  54. package/build/dist/api/modules/factor/checks.js +1 -1
  55. package/build/dist/api/modules/factor/copy.d.ts +11 -11
  56. package/build/dist/api/modules/factor/copy.js +1 -1
  57. package/build/dist/api/modules/factor/guard.js +1 -1
  58. package/build/dist/api/modules/factor/index.js +1 -1
  59. package/build/dist/api/modules/factor/reader.js +1 -1
  60. package/build/dist/api/modules/fobo/client.js +1 -1
  61. package/build/dist/api/modules/fobo/index.js +1 -1
  62. package/build/dist/api/modules/fobo/intent.js +1 -1
  63. package/build/dist/api/modules/fobo/steps.js +1 -1
  64. package/build/dist/api/modules/fobo/verify.js +1 -1
  65. package/build/dist/api/modules/gloam/index.js +1 -1
  66. package/build/dist/api/modules/grove/index.js +1 -1
  67. package/build/dist/api/modules/heyresearch/builder-feed.js +1 -1
  68. package/build/dist/api/modules/heyresearch/index.js +1 -1
  69. package/build/dist/api/modules/heyresearch/public-reads.js +1 -1
  70. package/build/dist/api/modules/heyresearch/scan.js +1 -1
  71. package/build/dist/api/modules/heyresearch/token-facts.js +1 -1
  72. package/build/dist/api/modules/hoodag/chain-reads.js +1 -1
  73. package/build/dist/api/modules/hoodag/index.js +1 -1
  74. package/build/dist/api/modules/hoodag/management.js +1 -1
  75. package/build/dist/api/modules/hoodag/public-reads.js +1 -1
  76. package/build/dist/api/modules/hoodag/reconstruct.js +1 -1
  77. package/build/dist/api/modules/hoodlock/airdrop.js +1 -1
  78. package/build/dist/api/modules/hoodlock/buyback.js +1 -1
  79. package/build/dist/api/modules/hoodlock/commerce.js +1 -1
  80. package/build/dist/api/modules/hoodlock/fee.js +1 -1
  81. package/build/dist/api/modules/hoodlock/guard.js +1 -1
  82. package/build/dist/api/modules/hoodlock/index.js +1 -1
  83. package/build/dist/api/modules/hoodlock/lifecycle.js +1 -1
  84. package/build/dist/api/modules/hoodlock/locks-burn.js +1 -1
  85. package/build/dist/api/modules/hoodlock/public.js +1 -1
  86. package/build/dist/api/modules/hookr/actions.d.ts +39 -2
  87. package/build/dist/api/modules/hookr/actions.js +1 -1
  88. package/build/dist/api/modules/hookr/addons.js +1 -1
  89. package/build/dist/api/modules/hookr/agent-gate.d.ts +14 -2
  90. package/build/dist/api/modules/hookr/agent-gate.js +1 -1
  91. package/build/dist/api/modules/hookr/agent-link.d.ts +17 -0
  92. package/build/dist/api/modules/hookr/agent-link.js +1 -0
  93. package/build/dist/api/modules/hookr/api-client.d.ts +9 -0
  94. package/build/dist/api/modules/hookr/api-client.js +1 -0
  95. package/build/dist/api/modules/hookr/blocks/advisory.d.ts +41 -0
  96. package/build/dist/api/modules/hookr/blocks/advisory.js +1 -0
  97. package/build/dist/api/modules/hookr/blocks/buy-sell-block.d.ts +7 -0
  98. package/build/dist/api/modules/hookr/blocks/buy-sell-block.js +1 -0
  99. package/build/dist/api/modules/hookr/blocks/core-settings.d.ts +6 -0
  100. package/build/dist/api/modules/hookr/blocks/core-settings.js +1 -0
  101. package/build/dist/api/modules/hookr/blocks/exit-clock.d.ts +14 -0
  102. package/build/dist/api/modules/hookr/blocks/exit-clock.js +1 -0
  103. package/build/dist/api/modules/hookr/blocks/holder-pot.d.ts +30 -0
  104. package/build/dist/api/modules/hookr/blocks/holder-pot.js +1 -0
  105. package/build/dist/api/modules/hookr/blocks/managed-fee.d.ts +96 -0
  106. package/build/dist/api/modules/hookr/blocks/managed-fee.js +1 -0
  107. package/build/dist/api/modules/hookr/blocks/market-guard.d.ts +116 -0
  108. package/build/dist/api/modules/hookr/blocks/market-guard.js +1 -0
  109. package/build/dist/api/modules/hookr/blocks/market-hours-fee.d.ts +87 -0
  110. package/build/dist/api/modules/hookr/blocks/market-hours-fee.js +1 -0
  111. package/build/dist/api/modules/hookr/blocks/pay-later.d.ts +199 -0
  112. package/build/dist/api/modules/hookr/blocks/pay-later.js +1 -0
  113. package/build/dist/api/modules/hookr/blocks/sandwich-guard.d.ts +3 -0
  114. package/build/dist/api/modules/hookr/blocks/sandwich-guard.js +1 -0
  115. package/build/dist/api/modules/hookr/blocks/storm-fee.d.ts +3 -0
  116. package/build/dist/api/modules/hookr/blocks/storm-fee.js +1 -0
  117. package/build/dist/api/modules/hookr/blocks/swap-cut.d.ts +3 -0
  118. package/build/dist/api/modules/hookr/blocks/swap-cut.js +1 -0
  119. package/build/dist/api/modules/hookr/blocks/swap-reward-mint.d.ts +125 -0
  120. package/build/dist/api/modules/hookr/blocks/swap-reward-mint.js +1 -0
  121. package/build/dist/api/modules/hookr/blocks/wallet-cap.d.ts +3 -0
  122. package/build/dist/api/modules/hookr/blocks/wallet-cap.js +1 -0
  123. package/build/dist/api/modules/hookr/blocks/zap-source.d.ts +161 -0
  124. package/build/dist/api/modules/hookr/blocks/zap-source.js +1 -0
  125. package/build/dist/api/modules/hookr/blocks/zap-target.d.ts +51 -0
  126. package/build/dist/api/modules/hookr/blocks/zap-target.js +1 -0
  127. package/build/dist/api/modules/hookr/claims.d.ts +53 -0
  128. package/build/dist/api/modules/hookr/claims.js +1 -0
  129. package/build/dist/api/modules/hookr/contracts.d.ts +3 -1
  130. package/build/dist/api/modules/hookr/contracts.js +1 -1
  131. package/build/dist/api/modules/hookr/create-cancel.js +1 -1
  132. package/build/dist/api/modules/hookr/discovery.d.ts +2 -2
  133. package/build/dist/api/modules/hookr/discovery.js +1 -1
  134. package/build/dist/api/modules/hookr/fill-bounty.d.ts +2 -0
  135. package/build/dist/api/modules/hookr/fill-bounty.js +1 -1
  136. package/build/dist/api/modules/hookr/gas.d.ts +48 -0
  137. package/build/dist/api/modules/hookr/gas.js +1 -0
  138. package/build/dist/api/modules/hookr/gates.d.ts +51 -0
  139. package/build/dist/api/modules/hookr/gates.js +1 -0
  140. package/build/dist/api/modules/hookr/hook-blocks.d.ts +304 -0
  141. package/build/dist/api/modules/hookr/hook-blocks.js +1 -0
  142. package/build/dist/api/modules/hookr/index.d.ts +4 -2
  143. package/build/dist/api/modules/hookr/index.js +1 -1
  144. package/build/dist/api/modules/hookr/jobs.d.ts +7 -0
  145. package/build/dist/api/modules/hookr/jobs.js +1 -0
  146. package/build/dist/api/modules/hookr/launch-options.d.ts +52 -3
  147. package/build/dist/api/modules/hookr/launch-options.js +1 -1
  148. package/build/dist/api/modules/hookr/launch-profile.d.ts +8 -0
  149. package/build/dist/api/modules/hookr/launch-profile.js +1 -1
  150. package/build/dist/api/modules/hookr/launch-receipt.js +1 -1
  151. package/build/dist/api/modules/hookr/launch.d.ts +24 -0
  152. package/build/dist/api/modules/hookr/launch.js +1 -1
  153. package/build/dist/api/modules/hookr/liquidity.js +1 -1
  154. package/build/dist/api/modules/hookr/lp-positions.js +1 -1
  155. package/build/dist/api/modules/hookr/lp-reads.js +1 -1
  156. package/build/dist/api/modules/hookr/lp-receipt.js +1 -1
  157. package/build/dist/api/modules/hookr/lp-state.d.ts +90 -2
  158. package/build/dist/api/modules/hookr/lp-state.js +1 -1
  159. package/build/dist/api/modules/hookr/pay-later-actions.d.ts +52 -0
  160. package/build/dist/api/modules/hookr/pay-later-actions.js +1 -0
  161. package/build/dist/api/modules/hookr/pins.d.ts +5 -0
  162. package/build/dist/api/modules/hookr/pins.js +1 -1
  163. package/build/dist/api/modules/hookr/pm-liquidity.d.ts +215 -0
  164. package/build/dist/api/modules/hookr/pm-liquidity.js +1 -0
  165. package/build/dist/api/modules/hookr/public-reads.d.ts +1 -1
  166. package/build/dist/api/modules/hookr/public-reads.js +1 -1
  167. package/build/dist/api/modules/hookr/read-utils.js +1 -1
  168. package/build/dist/api/modules/hookr/relay.js +1 -1
  169. package/build/dist/api/modules/hookr/revenue.d.ts +4 -1
  170. package/build/dist/api/modules/hookr/revenue.js +1 -1
  171. package/build/dist/api/modules/hookr/scan.d.ts +25 -0
  172. package/build/dist/api/modules/hookr/scan.js +1 -0
  173. package/build/dist/api/modules/hookr/swap.d.ts +161 -0
  174. package/build/dist/api/modules/hookr/swap.js +1 -0
  175. package/build/dist/api/modules/kyberswap/index.js +1 -1
  176. package/build/dist/api/modules/kyberswap/source-pools.js +1 -1
  177. package/build/dist/api/modules/layerbank/abi.js +1 -1
  178. package/build/dist/api/modules/layerbank/actions.js +1 -1
  179. package/build/dist/api/modules/layerbank/checks.js +1 -1
  180. package/build/dist/api/modules/layerbank/index.js +1 -1
  181. package/build/dist/api/modules/layerbank/merkl.js +1 -1
  182. package/build/dist/api/modules/layerbank/reader.js +1 -1
  183. package/build/dist/api/modules/layerbank/reserve.js +1 -1
  184. package/build/dist/api/modules/lighter/index.js +1 -1
  185. package/build/dist/api/modules/longbow/administration.js +1 -1
  186. package/build/dist/api/modules/longbow/analytics.js +1 -1
  187. package/build/dist/api/modules/longbow/fixed.js +1 -1
  188. package/build/dist/api/modules/longbow/index.js +1 -1
  189. package/build/dist/api/modules/longbow/nft.js +1 -1
  190. package/build/dist/api/modules/longbow/rebates.js +1 -1
  191. package/build/dist/api/modules/longbow/staking.js +1 -1
  192. package/build/dist/api/modules/meridian/index.js +1 -1
  193. package/build/dist/api/modules/meridian/markets.js +1 -1
  194. package/build/dist/api/modules/meridian/rfq.js +1 -1
  195. package/build/dist/api/modules/merkl/discovery.js +1 -1
  196. package/build/dist/api/modules/merkl/index.js +1 -1
  197. package/build/dist/api/modules/merkl/manage.js +1 -1
  198. package/build/dist/api/modules/merkl/protocol.js +1 -1
  199. package/build/dist/api/modules/morpho/allocator.js +1 -1
  200. package/build/dist/api/modules/morpho/bundles.js +1 -1
  201. package/build/dist/api/modules/morpho/in-kind.js +1 -1
  202. package/build/dist/api/modules/morpho/index.js +1 -1
  203. package/build/dist/api/modules/morpho/local-guard.js +1 -1
  204. package/build/dist/api/modules/morpho/midnight.js +1 -1
  205. package/build/dist/api/modules/morpho/protocol.js +1 -1
  206. package/build/dist/api/modules/morpho/vault-management.js +1 -1
  207. package/build/dist/api/modules/morpho/vault-tools.js +1 -1
  208. package/build/dist/api/modules/morpho/vault-v2.js +1 -1
  209. package/build/dist/api/modules/netnet/card-plan.js +1 -1
  210. package/build/dist/api/modules/netnet/card-read.js +1 -1
  211. package/build/dist/api/modules/netnet/card-recovery.js +1 -1
  212. package/build/dist/api/modules/netnet/desk-action.js +1 -1
  213. package/build/dist/api/modules/netnet/desk-read.js +1 -1
  214. package/build/dist/api/modules/netnet/financial.js +1 -1
  215. package/build/dist/api/modules/netnet/index.js +1 -1
  216. package/build/dist/api/modules/netnet/staking.js +1 -1
  217. package/build/dist/api/modules/orbio/index.js +1 -1
  218. package/build/dist/api/modules/orbio/positions.js +1 -1
  219. package/build/dist/api/modules/pendle/costs.js +1 -1
  220. package/build/dist/api/modules/pendle/index.js +1 -1
  221. package/build/dist/api/modules/pendle/markets.js +1 -1
  222. package/build/dist/api/modules/pendle/positions.js +1 -1
  223. package/build/dist/api/modules/pendle/pricecheck.js +1 -1
  224. package/build/dist/api/modules/pendle/reader.js +1 -1
  225. package/build/dist/api/modules/pendle/redeem.js +1 -1
  226. package/build/dist/api/modules/pendle/trade.js +1 -1
  227. package/build/dist/api/modules/pendle/validate.js +1 -1
  228. package/build/dist/api/modules/pendle/verify.js +1 -1
  229. package/build/dist/api/modules/pons/claim.js +1 -1
  230. package/build/dist/api/modules/pons/index.js +1 -1
  231. package/build/dist/api/modules/pons/launch-status.js +1 -1
  232. package/build/dist/api/modules/pons/prices.js +1 -1
  233. package/build/dist/api/modules/pons/reads.js +1 -1
  234. package/build/dist/api/modules/pons/swap-terms.js +1 -1
  235. package/build/dist/api/modules/pons/trade.js +1 -1
  236. package/build/dist/api/modules/poolstrade/index.js +1 -1
  237. package/build/dist/api/modules/priors/coverage.js +1 -1
  238. package/build/dist/api/modules/priors/discovery.js +1 -1
  239. package/build/dist/api/modules/priors/features.js +1 -1
  240. package/build/dist/api/modules/priors/holdings.js +1 -1
  241. package/build/dist/api/modules/priors/index.js +1 -1
  242. package/build/dist/api/modules/priors/integration.js +1 -1
  243. package/build/dist/api/modules/priors/market.js +1 -1
  244. package/build/dist/api/modules/priors/pt.js +1 -1
  245. package/build/dist/api/modules/priors/savings-exit.js +1 -1
  246. package/build/dist/api/modules/priors/starter-line.js +1 -1
  247. package/build/dist/api/modules/priors/stock-swap.js +1 -1
  248. package/build/dist/api/modules/raeto/index.js +1 -1
  249. package/build/dist/api/modules/relay/bootstrap.js +1 -1
  250. package/build/dist/api/modules/relay/discovery.js +1 -1
  251. package/build/dist/api/modules/relay/inbound.js +1 -1
  252. package/build/dist/api/modules/relay/index.js +1 -1
  253. package/build/dist/api/modules/relay/outbound-status.js +1 -1
  254. package/build/dist/api/modules/relay/reads.js +1 -1
  255. package/build/dist/api/modules/spark/actions.js +1 -1
  256. package/build/dist/api/modules/spark/details.js +1 -1
  257. package/build/dist/api/modules/spark/index.js +1 -1
  258. package/build/dist/api/modules/spark/management.js +1 -1
  259. package/build/dist/api/modules/steakhouse/analytics.js +1 -1
  260. package/build/dist/api/modules/steakhouse/erc4626.js +1 -1
  261. package/build/dist/api/modules/steakhouse/index.js +1 -1
  262. package/build/dist/api/modules/steakhouse/local-guard.js +1 -1
  263. package/build/dist/api/modules/steakhouse/management.js +1 -1
  264. package/build/dist/api/modules/steakhouse/v2-exit.js +1 -1
  265. package/build/dist/api/modules/tickerspring/basket-routes.js +1 -1
  266. package/build/dist/api/modules/tickerspring/contract-reads.js +1 -1
  267. package/build/dist/api/modules/tickerspring/discovery.js +1 -1
  268. package/build/dist/api/modules/tickerspring/exit-preview.js +1 -1
  269. package/build/dist/api/modules/tickerspring/guards.js +1 -1
  270. package/build/dist/api/modules/tickerspring/index.js +1 -1
  271. package/build/dist/api/modules/tickerspring/journeys.js +1 -1
  272. package/build/dist/api/modules/tickerspring/ladder.js +1 -1
  273. package/build/dist/api/modules/tickerspring/maker.js +1 -1
  274. package/build/dist/api/modules/tickerspring/order-accounting.js +1 -1
  275. package/build/dist/api/modules/tickerspring/research.js +1 -1
  276. package/build/dist/api/modules/tickerspring/strategies.js +1 -1
  277. package/build/dist/api/modules/uniswap/auction-create.js +1 -1
  278. package/build/dist/api/modules/uniswap/auction.js +1 -1
  279. package/build/dist/api/modules/uniswap/batch.js +1 -1
  280. package/build/dist/api/modules/uniswap/common.js +1 -1
  281. package/build/dist/api/modules/uniswap/fees.js +1 -1
  282. package/build/dist/api/modules/uniswap/index.js +1 -1
  283. package/build/dist/api/modules/uniswap/local-guard.js +1 -1
  284. package/build/dist/api/modules/uniswap/oracle.js +1 -1
  285. package/build/dist/api/modules/uniswap/pool-math.js +1 -1
  286. package/build/dist/api/modules/uniswap/pools.js +1 -1
  287. package/build/dist/api/modules/uniswap/position.js +1 -1
  288. package/build/dist/api/modules/uniswap/protocol.js +1 -1
  289. package/build/dist/api/modules/uniswap/quote-guard.js +1 -1
  290. package/build/dist/api/modules/uniswap/stock-prices.d.ts +25 -0
  291. package/build/dist/api/modules/uniswap/stock-prices.js +1 -1
  292. package/build/dist/api/modules/uniswap/stocks.js +1 -1
  293. package/build/dist/api/modules/uniswap/token-jar.js +1 -1
  294. package/build/dist/api/modules/uniswap/trade-batch.js +1 -1
  295. package/build/dist/api/modules/uniswap/trade.js +1 -1
  296. package/build/dist/api/modules/uniswap/v2.js +1 -1
  297. package/build/dist/api/modules/uniswap/v3.js +1 -1
  298. package/build/dist/api/modules/uniswap/v4.js +1 -1
  299. package/build/dist/api/modules/uniswap/wrap.js +1 -1
  300. package/build/dist/api/modules/velora/claims.js +1 -1
  301. package/build/dist/api/modules/velora/delta-reads.js +1 -1
  302. package/build/dist/api/modules/velora/index.js +1 -1
  303. package/build/dist/api/modules/wormhole/index.js +1 -1
  304. package/build/dist/api/modules/wormhole/scan-text.d.ts +1 -1
  305. package/build/dist/api/positions.js +1 -1
  306. package/build/dist/api/pricenote.js +1 -1
  307. package/build/dist/api/prices.d.ts +5 -0
  308. package/build/dist/api/prices.js +1 -1
  309. package/build/dist/api/rpc.js +1 -1
  310. package/build/dist/api/send.js +1 -1
  311. package/build/dist/api/signing-registry.js +1 -1
  312. package/build/dist/api/signing.js +1 -1
  313. package/build/dist/api/simulate.js +1 -1
  314. package/build/dist/api/swap.d.ts +2 -0
  315. package/build/dist/api/swap.js +1 -1
  316. package/build/dist/api/tokens.d.ts +10 -1
  317. package/build/dist/api/tokens.js +1 -1
  318. package/build/dist/api/tool-policy.js +1 -1
  319. package/build/dist/api/universal-router.js +1 -1
  320. package/build/dist/api/usd-estimate.d.ts +2 -0
  321. package/build/dist/api/usd-estimate.js +1 -1
  322. package/build/dist/chunks/{DMDOSHV7.js → 266VIESP.js} +1 -1
  323. package/build/dist/chunks/{KNBNKG7P.js → 2BKZLF5A.js} +1 -1
  324. package/build/dist/chunks/{HFVXNKA5.js → 2BM2WX2G.js} +1 -1
  325. package/build/dist/chunks/{OY5W7ZSL.js → 2H2OZE6X.js} +1 -1
  326. package/build/dist/chunks/{E76Z2TT4.js → 2QQ5CGQI.js} +1 -1
  327. package/build/dist/chunks/{4PLLS6CT.js → 2VYA6WIN.js} +1 -1
  328. package/build/dist/chunks/{LCH6F5HT.js → 342OZP53.js} +1 -1
  329. package/build/dist/chunks/{FQTO7VJG.js → 3HF6WE4L.js} +1 -1
  330. package/build/dist/chunks/3M7RMROZ.js +1 -0
  331. package/build/dist/chunks/3RGED2KO.js +1 -0
  332. package/build/dist/chunks/{RUSXMQSJ.js → 3XIJCHT7.js} +1 -1
  333. package/build/dist/chunks/3XY44BP5.js +1 -0
  334. package/build/dist/chunks/3YNXQ3EZ.js +1 -0
  335. package/build/dist/chunks/45QP74CE.js +1 -0
  336. package/build/dist/chunks/{NYHKIXJR.js → 4GAU3JLN.js} +1 -1
  337. package/build/dist/chunks/{Y2QADJOB.js → 4P6DRKY3.js} +1 -1
  338. package/build/dist/chunks/{W3DGFMQE.js → 4RTXP2YP.js} +1 -1
  339. package/build/dist/chunks/{7FYM7FJA.js → 4SXRXNHG.js} +1 -1
  340. package/build/dist/chunks/{ZTKT3ZQK.js → 53VBLEYS.js} +1 -1
  341. package/build/dist/chunks/5677LZOV.js +1 -0
  342. package/build/dist/chunks/{ADIPEGNN.js → 5AO2QPWE.js} +1 -1
  343. package/build/dist/chunks/{GQITAJVF.js → 5BPFF7NX.js} +1 -1
  344. package/build/dist/chunks/{PXUML7HJ.js → 5DWQUEBA.js} +1 -1
  345. package/build/dist/chunks/{WAKZWSHB.js → 5KKAN7XQ.js} +1 -1
  346. package/build/dist/chunks/{VVAM3EAK.js → 5N6YJFFA.js} +1 -1
  347. package/build/dist/chunks/{QIB6OMQV.js → 5O67QQIY.js} +1 -1
  348. package/build/dist/chunks/5PNFV7HH.js +1 -0
  349. package/build/dist/chunks/5RAZFRO4.js +1 -0
  350. package/build/dist/chunks/{FAH7FKUT.js → 5UWVXEPD.js} +1 -1
  351. package/build/dist/chunks/5VKVAUFQ.js +1 -0
  352. package/build/dist/chunks/5Y457HYC.js +1 -0
  353. package/build/dist/chunks/64LAWFBE.js +1 -0
  354. package/build/dist/chunks/{JJGZ7W3V.js → 6AS3TGOX.js} +1 -1
  355. package/build/dist/chunks/6EWSLHXL.js +1 -0
  356. package/build/dist/chunks/{6F527FLN.js → 6HNQAYBM.js} +1 -1
  357. package/build/dist/chunks/{FUP53K6G.js → 6LDC5D2S.js} +1 -1
  358. package/build/dist/chunks/{YR44GQG4.js → 6QXTL65K.js} +1 -1
  359. package/build/dist/chunks/6RVAV6BB.js +1 -0
  360. package/build/dist/chunks/{WSILNJS2.js → 6STUQOFL.js} +1 -1
  361. package/build/dist/chunks/{OKXKDDBX.js → 6Y2546JA.js} +1 -1
  362. package/build/dist/chunks/{4Z3IGMU6.js → 7AYP4ATZ.js} +1 -1
  363. package/build/dist/chunks/{YGW4ODAP.js → 7EPU3XGY.js} +1 -1
  364. package/build/dist/chunks/7GL547YZ.js +1 -0
  365. package/build/dist/chunks/7JTXYMNP.js +1 -0
  366. package/build/dist/chunks/{A3BJSQ23.js → 7VU5VCTL.js} +1 -1
  367. package/build/dist/chunks/{Z7FGEWO2.js → 7WXAS54T.js} +1 -1
  368. package/build/dist/chunks/{3D7FXI6G.js → 7X5JVF3F.js} +1 -1
  369. package/build/dist/chunks/{DRLBTB4E.js → A72ADVYF.js} +1 -1
  370. package/build/dist/chunks/{ANIF3JMV.js → AG66NM3J.js} +1 -1
  371. package/build/dist/chunks/{AOX6DKYU.js → AL6UXNGH.js} +1 -1
  372. package/build/dist/chunks/AODUTN65.js +1 -0
  373. package/build/dist/chunks/{PQG3ULRT.js → AONO47JX.js} +1 -1
  374. package/build/dist/chunks/{JTPHZCO3.js → AQJLEG6B.js} +1 -1
  375. package/build/dist/chunks/AZBTNUXF.js +1 -0
  376. package/build/dist/chunks/{O56EZB5Y.js → B5BU645H.js} +1 -1
  377. package/build/dist/chunks/{LQSPWRHN.js → B75SS7H6.js} +1 -1
  378. package/build/dist/chunks/{GBIBRYOV.js → B7HVPHSS.js} +1 -1
  379. package/build/dist/chunks/{LT5P6PZW.js → B7WZJHIJ.js} +1 -1
  380. package/build/dist/chunks/{3A2IKFTV.js → BIFANUTV.js} +1 -1
  381. package/build/dist/chunks/BM4KHOFB.js +1 -0
  382. package/build/dist/chunks/{X3YEDVRN.js → BSV65PCA.js} +1 -1
  383. package/build/dist/chunks/{HDBDBKEA.js → BW755PNH.js} +1 -1
  384. package/build/dist/chunks/{VXCGMALF.js → BWE5PXRE.js} +1 -1
  385. package/build/dist/chunks/{7U62MMUQ.js → BY2OWKZB.js} +1 -1
  386. package/build/dist/chunks/{SRHVSNPX.js → C2H3BWN5.js} +1 -1
  387. package/build/dist/chunks/{F7MGYRPU.js → CCPG6PRL.js} +1 -1
  388. package/build/dist/chunks/{ZTX4WT62.js → CFPJDLTZ.js} +1 -1
  389. package/build/dist/chunks/{OI3N4EW4.js → CG7ABZXH.js} +1 -1
  390. package/build/dist/chunks/CJMVRV34.js +1 -0
  391. package/build/dist/chunks/CQPIR6ER.js +1 -0
  392. package/build/dist/chunks/{FP7DHVK2.js → CR7DPGI6.js} +1 -1
  393. package/build/dist/chunks/{W5FM2OVB.js → CVVNAFUE.js} +1 -1
  394. package/build/dist/chunks/{LEHBRAZX.js → CW37EGPL.js} +1 -1
  395. package/build/dist/chunks/{MI5HZDMH.js → D6JOXK7Q.js} +1 -1
  396. package/build/dist/chunks/{SGHSCK22.js → DJRS3TR5.js} +1 -1
  397. package/build/dist/chunks/{IZFED3R2.js → DLNDJZR4.js} +1 -1
  398. package/build/dist/chunks/{SYERFEJ4.js → DPSFR3ZS.js} +1 -1
  399. package/build/dist/chunks/{2T6O77QZ.js → DV2HVFTM.js} +1 -1
  400. package/build/dist/chunks/{NMJVQX5M.js → DWRRIFXS.js} +1 -1
  401. package/build/dist/chunks/{3ZH5SOC2.js → EFOC337C.js} +1 -1
  402. package/build/dist/chunks/EHQRAA3R.js +1 -0
  403. package/build/dist/chunks/{WX7OYCNS.js → EJIP7RBG.js} +1 -1
  404. package/build/dist/chunks/EPOIAXCV.js +3 -0
  405. package/build/dist/chunks/EWZFZUVF.js +1 -0
  406. package/build/dist/chunks/{OB7BFDOV.js → EYE3ZAJB.js} +1 -1
  407. package/build/dist/chunks/{MQ5F2VOK.js → EZUQMTLE.js} +1 -1
  408. package/build/dist/chunks/F36IA5RI.js +1 -0
  409. package/build/dist/chunks/{DD47RZFU.js → F74ARK4H.js} +1 -1
  410. package/build/dist/chunks/{Q4HSQL65.js → FGGDAAHW.js} +1 -1
  411. package/build/dist/chunks/FMEO7RX7.js +1 -0
  412. package/build/dist/chunks/{V6EVQWAL.js → FN6XY6ET.js} +1 -1
  413. package/build/dist/chunks/G4IX4CYN.js +1 -0
  414. package/build/dist/chunks/G53U6Y4L.js +1 -0
  415. package/build/dist/chunks/{XHFAF5PZ.js → GBIL2I2K.js} +1 -1
  416. package/build/dist/chunks/{RKM62HC5.js → GCFHKJIO.js} +1 -1
  417. package/build/dist/chunks/{K7HTDKAT.js → GMMTHTCP.js} +1 -1
  418. package/build/dist/chunks/{O5QTITN6.js → GRHBE4MQ.js} +1 -1
  419. package/build/dist/chunks/GTJ6LBGB.js +1 -0
  420. package/build/dist/chunks/GV6Z3MET.js +1 -0
  421. package/build/dist/chunks/{GK3D7OKG.js → GVCNTGLC.js} +1 -1
  422. package/build/dist/chunks/GX2RCAHG.js +1 -0
  423. package/build/dist/chunks/{O3XWE4FO.js → H5KU4DUU.js} +1 -1
  424. package/build/dist/chunks/H7ZJ7LAB.js +1 -0
  425. package/build/dist/chunks/{DCGNVMKG.js → HC3QFA5I.js} +1 -1
  426. package/build/dist/chunks/{RK3PPFRX.js → HEQBTHFS.js} +1 -1
  427. package/build/dist/chunks/{C76D54YG.js → HGSFRN57.js} +1 -1
  428. package/build/dist/chunks/HJI7KO6F.js +1 -0
  429. package/build/dist/chunks/{L6CVMDWQ.js → HNBYPHTA.js} +1 -1
  430. package/build/dist/chunks/{MSRCJ2BS.js → HPBTSJW7.js} +1 -1
  431. package/build/dist/chunks/HPO673QQ.js +1 -0
  432. package/build/dist/chunks/{ZFRTBBIW.js → HRGLFGFL.js} +1 -1
  433. package/build/dist/chunks/{DGDMRATN.js → ICHT3H3W.js} +1 -1
  434. package/build/dist/chunks/IJVBCEA2.js +1 -0
  435. package/build/dist/chunks/{2TX7HP6M.js → IKVRFAUP.js} +1 -1
  436. package/build/dist/chunks/IM7ZF7XZ.js +1 -0
  437. package/build/dist/chunks/{I4473OC6.js → IMD33NQS.js} +1 -1
  438. package/build/dist/chunks/IR7KDBFU.js +1 -0
  439. package/build/dist/chunks/{X24YTJST.js → IY7FWTAL.js} +1 -1
  440. package/build/dist/chunks/IYOWMW5B.js +1 -0
  441. package/build/dist/chunks/J2J73XYU.js +1 -0
  442. package/build/dist/chunks/JCS24YBB.js +1 -0
  443. package/build/dist/chunks/JQVTHPUO.js +1 -0
  444. package/build/dist/chunks/{USZCTSPI.js → JTWJT2O3.js} +1 -1
  445. package/build/dist/chunks/{2YYKQGJZ.js → K4CYAWNL.js} +1 -1
  446. package/build/dist/chunks/{7VH6JQ2H.js → K5C6QBOO.js} +1 -1
  447. package/build/dist/chunks/K5OXLIPK.js +1 -0
  448. package/build/dist/chunks/{4PB6MSGZ.js → K6GECT3F.js} +1 -1
  449. package/build/dist/chunks/{HU2JXDLH.js → KB2JWQZ4.js} +1 -1
  450. package/build/dist/chunks/{EFESPGA2.js → KCZUJ57H.js} +1 -1
  451. package/build/dist/chunks/{YW4W3LPQ.js → KHLM6NIZ.js} +1 -1
  452. package/build/dist/chunks/{OIQTZOBN.js → KKGHXNM4.js} +1 -1
  453. package/build/dist/chunks/{SUNTJ6IU.js → KYANIEPX.js} +1 -1
  454. package/build/dist/chunks/{MOZBDCVV.js → L3IAEXQR.js} +1 -1
  455. package/build/dist/chunks/{ZZ6FZGHF.js → L4UFGM7M.js} +1 -1
  456. package/build/dist/chunks/{DMB64UIN.js → L76P6WIH.js} +1 -1
  457. package/build/dist/chunks/{QMNUB2GM.js → LBT6WR4U.js} +1 -1
  458. package/build/dist/chunks/LD3A2KLN.js +1 -0
  459. package/build/dist/chunks/{WRUTW6CG.js → LFSNAQ7V.js} +1 -1
  460. package/build/dist/chunks/{5ZVIAGLX.js → LKRAUTYI.js} +1 -1
  461. package/build/dist/chunks/{23HNDJ76.js → M2SWILNG.js} +1 -1
  462. package/build/dist/chunks/{IT2JLILU.js → MFKDNAHB.js} +1 -1
  463. package/build/dist/chunks/MFQTBUSD.js +1 -0
  464. package/build/dist/chunks/{V4UJMUIB.js → MLN5KTG7.js} +1 -1
  465. package/build/dist/chunks/{S4JUFCT4.js → MSQNOK3I.js} +1 -1
  466. package/build/dist/chunks/{FA3GBXQP.js → MXI7LX2F.js} +1 -1
  467. package/build/dist/chunks/N6YNJGEF.js +1 -0
  468. package/build/dist/chunks/{DXAPKN7H.js → NLC36QHL.js} +1 -1
  469. package/build/dist/chunks/NUTTPUYJ.js +1 -0
  470. package/build/dist/chunks/{O4S6XAYV.js → O7L55XM3.js} +1 -1
  471. package/build/dist/chunks/{NAO7VWZF.js → OCIEVYPR.js} +1 -1
  472. package/build/dist/chunks/{4NBXBKOX.js → OD7CY6BY.js} +1 -1
  473. package/build/dist/chunks/{RUTSEGGD.js → OHZHQSCA.js} +1 -1
  474. package/build/dist/chunks/{T3QEN3S6.js → OIGTTRN5.js} +1 -1
  475. package/build/dist/chunks/{5OTQCE2E.js → P6JE2NRA.js} +1 -1
  476. package/build/dist/chunks/PD5NXIRT.js +1 -0
  477. package/build/dist/chunks/{TXGZ6NWN.js → PG7HZIZL.js} +1 -1
  478. package/build/dist/chunks/{WXZ4LAKO.js → PXVF2SHU.js} +1 -1
  479. package/build/dist/chunks/{UBVE2U6X.js → Q43WPRYU.js} +1 -1
  480. package/build/dist/chunks/QA6Z2CYP.js +2 -0
  481. package/build/dist/chunks/QAAKUIWE.js +1 -0
  482. package/build/dist/chunks/{PQOWIRKQ.js → QAVP3CWL.js} +1 -1
  483. package/build/dist/chunks/{YXXK6EPI.js → QBHY2QRC.js} +1 -1
  484. package/build/dist/chunks/{ELHRXA5U.js → QFK335LC.js} +1 -1
  485. package/build/dist/chunks/{3PHJUFU2.js → QFUSCK5C.js} +1 -1
  486. package/build/dist/chunks/{IPU656WB.js → QKH7ED6B.js} +1 -1
  487. package/build/dist/chunks/{AHUCYDBC.js → QKIQ7ZKD.js} +1 -1
  488. package/build/dist/chunks/{XW3VGWXK.js → QMWHQRYC.js} +1 -1
  489. package/build/dist/chunks/{N6PHSHBE.js → QP2B7AYX.js} +1 -1
  490. package/build/dist/chunks/{VHK5AYC2.js → QZ6V6J6W.js} +1 -1
  491. package/build/dist/chunks/{MDLJFCT4.js → R5Z4HPCA.js} +1 -1
  492. package/build/dist/chunks/RKJFSDGV.js +1 -0
  493. package/build/dist/chunks/RKS3M7L5.js +1 -0
  494. package/build/dist/chunks/{GDOHHXNH.js → RLX6YTNT.js} +1 -1
  495. package/build/dist/chunks/RYEQIZ2H.js +1 -0
  496. package/build/dist/chunks/{USEF3QKG.js → S432S6NA.js} +1 -1
  497. package/build/dist/chunks/S47M3IPR.js +1 -0
  498. package/build/dist/chunks/S65KXMZ7.js +3 -0
  499. package/build/dist/chunks/{2OVJ2BTJ.js → SEXKWYUM.js} +1 -1
  500. package/build/dist/chunks/{2ILYVUFA.js → SRYX65GZ.js} +1 -1
  501. package/build/dist/chunks/{GNOHIL4Q.js → TMENUIBC.js} +1 -1
  502. package/build/dist/chunks/{BSX4LFYI.js → TNHU5UBQ.js} +1 -1
  503. package/build/dist/chunks/{PDPTJMTJ.js → TT2ST3Q3.js} +1 -1
  504. package/build/dist/chunks/TTBB6EFN.js +1 -0
  505. package/build/dist/chunks/{Z5YI6KLN.js → TWVDWNTG.js} +1 -1
  506. package/build/dist/chunks/TZG7HTVM.js +1 -0
  507. package/build/dist/chunks/{OVM4QIET.js → U4MSIH4G.js} +1 -1
  508. package/build/dist/chunks/UEOS6SHR.js +1 -0
  509. package/build/dist/chunks/{EIE2U4OX.js → UGFRBJDQ.js} +1 -1
  510. package/build/dist/chunks/{HUKDISRE.js → UIVOYAO2.js} +1 -1
  511. package/build/dist/chunks/{XRDLMTBJ.js → UMY6SP7C.js} +1 -1
  512. package/build/dist/chunks/UNBRUWSV.js +1 -0
  513. package/build/dist/chunks/{LGLWEGPY.js → UPX3OWKA.js} +1 -1
  514. package/build/dist/chunks/{MHONMLF6.js → URTQNYWU.js} +1 -1
  515. package/build/dist/chunks/{4RCYYN6O.js → V7HTGO23.js} +1 -1
  516. package/build/dist/chunks/{HZSYMGJ2.js → VS7ZA4OF.js} +1 -1
  517. package/build/dist/chunks/{BJ2U2VXJ.js → VTWAVH74.js} +1 -1
  518. package/build/dist/chunks/{5GQJVKVY.js → W5GWK72I.js} +1 -1
  519. package/build/dist/chunks/{65OITTDL.js → W73SLWBT.js} +1 -1
  520. package/build/dist/chunks/WRA3ZC6W.js +1 -0
  521. package/build/dist/chunks/{PRBIC3UK.js → WUONMIA2.js} +1 -1
  522. package/build/dist/chunks/{XL3W7DAQ.js → X3BB6WME.js} +1 -1
  523. package/build/dist/chunks/{K3TZYPSV.js → X53QVHBC.js} +1 -1
  524. package/build/dist/chunks/{LVFI74ST.js → XNJ6NDQQ.js} +1 -1
  525. package/build/dist/chunks/{GBPB7JIB.js → XSQJOOEY.js} +1 -1
  526. package/build/dist/chunks/XUDQYSPU.js +1 -0
  527. package/build/dist/chunks/{VKNKVUAA.js → XWZ5SL5Q.js} +1 -1
  528. package/build/dist/chunks/{365B4YEV.js → XXLQDQEX.js} +1 -1
  529. package/build/dist/chunks/{BDLV42SD.js → Y5T36EEU.js} +1 -1
  530. package/build/dist/chunks/{R73R4KN3.js → YBLJ2MCR.js} +1 -1
  531. package/build/dist/chunks/{WNWRF4HE.js → YZHJ4BAP.js} +1 -1
  532. package/build/dist/chunks/ZSGW2ZSO.js +1 -0
  533. package/build/dist/chunks/{HRAHGYNK.js → ZTNBX4VH.js} +1 -1
  534. package/package.json +1 -1
  535. package/build/dist/chunks/2QP6WGKZ.js +0 -1
  536. package/build/dist/chunks/3AOTYJPX.js +0 -1
  537. package/build/dist/chunks/4E7FJQLL.js +0 -1
  538. package/build/dist/chunks/4J245N3F.js +0 -1
  539. package/build/dist/chunks/4M6XBG6X.js +0 -1
  540. package/build/dist/chunks/BA66J5YQ.js +0 -1
  541. package/build/dist/chunks/BIY2F6MO.js +0 -1
  542. package/build/dist/chunks/CZ66MYKR.js +0 -1
  543. package/build/dist/chunks/DFM4T6ZE.js +0 -1
  544. package/build/dist/chunks/DGCJZ3HO.js +0 -1
  545. package/build/dist/chunks/DHX3Q5RV.js +0 -2
  546. package/build/dist/chunks/DWQJ7NSX.js +0 -1
  547. package/build/dist/chunks/EFUACKDK.js +0 -1
  548. package/build/dist/chunks/EQEMI54U.js +0 -1
  549. package/build/dist/chunks/GYPMUYB5.js +0 -1
  550. package/build/dist/chunks/JFC2QCMW.js +0 -1
  551. package/build/dist/chunks/JW7GLNLB.js +0 -3
  552. package/build/dist/chunks/MEB727X5.js +0 -1
  553. package/build/dist/chunks/MIKQWF6Q.js +0 -3
  554. package/build/dist/chunks/MQK6OP7S.js +0 -1
  555. package/build/dist/chunks/OSMOBKRQ.js +0 -1
  556. package/build/dist/chunks/P6MPKIU2.js +0 -1
  557. package/build/dist/chunks/P7C3TYI4.js +0 -1
  558. package/build/dist/chunks/RN3WUJIO.js +0 -1
  559. package/build/dist/chunks/TI727O2H.js +0 -1
  560. package/build/dist/chunks/UHIJMDD2.js +0 -1
  561. package/build/dist/chunks/VQJXQLFW.js +0 -1
  562. package/build/dist/chunks/W32UECOL.js +0 -1
  563. package/build/dist/chunks/WWNAGOCD.js +0 -1
  564. package/build/dist/chunks/ZNX3YVF2.js +0 -1
@@ -1 +1 @@
1
- import{a as ze,b as Ve}from"./ZZ6FZGHF.js";import{a as B}from"./G2LAO23N.js";import{h as wt,j as Tt}from"./2GXHYI23.js";import{l as Be}from"./BA66J5YQ.js";import{o as xe}from"./GYPMUYB5.js";import{b as vt}from"./SPJCSEKP.js";import{a as kt}from"./43LI5NKJ.js";import{c as le}from"./SCG5HWMN.js";import{c as ue,d as gt,e as bt,g as U,h as c,i as ht}from"./NWNYJ26T.js";import{b as ft,c as ie}from"./IX3GZMTM.js";import{b as E,e as be,j as He}from"./TI727O2H.js";import{a as f}from"./XSD5NL7J.js";import{encodeFunctionData as ai,erc20Abi as si,getAddress as sn}from"viem";import{decodeFunctionData as Xn,encodeFunctionData as Me,erc20Abi as Jn,getAddress as Zn,parseAbi as ei}from"viem";import{decodeEventLog as Fn,decodeFunctionData as Mn,parseAbi as rt,encodeFunctionData as Ht,erc20Abi as jn,getAddress as X}from"viem";var A={source:"https://api.tickerspring.com/v1/agent/policies/privy",vaultSource:"https://api.tickerspring.com/v1/agent/vaults",basketSource:"https://api.tickerspring.com/v1/baskets",capturedAt:"2026-10-31T03:10:17Z",chainId:4663,contracts:{usdg:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",vaults:["0x130b086145C396Ac5453040F18542A21c89813f9","0x181AeCD2D273ecC4ab211f13cae3b64FdD1e4733","0xBE6DE4e132Faa7E4e89c2a3805C1438eE12ae8f5","0xa588983D0491E39DbC9417FA6Bc1542AfD7D2b8E","0x61a16A50c874b78499c70f6C29FFb9530c6041A4","0x49744dA1ddd5E6bF4d4DAae6D0e1DfB73e0eb6d6","0x51285aB74c2DE9dADbC88F6f4AFA26Af0D0cC0f6","0xB262ee0991cdd4816D7B6DA66CFdA1D05570FE5C","0x392e415aa3b93A9c496862492Fcb91AbD13064c3","0x9E42357D8D7758C43f3128317D5250147ddEBeB4","0xBF9A2c2E3FFa482c431Fca03294a2dDaf245C626","0x4A61E1eCC02087B76aD9ADd0c2b0A296c243A913","0x7Bd34332118501ae1931fee1a383F575C4300c16","0xdC8B5B786dF3d0795482D6f17148B2eCc97dA54c","0x501B1d9F8b41A0De99F97d66A680db354fF6e175","0x94B6a40E7eB2c6D5d461Da2813B742A29ee433b3","0xf812dB8bF84458F32D59B3CEEb74163649a866Fe","0x8099EBBEC19e90E16B221E035b68d24443b12337","0x0B3114D0CBc41006427faF907eDeEf4B83131956","0x815fD45b8c8655cCe07A01393A9DD8902A72c841","0x06d33b614B52f52aE9bc6B95A536127587C882a3","0x46550A2f5D3b036138513ECbB9B667545624fe1a","0xd85973D408d7b7915317E6dD0eB9dc4cDd807939","0xdaC912a99A051899E643882f7cF17258c9708468","0xd87A50AfDd0B115fEAd95F8f10062F831c8FbD5e","0x168F05e080435bd4d86E7FE0e2CEaAc9723F261B","0x179CCA533CBF695a5D13BdEB31E39a3c569e8132","0xD6F6EFDF8F7Ab578329bfe57fedb042ad7bA8eF8","0xF3ac151dE45D9AB81851F928ACf0BB3A991345c8","0x7dfA9e9C1661961e45AcF50B22aeDc992676D5a1","0x97dE2e796307b6746f5cCB8385e07EE6674AFB4a"],redeemQueue:null,limitOrderHook:"0xa31729621a2280C0Ff9Aaff5B3F357cFF1bEC040",gridStrategy:"0xd597785134307B5324f469A9506066fAd4827730",ladderStrategy:"0x23c7906D8fa3ede698A00AbE66D28605A41b4177",basketZap:"0xFca65c50325b83F8f1E07cD103c00De0cEa4Fb39"},vaults:[{address:"0x130b086145C396Ac5453040F18542A21c89813f9",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x181AeCD2D273ecC4ab211f13cae3b64FdD1e4733",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xBE6DE4e132Faa7E4e89c2a3805C1438eE12ae8f5",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xa588983D0491E39DbC9417FA6Bc1542AfD7D2b8E",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x61a16A50c874b78499c70f6C29FFb9530c6041A4",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x49744dA1ddd5E6bF4d4DAae6D0e1DfB73e0eb6d6",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x51285aB74c2DE9dADbC88F6f4AFA26Af0D0cC0f6",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xB262ee0991cdd4816D7B6DA66CFdA1D05570FE5C",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x392e415aa3b93A9c496862492Fcb91AbD13064c3",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x9E42357D8D7758C43f3128317D5250147ddEBeB4",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xBF9A2c2E3FFa482c431Fca03294a2dDaf245C626",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x4A61E1eCC02087B76aD9ADd0c2b0A296c243A913",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x7Bd34332118501ae1931fee1a383F575C4300c16",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xdC8B5B786dF3d0795482D6f17148B2eCc97dA54c",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x501B1d9F8b41A0De99F97d66A680db354fF6e175",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x94B6a40E7eB2c6D5d461Da2813B742A29ee433b3",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xf812dB8bF84458F32D59B3CEEb74163649a866Fe",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x8099EBBEC19e90E16B221E035b68d24443b12337",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x0B3114D0CBc41006427faF907eDeEf4B83131956",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x815fD45b8c8655cCe07A01393A9DD8902A72c841",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x06d33b614B52f52aE9bc6B95A536127587C882a3",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x46550A2f5D3b036138513ECbB9B667545624fe1a",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xd85973D408d7b7915317E6dD0eB9dc4cDd807939",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xdaC912a99A051899E643882f7cF17258c9708468",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xd87A50AfDd0B115fEAd95F8f10062F831c8FbD5e",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x168F05e080435bd4d86E7FE0e2CEaAc9723F261B",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x179CCA533CBF695a5D13BdEB31E39a3c569e8132",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xD6F6EFDF8F7Ab578329bfe57fedb042ad7bA8eF8",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xF3ac151dE45D9AB81851F928ACf0BB3A991345c8",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x7dfA9e9C1661961e45AcF50B22aeDc992676D5a1",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x97dE2e796307b6746f5cCB8385e07EE6674AFB4a",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"}],baskets:[{pool:"0xAa8cCd98dAe71D19A44330133134E58e47723D63",tokens:[{address:"0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73",symbol:"WETH",decimals:18},{address:"0x440e339a46eaa3bE8d723c2cBED2A30af74536D5",symbol:"SPRING",decimals:18},{address:"0xAa07A0e9209e16aC99708C3EC70159c6eF3128A3",symbol:"ORBIO",decimals:18},{address:"0xe8ffd7e24187F72afB08d75B1bb13088A989a791",symbol:"DELTA",decimals:18},{address:"0xeDBf91223639800BCd5756815CAf908Df3b890bE",symbol:"PRIORS",decimals:18}]},{pool:"0xFfa3ce39C1fe253F1b59AE29F450a0cF86f43a0d",tokens:[{address:"0x156E175DD063a8cE274C50654eF40e0032b3fbcF",symbol:"AVGO",decimals:18},{address:"0x58FfE4a942d3885bAa22D7520691F611EF09e7AA",symbol:"TSM",decimals:18},{address:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",symbol:"USDG",decimals:6},{address:"0x86923f96303D656E4aa86D9d42D1e57ad2023fdC",symbol:"AMD",decimals:18},{address:"0xB90A19fF0Af67f7779afF50A882A9CfF42446400",symbol:"SNDK",decimals:18},{address:"0xc72b96e0E48ecd4DC75E1e45396e26300BC39681",symbol:"INTC",decimals:18},{address:"0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC",symbol:"NVDA",decimals:18},{address:"0xfF080c8ce2E5feadaCa0Da81314Ae59D232d4afD",symbol:"MU",decimals:18}]},{pool:"0xe4865D555D673d7e1C542604bd242885156Cc2Fc",tokens:[{address:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",symbol:"USDG",decimals:6},{address:"0x92FD66527192E3e61d4DDd13322Aa222DE86F9B5",symbol:"SGOV",decimals:18},{address:"0xC9a981FEE1F9DEc688bb123ccDeCc63D0deBFC4e",symbol:"GLD",decimals:18},{address:"0xD5f3879160bc7c32ebb4dC785F8a4F505888de68",symbol:"QQQ",decimals:18}]},{pool:"0xD5f27E9156D817AbC3D6da89dbCE74D149BE3abA",tokens:[{address:"0x03DfbBE0AC4E7bCDaFd08eD41A400326B77D8c80",symbol:"JNJ",decimals:18},{address:"0x43B07D15cE533bEc5476d70C22a78a1B2B662155",symbol:"MRNA",decimals:18},{address:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",symbol:"USDG",decimals:6},{address:"0x7066A64c24e4206CD62E83bf198c1E7EB361F51e",symbol:"PFE",decimals:18},{address:"0x8005d266423c7ea827372c9c864491e5786600ea",symbol:"LLY",decimals:18}]},{pool:"0x2cF375A3466E511a1B951D8cA7E70e82066161F6",tokens:[{address:"0x03DfbBE0AC4E7bCDaFd08eD41A400326B77D8c80",symbol:"JNJ",decimals:18},{address:"0x411eFb0E7f985935DAec3D4C3ebaEa0d0AD7D89f",symbol:"SLV",decimals:18},{address:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",symbol:"USDG",decimals:6},{address:"0x7066A64c24e4206CD62E83bf198c1E7EB361F51e",symbol:"PFE",decimals:18},{address:"0x8005d266423c7ea827372c9c864491e5786600ea",symbol:"LLY",decimals:18},{address:"0xa30FA36Db767ad9eD3f7a60fC79526fB4d56D344",symbol:"USO",decimals:18},{address:"0xC9a981FEE1F9DEc688bb123ccDeCc63D0deBFC4e",symbol:"GLD",decimals:18}]},{pool:"0x4e2eb08E43f0A16e8A779521A91dE5c3773227c9",tokens:[{address:"0x03DfbBE0AC4E7bCDaFd08eD41A400326B77D8c80",symbol:"JNJ",decimals:18},{address:"0x58FfE4a942d3885bAa22D7520691F611EF09e7AA",symbol:"TSM",decimals:18},{address:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",symbol:"USDG",decimals:6},{address:"0x8005d266423c7ea827372c9c864491e5786600ea",symbol:"LLY",decimals:18},{address:"0x86923f96303D656E4aa86D9d42D1e57ad2023fdC",symbol:"AMD",decimals:18},{address:"0xa30FA36Db767ad9eD3f7a60fC79526fB4d56D344",symbol:"USO",decimals:18},{address:"0xC9a981FEE1F9DEc688bb123ccDeCc63D0deBFC4e",symbol:"GLD",decimals:18},{address:"0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC",symbol:"NVDA",decimals:18}]},{pool:"0x96a0Ce238e2C4ceB83d90Da264344905558e7F6b",tokens:[{address:"0x18E674231A58c239Dc7DaeDcffE15Ec3A24cff5c",symbol:"HOOKR",decimals:18},{address:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",symbol:"USDG",decimals:6},{address:"0xb8Fa8010833463Aac5595b55B9045479239EfF79",symbol:"WTH",decimals:18},{address:"0xC60bA256B44334A0Cd2C7242E98B88f031abB006",symbol:"V4",decimals:18}]},{pool:"0x99a04F81bF36FC776394f9c7CdE088620Edef922",tokens:[{address:"0x020bfC650A365f8BB26819deAAbF3E21291018b4",symbol:"CASHCAT",decimals:18},{address:"0x1b0E319c6A659F002271B69dB8A7df2F911c153E",symbol:"GME",decimals:18},{address:"0x39dBED3a2bd333467115dE45665cC57F813C4571",symbol:"PONS",decimals:18},{address:"0x440e339a46eaa3bE8d723c2cBED2A30af74536D5",symbol:"SPRING",decimals:18},{address:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",symbol:"USDG",decimals:6},{address:"0xe934e36A439C94017B64a3FecE66AF12099aBF50",symbol:"STONKBROKER",decimals:18},{address:"0xec262a75e413fAfD0dF80480274532C79D42da09",symbol:"MSTR",decimals:18},{address:"0xed6A144a9B4269F4474d2Cb042DB78C1C0711092",symbol:"TSUKI",decimals:18}]},{pool:"0x6E0F95CB18f1a3e2a0996EcdEf5a84185062ACFb",tokens:[{address:"0x000050E18ffa3F8F7aD170Eb9CeF160eb3Ed1111",symbol:"TORCH",decimals:18},{address:"0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73",symbol:"WETH",decimals:18},{address:"0x39dBED3a2bd333467115dE45665cC57F813C4571",symbol:"PONS",decimals:18},{address:"0xe934e36A439C94017B64a3FecE66AF12099aBF50",symbol:"STONKBROKER",decimals:18}]},{pool:"0xC72b8896171B30220807387A7597699c372Bf21B",tokens:[{address:"0x03DfbBE0AC4E7bCDaFd08eD41A400326B77D8c80",symbol:"JNJ",decimals:18},{address:"0x411eFb0E7f985935DAec3D4C3ebaEa0d0AD7D89f",symbol:"SLV",decimals:18},{address:"0x440e339a46eaa3bE8d723c2cBED2A30af74536D5",symbol:"SPRING",decimals:18},{address:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",symbol:"USDG",decimals:6},{address:"0x8005d266423c7ea827372c9c864491e5786600ea",symbol:"LLY",decimals:18},{address:"0x92FD66527192E3e61d4DDd13322Aa222DE86F9B5",symbol:"SGOV",decimals:18},{address:"0xC9a981FEE1F9DEc688bb123ccDeCc63D0deBFC4e",symbol:"GLD",decimals:18},{address:"0xD5f3879160bc7c32ebb4dC785F8a4F505888de68",symbol:"QQQ",decimals:18}]}],basketConfigSource:"https://api.tickerspring.com/v1/baskets/config",basketConfig:{chainId:4663,vault:"0xb01B26D72EB3a5d7846C36fc21e4e3B96994DaF2",vaultFactory:"0x5ebc5dFf360BDB8aFB6d86FA697Cb5F0C9E5E47F",router:"0x5907F6b9E27c351fF567aa6689EBA63AC97141ca",batchRouter:"0xE8381Ba38eb8166413e0FeA07C82F882eA2bA717",aggregatorRouter:"0x4B397cEEB022E32b6C3215b44259896f8dC79608",weightedPoolFactory:"0x9400a5BBdcAF5564cEb86185d07321cAefB65B41",protocolFeeController:"0x093011359d26df42608C568eff941dd59cd5401B",authorizer:"0x6C7cBD9b4C8A5ceFbc1d3440042Cba58AE8010Ab",executor:"0x39Db9BBb52af391a2b73F0f076f7D3a21E1123cb",zap:"0x81C1ad6f320462F035Fb31D6B173d2372506c5F0",permit2:"0x000000000022D473030F116dDEE9F6B43aC78BA3",usdg:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",weth:"0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73",basketZapEth:"0x579968b6Ef248BFFB13C1C5Cc76dC77487EC1Fd5",basketMaker:"0x5d3Af74Ac4880fD737F4bc2107d1566930Abd89d",basketZapV2:"0xFca65c50325b83F8f1E07cD103c00De0cEa4Fb39",basketZapEthV2:"0xaC104541cB106cb837704d8A641C14570c376992",basketMakerV2:"0xEF8C2341848F1E7CB25631e4bFD6f36B0C46f665",make:{swapFeesPct:[.3,1],minDepositUsd:25},nonces:{authorizer:1278,vaultFactory:1279,protocolFeeController:1280,router:1282,batchRouter:1283,aggregatorRouter:1284,weightedPoolFactory:1285,executor:1286,zap:1288}},siteAbiSources:{maker:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",gridRead:"https://tickerspring.com/_next/static/chunks/5785-74ee50b34dadbd7e.js"},strategyProfile:{source:"https://tickerspring.com/_next/static/chunks/5785-74ee50b34dadbd7e.js",hookSource:"https://tickerspring.com/_next/static/chunks/3246-ac3e0f12190e0ec5.js",hook:"0xb3d2C19158FDd8D687BF0D7e9DDc76b031354040",quote:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",poolFee:500,tickSpacing:10},blockedSwap:{source:"https://api.tickerspring.com/v1/trade",prepareSource:"https://api.tickerspring.com/v1/agent/prepare/swap",router:"0x75529402f73FF0Ddd10567A0590a69895439368D",kyberAdapter:"0x615950B8c42b77a2718BdBAA15469e1f7D2e2aF8",selector:"0xdc4e8da1",missing:"Published outer entrypoint ABI; request field names and calldata alone do not pin its signature."}};var K={vault:[{type:"function",name:"requestDeposit",inputs:[{name:"assets",type:"uint256",internalType:"uint256"},{name:"receiver",type:"address",internalType:"address"},{name:"minShares",type:"uint256",internalType:"uint256"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"nonpayable"},{type:"function",name:"redeem",inputs:[{name:"shares",type:"uint256",internalType:"uint256"},{name:"receiver",type:"address",internalType:"address"},{name:"owner_",type:"address",internalType:"address"},{name:"s",type:"tuple",internalType:"struct Vault.Swap",components:[{name:"tokenIn",type:"address",internalType:"address"},{name:"amountIn",type:"uint256",internalType:"uint256"},{name:"route",type:"bytes",internalType:"bytes"}]},{name:"minAssets",type:"uint256",internalType:"uint256"}],outputs:[{name:"assets",type:"uint256",internalType:"uint256"},{name:"tokenOut",type:"uint256",internalType:"uint256"}],stateMutability:"nonpayable"},{type:"function",name:"redeemInKind",inputs:[{name:"shares",type:"uint256",internalType:"uint256"},{name:"receiver",type:"address",internalType:"address"},{name:"owner_",type:"address",internalType:"address"},{name:"minUsdg",type:"uint256",internalType:"uint256"},{name:"minToken",type:"uint256",internalType:"uint256"}],outputs:[{name:"usdgOut",type:"uint256",internalType:"uint256"},{name:"tokenOut",type:"uint256",internalType:"uint256"}],stateMutability:"nonpayable"},{type:"function",name:"cancelDeposit",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"}],basket:[{type:"function",name:"buy",inputs:[{name:"pool",type:"address",internalType:"address"},{name:"tokenIn",type:"address",internalType:"address"},{name:"amountIn",type:"uint256",internalType:"uint256"},{name:"legs",type:"tuple[]",internalType:"struct BasketZap.Leg[]",components:[{name:"tokenIn",type:"address",internalType:"address"},{name:"tokenOut",type:"address",internalType:"address"},{name:"amountIn",type:"uint256",internalType:"uint256"},{name:"data",type:"bytes",internalType:"bytes"}]},{name:"minBptOut",type:"uint256",internalType:"uint256"},{name:"recipient",type:"address",internalType:"address"},{name:"deadline",type:"uint256",internalType:"uint256"}],outputs:[{name:"bptOut",type:"uint256",internalType:"uint256"}],stateMutability:"nonpayable"},{type:"function",name:"sell",inputs:[{name:"pool",type:"address",internalType:"address"},{name:"bptIn",type:"uint256",internalType:"uint256"},{name:"tokenOut",type:"address",internalType:"address"},{name:"legs",type:"tuple[]",internalType:"struct BasketZap.Leg[]",components:[{name:"tokenIn",type:"address",internalType:"address"},{name:"tokenOut",type:"address",internalType:"address"},{name:"amountIn",type:"uint256",internalType:"uint256"},{name:"data",type:"bytes",internalType:"bytes"}]},{name:"minOut",type:"uint256",internalType:"uint256"},{name:"recipient",type:"address",internalType:"address"},{name:"deadline",type:"uint256",internalType:"uint256"}],outputs:[{name:"amountOut",type:"uint256",internalType:"uint256"}],stateMutability:"nonpayable"}],grid:[{name:"open",type:"function",stateMutability:"nonpayable",inputs:[{type:"tuple",name:"o",components:[{type:"bytes32",name:"pool"},{type:"int24",name:"buyLower"},{type:"int24",name:"sellLower"},{type:"bool",name:"sellFirst"},{type:"bool",name:"repeat"},{type:"uint128",name:"amount"},{type:"uint16",name:"maxFeeBps"},{type:"uint64",name:"deadline"}]}],outputs:[]},{name:"openWithMarket",type:"function",stateMutability:"nonpayable",inputs:[{type:"tuple",name:"o",components:[{type:"bytes32",name:"pool"},{type:"int24",name:"buyLower"},{type:"int24",name:"sellLower"},{type:"bool",name:"sellFirst"},{type:"bool",name:"repeat"},{type:"uint128",name:"amount"},{type:"uint16",name:"maxFeeBps"},{type:"uint64",name:"deadline"}]},{type:"address",name:"token"},{type:"uint160",name:"initialPrice"},{type:"uint160",name:"minimumPrice"},{type:"uint160",name:"maximumPrice"}],outputs:[]},{name:"close",type:"function",stateMutability:"nonpayable",inputs:[{type:"uint256",name:"id"},{type:"uint256",name:"min0"},{type:"uint256",name:"min1"},{type:"uint64",name:"deadline"},{type:"uint8",name:"mask"}],outputs:[]},{name:"setRepeat",type:"function",stateMutability:"nonpayable",inputs:[{type:"uint256",name:"id"},{type:"bool",name:"repeat"}],outputs:[]},{name:"collect",type:"function",stateMutability:"nonpayable",inputs:[{type:"uint256",name:"id"},{type:"uint8",name:"mask"}],outputs:[]}],strategy:[{type:"function",name:"open",inputs:[{name:"o",type:"tuple",internalType:"struct LadderStrategy.Open",components:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"sellFirst",type:"bool",internalType:"bool"},{name:"repeat",type:"bool",internalType:"bool"},{name:"oneWay",type:"bool",internalType:"bool"},{name:"maxFeeBps",type:"uint16",internalType:"uint16"},{name:"deadline",type:"uint64",internalType:"uint64"},{name:"legs",type:"tuple[]",internalType:"struct LadderStrategy.LegTerms[]",components:[{name:"buyLower",type:"int24",internalType:"int24"},{name:"sellLower",type:"int24",internalType:"int24"},{name:"amount",type:"uint128",internalType:"uint128"}]}]}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"nonpayable"},{type:"function",name:"close",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"minQuote",type:"uint256",internalType:"uint256"},{name:"minToken",type:"uint256",internalType:"uint256"},{name:"deadline",type:"uint64",internalType:"uint64"},{name:"mask",type:"uint8",internalType:"uint8"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"setRepeat",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"repeat",type:"bool",internalType:"bool"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"collect",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"mask",type:"uint8",internalType:"uint8"}],outputs:[],stateMutability:"nonpayable"}],maker:["struct Leg { address tokenIn; address tokenOut; uint256 amountIn; bytes data; }","struct Basket { string name; string symbol; address[] tokens; uint256[] normalizedWeights; uint256 swapFeePercentage; bytes32 salt; }","function make(Basket basket, address tokenIn, uint256 amountIn, Leg[] legs, uint256 minBptOut, address recipient, uint256 deadline) payable returns (address pool, uint256 bptOut)","function poolSalt(address caller, bytes32 salt) pure returns (bytes32)","function vault() view returns (address)","function router() view returns (address)","function permit2() view returns (address)","function factory() view returns (address)","function kyberRouter() view returns (address)","function kyberRouterCodeHash() view returns (bytes32)","function weth() view returns (address)","function admin() view returns (address)","event Made(address indexed pool, address indexed maker, address indexed recipient, address tokenIn, uint256 amountIn, uint256 bptOut)","error ZeroAddress()","error BadRouter()","error BadFactory()","error BadWeth()","error KyberCodeChanged()","error NotRouter()","error Expired(uint256 deadline)","error BadRecipient(address recipient)","error ZeroAmount()","error BadToken(address token)","error BadValue(uint256 value, uint256 amountIn)","error ReservedSymbol()","error BadLegToken(address token)","error LegAmountTooHigh(address token, uint256 amountIn, uint256 available)","error LegNoOutput(address token)","error NothingOf(address token)","error TransferInMismatch(address token, uint256 received, uint256 expected)","error BalanceBelowStart(address token, uint256 balance, uint256 start)","error BalanceChanged(address token, uint256 balance, uint256 start)","error BptOutBelowMin(uint256 bptOut, uint256 minBptOut)","error ReentrancyGuardReentrantCall()","error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)","error SafeERC20FailedOperation(address token)"],kyber:["function swap((address callTarget,address approveTarget,bytes targetData,(address srcToken,address dstToken,address[] srcReceivers,uint256[] srcAmounts,address[] feeReceivers,uint256[] feeAmounts,address dstReceiver,uint256 amount,uint256 minReturnAmount,uint256 flags,bytes permit) desc,bytes clientData) execution) payable returns(uint256,uint256)"],gridRead:[{type:"function",name:"hook",inputs:[],outputs:[{name:"",type:"address",internalType:"contract GroupedOrderHook"}],stateMutability:"view"}],basketFactory:["function create(string name, string symbol, (address token, uint8 tokenType, address rateProvider, bool paysYieldFees)[] tokens, uint256[] normalizedWeights, (address pauseManager, address swapFeeManager, address poolCreator) roleAccounts, uint256 swapFeePercentage, address poolHooksContract, bool enableDonation, bool disableUnbalancedLiquidity, bytes32 salt) returns (address pool)","function isPoolFromFactory(address pool) view returns (bool)","function getVault() view returns (address)","event PoolCreated(address indexed pool)"],basketVault:["function getPoolTokens(address pool) view returns (address[] tokens)","function getPoolTokenInfo(address pool) view returns (address[] tokens, (uint8 tokenType, address rateProvider, bool paysYieldFees)[] tokenInfo, uint256[] balancesRaw, uint256[] lastBalancesLiveScaled18)","function isPoolRegistered(address pool) view returns (bool)","function isPoolInitialized(address pool) view returns (bool)","function isPoolPaused(address pool) view returns (bool)","function isPoolInRecoveryMode(address pool) view returns (bool)","function disableRecoveryMode(address pool)","function getActionId(bytes4 selector) view returns (bytes32)","function isVaultPaused() view returns (bool)","function getPoolRoleAccounts(address pool) view returns ((address pauseManager, address swapFeeManager, address poolCreator))","function getStaticSwapFeePercentage(address pool) view returns (uint256)","function getProtocolFeeController() view returns (address)","function getAuthorizer() view returns (address)","function pausePool(address pool)","function unpausePool(address pool)","function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage)","function getReservesOf(address token) view returns (uint256)"]};var At={capturedOn:"2026-10-31",scope:"Observed official public API, official site/docs and published app ABI literals; no claim of exhaustive unpublished/private product coverage. CLOSED means fixture-tested scoped implementation or explicit UI handoff, not live settlement. SHARED means a returned integration diff is required.",sources:[{url:"https://api.tickerspring.com/v1/agent/llms.txt",sha256:"0968da67b16f1b86791cbdb74bb44855f92c1d95ae6556d6b2a8b14390ad8987",quote:"The API never holds keys, never signs and never sends a transaction."},{url:"https://api.tickerspring.com/v1/agent/skill.md",sha256:"003ebf79f352b397ad35834b217a52b2dbd948ae6fa5f2d2e8c6d851aecb7ed3",quote:"Back an agent"},{url:"https://api.tickerspring.com/v1/agent/openapi.json",sha256:"423b311b925fc56bfb5208d98bb32cc222d158d900a05a4879a0770c1b388252",quote:"Ticker Spring agent API"},{url:"https://api.tickerspring.com/v1/agent/products",sha256:"1e19a9f0e1bf633df2ac318a6e076db14c57342dac49947c9ca979a8928d1ee2",quote:"marketsComplete"},{url:"https://api.tickerspring.com/v1/trade",sha256:"ec3d5b526b9fa752ad4be7dbcde0335621940a62f732d5fdb674d7245375ae29",quote:"twapOrderBook"},{url:"https://api.tickerspring.com/v1/spring-orders/config",sha256:"48643db7e04746435a76e02a2081bf8e538934dc0bb76d944903853b3d2d2118",quote:"average"},{url:"https://tickerspring.com/docs",sha256:"d4a3dc834b1a7192c7344dcd84a2f45dd14c5805d0d4e738a6cdca9be0609e7a",quote:"Vaults include multiple withdrawal and recovery paths"}],features:[{id:"API-1",feature:"Availability and fee directory",who:"user / agent",quote:"GET /v1/agent/products",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_products"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-2",feature:"Eligible vault list or pinned vault detail",who:"user / agent",quote:"GET /v1/agent/vaults",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_vaults"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-3",feature:"Eligible vault list or pinned vault detail",who:"user / agent",quote:"GET /v1/agent/vaults/{vault}",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_vaults"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-4",feature:"Separate vault prices or earnings stream",who:"user / agent",quote:"GET /v1/agent/vaults/{vault}/prices",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_vault_history"],detail:"Supported documented route; see limitations for conditional modes.",test:"research.test.ts"},{id:"API-5",feature:"Separate vault prices or earnings stream",who:"user / agent",quote:"GET /v1/agent/vaults/{vault}/earnings",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_vault_history"],detail:"Supported documented route; see limitations for conditional modes.",test:"research.test.ts"},{id:"API-6",feature:"Wallet changes since a provider cursor",who:"user / agent",quote:"GET /v1/agent/accounts/{owner}/activity",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_activity"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-7",feature:"Complete wallet product state",who:"user / agent",quote:"GET /v1/agent/accounts/{owner}",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_account"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-8",feature:"Historical grid replay",who:"user / agent",quote:"POST /v1/agent/backtest/grid",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_backtest_grid"],detail:"Supported documented route; see limitations for conditional modes.",test:"research.test.ts"},{id:"API-9",feature:"Historical independent-order replay",who:"user / agent",quote:"POST /v1/agent/backtest/ladder",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_backtest_ladder"],detail:"Supported documented route; see limitations for conditional modes.",test:"research.test.ts"},{id:"API-10",feature:"Historical grid line comparison",who:"user / agent",quote:"GET /v1/agent/ranges",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_ranges"],detail:"Supported documented route; see limitations for conditional modes.",test:"research.test.ts"},{id:"API-11",feature:"Scanned grid or dip-ladder candidates",who:"user / agent",quote:"GET /v1/agent/grid/tokens",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_strategy_tokens"],detail:"Supported documented route; see limitations for conditional modes.",test:"research.test.ts"},{id:"API-12",feature:"Budget-based grid or dip-ladder plan",who:"user / agent",quote:"GET /v1/agent/grid/plan",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_plan"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-13",feature:"Scanned grid or dip-ladder candidates",who:"user / agent",quote:"GET /v1/agent/ladder/tokens",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_strategy_tokens"],detail:"Supported documented route; see limitations for conditional modes.",test:"research.test.ts"},{id:"API-14",feature:"Budget-based grid or dip-ladder plan",who:"user / agent",quote:"GET /v1/agent/ladder/plan",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_plan"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-15",feature:"Branded swap output estimate",who:"user / agent",quote:"GET /v1/agent/swap/quote",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_swap_quote"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-16",feature:"Basket composition feasibility",who:"user / agent",quote:"POST /v1/agent/baskets/plan",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_basket_plan"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-17",feature:"Official API, instructions or wallet-policy reference",who:"user / agent",quote:"GET /v1/agent/policies/privy",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_instructions"],detail:"Public reference handoff",test:"research.test.ts"},{id:"API-18",feature:"Official API, instructions or wallet-policy reference",who:"user / agent",quote:"GET /v1/agent/policies/turnkey",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_instructions"],detail:"Public reference handoff",test:"research.test.ts"},{id:"API-19",feature:"Official API, instructions or wallet-policy reference",who:"user / agent",quote:"GET /v1/agent/openapi.json",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_instructions"],detail:"Public reference handoff",test:"research.test.ts"},{id:"API-20",feature:"Official API, instructions or wallet-policy reference",who:"user / agent",quote:"GET /v1/agent/skill.md",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_instructions"],detail:"Public reference handoff",test:"research.test.ts"},{id:"API-21",feature:"Official API, instructions or wallet-policy reference",who:"user / agent",quote:"GET /v1/agent/llms.txt",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_instructions"],detail:"Public reference handoff",test:"research.test.ts"},{id:"API-22",feature:"USDG deposit request",who:"user / agent",quote:"POST /v1/agent/prepare/vault-deposit",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_vault_deposit"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-23",feature:"Pending deposit refund",who:"user / agent",quote:"POST /v1/agent/prepare/vault-cancel-deposit",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_vault_cancel_deposit"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-24",feature:"Direct vault share redemption",who:"user / agent",quote:"POST /v1/agent/prepare/vault-withdraw",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_vault_withdraw"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-25",feature:"Queued redemption cancellation",who:"user / agent",quote:"POST /v1/agent/prepare/vault-cancel-withdraw",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"BLOCKED",tools:[],detail:"No agent vault in the complete 31-vault directory has a redeemQueue. Need an eligible deployed queue linked to a pinned vault, matched release/ABI, and request/cancel/settle fixture.",test:"public research: unavailable agent backing / positive deployed wrapper control; source inventory"},{id:"API-26",feature:"Single limit-order entry",who:"user / agent",quote:"POST /v1/agent/prepare/limit-order",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_create"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-27",feature:"Independent limit-order batch",who:"user / agent",quote:"POST /v1/agent/prepare/ladder",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_ladder"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-28",feature:"Order cancellation, payout and realization",who:"user / agent",quote:"POST /v1/agent/prepare/order-action",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_cancel","tickerspring_claim","tickerspring_order_accounting"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-29",feature:"Grid entry and position management",who:"user / agent",quote:"POST /v1/agent/prepare/grid",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_grid"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-30",feature:"Existing ladder-strategy position management",who:"user / agent",quote:"POST /v1/agent/prepare/ladder-strategy",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_ladder_strategy"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-31",feature:"Basket-token acquisition",who:"user / agent",quote:"POST /v1/agent/prepare/basket-buy",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_basket_buy"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-32",feature:"Basket-token redemption",who:"user / agent",quote:"POST /v1/agent/prepare/basket-sell",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_basket_sell"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-33",feature:"New basket and first contribution",who:"user / agent",quote:"POST /v1/agent/prepare/basket-make",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_basket_make"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-34",feature:"Branded swap transaction",who:"user / agent",quote:"POST /v1/agent/prepare/swap",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"BLOCKED",tools:[],detail:"The router pin and selector 0xdc4e8da1 are known, but its outer ABI, executor/adapter authorization and fee/recipient validation are not published in the captured agent policy. Need the matching router source/ABI plus a quote-to-exit fixture and local guard.",test:"public research: unavailable agent backing / positive deployed wrapper control; source inventory"},{id:"API-35",feature:"Agent backing entry",who:"user / agent",quote:"POST /v1/agent/prepare/agent-back",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"BLOCKED",tools:[],detail:"Weekend has a deployed public wrapper (0xA2E0a3a08E19cF244578C04eD59aE9fAa60e629B), unlike Night/Balance/Bill null controls. Need its matched public wrapper ABI/release, share decimals, receiver/minimum semantics and a request-to-settlement/exit fixture; ordinary pool-vault ABIs are not its ABI.",test:"public research: unavailable agent backing / positive deployed wrapper control; source inventory"},{id:"API-36",feature:"Agent backing exit",who:"user / agent",quote:"POST /v1/agent/prepare/agent-leave",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"BLOCKED",tools:[],detail:"Need the agent-wrapper matched ABI/release, share decimals and USDG/in-kind route guards; the public pool-vault ABI cannot validate the wrapper.",test:"public research: unavailable agent backing / positive deployed wrapper control; source inventory"},{id:"API-37",feature:"Agent backing request cancellation",who:"user / agent",quote:"POST /v1/agent/prepare/agent-cancel",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"BLOCKED",tools:[],detail:"Need the agent-wrapper matched ABI/release, pending-request ownership/cancel semantics and refund fixture.",test:"public research: unavailable agent backing / positive deployed wrapper control; source inventory"},{id:"API-38",feature:"Public grading records and counts",who:"user / agent",quote:"GET /v1/agent/report-card/{owner}",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_report_card"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-39",feature:"Private owner grading records",who:"owner",quote:"GET /v1/agent/report-card/{owner}/private",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"BLOCKED",tools:[],detail:"Requires an owner personal_sign session. Need a separately reviewed local authentication continuation and protected token lifecycle; use the official owner sign-in handoff. No signature/bearer arguments are exposed.",test:"public research: unavailable agent backing / positive deployed wrapper control; source inventory"},{id:"API-40",feature:"Owner authentication challenge",who:"owner",quote:"POST /v1/agent/report-card/session/challenge",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"BLOCKED",tools:[],detail:"Needs the local-only personal_sign authentication continuation with domain/message/expiry binding; use the official UI.",test:"public research: unavailable agent backing / positive deployed wrapper control; source inventory"},{id:"API-41",feature:"Owner authentication exchange",who:"owner",quote:"POST /v1/agent/report-card/session",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"BLOCKED",tools:[],detail:"Needs owner-session exchange, protected storage and expiry/deletion handling outside this module scope; no owner signatures or tokens may be forwarded as tool inputs.",test:"public research: unavailable agent backing / positive deployed wrapper control; source inventory"},{id:"API-42",feature:"Stored unsigned request inspection",who:"user / agent",quote:"GET /v1/agent/sign-requests/{id}",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_sign_request"],detail:"Supported documented route; see limitations for conditional modes.",test:"research.test.ts"},{id:"PUBLIC-STATS",feature:"Protocol totals",who:"user / agent",quote:"GET /v1/public/stats",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"SHARED",tools:["tickerspring_stats"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"TOKEN-DIRECTORY",feature:"Token search, categories, volume sort and market flags",who:"user / agent",quote:"GET /v1/tokens",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"CLOSED",tools:["tickerspring_tokens"],detail:"See playbook for safety and measurement boundaries.",test:"journey.test.ts / index.test.ts"},{id:"BASKET-HOLDINGS",feature:"Basket holdings and earned fees",who:"user / agent",quote:"GET /v1/baskets/{pool}/account/{owner}",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"CLOSED",tools:["tickerspring_baskets"],detail:"See playbook for safety and measurement boundaries.",test:"journey.test.ts / index.test.ts"},{id:"BASKET-HISTORY",feature:"Basket price/history",who:"user / agent",quote:"GET /v1/baskets/{pool}/history",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"SHARED",tools:["tickerspring_basket_history"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"FINDER",feature:"Strategy finder and period/category/style filters",who:"user / agent",quote:"GET /v1/strategy-finder",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"SHARED",tools:["tickerspring_strategy_finder"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"FINDER-DETAIL",feature:"All styles for one token",who:"user / agent",quote:"GET /v1/strategy-finder/{token}",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"SHARED",tools:["tickerspring_strategy_detail"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"FINDER-TRACK",feature:"Past board picks, including losses",who:"user / agent",quote:"GET /v1/strategy-finder/track-record",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"SHARED",tools:["tickerspring_strategy_track_record"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"FINDER-BACKTEST",feature:"On-demand published-variant strategy backtest",who:"user / agent",quote:"POST /v1/strategy-finder/backtest",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"SHARED",tools:["tickerspring_backtest_strategy"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"AGENTS",feature:"Agent directory",who:"user / backer",quote:"GET /v1/agents",source:"https://api.tickerspring.com/v1/agent/skill.md",status:"SHARED",tools:["tickerspring_agents"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"AGENT-VAULT",feature:"Backing wrapper availability and this wallet state",who:"user / backer",quote:"GET /v1/agents/{slug}/vault?owner=",source:"https://api.tickerspring.com/v1/agent/skill.md",status:"SHARED",tools:["tickerspring_agent_vault"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"TRADE-DIRECTORY",feature:"Swap, alternative limit and TWAP deployments and availability",who:"user / agent",quote:"GET /v1/trade",source:"https://api.tickerspring.com/v1/trade",status:"SHARED",tools:["tickerspring_trade_directory"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"TRADE-TOKEN",feature:"Trade token metadata",who:"user / agent",quote:"GET /v1/trade/token",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"SHARED",tools:["tickerspring_trade_token"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"TRADE-COMPARE",feature:"Aggregator comparison quotes",who:"user / agent",quote:"GET /v1/trade/quotes",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"SHARED",tools:["tickerspring_trade_quotes"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"SPRING-DISCOVERY",feature:"Spring Orders live configuration, markets, retired contracts and keeper status",who:"user / agent",quote:"GET /v1/spring-orders/config",source:"https://api.tickerspring.com/v1/spring-orders/config",status:"SHARED",tools:["tickerspring_spring_config"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"SPRING-HANDOFF",feature:"Configure/fund/repeat/monitor/stop/exit through the official site",who:"owner",quote:"On the site only, with no agent route yet",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"CLOSED",tools:["tickerspring_spring_orders"],detail:"See playbook for safety and measurement boundaries.",test:"journey.test.ts / index.test.ts"},{id:"EXIT-ESTIMATE",feature:"Simulated current cancellation refund/proceeds, excluding gas",who:"user / agent",quote:"cancel(uint256,uint256,uint256,uint64,uint8)",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"CLOSED",tools:["tickerspring_order_exit_preview"],detail:"See playbook for safety and measurement boundaries.",test:"journey.test.ts / index.test.ts"},{id:"RECEIPT",feature:"Wallet transaction receipt",who:"user / agent",quote:"get_tx_status",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"CLOSED",tools:["tickerspring_tx_status"],detail:"See playbook for safety and measurement boundaries.",test:"journey.test.ts / index.test.ts"},{id:"REALIZE",feature:"Realize settled bucket accounting",who:"order owner",quote:"realize(uint256)",source:"https://tickerspring.com/_next/static/chunks/649-83b30689528eca4b.js",status:"CLOSED",tools:["tickerspring_order_accounting"],detail:"Unsigned direct contract action; provider report-card filing is unavailable.",test:"research.test.ts"},{id:"CLAIM-ONE",feature:"Claim just currency0 or currency1",who:"order owner",quote:"claim(uint256,bool)",source:"https://tickerspring.com/_next/static/chunks/649-83b30689528eca4b.js",status:"CLOSED",tools:["tickerspring_order_accounting"],detail:"Unsigned direct contract action; provider report-card filing is unavailable.",test:"research.test.ts"},{id:"OWNER-HANDOFF",feature:"Owner sign-in for private report cards and wallet attempt counts",who:"owner",quote:"personal_sign",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"SHARED",tools:["tickerspring_owner_report_card"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"QUEUE-ENTRY",feature:"Queued vault withdrawal",who:"user / agent",quote:"Queued vault withdrawal",source:"https://api.tickerspring.com/v1/agent/vaults",status:"BLOCKED",tools:[],detail:"No live agent-vault queue in the complete registry; need a deployed eligible queue pin, matched ABI and tested lifecycle.",test:"public-fixtures.json positive availability controls; source inventory"},{id:"LADDER-OPEN",feature:"Repeating ladder-strategy opening",who:"user / agent",quote:"Repeating ladder-strategy opening",source:"https://api.tickerspring.com/v1/agent/products",status:"BLOCKED",tools:[],detail:"products.ladderStrategies.markets is empty with marketsComplete=true. Need an eligible listed market and official entry fixture. Existing management and independent ladders are available.",test:"public-fixtures.json positive availability controls; source inventory"},{id:"PRINCIPAL",feature:"Fee-exclusive remaining principal",who:"user / agent",quote:"Fee-exclusive remaining principal",source:"https://api.tickerspring.com/v1/agent/accounts/{owner}",status:"BLOCKED",tools:[],detail:"Published getter/account fields expose original debit and accrued accounting, without an authoritative fee-exclusive per-order refundable-principal quote. Need the provider field or reviewed accounting specification; simulated aggregate exits are available.",test:"public-fixtures.json positive availability controls; source inventory"},{id:"FINDER-CUSTOM",feature:"Custom strategy settings",who:"user / agent",quote:"Custom strategy settings",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"BLOCKED",tools:[],detail:"Need versioned per-strategy settings schemas and units; the public guide only says settings?, and OpenAPI omits this route. Published variants are supported.",test:"public-fixtures.json positive availability controls; source inventory"},{id:"FINDER-ATTEMPTS",feature:"Wallet-attributed backtest attempt counts",who:"user / agent",quote:"Wallet-attributed backtest attempt counts",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"BLOCKED",tools:[],detail:"Needs an owner sign-in session and its local authentication/token lifecycle. Use the official owner sign-in UI.",test:"public-fixtures.json positive availability controls; source inventory"},{id:"SPRING-WRITES",feature:"Direct Spring Orders open/repeat/collect/close/sync/place, including retired exits",who:"user / agent",quote:"Direct Spring Orders open/repeat/collect/close/sync/place, including retired exits",source:"https://tickerspring.com/_next/static/chunks/9073-ce348764549e4d43.js",status:"BLOCKED",tools:[],detail:"ABI and current/retired addresses were found. Need a reviewed deployment-to-runtime match and entry-through-fill/exit fixture for the grouped accounting, take-profit parts, minimum checks and keeper deferrals; no agent prepare route publishes validated terms. Official UI handoff and raw state reads are available.",test:"public-fixtures.json positive availability controls; source inventory"},{id:"ALT-LIMIT",feature:"Alternative trade-router limit lifecycle",who:"user / agent",quote:"Alternative trade-router limit lifecycle",source:"https://api.tickerspring.com/v1/trade",status:"BLOCKED",tools:[],detail:"Directory positively advertises a separate limitOrderBook, distinct from the grouped hook. Need matching public book/adapter ABI, signed-order or escrow semantics and prepare/cancel/status fixtures.",test:"public-fixtures.json positive availability controls; source inventory"},{id:"TWAP",feature:"Trade-router TWAP lifecycle",who:"user / agent",quote:"Trade-router TWAP lifecycle",source:"https://api.tickerspring.com/v1/trade",status:"BLOCKED",tools:[],detail:"Directory positively advertises twapOrderBook. Need the matched book/adapter ABI, schedule/fill/cancel/remaining-escrow semantics and a lifecycle fixture.",test:"public-fixtures.json positive availability controls; source inventory"},{id:"LENDING",feature:"Lending and leveraged vault loops",who:"user / agent",quote:"Not offered: lending",source:"https://tickerspring.com/docs",status:"BLOCKED",tools:[],detail:"Official agent index says not offered; site docs describe future lending. Need an active supported deployment and public action contract.",test:"public-fixtures.json positive availability controls; source inventory"},{id:"LAUNCHPAD",feature:"Launchpad",who:"user / agent",quote:"Launchpad Soon",source:"https://tickerspring.com/agents",status:"BLOCKED",tools:[],detail:"Site navigation labels it Soon. Need public deployment, user flow and ABI/API.",test:"public-fixtures.json positive availability controls; source inventory"},{id:"READ-VAULT",feature:"vault full published view/pure ABI",who:"user / owner / keeper",quote:"MAX_COOLDOWN / MAX_DAILY_LOSS_BPS / MAX_FEE_BPS / MAX_LOSS_BPS / MAX_SLIPPAGE_BPS / allowance / asset / balanceOf / blockedClaims / blockedToken / blockedUnpaid / buybackFees / canDeposit / config / decimals / depositAllowlist / depositRequests / depositsPaused / keeperPaused / lastRangeChange / lossBudgetUsed / lossUpdatedAt / minDeposit / name / nextDepositId / owner / pendingDeposits / pendingHeld / pendingOwner / previewDeposit / priceModule / protocolFees / recoveryBlocked / recoverySupply / renounceOwnership / rewardPriceModule / rewardToken / swapper / symbol / token / totalAssets / totalSupply / usdg / venue",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",status:"SHARED",tools:["tickerspring_contract_read"],detail:"Pinned targets; ABI-shaped arguments; no write selector accepted. Returns public state only.",test:"research.test.ts: public contract read boundary"},{id:"READ-LIMIT",feature:"limit full published view/pure ABI",who:"user / owner / keeper",quote:"COMPLETION_BPS / completionPrice / MAX_FEE_BPS / MAX_LEVELS / MIN_CAP_SPAN / activeBandCount / currentBucket / depth / depthDescending / feePolicy / generation / getBucket / getMarketMinimums / getOrder / getPoolConfig / lastPrice / levelBoundary / listOrders / manager / marketKey / marketProfile / nextOrder / orderCount / protocolAccrued / registeredPools / registrar / treasury",source:"https://tickerspring.com/_next/static/chunks/649-83b30689528eca4b.js",status:"SHARED",tools:["tickerspring_contract_read"],detail:"Pinned targets; ABI-shaped arguments; no write selector accepted. Returns public state only.",test:"research.test.ts: public contract read boundary"},{id:"READ-GRID",feature:"grid full published view/pure ABI",who:"user / owner / keeper",quote:"BUYING / CLOSED / DELIVER_QUOTE / DELIVER_TOKEN / DONE / SELLING / canFlip / flippable / getPosition / hook / listPositions / nextPosition / positionCount / quote",source:"https://tickerspring.com/_next/static/chunks/5785-74ee50b34dadbd7e.js",status:"SHARED",tools:["tickerspring_contract_read"],detail:"Pinned targets; ABI-shaped arguments; no write selector accepted. Returns public state only.",test:"research.test.ts: public contract read boundary"},{id:"READ-SPRING",feature:"spring full published view/pure ABI",who:"user / owner / keeper",quote:"ACTIVE / CLOSED / DEFERRED / DELIVER_QUOTE / DELIVER_TOKEN / DONE / FILLED / FINISHING / HEADROOM_BPS / LAST_PART_DROP_BPS / MAX_GAIN_BPS / MAX_LEVELS / MAX_PARTS / MAX_PLACEMENTS / MIN_SHARE_BPS / OPEN_BAD_TERMS / OPEN_LAST_PART_TOO_SMALL / OPEN_LEVEL_TOO_SMALL / OPEN_OK / OPEN_UNSUPPORTED / PENDING / READY_BUY_FILLED / READY_PLACE / READY_TP_FILLED / RESTING / TP_EMPTY / TP_PLANNED / TP_RESTING / TP_SOLD / UNARMED / WAITING / WAIT_FEE / WAIT_HOOK / WAIT_ORDER / WAIT_PAUSED / WAIT_PRICE / WAIT_SIZE / checkOpen / getPosition / hook / lastPartMinimum / levelMinimum / listPositions / manager / nextPosition / planFor / positionCount / previewTakeProfit / quote / readySync / roundEndOf",source:"https://tickerspring.com/_next/static/chunks/9073-ce348764549e4d43.js",status:"SHARED",tools:["tickerspring_contract_read"],detail:"Pinned targets; ABI-shaped arguments; no write selector accepted. Returns public state only.",test:"research.test.ts: public contract read boundary"},{id:"READ-BASKET_VAULT",feature:"basket_vault full published view/pure ABI",who:"user / owner / keeper",quote:"getPoolTokens / getPoolTokenInfo / isPoolRegistered / isPoolInitialized / isPoolPaused / isPoolInRecoveryMode / getActionId / isVaultPaused / getPoolRoleAccounts / getStaticSwapFeePercentage / getProtocolFeeController / getAuthorizer / getReservesOf",source:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",status:"SHARED",tools:["tickerspring_contract_read"],detail:"Pinned targets; ABI-shaped arguments; no write selector accepted. Returns public state only.",test:"research.test.ts: public contract read boundary"},{id:"READ-BASKET_FACTORY",feature:"basket_factory full published view/pure ABI",who:"user / owner / keeper",quote:"isPoolFromFactory / getVault",source:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",status:"SHARED",tools:["tickerspring_contract_read"],detail:"Pinned targets; ABI-shaped arguments; no write selector accepted. Returns public state only.",test:"research.test.ts: public contract read boundary"},{id:"READ-BASKET_MAKER",feature:"basket_maker full published view/pure ABI",who:"user / owner / keeper",quote:"poolSalt / vault / router / permit2 / factory / kyberRouter / kyberRouterCodeHash / weth / admin",source:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",status:"SHARED",tools:["tickerspring_contract_read"],detail:"Pinned targets; ABI-shaped arguments; no write selector accepted. Returns public state only.",test:"research.test.ts: public contract read boundary"}],roleWrites:[{contract:"vault",function:"acceptOwnership",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"approve",who:"ERC-20 holder / spender",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"Standalone token allowance/third-party transfer or protocol callback is not exposed as an Oak project action; needs explicit input/recipient semantics and dedicated local guard. Existing product approvals remain exact."},{contract:"vault",function:"claimBlocked",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"claimFees",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"openRecovery",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"rebalance",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"redeemRecovery",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"releaseBlocked",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"setConfig",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"setDepositAllowlist",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"setDepositor",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"setPaused",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"setStaking",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"settleDeposits",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"transfer",who:"ERC-20 holder / spender",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"Standalone token allowance/third-party transfer or protocol callback is not exposed as an Oak project action; needs explicit input/recipient semantics and dedicated local guard. Existing product approvals remain exact."},{contract:"vault",function:"transferFrom",who:"ERC-20 holder / spender",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"Standalone token allowance/third-party transfer or protocol callback is not exposed as an Oak project action; needs explicit input/recipient semantics and dedicated local guard. Existing product approvals remain exact."},{contract:"vault",function:"transferOwnership",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"limit",function:"afterSwap",who:"protocol callback",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/649-83b30689528eca4b.js",missing:"Standalone token allowance/third-party transfer or protocol callback is not exposed as an Oak project action; needs explicit input/recipient semantics and dedicated local guard. Existing product approvals remain exact."},{contract:"limit",function:"enableMarketProfile",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/649-83b30689528eca4b.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"limit",function:"openMarket",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/649-83b30689528eca4b.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"limit",function:"registerPool",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/649-83b30689528eca4b.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"limit",function:"unlockCallback",who:"protocol callback",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/649-83b30689528eca4b.js",missing:"Standalone token allowance/third-party transfer or protocol callback is not exposed as an Oak project action; needs explicit input/recipient semantics and dedicated local guard. Existing product approvals remain exact."},{contract:"limit",function:"withdrawCommission",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/649-83b30689528eca4b.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"grid",function:"flip",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/5785-74ee50b34dadbd7e.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"spring",function:"close",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/9073-ce348764549e4d43.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"spring",function:"collect",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/9073-ce348764549e4d43.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"spring",function:"open",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/9073-ce348764549e4d43.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"spring",function:"place",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/9073-ce348764549e4d43.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"spring",function:"setRepeat",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/9073-ce348764549e4d43.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"spring",function:"sync",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/9073-ce348764549e4d43.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"basket_vault",function:"disableRecoveryMode",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"basket_vault",function:"pausePool",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"basket_vault",function:"unpausePool",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"basket_vault",function:"setStaticSwapFeePercentage",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."}],newReadTools:["tickerspring_stats","tickerspring_vault_history","tickerspring_basket_history","tickerspring_strategy_tokens","tickerspring_ranges","tickerspring_backtest_grid","tickerspring_backtest_ladder","tickerspring_strategy_finder","tickerspring_strategy_detail","tickerspring_strategy_track_record","tickerspring_backtest_strategy","tickerspring_agents","tickerspring_agent_vault","tickerspring_instructions","tickerspring_owner_report_card","tickerspring_sign_request","tickerspring_contract_read","tickerspring_trade_directory","tickerspring_trade_token","tickerspring_trade_quotes","tickerspring_spring_config"]};import{decodeFunctionData as cn,encodeAbiParameters as pn,encodeFunctionData as Ke,erc20Abi as dn,getAddress as Ee,keccak256 as ln}from"viem";var ce=Ee(A.contracts.usdg),mn=Ee(A.strategyProfile.hook);function S(e="TickerSpring strategy calldata does not match the requested action."){throw new f(e)}function Dt(e){return typeof e!="boolean"&&S("Provide an explicit repeat setting."),e}function xt(e,t=mn){let i=BigInt(e)<BigInt(ce)?[e,ce]:[ce,e];return ln(pn([{type:"address"},{type:"address"},{type:"uint24"},{type:"int24"},{type:"address"}],[...i,A.strategyProfile.poolFee,A.strategyProfile.tickSpacing,t]))}function yn(e,t){(typeof e!="number"||!Number.isInteger(e)||e%10!==0||e<-887270||e>887260)&&S();let i=Be(e),n=i*i,s=1n<<192n;return BigInt(t.address)<BigInt(ce)?n*10n**BigInt(t.decimals)*10n**18n/(s*10n**6n):s*10n**BigInt(t.decimals)*10n**18n/(n*10n**6n)}function We(e,t,i){let n=yn(e,i),s=BigInt(ie(t,18,"floor")),r=n>s?n-s:s-n;(s===0n||r*10000n>s*25n)&&S("TickerSpring grid price band is outside 0.25% of the requested line.")}async function Bt(e,t,i,n){a.inputs(t,["action","token","buyPrice","sellPrice","amount","repeat","startingPrice","id","min0","min1","agentTag"]);let s=t.action;["open","close","collect","setRepeat"].includes(String(s))||S("Choose open, close, collect or setRepeat.");let r=Ee(n==="grid"?A.contracts.gridStrategy:A.contracts.ladderStrategy),u=n==="grid"?K.grid:K.strategy;if(s!=="open"){let I=s==="setRepeat"?["action","id","repeat"]:s==="close"?["action","id","min0","min1"]:["action","id"];a.inputs(t,[...I,"agentTag"]);let $=a.integer(t.id),F=s==="setRepeat"?Dt(t.repeat):void 0,M=a.prepared(e,await a.request(e,`/v1/agent/prepare/${n}`,{owner:i,...a.attribution(t),action:s,id:$,...F===void 0?{}:{repeat:F}}),i,n);(M.txs.length!==1||!c(M.txs[0].to,r))&&S();let Z=cn({abi:u,data:M.txs[0].data}),H=Z.args;if((Z.functionName!==s||H[0]!==BigInt($))&&S(),s==="setRepeat"&&H[1]!==F&&S(),s==="collect"&&H[1]!==3&&S("Collect must deliver both strategy currencies."),s==="close"){let z=BigInt(a.integer(t.min0)),Y=BigInt(a.integer(t.min1));(z+Y<=1n||typeof H[1]!="bigint"||typeof H[2]!="bigint"||H[1]<z||H[2]<Y||H[4]!==3)&&S("Close must preserve protected minima and deliver both strategy currencies."),a.futureDeadline(String(H[3]))}return U(M.txs[0].data,Ke({abi:u,functionName:Z.functionName,args:H}))||S(),a.result(e,M,i,{id:$,action:s,...s==="close"?{deadline:String(H[3])}:{}},"Strategy fill fee: 1%. Collect takes available proceeds; disabling repeat does not close the current leg. Close exits the position. Verify the full account and both balances after the receipt.")}n!=="grid"&&S("No ladder-strategy markets are currently listed. Read tickerspring_products; a listed market and its official entry fixture are required before Oak can open one. Existing positions can still close, collect or change repeat."),a.inputs(t,["action","token","buyPrice","sellPrice","amount","repeat","startingPrice","agentTag"]);let o=a.positive(t.amount),p=Ee(a.address(t.token));BigInt(o)<11000000n&&S("TickerSpring grids require at least 11 USDG.");let l=a.price(a.text(t.buyPrice)),d=a.price(a.text(t.sellPrice));BigInt(ie(l,18,"floor"))>=BigInt(ie(d,18,"floor"))&&S("The grid sell price must be above its buy price.");let h=Dt(t.repeat),k=await a.request(e,"/v1/tokens");Array.isArray(k.tokens)||S("TickerSpring token list is unavailable.");let b=k.tokens.map(a.object).filter(I=>c(I.address,p));b.length!==1&&S("Use a unique TickerSpring token address.");let y=b[0],w=a.token(y),x=a.object(y.markets);(c(p,ce)||typeof x.grids!="boolean")&&S();let C=x.grids?void 0:a.price(a.text(t.startingPrice));x.grids&&t.startingPrice!==void 0&&S("startingPrice is only used to open a new grid market.");let D=x.grids?"open":"openWithMarket",m=a.prepared(e,await a.request(e,"/v1/agent/prepare/grid",{owner:i,...a.attribution(t),action:D,token:p,buyPrice:l,sellPrice:d,amount:e.formatAmount(o,6),repeat:h,...C===void 0?{}:{startingPrice:C}}),i,"grid"),v=a.object(m.bundle.params),T=a.object(v.open),P=a.futureDeadline(T.deadline);(!c(v.strategy,r)||!c(T.pool,xt(p))||T.sellFirst!==!1||T.repeat!==h||a.integer(T.amount)!==o||T.maxFeeBps!==100)&&S(),We(T.buyLower,l,w),We(T.sellLower,d,w);let R={pool:T.pool,buyLower:T.buyLower,sellLower:T.sellLower,sellFirst:!1,repeat:h,amount:BigInt(o),maxFeeBps:100,deadline:BigInt(P)},V=[R];if(C!==void 0){let I=a.object(v.market),$=BigInt(a.positive(I.initialPrice)),F=BigInt(a.positive(I.minimumPrice)),M=BigInt(a.positive(I.maximumPrice));(!c(I.token,p)||$<F||$>M)&&S(),Et($,F,M,C,w),V=[R,p,$,F,M]}return m.txs.length!==1&&m.txs.length!==2&&S(),m.txs.length===2&&(!c(m.txs[0].to,ce)||!U(m.txs[0].data,Ke({abi:dn,functionName:"approve",args:[r,BigInt(o)]})))&&S("Grid approval must equal the exact USDG input."),(!c(m.txs.at(-1).to,r)||!U(m.txs.at(-1).data,Ke({abi:u,functionName:D,args:V})))&&S(),a.result(e,m,i,{input:{token:{address:ce,symbol:"USDG",decimals:6,chainId:E},amount:o},token:w,buyPrice:l,sellPrice:d,repeat:h,startingPrice:C,deadline:P},"Grid fill fee: 1%. Repeating trades can lose value. Record the actual position ID from the receipt, monitor tickerspring_account, collect proceeds, disable repeat or close to exit.")}function Et(e,t,i,n,s){(typeof e!="bigint"||typeof t!="bigint"||typeof i!="bigint"||e<=0n||t<=0n||t>e||i<e)&&S();let r=e,u=t,o=i,p=r*r,l=1n<<192n,d=BigInt(s.address)<BigInt(ce)?p*10n**BigInt(s.decimals)*10n**18n/(l*10n**6n):l*10n**BigInt(s.decimals)*10n**18n/(p*10n**6n),h=BigInt(ie(n,18,"floor")),k=d>h?d-h:h-d;(h===0n||k*10000n>h*25n||u*10000n<r*9975n||o*10000n>r*10025n)&&S("TickerSpring grid initialization differs from the authorized starting price or bounds.")}var Ye={poolFor:xt,checkPrice:We,checkInitialization:Et};import{decodeFunctionData as fn,encodeFunctionData as gn,parseAbi as bn,zeroAddress as hn}from"viem";var St=bn(K.kyber);function Se(e,t,i,n,s){let r=()=>{throw new f("TickerSpring basket route changes its input, output, amount, recipient or fee policy.")},u=fn({abi:St,data:e});(u.functionName!=="swap"||!u.args)&&r();let o=a.object(u.args[0]),p=a.object(o.desc);(!c(p.srcToken,t)||!c(p.dstToken,i)||!c(p.dstReceiver,s)||p.amount!==n||typeof p.minReturnAmount!="bigint"||p.minReturnAmount<=1n||p.permit!=="0x"||p.flags!==0n&&p.flags!==512n||!Array.isArray(p.feeAmounts)||p.feeAmounts.length||!Array.isArray(p.feeReceivers)||p.feeReceivers.length||!Array.isArray(p.srcAmounts)||!Array.isArray(p.srcReceivers)||p.srcAmounts.length!==p.srcReceivers.length||p.srcAmounts.reduce((l,d)=>((typeof d!="bigint"||d<0n)&&r(),l+d),0n)!==n||!p.srcReceivers.every(l=>c(l,a.address(o.callTarget)))||!c(o.approveTarget,hn)&&!c(o.approveTarget,a.address(o.callTarget)))&&r(),U(gn({abi:St,functionName:u.functionName,args:u.args}),e)||r()}import{getAddress as ye,parseAbi as kn}from"viem";var he=ye(A.basketConfig.basketMakerV2),ae=ye(A.contracts.usdg),Qe=ye(A.basketConfig.weth),vn=kn(K.maker);function ee(e="TickerSpring basket creation differs from the authorized name, tokens, weights, fee, deposit or recipient."){throw new f(e)}async function It(e,t,i){a.inputs(t,["name","symbol","tokens","swapFeeBps","amount","payWith","minAmountOut","slippageBps","agentTag"]);let n=a.text(t.name),s=a.text(t.symbol);(n.length>64||!/^[A-Za-z0-9 ._+-]+$/.test(n)||!/^[A-Za-z0-9.+-]{1,20}$/.test(s)||/^ts/i.test(s))&&ee("Use a plain basket name and a symbol that does not start with ts."),(!Array.isArray(t.tokens)||t.tokens.length<2||t.tokens.length>8)&&ee("Choose 2 to 8 basket tokens with weights totaling 10000 basis points.");let r=t.tokens.map(m=>{let v=a.object(m);a.inputs(v,["token","weightBps"]);let T=ye(a.address(v.token));return(typeof v.weightBps!="number"||!Number.isInteger(v.weightBps)||v.weightBps<100||v.weightBps>9900)&&ee("Each basket weight must be an integer from 100 to 9900 basis points."),{token:T,weightBps:v.weightBps}}).sort((m,v)=>BigInt(m.token)<BigInt(v.token)?-1:1);(new Set(r.map(m=>m.token.toLowerCase())).size!==r.length||r.reduce((m,v)=>m+v.weightBps,0)!==1e4||!r.some(m=>c(m.token,ae)||c(m.token,Qe)))&&ee("Choose unique basket token addresses with USDG or WETH and weights totaling 10000 basis points.");let u=t.swapFeeBps??100;u!==30&&u!==100&&ee("Choose a basket swap fee of 30 or 100 basis points.");let o=a.positive(t.amount),p=q.minimum(t.minAmountOut),l=q.slippage(t),d=t.payWith===void 0?ae:ye(a.address(t.payWith));!c(d,ae)&&!c(d,Qe)&&ee("Pay the first basket deposit with USDG or WETH."),c(d,ae)&&BigInt(o)<25000000n&&ee("A basket first deposit must be worth at least 25 USDG.");let h=a.object(await q.api(e,"/v1/baskets/config"));(h.chainId!==4663||!c(h.basketMakerV2,he)||!c(h.weth,Qe)||!c(h.usdg,ae))&&ee("TickerSpring BasketMaker deployment changed; Oak needs a reviewed pin.");let k=await a.request(e,"/v1/agent/prepare/basket-make",{owner:i,...a.attribution(t),name:n,symbol:s,tokens:r.map(m=>({token:m.token,weightPct:m.weightBps/100})),swapFeePct:u/100,amount:e.formatAmount(o,c(d,ae)?6:18),payWith:c(d,ae)?"USDG":"WETH",slippageBps:l}),b=a.prepared(e,k,i,"basket-make"),y=a.object(b.bundle.params),w=a.object(y.basket),x=q.minimum(y.minOut),C=a.futureDeadline(y.deadline);(!c(y.maker,he)||!c(y.token,d)||a.integer(y.amount)!==o||x<p||!c(y.recipient,i)||w.name!==n||w.symbol!==s||!Array.isArray(w.tokens)||!Array.isArray(w.normalizedWeights)||w.tokens.length!==r.length||w.normalizedWeights.length!==r.length||a.integer(w.swapFeePercentage)!==(BigInt(u)*10n**14n).toString()||!r.every((m,v)=>c(w.tokens[v],m.token)&&a.integer(w.normalizedWeights[v])===(BigInt(m.weightBps)*10n**14n).toString())||typeof w.salt!="string"||!/^0x[0-9a-fA-F]{64}$/.test(w.salt)||!Array.isArray(y.legs))&&ee();let D=y.legs.map(m=>{let v=a.object(m),T=a.address(v.tokenIn),P=a.address(v.tokenOut),R=BigInt(a.positive(v.amountIn)),V=a.text(v.data);return(!c(T,d)||!r.some(I=>c(I.token,P)))&&ee(),Se(V,T,P,R,he),{tokenIn:T,tokenOut:P,amountIn:R,data:V}});return D.reduce((m,v)=>m+v.amountIn,0n)>BigInt(o)&&ee(),q.exactApproval(b.txs,d,he,o),q.exactCall(b.txs,he,vn,"make",[{name:n,symbol:s,tokens:r.map(m=>m.token),normalizedWeights:r.map(m=>BigInt(m.weightBps)*10n**14n),swapFeePercentage:BigInt(u)*10n**14n,salt:w.salt},d,BigInt(o),D,x,i,BigInt(C)]),a.result(e,b,i,{input:{token:{address:d,symbol:c(d,ae)?"USDG":"WETH",decimals:c(d,ae)?6:18,chainId:4663},amount:o},predictedPool:ye(a.address(y.pool)),minimumBptOut:x.toString(),name:n,symbol:s,tokens:r,swapFeeBps:u,salt:w.salt,deadline:C,verified:!1},"Creates a new unverified basket. Name, symbol, tokens, weights and swap fee are permanent. The pool address is predicted; use the actual Made event after the receipt. Verify basket holdings with tickerspring_account and the official basket detail.")}import{encodeFunctionData as wn,getAddress as Ot,parseAbi as Tn}from"viem";var An=Tn(["function cancel(uint256 id,uint256 min0,uint256 min1,uint64 deadline,uint8 deliveryMask)"]);async function Ct(e,t,i){a.inputs(t,["id"]);let n=a.integer(t.id),s=await q.account(e,i),u=a.object(s.data).limitOrders.map(a.object).filter(w=>w.id===n);if(u.length!==1)throw new f("Use an order ID from the complete TickerSpring account for this wallet.");let o=u[0],p=a.object(o.order),l=a.token(o.token);if(!c(o.hook,A.contracts.limitOrderHook)||!c(p.owner,i)||o.side!=="buy"&&o.side!=="sell")throw new f("TickerSpring order identity could not be verified.");let d={address:Ot(A.contracts.usdg),symbol:"USDG",decimals:6,chainId:4663},h=BigInt(Math.floor(Date.now()/1e3)+300),k=e.unsignedTx({to:Ot(A.contracts.limitOrderHook),data:wn({abi:An,functionName:"cancel",args:[BigInt(n),0n,0n,h,3]}),value:"0",chainId:4663,description:`Simulate cancellation returns for order ${n}; never sign this read-only quote.`}),b=await e.preview([k],i),y=b.changes.map(w=>{let x=c(w.token.address,l.address)?l:c(w.token.address,d.address)?d:void 0;if(!x||BigInt(w.amount)<0n)throw new f("Cancellation simulation returned an unexpected asset or wallet debit. Do not treat it as a refund quote.");return{token:x,amount:a.integer(w.amount)}});return{id:n,owner:i,chainId:4663,asOf:new Date().toISOString(),originalInput:{token:o.side==="buy"?d:l,amount:a.integer(p.debit)},cancellationReturns:y,summary:b.summary,notice:"Current simulated cancellation returns include refundable principal and available proceeds/fees. They exclude gas and can change before inclusion. They are not a fee-exclusive remaining-principal field. Use tickerspring_cancel for protected execution, then check balances. No transaction has been sent."}}import{getAddress as xn}from"viem";var fe={vault:{source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",sourceSha256:"0c08aba8ad660e0c2b1172f6f9d956a8733b3f5877a93e870b6cb3772e5b7a07",abi:[{type:"function",name:"MAX_COOLDOWN",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MAX_DAILY_LOSS_BPS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MAX_FEE_BPS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MAX_LOSS_BPS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MAX_SLIPPAGE_BPS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"allowance",inputs:[{name:"owner",type:"address",internalType:"address"},{name:"spender",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"asset",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"balanceOf",inputs:[{name:"account",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"blockedClaims",inputs:[{name:"account",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"blockedToken",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IERC20"}],stateMutability:"view"},{type:"function",name:"blockedUnpaid",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"buybackFees",inputs:[{name:"token",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"canDeposit",inputs:[{name:"account",type:"address",internalType:"address"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"config",inputs:[],outputs:[{name:"keeper",type:"address",internalType:"address"},{name:"guardian",type:"address",internalType:"address"},{name:"treasury",type:"address",internalType:"address"},{name:"buyback",type:"address",internalType:"address"},{name:"protocolFeeBps",type:"uint16",internalType:"uint16"},{name:"buybackFeeBps",type:"uint16",internalType:"uint16"},{name:"maxLossBps",type:"uint16",internalType:"uint16"},{name:"maxDailyLossBps",type:"uint16",internalType:"uint16"},{name:"maxSlippageBps",type:"uint16",internalType:"uint16"},{name:"cooldown",type:"uint32",internalType:"uint32"},{name:"minWidth",type:"int24",internalType:"int24"},{name:"maxWidth",type:"int24",internalType:"int24"},{name:"depositCap",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"decimals",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"depositAllowlist",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"depositRequests",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"owner",type:"address",internalType:"address"},{name:"receiver",type:"address",internalType:"address"},{name:"assets",type:"uint128",internalType:"uint128"},{name:"minShares",type:"uint128",internalType:"uint128"}],stateMutability:"view"},{type:"function",name:"depositsPaused",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"keeperPaused",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"lastRangeChange",inputs:[],outputs:[{name:"",type:"uint64",internalType:"uint64"}],stateMutability:"view"},{type:"function",name:"lossBudgetUsed",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"lossUpdatedAt",inputs:[],outputs:[{name:"",type:"uint64",internalType:"uint64"}],stateMutability:"view"},{type:"function",name:"minDeposit",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"name",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"nextDepositId",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"owner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"pendingDeposits",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"pendingHeld",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"pendingOwner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"previewDeposit",inputs:[{name:"assets",type:"uint256",internalType:"uint256"},{name:"recent",type:"uint160",internalType:"uint160"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"priceModule",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IPriceModule"}],stateMutability:"view"},{type:"function",name:"protocolFees",inputs:[{name:"token",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"recoveryBlocked",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"recoverySupply",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"renounceOwnership",inputs:[],outputs:[],stateMutability:"pure"},{type:"function",name:"rewardPriceModule",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IPriceModule"}],stateMutability:"view"},{type:"function",name:"rewardToken",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IERC20"}],stateMutability:"view"},{type:"function",name:"swapper",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IKyberSwapper"}],stateMutability:"view"},{type:"function",name:"symbol",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"token",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IERC20"}],stateMutability:"view"},{type:"function",name:"totalAssets",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"totalSupply",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"usdg",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IERC20"}],stateMutability:"view"},{type:"function",name:"venue",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IVenue"}],stateMutability:"view"}],writes:["acceptOwnership","approve","cancelDeposit","claimBlocked","claimFees","openRecovery","rebalance","redeem","redeemInKind","redeemRecovery","releaseBlocked","requestDeposit","setConfig","setDepositAllowlist","setDepositor","setPaused","setStaking","settleDeposits","transfer","transferFrom","transferOwnership"]},limit:{source:"https://tickerspring.com/_next/static/chunks/649-83b30689528eca4b.js",sourceSha256:"ca529265d8f6e230c0b052d8f7060a97ad5d43e188fa7baab0622f18cd67298c",abi:[{type:"function",name:"COMPLETION_BPS",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{type:"function",name:"completionPrice",inputs:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"lower",type:"int24",internalType:"int24"},{name:"sell0",type:"bool",internalType:"bool"}],outputs:[{name:"",type:"uint160",internalType:"uint160"}],stateMutability:"view"},{type:"function",name:"MAX_FEE_BPS",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{type:"function",name:"MAX_LEVELS",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{type:"function",name:"MIN_CAP_SPAN",inputs:[],outputs:[{name:"",type:"uint32",internalType:"uint32"}],stateMutability:"view"},{type:"function",name:"activeBandCount",inputs:[{name:"pool",type:"bytes32",internalType:"bytes32"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"currentBucket",inputs:[{name:"",type:"bytes32",internalType:"bytes32"}],outputs:[{name:"",type:"bytes32",internalType:"bytes32"}],stateMutability:"view"},{type:"function",name:"depth",inputs:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"sell0",type:"bool",internalType:"bool"},{name:"from",type:"int24",internalType:"int24"},{name:"count",type:"uint16",internalType:"uint16"}],outputs:[{name:"q",type:"uint160",internalType:"uint160"},{name:"rows",type:"tuple[]",internalType:"struct GroupedOrderHook.Depth[]",components:[{name:"bucket",type:"bytes32",internalType:"bytes32"},{name:"lower",type:"int24",internalType:"int24"},{name:"upper",type:"int24",internalType:"int24"},{name:"sell0",type:"bool",internalType:"bool"},{name:"liquidity",type:"uint128",internalType:"uint128"},{name:"openOrders",type:"uint256",internalType:"uint256"},{name:"amount0",type:"uint256",internalType:"uint256"},{name:"amount1",type:"uint256",internalType:"uint256"}]},{name:"nextTick",type:"int24",internalType:"int24"},{name:"more",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"depthDescending",inputs:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"sell0",type:"bool",internalType:"bool"},{name:"from",type:"int24",internalType:"int24"},{name:"count",type:"uint16",internalType:"uint16"}],outputs:[{name:"q",type:"uint160",internalType:"uint160"},{name:"rows",type:"tuple[]",internalType:"struct GroupedOrderHook.Depth[]",components:[{name:"bucket",type:"bytes32",internalType:"bytes32"},{name:"lower",type:"int24",internalType:"int24"},{name:"upper",type:"int24",internalType:"int24"},{name:"sell0",type:"bool",internalType:"bool"},{name:"liquidity",type:"uint128",internalType:"uint128"},{name:"openOrders",type:"uint256",internalType:"uint256"},{name:"amount0",type:"uint256",internalType:"uint256"},{name:"amount1",type:"uint256",internalType:"uint256"}]},{name:"nextTick",type:"int24",internalType:"int24"},{name:"more",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"feePolicy",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IOrderFeePolicy"}],stateMutability:"view"},{type:"function",name:"generation",inputs:[{name:"",type:"bytes32",internalType:"bytes32"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"getBucket",inputs:[{name:"id",type:"bytes32",internalType:"bytes32"}],outputs:[{name:"",type:"tuple",internalType:"struct GroupedOrderHook.Bucket",components:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"lower",type:"int24",internalType:"int24"},{name:"upper",type:"int24",internalType:"int24"},{name:"sell0",type:"bool",internalType:"bool"},{name:"state",type:"uint8",internalType:"uint8"},{name:"members",type:"uint128",internalType:"uint128"},{name:"liquidity",type:"uint128",internalType:"uint128"},{name:"finalLiquidity",type:"uint128",internalType:"uint128"},{name:"index0",type:"uint256",internalType:"uint256"},{name:"index1",type:"uint256",internalType:"uint256"},{name:"feeReserve0",type:"uint256",internalType:"uint256"},{name:"feeReserve1",type:"uint256",internalType:"uint256"},{name:"principal0",type:"uint128",internalType:"uint128"},{name:"principal1",type:"uint128",internalType:"uint128"},{name:"principalReserve0",type:"uint128",internalType:"uint128"},{name:"principalReserve1",type:"uint128",internalType:"uint128"}]}],stateMutability:"view"},{type:"function",name:"getMarketMinimums",inputs:[{name:"id",type:"bytes32",internalType:"bytes32"}],outputs:[{name:"output0",type:"uint128",internalType:"uint128"},{name:"output1",type:"uint128",internalType:"uint128"}],stateMutability:"view"},{type:"function",name:"getOrder",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",internalType:"struct GroupedOrderHook.Order",components:[{name:"owner",type:"address",internalType:"address"},{name:"bucket",type:"bytes32",internalType:"bytes32"},{name:"liquidity",type:"uint128",internalType:"uint128"},{name:"feeBps",type:"uint16",internalType:"uint16"},{name:"commissionCarry",type:"uint16",internalType:"uint16"},{name:"state",type:"uint8",internalType:"uint8"},{name:"entry0",type:"uint256",internalType:"uint256"},{name:"entry1",type:"uint256",internalType:"uint256"},{name:"debit",type:"uint256",internalType:"uint256"},{name:"correctionInput",type:"uint128",internalType:"uint128"},{name:"correctionNet",type:"uint128",internalType:"uint128"},{name:"net0",type:"uint256",internalType:"uint256"},{name:"net1",type:"uint256",internalType:"uint256"}]}],stateMutability:"view"},{type:"function",name:"getPoolConfig",inputs:[{name:"id",type:"bytes32",internalType:"bytes32"}],outputs:[{name:"key",type:"tuple",internalType:"struct PoolKey",components:[{name:"currency0",type:"address",internalType:"Currency"},{name:"currency1",type:"address",internalType:"Currency"},{name:"fee",type:"uint24",internalType:"uint24"},{name:"tickSpacing",type:"int24",internalType:"int24"},{name:"hooks",type:"address",internalType:"contract IHooks"}]},{name:"width",type:"int24",internalType:"int24"},{name:"minimum0",type:"uint128",internalType:"uint128"},{name:"minimum1",type:"uint128",internalType:"uint128"},{name:"supported",type:"bool",internalType:"bool"},{name:"maxLevels",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{type:"function",name:"lastPrice",inputs:[{name:"pool",type:"bytes32",internalType:"bytes32"}],outputs:[{name:"",type:"uint160",internalType:"uint160"}],stateMutability:"view"},{type:"function",name:"levelBoundary",inputs:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"zeroForOne",type:"bool",internalType:"bool"},{name:"k",type:"uint16",internalType:"uint16"}],outputs:[{name:"limit",type:"uint160",internalType:"uint160"},{name:"levels",type:"uint16",internalType:"uint16"},{name:"limited",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"listOrders",inputs:[{name:"owner",type:"address",internalType:"address"},{name:"cursor",type:"uint256",internalType:"uint256"},{name:"count",type:"uint256",internalType:"uint256"}],outputs:[{name:"ids",type:"uint256[]",internalType:"uint256[]"},{name:"next",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"manager",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IPoolManager"}],stateMutability:"view"},{type:"function",name:"marketKey",inputs:[{name:"token",type:"address",internalType:"address"}],outputs:[{name:"key",type:"tuple",internalType:"struct PoolKey",components:[{name:"currency0",type:"address",internalType:"Currency"},{name:"currency1",type:"address",internalType:"Currency"},{name:"fee",type:"uint24",internalType:"uint24"},{name:"tickSpacing",type:"int24",internalType:"int24"},{name:"hooks",type:"address",internalType:"contract IHooks"}]}],stateMutability:"view"},{type:"function",name:"marketProfile",inputs:[],outputs:[{name:"quote",type:"address",internalType:"address"},{name:"poolFee",type:"uint24",internalType:"uint24"},{name:"tickSpacing",type:"int24",internalType:"int24"},{name:"width",type:"int24",internalType:"int24"},{name:"maxLevels",type:"uint16",internalType:"uint16"},{name:"minimumQuote",type:"uint128",internalType:"uint128"}],stateMutability:"view"},{type:"function",name:"nextOrder",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"orderCount",inputs:[{name:"owner",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"protocolAccrued",inputs:[{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"registeredPools",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"registrar",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"treasury",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"}],writes:["claimBoth","afterSwap","cancel","claim","create","createMarketOrder","enableMarketProfile","openMarket","realize","registerPool","unlockCallback","withdrawCommission"]},grid:{source:"https://tickerspring.com/_next/static/chunks/5785-74ee50b34dadbd7e.js",sourceSha256:"0732bc4cc6ffb8bed6f3df67b2f8e9ab2ec90e431e645eb941dd5e8e5d0df77b",abi:[{type:"function",name:"BUYING",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"CLOSED",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"DELIVER_QUOTE",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"DELIVER_TOKEN",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"DONE",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"SELLING",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"canFlip",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"flippable",inputs:[{name:"ids",type:"uint256[]",internalType:"uint256[]"}],outputs:[{name:"ready",type:"bool[]",internalType:"bool[]"}],stateMutability:"view"},{type:"function",name:"getPosition",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",internalType:"struct LimitStrategy.Position",components:[{name:"owner",type:"address",internalType:"address"},{name:"state",type:"uint8",internalType:"uint8"},{name:"repeat",type:"bool",internalType:"bool"},{name:"sellFirst",type:"bool",internalType:"bool"},{name:"quoteIs0",type:"bool",internalType:"bool"},{name:"maxFeeBps",type:"uint16",internalType:"uint16"},{name:"fills",type:"uint32",internalType:"uint32"},{name:"token",type:"address",internalType:"address"},{name:"buyLower",type:"int24",internalType:"int24"},{name:"sellLower",type:"int24",internalType:"int24"},{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"orderId",type:"uint256",internalType:"uint256"},{name:"idleQuote",type:"uint256",internalType:"uint256"},{name:"idleToken",type:"uint256",internalType:"uint256"}]}],stateMutability:"view"},{type:"function",name:"hook",inputs:[],outputs:[{name:"",type:"address",internalType:"contract GroupedOrderHook"}],stateMutability:"view"},{type:"function",name:"listPositions",inputs:[{name:"owner",type:"address",internalType:"address"},{name:"cursor",type:"uint256",internalType:"uint256"},{name:"count",type:"uint256",internalType:"uint256"}],outputs:[{name:"ids",type:"uint256[]",internalType:"uint256[]"},{name:"next",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"nextPosition",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"positionCount",inputs:[{name:"owner",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"quote",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"}],writes:["close","collect","flip","open","openWithMarket","setRepeat"]},spring:{source:"https://tickerspring.com/_next/static/chunks/9073-ce348764549e4d43.js",sourceSha256:"e3013c1d0328f1fabe4342df85d141b06af1120bd6c3571ad328211dbc277980",abi:[{type:"function",name:"ACTIVE",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"CLOSED",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"DEFERRED",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"DELIVER_QUOTE",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"DELIVER_TOKEN",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"DONE",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"FILLED",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"FINISHING",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"HEADROOM_BPS",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{type:"function",name:"LAST_PART_DROP_BPS",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{type:"function",name:"MAX_GAIN_BPS",inputs:[],outputs:[{name:"",type:"uint32",internalType:"uint32"}],stateMutability:"view"},{type:"function",name:"MAX_LEVELS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MAX_PARTS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MAX_PLACEMENTS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MIN_SHARE_BPS",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{type:"function",name:"OPEN_BAD_TERMS",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"OPEN_LAST_PART_TOO_SMALL",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"OPEN_LEVEL_TOO_SMALL",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"OPEN_OK",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"OPEN_UNSUPPORTED",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"PENDING",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"READY_BUY_FILLED",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"READY_PLACE",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"READY_TP_FILLED",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"RESTING",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"TP_EMPTY",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"TP_PLANNED",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"TP_RESTING",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"TP_SOLD",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"UNARMED",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"WAITING",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"WAIT_FEE",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"WAIT_HOOK",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"WAIT_ORDER",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"WAIT_PAUSED",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"WAIT_PRICE",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"WAIT_SIZE",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"checkOpen",inputs:[{name:"o",type:"tuple",internalType:"struct SpringLadder.Open",components:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"buyLowers",type:"int24[]",internalType:"int24[]"},{name:"amounts",type:"uint128[]",internalType:"uint128[]"},{name:"shareBps",type:"uint16[]",internalType:"uint16[]"},{name:"gainBps",type:"uint32[]",internalType:"uint32[]"},{name:"repeat",type:"bool",internalType:"bool"},{name:"maxFeeBps",type:"uint16",internalType:"uint16"},{name:"deadline",type:"uint64",internalType:"uint64"},{name:"tag",type:"bytes32",internalType:"bytes32"}]}],outputs:[{name:"code",type:"uint8",internalType:"uint8"},{name:"index",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"getPosition",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"p",type:"tuple",internalType:"struct SpringLadder.Position",components:[{name:"owner",type:"address",internalType:"address"},{name:"state",type:"uint8",internalType:"uint8"},{name:"quoteIs0",type:"bool",internalType:"bool"},{name:"repeat",type:"bool",internalType:"bool"},{name:"merged",type:"bool",internalType:"bool"},{name:"levelCount",type:"uint8",internalType:"uint8"},{name:"partCount",type:"uint8",internalType:"uint8"},{name:"maxFeeBps",type:"uint16",internalType:"uint16"},{name:"width",type:"int24",internalType:"int24"},{name:"token",type:"address",internalType:"address"},{name:"cycle",type:"uint32",internalType:"uint32"},{name:"coveredMask",type:"uint16",internalType:"uint16"},{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"invTokens",type:"uint256",internalType:"uint256"},{name:"invCost",type:"uint256",internalType:"uint256"},{name:"invGross",type:"uint256",internalType:"uint256"},{name:"reserveQuote",type:"uint256",internalType:"uint256"},{name:"profitQuote",type:"uint256",internalType:"uint256"},{name:"lossQuote",type:"uint256",internalType:"uint256"},{name:"spareTokens",type:"uint256",internalType:"uint256"},{name:"roundSpent",type:"uint256",internalType:"uint256"},{name:"roundProceeds",type:"uint256",internalType:"uint256"},{name:"roundProfit",type:"uint256",internalType:"uint256"}]},{name:"ls",type:"tuple[]",internalType:"struct SpringLadder.Level[]",components:[{name:"amount",type:"uint128",internalType:"uint128"},{name:"armed",type:"uint128",internalType:"uint128"},{name:"lower",type:"int24",internalType:"int24"},{name:"state",type:"uint8",internalType:"uint8"},{name:"credited",type:"bool",internalType:"bool"},{name:"orderId",type:"uint256",internalType:"uint256"}]},{name:"xs",type:"tuple[]",internalType:"struct SpringLadder.Part[]",components:[{name:"shareBps",type:"uint16",internalType:"uint16"},{name:"gainBps",type:"uint32",internalType:"uint32"},{name:"state",type:"uint8",internalType:"uint8"},{name:"credited",type:"bool",internalType:"bool"},{name:"lower",type:"int24",internalType:"int24"},{name:"orderId",type:"uint256",internalType:"uint256"},{name:"tokens",type:"uint256",internalType:"uint256"},{name:"cost",type:"uint256",internalType:"uint256"},{name:"gross",type:"uint256",internalType:"uint256"}]}],stateMutability:"view"},{type:"function",name:"hook",inputs:[],outputs:[{name:"",type:"address",internalType:"contract GroupedOrderHook"}],stateMutability:"view"},{type:"function",name:"lastPartMinimum",inputs:[{name:"o",type:"tuple",internalType:"struct SpringLadder.Open",components:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"buyLowers",type:"int24[]",internalType:"int24[]"},{name:"amounts",type:"uint128[]",internalType:"uint128[]"},{name:"shareBps",type:"uint16[]",internalType:"uint16[]"},{name:"gainBps",type:"uint32[]",internalType:"uint32[]"},{name:"repeat",type:"bool",internalType:"bool"},{name:"maxFeeBps",type:"uint16",internalType:"uint16"},{name:"deadline",type:"uint64",internalType:"uint64"},{name:"tag",type:"bytes32",internalType:"bytes32"}]}],outputs:[{name:"dropBps",type:"uint16",internalType:"uint16"},{name:"minGainBps",type:"uint32",internalType:"uint32"}],stateMutability:"view"},{type:"function",name:"levelMinimum",inputs:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"lower",type:"int24",internalType:"int24"},{name:"shareBps",type:"uint16[]",internalType:"uint16[]"},{name:"gainBps",type:"uint32[]",internalType:"uint32[]"},{name:"maxFeeBps",type:"uint16",internalType:"uint16"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"listPositions",inputs:[{name:"owner",type:"address",internalType:"address"},{name:"cursor",type:"uint256",internalType:"uint256"},{name:"count",type:"uint256",internalType:"uint256"}],outputs:[{name:"ids",type:"uint256[]",internalType:"uint256[]"},{name:"next",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"manager",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IPoolManager"}],stateMutability:"view"},{type:"function",name:"nextPosition",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"planFor",inputs:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"tokens",type:"uint256",internalType:"uint256"},{name:"cost",type:"uint256",internalType:"uint256"},{name:"gross",type:"uint256",internalType:"uint256"},{name:"shareBps",type:"uint16[]",internalType:"uint16[]"},{name:"gainBps",type:"uint32[]",internalType:"uint32[]"},{name:"feeBps",type:"uint16",internalType:"uint16"}],outputs:[{name:"ok",type:"bool",internalType:"bool"},{name:"merged",type:"bool",internalType:"bool"},{name:"lowers",type:"int24[]",internalType:"int24[]"}],stateMutability:"view"},{type:"function",name:"positionCount",inputs:[{name:"owner",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"previewTakeProfit",inputs:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"buyLowers",type:"int24[]",internalType:"int24[]"},{name:"amounts",type:"uint128[]",internalType:"uint128[]"},{name:"shareBps",type:"uint16[]",internalType:"uint16[]"},{name:"gainBps",type:"uint32[]",internalType:"uint32[]"},{name:"feeBps",type:"uint16",internalType:"uint16"}],outputs:[{name:"rows",type:"tuple[]",internalType:"struct SpringLadder.Preview[]",components:[{name:"cost",type:"uint256",internalType:"uint256"},{name:"gross",type:"uint256",internalType:"uint256"},{name:"tokens",type:"uint256",internalType:"uint256"},{name:"ok",type:"bool",internalType:"bool"},{name:"merged",type:"bool",internalType:"bool"},{name:"lowers",type:"int24[]",internalType:"int24[]"},{name:"deferMask",type:"uint16",internalType:"uint16"}]}],stateMutability:"view"},{type:"function",name:"quote",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"readySync",inputs:[{name:"ids",type:"uint256[]",internalType:"uint256[]"}],outputs:[{name:"masks",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{type:"function",name:"roundEndOf",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"has",type:"bool",internalType:"bool"},{name:"band",type:"int24",internalType:"int24"},{name:"defers",type:"uint16",internalType:"uint16"},{name:"rearms",type:"uint16",internalType:"uint16"}],stateMutability:"view"}],writes:["close","collect","open","place","setRepeat","sync"],address:"0xeb1D1c0C9176FFf679076C8E438A33581Ad1ad2E"},basket_vault:{source:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",address:"0xb01B26D72EB3a5d7846C36fc21e4e3B96994DaF2",abi:[{name:"getPoolTokens",type:"function",stateMutability:"view",inputs:[{type:"address",name:"pool"}],outputs:[{type:"address[]",name:"tokens"}]},{name:"getPoolTokenInfo",type:"function",stateMutability:"view",inputs:[{type:"address",name:"pool"}],outputs:[{type:"address[]",name:"tokens"},{type:"tuple[]",name:"tokenInfo",components:[{type:"uint8",name:"tokenType"},{type:"address",name:"rateProvider"},{type:"bool",name:"paysYieldFees"}]},{type:"uint256[]",name:"balancesRaw"},{type:"uint256[]",name:"lastBalancesLiveScaled18"}]},{name:"isPoolRegistered",type:"function",stateMutability:"view",inputs:[{type:"address",name:"pool"}],outputs:[{type:"bool"}]},{name:"isPoolInitialized",type:"function",stateMutability:"view",inputs:[{type:"address",name:"pool"}],outputs:[{type:"bool"}]},{name:"isPoolPaused",type:"function",stateMutability:"view",inputs:[{type:"address",name:"pool"}],outputs:[{type:"bool"}]},{name:"isPoolInRecoveryMode",type:"function",stateMutability:"view",inputs:[{type:"address",name:"pool"}],outputs:[{type:"bool"}]},{name:"getActionId",type:"function",stateMutability:"view",inputs:[{type:"bytes4",name:"selector"}],outputs:[{type:"bytes32"}]},{name:"isVaultPaused",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"bool"}]},{name:"getPoolRoleAccounts",type:"function",stateMutability:"view",inputs:[{type:"address",name:"pool"}],outputs:[{type:"tuple",components:[{type:"address",name:"pauseManager"},{type:"address",name:"swapFeeManager"},{type:"address",name:"poolCreator"}]}]},{name:"getStaticSwapFeePercentage",type:"function",stateMutability:"view",inputs:[{type:"address",name:"pool"}],outputs:[{type:"uint256"}]},{name:"getProtocolFeeController",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"address"}]},{name:"getAuthorizer",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"address"}]},{name:"getReservesOf",type:"function",stateMutability:"view",inputs:[{type:"address",name:"token"}],outputs:[{type:"uint256"}]}],writes:["disableRecoveryMode","pausePool","unpausePool","setStaticSwapFeePercentage"]},basket_factory:{source:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",address:"0x9400a5BBdcAF5564cEb86185d07321cAefB65B41",abi:[{name:"isPoolFromFactory",type:"function",stateMutability:"view",inputs:[{type:"address",name:"pool"}],outputs:[{type:"bool"}]},{name:"getVault",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"address"}]}],writes:["create"]},basket_maker:{source:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",address:"0xEF8C2341848F1E7CB25631e4bFD6f36B0C46f665",abi:[{name:"poolSalt",type:"function",stateMutability:"pure",inputs:[{type:"address",name:"caller"},{type:"bytes32",name:"salt"}],outputs:[{type:"bytes32"}]},{name:"vault",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"address"}]},{name:"router",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"address"}]},{name:"permit2",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"address"}]},{name:"factory",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"address"}]},{name:"kyberRouter",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"address"}]},{name:"kyberRouterCodeHash",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"bytes32"}]},{name:"weth",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"address"}]},{name:"admin",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"address"}]}],writes:["make"]}};function Q(){throw new f("Use a published read function and its exact arguments from tickerspring_contract_read. Integers are decimal strings; writes are not accepted.")}function Xe(e,t){if(e.type.endsWith("[]"))return(!Array.isArray(t)||t.length>100)&&Q(),t.map(n=>Xe({...e,type:e.type.slice(0,-2)},n));if(e.type==="tuple"){let n=a.object(t),s=e.components;return a.inputs(n,s.map(r=>r.name)),Object.fromEntries(s.map(r=>[r.name,Xe(r,n[r.name])]))}if(/^u?int\d*$/.test(e.type)){(typeof t!="string"||!/^-?\d+$/.test(t)||e.type.startsWith("uint")&&t.startsWith("-"))&&Q();let n=BigInt(t),s=Number(e.type.replace(/\D/g,"")||256),r=e.type.startsWith("uint")?0n:-(1n<<BigInt(s-1)),u=e.type.startsWith("uint")?(1n<<BigInt(s))-1n:(1n<<BigInt(s-1))-1n;return(n<r||n>u)&&Q(),n}if(e.type==="address")return a.address(t);if(e.type==="bool")return typeof t!="boolean"&&Q(),t;if(e.type==="string")return a.text(t);let i=/^bytes(\d*)$/.exec(e.type);if(i)return(typeof t!="string"||!/^0x(?:[a-fA-F0-9]{2})*$/.test(t)||i[1]&&t.length!==2+Number(i[1])*2)&&Q(),t;Q()}function Pt(e){return{name:"tickerspring_contract_read",inputSchema:{type:"object",properties:{kind:{enum:["vault","limit","grid","spring","basket_vault","basket_factory","basket_maker"],description:"Which published TickerSpring contract to read: an official agent vault, the limit-order hook, the grid strategy, the spring contract, or the basket vault, factory or maker."},address:{...ue,description:'Address of the pinned official agent vault to read. Only for kind "vault"; other kinds use their fixed contract and reject this.'},function:{type:"string",description:"Name of a published read function. Omit it to list the published read functions for this kind."},arguments:{type:"array",maxItems:16,description:"Arguments for the function, in order. Integers are decimal strings, addresses are 0x strings. Omit when listing functions."}},required:["kind"],additionalProperties:!1},execute:async(t,i)=>{try{a.address(i),a.inputs(t,["kind","address","function","arguments"]),(typeof t.kind!="string"||!Object.hasOwn(fe,t.kind))&&Q();let n=t.kind,s=fe[n],r;n==="vault"?(r=a.address(t.address),A.vaults.some(b=>c(b.address,r))||Q()):(t.address!==void 0&&Q(),r=xn("address"in s?s.address:n==="limit"?A.contracts.limitOrderHook:A.contracts.gridStrategy));let u=s.abi;if(t.function===void 0)return t.arguments!==void 0&&Q(),{chainId:4663,address:r,source:s.source,functions:u,excludedWrites:s.writes,notice:"Published read ABI only. Excluded write names are an inventory, not executable support. Reads reveal public chain state; they do not verify authorization for a future action."};let o=a.text(t.function),p=u.filter(b=>b.type==="function"&&b.name===o);(p.length!==1||p[0].type!=="function")&&Q();let l=p[0],d=t.arguments??[];(!Array.isArray(d)||d.length!==l.inputs.length)&&Q();let h=l.inputs.map((b,y)=>Xe(b,d[y])),k=await e.clientFor(4663).readContract({address:r,abi:u,functionName:o,args:h});return{chainId:4663,address:r,source:s.source,function:o,data:JSON.parse(JSON.stringify(k,(b,y)=>typeof y=="bigint"?y.toString():y))}}catch(n){throw new f(e.plainError(n))}}}}var Mt={type:"string",pattern:"^\\d+$"},Bn={type:"string",pattern:"^\\d+(\\.\\d+)?$"},En={type:"integer",minimum:1,maximum:90},_t={enum:["any","stock","crypto","utility","meme","unclassified"]},te=e=>({...ue,description:B.address(e)}),ke=(e,t)=>({...Mt,description:`${B.amount("USDG",6,e)} ${t}`}),Ie=e=>({...En,description:e}),Je=e=>({...Bn,description:`${e} in USDG per whole token, as a decimal string. Example: "12.5".`}),Ze={type:"integer",minimum:0,maximum:1e3,description:"Fee in basis points (50 = 0.5%), from 0 to 1000, applied in the backtest or range estimate. Omit to use the provider default."},Ft={type:"boolean",description:"Provider backtest setting needsVolume. Defaults to true."},Sn="Use a published strategy identifier: lowercase letters, digits and hyphens.";function _(e){throw new f(e)}function se(e,t,i){return(typeof e!="number"||!Number.isInteger(e)||e<t||e>i)&&_(`Use an integer from ${t} to ${i}.`),e}function et(e){return typeof e!="boolean"&&_("Use an explicit boolean setting."),e}function ge(e,t){return(typeof e!="string"||!t.includes(e))&&_(`Choose ${t.join(", ")}.`),e}function In(e){let t=a.text(e);return/^[a-z0-9][a-z0-9-]{0,63}$/.test(t)||_("Use an agent slug from tickerspring_agents."),t}function tt(e){let t=a.text(e);return/^(?:[1-9]|[12][0-9]|30)d$/.test(t)||_("Choose a period from 1d to 30d."),t}function pe(e,t){let i=Object.entries(t).filter(([,n])=>n!==void 0).map(([n,s])=>[n,String(s)]);return i.length?`${e}?${new URLSearchParams(i)}`:e}function st(e){if(e&&typeof e=="object"&&!Array.isArray(e)&&Object.hasOwn(e,"decimal")){let t=e.decimal;return/^\d+(\.\d+)?$/.test(t)||_("Use a positive decimal string."),t}return Array.isArray(e)?`[${e.map(st).join(",")}]`:e&&typeof e=="object"?`{${Object.entries(e).filter(([,t])=>t!==void 0).map(([t,i])=>`${JSON.stringify(t)}:${st(i)}`).join(",")}}`:JSON.stringify(e)}var nt=e=>({decimal:a.price(a.text(e))}),it=(e,t)=>({decimal:e.formatAmount(a.positive(t),6)});async function at(e,t,i){let n=await le(e.http,`https://api.tickerspring.com${t}`,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":"Oak-TickerSpring/1.0"},body:st(i)},s=>!!s&&typeof s=="object"&&Object.hasOwn(s,"data"));return(n.data===null||n.data===void 0)&&_("TickerSpring returned no backtest result."),{...q.readResult(t,n.data),notice:"Historical estimates, not executable quotes or promised returns. The provider may log this run. No transaction has been prepared or sent."}}function jt(e){let t=(n,s,r,u)=>({name:`tickerspring_${n}`,inputSchema:{type:"object",properties:s,required:r,additionalProperties:!1},execute:async(o,p)=>{try{return a.address(p),a.inputs(o,Object.keys(s)),await u(o,p)}catch(l){throw new f(e.plainError(l))}}}),i=async n=>{let s=await q.api(e,n);return s==null&&_("TickerSpring has no current data for this query."),q.readResult(n,s)};return[Pt(e),t("stats",{},[],async()=>{let n=await le(e.http,"https://api.tickerspring.com/v1/public/stats",{headers:{"User-Agent":"Oak-TickerSpring/1.0"}},s=>!!s&&typeof s=="object"&&!Array.isArray(s)&&s.version===1&&!!s.tvl);return q.readResult("/v1/public/stats",n)}),t("vault_history",{vault:te("pinned official agent vault"),kind:{enum:["prices","earnings"],description:B.enumValues({prices:"the vault share price history",earnings:"the vault earnings history"})}},["vault","kind"],async n=>{let s=a.address(n.vault);return A.vaults.some(r=>c(r.address,s))||_("Use a pinned TickerSpring agent vault."),i(`/v1/agent/vaults/${s}/${ge(n.kind,["prices","earnings"])}`)}),t("basket_history",{basket:te("basket pool"),days:Ie("Number of days of basket history to read, from 1 to 90. Defaults to 30.")},["basket"],n=>i(pe(`/v1/baskets/${a.address(n.basket)}/history`,{days:se(n.days??30,1,90)}))),t("strategy_tokens",{kind:{enum:["grid","ladder"],description:B.enumValues({grid:"scan tokens for grid strategies",ladder:"scan tokens for ladder strategies"})},limit:{type:"integer",minimum:1,maximum:10,description:"Maximum number of tokens to return, from 1 to 10. Defaults to 5."},category:{..._t,description:'Token category filter; defaults to any. Only for kind "grid"; the ladder scan rejects it.'},include:{enum:["good","all"],description:B.enumValues({good:"only the tokens the provider rates as good for the strategy",all:"all scanned tokens (default)"})}},["kind"],n=>{let s=ge(n.kind,["grid","ladder"]);return s==="ladder"&&n.category!==void 0&&_("The ladder scan does not accept a category filter."),i(pe(`/v1/agent/${s}/tokens`,{limit:se(n.limit??5,1,10),include:ge(n.include??"all",["good","all"]),...s==="grid"?{category:ge(n.category??"any",_t.enum)}:{}}))}),t("ranges",{token:te("token to estimate ranges for"),amount:ke("100000000","Optional budget for the estimate."),days:Ie("Number of days of history to use, from 1 to 90. Defaults to 14."),feeBps:Ze},["token"],n=>i(pe("/v1/agent/ranges",{token:a.address(n.token),days:se(n.days??14,1,90),...n.amount===void 0?{}:{amountUsd:e.formatAmount(a.positive(n.amount),6)},...n.feeBps===void 0?{}:{feeBps:se(n.feeBps,0,1e3)}}))),t("backtest_grid",{token:te("token to backtest"),buyPrice:Je("Grid buy price"),sellPrice:Je("Grid sell price, above the buy price"),amount:ke("100000000","Budget of the backtest, at least 0.01 USDG."),repeat:{type:"boolean",description:"Whether the grid repeats its buy and sell cycle. Defaults to true."},days:Ie("Number of days of history to backtest, from 1 to 90. Defaults to 30."),feeBps:Ze,needsVolume:Ft},["token","buyPrice","sellPrice","amount"],async n=>{let s=nt(n.buyPrice),r=nt(n.sellPrice),[u,o=""]=s.decimal.split("."),[p,l=""]=r.decimal.split("."),d=Math.max(o.length,l.length);return BigInt(`${u}${o.padEnd(d,"0")}`)>=BigInt(`${p}${l.padEnd(d,"0")}`)&&_("The grid sell price must be above its buy price."),BigInt(a.positive(n.amount))<10000n&&_("Backtest at least 0.01 USDG."),at(e,"/v1/agent/backtest/grid",{token:a.address(n.token),buyPrice:s,sellPrice:r,amountUsd:it(e,n.amount),repeat:et(n.repeat??!0),days:se(n.days??30,1,90),needsVolume:et(n.needsVolume??!0),...n.feeBps===void 0?{}:{feeBps:se(n.feeBps,0,1e3)}})}),t("backtest_ladder",{token:te("token to backtest"),side:{enum:["buy","sell"],description:B.enumValues({buy:"a ladder of buy levels",sell:"a ladder of sell levels"})},levels:{type:"array",minItems:1,maxItems:20,description:"Ladder levels to backtest, 1 to 20. Each level has a price and an amount.",items:{type:"object",properties:{price:Je("Level price"),amount:ke("10000000","Budget of this level.")},required:["price","amount"],additionalProperties:!1}},days:Ie("Number of days of history to backtest, from 1 to 90. Defaults to 30."),feeBps:Ze,needsVolume:Ft},["token","side","levels"],n=>{(!Array.isArray(n.levels)||n.levels.length<1||n.levels.length>20)&&_("Choose 1 to 20 backtest levels.");let s=n.levels.map(r=>{let u=a.object(r);return a.inputs(u,["price","amount"]),{price:nt(u.price),amountUsd:it(e,u.amount)}});return at(e,"/v1/agent/backtest/ladder",{token:a.address(n.token),side:ge(n.side,["buy","sell"]),levels:s,days:se(n.days??30,1,90),needsVolume:et(n.needsVolume??!0),...n.feeBps===void 0?{}:{feeBps:se(n.feeBps,0,1e3)}})}),t("strategy_finder",{amount:ke("100000000","Optional budget for the search."),period:{type:"string",description:'Look-back period from 1d to 30d, such as "7d". Defaults to 7d.'},token:te("token to search strategies for"),category:{type:"string",description:"Optional published category identifier: lowercase letters, digits and hyphens."},strategy:{type:"string",description:"Optional published strategy identifier: lowercase letters, digits and hyphens."}},[],n=>i(pe("/v1/strategy-finder",{...n.amount===void 0?{}:{budget:e.formatAmount(a.positive(n.amount),6)},period:tt(n.period??"7d"),...n.token===void 0?{}:{token:a.address(n.token)},...Object.fromEntries(["category","strategy"].filter(s=>n[s]!==void 0).map(s=>{let r=a.text(n[s]);return/^[a-z][a-z0-9-]{0,39}$/.test(r)||_("Use a published strategy or category identifier."),[s,r]}))}))),t("strategy_detail",{token:te("token to read strategy details for"),period:{type:"string",description:'Look-back period from 1d to 30d, such as "7d". Defaults to 7d.'}},["token"],n=>i(pe(`/v1/strategy-finder/${a.address(n.token)}`,{period:tt(n.period??"7d")}))),t("strategy_track_record",{},[],()=>i("/v1/strategy-finder/track-record")),t("backtest_strategy",{token:te("token to backtest"),strategy:{type:"string",description:Sn},variant:{type:"string",description:"Optional published variant identifier of the strategy: letters, digits, dots, underscores and hyphens."},settings:{type:"object",description:"Not supported yet: any value is rejected. Use variant to pick a published configuration."},amount:ke("100000000","Optional budget of the backtest."),days:{type:"integer",minimum:21,maximum:60,description:"Number of days of history to backtest, from 21 to 60. Defaults to 60."},period:{type:"string",description:'Period label from 1d to 30d, such as "7d". Defaults to 7d.'}},["token","strategy"],n=>{let s=a.text(n.strategy);/^[a-z][a-z0-9-]{0,39}$/.test(s)||_("Use a published strategy identifier."),n.settings!==void 0&&_("Custom strategy settings require a published per-strategy schema. Use a published variant meanwhile.");let r=n.variant===void 0?void 0:a.text(n.variant);return r!==void 0&&!/^[a-zA-Z0-9._-]{1,80}$/.test(r)&&_("Use a published strategy variant identifier."),at(e,"/v1/strategy-finder/backtest",{token:a.address(n.token),strategy:s,...r===void 0?{}:{variant:r},...n.amount===void 0?{}:{budgetUsd:it(e,n.amount)},days:se(n.days??60,21,60),period:tt(n.period??"7d")})}),t("agents",{},[],()=>i("/v1/agents")),t("agent_vault",{slug:{type:"string",description:"Agent slug from tickerspring_agents: lowercase letters, digits and hyphens."}},["slug"],(n,s)=>i(pe(`/v1/agents/${In(n.slug)}/vault`,{owner:s}))),t("trade_directory",{},[],()=>i("/v1/trade")),t("trade_token",{token:te("token to look up")},["token"],n=>i(pe("/v1/trade/token",{address:a.address(n.token)}))),t("trade_quotes",{tokenIn:te("token being sold"),tokenOut:te("token being bought"),amount:{...Mt,description:'Amount of tokenIn in base units (use the decimals of tokenIn). Example: "1000000" = 1 USDG when tokenIn is USDG (6 decimals).'}},["tokenIn","tokenOut","amount"],n=>i(pe("/v1/trade/quotes",{tokenIn:a.address(n.tokenIn),tokenOut:a.address(n.tokenOut),amountIn:a.positive(n.amount)}))),t("spring_config",{},[],()=>i("/v1/spring-orders/config")),t("owner_report_card",{},[],async()=>({chainId:4663,url:"https://tickerspring.com/agents",reason:"Private report cards and wallet-attributed strategy attempt counts require the owner personal_sign session. Sign in on the official site in your own wallet. Oak does not accept owner signatures or bearer tokens as tool arguments."})),t("sign_request",{id:{type:"string",description:"Identifier of a stored TickerSpring sign request: 1 to 128 letters, digits, underscores or hyphens."}},["id"],async(n,s)=>{let r=a.text(n.id);/^[a-zA-Z0-9_-]{1,128}$/.test(r)||_("Provide a stored TickerSpring sign-request ID.");let u=`/v1/agent/sign-requests/${r}`,o=a.object(await q.api(e,u)),p=a.object(o.bundle);(!c(p.owner,s)||p.chainId!==4663)&&_("This sign request does not belong to the current wallet on chain 4663.");let l=Date.parse(a.text(p.expiresAt));return Number.isFinite(l)||_("TickerSpring returned no valid sign-request expiration."),{...q.readResult(u,o),expired:l<=Date.now(),notice:"Stored provider data only. This does not authorize sending its calldata. Prepare the action again through the matching Oak tool and inspect its current preview."}}),t("instructions",{document:{enum:["skill","api","privy","turnkey","openapi"],description:B.enumValues({skill:"the agent skill guide",api:"the API reference",privy:"the Privy wallet policy",turnkey:"the Turnkey wallet policy",openapi:"the OpenAPI document"})}},["document"],async n=>{let s=ge(n.document,["skill","api","privy","turnkey","openapi"]);return{chainId:4663,url:`https://api.tickerspring.com${{skill:"/v1/agent/skill.md",api:"/v1/agent/llms.txt",privy:"/v1/agent/policies/privy",turnkey:"/v1/agent/policies/turnkey",openapi:"/v1/agent/openapi.json"}[s]}`,notice:"Official reference document. Wallet policies are for external wallet operators; Oak uses its own local signing guards. No transaction has been prepared or sent."}})]}import{encodeFunctionData as Rt,getAddress as On,parseAbi as Cn}from"viem";var Lt=On(A.contracts.limitOrderHook),qt=Cn(["function realize(uint256 id)","function claim(uint256 id,bool currency0)"]);function Pn(e){a.inputs(e,["action","id","currency0"]);let t=BigInt(a.integer(e.id));if(e.action==="realize"){if(e.currency0!==void 0)throw new f("Use currency0 only for a single-currency claim.");return Rt({abi:qt,functionName:"realize",args:[t]})}if(e.action!=="claim"||typeof e.currency0!="boolean")throw new f("Choose realize, or claim with an explicit currency0 boolean. Use tickerspring_claim to claim both currencies.");return Rt({abi:qt,functionName:"claim",args:[t,e.currency0]})}async function _n(e,t,i){let n=a.object(await e.clientFor(4663).readContract({address:Lt,abi:fe.limit.abi,functionName:"getOrder",args:[BigInt(a.integer(t))]}));if(!c(n.owner,i))throw new f("This limit order does not belong to the current wallet.")}function Nt(e){return{name:"tickerspring_order_accounting",inputSchema:{type:"object",properties:{action:{enum:["realize","claim"],description:B.enumValues({realize:"update the settled accounting of the order",claim:"claim one currency of the order"})},id:{type:"string",pattern:"^\\d+$",description:B.id("limit order")},currency0:{type:"boolean",description:"Only for claim, where it is required: true claims currency0, false claims currency1. Currency order follows token address order. Not allowed for realize."}},required:["action","id"],additionalProperties:!1},execute:async(t,i)=>{try{a.address(i);let n=Pn(t);await _n(e,t.id,i);let s=[e.unsignedTx({to:Lt,data:n,value:"0",chainId:4663,description:t.action==="realize"?`Realize accounting for order ${String(t.id)}`:`Claim currency${t.currency0?"0":"1"} for order ${String(t.id)}`})],r=await e.preview(s,i);return{txs:s,from:i,id:a.integer(t.id),action:t.action,preview:r,source:fe.limit.source,summary:`${s[0].description}. Realization updates settled bucket accounting; it does not guarantee a new fill or claim proceeds. Claims go to the stored order owner. Currency order follows token address order. This direct contract call is not filed by the provider prepare API for report-card attribution. No transaction has been sent. ${r.summary}`}}catch(n){throw new f(e.plainError(n))}}}}var Pe="https://api.tickerspring.com",zt={type:"string",pattern:"^\\d+$"},L=e=>({...ue,description:B.address(e)}),N=e=>({...zt,description:e}),ot=e=>({...zt,description:B.id(e)}),Ce=e=>({type:"string",description:`${e} in USDG per whole token, as a decimal string. Example: "12.5".`}),Rn={type:"string",pattern:"^[a-z0-9][a-z0-9._-]{0,39}$",description:"Optional label of 1 to 40 lowercase letters, digits, dots, underscores or hyphens, sent to TickerSpring to attribute this action to an agent."},ve=e=>({type:"integer",minimum:1,maximum:500,description:`Allowed slippage in basis points (50 = 0.5%), from 1 to 500. Defaults to ${e}.`}),Ut=(e,t)=>({type:"integer",minimum:100,maximum:e,description:`Weight in basis points (50 = 0.5%; 5000 = 50%), from 100 to ${e}. ${t}`}),Gt={enum:[30,100],description:"Basket swap fee in basis points (50 = 0.5%): 30 or 100. Defaults to 100."},qn={action:{enum:["open","close","setRepeat","collect"],description:B.enumValues({open:"open a new position",close:"exit a position",setRepeat:"turn repeating on or off",collect:"take available proceeds"})},token:L("token traded against USDG; required for open"),buyPrice:Ce("Buy price, required for open"),sellPrice:Ce("Sell price above the buy price, required for open"),amount:N(`${B.amount("USDG",6,"11000000")} Required for open; at least 11 USDG.`),repeat:{type:"boolean",description:"Required for open and setRepeat: whether the strategy repeats its cycle."},startingPrice:Ce("Starting price for a new market, required only when the token has no grid market yet"),id:ot("strategy position; required for close, collect and setRepeat"),min0:N('Close only: minimum currency0 to receive, in base units of that token (use its decimals). Example: "1000000" = 1 USDG if currency0 is USDG (6 decimals). Currency order follows token address order.'),min1:N('Close only: minimum currency1 to receive, in base units of that token (use its decimals). Example: "1000000" = 1 USDG if currency1 is USDG (6 decimals). Currency order follows token address order.')},re={address:X(A.contracts.usdg),symbol:"USDG",decimals:6,chainId:E},_e=K.vault,Ln=K.basket,Oe=X(A.contracts.basketZap);function g(e){throw new f(e)}async function G(e,t){return(await le(e.http,`${Pe}${t}`,{headers:{"User-Agent":"Oak-TickerSpring/1.0"}},n=>!!n&&typeof n=="object"&&Object.hasOwn(n,"data"))).data}function W(e,t){return{chainId:E,source:`${Pe}${e}`,data:t}}function Te(e){let t=e.slippageBps??100;return(typeof t!="number"||!Number.isInteger(t)||t<1||t>500)&&g("Use slippageBps from 1 to 500."),t}function we(e){let t=BigInt(a.positive(e));return t<=1n&&g("Provide a minimum output greater than 1 base unit."),t}function Ae(e,t,i,n,s){let r=e.at(-1),u=Ht({abi:i,functionName:n,args:s});(!r||!c(r.to,t)||!U(r.data,u))&&g("TickerSpring calldata does not match the requested action.")}function ut(e,t,i,n){if(e.length!==1&&e.length!==2&&g("TickerSpring returned unexpected transaction steps."),e.length===2){let s=e[0],r=Ht({abi:jn,functionName:"approve",args:[i,BigInt(n)]});(!c(s.to,t)||!U(s.data,r))&&g("TickerSpring approval must match the exact input amount and spender.")}}function Vt(e){let t=X(a.address(e));return A.vaults.some(i=>c(i.address,t))||g("This vault is not pinned to an official TickerSpring agent release in Oak."),t}async function ct(e,t){let i=Vt(t),n=a.object(await G(e,`/v1/agent/vaults/${i}`)),s=a.object(n.agentVault),r=A.vaults.find(u=>c(u.address,i));return(!c(n.vault,i)||!c(s.address,i)||s.release!==r.release||s.audited!==!0||s.shareDecimals!==12||!c(a.object(s.asset).address,re.address)||s.stale!==!1)&&g("TickerSpring vault identity, release or current state could not be verified."),{address:i,data:n,entry:s,share:a.token({address:i,symbol:s.symbol,decimals:12})}}var Nn="The fee APR counts only trading fees the vault collected over the last 7 days, at that pace. It does not include gains or losses from the stock's price. Your return is the change in the vault's share price; ask for this vault's details to see it.";function Un(e){let t=e.token,i=t&&typeof t=="object"?t.symbol:void 0;return typeof i=="string"&&/^[A-Za-z0-9.]{1,12}$/.test(i)?i:"the stock"}function Gn(e){return`A TickerSpring vault holds about half ${e} and half USDG inside a price band and earns trading fees. As ${e} rises the vault sells it for USDG, so it gains less than holding ${e}; as it falls the vault buys more.`}function Kt(e){return typeof e=="number"&&Number.isInteger(e)&&e>=0&&e<=1e4?`Vault fee: ${e/100}% of the trading fees the vault collects (not of your deposit).`:null}var Wt="Your deposit is waiting for TickerSpring's keeper to fill it. You hold no vault shares until then.";function Yt(e){return{realReturnNote:Nn,feeNote:Kt(e.feeBps),bandNote:Gn(Un(e))}}function $n(e){let t=e.vaults.filter(n=>!!n&&typeof n=="object");if(t.some(n=>typeof n.shares=="string"&&/[1-9]/.test(n.shares)))return!1;let i=a.object(e.totals).pendingDepositsUsd;return typeof i=="string"&&/^\d+(\.\d+)?$/.test(i)&&/[1-9]/.test(i)?!0:t.some(n=>Array.isArray(n.pendingDeposits)&&n.pendingDeposits.length>0)}var Hn=168*3600*1e3;function zn(e){if(!e||typeof e!="object"||!Array.isArray(e.points))return null;let{intervalSeconds:t,points:i}=e,n=typeof t=="number"&&t>0?t:600,s=Math.min(2*n,3600)*1e3,r=i.flatMap(l=>{if(!l||typeof l!="object")return[];let{date:d,sharePrice:h}=l,k=typeof d=="string"?Date.parse(d):NaN,b=typeof h=="string"&&/^\d+(\.\d+)?$/.test(h)?Number(h):NaN;return Number.isFinite(k)&&b>0?[{at:k,date:d,sharePrice:h,price:b}]:[]}).sort((l,d)=>l.at-d.at),u=r.at(-1);if(!u)return null;let o=u.at-Hn,p=r.filter(l=>l.at<=o+s).reduce((l,d)=>l===void 0||Math.abs(d.at-o)<Math.abs(l.at-o)?d:l,void 0);return p?{changePct:Number(((u.price/p.price-1)*100).toFixed(2)),from:p.sharePrice,to:u.sharePrice,fromDate:p.date,toDate:u.date,basis:"share price"}:null}function Vn(e,t,i){let n=zn(t.history);return{...W(e,{...t,agentVault:{...i,...Yt(i)}}),shareReturn7d:n,shareReturnNote:n===null?null:`Your return from ${n.fromDate} to ${n.toDate}: the vault's share price changed by ${n.changePct}% (from ${n.from} to ${n.to}). This is the change in what your shares are worth, not a fee rate.`}}async function Qt(e,t){let i=`/v1/agent/accounts/${t}`,n=a.object(await G(e,i));return(!c(n.owner,t)||!Array.isArray(n.unavailable)||n.unavailable.length||n.limitOrdersComplete!==!0||n.gridsComplete!==!0||n.ladderStrategiesComplete!==!0||!["vaults","baskets","limitOrders","grids","ladderStrategies"].every(s=>Array.isArray(n[s]))||!Number.isFinite(Date.parse(a.text(n.asOf)))||a.object(n.totals).complete!==!0)&&g("TickerSpring could not return the complete account for this wallet. Retry before acting."),{...W(i,n),pendingDepositNote:$n(n)?Wt:null,originalInputIsNotRemainingPrincipal:!0,remainingPrincipal:null,remainingPrincipalReason:"The published account schema does not expose an authoritative per-order refundable-principal quote. Use tickerspring_order_exit_preview for current simulated cancellation returns; never use original debit as remaining principal."}}async function Kn(e,t,i){a.inputs(t,["vault","amount","minShares","slippageBps","agentTag"]);let n=a.positive(t.amount),s=we(t.minShares),r=Te(t),u=await ct(e,t.vault);(u.entry.status!=="open"||u.entry.depositsOpen!==!0)&&g(`TickerSpring vault is not taking deposits: ${a.text(u.entry.statusReason)}`),BigInt(n)<BigInt(a.integer(u.entry.minDepositUnits))&&g("Increase the deposit to the vault minimum shown by tickerspring_vaults."),u.entry.remainingCapacityUnits!==null&&BigInt(n)>BigInt(a.integer(u.entry.remainingCapacityUnits))&&g("Reduce the deposit to the vault remaining capacity.");let o=await a.request(e,"/v1/agent/prepare/vault-deposit",{owner:i,...a.attribution(t),vault:u.address,amount:e.formatAmount(n,6),slippageBps:r}),p=a.prepared(e,o,i,"vault-deposit"),l=a.object(p.bundle.params),d=we(l.minShares);return(!c(l.vault,u.address)||!c(l.receiver,i)||a.integer(l.assets)!==n||d<s)&&g("TickerSpring deposit does not preserve the requested vault, amount, receiver or minimum shares."),ut(p.txs,re.address,u.address,n),Ae(p.txs,u.address,_e,"requestDeposit",[BigInt(n),i,d]),a.result(e,p,i,{input:{token:re,amount:n},minimumOutput:{token:u.share,amount:d.toString()}},[Kt(u.entry.feeBps),`Deposit creates a keeper request, not immediately owned shares. After the request is mined: ${Wt} Monitor tickerspring_account; cancel an unfilled request with tickerspring_vault_cancel_deposit.`].filter(Boolean).join(" "))}async function Wn(e,t,i){a.inputs(t,["vault","id","agentTag"]);let n=Vt(t.vault),s=a.integer(t.id),r=a.prepared(e,await a.request(e,"/v1/agent/prepare/vault-cancel-deposit",{owner:i,...a.attribution(t),vault:n,id:s}),i,"vault-cancel-deposit");return r.txs.length!==1&&g("TickerSpring returned unexpected cancellation steps."),Ae(r.txs,n,_e,"cancelDeposit",[BigInt(s)]),a.result(e,r,i,{vault:n,id:s},"Cancel only a pending deposit. Verify refunded USDG and request status with tickerspring_account and balances.")}async function Yn(e,t,i){a.inputs(t,["vault","shares","mode","minUsdg","minToken","slippageBps","agentTag"]);let n=a.positive(t.shares),s=Te(t);t.mode==="queue"&&g("Queued vault withdrawals are unavailable: no current official agent vault advertises a redeemQueue, and its ABI is not published in the wallet policy. Use a listed direct mode or the official UI."),t.mode!=="usdg"&&t.mode!=="in-kind"&&g("Choose usdg or in-kind withdrawal mode.");let r=BigInt(a.integer(t.minUsdg)),u=t.mode==="in-kind"?BigInt(a.integer(t.minToken)):0n;r+u<=1n&&g("Provide protected withdrawal minima greater than 1 base unit in total."),t.mode==="usdg"&&t.minToken!==void 0&&g("Use minToken only for in-kind withdrawals.");let o=await ct(e,t.vault);(!Array.isArray(o.entry.withdrawModes)||!o.entry.withdrawModes.includes(t.mode))&&g("That withdrawal mode is not currently offered by this vault.");let p=a.prepared(e,await a.request(e,"/v1/agent/prepare/vault-withdraw",{owner:i,...a.attribution(t),vault:o.address,shares:e.formatAmount(n,12),mode:t.mode,slippageBps:s}),i,"vault-withdraw");(p.txs.length!==1||!c(p.txs[0].to,o.address))&&g("TickerSpring returned unexpected withdrawal steps.");let l=Mn({abi:_e,data:p.txs[0].data}),d=l.args;if((d[0]!==BigInt(n)||!c(d[1],i)||!c(d[2],i))&&g("TickerSpring withdrawal must redeem the requested shares for this wallet."),t.mode==="in-kind")(l.functionName!=="redeemInKind"||typeof d[3]!="bigint"||typeof d[4]!="bigint"||d[3]<r||d[4]<u)&&g("TickerSpring withdrawal minima do not protect both requested assets.");else{(l.functionName!=="redeem"||typeof d[4]!="bigint"||d[4]<r)&&g("TickerSpring withdrawal minimum does not protect the requested USDG.");let h=a.object(d[3]);c(h.tokenIn,a.address(a.object(o.entry.token).address))||g("TickerSpring withdrawal route must sell only the vault pool token.")}return Ae(p.txs,o.address,_e,l.functionName,d),a.result(e,p,i,{input:{token:o.share,amount:n},mode:t.mode,minimumOutputs:[{token:re,amount:r.toString()},...t.mode==="in-kind"?[{token:a.token(o.entry.token),amount:u.toString()}]:[]]},"Withdrawals consume vault shares. Verify both token balances and remaining shares with tickerspring_account after the receipt.")}async function Qn(e,t,i,n){a.inputs(t,["basket","token","amount","minAmountOut","slippageBps","agentTag"]);let s=X(a.address(t.basket)),r=A.baskets.find(m=>c(m.pool,s));if(!r){let m=a.object(await G(e,`/v1/baskets/${s}`));(!c(m.pool,s)||m.listed!==!1||!c(m.maker,i)||!Array.isArray(m.tokens))&&g("Use a pinned basket, or an unverified basket this wallet created through the pinned BasketMaker.");let v=a.text(m.createdTx);/^0x[0-9a-fA-F]{64}$/.test(v)||g("The basket creation receipt is unavailable.");let T=e.clientFor(E),P=await T.getTransactionReceipt({hash:v}),R=X(A.basketConfig.basketMakerV2),V=P.logs.some(F=>{if(!c(F.address,R))return!1;try{let M=Fn({abi:rt(K.maker),data:F.data,topics:F.topics}),Z=a.object(M.args);return M.eventName==="Made"&&c(Z.pool,s)&&c(Z.maker,i)&&c(Z.recipient,i)}catch{return!1}});(P.status!=="success"||!V||await T.readContract({address:X(A.basketConfig.weightedPoolFactory),abi:rt(K.basketFactory),functionName:"isPoolFromFactory",args:[s]})!==!0)&&g("This basket has no successful creation by the pinned BasketMaker and factory.");let I=m.tokens.map(F=>a.token(F)),$=await T.readContract({address:X(A.basketConfig.vault),abi:rt(K.basketVault),functionName:"getPoolTokens",args:[s]});(new Set(I.map(F=>F.address.toLowerCase())).size!==I.length||!Array.isArray($)||$.length!==I.length||!I.every(F=>$.some(M=>c(M,F.address))))&&g("The unverified basket constituents disagree with its on-chain vault."),r={pool:s,tokens:I}}let u=r,o=t.token===void 0?re:(()=>{let m=X(a.address(t.token));if(c(m,re.address))return re;let v=[...u.tokens,...A.baskets.flatMap(T=>T.tokens)].find(T=>c(T.address,m));return(!v||!u.tokens.some(T=>c(T.address,m))&&v.symbol!=="WETH")&&g("Use USDG, WETH or a constituent of this basket."),a.token(v)})(),p=a.positive(t.amount),l=we(t.minAmountOut),d=Te(t),h=a.token({address:s,symbol:"BPT",decimals:18}),k=n==="buy"?o:h,b=n==="buy"?h:o,y=a.prepared(e,await a.request(e,`/v1/agent/prepare/basket-${n}`,{owner:i,...a.attribution(t),basket:s,amount:e.formatAmount(p,k.decimals),[n==="buy"?"payWith":"receive"]:o.address,slippageBps:d}),i,`basket-${n}`),w=a.object(y.bundle.params),x=we(w.minOut),C=a.futureDeadline(w.deadline);(w.side!==n||!c(w.zap,Oe)||!c(w.pool,s)||!c(w.token,o.address)||!c(w.recipient,i)||a.integer(w.amount)!==p||x<l||!Array.isArray(w.legs))&&g("TickerSpring basket quote does not preserve the requested pool, token, amount, receiver or minimum.");let D=w.legs.map(m=>{let v=a.object(m),T=a.address(v.tokenIn),P=a.address(v.tokenOut);(n==="buy"?!c(T,o.address)||!u.tokens.some(I=>c(I.address,P)):!u.tokens.some(I=>c(I.address,T))||!c(P,o.address))&&g("TickerSpring returned a basket route outside its pinned constituents.");let R=a.text(v.data);/^0x(?:[0-9a-fA-F]{2})+$/.test(R)||g("TickerSpring returned malformed basket route calldata.");let V=BigInt(a.positive(v.amountIn));return Se(R,T,P,V,Oe),{tokenIn:T,tokenOut:P,amountIn:V,data:R}});return n==="buy"&&D.reduce((m,v)=>m+v.amountIn,0n)>BigInt(p)&&g("TickerSpring basket routes exceed the authorized input."),ut(y.txs,k.address,Oe,p),Ae(y.txs,Oe,Ln,n,n==="buy"?[s,o.address,BigInt(p),D,x,i,BigInt(C)]:[s,BigInt(p),o.address,D,x,i,BigInt(C)]),a.result(e,y,i,{input:{token:k,amount:p},minimumOutput:{token:b,amount:x.toString()},deadline:C},"BasketZap trades the constituents through KyberSwap. The basket swap fee accrues to holders; route fees and price impact apply. Verify basket tokens and payment balances after the receipt.")}function Xt(e){let t=(i,n,s,r)=>({name:`tickerspring_${i}`,inputSchema:{type:"object",properties:{...n,...["grid","ladder_strategy","ladder","basket_make","vault_deposit","vault_cancel_deposit","vault_withdraw","basket_buy","basket_sell"].includes(i)?{agentTag:Rn}:{}},required:s,additionalProperties:!1},execute:async(u,o)=>{try{return a.address(o),await r(u,o)}catch(p){throw new f(e.plainError(p))}}});return[...jt(e),Nt(e),t("products",{},[],async i=>(a.inputs(i,[]),{...Ve(),...W("/v1/agent/products",await G(e,"/v1/agent/products"))})),t("tokens",{query:{type:"string",maxLength:128,description:"Search text for token name, symbol or address, up to 128 characters."},category:{type:"string",description:'Published token category: lowercase letters, digits and hyphens, such as "stock".'},sort:{enum:["volume"],description:B.enumValues({volume:"order tokens by trading volume"})}},[],async i=>{a.inputs(i,["query","category","sort"]);let n=new URLSearchParams;if(i.query!==void 0){let u=a.text(i.query);u.length>128&&g("Use a token query up to 128 characters."),n.set("q",u)}if(i.category!==void 0){let u=a.text(i.category);/^[a-z][a-z0-9-]{0,39}$/.test(u)||g("Use a published token category."),n.set("category",u)}i.sort!==void 0&&(i.sort!=="volume"&&g("Use the documented volume sort."),n.set("sort","volume"));let s=`/v1/tokens${n.size?`?${n}`:""}`,r;try{r=a.object(await G(e,s))}catch(u){throw new f(`${e.plainError(u)} ${ze}`)}return Array.isArray(r.tokens)||g("TickerSpring token discovery is unavailable."),{tokenFilterGuidance:ze,...W(s,{...r,tokens:r.tokens.map(u=>{let o=a.object(u);return{...o,...a.token(o)}})})}}),t("vaults",{vault:L("pinned official agent vault; omit to list all vaults")},[],async i=>{if(a.inputs(i,["vault"]),i.vault!==void 0){let s=await ct(e,i.vault);return Vn(`/v1/agent/vaults/${s.address}`,s.data,s.entry)}let n=await G(e,"/v1/agent/vaults");return Array.isArray(n)||g("TickerSpring vault list is unavailable."),W("/v1/agent/vaults",n.map(s=>{let r=a.object(s),u=X(a.address(r.address));return{...r,address:u,chainId:E,pinned:A.vaults.some(o=>c(o.address,u)&&o.release===r.release),...Yt(r)}}))}),t("baskets",{basket:L("basket pool; omit to list all baskets")},[],async(i,n)=>{a.inputs(i,["basket"]);let s=i.basket===void 0?"/v1/baskets":`/v1/baskets/${X(a.address(i.basket))}`,r=await G(e,s),u=i.basket===void 0?void 0:await G(e,`${s}/account/${n}`);return{...W(s,r),...u===void 0?{}:{holding:u}}}),t("order_exit_preview",{id:ot("limit order to preview a cancellation for")},["id"],(i,n)=>Ct(e,i,n)),t("account",{},[],(i,n)=>(a.inputs(i,[]),Qt(e,n))),t("activity",{cursor:{type:"string",minLength:1,maxLength:512,description:"Cursor returned by a previous tickerspring_activity result, to read the next page. Omit for the first page."}},[],async(i,n)=>{a.inputs(i,["cursor"]);let s=i.cursor===void 0?void 0:a.text(i.cursor);s&&s.length>512&&g("Use the activity cursor returned by TickerSpring.");let r=`/v1/agent/accounts/${n}/activity${s===void 0?"":`?cursor=${encodeURIComponent(s)}`}`,u=a.object(await G(e,r));return a.text(u.cursor),Array.isArray(u.changes)||g("TickerSpring activity is unavailable."),W(r,u)}),t("report_card",{agent:{type:"string",pattern:"^[a-z0-9][a-z0-9._-]{0,39}$",description:"Optional agent tag, as used for agentTag on actions, to filter the report card to that agent."}},[],async(i,n)=>{a.inputs(i,["agent"]);let s=a.attribution({agentTag:i.agent}),r=`/v1/agent/report-card/${n}${s.agentTag===void 0?"":`?agent=${encodeURIComponent(String(s.agentTag))}`}`;return W(r,await G(e,r))}),t("plan",{kind:{enum:["grid","ladder"],description:B.enumValues({grid:"plan a grid strategy",ladder:"plan a ladder strategy"})},token:L("token to plan for"),amount:N(`${B.amount("USDG",6,"55000000")} At least 11 USDG for a grid, 55 USDG for a ladder.`),gap:{type:"string",description:"Grid only: gap between grid lines as a decimal string from 0.005 to 0.5. Omit to let the provider choose."},days:{type:"integer",minimum:28,maximum:90,description:"Grid only: number of days of history to plan from, 28 to 90. Defaults to 60."}},["kind","token","amount"],async i=>{a.inputs(i,["kind","token","amount","gap","days"]),i.kind!=="grid"&&i.kind!=="ladder"&&g("Choose grid or ladder planning.");let n=a.positive(i.amount);BigInt(n)<(i.kind==="grid"?11000000n:55000000n)&&g("Plan at least 11 USDG for a grid or 55 USDG for a ladder."),i.kind==="ladder"&&(i.gap!==void 0||i.days!==void 0)&&g("The ladder planner does not accept gap or days.");let s=i.days??60;(typeof s!="number"||!Number.isInteger(s)||s<28||s>90)&&g("Choose 28 to 90 days for grid planning.");let r=i.gap===void 0?void 0:a.price(a.text(i.gap));if(r!==void 0){let[o,p=""]=r.split("."),l=10n**BigInt(p.length),d=BigInt(`${o}${p}`);(d*1000n<l*5n||d*2n>l)&&g("Choose a grid gap from 0.005 to 0.5.")}let u=`/v1/agent/${i.kind}/plan?token=${a.address(i.token)}&amountUsd=${e.formatAmount(n,6)}${i.kind==="grid"?`&days=${s}${r===void 0?"":`&gap=${r}`}`:""}`;return W(u,await G(e,u))}),t("swap_quote",{tokenIn:L("token being sold"),tokenOut:L("token being bought"),amount:N('Amount of tokenIn in base units (use the decimals of tokenIn). Example: "1000000" = 1 USDG when tokenIn is USDG (6 decimals).'),slippageBps:ve("100")},["tokenIn","tokenOut","amount"],async i=>{a.inputs(i,["tokenIn","tokenOut","amount","slippageBps"]);let n=X(a.address(i.tokenIn)),s=X(a.address(i.tokenOut)),r;if(c(n,re.address))r=re;else if(c(n,A.basketConfig.weth))r=a.token({address:n,symbol:"WETH",decimals:18});else{let k=a.object(await G(e,"/v1/tokens"));Array.isArray(k.tokens)||g("TickerSpring token list is unavailable.");let b=k.tokens.map(a.object).filter(y=>c(y.address,n));b.length!==1&&g("Use an input address uniquely listed by TickerSpring."),r=a.token(b[0])}let u=`/v1/agent/swap/quote?tokenIn=${n}&tokenOut=${s}&amount=${e.formatAmount(a.positive(i.amount),r.decimals)}&slippageBps=${Te(i)}`,o=a.object(await G(e,u)),p=a.token(o.tokenOut),l=a.token(o.tokenIn);(!c(l.address,n)||l.decimals!==r.decimals||!c(p.address,s)||a.integer(o.amountInUnits)!==a.positive(i.amount))&&g("TickerSpring swap quote does not match the requested input and output.");let d=a.positive(o.expectedOutUnits),h=a.positive(o.minimumOutUnits);return BigInt(h)>BigInt(d)&&g("TickerSpring swap quote has inconsistent output amounts."),{...W(u,o),input:{token:r,amount:a.positive(i.amount)},output:{token:p,amount:d},minimumOutput:{token:p,amount:h},executionAvailable:!1,reason:"Branded swap execution needs the published outer entrypoint ABI for selector 0xdc4e8da1 on router 0x75529402f73FF0Ddd10567A0590a69895439368D plus add-on router validation. A quote is not an executed swap."}}),t("candles",{token:L("token to read candles for"),interval:{enum:["15m","1h","4h","1d"],description:"Candle size: 15 minutes, 1 hour, 4 hours or 1 day. Defaults to 1h."},limit:{type:"integer",minimum:1,maximum:500,description:"Maximum number of candles to return, from 1 to 500. Defaults to 200."}},["token"],async i=>{a.inputs(i,["token","interval","limit"]);let n=i.interval??"1h",s=i.limit??200;(!["15m","1h","4h","1d"].includes(String(n))||typeof s!="number"||!Number.isInteger(s)||s<1||s>500)&&g("Choose a documented candle interval and a limit from 1 to 500.");let r=`/v1/candles?token=${a.address(i.token)}&interval=${String(n)}&limit=${s}`;return W(r,await G(e,r))}),t("basket_plan",{tokens:{type:"array",minItems:1,maxItems:8,description:"Basket constituents to plan, 1 to 8, each with a token and an optional weight.",items:{type:"object",properties:{token:L("constituent token"),weightBps:Ut(1e4,"Optional.")},required:["token"],additionalProperties:!1}},name:{type:"string",description:"Optional basket name to plan with."},symbol:{type:"string",description:"Optional basket symbol to plan with."},swapFeeBps:Gt},["tokens"],async i=>{a.inputs(i,["tokens","name","symbol","swapFeeBps"]),(!Array.isArray(i.tokens)||i.tokens.length<1||i.tokens.length>8)&&g("Choose 1 to 8 tokens for basket planning.");let n=i.tokens.map(u=>{let o=a.object(u);return a.inputs(o,["token","weightBps"]),o.weightBps!==void 0&&(typeof o.weightBps!="number"||!Number.isInteger(o.weightBps)||o.weightBps<100||o.weightBps>1e4)&&g("Use integer basket weights from 100 to 10000 basis points."),{token:a.address(o.token),...o.weightBps===void 0?{}:{weightPct:o.weightBps/100}}}),s=i.swapFeeBps??100;s!==30&&s!==100&&g("Choose a basket swap fee of 30 or 100 basis points.");let r="/v1/agent/baskets/plan";return W(r,await a.request(e,r,{tokens:n,swapFeePct:s/100,...i.name===void 0?{}:{name:a.text(i.name)},...i.symbol===void 0?{}:{symbol:a.text(i.symbol)}}))}),t("tx_status",{hash:{type:"string",pattern:"^0x[0-9a-fA-F]{64}$",description:"Transaction hash: 0x followed by 64 hex digits, of a transaction sent by the current wallet."}},["hash"],async(i,n)=>{a.inputs(i,["hash"]);let s=a.text(i.hash);/^0x[0-9a-fA-F]{64}$/.test(s)||g("Provide a full transaction hash.");let r=await e.clientFor(E).getTransactionReceipt({hash:s});return c(r.from,n)||g("This transaction was not sent by the signing wallet."),{chainId:E,receipt:JSON.parse(JSON.stringify(r,(u,o)=>typeof o=="bigint"?o.toString():o)),notice:"A mined transaction is not proof that a strategy filled or a keeper settled. Recheck tickerspring_account and balances."}}),t("spring_orders",{},[],i=>(a.inputs(i,[]),{chainId:E,url:"https://tickerspring.com/trade/spring-orders",source:`${Pe}/v1/agent/llms.txt`,handoff:"Spring Orders are site-only, with no agent route yet. Open the official page with your own wallet to configure, fund, monitor and stop the strategy. They charge 1% per fill and are distinct from limit orders, grids and ladder strategies. Nothing has been sent."})),t("capabilities",{},[],i=>(a.inputs(i,[]),{...Ve(),chainId:E,source:`${Pe}/v1/agent/llms.txt`,inventory:At,blockers:{T1:"Queued withdrawal: no current agent vault has a redeemQueue and no queue ABI is published in the official wallet policy. Direct withdrawal and pending-deposit cancellation are supported.",T2:"BasketMaker creation and Zap buy/sell are supported. Newly created baskets remain unverified and require a successful Made receipt from this wallet plus the pinned factory and on-chain constituents before trading.",T3:"Grid opening, first-market setup, repeat, collect and close are supported. Ladder strategies currently list zero markets; opening a ladder strategy needs a listed market and an official entry fixture. Existing ladders can close, collect and change repeat.",T5:"The published account schema lacks an authoritative per-order remaining-principal quote; debit is original input. Raw order and bucket details are preserved in tickerspring_account.",T8:"Branded swap execution requires the published outer entrypoint ABI for selector 0xdc4e8da1 on router 0x75529402f73FF0Ddd10567A0590a69895439368D plus local router validation. Quotes and report-card reads are supported."}})),...["grid","ladder-strategy"].map(i=>t(i==="grid"?"grid":"ladder_strategy",qn,["action"],(n,s)=>Bt(e,n,s,i))),t("ladder",{token:L("token to trade against USDG"),side:{enum:["buy","sell"],description:B.enumValues({buy:"spend USDG at each level",sell:"sell the token at each level"})},slippageBps:{type:"integer",minimum:0,maximum:9999,description:"Allowed slippage in basis points (50 = 0.5%), from 0 to 9999. Defaults to 500; the provider minimum is 500."},levels:{type:"array",minItems:2,maxItems:20,description:"Independent limit-order levels, 2 to 20. Each has a price, an amount and a minimum output.",items:{type:"object",properties:{price:Ce("Limit price of this level"),amount:N('Input for this level in base units of the input token (use its decimals): USDG for buy, the token for sell. Example: "10000000" = 10 USDG (6 decimals).'),minAmountOut:N("Minimum output for this level in base units of the output token (use its decimals): the token for buy, USDG for sell. Must be greater than 1.")},required:["price","amount","minAmountOut"],additionalProperties:!1}}},["token","side","levels"],(i,n)=>$t(e,i,n)),t("basket_make",{name:{type:"string",description:"Basket name, up to 64 letters, digits, spaces and . _ + - characters. It is permanent."},symbol:{type:"string",description:"Basket symbol, up to 20 letters, digits and . + - characters, not starting with ts. It is permanent."},tokens:{type:"array",minItems:2,maxItems:8,description:"Basket constituents, 2 to 8, including USDG or WETH. Weights must total 10000 basis points.",items:{type:"object",properties:{token:L("constituent token"),weightBps:Ut(9900,"All weights must total 10000.")},required:["token","weightBps"],additionalProperties:!1}},swapFeeBps:Gt,amount:N('First deposit in base units of the payWith token (use its decimals). Example: "25000000" = 25 USDG (6 decimals); the USDG minimum is 25 USDG.'),payWith:L("token paying the first deposit, USDG or WETH; defaults to USDG"),minAmountOut:N("Minimum basket pool tokens to receive, in base units of the new basket pool token (use its decimals). Must be greater than 1."),slippageBps:ve("100")},["name","symbol","tokens","amount","minAmountOut"],(i,n)=>It(e,i,n)),t("vault_deposit",{vault:L("pinned official agent vault"),amount:N(`${B.amount("USDG",6,"25000000")} Must meet the vault minimum and fit its remaining capacity.`),minShares:N('Minimum vault shares to receive, in vault share base units (12 decimals). Example: "1000000000000" = 1 share. Must be greater than 1.'),slippageBps:ve("100")},["vault","amount","minShares"],(i,n)=>Kn(e,i,n)),t("vault_cancel_deposit",{vault:L("pinned official agent vault"),id:ot("pending deposit request to cancel")},["vault","id"],(i,n)=>Wn(e,i,n)),t("vault_withdraw",{vault:L("pinned official agent vault"),shares:N('Vault shares to redeem, in vault share base units (12 decimals). Example: "1000000000000" = 1 share.'),mode:{enum:["usdg","in-kind"],description:B.enumValues({usdg:"receive USDG only","in-kind":"receive both USDG and the vault pool token"})},minUsdg:N('Minimum USDG to receive, in base units of USDG (USDG has 6 decimals). Example: "1000000" = 1 USDG.'),minToken:N("In-kind only, required there: minimum vault pool token to receive, in base units of that token (use its decimals). Not allowed for mode usdg."),slippageBps:ve("100")},["vault","shares","mode","minUsdg"],(i,n)=>Yn(e,i,n)),...["buy","sell"].map(i=>t(`basket_${i}`,{basket:L("basket pool"),token:L(i==="buy"?"token paying for the basket: USDG (default), WETH or a basket constituent":"token received for the basket: USDG (default), WETH or a basket constituent"),amount:N(i==="buy"?'Amount of the payment token in base units (use its decimals). Example: "10000000" = 10 USDG (6 decimals).':'Amount of basket pool tokens to sell, in base units (18 decimals). Example: "1000000000000000000" = 1 basket token.'),minAmountOut:N(i==="buy"?"Minimum basket pool tokens to receive, in base units (18 decimals). Must be greater than 1.":"Minimum amount of the received token, in base units (use its decimals). Must be greater than 1."),slippageBps:ve("100")},["basket","amount","minAmountOut"],(n,s)=>Qn(e,n,s,i)))]}var q={api:G,readResult:W,slippage:Te,minimum:we,exactCall:Ae,exactApproval:ut,account:Qt};var ti="https://api.tickerspring.com",me=He[E].tickerSpring.limitOrderHook.address,oe={address:Zn(He[E].tokens.USDG.address),symbol:"USDG",decimals:be,chainId:E},Jt=10000000n,Zt="(bytes32 pool,int24 lower,bool sell0,address inputToken,uint128 maximumInput,uint128 maximumCorrectionInput,uint256 minimumFullOutput,uint16 maximumFeeBps,uint64 deadline)",je=ei([`function create(${Zt} params)`,`function createMarketOrder(${Zt} params,address token,uint160 initialPrice,uint160 minimumPrice,uint160 maximumPrice)`,"function cancel(uint256 id,uint256 min0,uint256 min1,uint64 deadline,uint8 deliveryMask)","function claimBoth(uint256 id)"]),Fe={type:"string",pattern:"^\\d+$"},ni={type:"string",pattern:"^[a-z0-9][a-z0-9._-]{0,39}$",description:"Optional label of 1 to 40 lowercase letters, digits, dots, underscores or hyphens, sent to TickerSpring to attribute this action to an agent."};function j(e){return bt(e)?e:O()}function O(){throw new f("TickerSpring returned an incomplete or inconsistent response.")}function J(e){return(typeof e!="string"||!e.trim())&&O(),e}function qe(e){return ht(e,"Provide a valid token or wallet address.",gt)}function ne(e){if(typeof e!="string")throw new f("Amount must be a non-negative integer string in base units.");return ft(e),e}function de(e){let t=ne(e);if(BigInt(t)<=0n)throw new f("The amount must be positive.");return t}function pt(e){let t=typeof e=="number"&&Number.isFinite(e)?String(e):e;if(typeof t!="string"||!/^\d+(\.\d+)?$/.test(t)||!/[1-9]/.test(t))throw new f("TickerSpring requires a positive decimal price in USDG per token.");return t}function dt(e){let t=j(e);return(typeof t.decimals!="number"||!Number.isInteger(t.decimals)||t.decimals<0||t.decimals>255||t.chainId!==void 0&&t.chainId!==E)&&O(),{address:qe(t.address),symbol:J(t.symbol),decimals:t.decimals,chainId:E}}function Le(e){let t=de(e);if(BigInt(t)<=BigInt(Math.floor(Date.now()/1e3)))throw new f("The prepared TickerSpring order has expired. Prepare it again.");return t}function Ne(e,t){if(Object.keys(e).some(i=>!t.includes(i)))throw new f("Provide only the documented TickerSpring inputs.")}function lt(e){if(e.agentTag===void 0)return{};if(typeof e.agentTag!="string"||!/^[a-z0-9][a-z0-9._-]{0,39}$/.test(e.agentTag))throw new f("Use an agentTag of 1 to 40 lowercase letters, digits, dots, underscores or hyphens.");return{agentTag:e.agentTag}}async function De(e,t,i){let n=await le(e.http,`${ti}${t}`,{method:i?"POST":"GET",headers:{"Content-Type":"application/json","User-Agent":"Oak-TickerSpring/1.0"},...i?{body:JSON.stringify(i)}:{}},s=>!!s&&typeof s=="object"&&!Array.isArray(s));return j(n.data)}function mt(e,t,i,n){let s=j(t.bundle),r=j(t.walletSendCalls);(s.kind!==n||s.chainId!==E||!c(s.owner,i)||r.chainId!=="0x1237"||!c(r.from,i)||!Array.isArray(s.steps)||!s.steps.length||!Array.isArray(r.calls)||r.calls.length!==s.steps.length)&&O();let u=J(s.expiresAt);if(!Number.isFinite(Date.parse(u))||Date.parse(u)<=Date.now())throw new f("The prepared TickerSpring bundle has expired. Prepare it again.");let o=s.steps.map((p,l)=>{let d=j(p),h=j(r.calls[l]);return(d.n!==l+1||d.kind!=="approve"&&d.kind!=="call"||d.from!==void 0&&!c(d.from,i)||d.chainId!==void 0&&d.chainId!==E||!c(h.to,J(d.to))||h.data!==d.data||d.value!=="0"||h.value!=="0x0")&&O(),e.unsignedTx({to:qe(d.to),data:J(d.data),value:ne(d.value),chainId:E,description:J(d.label)})});return{bundle:s,txs:o,expiresAt:u}}async function Re(e,t,i,n={},s){let{bundle:r,txs:u,expiresAt:o}=t,p=await e.preview(u,i);if(Date.parse(o)<=Date.now())throw new f("The prepared TickerSpring bundle expired during preview. Prepare it again.");n.deadline!==void 0&&Le(n.deadline);let l=p.changes.map(({token:k,amount:b})=>{let y=b.startsWith("-");return`${y?"-":""}${e.formatAmount(y?b.slice(1):b,k.decimals)} ${k.symbol} (${k.address}, chain ${k.chainId})`});(!Array.isArray(r.warnings)||!r.warnings.every(k=>typeof k=="string"))&&O();let d=r.simulation===void 0?void 0:j(r.simulation),h=d?.ok===!1?`API simulation: ${J(d.error)}.`:"";return{txs:u,from:i,expiresAt:o,...n,preview:p,summary:[J(r.summary),s??"Protocol minimum: 10 USDG. Fill fee: 2.5% of received tokens; no placement or unfilled cancellation fee. Filled proceeds require tickerspring_claim (claimBoth).","No transaction has been sent.",...r.warnings,h,p.summary,...l].filter(Boolean).join(" ")}}async function nn(e,t,i){Ne(t,["token","side","amount","price","slippageBps","minAmountOut","startingPrice","agentTag"]);let n=lt(t),s=qe(t.token),r=de(t.amount),u=pt(J(t.price)),o=t.slippageBps===void 0?500:t.slippageBps;if(xe("1",o),o<500)throw new f(`TickerSpring provider minimum slippage is 500 bps (5%); requested ${o} bps. Use slippageBps: 500 (or omit it) to accept that floor. Oak will not increase your slippage automatically.`);let p=t.minAmountOut===void 0?0n:BigInt(de(t.minAmountOut));if(t.minAmountOut!==void 0&&p<=1n)throw new f("The minimum output amount must be greater than 1 base unit.");if(t.side!=="buy"&&t.side!=="sell")throw new f("Choose buy or sell for the limit order.");if(t.side==="buy"&&BigInt(r)<Jt)throw new f("TickerSpring orders require at least 10 USDG.");let l=await De(e,"/v1/tokens");Array.isArray(l.tokens)||O();let d=l.tokens.map(j).filter(m=>c(m.address,s)&&(m.chainId===void 0||m.chainId===E));if(d.length!==1)throw new f("TickerSpring did not return a unique token for that address on chain 4663.");let h=d[0],k=dt(h);if(c(k.address,oe.address))throw new f("Choose the order token paired with USDG.");let b=j(h.markets);typeof b.limitOrders!="boolean"&&O();let y=t.side==="buy"?oe:k,w=t.side==="buy"?k:oe;if(t.side==="sell"){let m=BigInt(ie(u,18,"floor"));if(BigInt(r)*m*10n**BigInt(be)/(10n**BigInt(k.decimals)*10n**18n)<Jt)throw new f("TickerSpring orders require at least 10 USDG at the limit price.")}if(b.limitOrders&&t.startingPrice!==void 0)throw new f("startingPrice is only used to open a new limit market.");let x=b.limitOrders?void 0:pt(t.startingPrice===void 0?h.priceUsd:J(t.startingPrice)),C=await De(e,"/v1/agent/prepare/limit-order",{owner:i,...n,token:s,side:t.side,price:u,amount:e.formatAmount(r,y.decimals),...x===void 0?{}:{startingPrice:x}}),D=an(e,i,C,{amount:r,limitPrice:u,slippageBps:o,callerMinOut:p,marketToken:k,inputToken:y,outputToken:w,markets:b,startingPrice:x});return Re(e,D.p,i,D.details)}function an(e,t,i,n){let{amount:s,limitPrice:r,slippageBps:u,callerMinOut:o,marketToken:p,inputToken:l,outputToken:d,markets:h}=n,k=mt(e,i,t,"limit-order"),b=j(k.bundle.params),y=j(b.create),w=Le(y.deadline),x=de(y.minimumFullOutput);(!c(b.hook,me)||!c(y.inputToken,l.address)||ne(y.maximumInput)!==s||y.maximumFeeBps!==250||typeof y.sell0!="boolean"||typeof y.lower!="number"||!Number.isInteger(y.lower)||typeof y.pool!="string"||!/^0x[0-9a-fA-F]{64}$/.test(y.pool)||BigInt(ne(y.maximumCorrectionInput))>BigInt(s))&&O(),c(y.pool,Ye.poolFor(p.address,me))||O();let C=BigInt(l.address)<BigInt(d.address);y.sell0!==C&&O();let D=BigInt(s)*9750n/10000n,m=BigInt(ie(r,18,"floor")),v=c(l.address,oe.address)?m>0n?D*10n**BigInt(p.decimals)*10n**18n/(10n**BigInt(be)*m):0n:D*m*10n**BigInt(be)/(10n**BigInt(p.decimals)*10n**18n),T=BigInt(xe(v.toString(),u)),P=Be(y.lower),R=P*P,V=1n<<192n,I=R>0n?y.sell0?D*R/V:D*V/R:0n,$=p.decimals===18?BigInt(xe(I.toString(),u)):T,F=[o,T,$].reduce((z,Y)=>z>Y?z:Y,0n);if(BigInt(x)<=1n||BigInt(x)<F)throw new f("TickerSpring minimum output is below the quoted slippage minimum.");let M={pool:y.pool,lower:y.lower,sell0:y.sell0,inputToken:l.address,maximumInput:BigInt(s),maximumCorrectionInput:BigInt(ne(y.maximumCorrectionInput)),minimumFullOutput:BigInt(x),maximumFeeBps:250,deadline:BigInt(w)},Z;if(h.limitOrders)Z=Me({abi:je,functionName:"create",args:[M]});else{let z=j(b.market);c(z.token,p.address)||O();let Y=BigInt(de(z.initialPrice)),Ge=BigInt(de(z.minimumPrice)),$e=BigInt(de(z.maximumPrice));(Y<Ge||Y>$e)&&O(),n.startingPrice!==void 0&&Ye.checkInitialization(Y,Ge,$e,n.startingPrice,p),Z=Me({abi:je,functionName:"createMarketOrder",args:[M,p.address,Y,Ge,$e]})}if((!Array.isArray(b.approvals)||b.approvals.length>1||k.txs.length!==b.approvals.length+1)&&O(),b.approvals.length){let z=j(b.approvals[0]),Y=Me({abi:Jn,functionName:"approve",args:[me,BigInt(s)]});(!c(z.token,l.address)||!c(z.spender,me)||ne(z.amount)!==s||!c(k.txs[0].to,l.address)||!U(k.txs[0].data,Y))&&O()}let H=k.txs.at(-1);return(!c(H.to,me)||!U(H.data,Z))&&O(),{p:k,details:{input:{token:l,amount:s},minimumOutput:{token:d,amount:x},deadline:w,...n.startingPrice===void 0?{}:{startingPrice:n.startingPrice}}}}async function en(e,t,i,n){Ne(t,["id","agentTag"]);let s=lt(t),r=ne(t.id),u=await De(e,"/v1/agent/prepare/order-action",{owner:i,id:r,action:n,...s}),o=mt(e,u,i,"order-action");(o.txs.length!==1||!c(o.txs[0].to,me))&&O();let p=Xn({abi:je,data:o.txs[0].data});if((p.functionName!==n||p.args[0]!==BigInt(r))&&O(),p.functionName==="cancel"){let[,l,d,h,k]=p.args;if(Le(h.toString()),l+d===0n||k!==3)throw new f("TickerSpring returned a cancellation without protected amounts or both token deliveries. Prepare it again.");return Re(e,o,i,{id:r,deadline:h.toString()})}return U(o.txs[0].data,Me({abi:je,functionName:"claimBoth",args:[BigInt(r)]}))||O(),Re(e,o,i,{id:r})}async function tn(e,t){let i=await De(e,`/v1/agent/accounts/${t}`);if(!c(i.owner,t)||i.limitOrdersComplete!==!0||!Array.isArray(i.limitOrders)||!Array.isArray(i.unavailable)||i.unavailable.length)throw new f("TickerSpring could not return the complete order list for this wallet.");let n=J(i.asOf);Number.isFinite(Date.parse(n))||O();let s=new Set,r=i.limitOrders.map(u=>{let o=j(u),p=j(o.order),l=dt(o.token);(!c(o.hook,me)||!c(p.owner,t)||o.side!=="buy"&&o.side!=="sell"||c(l.address,oe.address)||o.feeBps!==250)&&O();let d=ne(o.id);s.has(d)&&O(),s.add(d);let h=BigInt(l.address)<BigInt(oe.address)?[l,oe]:[oe,l],k=j(o.claimable);return{id:d,status:J(o.status),side:o.side,chainId:E,feeBps:250,input:{token:o.side==="buy"?oe:l,amount:ne(p.debit)},claimable:h.map((b,y)=>({token:b,amount:ne(k[y===0?"net0":"net1"])}))}});return{owner:t,chainId:E,asOf:n,orders:r}}var ii=e=>{let t=n=>async s=>{try{return kt(s),await n(s)}catch(r){throw new f(e.plainError(r))}},i=(n,s,r,u)=>({name:`tickerspring_${n}`,inputSchema:{type:"object",properties:{...s,...["create","cancel","claim"].includes(n)?{agentTag:ni}:{}},required:r,additionalProperties:!1},execute:(o,p)=>t(l=>u(o,l))(p)});return{tools:[...Xt(e),i("create",{token:{...ue,description:B.address("token traded against USDG")},side:{type:"string",enum:["buy","sell"],description:B.enumValues({buy:"spend USDG to buy the token",sell:"sell the token for USDG"})},amount:{...Fe,description:"Base units of USDG for buys, or the selected token for sells."},price:{type:"string",pattern:"^\\d+(\\.\\d+)?$",description:"Limit price in USDG per whole token."},startingPrice:{type:"string",description:"Optional explicit starting price for a new market, in USDG per whole token."},slippageBps:{type:"integer",minimum:0,maximum:9999,description:"Provider minimum and default: 500 bps (5%). Values below 500 cannot be prepared. Oak never raises the requested slippage."},minAmountOut:{...Fe,description:"Optional caller minimum output in base units."}},["token","side","amount","price"],(n,s)=>nn(e,n,s)),i("cancel",{id:{...Fe,description:B.id("limit order to cancel")}},["id"],(n,s)=>en(e,n,s,"cancel")),i("claim",{id:{...Fe,description:B.id("limit order to claim proceeds from")}},["id"],(n,s)=>en(e,n,s,"claimBoth")),i("orders",{},[],(n,s)=>(Ne(n,[]),tn(e,s)))],positions:t(async n=>(await tn(e,n)).orders.map(r=>({module:"tickerspring",id:r.id,chainId:E,assets:r.claimable,economics:{principal:r.status==="filled"?[]:[wt("redeemable",{token:r.input.token,amount:null,source:"tickerspring.input",unknownReason:`TickerSpring reports the original input (${e.formatAmount(r.input.amount,r.input.token.decimals)} ${r.input.token.symbol}), not the unfilled remainder.`})],debt:[],backing:[],coverage:{complete:!0},rewards:r.claimable.filter(u=>BigInt(u.amount)>0n).map(u=>Tt("claimable",{...u,source:"tickerspring.claimable",claim:{tool:"tickerspring_claim",args:{id:r.id}}}))},description:`${r.side} order ${r.id}: ${r.status}; assets are claimable amounts only. Original input: ${e.formatAmount(r.input.amount,r.input.token.decimals)} ${r.input.token.symbol} (${r.input.token.address}). Fill fee 2.5%; use tickerspring_claim for proceeds.`})))}},za=e=>vt("tickerspring",[ii(e)]),a={attribution:lt,object:j,text:J,address:qe,integer:ne,positive:de,token:dt,price:pt,futureDeadline:Le,inputs:Ne,request:De,prepared:mt,result:Re,create:nn,validateOrder:an};var yt={address:sn(A.contracts.usdg),symbol:"USDG",decimals:6,chainId:E},Ue=sn(A.contracts.limitOrderHook);async function $t(e,t,i){a.inputs(t,["token","side","levels","slippageBps","agentTag"]);let n=a.address(t.token);if(t.side!=="buy"&&t.side!=="sell")throw new f("Choose buy or sell for the limit-order ladder.");if(!Array.isArray(t.levels)||t.levels.length<2||t.levels.length>20)throw new f("Provide 2 to 20 independent limit-order levels.");let s=t.slippageBps===void 0?500:t.slippageBps;if(typeof s!="number"||!Number.isInteger(s)||s<0||s>9999)throw new f("Use slippageBps from 0 to 9999.");let r=await a.request(e,"/v1/tokens");if(!Array.isArray(r.tokens))throw new f("TickerSpring token list is unavailable.");let u=r.tokens.map(a.object).filter(D=>c(D.address,n));if(u.length!==1)throw new f("Use a unique TickerSpring token address on chain 4663.");let o=u[0],p=a.token(o);if(c(p.address,yt.address))throw new f("Choose a ladder token paired with USDG.");let l=a.object(o.markets);if(l.limitOrders!==!0)throw new f("Open this token market with an authorized tickerspring_create first; the published ladder schema does not accept startingPrice.");let d=t.side==="buy"?yt:p,h=t.side==="buy"?p:yt,k=t.levels.map(D=>{let m=a.object(D);a.inputs(m,["price","amount","minAmountOut"]);let v=a.price(a.text(m.price)),T=a.positive(m.amount),P=a.positive(m.minAmountOut);if((t.side==="buy"?BigInt(T):BigInt(T)*BigInt(ie(v,18,"floor"))*10n**6n/(10n**BigInt(p.decimals)*10n**18n))<10000000n)throw new f("Each TickerSpring ladder level requires at least 10 USDG at its limit price.");return{price:v,amount:T,minAmountOut:P}}),b=a.prepared(e,await a.request(e,"/v1/agent/prepare/ladder",{owner:i,...a.attribution(t),token:n,side:t.side,orders:k.map(D=>({price:D.price,amount:e.formatAmount(D.amount,d.decimals)}))}),i,"ladder"),y=a.object(b.bundle.params);if(!c(y.hook,Ue)||!Array.isArray(y.orders)||y.orders.length!==k.length||!Array.isArray(y.approvals)||y.approvals.length>1)throw new f("TickerSpring returned an inconsistent limit-order ladder.");let w=y.approvals;if(b.txs.length!==k.length+w.length)throw new f("TickerSpring ladder contains unexpected transaction steps.");let x=k.reduce((D,m)=>D+BigInt(m.amount),0n).toString();if(w.length){let D=a.object(w[0]),m=b.txs[0];if(!c(D.token,d.address)||!c(D.spender,Ue)||a.integer(D.amount)!==x||!c(m.to,d.address)||!U(m.data,ai({abi:si,functionName:"approve",args:[Ue,BigInt(x)]})))throw new f("TickerSpring ladder approval must equal the sum of the level inputs.")}let C=k.map((D,m)=>{let v=a.object(y.orders[m]),T=b.txs[m+w.length];return a.validateOrder(e,i,{bundle:{...b.bundle,kind:"limit-order",params:{...v,hook:Ue,approvals:[]},steps:[{n:1,kind:"call",to:T.to,data:T.data,value:"0",label:T.description}]},walletSendCalls:{chainId:"0x1237",from:i,calls:[{to:T.to,data:T.data,value:"0x0"}]}},{amount:D.amount,limitPrice:D.price,slippageBps:s,callerMinOut:BigInt(D.minAmountOut),marketToken:p,inputToken:d,outputToken:h,markets:l}).details});return a.result(e,b,i,{input:{token:d,amount:x},levels:C,deadline:C.reduce((D,m)=>BigInt(m.deadline)<BigInt(D)?m.deadline:D,C[0].deadline)},"Limit-order ladder: one exact approval covers independent orders. Confirm every level. Record each mined order ID and manage each with tickerspring_orders, tickerspring_cancel and tickerspring_claim. A batch may execute only some steps. Fill fee 2.5%.")}export{A as a,K as b,$t as c,Bt as d,Ye as e,It as f,Ct as g,fe as h,Pt as i,jt as j,Pn as k,_n as l,Nt as m,Xt as n,q as o,ii as p,za as q,a as r,Se as s};
1
+ import{a as ze,b as Ve}from"./L4UFGM7M.js";import{a as B}from"./G2LAO23N.js";import{h as wt,j as Tt}from"./2GXHYI23.js";import{m as Be}from"./IR7KDBFU.js";import{o as xe}from"./TTBB6EFN.js";import{b as vt}from"./SPJCSEKP.js";import{a as kt}from"./43LI5NKJ.js";import{c as le}from"./SCG5HWMN.js";import{c as ue,d as gt,e as bt,g as U,h as c,i as ht}from"./NWNYJ26T.js";import{b as ft,c as ie}from"./IX3GZMTM.js";import{b as E,e as be,j as He}from"./EWZFZUVF.js";import{a as f}from"./XSD5NL7J.js";import{encodeFunctionData as ai,erc20Abi as si,getAddress as sn}from"viem";import{decodeFunctionData as Xn,encodeFunctionData as Me,erc20Abi as Jn,getAddress as Zn,parseAbi as ei}from"viem";import{decodeEventLog as Fn,decodeFunctionData as Mn,parseAbi as rt,encodeFunctionData as Ht,erc20Abi as jn,getAddress as X}from"viem";var A={source:"https://api.tickerspring.com/v1/agent/policies/privy",vaultSource:"https://api.tickerspring.com/v1/agent/vaults",basketSource:"https://api.tickerspring.com/v1/baskets",capturedAt:"2026-10-31T03:10:17Z",chainId:4663,contracts:{usdg:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",vaults:["0x130b086145C396Ac5453040F18542A21c89813f9","0x181AeCD2D273ecC4ab211f13cae3b64FdD1e4733","0xBE6DE4e132Faa7E4e89c2a3805C1438eE12ae8f5","0xa588983D0491E39DbC9417FA6Bc1542AfD7D2b8E","0x61a16A50c874b78499c70f6C29FFb9530c6041A4","0x49744dA1ddd5E6bF4d4DAae6D0e1DfB73e0eb6d6","0x51285aB74c2DE9dADbC88F6f4AFA26Af0D0cC0f6","0xB262ee0991cdd4816D7B6DA66CFdA1D05570FE5C","0x392e415aa3b93A9c496862492Fcb91AbD13064c3","0x9E42357D8D7758C43f3128317D5250147ddEBeB4","0xBF9A2c2E3FFa482c431Fca03294a2dDaf245C626","0x4A61E1eCC02087B76aD9ADd0c2b0A296c243A913","0x7Bd34332118501ae1931fee1a383F575C4300c16","0xdC8B5B786dF3d0795482D6f17148B2eCc97dA54c","0x501B1d9F8b41A0De99F97d66A680db354fF6e175","0x94B6a40E7eB2c6D5d461Da2813B742A29ee433b3","0xf812dB8bF84458F32D59B3CEEb74163649a866Fe","0x8099EBBEC19e90E16B221E035b68d24443b12337","0x0B3114D0CBc41006427faF907eDeEf4B83131956","0x815fD45b8c8655cCe07A01393A9DD8902A72c841","0x06d33b614B52f52aE9bc6B95A536127587C882a3","0x46550A2f5D3b036138513ECbB9B667545624fe1a","0xd85973D408d7b7915317E6dD0eB9dc4cDd807939","0xdaC912a99A051899E643882f7cF17258c9708468","0xd87A50AfDd0B115fEAd95F8f10062F831c8FbD5e","0x168F05e080435bd4d86E7FE0e2CEaAc9723F261B","0x179CCA533CBF695a5D13BdEB31E39a3c569e8132","0xD6F6EFDF8F7Ab578329bfe57fedb042ad7bA8eF8","0xF3ac151dE45D9AB81851F928ACf0BB3A991345c8","0x7dfA9e9C1661961e45AcF50B22aeDc992676D5a1","0x97dE2e796307b6746f5cCB8385e07EE6674AFB4a"],redeemQueue:null,limitOrderHook:"0xa31729621a2280C0Ff9Aaff5B3F357cFF1bEC040",gridStrategy:"0xd597785134307B5324f469A9506066fAd4827730",ladderStrategy:"0x23c7906D8fa3ede698A00AbE66D28605A41b4177",basketZap:"0xFca65c50325b83F8f1E07cD103c00De0cEa4Fb39"},vaults:[{address:"0x130b086145C396Ac5453040F18542A21c89813f9",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x181AeCD2D273ecC4ab211f13cae3b64FdD1e4733",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xBE6DE4e132Faa7E4e89c2a3805C1438eE12ae8f5",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xa588983D0491E39DbC9417FA6Bc1542AfD7D2b8E",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x61a16A50c874b78499c70f6C29FFb9530c6041A4",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x49744dA1ddd5E6bF4d4DAae6D0e1DfB73e0eb6d6",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x51285aB74c2DE9dADbC88F6f4AFA26Af0D0cC0f6",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xB262ee0991cdd4816D7B6DA66CFdA1D05570FE5C",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x392e415aa3b93A9c496862492Fcb91AbD13064c3",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x9E42357D8D7758C43f3128317D5250147ddEBeB4",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xBF9A2c2E3FFa482c431Fca03294a2dDaf245C626",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x4A61E1eCC02087B76aD9ADd0c2b0A296c243A913",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x7Bd34332118501ae1931fee1a383F575C4300c16",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xdC8B5B786dF3d0795482D6f17148B2eCc97dA54c",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x501B1d9F8b41A0De99F97d66A680db354fF6e175",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x94B6a40E7eB2c6D5d461Da2813B742A29ee433b3",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xf812dB8bF84458F32D59B3CEEb74163649a866Fe",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x8099EBBEC19e90E16B221E035b68d24443b12337",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x0B3114D0CBc41006427faF907eDeEf4B83131956",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x815fD45b8c8655cCe07A01393A9DD8902A72c841",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x06d33b614B52f52aE9bc6B95A536127587C882a3",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x46550A2f5D3b036138513ECbB9B667545624fe1a",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xd85973D408d7b7915317E6dD0eB9dc4cDd807939",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xdaC912a99A051899E643882f7cF17258c9708468",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xd87A50AfDd0B115fEAd95F8f10062F831c8FbD5e",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x168F05e080435bd4d86E7FE0e2CEaAc9723F261B",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x179CCA533CBF695a5D13BdEB31E39a3c569e8132",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xD6F6EFDF8F7Ab578329bfe57fedb042ad7bA8eF8",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0xF3ac151dE45D9AB81851F928ACf0BB3A991345c8",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x7dfA9e9C1661961e45AcF50B22aeDc992676D5a1",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"},{address:"0x97dE2e796307b6746f5cCB8385e07EE6674AFB4a",release:"0x5827891fb46885479de398de97fd0a192af3be5bc14cdb72d7ccf447994ce2df"}],baskets:[{pool:"0xAa8cCd98dAe71D19A44330133134E58e47723D63",tokens:[{address:"0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73",symbol:"WETH",decimals:18},{address:"0x440e339a46eaa3bE8d723c2cBED2A30af74536D5",symbol:"SPRING",decimals:18},{address:"0xAa07A0e9209e16aC99708C3EC70159c6eF3128A3",symbol:"ORBIO",decimals:18},{address:"0xe8ffd7e24187F72afB08d75B1bb13088A989a791",symbol:"DELTA",decimals:18},{address:"0xeDBf91223639800BCd5756815CAf908Df3b890bE",symbol:"PRIORS",decimals:18}]},{pool:"0xFfa3ce39C1fe253F1b59AE29F450a0cF86f43a0d",tokens:[{address:"0x156E175DD063a8cE274C50654eF40e0032b3fbcF",symbol:"AVGO",decimals:18},{address:"0x58FfE4a942d3885bAa22D7520691F611EF09e7AA",symbol:"TSM",decimals:18},{address:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",symbol:"USDG",decimals:6},{address:"0x86923f96303D656E4aa86D9d42D1e57ad2023fdC",symbol:"AMD",decimals:18},{address:"0xB90A19fF0Af67f7779afF50A882A9CfF42446400",symbol:"SNDK",decimals:18},{address:"0xc72b96e0E48ecd4DC75E1e45396e26300BC39681",symbol:"INTC",decimals:18},{address:"0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC",symbol:"NVDA",decimals:18},{address:"0xfF080c8ce2E5feadaCa0Da81314Ae59D232d4afD",symbol:"MU",decimals:18}]},{pool:"0xe4865D555D673d7e1C542604bd242885156Cc2Fc",tokens:[{address:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",symbol:"USDG",decimals:6},{address:"0x92FD66527192E3e61d4DDd13322Aa222DE86F9B5",symbol:"SGOV",decimals:18},{address:"0xC9a981FEE1F9DEc688bb123ccDeCc63D0deBFC4e",symbol:"GLD",decimals:18},{address:"0xD5f3879160bc7c32ebb4dC785F8a4F505888de68",symbol:"QQQ",decimals:18}]},{pool:"0xD5f27E9156D817AbC3D6da89dbCE74D149BE3abA",tokens:[{address:"0x03DfbBE0AC4E7bCDaFd08eD41A400326B77D8c80",symbol:"JNJ",decimals:18},{address:"0x43B07D15cE533bEc5476d70C22a78a1B2B662155",symbol:"MRNA",decimals:18},{address:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",symbol:"USDG",decimals:6},{address:"0x7066A64c24e4206CD62E83bf198c1E7EB361F51e",symbol:"PFE",decimals:18},{address:"0x8005d266423c7ea827372c9c864491e5786600ea",symbol:"LLY",decimals:18}]},{pool:"0x2cF375A3466E511a1B951D8cA7E70e82066161F6",tokens:[{address:"0x03DfbBE0AC4E7bCDaFd08eD41A400326B77D8c80",symbol:"JNJ",decimals:18},{address:"0x411eFb0E7f985935DAec3D4C3ebaEa0d0AD7D89f",symbol:"SLV",decimals:18},{address:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",symbol:"USDG",decimals:6},{address:"0x7066A64c24e4206CD62E83bf198c1E7EB361F51e",symbol:"PFE",decimals:18},{address:"0x8005d266423c7ea827372c9c864491e5786600ea",symbol:"LLY",decimals:18},{address:"0xa30FA36Db767ad9eD3f7a60fC79526fB4d56D344",symbol:"USO",decimals:18},{address:"0xC9a981FEE1F9DEc688bb123ccDeCc63D0deBFC4e",symbol:"GLD",decimals:18}]},{pool:"0x4e2eb08E43f0A16e8A779521A91dE5c3773227c9",tokens:[{address:"0x03DfbBE0AC4E7bCDaFd08eD41A400326B77D8c80",symbol:"JNJ",decimals:18},{address:"0x58FfE4a942d3885bAa22D7520691F611EF09e7AA",symbol:"TSM",decimals:18},{address:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",symbol:"USDG",decimals:6},{address:"0x8005d266423c7ea827372c9c864491e5786600ea",symbol:"LLY",decimals:18},{address:"0x86923f96303D656E4aa86D9d42D1e57ad2023fdC",symbol:"AMD",decimals:18},{address:"0xa30FA36Db767ad9eD3f7a60fC79526fB4d56D344",symbol:"USO",decimals:18},{address:"0xC9a981FEE1F9DEc688bb123ccDeCc63D0deBFC4e",symbol:"GLD",decimals:18},{address:"0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC",symbol:"NVDA",decimals:18}]},{pool:"0x96a0Ce238e2C4ceB83d90Da264344905558e7F6b",tokens:[{address:"0x18E674231A58c239Dc7DaeDcffE15Ec3A24cff5c",symbol:"HOOKR",decimals:18},{address:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",symbol:"USDG",decimals:6},{address:"0xb8Fa8010833463Aac5595b55B9045479239EfF79",symbol:"WTH",decimals:18},{address:"0xC60bA256B44334A0Cd2C7242E98B88f031abB006",symbol:"V4",decimals:18}]},{pool:"0x99a04F81bF36FC776394f9c7CdE088620Edef922",tokens:[{address:"0x020bfC650A365f8BB26819deAAbF3E21291018b4",symbol:"CASHCAT",decimals:18},{address:"0x1b0E319c6A659F002271B69dB8A7df2F911c153E",symbol:"GME",decimals:18},{address:"0x39dBED3a2bd333467115dE45665cC57F813C4571",symbol:"PONS",decimals:18},{address:"0x440e339a46eaa3bE8d723c2cBED2A30af74536D5",symbol:"SPRING",decimals:18},{address:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",symbol:"USDG",decimals:6},{address:"0xe934e36A439C94017B64a3FecE66AF12099aBF50",symbol:"STONKBROKER",decimals:18},{address:"0xec262a75e413fAfD0dF80480274532C79D42da09",symbol:"MSTR",decimals:18},{address:"0xed6A144a9B4269F4474d2Cb042DB78C1C0711092",symbol:"TSUKI",decimals:18}]},{pool:"0x6E0F95CB18f1a3e2a0996EcdEf5a84185062ACFb",tokens:[{address:"0x000050E18ffa3F8F7aD170Eb9CeF160eb3Ed1111",symbol:"TORCH",decimals:18},{address:"0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73",symbol:"WETH",decimals:18},{address:"0x39dBED3a2bd333467115dE45665cC57F813C4571",symbol:"PONS",decimals:18},{address:"0xe934e36A439C94017B64a3FecE66AF12099aBF50",symbol:"STONKBROKER",decimals:18}]},{pool:"0xC72b8896171B30220807387A7597699c372Bf21B",tokens:[{address:"0x03DfbBE0AC4E7bCDaFd08eD41A400326B77D8c80",symbol:"JNJ",decimals:18},{address:"0x411eFb0E7f985935DAec3D4C3ebaEa0d0AD7D89f",symbol:"SLV",decimals:18},{address:"0x440e339a46eaa3bE8d723c2cBED2A30af74536D5",symbol:"SPRING",decimals:18},{address:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",symbol:"USDG",decimals:6},{address:"0x8005d266423c7ea827372c9c864491e5786600ea",symbol:"LLY",decimals:18},{address:"0x92FD66527192E3e61d4DDd13322Aa222DE86F9B5",symbol:"SGOV",decimals:18},{address:"0xC9a981FEE1F9DEc688bb123ccDeCc63D0deBFC4e",symbol:"GLD",decimals:18},{address:"0xD5f3879160bc7c32ebb4dC785F8a4F505888de68",symbol:"QQQ",decimals:18}]}],basketConfigSource:"https://api.tickerspring.com/v1/baskets/config",basketConfig:{chainId:4663,vault:"0xb01B26D72EB3a5d7846C36fc21e4e3B96994DaF2",vaultFactory:"0x5ebc5dFf360BDB8aFB6d86FA697Cb5F0C9E5E47F",router:"0x5907F6b9E27c351fF567aa6689EBA63AC97141ca",batchRouter:"0xE8381Ba38eb8166413e0FeA07C82F882eA2bA717",aggregatorRouter:"0x4B397cEEB022E32b6C3215b44259896f8dC79608",weightedPoolFactory:"0x9400a5BBdcAF5564cEb86185d07321cAefB65B41",protocolFeeController:"0x093011359d26df42608C568eff941dd59cd5401B",authorizer:"0x6C7cBD9b4C8A5ceFbc1d3440042Cba58AE8010Ab",executor:"0x39Db9BBb52af391a2b73F0f076f7D3a21E1123cb",zap:"0x81C1ad6f320462F035Fb31D6B173d2372506c5F0",permit2:"0x000000000022D473030F116dDEE9F6B43aC78BA3",usdg:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",weth:"0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73",basketZapEth:"0x579968b6Ef248BFFB13C1C5Cc76dC77487EC1Fd5",basketMaker:"0x5d3Af74Ac4880fD737F4bc2107d1566930Abd89d",basketZapV2:"0xFca65c50325b83F8f1E07cD103c00De0cEa4Fb39",basketZapEthV2:"0xaC104541cB106cb837704d8A641C14570c376992",basketMakerV2:"0xEF8C2341848F1E7CB25631e4bFD6f36B0C46f665",make:{swapFeesPct:[.3,1],minDepositUsd:25},nonces:{authorizer:1278,vaultFactory:1279,protocolFeeController:1280,router:1282,batchRouter:1283,aggregatorRouter:1284,weightedPoolFactory:1285,executor:1286,zap:1288}},siteAbiSources:{maker:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",gridRead:"https://tickerspring.com/_next/static/chunks/5785-74ee50b34dadbd7e.js"},strategyProfile:{source:"https://tickerspring.com/_next/static/chunks/5785-74ee50b34dadbd7e.js",hookSource:"https://tickerspring.com/_next/static/chunks/3246-ac3e0f12190e0ec5.js",hook:"0xb3d2C19158FDd8D687BF0D7e9DDc76b031354040",quote:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",poolFee:500,tickSpacing:10},blockedSwap:{source:"https://api.tickerspring.com/v1/trade",prepareSource:"https://api.tickerspring.com/v1/agent/prepare/swap",router:"0x75529402f73FF0Ddd10567A0590a69895439368D",kyberAdapter:"0x615950B8c42b77a2718BdBAA15469e1f7D2e2aF8",selector:"0xdc4e8da1",missing:"Published outer entrypoint ABI; request field names and calldata alone do not pin its signature."}};var K={vault:[{type:"function",name:"requestDeposit",inputs:[{name:"assets",type:"uint256",internalType:"uint256"},{name:"receiver",type:"address",internalType:"address"},{name:"minShares",type:"uint256",internalType:"uint256"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"nonpayable"},{type:"function",name:"redeem",inputs:[{name:"shares",type:"uint256",internalType:"uint256"},{name:"receiver",type:"address",internalType:"address"},{name:"owner_",type:"address",internalType:"address"},{name:"s",type:"tuple",internalType:"struct Vault.Swap",components:[{name:"tokenIn",type:"address",internalType:"address"},{name:"amountIn",type:"uint256",internalType:"uint256"},{name:"route",type:"bytes",internalType:"bytes"}]},{name:"minAssets",type:"uint256",internalType:"uint256"}],outputs:[{name:"assets",type:"uint256",internalType:"uint256"},{name:"tokenOut",type:"uint256",internalType:"uint256"}],stateMutability:"nonpayable"},{type:"function",name:"redeemInKind",inputs:[{name:"shares",type:"uint256",internalType:"uint256"},{name:"receiver",type:"address",internalType:"address"},{name:"owner_",type:"address",internalType:"address"},{name:"minUsdg",type:"uint256",internalType:"uint256"},{name:"minToken",type:"uint256",internalType:"uint256"}],outputs:[{name:"usdgOut",type:"uint256",internalType:"uint256"},{name:"tokenOut",type:"uint256",internalType:"uint256"}],stateMutability:"nonpayable"},{type:"function",name:"cancelDeposit",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"}],basket:[{type:"function",name:"buy",inputs:[{name:"pool",type:"address",internalType:"address"},{name:"tokenIn",type:"address",internalType:"address"},{name:"amountIn",type:"uint256",internalType:"uint256"},{name:"legs",type:"tuple[]",internalType:"struct BasketZap.Leg[]",components:[{name:"tokenIn",type:"address",internalType:"address"},{name:"tokenOut",type:"address",internalType:"address"},{name:"amountIn",type:"uint256",internalType:"uint256"},{name:"data",type:"bytes",internalType:"bytes"}]},{name:"minBptOut",type:"uint256",internalType:"uint256"},{name:"recipient",type:"address",internalType:"address"},{name:"deadline",type:"uint256",internalType:"uint256"}],outputs:[{name:"bptOut",type:"uint256",internalType:"uint256"}],stateMutability:"nonpayable"},{type:"function",name:"sell",inputs:[{name:"pool",type:"address",internalType:"address"},{name:"bptIn",type:"uint256",internalType:"uint256"},{name:"tokenOut",type:"address",internalType:"address"},{name:"legs",type:"tuple[]",internalType:"struct BasketZap.Leg[]",components:[{name:"tokenIn",type:"address",internalType:"address"},{name:"tokenOut",type:"address",internalType:"address"},{name:"amountIn",type:"uint256",internalType:"uint256"},{name:"data",type:"bytes",internalType:"bytes"}]},{name:"minOut",type:"uint256",internalType:"uint256"},{name:"recipient",type:"address",internalType:"address"},{name:"deadline",type:"uint256",internalType:"uint256"}],outputs:[{name:"amountOut",type:"uint256",internalType:"uint256"}],stateMutability:"nonpayable"}],grid:[{name:"open",type:"function",stateMutability:"nonpayable",inputs:[{type:"tuple",name:"o",components:[{type:"bytes32",name:"pool"},{type:"int24",name:"buyLower"},{type:"int24",name:"sellLower"},{type:"bool",name:"sellFirst"},{type:"bool",name:"repeat"},{type:"uint128",name:"amount"},{type:"uint16",name:"maxFeeBps"},{type:"uint64",name:"deadline"}]}],outputs:[]},{name:"openWithMarket",type:"function",stateMutability:"nonpayable",inputs:[{type:"tuple",name:"o",components:[{type:"bytes32",name:"pool"},{type:"int24",name:"buyLower"},{type:"int24",name:"sellLower"},{type:"bool",name:"sellFirst"},{type:"bool",name:"repeat"},{type:"uint128",name:"amount"},{type:"uint16",name:"maxFeeBps"},{type:"uint64",name:"deadline"}]},{type:"address",name:"token"},{type:"uint160",name:"initialPrice"},{type:"uint160",name:"minimumPrice"},{type:"uint160",name:"maximumPrice"}],outputs:[]},{name:"close",type:"function",stateMutability:"nonpayable",inputs:[{type:"uint256",name:"id"},{type:"uint256",name:"min0"},{type:"uint256",name:"min1"},{type:"uint64",name:"deadline"},{type:"uint8",name:"mask"}],outputs:[]},{name:"setRepeat",type:"function",stateMutability:"nonpayable",inputs:[{type:"uint256",name:"id"},{type:"bool",name:"repeat"}],outputs:[]},{name:"collect",type:"function",stateMutability:"nonpayable",inputs:[{type:"uint256",name:"id"},{type:"uint8",name:"mask"}],outputs:[]}],strategy:[{type:"function",name:"open",inputs:[{name:"o",type:"tuple",internalType:"struct LadderStrategy.Open",components:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"sellFirst",type:"bool",internalType:"bool"},{name:"repeat",type:"bool",internalType:"bool"},{name:"oneWay",type:"bool",internalType:"bool"},{name:"maxFeeBps",type:"uint16",internalType:"uint16"},{name:"deadline",type:"uint64",internalType:"uint64"},{name:"legs",type:"tuple[]",internalType:"struct LadderStrategy.LegTerms[]",components:[{name:"buyLower",type:"int24",internalType:"int24"},{name:"sellLower",type:"int24",internalType:"int24"},{name:"amount",type:"uint128",internalType:"uint128"}]}]}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"nonpayable"},{type:"function",name:"close",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"minQuote",type:"uint256",internalType:"uint256"},{name:"minToken",type:"uint256",internalType:"uint256"},{name:"deadline",type:"uint64",internalType:"uint64"},{name:"mask",type:"uint8",internalType:"uint8"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"setRepeat",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"repeat",type:"bool",internalType:"bool"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"collect",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"mask",type:"uint8",internalType:"uint8"}],outputs:[],stateMutability:"nonpayable"}],maker:["struct Leg { address tokenIn; address tokenOut; uint256 amountIn; bytes data; }","struct Basket { string name; string symbol; address[] tokens; uint256[] normalizedWeights; uint256 swapFeePercentage; bytes32 salt; }","function make(Basket basket, address tokenIn, uint256 amountIn, Leg[] legs, uint256 minBptOut, address recipient, uint256 deadline) payable returns (address pool, uint256 bptOut)","function poolSalt(address caller, bytes32 salt) pure returns (bytes32)","function vault() view returns (address)","function router() view returns (address)","function permit2() view returns (address)","function factory() view returns (address)","function kyberRouter() view returns (address)","function kyberRouterCodeHash() view returns (bytes32)","function weth() view returns (address)","function admin() view returns (address)","event Made(address indexed pool, address indexed maker, address indexed recipient, address tokenIn, uint256 amountIn, uint256 bptOut)","error ZeroAddress()","error BadRouter()","error BadFactory()","error BadWeth()","error KyberCodeChanged()","error NotRouter()","error Expired(uint256 deadline)","error BadRecipient(address recipient)","error ZeroAmount()","error BadToken(address token)","error BadValue(uint256 value, uint256 amountIn)","error ReservedSymbol()","error BadLegToken(address token)","error LegAmountTooHigh(address token, uint256 amountIn, uint256 available)","error LegNoOutput(address token)","error NothingOf(address token)","error TransferInMismatch(address token, uint256 received, uint256 expected)","error BalanceBelowStart(address token, uint256 balance, uint256 start)","error BalanceChanged(address token, uint256 balance, uint256 start)","error BptOutBelowMin(uint256 bptOut, uint256 minBptOut)","error ReentrancyGuardReentrantCall()","error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)","error SafeERC20FailedOperation(address token)"],kyber:["function swap((address callTarget,address approveTarget,bytes targetData,(address srcToken,address dstToken,address[] srcReceivers,uint256[] srcAmounts,address[] feeReceivers,uint256[] feeAmounts,address dstReceiver,uint256 amount,uint256 minReturnAmount,uint256 flags,bytes permit) desc,bytes clientData) execution) payable returns(uint256,uint256)"],gridRead:[{type:"function",name:"hook",inputs:[],outputs:[{name:"",type:"address",internalType:"contract GroupedOrderHook"}],stateMutability:"view"}],basketFactory:["function create(string name, string symbol, (address token, uint8 tokenType, address rateProvider, bool paysYieldFees)[] tokens, uint256[] normalizedWeights, (address pauseManager, address swapFeeManager, address poolCreator) roleAccounts, uint256 swapFeePercentage, address poolHooksContract, bool enableDonation, bool disableUnbalancedLiquidity, bytes32 salt) returns (address pool)","function isPoolFromFactory(address pool) view returns (bool)","function getVault() view returns (address)","event PoolCreated(address indexed pool)"],basketVault:["function getPoolTokens(address pool) view returns (address[] tokens)","function getPoolTokenInfo(address pool) view returns (address[] tokens, (uint8 tokenType, address rateProvider, bool paysYieldFees)[] tokenInfo, uint256[] balancesRaw, uint256[] lastBalancesLiveScaled18)","function isPoolRegistered(address pool) view returns (bool)","function isPoolInitialized(address pool) view returns (bool)","function isPoolPaused(address pool) view returns (bool)","function isPoolInRecoveryMode(address pool) view returns (bool)","function disableRecoveryMode(address pool)","function getActionId(bytes4 selector) view returns (bytes32)","function isVaultPaused() view returns (bool)","function getPoolRoleAccounts(address pool) view returns ((address pauseManager, address swapFeeManager, address poolCreator))","function getStaticSwapFeePercentage(address pool) view returns (uint256)","function getProtocolFeeController() view returns (address)","function getAuthorizer() view returns (address)","function pausePool(address pool)","function unpausePool(address pool)","function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage)","function getReservesOf(address token) view returns (uint256)"]};var At={capturedOn:"2026-10-31",scope:"Observed official public API, official site/docs and published app ABI literals; no claim of exhaustive unpublished/private product coverage. CLOSED means fixture-tested scoped implementation or explicit UI handoff, not live settlement. SHARED means a returned integration diff is required.",sources:[{url:"https://api.tickerspring.com/v1/agent/llms.txt",sha256:"0968da67b16f1b86791cbdb74bb44855f92c1d95ae6556d6b2a8b14390ad8987",quote:"The API never holds keys, never signs and never sends a transaction."},{url:"https://api.tickerspring.com/v1/agent/skill.md",sha256:"003ebf79f352b397ad35834b217a52b2dbd948ae6fa5f2d2e8c6d851aecb7ed3",quote:"Back an agent"},{url:"https://api.tickerspring.com/v1/agent/openapi.json",sha256:"423b311b925fc56bfb5208d98bb32cc222d158d900a05a4879a0770c1b388252",quote:"Ticker Spring agent API"},{url:"https://api.tickerspring.com/v1/agent/products",sha256:"1e19a9f0e1bf633df2ac318a6e076db14c57342dac49947c9ca979a8928d1ee2",quote:"marketsComplete"},{url:"https://api.tickerspring.com/v1/trade",sha256:"ec3d5b526b9fa752ad4be7dbcde0335621940a62f732d5fdb674d7245375ae29",quote:"twapOrderBook"},{url:"https://api.tickerspring.com/v1/spring-orders/config",sha256:"48643db7e04746435a76e02a2081bf8e538934dc0bb76d944903853b3d2d2118",quote:"average"},{url:"https://tickerspring.com/docs",sha256:"d4a3dc834b1a7192c7344dcd84a2f45dd14c5805d0d4e738a6cdca9be0609e7a",quote:"Vaults include multiple withdrawal and recovery paths"}],features:[{id:"API-1",feature:"Availability and fee directory",who:"user / agent",quote:"GET /v1/agent/products",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_products"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-2",feature:"Eligible vault list or pinned vault detail",who:"user / agent",quote:"GET /v1/agent/vaults",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_vaults"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-3",feature:"Eligible vault list or pinned vault detail",who:"user / agent",quote:"GET /v1/agent/vaults/{vault}",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_vaults"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-4",feature:"Separate vault prices or earnings stream",who:"user / agent",quote:"GET /v1/agent/vaults/{vault}/prices",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_vault_history"],detail:"Supported documented route; see limitations for conditional modes.",test:"research.test.ts"},{id:"API-5",feature:"Separate vault prices or earnings stream",who:"user / agent",quote:"GET /v1/agent/vaults/{vault}/earnings",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_vault_history"],detail:"Supported documented route; see limitations for conditional modes.",test:"research.test.ts"},{id:"API-6",feature:"Wallet changes since a provider cursor",who:"user / agent",quote:"GET /v1/agent/accounts/{owner}/activity",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_activity"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-7",feature:"Complete wallet product state",who:"user / agent",quote:"GET /v1/agent/accounts/{owner}",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_account"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-8",feature:"Historical grid replay",who:"user / agent",quote:"POST /v1/agent/backtest/grid",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_backtest_grid"],detail:"Supported documented route; see limitations for conditional modes.",test:"research.test.ts"},{id:"API-9",feature:"Historical independent-order replay",who:"user / agent",quote:"POST /v1/agent/backtest/ladder",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_backtest_ladder"],detail:"Supported documented route; see limitations for conditional modes.",test:"research.test.ts"},{id:"API-10",feature:"Historical grid line comparison",who:"user / agent",quote:"GET /v1/agent/ranges",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_ranges"],detail:"Supported documented route; see limitations for conditional modes.",test:"research.test.ts"},{id:"API-11",feature:"Scanned grid or dip-ladder candidates",who:"user / agent",quote:"GET /v1/agent/grid/tokens",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_strategy_tokens"],detail:"Supported documented route; see limitations for conditional modes.",test:"research.test.ts"},{id:"API-12",feature:"Budget-based grid or dip-ladder plan",who:"user / agent",quote:"GET /v1/agent/grid/plan",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_plan"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-13",feature:"Scanned grid or dip-ladder candidates",who:"user / agent",quote:"GET /v1/agent/ladder/tokens",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_strategy_tokens"],detail:"Supported documented route; see limitations for conditional modes.",test:"research.test.ts"},{id:"API-14",feature:"Budget-based grid or dip-ladder plan",who:"user / agent",quote:"GET /v1/agent/ladder/plan",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_plan"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-15",feature:"Branded swap output estimate",who:"user / agent",quote:"GET /v1/agent/swap/quote",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_swap_quote"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-16",feature:"Basket composition feasibility",who:"user / agent",quote:"POST /v1/agent/baskets/plan",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_basket_plan"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-17",feature:"Official API, instructions or wallet-policy reference",who:"user / agent",quote:"GET /v1/agent/policies/privy",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_instructions"],detail:"Public reference handoff",test:"research.test.ts"},{id:"API-18",feature:"Official API, instructions or wallet-policy reference",who:"user / agent",quote:"GET /v1/agent/policies/turnkey",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_instructions"],detail:"Public reference handoff",test:"research.test.ts"},{id:"API-19",feature:"Official API, instructions or wallet-policy reference",who:"user / agent",quote:"GET /v1/agent/openapi.json",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_instructions"],detail:"Public reference handoff",test:"research.test.ts"},{id:"API-20",feature:"Official API, instructions or wallet-policy reference",who:"user / agent",quote:"GET /v1/agent/skill.md",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_instructions"],detail:"Public reference handoff",test:"research.test.ts"},{id:"API-21",feature:"Official API, instructions or wallet-policy reference",who:"user / agent",quote:"GET /v1/agent/llms.txt",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_instructions"],detail:"Public reference handoff",test:"research.test.ts"},{id:"API-22",feature:"USDG deposit request",who:"user / agent",quote:"POST /v1/agent/prepare/vault-deposit",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_vault_deposit"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-23",feature:"Pending deposit refund",who:"user / agent",quote:"POST /v1/agent/prepare/vault-cancel-deposit",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_vault_cancel_deposit"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-24",feature:"Direct vault share redemption",who:"user / agent",quote:"POST /v1/agent/prepare/vault-withdraw",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_vault_withdraw"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-25",feature:"Queued redemption cancellation",who:"user / agent",quote:"POST /v1/agent/prepare/vault-cancel-withdraw",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"BLOCKED",tools:[],detail:"No agent vault in the complete 31-vault directory has a redeemQueue. Need an eligible deployed queue linked to a pinned vault, matched release/ABI, and request/cancel/settle fixture.",test:"public research: unavailable agent backing / positive deployed wrapper control; source inventory"},{id:"API-26",feature:"Single limit-order entry",who:"user / agent",quote:"POST /v1/agent/prepare/limit-order",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_create"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-27",feature:"Independent limit-order batch",who:"user / agent",quote:"POST /v1/agent/prepare/ladder",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_ladder"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-28",feature:"Order cancellation, payout and realization",who:"user / agent",quote:"POST /v1/agent/prepare/order-action",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_cancel","tickerspring_claim","tickerspring_order_accounting"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-29",feature:"Grid entry and position management",who:"user / agent",quote:"POST /v1/agent/prepare/grid",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_grid"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-30",feature:"Existing ladder-strategy position management",who:"user / agent",quote:"POST /v1/agent/prepare/ladder-strategy",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_ladder_strategy"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-31",feature:"Basket-token acquisition",who:"user / agent",quote:"POST /v1/agent/prepare/basket-buy",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_basket_buy"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-32",feature:"Basket-token redemption",who:"user / agent",quote:"POST /v1/agent/prepare/basket-sell",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_basket_sell"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-33",feature:"New basket and first contribution",who:"user / agent",quote:"POST /v1/agent/prepare/basket-make",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_basket_make"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-34",feature:"Branded swap transaction",who:"user / agent",quote:"POST /v1/agent/prepare/swap",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"BLOCKED",tools:[],detail:"The router pin and selector 0xdc4e8da1 are known, but its outer ABI, executor/adapter authorization and fee/recipient validation are not published in the captured agent policy. Need the matching router source/ABI plus a quote-to-exit fixture and local guard.",test:"public research: unavailable agent backing / positive deployed wrapper control; source inventory"},{id:"API-35",feature:"Agent backing entry",who:"user / agent",quote:"POST /v1/agent/prepare/agent-back",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"BLOCKED",tools:[],detail:"Weekend has a deployed public wrapper (0xA2E0a3a08E19cF244578C04eD59aE9fAa60e629B), unlike Night/Balance/Bill null controls. Need its matched public wrapper ABI/release, share decimals, receiver/minimum semantics and a request-to-settlement/exit fixture; ordinary pool-vault ABIs are not its ABI.",test:"public research: unavailable agent backing / positive deployed wrapper control; source inventory"},{id:"API-36",feature:"Agent backing exit",who:"user / agent",quote:"POST /v1/agent/prepare/agent-leave",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"BLOCKED",tools:[],detail:"Need the agent-wrapper matched ABI/release, share decimals and USDG/in-kind route guards; the public pool-vault ABI cannot validate the wrapper.",test:"public research: unavailable agent backing / positive deployed wrapper control; source inventory"},{id:"API-37",feature:"Agent backing request cancellation",who:"user / agent",quote:"POST /v1/agent/prepare/agent-cancel",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"BLOCKED",tools:[],detail:"Need the agent-wrapper matched ABI/release, pending-request ownership/cancel semantics and refund fixture.",test:"public research: unavailable agent backing / positive deployed wrapper control; source inventory"},{id:"API-38",feature:"Public grading records and counts",who:"user / agent",quote:"GET /v1/agent/report-card/{owner}",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"CLOSED",tools:["tickerspring_report_card"],detail:"Supported documented route; see limitations for conditional modes.",test:"journey.test.ts / index.test.ts"},{id:"API-39",feature:"Private owner grading records",who:"owner",quote:"GET /v1/agent/report-card/{owner}/private",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"BLOCKED",tools:[],detail:"Requires an owner personal_sign session. Need a separately reviewed local authentication continuation and protected token lifecycle; use the official owner sign-in handoff. No signature/bearer arguments are exposed.",test:"public research: unavailable agent backing / positive deployed wrapper control; source inventory"},{id:"API-40",feature:"Owner authentication challenge",who:"owner",quote:"POST /v1/agent/report-card/session/challenge",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"BLOCKED",tools:[],detail:"Needs the local-only personal_sign authentication continuation with domain/message/expiry binding; use the official UI.",test:"public research: unavailable agent backing / positive deployed wrapper control; source inventory"},{id:"API-41",feature:"Owner authentication exchange",who:"owner",quote:"POST /v1/agent/report-card/session",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"BLOCKED",tools:[],detail:"Needs owner-session exchange, protected storage and expiry/deletion handling outside this module scope; no owner signatures or tokens may be forwarded as tool inputs.",test:"public research: unavailable agent backing / positive deployed wrapper control; source inventory"},{id:"API-42",feature:"Stored unsigned request inspection",who:"user / agent",quote:"GET /v1/agent/sign-requests/{id}",source:"https://api.tickerspring.com/v1/agent/openapi.json",status:"SHARED",tools:["tickerspring_sign_request"],detail:"Supported documented route; see limitations for conditional modes.",test:"research.test.ts"},{id:"PUBLIC-STATS",feature:"Protocol totals",who:"user / agent",quote:"GET /v1/public/stats",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"SHARED",tools:["tickerspring_stats"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"TOKEN-DIRECTORY",feature:"Token search, categories, volume sort and market flags",who:"user / agent",quote:"GET /v1/tokens",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"CLOSED",tools:["tickerspring_tokens"],detail:"See playbook for safety and measurement boundaries.",test:"journey.test.ts / index.test.ts"},{id:"BASKET-HOLDINGS",feature:"Basket holdings and earned fees",who:"user / agent",quote:"GET /v1/baskets/{pool}/account/{owner}",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"CLOSED",tools:["tickerspring_baskets"],detail:"See playbook for safety and measurement boundaries.",test:"journey.test.ts / index.test.ts"},{id:"BASKET-HISTORY",feature:"Basket price/history",who:"user / agent",quote:"GET /v1/baskets/{pool}/history",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"SHARED",tools:["tickerspring_basket_history"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"FINDER",feature:"Strategy finder and period/category/style filters",who:"user / agent",quote:"GET /v1/strategy-finder",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"SHARED",tools:["tickerspring_strategy_finder"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"FINDER-DETAIL",feature:"All styles for one token",who:"user / agent",quote:"GET /v1/strategy-finder/{token}",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"SHARED",tools:["tickerspring_strategy_detail"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"FINDER-TRACK",feature:"Past board picks, including losses",who:"user / agent",quote:"GET /v1/strategy-finder/track-record",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"SHARED",tools:["tickerspring_strategy_track_record"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"FINDER-BACKTEST",feature:"On-demand published-variant strategy backtest",who:"user / agent",quote:"POST /v1/strategy-finder/backtest",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"SHARED",tools:["tickerspring_backtest_strategy"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"AGENTS",feature:"Agent directory",who:"user / backer",quote:"GET /v1/agents",source:"https://api.tickerspring.com/v1/agent/skill.md",status:"SHARED",tools:["tickerspring_agents"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"AGENT-VAULT",feature:"Backing wrapper availability and this wallet state",who:"user / backer",quote:"GET /v1/agents/{slug}/vault?owner=",source:"https://api.tickerspring.com/v1/agent/skill.md",status:"SHARED",tools:["tickerspring_agent_vault"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"TRADE-DIRECTORY",feature:"Swap, alternative limit and TWAP deployments and availability",who:"user / agent",quote:"GET /v1/trade",source:"https://api.tickerspring.com/v1/trade",status:"SHARED",tools:["tickerspring_trade_directory"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"TRADE-TOKEN",feature:"Trade token metadata",who:"user / agent",quote:"GET /v1/trade/token",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"SHARED",tools:["tickerspring_trade_token"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"TRADE-COMPARE",feature:"Aggregator comparison quotes",who:"user / agent",quote:"GET /v1/trade/quotes",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"SHARED",tools:["tickerspring_trade_quotes"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"SPRING-DISCOVERY",feature:"Spring Orders live configuration, markets, retired contracts and keeper status",who:"user / agent",quote:"GET /v1/spring-orders/config",source:"https://api.tickerspring.com/v1/spring-orders/config",status:"SHARED",tools:["tickerspring_spring_config"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"SPRING-HANDOFF",feature:"Configure/fund/repeat/monitor/stop/exit through the official site",who:"owner",quote:"On the site only, with no agent route yet",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"CLOSED",tools:["tickerspring_spring_orders"],detail:"See playbook for safety and measurement boundaries.",test:"journey.test.ts / index.test.ts"},{id:"EXIT-ESTIMATE",feature:"Simulated current cancellation refund/proceeds, excluding gas",who:"user / agent",quote:"cancel(uint256,uint256,uint256,uint64,uint8)",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"CLOSED",tools:["tickerspring_order_exit_preview"],detail:"See playbook for safety and measurement boundaries.",test:"journey.test.ts / index.test.ts"},{id:"RECEIPT",feature:"Wallet transaction receipt",who:"user / agent",quote:"get_tx_status",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"CLOSED",tools:["tickerspring_tx_status"],detail:"See playbook for safety and measurement boundaries.",test:"journey.test.ts / index.test.ts"},{id:"REALIZE",feature:"Realize settled bucket accounting",who:"order owner",quote:"realize(uint256)",source:"https://tickerspring.com/_next/static/chunks/649-83b30689528eca4b.js",status:"CLOSED",tools:["tickerspring_order_accounting"],detail:"Unsigned direct contract action; provider report-card filing is unavailable.",test:"research.test.ts"},{id:"CLAIM-ONE",feature:"Claim just currency0 or currency1",who:"order owner",quote:"claim(uint256,bool)",source:"https://tickerspring.com/_next/static/chunks/649-83b30689528eca4b.js",status:"CLOSED",tools:["tickerspring_order_accounting"],detail:"Unsigned direct contract action; provider report-card filing is unavailable.",test:"research.test.ts"},{id:"OWNER-HANDOFF",feature:"Owner sign-in for private report cards and wallet attempt counts",who:"owner",quote:"personal_sign",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"SHARED",tools:["tickerspring_owner_report_card"],detail:"See playbook for safety and measurement boundaries.",test:"research.test.ts"},{id:"QUEUE-ENTRY",feature:"Queued vault withdrawal",who:"user / agent",quote:"Queued vault withdrawal",source:"https://api.tickerspring.com/v1/agent/vaults",status:"BLOCKED",tools:[],detail:"No live agent-vault queue in the complete registry; need a deployed eligible queue pin, matched ABI and tested lifecycle.",test:"public-fixtures.json positive availability controls; source inventory"},{id:"LADDER-OPEN",feature:"Repeating ladder-strategy opening",who:"user / agent",quote:"Repeating ladder-strategy opening",source:"https://api.tickerspring.com/v1/agent/products",status:"BLOCKED",tools:[],detail:"products.ladderStrategies.markets is empty with marketsComplete=true. Need an eligible listed market and official entry fixture. Existing management and independent ladders are available.",test:"public-fixtures.json positive availability controls; source inventory"},{id:"PRINCIPAL",feature:"Fee-exclusive remaining principal",who:"user / agent",quote:"Fee-exclusive remaining principal",source:"https://api.tickerspring.com/v1/agent/accounts/{owner}",status:"BLOCKED",tools:[],detail:"Published getter/account fields expose original debit and accrued accounting, without an authoritative fee-exclusive per-order refundable-principal quote. Need the provider field or reviewed accounting specification; simulated aggregate exits are available.",test:"public-fixtures.json positive availability controls; source inventory"},{id:"FINDER-CUSTOM",feature:"Custom strategy settings",who:"user / agent",quote:"Custom strategy settings",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"BLOCKED",tools:[],detail:"Need versioned per-strategy settings schemas and units; the public guide only says settings?, and OpenAPI omits this route. Published variants are supported.",test:"public-fixtures.json positive availability controls; source inventory"},{id:"FINDER-ATTEMPTS",feature:"Wallet-attributed backtest attempt counts",who:"user / agent",quote:"Wallet-attributed backtest attempt counts",source:"https://api.tickerspring.com/v1/agent/llms.txt",status:"BLOCKED",tools:[],detail:"Needs an owner sign-in session and its local authentication/token lifecycle. Use the official owner sign-in UI.",test:"public-fixtures.json positive availability controls; source inventory"},{id:"SPRING-WRITES",feature:"Direct Spring Orders open/repeat/collect/close/sync/place, including retired exits",who:"user / agent",quote:"Direct Spring Orders open/repeat/collect/close/sync/place, including retired exits",source:"https://tickerspring.com/_next/static/chunks/9073-ce348764549e4d43.js",status:"BLOCKED",tools:[],detail:"ABI and current/retired addresses were found. Need a reviewed deployment-to-runtime match and entry-through-fill/exit fixture for the grouped accounting, take-profit parts, minimum checks and keeper deferrals; no agent prepare route publishes validated terms. Official UI handoff and raw state reads are available.",test:"public-fixtures.json positive availability controls; source inventory"},{id:"ALT-LIMIT",feature:"Alternative trade-router limit lifecycle",who:"user / agent",quote:"Alternative trade-router limit lifecycle",source:"https://api.tickerspring.com/v1/trade",status:"BLOCKED",tools:[],detail:"Directory positively advertises a separate limitOrderBook, distinct from the grouped hook. Need matching public book/adapter ABI, signed-order or escrow semantics and prepare/cancel/status fixtures.",test:"public-fixtures.json positive availability controls; source inventory"},{id:"TWAP",feature:"Trade-router TWAP lifecycle",who:"user / agent",quote:"Trade-router TWAP lifecycle",source:"https://api.tickerspring.com/v1/trade",status:"BLOCKED",tools:[],detail:"Directory positively advertises twapOrderBook. Need the matched book/adapter ABI, schedule/fill/cancel/remaining-escrow semantics and a lifecycle fixture.",test:"public-fixtures.json positive availability controls; source inventory"},{id:"LENDING",feature:"Lending and leveraged vault loops",who:"user / agent",quote:"Not offered: lending",source:"https://tickerspring.com/docs",status:"BLOCKED",tools:[],detail:"Official agent index says not offered; site docs describe future lending. Need an active supported deployment and public action contract.",test:"public-fixtures.json positive availability controls; source inventory"},{id:"LAUNCHPAD",feature:"Launchpad",who:"user / agent",quote:"Launchpad Soon",source:"https://tickerspring.com/agents",status:"BLOCKED",tools:[],detail:"Site navigation labels it Soon. Need public deployment, user flow and ABI/API.",test:"public-fixtures.json positive availability controls; source inventory"},{id:"READ-VAULT",feature:"vault full published view/pure ABI",who:"user / owner / keeper",quote:"MAX_COOLDOWN / MAX_DAILY_LOSS_BPS / MAX_FEE_BPS / MAX_LOSS_BPS / MAX_SLIPPAGE_BPS / allowance / asset / balanceOf / blockedClaims / blockedToken / blockedUnpaid / buybackFees / canDeposit / config / decimals / depositAllowlist / depositRequests / depositsPaused / keeperPaused / lastRangeChange / lossBudgetUsed / lossUpdatedAt / minDeposit / name / nextDepositId / owner / pendingDeposits / pendingHeld / pendingOwner / previewDeposit / priceModule / protocolFees / recoveryBlocked / recoverySupply / renounceOwnership / rewardPriceModule / rewardToken / swapper / symbol / token / totalAssets / totalSupply / usdg / venue",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",status:"SHARED",tools:["tickerspring_contract_read"],detail:"Pinned targets; ABI-shaped arguments; no write selector accepted. Returns public state only.",test:"research.test.ts: public contract read boundary"},{id:"READ-LIMIT",feature:"limit full published view/pure ABI",who:"user / owner / keeper",quote:"COMPLETION_BPS / completionPrice / MAX_FEE_BPS / MAX_LEVELS / MIN_CAP_SPAN / activeBandCount / currentBucket / depth / depthDescending / feePolicy / generation / getBucket / getMarketMinimums / getOrder / getPoolConfig / lastPrice / levelBoundary / listOrders / manager / marketKey / marketProfile / nextOrder / orderCount / protocolAccrued / registeredPools / registrar / treasury",source:"https://tickerspring.com/_next/static/chunks/649-83b30689528eca4b.js",status:"SHARED",tools:["tickerspring_contract_read"],detail:"Pinned targets; ABI-shaped arguments; no write selector accepted. Returns public state only.",test:"research.test.ts: public contract read boundary"},{id:"READ-GRID",feature:"grid full published view/pure ABI",who:"user / owner / keeper",quote:"BUYING / CLOSED / DELIVER_QUOTE / DELIVER_TOKEN / DONE / SELLING / canFlip / flippable / getPosition / hook / listPositions / nextPosition / positionCount / quote",source:"https://tickerspring.com/_next/static/chunks/5785-74ee50b34dadbd7e.js",status:"SHARED",tools:["tickerspring_contract_read"],detail:"Pinned targets; ABI-shaped arguments; no write selector accepted. Returns public state only.",test:"research.test.ts: public contract read boundary"},{id:"READ-SPRING",feature:"spring full published view/pure ABI",who:"user / owner / keeper",quote:"ACTIVE / CLOSED / DEFERRED / DELIVER_QUOTE / DELIVER_TOKEN / DONE / FILLED / FINISHING / HEADROOM_BPS / LAST_PART_DROP_BPS / MAX_GAIN_BPS / MAX_LEVELS / MAX_PARTS / MAX_PLACEMENTS / MIN_SHARE_BPS / OPEN_BAD_TERMS / OPEN_LAST_PART_TOO_SMALL / OPEN_LEVEL_TOO_SMALL / OPEN_OK / OPEN_UNSUPPORTED / PENDING / READY_BUY_FILLED / READY_PLACE / READY_TP_FILLED / RESTING / TP_EMPTY / TP_PLANNED / TP_RESTING / TP_SOLD / UNARMED / WAITING / WAIT_FEE / WAIT_HOOK / WAIT_ORDER / WAIT_PAUSED / WAIT_PRICE / WAIT_SIZE / checkOpen / getPosition / hook / lastPartMinimum / levelMinimum / listPositions / manager / nextPosition / planFor / positionCount / previewTakeProfit / quote / readySync / roundEndOf",source:"https://tickerspring.com/_next/static/chunks/9073-ce348764549e4d43.js",status:"SHARED",tools:["tickerspring_contract_read"],detail:"Pinned targets; ABI-shaped arguments; no write selector accepted. Returns public state only.",test:"research.test.ts: public contract read boundary"},{id:"READ-BASKET_VAULT",feature:"basket_vault full published view/pure ABI",who:"user / owner / keeper",quote:"getPoolTokens / getPoolTokenInfo / isPoolRegistered / isPoolInitialized / isPoolPaused / isPoolInRecoveryMode / getActionId / isVaultPaused / getPoolRoleAccounts / getStaticSwapFeePercentage / getProtocolFeeController / getAuthorizer / getReservesOf",source:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",status:"SHARED",tools:["tickerspring_contract_read"],detail:"Pinned targets; ABI-shaped arguments; no write selector accepted. Returns public state only.",test:"research.test.ts: public contract read boundary"},{id:"READ-BASKET_FACTORY",feature:"basket_factory full published view/pure ABI",who:"user / owner / keeper",quote:"isPoolFromFactory / getVault",source:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",status:"SHARED",tools:["tickerspring_contract_read"],detail:"Pinned targets; ABI-shaped arguments; no write selector accepted. Returns public state only.",test:"research.test.ts: public contract read boundary"},{id:"READ-BASKET_MAKER",feature:"basket_maker full published view/pure ABI",who:"user / owner / keeper",quote:"poolSalt / vault / router / permit2 / factory / kyberRouter / kyberRouterCodeHash / weth / admin",source:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",status:"SHARED",tools:["tickerspring_contract_read"],detail:"Pinned targets; ABI-shaped arguments; no write selector accepted. Returns public state only.",test:"research.test.ts: public contract read boundary"}],roleWrites:[{contract:"vault",function:"acceptOwnership",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"approve",who:"ERC-20 holder / spender",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"Standalone token allowance/third-party transfer or protocol callback is not exposed as an Oak project action; needs explicit input/recipient semantics and dedicated local guard. Existing product approvals remain exact."},{contract:"vault",function:"claimBlocked",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"claimFees",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"openRecovery",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"rebalance",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"redeemRecovery",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"releaseBlocked",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"setConfig",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"setDepositAllowlist",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"setDepositor",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"setPaused",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"setStaking",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"settleDeposits",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"vault",function:"transfer",who:"ERC-20 holder / spender",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"Standalone token allowance/third-party transfer or protocol callback is not exposed as an Oak project action; needs explicit input/recipient semantics and dedicated local guard. Existing product approvals remain exact."},{contract:"vault",function:"transferFrom",who:"ERC-20 holder / spender",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"Standalone token allowance/third-party transfer or protocol callback is not exposed as an Oak project action; needs explicit input/recipient semantics and dedicated local guard. Existing product approvals remain exact."},{contract:"vault",function:"transferOwnership",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"limit",function:"afterSwap",who:"protocol callback",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/649-83b30689528eca4b.js",missing:"Standalone token allowance/third-party transfer or protocol callback is not exposed as an Oak project action; needs explicit input/recipient semantics and dedicated local guard. Existing product approvals remain exact."},{contract:"limit",function:"enableMarketProfile",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/649-83b30689528eca4b.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"limit",function:"openMarket",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/649-83b30689528eca4b.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"limit",function:"registerPool",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/649-83b30689528eca4b.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"limit",function:"unlockCallback",who:"protocol callback",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/649-83b30689528eca4b.js",missing:"Standalone token allowance/third-party transfer or protocol callback is not exposed as an Oak project action; needs explicit input/recipient semantics and dedicated local guard. Existing product approvals remain exact."},{contract:"limit",function:"withdrawCommission",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/649-83b30689528eca4b.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"grid",function:"flip",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/5785-74ee50b34dadbd7e.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"spring",function:"close",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/9073-ce348764549e4d43.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"spring",function:"collect",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/9073-ce348764549e4d43.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"spring",function:"open",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/9073-ce348764549e4d43.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"spring",function:"place",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/9073-ce348764549e4d43.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"spring",function:"setRepeat",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/9073-ce348764549e4d43.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"spring",function:"sync",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/9073-ce348764549e4d43.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"basket_vault",function:"disableRecoveryMode",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"basket_vault",function:"pausePool",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"basket_vault",function:"unpausePool",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."},{contract:"basket_vault",function:"setStaticSwapFeePercentage",who:"owner / registrar / keeper / recovery participant (exact role requires source verification)",status:"BLOCKED",source:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",missing:"ABI signature is public, but its authorization, asset-flow/recovery semantics and successful role-specific lifecycle are not pinned by the agent policy. Need matched implementation source, role-authorized fixture and per-action local guard."}],newReadTools:["tickerspring_stats","tickerspring_vault_history","tickerspring_basket_history","tickerspring_strategy_tokens","tickerspring_ranges","tickerspring_backtest_grid","tickerspring_backtest_ladder","tickerspring_strategy_finder","tickerspring_strategy_detail","tickerspring_strategy_track_record","tickerspring_backtest_strategy","tickerspring_agents","tickerspring_agent_vault","tickerspring_instructions","tickerspring_owner_report_card","tickerspring_sign_request","tickerspring_contract_read","tickerspring_trade_directory","tickerspring_trade_token","tickerspring_trade_quotes","tickerspring_spring_config"]};import{decodeFunctionData as cn,encodeAbiParameters as pn,encodeFunctionData as Ke,erc20Abi as dn,getAddress as Ee,keccak256 as ln}from"viem";var ce=Ee(A.contracts.usdg),mn=Ee(A.strategyProfile.hook);function S(e="TickerSpring strategy calldata does not match the requested action."){throw new f(e)}function Dt(e){return typeof e!="boolean"&&S("Provide an explicit repeat setting."),e}function xt(e,t=mn){let i=BigInt(e)<BigInt(ce)?[e,ce]:[ce,e];return ln(pn([{type:"address"},{type:"address"},{type:"uint24"},{type:"int24"},{type:"address"}],[...i,A.strategyProfile.poolFee,A.strategyProfile.tickSpacing,t]))}function yn(e,t){(typeof e!="number"||!Number.isInteger(e)||e%10!==0||e<-887270||e>887260)&&S();let i=Be(e),n=i*i,s=1n<<192n;return BigInt(t.address)<BigInt(ce)?n*10n**BigInt(t.decimals)*10n**18n/(s*10n**6n):s*10n**BigInt(t.decimals)*10n**18n/(n*10n**6n)}function We(e,t,i){let n=yn(e,i),s=BigInt(ie(t,18,"floor")),r=n>s?n-s:s-n;(s===0n||r*10000n>s*25n)&&S("TickerSpring grid price band is outside 0.25% of the requested line.")}async function Bt(e,t,i,n){a.inputs(t,["action","token","buyPrice","sellPrice","amount","repeat","startingPrice","id","min0","min1","agentTag"]);let s=t.action;["open","close","collect","setRepeat"].includes(String(s))||S("Choose open, close, collect or setRepeat.");let r=Ee(n==="grid"?A.contracts.gridStrategy:A.contracts.ladderStrategy),u=n==="grid"?K.grid:K.strategy;if(s!=="open"){let I=s==="setRepeat"?["action","id","repeat"]:s==="close"?["action","id","min0","min1"]:["action","id"];a.inputs(t,[...I,"agentTag"]);let $=a.integer(t.id),F=s==="setRepeat"?Dt(t.repeat):void 0,M=a.prepared(e,await a.request(e,`/v1/agent/prepare/${n}`,{owner:i,...a.attribution(t),action:s,id:$,...F===void 0?{}:{repeat:F}}),i,n);(M.txs.length!==1||!c(M.txs[0].to,r))&&S();let Z=cn({abi:u,data:M.txs[0].data}),H=Z.args;if((Z.functionName!==s||H[0]!==BigInt($))&&S(),s==="setRepeat"&&H[1]!==F&&S(),s==="collect"&&H[1]!==3&&S("Collect must deliver both strategy currencies."),s==="close"){let z=BigInt(a.integer(t.min0)),Y=BigInt(a.integer(t.min1));(z+Y<=1n||typeof H[1]!="bigint"||typeof H[2]!="bigint"||H[1]<z||H[2]<Y||H[4]!==3)&&S("Close must preserve protected minima and deliver both strategy currencies."),a.futureDeadline(String(H[3]))}return U(M.txs[0].data,Ke({abi:u,functionName:Z.functionName,args:H}))||S(),a.result(e,M,i,{id:$,action:s,...s==="close"?{deadline:String(H[3])}:{}},"Strategy fill fee: 1%. Collect takes available proceeds; disabling repeat does not close the current leg. Close exits the position. Verify the full account and both balances after the receipt.")}n!=="grid"&&S("No ladder-strategy markets are currently listed. Read tickerspring_products; a listed market and its official entry fixture are required before Oak can open one. Existing positions can still close, collect or change repeat."),a.inputs(t,["action","token","buyPrice","sellPrice","amount","repeat","startingPrice","agentTag"]);let o=a.positive(t.amount),p=Ee(a.address(t.token));BigInt(o)<11000000n&&S("TickerSpring grids require at least 11 USDG.");let l=a.price(a.text(t.buyPrice)),d=a.price(a.text(t.sellPrice));BigInt(ie(l,18,"floor"))>=BigInt(ie(d,18,"floor"))&&S("The grid sell price must be above its buy price.");let h=Dt(t.repeat),k=await a.request(e,"/v1/tokens");Array.isArray(k.tokens)||S("TickerSpring token list is unavailable.");let b=k.tokens.map(a.object).filter(I=>c(I.address,p));b.length!==1&&S("Use a unique TickerSpring token address.");let y=b[0],w=a.token(y),x=a.object(y.markets);(c(p,ce)||typeof x.grids!="boolean")&&S();let C=x.grids?void 0:a.price(a.text(t.startingPrice));x.grids&&t.startingPrice!==void 0&&S("startingPrice is only used to open a new grid market.");let D=x.grids?"open":"openWithMarket",m=a.prepared(e,await a.request(e,"/v1/agent/prepare/grid",{owner:i,...a.attribution(t),action:D,token:p,buyPrice:l,sellPrice:d,amount:e.formatAmount(o,6),repeat:h,...C===void 0?{}:{startingPrice:C}}),i,"grid"),v=a.object(m.bundle.params),T=a.object(v.open),P=a.futureDeadline(T.deadline);(!c(v.strategy,r)||!c(T.pool,xt(p))||T.sellFirst!==!1||T.repeat!==h||a.integer(T.amount)!==o||T.maxFeeBps!==100)&&S(),We(T.buyLower,l,w),We(T.sellLower,d,w);let R={pool:T.pool,buyLower:T.buyLower,sellLower:T.sellLower,sellFirst:!1,repeat:h,amount:BigInt(o),maxFeeBps:100,deadline:BigInt(P)},V=[R];if(C!==void 0){let I=a.object(v.market),$=BigInt(a.positive(I.initialPrice)),F=BigInt(a.positive(I.minimumPrice)),M=BigInt(a.positive(I.maximumPrice));(!c(I.token,p)||$<F||$>M)&&S(),Et($,F,M,C,w),V=[R,p,$,F,M]}return m.txs.length!==1&&m.txs.length!==2&&S(),m.txs.length===2&&(!c(m.txs[0].to,ce)||!U(m.txs[0].data,Ke({abi:dn,functionName:"approve",args:[r,BigInt(o)]})))&&S("Grid approval must equal the exact USDG input."),(!c(m.txs.at(-1).to,r)||!U(m.txs.at(-1).data,Ke({abi:u,functionName:D,args:V})))&&S(),a.result(e,m,i,{input:{token:{address:ce,symbol:"USDG",decimals:6,chainId:E},amount:o},token:w,buyPrice:l,sellPrice:d,repeat:h,startingPrice:C,deadline:P},"Grid fill fee: 1%. Repeating trades can lose value. Record the actual position ID from the receipt, monitor tickerspring_account, collect proceeds, disable repeat or close to exit.")}function Et(e,t,i,n,s){(typeof e!="bigint"||typeof t!="bigint"||typeof i!="bigint"||e<=0n||t<=0n||t>e||i<e)&&S();let r=e,u=t,o=i,p=r*r,l=1n<<192n,d=BigInt(s.address)<BigInt(ce)?p*10n**BigInt(s.decimals)*10n**18n/(l*10n**6n):l*10n**BigInt(s.decimals)*10n**18n/(p*10n**6n),h=BigInt(ie(n,18,"floor")),k=d>h?d-h:h-d;(h===0n||k*10000n>h*25n||u*10000n<r*9975n||o*10000n>r*10025n)&&S("TickerSpring grid initialization differs from the authorized starting price or bounds.")}var Ye={poolFor:xt,checkPrice:We,checkInitialization:Et};import{decodeFunctionData as fn,encodeFunctionData as gn,parseAbi as bn,zeroAddress as hn}from"viem";var St=bn(K.kyber);function Se(e,t,i,n,s){let r=()=>{throw new f("TickerSpring basket route changes its input, output, amount, recipient or fee policy.")},u=fn({abi:St,data:e});(u.functionName!=="swap"||!u.args)&&r();let o=a.object(u.args[0]),p=a.object(o.desc);(!c(p.srcToken,t)||!c(p.dstToken,i)||!c(p.dstReceiver,s)||p.amount!==n||typeof p.minReturnAmount!="bigint"||p.minReturnAmount<=1n||p.permit!=="0x"||p.flags!==0n&&p.flags!==512n||!Array.isArray(p.feeAmounts)||p.feeAmounts.length||!Array.isArray(p.feeReceivers)||p.feeReceivers.length||!Array.isArray(p.srcAmounts)||!Array.isArray(p.srcReceivers)||p.srcAmounts.length!==p.srcReceivers.length||p.srcAmounts.reduce((l,d)=>((typeof d!="bigint"||d<0n)&&r(),l+d),0n)!==n||!p.srcReceivers.every(l=>c(l,a.address(o.callTarget)))||!c(o.approveTarget,hn)&&!c(o.approveTarget,a.address(o.callTarget)))&&r(),U(gn({abi:St,functionName:u.functionName,args:u.args}),e)||r()}import{getAddress as ye,parseAbi as kn}from"viem";var he=ye(A.basketConfig.basketMakerV2),ae=ye(A.contracts.usdg),Qe=ye(A.basketConfig.weth),vn=kn(K.maker);function ee(e="TickerSpring basket creation differs from the authorized name, tokens, weights, fee, deposit or recipient."){throw new f(e)}async function It(e,t,i){a.inputs(t,["name","symbol","tokens","swapFeeBps","amount","payWith","minAmountOut","slippageBps","agentTag"]);let n=a.text(t.name),s=a.text(t.symbol);(n.length>64||!/^[A-Za-z0-9 ._+-]+$/.test(n)||!/^[A-Za-z0-9.+-]{1,20}$/.test(s)||/^ts/i.test(s))&&ee("Use a plain basket name and a symbol that does not start with ts."),(!Array.isArray(t.tokens)||t.tokens.length<2||t.tokens.length>8)&&ee("Choose 2 to 8 basket tokens with weights totaling 10000 basis points.");let r=t.tokens.map(m=>{let v=a.object(m);a.inputs(v,["token","weightBps"]);let T=ye(a.address(v.token));return(typeof v.weightBps!="number"||!Number.isInteger(v.weightBps)||v.weightBps<100||v.weightBps>9900)&&ee("Each basket weight must be an integer from 100 to 9900 basis points."),{token:T,weightBps:v.weightBps}}).sort((m,v)=>BigInt(m.token)<BigInt(v.token)?-1:1);(new Set(r.map(m=>m.token.toLowerCase())).size!==r.length||r.reduce((m,v)=>m+v.weightBps,0)!==1e4||!r.some(m=>c(m.token,ae)||c(m.token,Qe)))&&ee("Choose unique basket token addresses with USDG or WETH and weights totaling 10000 basis points.");let u=t.swapFeeBps??100;u!==30&&u!==100&&ee("Choose a basket swap fee of 30 or 100 basis points.");let o=a.positive(t.amount),p=q.minimum(t.minAmountOut),l=q.slippage(t),d=t.payWith===void 0?ae:ye(a.address(t.payWith));!c(d,ae)&&!c(d,Qe)&&ee("Pay the first basket deposit with USDG or WETH."),c(d,ae)&&BigInt(o)<25000000n&&ee("A basket first deposit must be worth at least 25 USDG.");let h=a.object(await q.api(e,"/v1/baskets/config"));(h.chainId!==4663||!c(h.basketMakerV2,he)||!c(h.weth,Qe)||!c(h.usdg,ae))&&ee("TickerSpring BasketMaker deployment changed; Oak needs a reviewed pin.");let k=await a.request(e,"/v1/agent/prepare/basket-make",{owner:i,...a.attribution(t),name:n,symbol:s,tokens:r.map(m=>({token:m.token,weightPct:m.weightBps/100})),swapFeePct:u/100,amount:e.formatAmount(o,c(d,ae)?6:18),payWith:c(d,ae)?"USDG":"WETH",slippageBps:l}),b=a.prepared(e,k,i,"basket-make"),y=a.object(b.bundle.params),w=a.object(y.basket),x=q.minimum(y.minOut),C=a.futureDeadline(y.deadline);(!c(y.maker,he)||!c(y.token,d)||a.integer(y.amount)!==o||x<p||!c(y.recipient,i)||w.name!==n||w.symbol!==s||!Array.isArray(w.tokens)||!Array.isArray(w.normalizedWeights)||w.tokens.length!==r.length||w.normalizedWeights.length!==r.length||a.integer(w.swapFeePercentage)!==(BigInt(u)*10n**14n).toString()||!r.every((m,v)=>c(w.tokens[v],m.token)&&a.integer(w.normalizedWeights[v])===(BigInt(m.weightBps)*10n**14n).toString())||typeof w.salt!="string"||!/^0x[0-9a-fA-F]{64}$/.test(w.salt)||!Array.isArray(y.legs))&&ee();let D=y.legs.map(m=>{let v=a.object(m),T=a.address(v.tokenIn),P=a.address(v.tokenOut),R=BigInt(a.positive(v.amountIn)),V=a.text(v.data);return(!c(T,d)||!r.some(I=>c(I.token,P)))&&ee(),Se(V,T,P,R,he),{tokenIn:T,tokenOut:P,amountIn:R,data:V}});return D.reduce((m,v)=>m+v.amountIn,0n)>BigInt(o)&&ee(),q.exactApproval(b.txs,d,he,o),q.exactCall(b.txs,he,vn,"make",[{name:n,symbol:s,tokens:r.map(m=>m.token),normalizedWeights:r.map(m=>BigInt(m.weightBps)*10n**14n),swapFeePercentage:BigInt(u)*10n**14n,salt:w.salt},d,BigInt(o),D,x,i,BigInt(C)]),a.result(e,b,i,{input:{token:{address:d,symbol:c(d,ae)?"USDG":"WETH",decimals:c(d,ae)?6:18,chainId:4663},amount:o},predictedPool:ye(a.address(y.pool)),minimumBptOut:x.toString(),name:n,symbol:s,tokens:r,swapFeeBps:u,salt:w.salt,deadline:C,verified:!1},"Creates a new unverified basket. Name, symbol, tokens, weights and swap fee are permanent. The pool address is predicted; use the actual Made event after the receipt. Verify basket holdings with tickerspring_account and the official basket detail.")}import{encodeFunctionData as wn,getAddress as Ot,parseAbi as Tn}from"viem";var An=Tn(["function cancel(uint256 id,uint256 min0,uint256 min1,uint64 deadline,uint8 deliveryMask)"]);async function Ct(e,t,i){a.inputs(t,["id"]);let n=a.integer(t.id),s=await q.account(e,i),u=a.object(s.data).limitOrders.map(a.object).filter(w=>w.id===n);if(u.length!==1)throw new f("Use an order ID from the complete TickerSpring account for this wallet.");let o=u[0],p=a.object(o.order),l=a.token(o.token);if(!c(o.hook,A.contracts.limitOrderHook)||!c(p.owner,i)||o.side!=="buy"&&o.side!=="sell")throw new f("TickerSpring order identity could not be verified.");let d={address:Ot(A.contracts.usdg),symbol:"USDG",decimals:6,chainId:4663},h=BigInt(Math.floor(Date.now()/1e3)+300),k=e.unsignedTx({to:Ot(A.contracts.limitOrderHook),data:wn({abi:An,functionName:"cancel",args:[BigInt(n),0n,0n,h,3]}),value:"0",chainId:4663,description:`Simulate cancellation returns for order ${n}; never sign this read-only quote.`}),b=await e.preview([k],i),y=b.changes.map(w=>{let x=c(w.token.address,l.address)?l:c(w.token.address,d.address)?d:void 0;if(!x||BigInt(w.amount)<0n)throw new f("Cancellation simulation returned an unexpected asset or wallet debit. Do not treat it as a refund quote.");return{token:x,amount:a.integer(w.amount)}});return{id:n,owner:i,chainId:4663,asOf:new Date().toISOString(),originalInput:{token:o.side==="buy"?d:l,amount:a.integer(p.debit)},cancellationReturns:y,summary:b.summary,notice:"Current simulated cancellation returns include refundable principal and available proceeds/fees. They exclude gas and can change before inclusion. They are not a fee-exclusive remaining-principal field. Use tickerspring_cancel for protected execution, then check balances. No transaction has been sent."}}import{getAddress as xn}from"viem";var fe={vault:{source:"https://tickerspring.com/_next/static/chunks/6446-10fcf6cb44986065.js",sourceSha256:"0c08aba8ad660e0c2b1172f6f9d956a8733b3f5877a93e870b6cb3772e5b7a07",abi:[{type:"function",name:"MAX_COOLDOWN",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MAX_DAILY_LOSS_BPS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MAX_FEE_BPS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MAX_LOSS_BPS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MAX_SLIPPAGE_BPS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"allowance",inputs:[{name:"owner",type:"address",internalType:"address"},{name:"spender",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"asset",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"balanceOf",inputs:[{name:"account",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"blockedClaims",inputs:[{name:"account",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"blockedToken",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IERC20"}],stateMutability:"view"},{type:"function",name:"blockedUnpaid",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"buybackFees",inputs:[{name:"token",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"canDeposit",inputs:[{name:"account",type:"address",internalType:"address"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"config",inputs:[],outputs:[{name:"keeper",type:"address",internalType:"address"},{name:"guardian",type:"address",internalType:"address"},{name:"treasury",type:"address",internalType:"address"},{name:"buyback",type:"address",internalType:"address"},{name:"protocolFeeBps",type:"uint16",internalType:"uint16"},{name:"buybackFeeBps",type:"uint16",internalType:"uint16"},{name:"maxLossBps",type:"uint16",internalType:"uint16"},{name:"maxDailyLossBps",type:"uint16",internalType:"uint16"},{name:"maxSlippageBps",type:"uint16",internalType:"uint16"},{name:"cooldown",type:"uint32",internalType:"uint32"},{name:"minWidth",type:"int24",internalType:"int24"},{name:"maxWidth",type:"int24",internalType:"int24"},{name:"depositCap",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"decimals",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"depositAllowlist",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"depositRequests",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"owner",type:"address",internalType:"address"},{name:"receiver",type:"address",internalType:"address"},{name:"assets",type:"uint128",internalType:"uint128"},{name:"minShares",type:"uint128",internalType:"uint128"}],stateMutability:"view"},{type:"function",name:"depositsPaused",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"keeperPaused",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"lastRangeChange",inputs:[],outputs:[{name:"",type:"uint64",internalType:"uint64"}],stateMutability:"view"},{type:"function",name:"lossBudgetUsed",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"lossUpdatedAt",inputs:[],outputs:[{name:"",type:"uint64",internalType:"uint64"}],stateMutability:"view"},{type:"function",name:"minDeposit",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"name",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"nextDepositId",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"owner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"pendingDeposits",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"pendingHeld",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"pendingOwner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"previewDeposit",inputs:[{name:"assets",type:"uint256",internalType:"uint256"},{name:"recent",type:"uint160",internalType:"uint160"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"priceModule",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IPriceModule"}],stateMutability:"view"},{type:"function",name:"protocolFees",inputs:[{name:"token",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"recoveryBlocked",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"recoverySupply",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"renounceOwnership",inputs:[],outputs:[],stateMutability:"pure"},{type:"function",name:"rewardPriceModule",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IPriceModule"}],stateMutability:"view"},{type:"function",name:"rewardToken",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IERC20"}],stateMutability:"view"},{type:"function",name:"swapper",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IKyberSwapper"}],stateMutability:"view"},{type:"function",name:"symbol",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"token",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IERC20"}],stateMutability:"view"},{type:"function",name:"totalAssets",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"totalSupply",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"usdg",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IERC20"}],stateMutability:"view"},{type:"function",name:"venue",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IVenue"}],stateMutability:"view"}],writes:["acceptOwnership","approve","cancelDeposit","claimBlocked","claimFees","openRecovery","rebalance","redeem","redeemInKind","redeemRecovery","releaseBlocked","requestDeposit","setConfig","setDepositAllowlist","setDepositor","setPaused","setStaking","settleDeposits","transfer","transferFrom","transferOwnership"]},limit:{source:"https://tickerspring.com/_next/static/chunks/649-83b30689528eca4b.js",sourceSha256:"ca529265d8f6e230c0b052d8f7060a97ad5d43e188fa7baab0622f18cd67298c",abi:[{type:"function",name:"COMPLETION_BPS",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{type:"function",name:"completionPrice",inputs:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"lower",type:"int24",internalType:"int24"},{name:"sell0",type:"bool",internalType:"bool"}],outputs:[{name:"",type:"uint160",internalType:"uint160"}],stateMutability:"view"},{type:"function",name:"MAX_FEE_BPS",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{type:"function",name:"MAX_LEVELS",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{type:"function",name:"MIN_CAP_SPAN",inputs:[],outputs:[{name:"",type:"uint32",internalType:"uint32"}],stateMutability:"view"},{type:"function",name:"activeBandCount",inputs:[{name:"pool",type:"bytes32",internalType:"bytes32"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"currentBucket",inputs:[{name:"",type:"bytes32",internalType:"bytes32"}],outputs:[{name:"",type:"bytes32",internalType:"bytes32"}],stateMutability:"view"},{type:"function",name:"depth",inputs:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"sell0",type:"bool",internalType:"bool"},{name:"from",type:"int24",internalType:"int24"},{name:"count",type:"uint16",internalType:"uint16"}],outputs:[{name:"q",type:"uint160",internalType:"uint160"},{name:"rows",type:"tuple[]",internalType:"struct GroupedOrderHook.Depth[]",components:[{name:"bucket",type:"bytes32",internalType:"bytes32"},{name:"lower",type:"int24",internalType:"int24"},{name:"upper",type:"int24",internalType:"int24"},{name:"sell0",type:"bool",internalType:"bool"},{name:"liquidity",type:"uint128",internalType:"uint128"},{name:"openOrders",type:"uint256",internalType:"uint256"},{name:"amount0",type:"uint256",internalType:"uint256"},{name:"amount1",type:"uint256",internalType:"uint256"}]},{name:"nextTick",type:"int24",internalType:"int24"},{name:"more",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"depthDescending",inputs:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"sell0",type:"bool",internalType:"bool"},{name:"from",type:"int24",internalType:"int24"},{name:"count",type:"uint16",internalType:"uint16"}],outputs:[{name:"q",type:"uint160",internalType:"uint160"},{name:"rows",type:"tuple[]",internalType:"struct GroupedOrderHook.Depth[]",components:[{name:"bucket",type:"bytes32",internalType:"bytes32"},{name:"lower",type:"int24",internalType:"int24"},{name:"upper",type:"int24",internalType:"int24"},{name:"sell0",type:"bool",internalType:"bool"},{name:"liquidity",type:"uint128",internalType:"uint128"},{name:"openOrders",type:"uint256",internalType:"uint256"},{name:"amount0",type:"uint256",internalType:"uint256"},{name:"amount1",type:"uint256",internalType:"uint256"}]},{name:"nextTick",type:"int24",internalType:"int24"},{name:"more",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"feePolicy",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IOrderFeePolicy"}],stateMutability:"view"},{type:"function",name:"generation",inputs:[{name:"",type:"bytes32",internalType:"bytes32"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"getBucket",inputs:[{name:"id",type:"bytes32",internalType:"bytes32"}],outputs:[{name:"",type:"tuple",internalType:"struct GroupedOrderHook.Bucket",components:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"lower",type:"int24",internalType:"int24"},{name:"upper",type:"int24",internalType:"int24"},{name:"sell0",type:"bool",internalType:"bool"},{name:"state",type:"uint8",internalType:"uint8"},{name:"members",type:"uint128",internalType:"uint128"},{name:"liquidity",type:"uint128",internalType:"uint128"},{name:"finalLiquidity",type:"uint128",internalType:"uint128"},{name:"index0",type:"uint256",internalType:"uint256"},{name:"index1",type:"uint256",internalType:"uint256"},{name:"feeReserve0",type:"uint256",internalType:"uint256"},{name:"feeReserve1",type:"uint256",internalType:"uint256"},{name:"principal0",type:"uint128",internalType:"uint128"},{name:"principal1",type:"uint128",internalType:"uint128"},{name:"principalReserve0",type:"uint128",internalType:"uint128"},{name:"principalReserve1",type:"uint128",internalType:"uint128"}]}],stateMutability:"view"},{type:"function",name:"getMarketMinimums",inputs:[{name:"id",type:"bytes32",internalType:"bytes32"}],outputs:[{name:"output0",type:"uint128",internalType:"uint128"},{name:"output1",type:"uint128",internalType:"uint128"}],stateMutability:"view"},{type:"function",name:"getOrder",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",internalType:"struct GroupedOrderHook.Order",components:[{name:"owner",type:"address",internalType:"address"},{name:"bucket",type:"bytes32",internalType:"bytes32"},{name:"liquidity",type:"uint128",internalType:"uint128"},{name:"feeBps",type:"uint16",internalType:"uint16"},{name:"commissionCarry",type:"uint16",internalType:"uint16"},{name:"state",type:"uint8",internalType:"uint8"},{name:"entry0",type:"uint256",internalType:"uint256"},{name:"entry1",type:"uint256",internalType:"uint256"},{name:"debit",type:"uint256",internalType:"uint256"},{name:"correctionInput",type:"uint128",internalType:"uint128"},{name:"correctionNet",type:"uint128",internalType:"uint128"},{name:"net0",type:"uint256",internalType:"uint256"},{name:"net1",type:"uint256",internalType:"uint256"}]}],stateMutability:"view"},{type:"function",name:"getPoolConfig",inputs:[{name:"id",type:"bytes32",internalType:"bytes32"}],outputs:[{name:"key",type:"tuple",internalType:"struct PoolKey",components:[{name:"currency0",type:"address",internalType:"Currency"},{name:"currency1",type:"address",internalType:"Currency"},{name:"fee",type:"uint24",internalType:"uint24"},{name:"tickSpacing",type:"int24",internalType:"int24"},{name:"hooks",type:"address",internalType:"contract IHooks"}]},{name:"width",type:"int24",internalType:"int24"},{name:"minimum0",type:"uint128",internalType:"uint128"},{name:"minimum1",type:"uint128",internalType:"uint128"},{name:"supported",type:"bool",internalType:"bool"},{name:"maxLevels",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{type:"function",name:"lastPrice",inputs:[{name:"pool",type:"bytes32",internalType:"bytes32"}],outputs:[{name:"",type:"uint160",internalType:"uint160"}],stateMutability:"view"},{type:"function",name:"levelBoundary",inputs:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"zeroForOne",type:"bool",internalType:"bool"},{name:"k",type:"uint16",internalType:"uint16"}],outputs:[{name:"limit",type:"uint160",internalType:"uint160"},{name:"levels",type:"uint16",internalType:"uint16"},{name:"limited",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"listOrders",inputs:[{name:"owner",type:"address",internalType:"address"},{name:"cursor",type:"uint256",internalType:"uint256"},{name:"count",type:"uint256",internalType:"uint256"}],outputs:[{name:"ids",type:"uint256[]",internalType:"uint256[]"},{name:"next",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"manager",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IPoolManager"}],stateMutability:"view"},{type:"function",name:"marketKey",inputs:[{name:"token",type:"address",internalType:"address"}],outputs:[{name:"key",type:"tuple",internalType:"struct PoolKey",components:[{name:"currency0",type:"address",internalType:"Currency"},{name:"currency1",type:"address",internalType:"Currency"},{name:"fee",type:"uint24",internalType:"uint24"},{name:"tickSpacing",type:"int24",internalType:"int24"},{name:"hooks",type:"address",internalType:"contract IHooks"}]}],stateMutability:"view"},{type:"function",name:"marketProfile",inputs:[],outputs:[{name:"quote",type:"address",internalType:"address"},{name:"poolFee",type:"uint24",internalType:"uint24"},{name:"tickSpacing",type:"int24",internalType:"int24"},{name:"width",type:"int24",internalType:"int24"},{name:"maxLevels",type:"uint16",internalType:"uint16"},{name:"minimumQuote",type:"uint128",internalType:"uint128"}],stateMutability:"view"},{type:"function",name:"nextOrder",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"orderCount",inputs:[{name:"owner",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"protocolAccrued",inputs:[{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"registeredPools",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"registrar",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"treasury",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"}],writes:["claimBoth","afterSwap","cancel","claim","create","createMarketOrder","enableMarketProfile","openMarket","realize","registerPool","unlockCallback","withdrawCommission"]},grid:{source:"https://tickerspring.com/_next/static/chunks/5785-74ee50b34dadbd7e.js",sourceSha256:"0732bc4cc6ffb8bed6f3df67b2f8e9ab2ec90e431e645eb941dd5e8e5d0df77b",abi:[{type:"function",name:"BUYING",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"CLOSED",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"DELIVER_QUOTE",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"DELIVER_TOKEN",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"DONE",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"SELLING",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"canFlip",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"flippable",inputs:[{name:"ids",type:"uint256[]",internalType:"uint256[]"}],outputs:[{name:"ready",type:"bool[]",internalType:"bool[]"}],stateMutability:"view"},{type:"function",name:"getPosition",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",internalType:"struct LimitStrategy.Position",components:[{name:"owner",type:"address",internalType:"address"},{name:"state",type:"uint8",internalType:"uint8"},{name:"repeat",type:"bool",internalType:"bool"},{name:"sellFirst",type:"bool",internalType:"bool"},{name:"quoteIs0",type:"bool",internalType:"bool"},{name:"maxFeeBps",type:"uint16",internalType:"uint16"},{name:"fills",type:"uint32",internalType:"uint32"},{name:"token",type:"address",internalType:"address"},{name:"buyLower",type:"int24",internalType:"int24"},{name:"sellLower",type:"int24",internalType:"int24"},{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"orderId",type:"uint256",internalType:"uint256"},{name:"idleQuote",type:"uint256",internalType:"uint256"},{name:"idleToken",type:"uint256",internalType:"uint256"}]}],stateMutability:"view"},{type:"function",name:"hook",inputs:[],outputs:[{name:"",type:"address",internalType:"contract GroupedOrderHook"}],stateMutability:"view"},{type:"function",name:"listPositions",inputs:[{name:"owner",type:"address",internalType:"address"},{name:"cursor",type:"uint256",internalType:"uint256"},{name:"count",type:"uint256",internalType:"uint256"}],outputs:[{name:"ids",type:"uint256[]",internalType:"uint256[]"},{name:"next",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"nextPosition",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"positionCount",inputs:[{name:"owner",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"quote",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"}],writes:["close","collect","flip","open","openWithMarket","setRepeat"]},spring:{source:"https://tickerspring.com/_next/static/chunks/9073-ce348764549e4d43.js",sourceSha256:"e3013c1d0328f1fabe4342df85d141b06af1120bd6c3571ad328211dbc277980",abi:[{type:"function",name:"ACTIVE",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"CLOSED",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"DEFERRED",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"DELIVER_QUOTE",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"DELIVER_TOKEN",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"DONE",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"FILLED",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"FINISHING",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"HEADROOM_BPS",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{type:"function",name:"LAST_PART_DROP_BPS",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{type:"function",name:"MAX_GAIN_BPS",inputs:[],outputs:[{name:"",type:"uint32",internalType:"uint32"}],stateMutability:"view"},{type:"function",name:"MAX_LEVELS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MAX_PARTS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MAX_PLACEMENTS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MIN_SHARE_BPS",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{type:"function",name:"OPEN_BAD_TERMS",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"OPEN_LAST_PART_TOO_SMALL",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"OPEN_LEVEL_TOO_SMALL",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"OPEN_OK",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"OPEN_UNSUPPORTED",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"PENDING",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"READY_BUY_FILLED",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"READY_PLACE",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"READY_TP_FILLED",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"RESTING",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"TP_EMPTY",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"TP_PLANNED",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"TP_RESTING",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"TP_SOLD",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"UNARMED",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"WAITING",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"WAIT_FEE",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"WAIT_HOOK",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"WAIT_ORDER",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"WAIT_PAUSED",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"WAIT_PRICE",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"WAIT_SIZE",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"checkOpen",inputs:[{name:"o",type:"tuple",internalType:"struct SpringLadder.Open",components:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"buyLowers",type:"int24[]",internalType:"int24[]"},{name:"amounts",type:"uint128[]",internalType:"uint128[]"},{name:"shareBps",type:"uint16[]",internalType:"uint16[]"},{name:"gainBps",type:"uint32[]",internalType:"uint32[]"},{name:"repeat",type:"bool",internalType:"bool"},{name:"maxFeeBps",type:"uint16",internalType:"uint16"},{name:"deadline",type:"uint64",internalType:"uint64"},{name:"tag",type:"bytes32",internalType:"bytes32"}]}],outputs:[{name:"code",type:"uint8",internalType:"uint8"},{name:"index",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"getPosition",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"p",type:"tuple",internalType:"struct SpringLadder.Position",components:[{name:"owner",type:"address",internalType:"address"},{name:"state",type:"uint8",internalType:"uint8"},{name:"quoteIs0",type:"bool",internalType:"bool"},{name:"repeat",type:"bool",internalType:"bool"},{name:"merged",type:"bool",internalType:"bool"},{name:"levelCount",type:"uint8",internalType:"uint8"},{name:"partCount",type:"uint8",internalType:"uint8"},{name:"maxFeeBps",type:"uint16",internalType:"uint16"},{name:"width",type:"int24",internalType:"int24"},{name:"token",type:"address",internalType:"address"},{name:"cycle",type:"uint32",internalType:"uint32"},{name:"coveredMask",type:"uint16",internalType:"uint16"},{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"invTokens",type:"uint256",internalType:"uint256"},{name:"invCost",type:"uint256",internalType:"uint256"},{name:"invGross",type:"uint256",internalType:"uint256"},{name:"reserveQuote",type:"uint256",internalType:"uint256"},{name:"profitQuote",type:"uint256",internalType:"uint256"},{name:"lossQuote",type:"uint256",internalType:"uint256"},{name:"spareTokens",type:"uint256",internalType:"uint256"},{name:"roundSpent",type:"uint256",internalType:"uint256"},{name:"roundProceeds",type:"uint256",internalType:"uint256"},{name:"roundProfit",type:"uint256",internalType:"uint256"}]},{name:"ls",type:"tuple[]",internalType:"struct SpringLadder.Level[]",components:[{name:"amount",type:"uint128",internalType:"uint128"},{name:"armed",type:"uint128",internalType:"uint128"},{name:"lower",type:"int24",internalType:"int24"},{name:"state",type:"uint8",internalType:"uint8"},{name:"credited",type:"bool",internalType:"bool"},{name:"orderId",type:"uint256",internalType:"uint256"}]},{name:"xs",type:"tuple[]",internalType:"struct SpringLadder.Part[]",components:[{name:"shareBps",type:"uint16",internalType:"uint16"},{name:"gainBps",type:"uint32",internalType:"uint32"},{name:"state",type:"uint8",internalType:"uint8"},{name:"credited",type:"bool",internalType:"bool"},{name:"lower",type:"int24",internalType:"int24"},{name:"orderId",type:"uint256",internalType:"uint256"},{name:"tokens",type:"uint256",internalType:"uint256"},{name:"cost",type:"uint256",internalType:"uint256"},{name:"gross",type:"uint256",internalType:"uint256"}]}],stateMutability:"view"},{type:"function",name:"hook",inputs:[],outputs:[{name:"",type:"address",internalType:"contract GroupedOrderHook"}],stateMutability:"view"},{type:"function",name:"lastPartMinimum",inputs:[{name:"o",type:"tuple",internalType:"struct SpringLadder.Open",components:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"buyLowers",type:"int24[]",internalType:"int24[]"},{name:"amounts",type:"uint128[]",internalType:"uint128[]"},{name:"shareBps",type:"uint16[]",internalType:"uint16[]"},{name:"gainBps",type:"uint32[]",internalType:"uint32[]"},{name:"repeat",type:"bool",internalType:"bool"},{name:"maxFeeBps",type:"uint16",internalType:"uint16"},{name:"deadline",type:"uint64",internalType:"uint64"},{name:"tag",type:"bytes32",internalType:"bytes32"}]}],outputs:[{name:"dropBps",type:"uint16",internalType:"uint16"},{name:"minGainBps",type:"uint32",internalType:"uint32"}],stateMutability:"view"},{type:"function",name:"levelMinimum",inputs:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"lower",type:"int24",internalType:"int24"},{name:"shareBps",type:"uint16[]",internalType:"uint16[]"},{name:"gainBps",type:"uint32[]",internalType:"uint32[]"},{name:"maxFeeBps",type:"uint16",internalType:"uint16"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"listPositions",inputs:[{name:"owner",type:"address",internalType:"address"},{name:"cursor",type:"uint256",internalType:"uint256"},{name:"count",type:"uint256",internalType:"uint256"}],outputs:[{name:"ids",type:"uint256[]",internalType:"uint256[]"},{name:"next",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"manager",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IPoolManager"}],stateMutability:"view"},{type:"function",name:"nextPosition",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"planFor",inputs:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"tokens",type:"uint256",internalType:"uint256"},{name:"cost",type:"uint256",internalType:"uint256"},{name:"gross",type:"uint256",internalType:"uint256"},{name:"shareBps",type:"uint16[]",internalType:"uint16[]"},{name:"gainBps",type:"uint32[]",internalType:"uint32[]"},{name:"feeBps",type:"uint16",internalType:"uint16"}],outputs:[{name:"ok",type:"bool",internalType:"bool"},{name:"merged",type:"bool",internalType:"bool"},{name:"lowers",type:"int24[]",internalType:"int24[]"}],stateMutability:"view"},{type:"function",name:"positionCount",inputs:[{name:"owner",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"previewTakeProfit",inputs:[{name:"pool",type:"bytes32",internalType:"bytes32"},{name:"buyLowers",type:"int24[]",internalType:"int24[]"},{name:"amounts",type:"uint128[]",internalType:"uint128[]"},{name:"shareBps",type:"uint16[]",internalType:"uint16[]"},{name:"gainBps",type:"uint32[]",internalType:"uint32[]"},{name:"feeBps",type:"uint16",internalType:"uint16"}],outputs:[{name:"rows",type:"tuple[]",internalType:"struct SpringLadder.Preview[]",components:[{name:"cost",type:"uint256",internalType:"uint256"},{name:"gross",type:"uint256",internalType:"uint256"},{name:"tokens",type:"uint256",internalType:"uint256"},{name:"ok",type:"bool",internalType:"bool"},{name:"merged",type:"bool",internalType:"bool"},{name:"lowers",type:"int24[]",internalType:"int24[]"},{name:"deferMask",type:"uint16",internalType:"uint16"}]}],stateMutability:"view"},{type:"function",name:"quote",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"readySync",inputs:[{name:"ids",type:"uint256[]",internalType:"uint256[]"}],outputs:[{name:"masks",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{type:"function",name:"roundEndOf",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"has",type:"bool",internalType:"bool"},{name:"band",type:"int24",internalType:"int24"},{name:"defers",type:"uint16",internalType:"uint16"},{name:"rearms",type:"uint16",internalType:"uint16"}],stateMutability:"view"}],writes:["close","collect","open","place","setRepeat","sync"],address:"0xeb1D1c0C9176FFf679076C8E438A33581Ad1ad2E"},basket_vault:{source:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",address:"0xb01B26D72EB3a5d7846C36fc21e4e3B96994DaF2",abi:[{name:"getPoolTokens",type:"function",stateMutability:"view",inputs:[{type:"address",name:"pool"}],outputs:[{type:"address[]",name:"tokens"}]},{name:"getPoolTokenInfo",type:"function",stateMutability:"view",inputs:[{type:"address",name:"pool"}],outputs:[{type:"address[]",name:"tokens"},{type:"tuple[]",name:"tokenInfo",components:[{type:"uint8",name:"tokenType"},{type:"address",name:"rateProvider"},{type:"bool",name:"paysYieldFees"}]},{type:"uint256[]",name:"balancesRaw"},{type:"uint256[]",name:"lastBalancesLiveScaled18"}]},{name:"isPoolRegistered",type:"function",stateMutability:"view",inputs:[{type:"address",name:"pool"}],outputs:[{type:"bool"}]},{name:"isPoolInitialized",type:"function",stateMutability:"view",inputs:[{type:"address",name:"pool"}],outputs:[{type:"bool"}]},{name:"isPoolPaused",type:"function",stateMutability:"view",inputs:[{type:"address",name:"pool"}],outputs:[{type:"bool"}]},{name:"isPoolInRecoveryMode",type:"function",stateMutability:"view",inputs:[{type:"address",name:"pool"}],outputs:[{type:"bool"}]},{name:"getActionId",type:"function",stateMutability:"view",inputs:[{type:"bytes4",name:"selector"}],outputs:[{type:"bytes32"}]},{name:"isVaultPaused",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"bool"}]},{name:"getPoolRoleAccounts",type:"function",stateMutability:"view",inputs:[{type:"address",name:"pool"}],outputs:[{type:"tuple",components:[{type:"address",name:"pauseManager"},{type:"address",name:"swapFeeManager"},{type:"address",name:"poolCreator"}]}]},{name:"getStaticSwapFeePercentage",type:"function",stateMutability:"view",inputs:[{type:"address",name:"pool"}],outputs:[{type:"uint256"}]},{name:"getProtocolFeeController",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"address"}]},{name:"getAuthorizer",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"address"}]},{name:"getReservesOf",type:"function",stateMutability:"view",inputs:[{type:"address",name:"token"}],outputs:[{type:"uint256"}]}],writes:["disableRecoveryMode","pausePool","unpausePool","setStaticSwapFeePercentage"]},basket_factory:{source:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",address:"0x9400a5BBdcAF5564cEb86185d07321cAefB65B41",abi:[{name:"isPoolFromFactory",type:"function",stateMutability:"view",inputs:[{type:"address",name:"pool"}],outputs:[{type:"bool"}]},{name:"getVault",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"address"}]}],writes:["create"]},basket_maker:{source:"https://tickerspring.com/_next/static/chunks/3201-fc657651ab7ba4d4.js",address:"0xEF8C2341848F1E7CB25631e4bFD6f36B0C46f665",abi:[{name:"poolSalt",type:"function",stateMutability:"pure",inputs:[{type:"address",name:"caller"},{type:"bytes32",name:"salt"}],outputs:[{type:"bytes32"}]},{name:"vault",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"address"}]},{name:"router",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"address"}]},{name:"permit2",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"address"}]},{name:"factory",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"address"}]},{name:"kyberRouter",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"address"}]},{name:"kyberRouterCodeHash",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"bytes32"}]},{name:"weth",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"address"}]},{name:"admin",type:"function",stateMutability:"view",inputs:[],outputs:[{type:"address"}]}],writes:["make"]}};function Q(){throw new f("Use a published read function and its exact arguments from tickerspring_contract_read. Integers are decimal strings; writes are not accepted.")}function Xe(e,t){if(e.type.endsWith("[]"))return(!Array.isArray(t)||t.length>100)&&Q(),t.map(n=>Xe({...e,type:e.type.slice(0,-2)},n));if(e.type==="tuple"){let n=a.object(t),s=e.components;return a.inputs(n,s.map(r=>r.name)),Object.fromEntries(s.map(r=>[r.name,Xe(r,n[r.name])]))}if(/^u?int\d*$/.test(e.type)){(typeof t!="string"||!/^-?\d+$/.test(t)||e.type.startsWith("uint")&&t.startsWith("-"))&&Q();let n=BigInt(t),s=Number(e.type.replace(/\D/g,"")||256),r=e.type.startsWith("uint")?0n:-(1n<<BigInt(s-1)),u=e.type.startsWith("uint")?(1n<<BigInt(s))-1n:(1n<<BigInt(s-1))-1n;return(n<r||n>u)&&Q(),n}if(e.type==="address")return a.address(t);if(e.type==="bool")return typeof t!="boolean"&&Q(),t;if(e.type==="string")return a.text(t);let i=/^bytes(\d*)$/.exec(e.type);if(i)return(typeof t!="string"||!/^0x(?:[a-fA-F0-9]{2})*$/.test(t)||i[1]&&t.length!==2+Number(i[1])*2)&&Q(),t;Q()}function Pt(e){return{name:"tickerspring_contract_read",inputSchema:{type:"object",properties:{kind:{enum:["vault","limit","grid","spring","basket_vault","basket_factory","basket_maker"],description:"Which published TickerSpring contract to read: an official agent vault, the limit-order hook, the grid strategy, the spring contract, or the basket vault, factory or maker."},address:{...ue,description:'Address of the pinned official agent vault to read. Only for kind "vault"; other kinds use their fixed contract and reject this.'},function:{type:"string",description:"Name of a published read function. Omit it to list the published read functions for this kind."},arguments:{type:"array",maxItems:16,description:"Arguments for the function, in order. Integers are decimal strings, addresses are 0x strings. Omit when listing functions."}},required:["kind"],additionalProperties:!1},execute:async(t,i)=>{try{a.address(i),a.inputs(t,["kind","address","function","arguments"]),(typeof t.kind!="string"||!Object.hasOwn(fe,t.kind))&&Q();let n=t.kind,s=fe[n],r;n==="vault"?(r=a.address(t.address),A.vaults.some(b=>c(b.address,r))||Q()):(t.address!==void 0&&Q(),r=xn("address"in s?s.address:n==="limit"?A.contracts.limitOrderHook:A.contracts.gridStrategy));let u=s.abi;if(t.function===void 0)return t.arguments!==void 0&&Q(),{chainId:4663,address:r,source:s.source,functions:u,excludedWrites:s.writes,notice:"Published read ABI only. Excluded write names are an inventory, not executable support. Reads reveal public chain state; they do not verify authorization for a future action."};let o=a.text(t.function),p=u.filter(b=>b.type==="function"&&b.name===o);(p.length!==1||p[0].type!=="function")&&Q();let l=p[0],d=t.arguments??[];(!Array.isArray(d)||d.length!==l.inputs.length)&&Q();let h=l.inputs.map((b,y)=>Xe(b,d[y])),k=await e.clientFor(4663).readContract({address:r,abi:u,functionName:o,args:h});return{chainId:4663,address:r,source:s.source,function:o,data:JSON.parse(JSON.stringify(k,(b,y)=>typeof y=="bigint"?y.toString():y))}}catch(n){throw new f(e.plainError(n))}}}}var Mt={type:"string",pattern:"^\\d+$"},Bn={type:"string",pattern:"^\\d+(\\.\\d+)?$"},En={type:"integer",minimum:1,maximum:90},_t={enum:["any","stock","crypto","utility","meme","unclassified"]},te=e=>({...ue,description:B.address(e)}),ke=(e,t)=>({...Mt,description:`${B.amount("USDG",6,e)} ${t}`}),Ie=e=>({...En,description:e}),Je=e=>({...Bn,description:`${e} in USDG per whole token, as a decimal string. Example: "12.5".`}),Ze={type:"integer",minimum:0,maximum:1e3,description:"Fee in basis points (50 = 0.5%), from 0 to 1000, applied in the backtest or range estimate. Omit to use the provider default."},Ft={type:"boolean",description:"Provider backtest setting needsVolume. Defaults to true."},Sn="Use a published strategy identifier: lowercase letters, digits and hyphens.";function _(e){throw new f(e)}function se(e,t,i){return(typeof e!="number"||!Number.isInteger(e)||e<t||e>i)&&_(`Use an integer from ${t} to ${i}.`),e}function et(e){return typeof e!="boolean"&&_("Use an explicit boolean setting."),e}function ge(e,t){return(typeof e!="string"||!t.includes(e))&&_(`Choose ${t.join(", ")}.`),e}function In(e){let t=a.text(e);return/^[a-z0-9][a-z0-9-]{0,63}$/.test(t)||_("Use an agent slug from tickerspring_agents."),t}function tt(e){let t=a.text(e);return/^(?:[1-9]|[12][0-9]|30)d$/.test(t)||_("Choose a period from 1d to 30d."),t}function pe(e,t){let i=Object.entries(t).filter(([,n])=>n!==void 0).map(([n,s])=>[n,String(s)]);return i.length?`${e}?${new URLSearchParams(i)}`:e}function st(e){if(e&&typeof e=="object"&&!Array.isArray(e)&&Object.hasOwn(e,"decimal")){let t=e.decimal;return/^\d+(\.\d+)?$/.test(t)||_("Use a positive decimal string."),t}return Array.isArray(e)?`[${e.map(st).join(",")}]`:e&&typeof e=="object"?`{${Object.entries(e).filter(([,t])=>t!==void 0).map(([t,i])=>`${JSON.stringify(t)}:${st(i)}`).join(",")}}`:JSON.stringify(e)}var nt=e=>({decimal:a.price(a.text(e))}),it=(e,t)=>({decimal:e.formatAmount(a.positive(t),6)});async function at(e,t,i){let n=await le(e.http,`https://api.tickerspring.com${t}`,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":"Oak-TickerSpring/1.0"},body:st(i)},s=>!!s&&typeof s=="object"&&Object.hasOwn(s,"data"));return(n.data===null||n.data===void 0)&&_("TickerSpring returned no backtest result."),{...q.readResult(t,n.data),notice:"Historical estimates, not executable quotes or promised returns. The provider may log this run. No transaction has been prepared or sent."}}function jt(e){let t=(n,s,r,u)=>({name:`tickerspring_${n}`,inputSchema:{type:"object",properties:s,required:r,additionalProperties:!1},execute:async(o,p)=>{try{return a.address(p),a.inputs(o,Object.keys(s)),await u(o,p)}catch(l){throw new f(e.plainError(l))}}}),i=async n=>{let s=await q.api(e,n);return s==null&&_("TickerSpring has no current data for this query."),q.readResult(n,s)};return[Pt(e),t("stats",{},[],async()=>{let n=await le(e.http,"https://api.tickerspring.com/v1/public/stats",{headers:{"User-Agent":"Oak-TickerSpring/1.0"}},s=>!!s&&typeof s=="object"&&!Array.isArray(s)&&s.version===1&&!!s.tvl);return q.readResult("/v1/public/stats",n)}),t("vault_history",{vault:te("pinned official agent vault"),kind:{enum:["prices","earnings"],description:B.enumValues({prices:"the vault share price history",earnings:"the vault earnings history"})}},["vault","kind"],async n=>{let s=a.address(n.vault);return A.vaults.some(r=>c(r.address,s))||_("Use a pinned TickerSpring agent vault."),i(`/v1/agent/vaults/${s}/${ge(n.kind,["prices","earnings"])}`)}),t("basket_history",{basket:te("basket pool"),days:Ie("Number of days of basket history to read, from 1 to 90. Defaults to 30.")},["basket"],n=>i(pe(`/v1/baskets/${a.address(n.basket)}/history`,{days:se(n.days??30,1,90)}))),t("strategy_tokens",{kind:{enum:["grid","ladder"],description:B.enumValues({grid:"scan tokens for grid strategies",ladder:"scan tokens for ladder strategies"})},limit:{type:"integer",minimum:1,maximum:10,description:"Maximum number of tokens to return, from 1 to 10. Defaults to 5."},category:{..._t,description:'Token category filter; defaults to any. Only for kind "grid"; the ladder scan rejects it.'},include:{enum:["good","all"],description:B.enumValues({good:"only the tokens the provider rates as good for the strategy",all:"all scanned tokens (default)"})}},["kind"],n=>{let s=ge(n.kind,["grid","ladder"]);return s==="ladder"&&n.category!==void 0&&_("The ladder scan does not accept a category filter."),i(pe(`/v1/agent/${s}/tokens`,{limit:se(n.limit??5,1,10),include:ge(n.include??"all",["good","all"]),...s==="grid"?{category:ge(n.category??"any",_t.enum)}:{}}))}),t("ranges",{token:te("token to estimate ranges for"),amount:ke("100000000","Optional budget for the estimate."),days:Ie("Number of days of history to use, from 1 to 90. Defaults to 14."),feeBps:Ze},["token"],n=>i(pe("/v1/agent/ranges",{token:a.address(n.token),days:se(n.days??14,1,90),...n.amount===void 0?{}:{amountUsd:e.formatAmount(a.positive(n.amount),6)},...n.feeBps===void 0?{}:{feeBps:se(n.feeBps,0,1e3)}}))),t("backtest_grid",{token:te("token to backtest"),buyPrice:Je("Grid buy price"),sellPrice:Je("Grid sell price, above the buy price"),amount:ke("100000000","Budget of the backtest, at least 0.01 USDG."),repeat:{type:"boolean",description:"Whether the grid repeats its buy and sell cycle. Defaults to true."},days:Ie("Number of days of history to backtest, from 1 to 90. Defaults to 30."),feeBps:Ze,needsVolume:Ft},["token","buyPrice","sellPrice","amount"],async n=>{let s=nt(n.buyPrice),r=nt(n.sellPrice),[u,o=""]=s.decimal.split("."),[p,l=""]=r.decimal.split("."),d=Math.max(o.length,l.length);return BigInt(`${u}${o.padEnd(d,"0")}`)>=BigInt(`${p}${l.padEnd(d,"0")}`)&&_("The grid sell price must be above its buy price."),BigInt(a.positive(n.amount))<10000n&&_("Backtest at least 0.01 USDG."),at(e,"/v1/agent/backtest/grid",{token:a.address(n.token),buyPrice:s,sellPrice:r,amountUsd:it(e,n.amount),repeat:et(n.repeat??!0),days:se(n.days??30,1,90),needsVolume:et(n.needsVolume??!0),...n.feeBps===void 0?{}:{feeBps:se(n.feeBps,0,1e3)}})}),t("backtest_ladder",{token:te("token to backtest"),side:{enum:["buy","sell"],description:B.enumValues({buy:"a ladder of buy levels",sell:"a ladder of sell levels"})},levels:{type:"array",minItems:1,maxItems:20,description:"Ladder levels to backtest, 1 to 20. Each level has a price and an amount.",items:{type:"object",properties:{price:Je("Level price"),amount:ke("10000000","Budget of this level.")},required:["price","amount"],additionalProperties:!1}},days:Ie("Number of days of history to backtest, from 1 to 90. Defaults to 30."),feeBps:Ze,needsVolume:Ft},["token","side","levels"],n=>{(!Array.isArray(n.levels)||n.levels.length<1||n.levels.length>20)&&_("Choose 1 to 20 backtest levels.");let s=n.levels.map(r=>{let u=a.object(r);return a.inputs(u,["price","amount"]),{price:nt(u.price),amountUsd:it(e,u.amount)}});return at(e,"/v1/agent/backtest/ladder",{token:a.address(n.token),side:ge(n.side,["buy","sell"]),levels:s,days:se(n.days??30,1,90),needsVolume:et(n.needsVolume??!0),...n.feeBps===void 0?{}:{feeBps:se(n.feeBps,0,1e3)}})}),t("strategy_finder",{amount:ke("100000000","Optional budget for the search."),period:{type:"string",description:'Look-back period from 1d to 30d, such as "7d". Defaults to 7d.'},token:te("token to search strategies for"),category:{type:"string",description:"Optional published category identifier: lowercase letters, digits and hyphens."},strategy:{type:"string",description:"Optional published strategy identifier: lowercase letters, digits and hyphens."}},[],n=>i(pe("/v1/strategy-finder",{...n.amount===void 0?{}:{budget:e.formatAmount(a.positive(n.amount),6)},period:tt(n.period??"7d"),...n.token===void 0?{}:{token:a.address(n.token)},...Object.fromEntries(["category","strategy"].filter(s=>n[s]!==void 0).map(s=>{let r=a.text(n[s]);return/^[a-z][a-z0-9-]{0,39}$/.test(r)||_("Use a published strategy or category identifier."),[s,r]}))}))),t("strategy_detail",{token:te("token to read strategy details for"),period:{type:"string",description:'Look-back period from 1d to 30d, such as "7d". Defaults to 7d.'}},["token"],n=>i(pe(`/v1/strategy-finder/${a.address(n.token)}`,{period:tt(n.period??"7d")}))),t("strategy_track_record",{},[],()=>i("/v1/strategy-finder/track-record")),t("backtest_strategy",{token:te("token to backtest"),strategy:{type:"string",description:Sn},variant:{type:"string",description:"Optional published variant identifier of the strategy: letters, digits, dots, underscores and hyphens."},settings:{type:"object",description:"Not supported yet: any value is rejected. Use variant to pick a published configuration."},amount:ke("100000000","Optional budget of the backtest."),days:{type:"integer",minimum:21,maximum:60,description:"Number of days of history to backtest, from 21 to 60. Defaults to 60."},period:{type:"string",description:'Period label from 1d to 30d, such as "7d". Defaults to 7d.'}},["token","strategy"],n=>{let s=a.text(n.strategy);/^[a-z][a-z0-9-]{0,39}$/.test(s)||_("Use a published strategy identifier."),n.settings!==void 0&&_("Custom strategy settings require a published per-strategy schema. Use a published variant meanwhile.");let r=n.variant===void 0?void 0:a.text(n.variant);return r!==void 0&&!/^[a-zA-Z0-9._-]{1,80}$/.test(r)&&_("Use a published strategy variant identifier."),at(e,"/v1/strategy-finder/backtest",{token:a.address(n.token),strategy:s,...r===void 0?{}:{variant:r},...n.amount===void 0?{}:{budgetUsd:it(e,n.amount)},days:se(n.days??60,21,60),period:tt(n.period??"7d")})}),t("agents",{},[],()=>i("/v1/agents")),t("agent_vault",{slug:{type:"string",description:"Agent slug from tickerspring_agents: lowercase letters, digits and hyphens."}},["slug"],(n,s)=>i(pe(`/v1/agents/${In(n.slug)}/vault`,{owner:s}))),t("trade_directory",{},[],()=>i("/v1/trade")),t("trade_token",{token:te("token to look up")},["token"],n=>i(pe("/v1/trade/token",{address:a.address(n.token)}))),t("trade_quotes",{tokenIn:te("token being sold"),tokenOut:te("token being bought"),amount:{...Mt,description:'Amount of tokenIn in base units (use the decimals of tokenIn). Example: "1000000" = 1 USDG when tokenIn is USDG (6 decimals).'}},["tokenIn","tokenOut","amount"],n=>i(pe("/v1/trade/quotes",{tokenIn:a.address(n.tokenIn),tokenOut:a.address(n.tokenOut),amountIn:a.positive(n.amount)}))),t("spring_config",{},[],()=>i("/v1/spring-orders/config")),t("owner_report_card",{},[],async()=>({chainId:4663,url:"https://tickerspring.com/agents",reason:"Private report cards and wallet-attributed strategy attempt counts require the owner personal_sign session. Sign in on the official site in your own wallet. Oak does not accept owner signatures or bearer tokens as tool arguments."})),t("sign_request",{id:{type:"string",description:"Identifier of a stored TickerSpring sign request: 1 to 128 letters, digits, underscores or hyphens."}},["id"],async(n,s)=>{let r=a.text(n.id);/^[a-zA-Z0-9_-]{1,128}$/.test(r)||_("Provide a stored TickerSpring sign-request ID.");let u=`/v1/agent/sign-requests/${r}`,o=a.object(await q.api(e,u)),p=a.object(o.bundle);(!c(p.owner,s)||p.chainId!==4663)&&_("This sign request does not belong to the current wallet on chain 4663.");let l=Date.parse(a.text(p.expiresAt));return Number.isFinite(l)||_("TickerSpring returned no valid sign-request expiration."),{...q.readResult(u,o),expired:l<=Date.now(),notice:"Stored provider data only. This does not authorize sending its calldata. Prepare the action again through the matching Oak tool and inspect its current preview."}}),t("instructions",{document:{enum:["skill","api","privy","turnkey","openapi"],description:B.enumValues({skill:"the agent skill guide",api:"the API reference",privy:"the Privy wallet policy",turnkey:"the Turnkey wallet policy",openapi:"the OpenAPI document"})}},["document"],async n=>{let s=ge(n.document,["skill","api","privy","turnkey","openapi"]);return{chainId:4663,url:`https://api.tickerspring.com${{skill:"/v1/agent/skill.md",api:"/v1/agent/llms.txt",privy:"/v1/agent/policies/privy",turnkey:"/v1/agent/policies/turnkey",openapi:"/v1/agent/openapi.json"}[s]}`,notice:"Official reference document. Wallet policies are for external wallet operators; Oak uses its own local signing guards. No transaction has been prepared or sent."}})]}import{encodeFunctionData as Rt,getAddress as On,parseAbi as Cn}from"viem";var Lt=On(A.contracts.limitOrderHook),qt=Cn(["function realize(uint256 id)","function claim(uint256 id,bool currency0)"]);function Pn(e){a.inputs(e,["action","id","currency0"]);let t=BigInt(a.integer(e.id));if(e.action==="realize"){if(e.currency0!==void 0)throw new f("Use currency0 only for a single-currency claim.");return Rt({abi:qt,functionName:"realize",args:[t]})}if(e.action!=="claim"||typeof e.currency0!="boolean")throw new f("Choose realize, or claim with an explicit currency0 boolean. Use tickerspring_claim to claim both currencies.");return Rt({abi:qt,functionName:"claim",args:[t,e.currency0]})}async function _n(e,t,i){let n=a.object(await e.clientFor(4663).readContract({address:Lt,abi:fe.limit.abi,functionName:"getOrder",args:[BigInt(a.integer(t))]}));if(!c(n.owner,i))throw new f("This limit order does not belong to the current wallet.")}function Nt(e){return{name:"tickerspring_order_accounting",inputSchema:{type:"object",properties:{action:{enum:["realize","claim"],description:B.enumValues({realize:"update the settled accounting of the order",claim:"claim one currency of the order"})},id:{type:"string",pattern:"^\\d+$",description:B.id("limit order")},currency0:{type:"boolean",description:"Only for claim, where it is required: true claims currency0, false claims currency1. Currency order follows token address order. Not allowed for realize."}},required:["action","id"],additionalProperties:!1},execute:async(t,i)=>{try{a.address(i);let n=Pn(t);await _n(e,t.id,i);let s=[e.unsignedTx({to:Lt,data:n,value:"0",chainId:4663,description:t.action==="realize"?`Realize accounting for order ${String(t.id)}`:`Claim currency${t.currency0?"0":"1"} for order ${String(t.id)}`})],r=await e.preview(s,i);return{txs:s,from:i,id:a.integer(t.id),action:t.action,preview:r,source:fe.limit.source,summary:`${s[0].description}. Realization updates settled bucket accounting; it does not guarantee a new fill or claim proceeds. Claims go to the stored order owner. Currency order follows token address order. This direct contract call is not filed by the provider prepare API for report-card attribution. No transaction has been sent. ${r.summary}`}}catch(n){throw new f(e.plainError(n))}}}}var Pe="https://api.tickerspring.com",zt={type:"string",pattern:"^\\d+$"},L=e=>({...ue,description:B.address(e)}),N=e=>({...zt,description:e}),ot=e=>({...zt,description:B.id(e)}),Ce=e=>({type:"string",description:`${e} in USDG per whole token, as a decimal string. Example: "12.5".`}),Rn={type:"string",pattern:"^[a-z0-9][a-z0-9._-]{0,39}$",description:"Optional label of 1 to 40 lowercase letters, digits, dots, underscores or hyphens, sent to TickerSpring to attribute this action to an agent."},ve=e=>({type:"integer",minimum:1,maximum:500,description:`Allowed slippage in basis points (50 = 0.5%), from 1 to 500. Defaults to ${e}.`}),Ut=(e,t)=>({type:"integer",minimum:100,maximum:e,description:`Weight in basis points (50 = 0.5%; 5000 = 50%), from 100 to ${e}. ${t}`}),Gt={enum:[30,100],description:"Basket swap fee in basis points (50 = 0.5%): 30 or 100. Defaults to 100."},qn={action:{enum:["open","close","setRepeat","collect"],description:B.enumValues({open:"open a new position",close:"exit a position",setRepeat:"turn repeating on or off",collect:"take available proceeds"})},token:L("token traded against USDG; required for open"),buyPrice:Ce("Buy price, required for open"),sellPrice:Ce("Sell price above the buy price, required for open"),amount:N(`${B.amount("USDG",6,"11000000")} Required for open; at least 11 USDG.`),repeat:{type:"boolean",description:"Required for open and setRepeat: whether the strategy repeats its cycle."},startingPrice:Ce("Starting price for a new market, required only when the token has no grid market yet"),id:ot("strategy position; required for close, collect and setRepeat"),min0:N('Close only: minimum currency0 to receive, in base units of that token (use its decimals). Example: "1000000" = 1 USDG if currency0 is USDG (6 decimals). Currency order follows token address order.'),min1:N('Close only: minimum currency1 to receive, in base units of that token (use its decimals). Example: "1000000" = 1 USDG if currency1 is USDG (6 decimals). Currency order follows token address order.')},re={address:X(A.contracts.usdg),symbol:"USDG",decimals:6,chainId:E},_e=K.vault,Ln=K.basket,Oe=X(A.contracts.basketZap);function g(e){throw new f(e)}async function G(e,t){return(await le(e.http,`${Pe}${t}`,{headers:{"User-Agent":"Oak-TickerSpring/1.0"}},n=>!!n&&typeof n=="object"&&Object.hasOwn(n,"data"))).data}function W(e,t){return{chainId:E,source:`${Pe}${e}`,data:t}}function Te(e){let t=e.slippageBps??100;return(typeof t!="number"||!Number.isInteger(t)||t<1||t>500)&&g("Use slippageBps from 1 to 500."),t}function we(e){let t=BigInt(a.positive(e));return t<=1n&&g("Provide a minimum output greater than 1 base unit."),t}function Ae(e,t,i,n,s){let r=e.at(-1),u=Ht({abi:i,functionName:n,args:s});(!r||!c(r.to,t)||!U(r.data,u))&&g("TickerSpring calldata does not match the requested action.")}function ut(e,t,i,n){if(e.length!==1&&e.length!==2&&g("TickerSpring returned unexpected transaction steps."),e.length===2){let s=e[0],r=Ht({abi:jn,functionName:"approve",args:[i,BigInt(n)]});(!c(s.to,t)||!U(s.data,r))&&g("TickerSpring approval must match the exact input amount and spender.")}}function Vt(e){let t=X(a.address(e));return A.vaults.some(i=>c(i.address,t))||g("This vault is not pinned to an official TickerSpring agent release in Oak."),t}async function ct(e,t){let i=Vt(t),n=a.object(await G(e,`/v1/agent/vaults/${i}`)),s=a.object(n.agentVault),r=A.vaults.find(u=>c(u.address,i));return(!c(n.vault,i)||!c(s.address,i)||s.release!==r.release||s.audited!==!0||s.shareDecimals!==12||!c(a.object(s.asset).address,re.address)||s.stale!==!1)&&g("TickerSpring vault identity, release or current state could not be verified."),{address:i,data:n,entry:s,share:a.token({address:i,symbol:s.symbol,decimals:12})}}var Nn="The fee APR counts only trading fees the vault collected over the last 7 days, at that pace. It does not include gains or losses from the stock's price. Your return is the change in the vault's share price; ask for this vault's details to see it.";function Un(e){let t=e.token,i=t&&typeof t=="object"?t.symbol:void 0;return typeof i=="string"&&/^[A-Za-z0-9.]{1,12}$/.test(i)?i:"the stock"}function Gn(e){return`A TickerSpring vault holds about half ${e} and half USDG inside a price band and earns trading fees. As ${e} rises the vault sells it for USDG, so it gains less than holding ${e}; as it falls the vault buys more.`}function Kt(e){return typeof e=="number"&&Number.isInteger(e)&&e>=0&&e<=1e4?`Vault fee: ${e/100}% of the trading fees the vault collects (not of your deposit).`:null}var Wt="Your deposit is waiting for TickerSpring's keeper to fill it. You hold no vault shares until then.";function Yt(e){return{realReturnNote:Nn,feeNote:Kt(e.feeBps),bandNote:Gn(Un(e))}}function $n(e){let t=e.vaults.filter(n=>!!n&&typeof n=="object");if(t.some(n=>typeof n.shares=="string"&&/[1-9]/.test(n.shares)))return!1;let i=a.object(e.totals).pendingDepositsUsd;return typeof i=="string"&&/^\d+(\.\d+)?$/.test(i)&&/[1-9]/.test(i)?!0:t.some(n=>Array.isArray(n.pendingDeposits)&&n.pendingDeposits.length>0)}var Hn=168*3600*1e3;function zn(e){if(!e||typeof e!="object"||!Array.isArray(e.points))return null;let{intervalSeconds:t,points:i}=e,n=typeof t=="number"&&t>0?t:600,s=Math.min(2*n,3600)*1e3,r=i.flatMap(l=>{if(!l||typeof l!="object")return[];let{date:d,sharePrice:h}=l,k=typeof d=="string"?Date.parse(d):NaN,b=typeof h=="string"&&/^\d+(\.\d+)?$/.test(h)?Number(h):NaN;return Number.isFinite(k)&&b>0?[{at:k,date:d,sharePrice:h,price:b}]:[]}).sort((l,d)=>l.at-d.at),u=r.at(-1);if(!u)return null;let o=u.at-Hn,p=r.filter(l=>l.at<=o+s).reduce((l,d)=>l===void 0||Math.abs(d.at-o)<Math.abs(l.at-o)?d:l,void 0);return p?{changePct:Number(((u.price/p.price-1)*100).toFixed(2)),from:p.sharePrice,to:u.sharePrice,fromDate:p.date,toDate:u.date,basis:"share price"}:null}function Vn(e,t,i){let n=zn(t.history);return{...W(e,{...t,agentVault:{...i,...Yt(i)}}),shareReturn7d:n,shareReturnNote:n===null?null:`Your return from ${n.fromDate} to ${n.toDate}: the vault's share price changed by ${n.changePct}% (from ${n.from} to ${n.to}). This is the change in what your shares are worth, not a fee rate.`}}async function Qt(e,t){let i=`/v1/agent/accounts/${t}`,n=a.object(await G(e,i));return(!c(n.owner,t)||!Array.isArray(n.unavailable)||n.unavailable.length||n.limitOrdersComplete!==!0||n.gridsComplete!==!0||n.ladderStrategiesComplete!==!0||!["vaults","baskets","limitOrders","grids","ladderStrategies"].every(s=>Array.isArray(n[s]))||!Number.isFinite(Date.parse(a.text(n.asOf)))||a.object(n.totals).complete!==!0)&&g("TickerSpring could not return the complete account for this wallet. Retry before acting."),{...W(i,n),pendingDepositNote:$n(n)?Wt:null,originalInputIsNotRemainingPrincipal:!0,remainingPrincipal:null,remainingPrincipalReason:"The published account schema does not expose an authoritative per-order refundable-principal quote. Use tickerspring_order_exit_preview for current simulated cancellation returns; never use original debit as remaining principal."}}async function Kn(e,t,i){a.inputs(t,["vault","amount","minShares","slippageBps","agentTag"]);let n=a.positive(t.amount),s=we(t.minShares),r=Te(t),u=await ct(e,t.vault);(u.entry.status!=="open"||u.entry.depositsOpen!==!0)&&g(`TickerSpring vault is not taking deposits: ${a.text(u.entry.statusReason)}`),BigInt(n)<BigInt(a.integer(u.entry.minDepositUnits))&&g("Increase the deposit to the vault minimum shown by tickerspring_vaults."),u.entry.remainingCapacityUnits!==null&&BigInt(n)>BigInt(a.integer(u.entry.remainingCapacityUnits))&&g("Reduce the deposit to the vault remaining capacity.");let o=await a.request(e,"/v1/agent/prepare/vault-deposit",{owner:i,...a.attribution(t),vault:u.address,amount:e.formatAmount(n,6),slippageBps:r}),p=a.prepared(e,o,i,"vault-deposit"),l=a.object(p.bundle.params),d=we(l.minShares);return(!c(l.vault,u.address)||!c(l.receiver,i)||a.integer(l.assets)!==n||d<s)&&g("TickerSpring deposit does not preserve the requested vault, amount, receiver or minimum shares."),ut(p.txs,re.address,u.address,n),Ae(p.txs,u.address,_e,"requestDeposit",[BigInt(n),i,d]),a.result(e,p,i,{input:{token:re,amount:n},minimumOutput:{token:u.share,amount:d.toString()}},[Kt(u.entry.feeBps),`Deposit creates a keeper request, not immediately owned shares. After the request is mined: ${Wt} Monitor tickerspring_account; cancel an unfilled request with tickerspring_vault_cancel_deposit.`].filter(Boolean).join(" "))}async function Wn(e,t,i){a.inputs(t,["vault","id","agentTag"]);let n=Vt(t.vault),s=a.integer(t.id),r=a.prepared(e,await a.request(e,"/v1/agent/prepare/vault-cancel-deposit",{owner:i,...a.attribution(t),vault:n,id:s}),i,"vault-cancel-deposit");return r.txs.length!==1&&g("TickerSpring returned unexpected cancellation steps."),Ae(r.txs,n,_e,"cancelDeposit",[BigInt(s)]),a.result(e,r,i,{vault:n,id:s},"Cancel only a pending deposit. Verify refunded USDG and request status with tickerspring_account and balances.")}async function Yn(e,t,i){a.inputs(t,["vault","shares","mode","minUsdg","minToken","slippageBps","agentTag"]);let n=a.positive(t.shares),s=Te(t);t.mode==="queue"&&g("Queued vault withdrawals are unavailable: no current official agent vault advertises a redeemQueue, and its ABI is not published in the wallet policy. Use a listed direct mode or the official UI."),t.mode!=="usdg"&&t.mode!=="in-kind"&&g("Choose usdg or in-kind withdrawal mode.");let r=BigInt(a.integer(t.minUsdg)),u=t.mode==="in-kind"?BigInt(a.integer(t.minToken)):0n;r+u<=1n&&g("Provide protected withdrawal minima greater than 1 base unit in total."),t.mode==="usdg"&&t.minToken!==void 0&&g("Use minToken only for in-kind withdrawals.");let o=await ct(e,t.vault);(!Array.isArray(o.entry.withdrawModes)||!o.entry.withdrawModes.includes(t.mode))&&g("That withdrawal mode is not currently offered by this vault.");let p=a.prepared(e,await a.request(e,"/v1/agent/prepare/vault-withdraw",{owner:i,...a.attribution(t),vault:o.address,shares:e.formatAmount(n,12),mode:t.mode,slippageBps:s}),i,"vault-withdraw");(p.txs.length!==1||!c(p.txs[0].to,o.address))&&g("TickerSpring returned unexpected withdrawal steps.");let l=Mn({abi:_e,data:p.txs[0].data}),d=l.args;if((d[0]!==BigInt(n)||!c(d[1],i)||!c(d[2],i))&&g("TickerSpring withdrawal must redeem the requested shares for this wallet."),t.mode==="in-kind")(l.functionName!=="redeemInKind"||typeof d[3]!="bigint"||typeof d[4]!="bigint"||d[3]<r||d[4]<u)&&g("TickerSpring withdrawal minima do not protect both requested assets.");else{(l.functionName!=="redeem"||typeof d[4]!="bigint"||d[4]<r)&&g("TickerSpring withdrawal minimum does not protect the requested USDG.");let h=a.object(d[3]);c(h.tokenIn,a.address(a.object(o.entry.token).address))||g("TickerSpring withdrawal route must sell only the vault pool token.")}return Ae(p.txs,o.address,_e,l.functionName,d),a.result(e,p,i,{input:{token:o.share,amount:n},mode:t.mode,minimumOutputs:[{token:re,amount:r.toString()},...t.mode==="in-kind"?[{token:a.token(o.entry.token),amount:u.toString()}]:[]]},"Withdrawals consume vault shares. Verify both token balances and remaining shares with tickerspring_account after the receipt.")}async function Qn(e,t,i,n){a.inputs(t,["basket","token","amount","minAmountOut","slippageBps","agentTag"]);let s=X(a.address(t.basket)),r=A.baskets.find(m=>c(m.pool,s));if(!r){let m=a.object(await G(e,`/v1/baskets/${s}`));(!c(m.pool,s)||m.listed!==!1||!c(m.maker,i)||!Array.isArray(m.tokens))&&g("Use a pinned basket, or an unverified basket this wallet created through the pinned BasketMaker.");let v=a.text(m.createdTx);/^0x[0-9a-fA-F]{64}$/.test(v)||g("The basket creation receipt is unavailable.");let T=e.clientFor(E),P=await T.getTransactionReceipt({hash:v}),R=X(A.basketConfig.basketMakerV2),V=P.logs.some(F=>{if(!c(F.address,R))return!1;try{let M=Fn({abi:rt(K.maker),data:F.data,topics:F.topics}),Z=a.object(M.args);return M.eventName==="Made"&&c(Z.pool,s)&&c(Z.maker,i)&&c(Z.recipient,i)}catch{return!1}});(P.status!=="success"||!V||await T.readContract({address:X(A.basketConfig.weightedPoolFactory),abi:rt(K.basketFactory),functionName:"isPoolFromFactory",args:[s]})!==!0)&&g("This basket has no successful creation by the pinned BasketMaker and factory.");let I=m.tokens.map(F=>a.token(F)),$=await T.readContract({address:X(A.basketConfig.vault),abi:rt(K.basketVault),functionName:"getPoolTokens",args:[s]});(new Set(I.map(F=>F.address.toLowerCase())).size!==I.length||!Array.isArray($)||$.length!==I.length||!I.every(F=>$.some(M=>c(M,F.address))))&&g("The unverified basket constituents disagree with its on-chain vault."),r={pool:s,tokens:I}}let u=r,o=t.token===void 0?re:(()=>{let m=X(a.address(t.token));if(c(m,re.address))return re;let v=[...u.tokens,...A.baskets.flatMap(T=>T.tokens)].find(T=>c(T.address,m));return(!v||!u.tokens.some(T=>c(T.address,m))&&v.symbol!=="WETH")&&g("Use USDG, WETH or a constituent of this basket."),a.token(v)})(),p=a.positive(t.amount),l=we(t.minAmountOut),d=Te(t),h=a.token({address:s,symbol:"BPT",decimals:18}),k=n==="buy"?o:h,b=n==="buy"?h:o,y=a.prepared(e,await a.request(e,`/v1/agent/prepare/basket-${n}`,{owner:i,...a.attribution(t),basket:s,amount:e.formatAmount(p,k.decimals),[n==="buy"?"payWith":"receive"]:o.address,slippageBps:d}),i,`basket-${n}`),w=a.object(y.bundle.params),x=we(w.minOut),C=a.futureDeadline(w.deadline);(w.side!==n||!c(w.zap,Oe)||!c(w.pool,s)||!c(w.token,o.address)||!c(w.recipient,i)||a.integer(w.amount)!==p||x<l||!Array.isArray(w.legs))&&g("TickerSpring basket quote does not preserve the requested pool, token, amount, receiver or minimum.");let D=w.legs.map(m=>{let v=a.object(m),T=a.address(v.tokenIn),P=a.address(v.tokenOut);(n==="buy"?!c(T,o.address)||!u.tokens.some(I=>c(I.address,P)):!u.tokens.some(I=>c(I.address,T))||!c(P,o.address))&&g("TickerSpring returned a basket route outside its pinned constituents.");let R=a.text(v.data);/^0x(?:[0-9a-fA-F]{2})+$/.test(R)||g("TickerSpring returned malformed basket route calldata.");let V=BigInt(a.positive(v.amountIn));return Se(R,T,P,V,Oe),{tokenIn:T,tokenOut:P,amountIn:V,data:R}});return n==="buy"&&D.reduce((m,v)=>m+v.amountIn,0n)>BigInt(p)&&g("TickerSpring basket routes exceed the authorized input."),ut(y.txs,k.address,Oe,p),Ae(y.txs,Oe,Ln,n,n==="buy"?[s,o.address,BigInt(p),D,x,i,BigInt(C)]:[s,BigInt(p),o.address,D,x,i,BigInt(C)]),a.result(e,y,i,{input:{token:k,amount:p},minimumOutput:{token:b,amount:x.toString()},deadline:C},"BasketZap trades the constituents through KyberSwap. The basket swap fee accrues to holders; route fees and price impact apply. Verify basket tokens and payment balances after the receipt.")}function Xt(e){let t=(i,n,s,r)=>({name:`tickerspring_${i}`,inputSchema:{type:"object",properties:{...n,...["grid","ladder_strategy","ladder","basket_make","vault_deposit","vault_cancel_deposit","vault_withdraw","basket_buy","basket_sell"].includes(i)?{agentTag:Rn}:{}},required:s,additionalProperties:!1},execute:async(u,o)=>{try{return a.address(o),await r(u,o)}catch(p){throw new f(e.plainError(p))}}});return[...jt(e),Nt(e),t("products",{},[],async i=>(a.inputs(i,[]),{...Ve(),...W("/v1/agent/products",await G(e,"/v1/agent/products"))})),t("tokens",{query:{type:"string",maxLength:128,description:"Search text for token name, symbol or address, up to 128 characters."},category:{type:"string",description:'Published token category: lowercase letters, digits and hyphens, such as "stock".'},sort:{enum:["volume"],description:B.enumValues({volume:"order tokens by trading volume"})}},[],async i=>{a.inputs(i,["query","category","sort"]);let n=new URLSearchParams;if(i.query!==void 0){let u=a.text(i.query);u.length>128&&g("Use a token query up to 128 characters."),n.set("q",u)}if(i.category!==void 0){let u=a.text(i.category);/^[a-z][a-z0-9-]{0,39}$/.test(u)||g("Use a published token category."),n.set("category",u)}i.sort!==void 0&&(i.sort!=="volume"&&g("Use the documented volume sort."),n.set("sort","volume"));let s=`/v1/tokens${n.size?`?${n}`:""}`,r;try{r=a.object(await G(e,s))}catch(u){throw new f(`${e.plainError(u)} ${ze}`)}return Array.isArray(r.tokens)||g("TickerSpring token discovery is unavailable."),{tokenFilterGuidance:ze,...W(s,{...r,tokens:r.tokens.map(u=>{let o=a.object(u);return{...o,...a.token(o)}})})}}),t("vaults",{vault:L("pinned official agent vault; omit to list all vaults")},[],async i=>{if(a.inputs(i,["vault"]),i.vault!==void 0){let s=await ct(e,i.vault);return Vn(`/v1/agent/vaults/${s.address}`,s.data,s.entry)}let n=await G(e,"/v1/agent/vaults");return Array.isArray(n)||g("TickerSpring vault list is unavailable."),W("/v1/agent/vaults",n.map(s=>{let r=a.object(s),u=X(a.address(r.address));return{...r,address:u,chainId:E,pinned:A.vaults.some(o=>c(o.address,u)&&o.release===r.release),...Yt(r)}}))}),t("baskets",{basket:L("basket pool; omit to list all baskets")},[],async(i,n)=>{a.inputs(i,["basket"]);let s=i.basket===void 0?"/v1/baskets":`/v1/baskets/${X(a.address(i.basket))}`,r=await G(e,s),u=i.basket===void 0?void 0:await G(e,`${s}/account/${n}`);return{...W(s,r),...u===void 0?{}:{holding:u}}}),t("order_exit_preview",{id:ot("limit order to preview a cancellation for")},["id"],(i,n)=>Ct(e,i,n)),t("account",{},[],(i,n)=>(a.inputs(i,[]),Qt(e,n))),t("activity",{cursor:{type:"string",minLength:1,maxLength:512,description:"Cursor returned by a previous tickerspring_activity result, to read the next page. Omit for the first page."}},[],async(i,n)=>{a.inputs(i,["cursor"]);let s=i.cursor===void 0?void 0:a.text(i.cursor);s&&s.length>512&&g("Use the activity cursor returned by TickerSpring.");let r=`/v1/agent/accounts/${n}/activity${s===void 0?"":`?cursor=${encodeURIComponent(s)}`}`,u=a.object(await G(e,r));return a.text(u.cursor),Array.isArray(u.changes)||g("TickerSpring activity is unavailable."),W(r,u)}),t("report_card",{agent:{type:"string",pattern:"^[a-z0-9][a-z0-9._-]{0,39}$",description:"Optional agent tag, as used for agentTag on actions, to filter the report card to that agent."}},[],async(i,n)=>{a.inputs(i,["agent"]);let s=a.attribution({agentTag:i.agent}),r=`/v1/agent/report-card/${n}${s.agentTag===void 0?"":`?agent=${encodeURIComponent(String(s.agentTag))}`}`;return W(r,await G(e,r))}),t("plan",{kind:{enum:["grid","ladder"],description:B.enumValues({grid:"plan a grid strategy",ladder:"plan a ladder strategy"})},token:L("token to plan for"),amount:N(`${B.amount("USDG",6,"55000000")} At least 11 USDG for a grid, 55 USDG for a ladder.`),gap:{type:"string",description:"Grid only: gap between grid lines as a decimal string from 0.005 to 0.5. Omit to let the provider choose."},days:{type:"integer",minimum:28,maximum:90,description:"Grid only: number of days of history to plan from, 28 to 90. Defaults to 60."}},["kind","token","amount"],async i=>{a.inputs(i,["kind","token","amount","gap","days"]),i.kind!=="grid"&&i.kind!=="ladder"&&g("Choose grid or ladder planning.");let n=a.positive(i.amount);BigInt(n)<(i.kind==="grid"?11000000n:55000000n)&&g("Plan at least 11 USDG for a grid or 55 USDG for a ladder."),i.kind==="ladder"&&(i.gap!==void 0||i.days!==void 0)&&g("The ladder planner does not accept gap or days.");let s=i.days??60;(typeof s!="number"||!Number.isInteger(s)||s<28||s>90)&&g("Choose 28 to 90 days for grid planning.");let r=i.gap===void 0?void 0:a.price(a.text(i.gap));if(r!==void 0){let[o,p=""]=r.split("."),l=10n**BigInt(p.length),d=BigInt(`${o}${p}`);(d*1000n<l*5n||d*2n>l)&&g("Choose a grid gap from 0.005 to 0.5.")}let u=`/v1/agent/${i.kind}/plan?token=${a.address(i.token)}&amountUsd=${e.formatAmount(n,6)}${i.kind==="grid"?`&days=${s}${r===void 0?"":`&gap=${r}`}`:""}`;return W(u,await G(e,u))}),t("swap_quote",{tokenIn:L("token being sold"),tokenOut:L("token being bought"),amount:N('Amount of tokenIn in base units (use the decimals of tokenIn). Example: "1000000" = 1 USDG when tokenIn is USDG (6 decimals).'),slippageBps:ve("100")},["tokenIn","tokenOut","amount"],async i=>{a.inputs(i,["tokenIn","tokenOut","amount","slippageBps"]);let n=X(a.address(i.tokenIn)),s=X(a.address(i.tokenOut)),r;if(c(n,re.address))r=re;else if(c(n,A.basketConfig.weth))r=a.token({address:n,symbol:"WETH",decimals:18});else{let k=a.object(await G(e,"/v1/tokens"));Array.isArray(k.tokens)||g("TickerSpring token list is unavailable.");let b=k.tokens.map(a.object).filter(y=>c(y.address,n));b.length!==1&&g("Use an input address uniquely listed by TickerSpring."),r=a.token(b[0])}let u=`/v1/agent/swap/quote?tokenIn=${n}&tokenOut=${s}&amount=${e.formatAmount(a.positive(i.amount),r.decimals)}&slippageBps=${Te(i)}`,o=a.object(await G(e,u)),p=a.token(o.tokenOut),l=a.token(o.tokenIn);(!c(l.address,n)||l.decimals!==r.decimals||!c(p.address,s)||a.integer(o.amountInUnits)!==a.positive(i.amount))&&g("TickerSpring swap quote does not match the requested input and output.");let d=a.positive(o.expectedOutUnits),h=a.positive(o.minimumOutUnits);return BigInt(h)>BigInt(d)&&g("TickerSpring swap quote has inconsistent output amounts."),{...W(u,o),input:{token:r,amount:a.positive(i.amount)},output:{token:p,amount:d},minimumOutput:{token:p,amount:h},executionAvailable:!1,reason:"Branded swap execution needs the published outer entrypoint ABI for selector 0xdc4e8da1 on router 0x75529402f73FF0Ddd10567A0590a69895439368D plus add-on router validation. A quote is not an executed swap."}}),t("candles",{token:L("token to read candles for"),interval:{enum:["15m","1h","4h","1d"],description:"Candle size: 15 minutes, 1 hour, 4 hours or 1 day. Defaults to 1h."},limit:{type:"integer",minimum:1,maximum:500,description:"Maximum number of candles to return, from 1 to 500. Defaults to 200."}},["token"],async i=>{a.inputs(i,["token","interval","limit"]);let n=i.interval??"1h",s=i.limit??200;(!["15m","1h","4h","1d"].includes(String(n))||typeof s!="number"||!Number.isInteger(s)||s<1||s>500)&&g("Choose a documented candle interval and a limit from 1 to 500.");let r=`/v1/candles?token=${a.address(i.token)}&interval=${String(n)}&limit=${s}`;return W(r,await G(e,r))}),t("basket_plan",{tokens:{type:"array",minItems:1,maxItems:8,description:"Basket constituents to plan, 1 to 8, each with a token and an optional weight.",items:{type:"object",properties:{token:L("constituent token"),weightBps:Ut(1e4,"Optional.")},required:["token"],additionalProperties:!1}},name:{type:"string",description:"Optional basket name to plan with."},symbol:{type:"string",description:"Optional basket symbol to plan with."},swapFeeBps:Gt},["tokens"],async i=>{a.inputs(i,["tokens","name","symbol","swapFeeBps"]),(!Array.isArray(i.tokens)||i.tokens.length<1||i.tokens.length>8)&&g("Choose 1 to 8 tokens for basket planning.");let n=i.tokens.map(u=>{let o=a.object(u);return a.inputs(o,["token","weightBps"]),o.weightBps!==void 0&&(typeof o.weightBps!="number"||!Number.isInteger(o.weightBps)||o.weightBps<100||o.weightBps>1e4)&&g("Use integer basket weights from 100 to 10000 basis points."),{token:a.address(o.token),...o.weightBps===void 0?{}:{weightPct:o.weightBps/100}}}),s=i.swapFeeBps??100;s!==30&&s!==100&&g("Choose a basket swap fee of 30 or 100 basis points.");let r="/v1/agent/baskets/plan";return W(r,await a.request(e,r,{tokens:n,swapFeePct:s/100,...i.name===void 0?{}:{name:a.text(i.name)},...i.symbol===void 0?{}:{symbol:a.text(i.symbol)}}))}),t("tx_status",{hash:{type:"string",pattern:"^0x[0-9a-fA-F]{64}$",description:"Transaction hash: 0x followed by 64 hex digits, of a transaction sent by the current wallet."}},["hash"],async(i,n)=>{a.inputs(i,["hash"]);let s=a.text(i.hash);/^0x[0-9a-fA-F]{64}$/.test(s)||g("Provide a full transaction hash.");let r=await e.clientFor(E).getTransactionReceipt({hash:s});return c(r.from,n)||g("This transaction was not sent by the signing wallet."),{chainId:E,receipt:JSON.parse(JSON.stringify(r,(u,o)=>typeof o=="bigint"?o.toString():o)),notice:"A mined transaction is not proof that a strategy filled or a keeper settled. Recheck tickerspring_account and balances."}}),t("spring_orders",{},[],i=>(a.inputs(i,[]),{chainId:E,url:"https://tickerspring.com/trade/spring-orders",source:`${Pe}/v1/agent/llms.txt`,handoff:"Spring Orders are site-only, with no agent route yet. Open the official page with your own wallet to configure, fund, monitor and stop the strategy. They charge 1% per fill and are distinct from limit orders, grids and ladder strategies. Nothing has been sent."})),t("capabilities",{},[],i=>(a.inputs(i,[]),{...Ve(),chainId:E,source:`${Pe}/v1/agent/llms.txt`,inventory:At,blockers:{T1:"Queued withdrawal: no current agent vault has a redeemQueue and no queue ABI is published in the official wallet policy. Direct withdrawal and pending-deposit cancellation are supported.",T2:"BasketMaker creation and Zap buy/sell are supported. Newly created baskets remain unverified and require a successful Made receipt from this wallet plus the pinned factory and on-chain constituents before trading.",T3:"Grid opening, first-market setup, repeat, collect and close are supported. Ladder strategies currently list zero markets; opening a ladder strategy needs a listed market and an official entry fixture. Existing ladders can close, collect and change repeat.",T5:"The published account schema lacks an authoritative per-order remaining-principal quote; debit is original input. Raw order and bucket details are preserved in tickerspring_account.",T8:"Branded swap execution requires the published outer entrypoint ABI for selector 0xdc4e8da1 on router 0x75529402f73FF0Ddd10567A0590a69895439368D plus local router validation. Quotes and report-card reads are supported."}})),...["grid","ladder-strategy"].map(i=>t(i==="grid"?"grid":"ladder_strategy",qn,["action"],(n,s)=>Bt(e,n,s,i))),t("ladder",{token:L("token to trade against USDG"),side:{enum:["buy","sell"],description:B.enumValues({buy:"spend USDG at each level",sell:"sell the token at each level"})},slippageBps:{type:"integer",minimum:0,maximum:9999,description:"Allowed slippage in basis points (50 = 0.5%), from 0 to 9999. Defaults to 500; the provider minimum is 500."},levels:{type:"array",minItems:2,maxItems:20,description:"Independent limit-order levels, 2 to 20. Each has a price, an amount and a minimum output.",items:{type:"object",properties:{price:Ce("Limit price of this level"),amount:N('Input for this level in base units of the input token (use its decimals): USDG for buy, the token for sell. Example: "10000000" = 10 USDG (6 decimals).'),minAmountOut:N("Minimum output for this level in base units of the output token (use its decimals): the token for buy, USDG for sell. Must be greater than 1.")},required:["price","amount","minAmountOut"],additionalProperties:!1}}},["token","side","levels"],(i,n)=>$t(e,i,n)),t("basket_make",{name:{type:"string",description:"Basket name, up to 64 letters, digits, spaces and . _ + - characters. It is permanent."},symbol:{type:"string",description:"Basket symbol, up to 20 letters, digits and . + - characters, not starting with ts. It is permanent."},tokens:{type:"array",minItems:2,maxItems:8,description:"Basket constituents, 2 to 8, including USDG or WETH. Weights must total 10000 basis points.",items:{type:"object",properties:{token:L("constituent token"),weightBps:Ut(9900,"All weights must total 10000.")},required:["token","weightBps"],additionalProperties:!1}},swapFeeBps:Gt,amount:N('First deposit in base units of the payWith token (use its decimals). Example: "25000000" = 25 USDG (6 decimals); the USDG minimum is 25 USDG.'),payWith:L("token paying the first deposit, USDG or WETH; defaults to USDG"),minAmountOut:N("Minimum basket pool tokens to receive, in base units of the new basket pool token (use its decimals). Must be greater than 1."),slippageBps:ve("100")},["name","symbol","tokens","amount","minAmountOut"],(i,n)=>It(e,i,n)),t("vault_deposit",{vault:L("pinned official agent vault"),amount:N(`${B.amount("USDG",6,"25000000")} Must meet the vault minimum and fit its remaining capacity.`),minShares:N('Minimum vault shares to receive, in vault share base units (12 decimals). Example: "1000000000000" = 1 share. Must be greater than 1.'),slippageBps:ve("100")},["vault","amount","minShares"],(i,n)=>Kn(e,i,n)),t("vault_cancel_deposit",{vault:L("pinned official agent vault"),id:ot("pending deposit request to cancel")},["vault","id"],(i,n)=>Wn(e,i,n)),t("vault_withdraw",{vault:L("pinned official agent vault"),shares:N('Vault shares to redeem, in vault share base units (12 decimals). Example: "1000000000000" = 1 share.'),mode:{enum:["usdg","in-kind"],description:B.enumValues({usdg:"receive USDG only","in-kind":"receive both USDG and the vault pool token"})},minUsdg:N('Minimum USDG to receive, in base units of USDG (USDG has 6 decimals). Example: "1000000" = 1 USDG.'),minToken:N("In-kind only, required there: minimum vault pool token to receive, in base units of that token (use its decimals). Not allowed for mode usdg."),slippageBps:ve("100")},["vault","shares","mode","minUsdg"],(i,n)=>Yn(e,i,n)),...["buy","sell"].map(i=>t(`basket_${i}`,{basket:L("basket pool"),token:L(i==="buy"?"token paying for the basket: USDG (default), WETH or a basket constituent":"token received for the basket: USDG (default), WETH or a basket constituent"),amount:N(i==="buy"?'Amount of the payment token in base units (use its decimals). Example: "10000000" = 10 USDG (6 decimals).':'Amount of basket pool tokens to sell, in base units (18 decimals). Example: "1000000000000000000" = 1 basket token.'),minAmountOut:N(i==="buy"?"Minimum basket pool tokens to receive, in base units (18 decimals). Must be greater than 1.":"Minimum amount of the received token, in base units (use its decimals). Must be greater than 1."),slippageBps:ve("100")},["basket","amount","minAmountOut"],(n,s)=>Qn(e,n,s,i)))]}var q={api:G,readResult:W,slippage:Te,minimum:we,exactCall:Ae,exactApproval:ut,account:Qt};var ti="https://api.tickerspring.com",me=He[E].tickerSpring.limitOrderHook.address,oe={address:Zn(He[E].tokens.USDG.address),symbol:"USDG",decimals:be,chainId:E},Jt=10000000n,Zt="(bytes32 pool,int24 lower,bool sell0,address inputToken,uint128 maximumInput,uint128 maximumCorrectionInput,uint256 minimumFullOutput,uint16 maximumFeeBps,uint64 deadline)",je=ei([`function create(${Zt} params)`,`function createMarketOrder(${Zt} params,address token,uint160 initialPrice,uint160 minimumPrice,uint160 maximumPrice)`,"function cancel(uint256 id,uint256 min0,uint256 min1,uint64 deadline,uint8 deliveryMask)","function claimBoth(uint256 id)"]),Fe={type:"string",pattern:"^\\d+$"},ni={type:"string",pattern:"^[a-z0-9][a-z0-9._-]{0,39}$",description:"Optional label of 1 to 40 lowercase letters, digits, dots, underscores or hyphens, sent to TickerSpring to attribute this action to an agent."};function j(e){return bt(e)?e:O()}function O(){throw new f("TickerSpring returned an incomplete or inconsistent response.")}function J(e){return(typeof e!="string"||!e.trim())&&O(),e}function qe(e){return ht(e,"Provide a valid token or wallet address.",gt)}function ne(e){if(typeof e!="string")throw new f("Amount must be a non-negative integer string in base units.");return ft(e),e}function de(e){let t=ne(e);if(BigInt(t)<=0n)throw new f("The amount must be positive.");return t}function pt(e){let t=typeof e=="number"&&Number.isFinite(e)?String(e):e;if(typeof t!="string"||!/^\d+(\.\d+)?$/.test(t)||!/[1-9]/.test(t))throw new f("TickerSpring requires a positive decimal price in USDG per token.");return t}function dt(e){let t=j(e);return(typeof t.decimals!="number"||!Number.isInteger(t.decimals)||t.decimals<0||t.decimals>255||t.chainId!==void 0&&t.chainId!==E)&&O(),{address:qe(t.address),symbol:J(t.symbol),decimals:t.decimals,chainId:E}}function Le(e){let t=de(e);if(BigInt(t)<=BigInt(Math.floor(Date.now()/1e3)))throw new f("The prepared TickerSpring order has expired. Prepare it again.");return t}function Ne(e,t){if(Object.keys(e).some(i=>!t.includes(i)))throw new f("Provide only the documented TickerSpring inputs.")}function lt(e){if(e.agentTag===void 0)return{};if(typeof e.agentTag!="string"||!/^[a-z0-9][a-z0-9._-]{0,39}$/.test(e.agentTag))throw new f("Use an agentTag of 1 to 40 lowercase letters, digits, dots, underscores or hyphens.");return{agentTag:e.agentTag}}async function De(e,t,i){let n=await le(e.http,`${ti}${t}`,{method:i?"POST":"GET",headers:{"Content-Type":"application/json","User-Agent":"Oak-TickerSpring/1.0"},...i?{body:JSON.stringify(i)}:{}},s=>!!s&&typeof s=="object"&&!Array.isArray(s));return j(n.data)}function mt(e,t,i,n){let s=j(t.bundle),r=j(t.walletSendCalls);(s.kind!==n||s.chainId!==E||!c(s.owner,i)||r.chainId!=="0x1237"||!c(r.from,i)||!Array.isArray(s.steps)||!s.steps.length||!Array.isArray(r.calls)||r.calls.length!==s.steps.length)&&O();let u=J(s.expiresAt);if(!Number.isFinite(Date.parse(u))||Date.parse(u)<=Date.now())throw new f("The prepared TickerSpring bundle has expired. Prepare it again.");let o=s.steps.map((p,l)=>{let d=j(p),h=j(r.calls[l]);return(d.n!==l+1||d.kind!=="approve"&&d.kind!=="call"||d.from!==void 0&&!c(d.from,i)||d.chainId!==void 0&&d.chainId!==E||!c(h.to,J(d.to))||h.data!==d.data||d.value!=="0"||h.value!=="0x0")&&O(),e.unsignedTx({to:qe(d.to),data:J(d.data),value:ne(d.value),chainId:E,description:J(d.label)})});return{bundle:s,txs:o,expiresAt:u}}async function Re(e,t,i,n={},s){let{bundle:r,txs:u,expiresAt:o}=t,p=await e.preview(u,i);if(Date.parse(o)<=Date.now())throw new f("The prepared TickerSpring bundle expired during preview. Prepare it again.");n.deadline!==void 0&&Le(n.deadline);let l=p.changes.map(({token:k,amount:b})=>{let y=b.startsWith("-");return`${y?"-":""}${e.formatAmount(y?b.slice(1):b,k.decimals)} ${k.symbol} (${k.address}, chain ${k.chainId})`});(!Array.isArray(r.warnings)||!r.warnings.every(k=>typeof k=="string"))&&O();let d=r.simulation===void 0?void 0:j(r.simulation),h=d?.ok===!1?`API simulation: ${J(d.error)}.`:"";return{txs:u,from:i,expiresAt:o,...n,preview:p,summary:[J(r.summary),s??"Protocol minimum: 10 USDG. Fill fee: 2.5% of received tokens; no placement or unfilled cancellation fee. Filled proceeds require tickerspring_claim (claimBoth).","No transaction has been sent.",...r.warnings,h,p.summary,...l].filter(Boolean).join(" ")}}async function nn(e,t,i){Ne(t,["token","side","amount","price","slippageBps","minAmountOut","startingPrice","agentTag"]);let n=lt(t),s=qe(t.token),r=de(t.amount),u=pt(J(t.price)),o=t.slippageBps===void 0?500:t.slippageBps;if(xe("1",o),o<500)throw new f(`TickerSpring provider minimum slippage is 500 bps (5%); requested ${o} bps. Use slippageBps: 500 (or omit it) to accept that floor. Oak will not increase your slippage automatically.`);let p=t.minAmountOut===void 0?0n:BigInt(de(t.minAmountOut));if(t.minAmountOut!==void 0&&p<=1n)throw new f("The minimum output amount must be greater than 1 base unit.");if(t.side!=="buy"&&t.side!=="sell")throw new f("Choose buy or sell for the limit order.");if(t.side==="buy"&&BigInt(r)<Jt)throw new f("TickerSpring orders require at least 10 USDG.");let l=await De(e,"/v1/tokens");Array.isArray(l.tokens)||O();let d=l.tokens.map(j).filter(m=>c(m.address,s)&&(m.chainId===void 0||m.chainId===E));if(d.length!==1)throw new f("TickerSpring did not return a unique token for that address on chain 4663.");let h=d[0],k=dt(h);if(c(k.address,oe.address))throw new f("Choose the order token paired with USDG.");let b=j(h.markets);typeof b.limitOrders!="boolean"&&O();let y=t.side==="buy"?oe:k,w=t.side==="buy"?k:oe;if(t.side==="sell"){let m=BigInt(ie(u,18,"floor"));if(BigInt(r)*m*10n**BigInt(be)/(10n**BigInt(k.decimals)*10n**18n)<Jt)throw new f("TickerSpring orders require at least 10 USDG at the limit price.")}if(b.limitOrders&&t.startingPrice!==void 0)throw new f("startingPrice is only used to open a new limit market.");let x=b.limitOrders?void 0:pt(t.startingPrice===void 0?h.priceUsd:J(t.startingPrice)),C=await De(e,"/v1/agent/prepare/limit-order",{owner:i,...n,token:s,side:t.side,price:u,amount:e.formatAmount(r,y.decimals),...x===void 0?{}:{startingPrice:x}}),D=an(e,i,C,{amount:r,limitPrice:u,slippageBps:o,callerMinOut:p,marketToken:k,inputToken:y,outputToken:w,markets:b,startingPrice:x});return Re(e,D.p,i,D.details)}function an(e,t,i,n){let{amount:s,limitPrice:r,slippageBps:u,callerMinOut:o,marketToken:p,inputToken:l,outputToken:d,markets:h}=n,k=mt(e,i,t,"limit-order"),b=j(k.bundle.params),y=j(b.create),w=Le(y.deadline),x=de(y.minimumFullOutput);(!c(b.hook,me)||!c(y.inputToken,l.address)||ne(y.maximumInput)!==s||y.maximumFeeBps!==250||typeof y.sell0!="boolean"||typeof y.lower!="number"||!Number.isInteger(y.lower)||typeof y.pool!="string"||!/^0x[0-9a-fA-F]{64}$/.test(y.pool)||BigInt(ne(y.maximumCorrectionInput))>BigInt(s))&&O(),c(y.pool,Ye.poolFor(p.address,me))||O();let C=BigInt(l.address)<BigInt(d.address);y.sell0!==C&&O();let D=BigInt(s)*9750n/10000n,m=BigInt(ie(r,18,"floor")),v=c(l.address,oe.address)?m>0n?D*10n**BigInt(p.decimals)*10n**18n/(10n**BigInt(be)*m):0n:D*m*10n**BigInt(be)/(10n**BigInt(p.decimals)*10n**18n),T=BigInt(xe(v.toString(),u)),P=Be(y.lower),R=P*P,V=1n<<192n,I=R>0n?y.sell0?D*R/V:D*V/R:0n,$=p.decimals===18?BigInt(xe(I.toString(),u)):T,F=[o,T,$].reduce((z,Y)=>z>Y?z:Y,0n);if(BigInt(x)<=1n||BigInt(x)<F)throw new f("TickerSpring minimum output is below the quoted slippage minimum.");let M={pool:y.pool,lower:y.lower,sell0:y.sell0,inputToken:l.address,maximumInput:BigInt(s),maximumCorrectionInput:BigInt(ne(y.maximumCorrectionInput)),minimumFullOutput:BigInt(x),maximumFeeBps:250,deadline:BigInt(w)},Z;if(h.limitOrders)Z=Me({abi:je,functionName:"create",args:[M]});else{let z=j(b.market);c(z.token,p.address)||O();let Y=BigInt(de(z.initialPrice)),Ge=BigInt(de(z.minimumPrice)),$e=BigInt(de(z.maximumPrice));(Y<Ge||Y>$e)&&O(),n.startingPrice!==void 0&&Ye.checkInitialization(Y,Ge,$e,n.startingPrice,p),Z=Me({abi:je,functionName:"createMarketOrder",args:[M,p.address,Y,Ge,$e]})}if((!Array.isArray(b.approvals)||b.approvals.length>1||k.txs.length!==b.approvals.length+1)&&O(),b.approvals.length){let z=j(b.approvals[0]),Y=Me({abi:Jn,functionName:"approve",args:[me,BigInt(s)]});(!c(z.token,l.address)||!c(z.spender,me)||ne(z.amount)!==s||!c(k.txs[0].to,l.address)||!U(k.txs[0].data,Y))&&O()}let H=k.txs.at(-1);return(!c(H.to,me)||!U(H.data,Z))&&O(),{p:k,details:{input:{token:l,amount:s},minimumOutput:{token:d,amount:x},deadline:w,...n.startingPrice===void 0?{}:{startingPrice:n.startingPrice}}}}async function en(e,t,i,n){Ne(t,["id","agentTag"]);let s=lt(t),r=ne(t.id),u=await De(e,"/v1/agent/prepare/order-action",{owner:i,id:r,action:n,...s}),o=mt(e,u,i,"order-action");(o.txs.length!==1||!c(o.txs[0].to,me))&&O();let p=Xn({abi:je,data:o.txs[0].data});if((p.functionName!==n||p.args[0]!==BigInt(r))&&O(),p.functionName==="cancel"){let[,l,d,h,k]=p.args;if(Le(h.toString()),l+d===0n||k!==3)throw new f("TickerSpring returned a cancellation without protected amounts or both token deliveries. Prepare it again.");return Re(e,o,i,{id:r,deadline:h.toString()})}return U(o.txs[0].data,Me({abi:je,functionName:"claimBoth",args:[BigInt(r)]}))||O(),Re(e,o,i,{id:r})}async function tn(e,t){let i=await De(e,`/v1/agent/accounts/${t}`);if(!c(i.owner,t)||i.limitOrdersComplete!==!0||!Array.isArray(i.limitOrders)||!Array.isArray(i.unavailable)||i.unavailable.length)throw new f("TickerSpring could not return the complete order list for this wallet.");let n=J(i.asOf);Number.isFinite(Date.parse(n))||O();let s=new Set,r=i.limitOrders.map(u=>{let o=j(u),p=j(o.order),l=dt(o.token);(!c(o.hook,me)||!c(p.owner,t)||o.side!=="buy"&&o.side!=="sell"||c(l.address,oe.address)||o.feeBps!==250)&&O();let d=ne(o.id);s.has(d)&&O(),s.add(d);let h=BigInt(l.address)<BigInt(oe.address)?[l,oe]:[oe,l],k=j(o.claimable);return{id:d,status:J(o.status),side:o.side,chainId:E,feeBps:250,input:{token:o.side==="buy"?oe:l,amount:ne(p.debit)},claimable:h.map((b,y)=>({token:b,amount:ne(k[y===0?"net0":"net1"])}))}});return{owner:t,chainId:E,asOf:n,orders:r}}var ii=e=>{let t=n=>async s=>{try{return kt(s),await n(s)}catch(r){throw new f(e.plainError(r))}},i=(n,s,r,u)=>({name:`tickerspring_${n}`,inputSchema:{type:"object",properties:{...s,...["create","cancel","claim"].includes(n)?{agentTag:ni}:{}},required:r,additionalProperties:!1},execute:(o,p)=>t(l=>u(o,l))(p)});return{tools:[...Xt(e),i("create",{token:{...ue,description:B.address("token traded against USDG")},side:{type:"string",enum:["buy","sell"],description:B.enumValues({buy:"spend USDG to buy the token",sell:"sell the token for USDG"})},amount:{...Fe,description:"Base units of USDG for buys, or the selected token for sells."},price:{type:"string",pattern:"^\\d+(\\.\\d+)?$",description:"Limit price in USDG per whole token."},startingPrice:{type:"string",description:"Optional explicit starting price for a new market, in USDG per whole token."},slippageBps:{type:"integer",minimum:0,maximum:9999,description:"Provider minimum and default: 500 bps (5%). Values below 500 cannot be prepared. Oak never raises the requested slippage."},minAmountOut:{...Fe,description:"Optional caller minimum output in base units."}},["token","side","amount","price"],(n,s)=>nn(e,n,s)),i("cancel",{id:{...Fe,description:B.id("limit order to cancel")}},["id"],(n,s)=>en(e,n,s,"cancel")),i("claim",{id:{...Fe,description:B.id("limit order to claim proceeds from")}},["id"],(n,s)=>en(e,n,s,"claimBoth")),i("orders",{},[],(n,s)=>(Ne(n,[]),tn(e,s)))],positions:t(async n=>(await tn(e,n)).orders.map(r=>({module:"tickerspring",id:r.id,chainId:E,assets:r.claimable,economics:{principal:r.status==="filled"?[]:[wt("redeemable",{token:r.input.token,amount:null,source:"tickerspring.input",unknownReason:`TickerSpring reports the original input (${e.formatAmount(r.input.amount,r.input.token.decimals)} ${r.input.token.symbol}), not the unfilled remainder.`})],debt:[],backing:[],coverage:{complete:!0},rewards:r.claimable.filter(u=>BigInt(u.amount)>0n).map(u=>Tt("claimable",{...u,source:"tickerspring.claimable",claim:{tool:"tickerspring_claim",args:{id:r.id}}}))},description:`${r.side} order ${r.id}: ${r.status}; assets are claimable amounts only. Original input: ${e.formatAmount(r.input.amount,r.input.token.decimals)} ${r.input.token.symbol} (${r.input.token.address}). Fill fee 2.5%; use tickerspring_claim for proceeds.`})))}},za=e=>vt("tickerspring",[ii(e)]),a={attribution:lt,object:j,text:J,address:qe,integer:ne,positive:de,token:dt,price:pt,futureDeadline:Le,inputs:Ne,request:De,prepared:mt,result:Re,create:nn,validateOrder:an};var yt={address:sn(A.contracts.usdg),symbol:"USDG",decimals:6,chainId:E},Ue=sn(A.contracts.limitOrderHook);async function $t(e,t,i){a.inputs(t,["token","side","levels","slippageBps","agentTag"]);let n=a.address(t.token);if(t.side!=="buy"&&t.side!=="sell")throw new f("Choose buy or sell for the limit-order ladder.");if(!Array.isArray(t.levels)||t.levels.length<2||t.levels.length>20)throw new f("Provide 2 to 20 independent limit-order levels.");let s=t.slippageBps===void 0?500:t.slippageBps;if(typeof s!="number"||!Number.isInteger(s)||s<0||s>9999)throw new f("Use slippageBps from 0 to 9999.");let r=await a.request(e,"/v1/tokens");if(!Array.isArray(r.tokens))throw new f("TickerSpring token list is unavailable.");let u=r.tokens.map(a.object).filter(D=>c(D.address,n));if(u.length!==1)throw new f("Use a unique TickerSpring token address on chain 4663.");let o=u[0],p=a.token(o);if(c(p.address,yt.address))throw new f("Choose a ladder token paired with USDG.");let l=a.object(o.markets);if(l.limitOrders!==!0)throw new f("Open this token market with an authorized tickerspring_create first; the published ladder schema does not accept startingPrice.");let d=t.side==="buy"?yt:p,h=t.side==="buy"?p:yt,k=t.levels.map(D=>{let m=a.object(D);a.inputs(m,["price","amount","minAmountOut"]);let v=a.price(a.text(m.price)),T=a.positive(m.amount),P=a.positive(m.minAmountOut);if((t.side==="buy"?BigInt(T):BigInt(T)*BigInt(ie(v,18,"floor"))*10n**6n/(10n**BigInt(p.decimals)*10n**18n))<10000000n)throw new f("Each TickerSpring ladder level requires at least 10 USDG at its limit price.");return{price:v,amount:T,minAmountOut:P}}),b=a.prepared(e,await a.request(e,"/v1/agent/prepare/ladder",{owner:i,...a.attribution(t),token:n,side:t.side,orders:k.map(D=>({price:D.price,amount:e.formatAmount(D.amount,d.decimals)}))}),i,"ladder"),y=a.object(b.bundle.params);if(!c(y.hook,Ue)||!Array.isArray(y.orders)||y.orders.length!==k.length||!Array.isArray(y.approvals)||y.approvals.length>1)throw new f("TickerSpring returned an inconsistent limit-order ladder.");let w=y.approvals;if(b.txs.length!==k.length+w.length)throw new f("TickerSpring ladder contains unexpected transaction steps.");let x=k.reduce((D,m)=>D+BigInt(m.amount),0n).toString();if(w.length){let D=a.object(w[0]),m=b.txs[0];if(!c(D.token,d.address)||!c(D.spender,Ue)||a.integer(D.amount)!==x||!c(m.to,d.address)||!U(m.data,ai({abi:si,functionName:"approve",args:[Ue,BigInt(x)]})))throw new f("TickerSpring ladder approval must equal the sum of the level inputs.")}let C=k.map((D,m)=>{let v=a.object(y.orders[m]),T=b.txs[m+w.length];return a.validateOrder(e,i,{bundle:{...b.bundle,kind:"limit-order",params:{...v,hook:Ue,approvals:[]},steps:[{n:1,kind:"call",to:T.to,data:T.data,value:"0",label:T.description}]},walletSendCalls:{chainId:"0x1237",from:i,calls:[{to:T.to,data:T.data,value:"0x0"}]}},{amount:D.amount,limitPrice:D.price,slippageBps:s,callerMinOut:BigInt(D.minAmountOut),marketToken:p,inputToken:d,outputToken:h,markets:l}).details});return a.result(e,b,i,{input:{token:d,amount:x},levels:C,deadline:C.reduce((D,m)=>BigInt(m.deadline)<BigInt(D)?m.deadline:D,C[0].deadline)},"Limit-order ladder: one exact approval covers independent orders. Confirm every level. Record each mined order ID and manage each with tickerspring_orders, tickerspring_cancel and tickerspring_claim. A batch may execute only some steps. Fill fee 2.5%.")}export{A as a,K as b,$t as c,Bt as d,Ye as e,It as f,Ct as g,fe as h,Pt as i,jt as j,Pn as k,_n as l,Nt as m,Xt as n,q as o,ii as p,za as q,a as r,Se as s};