@oakagentkit/core 0.2.3 → 0.2.4

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 (535) hide show
  1. package/build/dist/api/addresses.d.ts +112 -0
  2. package/build/dist/api/addresses.js +1 -1
  3. package/build/dist/api/amounts.js +1 -1
  4. package/build/dist/api/args.js +1 -1
  5. package/build/dist/api/cache.js +1 -1
  6. package/build/dist/api/canonical.js +1 -1
  7. package/build/dist/api/chain.js +1 -1
  8. package/build/dist/api/deployments.js +1 -1
  9. package/build/dist/api/errors.d.ts +1 -0
  10. package/build/dist/api/errors.js +1 -1
  11. package/build/dist/api/gas.js +1 -1
  12. package/build/dist/api/grandfather.js +1 -1
  13. package/build/dist/api/guards.js +1 -1
  14. package/build/dist/api/history.js +1 -1
  15. package/build/dist/api/http.js +1 -1
  16. package/build/dist/api/identity-link.d.ts +1 -0
  17. package/build/dist/api/identity-link.js +1 -1
  18. package/build/dist/api/launch.js +1 -1
  19. package/build/dist/api/merkle.js +1 -1
  20. package/build/dist/api/metadata.js +1 -1
  21. package/build/dist/api/module.js +1 -1
  22. package/build/dist/api/modules/beefy/boosts.js +1 -1
  23. package/build/dist/api/modules/beefy/clm.js +1 -1
  24. package/build/dist/api/modules/beefy/guard.js +1 -1
  25. package/build/dist/api/modules/beefy/index.js +1 -1
  26. package/build/dist/api/modules/beefy/liquidity.js +1 -1
  27. package/build/dist/api/modules/beefy/management.js +1 -1
  28. package/build/dist/api/modules/beefy/vaults.js +1 -1
  29. package/build/dist/api/modules/clanker/extensions.js +1 -1
  30. package/build/dist/api/modules/clanker/index.js +1 -1
  31. package/build/dist/api/modules/clanker/manage.js +1 -1
  32. package/build/dist/api/modules/clanker/pool-config.js +1 -1
  33. package/build/dist/api/modules/clanker/protocol.js +1 -1
  34. package/build/dist/api/modules/clanker/state.js +1 -1
  35. package/build/dist/api/modules/earn/copy.d.ts +114 -0
  36. package/build/dist/api/modules/earn/copy.js +1 -0
  37. package/build/dist/api/modules/earn/cost.d.ts +47 -0
  38. package/build/dist/api/modules/earn/cost.js +1 -0
  39. package/build/dist/api/modules/earn/index.d.ts +8 -0
  40. package/build/dist/api/modules/earn/index.js +1 -0
  41. package/build/dist/api/modules/earn/lp.d.ts +17 -0
  42. package/build/dist/api/modules/earn/lp.js +1 -0
  43. package/build/dist/api/modules/earn/options.d.ts +36 -0
  44. package/build/dist/api/modules/earn/options.js +1 -0
  45. package/build/dist/api/modules/earn/types.d.ts +39 -0
  46. package/build/dist/api/modules/earn/types.js +0 -0
  47. package/build/dist/api/modules/erc8004/abi.js +1 -1
  48. package/build/dist/api/modules/erc8004/common.js +1 -1
  49. package/build/dist/api/modules/erc8004/domain.js +1 -1
  50. package/build/dist/api/modules/erc8004/index.js +1 -1
  51. package/build/dist/api/modules/erc8004/management.js +1 -1
  52. package/build/dist/api/modules/erc8004/reputation.js +1 -1
  53. package/build/dist/api/modules/erc8004/services.js +1 -1
  54. package/build/dist/api/modules/erc8004/validation.js +1 -1
  55. package/build/dist/api/modules/grove/index.js +1 -1
  56. package/build/dist/api/modules/heyresearch/backoff.js +1 -1
  57. package/build/dist/api/modules/heyresearch/builder-feed.js +1 -1
  58. package/build/dist/api/modules/heyresearch/freshness.js +1 -1
  59. package/build/dist/api/modules/heyresearch/index.js +1 -1
  60. package/build/dist/api/modules/heyresearch/proof-reads.js +1 -1
  61. package/build/dist/api/modules/heyresearch/public-reads.js +1 -1
  62. package/build/dist/api/modules/heyresearch/scan.js +1 -1
  63. package/build/dist/api/modules/heyresearch/status-labels.d.ts +1 -1
  64. package/build/dist/api/modules/heyresearch/status-labels.js +1 -1
  65. package/build/dist/api/modules/heyresearch/token-facts.js +1 -1
  66. package/build/dist/api/modules/hoodag/chain-reads.js +1 -1
  67. package/build/dist/api/modules/hoodag/index.js +1 -1
  68. package/build/dist/api/modules/hoodag/management.js +1 -1
  69. package/build/dist/api/modules/hoodag/public-reads.js +1 -1
  70. package/build/dist/api/modules/hoodag/reconstruct.js +1 -1
  71. package/build/dist/api/modules/hoodlock/airdrop.js +1 -1
  72. package/build/dist/api/modules/hoodlock/buyback.js +1 -1
  73. package/build/dist/api/modules/hoodlock/commerce.js +1 -1
  74. package/build/dist/api/modules/hoodlock/fee.js +1 -1
  75. package/build/dist/api/modules/hoodlock/guard.js +1 -1
  76. package/build/dist/api/modules/hoodlock/index.js +1 -1
  77. package/build/dist/api/modules/hoodlock/lifecycle.js +1 -1
  78. package/build/dist/api/modules/hoodlock/locks-burn.js +1 -1
  79. package/build/dist/api/modules/hoodlock/public.js +1 -1
  80. package/build/dist/api/modules/hookr/actions.js +1 -1
  81. package/build/dist/api/modules/hookr/addons.js +1 -1
  82. package/build/dist/api/modules/hookr/agent-gate.js +1 -1
  83. package/build/dist/api/modules/hookr/contracts.js +1 -1
  84. package/build/dist/api/modules/hookr/create-cancel.js +1 -1
  85. package/build/dist/api/modules/hookr/discovery.js +1 -1
  86. package/build/dist/api/modules/hookr/fill-bounty.js +1 -1
  87. package/build/dist/api/modules/hookr/index.js +1 -1
  88. package/build/dist/api/modules/hookr/launch-options.js +1 -1
  89. package/build/dist/api/modules/hookr/launch-profile.js +1 -1
  90. package/build/dist/api/modules/hookr/launch-receipt.js +1 -1
  91. package/build/dist/api/modules/hookr/launch.js +1 -1
  92. package/build/dist/api/modules/hookr/liquidity.js +1 -1
  93. package/build/dist/api/modules/hookr/lp-positions.js +1 -1
  94. package/build/dist/api/modules/hookr/lp-reads.js +1 -1
  95. package/build/dist/api/modules/hookr/lp-receipt.js +1 -1
  96. package/build/dist/api/modules/hookr/lp-state.js +1 -1
  97. package/build/dist/api/modules/hookr/pins.js +1 -1
  98. package/build/dist/api/modules/hookr/public-reads.js +1 -1
  99. package/build/dist/api/modules/hookr/read-utils.js +1 -1
  100. package/build/dist/api/modules/hookr/relay.js +1 -1
  101. package/build/dist/api/modules/hookr/revenue.js +1 -1
  102. package/build/dist/api/modules/kyberswap/index.js +1 -1
  103. package/build/dist/api/modules/kyberswap/source-pools.js +1 -1
  104. package/build/dist/api/modules/layerbank/abi.d.ts +165 -0
  105. package/build/dist/api/modules/layerbank/abi.js +1 -0
  106. package/build/dist/api/modules/layerbank/actions.d.ts +2 -0
  107. package/build/dist/api/modules/layerbank/actions.js +1 -0
  108. package/build/dist/api/modules/layerbank/checks.d.ts +21 -0
  109. package/build/dist/api/modules/layerbank/checks.js +1 -0
  110. package/build/dist/api/modules/layerbank/index.d.ts +2 -0
  111. package/build/dist/api/modules/layerbank/index.js +1 -0
  112. package/build/dist/api/modules/layerbank/merkl.d.ts +6 -0
  113. package/build/dist/api/modules/layerbank/merkl.js +1 -0
  114. package/build/dist/api/modules/layerbank/reader.d.ts +15 -0
  115. package/build/dist/api/modules/layerbank/reader.js +1 -0
  116. package/build/dist/api/modules/layerbank/reserve.d.ts +13 -0
  117. package/build/dist/api/modules/layerbank/reserve.js +1 -0
  118. package/build/dist/api/modules/lighter/index.js +1 -1
  119. package/build/dist/api/modules/longbow/administration.js +1 -1
  120. package/build/dist/api/modules/longbow/analytics.js +1 -1
  121. package/build/dist/api/modules/longbow/fixed.js +1 -1
  122. package/build/dist/api/modules/longbow/index.js +1 -1
  123. package/build/dist/api/modules/longbow/nft.js +1 -1
  124. package/build/dist/api/modules/longbow/rebates.js +1 -1
  125. package/build/dist/api/modules/longbow/staking.js +1 -1
  126. package/build/dist/api/modules/meridian/index.js +1 -1
  127. package/build/dist/api/modules/meridian/markets.js +1 -1
  128. package/build/dist/api/modules/meridian/perps-batch.js +1 -1
  129. package/build/dist/api/modules/meridian/perps-common.js +1 -1
  130. package/build/dist/api/modules/meridian/perps-guards.js +1 -1
  131. package/build/dist/api/modules/meridian/perps-intents.js +1 -1
  132. package/build/dist/api/modules/meridian/perps-stream.js +1 -1
  133. package/build/dist/api/modules/meridian/perps.js +1 -1
  134. package/build/dist/api/modules/meridian/predict-read.js +1 -1
  135. package/build/dist/api/modules/meridian/rfq.js +1 -1
  136. package/build/dist/api/modules/merkl/discovery.js +1 -1
  137. package/build/dist/api/modules/merkl/index.js +1 -1
  138. package/build/dist/api/modules/merkl/manage.js +1 -1
  139. package/build/dist/api/modules/merkl/protocol.js +1 -1
  140. package/build/dist/api/modules/morpho/allocator.js +1 -1
  141. package/build/dist/api/modules/morpho/bundles-abi.js +1 -1
  142. package/build/dist/api/modules/morpho/bundles.js +1 -1
  143. package/build/dist/api/modules/morpho/in-kind.js +1 -1
  144. package/build/dist/api/modules/morpho/index.js +1 -1
  145. package/build/dist/api/modules/morpho/local-guard.js +1 -1
  146. package/build/dist/api/modules/morpho/midnight-abi.js +1 -1
  147. package/build/dist/api/modules/morpho/midnight.js +1 -1
  148. package/build/dist/api/modules/morpho/protocol.js +1 -1
  149. package/build/dist/api/modules/morpho/surface.js +1 -1
  150. package/build/dist/api/modules/morpho/vault-management.js +1 -1
  151. package/build/dist/api/modules/morpho/vault-tools.js +1 -1
  152. package/build/dist/api/modules/morpho/vault-v2.js +1 -1
  153. package/build/dist/api/modules/netnet/blackjack-hashes.js +1 -1
  154. package/build/dist/api/modules/netnet/card-abi.js +1 -1
  155. package/build/dist/api/modules/netnet/card-plan.js +1 -1
  156. package/build/dist/api/modules/netnet/card-policy.js +1 -1
  157. package/build/dist/api/modules/netnet/card-read.js +1 -1
  158. package/build/dist/api/modules/netnet/card-recovery.js +1 -1
  159. package/build/dist/api/modules/netnet/desk-action-abi.js +1 -1
  160. package/build/dist/api/modules/netnet/desk-action.js +1 -1
  161. package/build/dist/api/modules/netnet/desk-read.js +1 -1
  162. package/build/dist/api/modules/netnet/desk-registry.js +1 -1
  163. package/build/dist/api/modules/netnet/financial-abi.js +1 -1
  164. package/build/dist/api/modules/netnet/financial.js +1 -1
  165. package/build/dist/api/modules/netnet/index.js +1 -1
  166. package/build/dist/api/modules/netnet/staking.js +1 -1
  167. package/build/dist/api/modules/orbio/gateway.js +1 -1
  168. package/build/dist/api/modules/orbio/index.js +1 -1
  169. package/build/dist/api/modules/orbio/pins.js +1 -1
  170. package/build/dist/api/modules/orbio/positions.d.ts +2 -0
  171. package/build/dist/api/modules/orbio/positions.js +1 -0
  172. package/build/dist/api/modules/pendle/abi.d.ts +205 -0
  173. package/build/dist/api/modules/pendle/abi.js +1 -0
  174. package/build/dist/api/modules/pendle/convert.d.ts +24 -0
  175. package/build/dist/api/modules/pendle/convert.js +1 -0
  176. package/build/dist/api/modules/pendle/costs.d.ts +3 -0
  177. package/build/dist/api/modules/pendle/costs.js +1 -0
  178. package/build/dist/api/modules/pendle/index.d.ts +11 -0
  179. package/build/dist/api/modules/pendle/index.js +1 -0
  180. package/build/dist/api/modules/pendle/markets.d.ts +37 -0
  181. package/build/dist/api/modules/pendle/markets.js +1 -0
  182. package/build/dist/api/modules/pendle/positions.d.ts +18 -0
  183. package/build/dist/api/modules/pendle/positions.js +1 -0
  184. package/build/dist/api/modules/pendle/pricecheck.d.ts +95 -0
  185. package/build/dist/api/modules/pendle/pricecheck.js +1 -0
  186. package/build/dist/api/modules/pendle/reader.d.ts +17 -0
  187. package/build/dist/api/modules/pendle/reader.js +1 -0
  188. package/build/dist/api/modules/pendle/redeem.d.ts +15 -0
  189. package/build/dist/api/modules/pendle/redeem.js +1 -0
  190. package/build/dist/api/modules/pendle/trade.d.ts +2 -0
  191. package/build/dist/api/modules/pendle/trade.js +1 -0
  192. package/build/dist/api/modules/pendle/types.d.ts +26 -0
  193. package/build/dist/api/modules/pendle/types.js +0 -0
  194. package/build/dist/api/modules/pendle/validate.d.ts +424 -0
  195. package/build/dist/api/modules/pendle/validate.js +1 -0
  196. package/build/dist/api/modules/pendle/verify.d.ts +22 -0
  197. package/build/dist/api/modules/pendle/verify.js +1 -0
  198. package/build/dist/api/modules/pons/claim.js +1 -1
  199. package/build/dist/api/modules/pons/holder-directory.js +1 -1
  200. package/build/dist/api/modules/pons/index.js +1 -1
  201. package/build/dist/api/modules/pons/launch-status.js +1 -1
  202. package/build/dist/api/modules/pons/prices.js +1 -1
  203. package/build/dist/api/modules/pons/reads.d.ts +38 -2
  204. package/build/dist/api/modules/pons/reads.js +1 -1
  205. package/build/dist/api/modules/pons/swap-terms.js +1 -1
  206. package/build/dist/api/modules/pons/trade.js +1 -1
  207. package/build/dist/api/modules/poolstrade/index.js +1 -1
  208. package/build/dist/api/modules/priors/coverage.js +1 -1
  209. package/build/dist/api/modules/priors/discovery.js +1 -1
  210. package/build/dist/api/modules/priors/features.js +1 -1
  211. package/build/dist/api/modules/priors/holdings.d.ts +4 -0
  212. package/build/dist/api/modules/priors/holdings.js +1 -0
  213. package/build/dist/api/modules/priors/index.js +1 -1
  214. package/build/dist/api/modules/priors/integration.js +1 -1
  215. package/build/dist/api/modules/priors/market.js +1 -1
  216. package/build/dist/api/modules/priors/pt.js +1 -1
  217. package/build/dist/api/modules/priors/savings-exit.js +1 -1
  218. package/build/dist/api/modules/priors/starter-line.js +1 -1
  219. package/build/dist/api/modules/priors/stock-swap.js +1 -1
  220. package/build/dist/api/modules/relay/api.js +1 -1
  221. package/build/dist/api/modules/relay/bootstrap.js +1 -1
  222. package/build/dist/api/modules/relay/discovery.js +1 -1
  223. package/build/dist/api/modules/relay/inbound.js +1 -1
  224. package/build/dist/api/modules/relay/index.js +1 -1
  225. package/build/dist/api/modules/relay/order.js +1 -1
  226. package/build/dist/api/modules/relay/outbound-status.js +1 -1
  227. package/build/dist/api/modules/relay/readiness.js +1 -1
  228. package/build/dist/api/modules/relay/reads.js +1 -1
  229. package/build/dist/api/modules/relay/vaults.js +1 -1
  230. package/build/dist/api/modules/spark/actions.js +1 -1
  231. package/build/dist/api/modules/spark/details.js +1 -1
  232. package/build/dist/api/modules/spark/index.js +1 -1
  233. package/build/dist/api/modules/spark/management.js +1 -1
  234. package/build/dist/api/modules/steakhouse/analytics.js +1 -1
  235. package/build/dist/api/modules/steakhouse/erc4626.js +1 -1
  236. package/build/dist/api/modules/steakhouse/index.js +1 -1
  237. package/build/dist/api/modules/steakhouse/local-guard.js +1 -1
  238. package/build/dist/api/modules/steakhouse/management.js +1 -1
  239. package/build/dist/api/modules/steakhouse/share-symbol.d.ts +3 -0
  240. package/build/dist/api/modules/steakhouse/share-symbol.js +1 -0
  241. package/build/dist/api/modules/steakhouse/v2-exit.js +1 -1
  242. package/build/dist/api/modules/tickerspring/basket-routes.js +1 -1
  243. package/build/dist/api/modules/tickerspring/contract-reads.js +1 -1
  244. package/build/dist/api/modules/tickerspring/discovery.js +1 -1
  245. package/build/dist/api/modules/tickerspring/exit-preview.js +1 -1
  246. package/build/dist/api/modules/tickerspring/guards.js +1 -1
  247. package/build/dist/api/modules/tickerspring/index.js +1 -1
  248. package/build/dist/api/modules/tickerspring/journeys.js +1 -1
  249. package/build/dist/api/modules/tickerspring/ladder.js +1 -1
  250. package/build/dist/api/modules/tickerspring/maker.js +1 -1
  251. package/build/dist/api/modules/tickerspring/order-accounting.js +1 -1
  252. package/build/dist/api/modules/tickerspring/research.js +1 -1
  253. package/build/dist/api/modules/tickerspring/strategies.js +1 -1
  254. package/build/dist/api/modules/uniswap/auction-create.js +1 -1
  255. package/build/dist/api/modules/uniswap/auction.js +1 -1
  256. package/build/dist/api/modules/uniswap/batch.js +1 -1
  257. package/build/dist/api/modules/uniswap/common.js +1 -1
  258. package/build/dist/api/modules/uniswap/fees.js +1 -1
  259. package/build/dist/api/modules/uniswap/index.js +1 -1
  260. package/build/dist/api/modules/uniswap/local-guard.js +1 -1
  261. package/build/dist/api/modules/uniswap/oracle.js +1 -1
  262. package/build/dist/api/modules/uniswap/pool-math.js +1 -1
  263. package/build/dist/api/modules/uniswap/pools.js +1 -1
  264. package/build/dist/api/modules/uniswap/position.js +1 -1
  265. package/build/dist/api/modules/uniswap/protocol.js +1 -1
  266. package/build/dist/api/modules/uniswap/token-jar.js +1 -1
  267. package/build/dist/api/modules/uniswap/trade-batch.js +1 -1
  268. package/build/dist/api/modules/uniswap/trade.js +1 -1
  269. package/build/dist/api/modules/uniswap/v2.js +1 -1
  270. package/build/dist/api/modules/uniswap/v3.d.ts +1 -0
  271. package/build/dist/api/modules/uniswap/v3.js +1 -1
  272. package/build/dist/api/modules/uniswap/v4.js +1 -1
  273. package/build/dist/api/modules/uniswap/wrap.js +1 -1
  274. package/build/dist/api/modules/velora/claims.js +1 -1
  275. package/build/dist/api/modules/velora/delta-reads.js +1 -1
  276. package/build/dist/api/modules/velora/index.js +1 -1
  277. package/build/dist/api/modules/wormhole/index.js +1 -1
  278. package/build/dist/api/modules/wormhole/license.js +1 -1
  279. package/build/dist/api/modules/wormhole/quotetext.js +1 -1
  280. package/build/dist/api/modules/wormhole/scan-text.js +1 -1
  281. package/build/dist/api/modules/wormhole/token-check.js +1 -1
  282. package/build/dist/api/owner-signature.js +1 -1
  283. package/build/dist/api/positions.d.ts +5 -5
  284. package/build/dist/api/positions.js +1 -1
  285. package/build/dist/api/pricenote.js +1 -1
  286. package/build/dist/api/prices.js +1 -1
  287. package/build/dist/api/pricing.js +1 -1
  288. package/build/dist/api/reads.js +1 -1
  289. package/build/dist/api/routes.js +1 -1
  290. package/build/dist/api/rpc.js +1 -1
  291. package/build/dist/api/secret-fields.js +1 -1
  292. package/build/dist/api/send.js +1 -1
  293. package/build/dist/api/signing-registry.js +1 -1
  294. package/build/dist/api/signing.js +1 -1
  295. package/build/dist/api/simulate.js +1 -1
  296. package/build/dist/api/swap.js +1 -1
  297. package/build/dist/api/token-output.js +1 -1
  298. package/build/dist/api/tokens.js +1 -1
  299. package/build/dist/api/tool-policy.js +1 -1
  300. package/build/dist/api/tx.js +1 -1
  301. package/build/dist/api/types.d.ts +7 -2
  302. package/build/dist/api/untrusted.js +1 -1
  303. package/build/dist/api/vendor-limits.js +1 -1
  304. package/build/dist/chunks/{7YU6DELJ.js → 24CQ2SPB.js} +1 -1
  305. package/build/dist/chunks/2DUCTO5C.js +1 -0
  306. package/build/dist/chunks/2MZXTOZU.js +1 -0
  307. package/build/dist/chunks/2OJAOVMG.js +1 -0
  308. package/build/dist/chunks/2ZUP7ZEV.js +1 -0
  309. package/build/dist/chunks/{ZXQMF56D.js → 3AXVB23N.js} +1 -1
  310. package/build/dist/chunks/3ESNHZT5.js +1 -0
  311. package/build/dist/chunks/{GIV5JMTE.js → 3VAJW6TQ.js} +1 -1
  312. package/build/dist/chunks/{ALK6NKFP.js → 3WXK2FUA.js} +1 -1
  313. package/build/dist/chunks/{TQL7UDFL.js → 42DQTKEO.js} +1 -1
  314. package/build/dist/chunks/{E7R3J4H7.js → 43CSMYDO.js} +1 -1
  315. package/build/dist/chunks/46547QT3.js +1 -0
  316. package/build/dist/chunks/{XV2HQKND.js → 47YN4OUI.js} +1 -1
  317. package/build/dist/chunks/{S3HNPTXA.js → 4ALMYJJV.js} +1 -1
  318. package/build/dist/chunks/{SOYQOE5P.js → 4BVP652W.js} +1 -1
  319. package/build/dist/chunks/{GCWA4Z3W.js → 4ISR2U72.js} +1 -1
  320. package/build/dist/chunks/{AAGDMH54.js → 4TQQH7N6.js} +1 -1
  321. package/build/dist/chunks/{WTSMPDT5.js → 4YFVAYKR.js} +1 -1
  322. package/build/dist/chunks/{PTAWEHKB.js → 57JFKIMK.js} +1 -1
  323. package/build/dist/chunks/{3RFSGU2Y.js → 5CAAFU7R.js} +1 -1
  324. package/build/dist/chunks/{73N3TOJL.js → 5KUWLUPM.js} +1 -1
  325. package/build/dist/chunks/{SKQGLGES.js → 5MQ5KSSV.js} +1 -1
  326. package/build/dist/chunks/{AJP5LDM2.js → 5N4A5XAW.js} +1 -1
  327. package/build/dist/chunks/{OQVZVR2S.js → 5OKJEGBH.js} +1 -1
  328. package/build/dist/chunks/5U7TCKX2.js +2 -0
  329. package/build/dist/chunks/5WUKOQIJ.js +1 -0
  330. package/build/dist/chunks/5ZLOCQA4.js +1 -0
  331. package/build/dist/chunks/63YRSLDK.js +1 -0
  332. package/build/dist/chunks/64WKYWZV.js +1 -0
  333. package/build/dist/chunks/{JPOYTTTW.js → 65EQECL3.js} +1 -1
  334. package/build/dist/chunks/{57HAXNQV.js → 6AAARNZ3.js} +1 -1
  335. package/build/dist/chunks/6FTYNYGF.js +1 -0
  336. package/build/dist/chunks/{L7YBCMZU.js → 6L5KTE6Y.js} +1 -1
  337. package/build/dist/chunks/{53N7PNJH.js → 6PY3IRDS.js} +1 -1
  338. package/build/dist/chunks/{5VHH5PW3.js → 6YYCGUCU.js} +1 -1
  339. package/build/dist/chunks/{UNZRE3YU.js → 7UOOIDR3.js} +1 -1
  340. package/build/dist/chunks/{LQUDJCAR.js → 7WQEPZJY.js} +1 -1
  341. package/build/dist/chunks/A3PN3PK3.js +1 -0
  342. package/build/dist/chunks/A6YQ5H24.js +1 -0
  343. package/build/dist/chunks/{CXLEQCP3.js → ABPL3ZZI.js} +1 -1
  344. package/build/dist/chunks/{R7FXNZRM.js → AG67Z3SC.js} +1 -1
  345. package/build/dist/chunks/{BX7XQANB.js → ALPYEM7B.js} +1 -1
  346. package/build/dist/chunks/{OE3CLZHR.js → ALRRW7SF.js} +1 -1
  347. package/build/dist/chunks/AUOXDNUO.js +7 -0
  348. package/build/dist/chunks/AWXJV2YH.js +1 -0
  349. package/build/dist/chunks/{PEA32CWB.js → BAAXGB4K.js} +1 -1
  350. package/build/dist/chunks/{R53P2K3C.js → BIRMUW7Z.js} +1 -1
  351. package/build/dist/chunks/{EA6IYKIB.js → BK23XJXE.js} +1 -1
  352. package/build/dist/chunks/{NATG6YA6.js → BNG2IWZL.js} +1 -1
  353. package/build/dist/chunks/BQICZFLR.js +1 -0
  354. package/build/dist/chunks/{ASDKY5NX.js → BXHNYCH2.js} +1 -1
  355. package/build/dist/chunks/{L62M7LOB.js → C5ZZAYXD.js} +1 -1
  356. package/build/dist/chunks/{52DHGSG4.js → CERNEJ2F.js} +1 -1
  357. package/build/dist/chunks/{LKJBMHCE.js → CTMA4BTM.js} +1 -1
  358. package/build/dist/chunks/{QXNPPCOU.js → D6ZJPNK7.js} +1 -1
  359. package/build/dist/chunks/DFM4T6ZE.js +1 -0
  360. package/build/dist/chunks/{SJPM5ST4.js → DP2NIYBP.js} +1 -1
  361. package/build/dist/chunks/DVVFT42J.js +1 -0
  362. package/build/dist/chunks/E3UBHTJO.js +1 -0
  363. package/build/dist/chunks/E6RRXNV2.js +1 -0
  364. package/build/dist/chunks/{ZT47KN7A.js → E6UU7DL2.js} +1 -1
  365. package/build/dist/chunks/ECWGKLBW.js +1 -0
  366. package/build/dist/chunks/EKNSLLJK.js +1 -0
  367. package/build/dist/chunks/{XWEFKXKA.js → ENX72ARB.js} +1 -1
  368. package/build/dist/chunks/{DRWWPBOQ.js → EOQYLFXA.js} +1 -1
  369. package/build/dist/chunks/{ELZNT5Q3.js → ET23SES4.js} +1 -1
  370. package/build/dist/chunks/EU3OAJU2.js +1 -0
  371. package/build/dist/chunks/{2W46IRX6.js → EYFBVQ46.js} +1 -1
  372. package/build/dist/chunks/{VXLJRRKV.js → F26FK47J.js} +1 -1
  373. package/build/dist/chunks/{O5IVZHHP.js → F3BSEE52.js} +1 -1
  374. package/build/dist/chunks/FWD4L3CJ.js +1 -0
  375. package/build/dist/chunks/G7XSFUDL.js +1 -0
  376. package/build/dist/chunks/{5O5ZE3ZV.js → GHPREYQK.js} +1 -1
  377. package/build/dist/chunks/{AFHHRDPJ.js → GRIGSPD4.js} +1 -1
  378. package/build/dist/chunks/{TPDOUL4N.js → GVPX5XCL.js} +1 -1
  379. package/build/dist/chunks/{TLJPVYRJ.js → GW5IXLKU.js} +1 -1
  380. package/build/dist/chunks/H4NYYJ3Z.js +1 -0
  381. package/build/dist/chunks/{J3GFCBZZ.js → HSFOWJ3Z.js} +1 -1
  382. package/build/dist/chunks/{CY75R4FK.js → HTXKERNS.js} +1 -1
  383. package/build/dist/chunks/{6ZYLNB2B.js → HVM2EEXB.js} +1 -1
  384. package/build/dist/chunks/{U3F6DDML.js → I4TGMF2C.js} +1 -1
  385. package/build/dist/chunks/I6KUORFT.js +1 -0
  386. package/build/dist/chunks/{AMICUXS6.js → IKEJCBYU.js} +1 -1
  387. package/build/dist/chunks/IMRXZ7JB.js +1 -0
  388. package/build/dist/chunks/IQGY5FW7.js +1 -0
  389. package/build/dist/chunks/{L3ZM77SJ.js → IQIWASRD.js} +1 -1
  390. package/build/dist/chunks/JG27HM4P.js +1 -0
  391. package/build/dist/chunks/{V5LTA42G.js → JPNYUEQP.js} +1 -1
  392. package/build/dist/chunks/JZXYLHI7.js +1 -0
  393. package/build/dist/chunks/{QYYFRAWY.js → K22EXPWN.js} +1 -1
  394. package/build/dist/chunks/K72EYD6R.js +1 -0
  395. package/build/dist/chunks/KA7BPBCV.js +2 -0
  396. package/build/dist/chunks/KBKK7UNY.js +1 -0
  397. package/build/dist/chunks/{LBEMCOND.js → KBXU7U6Q.js} +1 -1
  398. package/build/dist/chunks/L6D26AMO.js +1 -0
  399. package/build/dist/chunks/{GGUEKSR4.js → L7OQUHM5.js} +1 -1
  400. package/build/dist/chunks/{F6WBPPBN.js → LDT3QTSY.js} +1 -1
  401. package/build/dist/chunks/{CE7D6MUS.js → LROVANUR.js} +1 -1
  402. package/build/dist/chunks/{WWFOYZT2.js → LVLVP5KQ.js} +1 -1
  403. package/build/dist/chunks/MBTARLZQ.js +1 -0
  404. package/build/dist/chunks/{SSTROLQM.js → MDDHG34Y.js} +1 -1
  405. package/build/dist/chunks/{OVK4EEOD.js → MDV7GECM.js} +1 -1
  406. package/build/dist/chunks/{DCTUYDWF.js → MFCPL6LF.js} +1 -1
  407. package/build/dist/chunks/MGPHD4VV.js +1 -0
  408. package/build/dist/chunks/{VC2RCYQE.js → MKAPRRKF.js} +1 -1
  409. package/build/dist/chunks/{FBSUTF3B.js → MKBNLGDD.js} +1 -1
  410. package/build/dist/chunks/{NRBIXV7V.js → MOPETB64.js} +1 -1
  411. package/build/dist/chunks/{ACN2BFMA.js → MQK6OP7S.js} +1 -1
  412. package/build/dist/chunks/{TWCSCRFS.js → MQYOG66Q.js} +1 -1
  413. package/build/dist/chunks/{2UU5TBBB.js → MXW2TP5P.js} +1 -1
  414. package/build/dist/chunks/MYFAKCQI.js +1 -0
  415. package/build/dist/chunks/{MKQVS3IO.js → NA7R6J5N.js} +1 -1
  416. package/build/dist/chunks/NB3LYS3G.js +1 -0
  417. package/build/dist/chunks/{TNSKEHPC.js → NDW5DAFL.js} +1 -1
  418. package/build/dist/chunks/{MRWCFTMS.js → NKX3FE34.js} +1 -1
  419. package/build/dist/chunks/NYNJITCM.js +1 -0
  420. package/build/dist/chunks/{YZSTP2E6.js → NZXQWDGF.js} +1 -1
  421. package/build/dist/chunks/{Z7RL4NGX.js → O6L4BJP4.js} +1 -1
  422. package/build/dist/chunks/{KSZMMNXK.js → OFI3Y55L.js} +1 -1
  423. package/build/dist/chunks/{2LM7U4S7.js → OTIXQZ3X.js} +1 -1
  424. package/build/dist/chunks/{WCKMQFGS.js → PADWZX7J.js} +1 -1
  425. package/build/dist/chunks/{6IM6A5VA.js → PBQSJSZO.js} +1 -1
  426. package/build/dist/chunks/PLZKXQ76.js +1 -0
  427. package/build/dist/chunks/{XUYHMOHS.js → PQC5635W.js} +1 -1
  428. package/build/dist/chunks/PSVOVZH7.js +70 -0
  429. package/build/dist/chunks/{PWBL4WKB.js → PWH464CJ.js} +1 -1
  430. package/build/dist/chunks/QJFXLYZG.js +1 -0
  431. package/build/dist/chunks/{4KQZTPMS.js → QRC4ZPDA.js} +1 -1
  432. package/build/dist/chunks/{4AKIXLXH.js → QSN6Y2K6.js} +1 -1
  433. package/build/dist/chunks/{C3TJLARP.js → QVYCJ6WV.js} +1 -1
  434. package/build/dist/chunks/{WVXW6VL3.js → RNC463IM.js} +1 -1
  435. package/build/dist/chunks/RPNAFUM5.js +1 -0
  436. package/build/dist/chunks/RVO3QK2B.js +1 -0
  437. package/build/dist/chunks/{FUXT7GRK.js → S2TAJHHK.js} +1 -1
  438. package/build/dist/chunks/{YHPOXAKA.js → S3FPF537.js} +1 -1
  439. package/build/dist/chunks/{H4S2ZCWK.js → S5WICHIS.js} +1 -1
  440. package/build/dist/chunks/SDHPFXRM.js +1 -0
  441. package/build/dist/chunks/{3NDVXEBR.js → SGEZIYJW.js} +1 -1
  442. package/build/dist/chunks/SK2VBNAU.js +1 -0
  443. package/build/dist/chunks/SKMPKAZI.js +1 -0
  444. package/build/dist/chunks/{5IIR3GIN.js → SQL6HD5E.js} +1 -1
  445. package/build/dist/chunks/SSIENQVU.js +1 -0
  446. package/build/dist/chunks/{EXRKBBX2.js → SUFA2GKR.js} +1 -1
  447. package/build/dist/chunks/TBCSZDAF.js +1 -0
  448. package/build/dist/chunks/{LMVB3B6T.js → TBIVTEP5.js} +1 -1
  449. package/build/dist/chunks/{2FSX7MMR.js → TJWVY4VO.js} +1 -1
  450. package/build/dist/chunks/{7XLEYOZH.js → TNKVRVTH.js} +1 -1
  451. package/build/dist/chunks/{VCLPOU7T.js → TPL4U3AQ.js} +1 -1
  452. package/build/dist/chunks/{QRDDKA4I.js → U4JGEMKT.js} +1 -1
  453. package/build/dist/chunks/{6AWTAE4Q.js → UA4O226F.js} +1 -1
  454. package/build/dist/chunks/UFVPMWPJ.js +1 -0
  455. package/build/dist/chunks/UHRCM7AG.js +1 -0
  456. package/build/dist/chunks/{XQXLFF7Y.js → UOGHQLQX.js} +1 -1
  457. package/build/dist/chunks/UP7FBDMJ.js +1 -0
  458. package/build/dist/chunks/{YQUKU2LS.js → UPMGGK34.js} +1 -1
  459. package/build/dist/chunks/VHLINDDS.js +1 -0
  460. package/build/dist/chunks/{PARWLWXW.js → VV2HEIFI.js} +1 -1
  461. package/build/dist/chunks/{YA5WWDEW.js → VVA72C6O.js} +1 -1
  462. package/build/dist/chunks/{TCPPYBGQ.js → W2OJ57ZO.js} +1 -1
  463. package/build/dist/chunks/{WQ6H62DM.js → W76QC2AW.js} +1 -1
  464. package/build/dist/chunks/{VFSRRDLY.js → WD37MEMZ.js} +1 -1
  465. package/build/dist/chunks/{R7QPJQP6.js → WGL46F3S.js} +1 -1
  466. package/build/dist/chunks/WIVYKLQM.js +2 -0
  467. package/build/dist/chunks/{XQUPZ3GU.js → WMNRP3YH.js} +1 -1
  468. package/build/dist/chunks/WOEKXQAH.js +1 -0
  469. package/build/dist/chunks/WPAF55SP.js +1 -0
  470. package/build/dist/chunks/{EVANKNJV.js → WPFAEBE7.js} +1 -1
  471. package/build/dist/chunks/WVONJOWN.js +1 -0
  472. package/build/dist/chunks/{TWSTOFN3.js → WWHCEMNB.js} +1 -1
  473. package/build/dist/chunks/{DZGEQBO7.js → XDZRO5JQ.js} +1 -1
  474. package/build/dist/chunks/XFKVU46U.js +3 -0
  475. package/build/dist/chunks/{RAKUK5VR.js → XJEOEMDS.js} +1 -1
  476. package/build/dist/chunks/XSD5NL7J.js +1 -0
  477. package/build/dist/chunks/{NU4K3TEZ.js → XSRIJUFU.js} +1 -1
  478. package/build/dist/chunks/{VFKNXQXI.js → Y7PRJOIK.js} +1 -1
  479. package/build/dist/chunks/Y7RPSDD2.js +1 -0
  480. package/build/dist/chunks/YAJYDD6C.js +1 -0
  481. package/build/dist/chunks/{5OEHZJ6X.js → YEXUSRIZ.js} +1 -1
  482. package/build/dist/chunks/YHRUAQQK.js +1 -0
  483. package/build/dist/chunks/{3EFV4FQF.js → YPM2UITD.js} +1 -1
  484. package/build/dist/chunks/{3WBDHUV2.js → YRXT3HTW.js} +1 -1
  485. package/build/dist/chunks/Z4SRGAVL.js +1 -0
  486. package/build/dist/chunks/{SQ5BNSXR.js → ZBFKKUNP.js} +1 -1
  487. package/build/dist/chunks/{NWSPC3NH.js → ZCOFMGPS.js} +1 -1
  488. package/build/dist/chunks/ZCUXM52B.js +1 -0
  489. package/build/dist/chunks/ZE7EU2CS.js +1 -0
  490. package/build/dist/chunks/{CQCVFRQ5.js → ZET37EIG.js} +1 -1
  491. package/build/dist/chunks/{VVEUJ36E.js → ZGKVXFM5.js} +1 -1
  492. package/build/dist/chunks/{WQQJ7UPJ.js → ZSQOMSOC.js} +1 -1
  493. package/build/dist/chunks/{JST5JGAP.js → ZYH4B2GR.js} +1 -1
  494. package/package.json +2 -2
  495. package/build/dist/chunks/2MSQ6JII.js +0 -1
  496. package/build/dist/chunks/3SC5UI35.js +0 -1
  497. package/build/dist/chunks/4GHVIBL5.js +0 -1
  498. package/build/dist/chunks/4X2JOQ2L.js +0 -1
  499. package/build/dist/chunks/5YS5V2LK.js +0 -1
  500. package/build/dist/chunks/6UPPUHCL.js +0 -1
  501. package/build/dist/chunks/AXYOJBX6.js +0 -1
  502. package/build/dist/chunks/CEIPDEXZ.js +0 -1
  503. package/build/dist/chunks/CUNQ5RG5.js +0 -1
  504. package/build/dist/chunks/EG6M6SSO.js +0 -1
  505. package/build/dist/chunks/EGUMOD3A.js +0 -1
  506. package/build/dist/chunks/G3MHDTGT.js +0 -1
  507. package/build/dist/chunks/G6HCV67X.js +0 -1
  508. package/build/dist/chunks/GJY3P6OG.js +0 -1
  509. package/build/dist/chunks/HIMVOTIU.js +0 -1
  510. package/build/dist/chunks/IBXYIN7Q.js +0 -1
  511. package/build/dist/chunks/IUE6RASI.js +0 -1
  512. package/build/dist/chunks/JWCOXLYA.js +0 -1
  513. package/build/dist/chunks/KHJFXJBU.js +0 -1
  514. package/build/dist/chunks/LLM5WDM3.js +0 -1
  515. package/build/dist/chunks/LQGPMOD2.js +0 -1
  516. package/build/dist/chunks/MYBDO5SA.js +0 -1
  517. package/build/dist/chunks/NAYRD43N.js +0 -1
  518. package/build/dist/chunks/NMYGNJIJ.js +0 -1
  519. package/build/dist/chunks/NSOEDRBU.js +0 -3
  520. package/build/dist/chunks/PZHR4ITH.js +0 -1
  521. package/build/dist/chunks/R7SXC74O.js +0 -1
  522. package/build/dist/chunks/RETS2ZEK.js +0 -1
  523. package/build/dist/chunks/SJPYXNOK.js +0 -1
  524. package/build/dist/chunks/SQZRVIVF.js +0 -1
  525. package/build/dist/chunks/SXAIXD56.js +0 -1
  526. package/build/dist/chunks/SXX3VTBP.js +0 -1
  527. package/build/dist/chunks/TMGWXDCZ.js +0 -1
  528. package/build/dist/chunks/TNLHMDWL.js +0 -1
  529. package/build/dist/chunks/UFS2RVEZ.js +0 -1
  530. package/build/dist/chunks/USSOVTD5.js +0 -1
  531. package/build/dist/chunks/UWOFA6GV.js +0 -1
  532. package/build/dist/chunks/V2OOOV6B.js +0 -1
  533. package/build/dist/chunks/XVFLT275.js +0 -1
  534. package/build/dist/chunks/YHB55C5T.js +0 -1
  535. package/build/dist/chunks/YOENHHKI.js +0 -1
@@ -1 +1 @@
1
- import{a as Ne,b as Ue}from"./SOYQOE5P.js";import{i as Te}from"./FUXT7GRK.js";import{o as we}from"./5O5ZE3ZV.js";import{b as mt}from"./AXYOJBX6.js";import{a as lt}from"./6IM6A5VA.js";import{c as ce}from"./MYBDO5SA.js";import{c as B,d as ct,e as pt,g as N,h as c,i as dt}from"./73N3TOJL.js";import{a as ut,b as te}from"./RETS2ZEK.js";import{a as E,d as fe,i as Le}from"./G6HCV67X.js";import{a as f}from"./5YS5V2LK.js";import{encodeFunctionData as In,erc20Abi as Cn,getAddress as Ut}from"viem";import{decodeFunctionData as Tn,encodeFunctionData as Ce,erc20Abi as An,getAddress as xn,parseAbi as Bn}from"viem";import{decodeEventLog as yn,decodeFunctionData as fn,parseAbi as et,encodeFunctionData as Ot,erc20Abi as gn,getAddress as Y}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 yt={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 zt,encodeAbiParameters as Kt,encodeFunctionData as Ge,erc20Abi as Vt,getAddress as Ae,keccak256 as Wt}from"viem";var re=Ae(A.contracts.usdg),Qt=Ae(A.strategyProfile.hook);function S(t="TickerSpring strategy calldata does not match the requested action."){throw new f(t)}function ft(t){return typeof t!="boolean"&&S("Provide an explicit repeat setting."),t}function gt(t,e=Qt){let a=BigInt(t)<BigInt(re)?[t,re]:[re,t];return Wt(Kt([{type:"address"},{type:"address"},{type:"uint24"},{type:"int24"},{type:"address"}],[...a,A.strategyProfile.poolFee,A.strategyProfile.tickSpacing,e]))}function Yt(t,e){(typeof t!="number"||!Number.isInteger(t)||t%10!==0||t<-887270||t>887260)&&S();let a=Te(t),n=a*a,s=1n<<192n;return BigInt(e.address)<BigInt(re)?n*10n**BigInt(e.decimals)*10n**18n/(s*10n**6n):s*10n**BigInt(e.decimals)*10n**18n/(n*10n**6n)}function He(t,e,a){let n=Yt(t,a),s=BigInt(te(e,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(t,e,a,n){i.inputs(e,["action","token","buyPrice","sellPrice","amount","repeat","startingPrice","id","min0","min1","agentTag"]);let s=e.action;["open","close","collect","setRepeat"].includes(String(s))||S("Choose open, close, collect or setRepeat.");let r=Ae(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"];i.inputs(e,[...I,"agentTag"]);let G=i.integer(e.id),F=s==="setRepeat"?ft(e.repeat):void 0,R=i.prepared(t,await i.request(t,`/v1/agent/prepare/${n}`,{owner:a,...i.attribution(e),action:s,id:G,...F===void 0?{}:{repeat:F}}),a,n);(R.txs.length!==1||!c(R.txs[0].to,r))&&S();let J=zt({abi:u,data:R.txs[0].data}),H=J.args;if((J.functionName!==s||H[0]!==BigInt(G))&&S(),s==="setRepeat"&&H[1]!==F&&S(),s==="collect"&&H[1]!==3&&S("Collect must deliver both strategy currencies."),s==="close"){let $=BigInt(i.integer(e.min0)),W=BigInt(i.integer(e.min1));($+W<=1n||typeof H[1]!="bigint"||typeof H[2]!="bigint"||H[1]<$||H[2]<W||H[4]!==3)&&S("Close must preserve protected minima and deliver both strategy currencies."),i.futureDeadline(String(H[3]))}return N(R.txs[0].data,Ge({abi:u,functionName:J.functionName,args:H}))||S(),i.result(t,R,a,{id:G,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."),i.inputs(e,["action","token","buyPrice","sellPrice","amount","repeat","startingPrice","agentTag"]);let o=i.positive(e.amount),p=Ae(i.address(e.token));BigInt(o)<11000000n&&S("TickerSpring grids require at least 11 USDG.");let m=i.price(i.text(e.buyPrice)),d=i.price(i.text(e.sellPrice));BigInt(te(m,18,"floor"))>=BigInt(te(d,18,"floor"))&&S("The grid sell price must be above its buy price.");let v=ft(e.repeat),k=await i.request(t,"/v1/tokens");Array.isArray(k.tokens)||S("TickerSpring token list is unavailable.");let b=k.tokens.map(i.object).filter(I=>c(I.address,p));b.length!==1&&S("Use a unique TickerSpring token address.");let y=b[0],w=i.token(y),D=i.object(y.markets);(c(p,re)||typeof D.grids!="boolean")&&S();let O=D.grids?void 0:i.price(i.text(e.startingPrice));D.grids&&e.startingPrice!==void 0&&S("startingPrice is only used to open a new grid market.");let x=D.grids?"open":"openWithMarket",l=i.prepared(t,await i.request(t,"/v1/agent/prepare/grid",{owner:a,...i.attribution(e),action:x,token:p,buyPrice:m,sellPrice:d,amount:t.formatAmount(o,6),repeat:v,...O===void 0?{}:{startingPrice:O}}),a,"grid"),h=i.object(l.bundle.params),T=i.object(h.open),P=i.futureDeadline(T.deadline);(!c(h.strategy,r)||!c(T.pool,gt(p))||T.sellFirst!==!1||T.repeat!==v||i.integer(T.amount)!==o||T.maxFeeBps!==100)&&S(),He(T.buyLower,m,w),He(T.sellLower,d,w);let q={pool:T.pool,buyLower:T.buyLower,sellLower:T.sellLower,sellFirst:!1,repeat:v,amount:BigInt(o),maxFeeBps:100,deadline:BigInt(P)},z=[q];if(O!==void 0){let I=i.object(h.market),G=BigInt(i.positive(I.initialPrice)),F=BigInt(i.positive(I.minimumPrice)),R=BigInt(i.positive(I.maximumPrice));(!c(I.token,p)||G<F||G>R)&&S(),kt(G,F,R,O,w),z=[q,p,G,F,R]}return l.txs.length!==1&&l.txs.length!==2&&S(),l.txs.length===2&&(!c(l.txs[0].to,re)||!N(l.txs[0].data,Ge({abi:Vt,functionName:"approve",args:[r,BigInt(o)]})))&&S("Grid approval must equal the exact USDG input."),(!c(l.txs.at(-1).to,r)||!N(l.txs.at(-1).data,Ge({abi:u,functionName:x,args:z})))&&S(),i.result(t,l,a,{input:{token:{address:re,symbol:"USDG",decimals:6,chainId:E},amount:o},token:w,buyPrice:m,sellPrice:d,repeat:v,startingPrice:O,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 kt(t,e,a,n,s){(typeof t!="bigint"||typeof e!="bigint"||typeof a!="bigint"||t<=0n||e<=0n||e>t||a<t)&&S();let r=t,u=e,o=a,p=r*r,m=1n<<192n,d=BigInt(s.address)<BigInt(re)?p*10n**BigInt(s.decimals)*10n**18n/(m*10n**6n):m*10n**BigInt(s.decimals)*10n**18n/(p*10n**6n),v=BigInt(te(n,18,"floor")),k=d>v?d-v:v-d;(v===0n||k*10000n>v*25n||u*10000n<r*9975n||o*10000n>r*10025n)&&S("TickerSpring grid initialization differs from the authorized starting price or bounds.")}var $e={poolFor:gt,checkPrice:He,checkInitialization:kt};import{decodeFunctionData as Xt,encodeFunctionData as Jt,parseAbi as Zt,zeroAddress as en}from"viem";var ht=Zt(K.kyber);function xe(t,e,a,n,s){let r=()=>{throw new f("TickerSpring basket route changes its input, output, amount, recipient or fee policy.")},u=Xt({abi:ht,data:t});(u.functionName!=="swap"||!u.args)&&r();let o=i.object(u.args[0]),p=i.object(o.desc);(!c(p.srcToken,e)||!c(p.dstToken,a)||!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((m,d)=>((typeof d!="bigint"||d<0n)&&r(),m+d),0n)!==n||!p.srcReceivers.every(m=>c(m,i.address(o.callTarget)))||!c(o.approveTarget,en)&&!c(o.approveTarget,i.address(o.callTarget)))&&r(),N(Jt({abi:ht,functionName:u.functionName,args:u.args}),t)||r()}import{getAddress as de,parseAbi as tn}from"viem";var ge=de(A.basketConfig.basketMakerV2),ne=de(A.contracts.usdg),ze=de(A.basketConfig.weth),nn=tn(K.maker);function Z(t="TickerSpring basket creation differs from the authorized name, tokens, weights, fee, deposit or recipient."){throw new f(t)}async function vt(t,e,a){i.inputs(e,["name","symbol","tokens","swapFeeBps","amount","payWith","minAmountOut","slippageBps","agentTag"]);let n=i.text(e.name),s=i.text(e.symbol);(n.length>64||!/^[A-Za-z0-9 ._+-]+$/.test(n)||!/^[A-Za-z0-9.+-]{1,20}$/.test(s)||/^ts/i.test(s))&&Z("Use a plain basket name and a symbol that does not start with ts."),(!Array.isArray(e.tokens)||e.tokens.length<2||e.tokens.length>8)&&Z("Choose 2 to 8 basket tokens with weights totaling 10000 basis points.");let r=e.tokens.map(l=>{let h=i.object(l);i.inputs(h,["token","weightBps"]);let T=de(i.address(h.token));return(typeof h.weightBps!="number"||!Number.isInteger(h.weightBps)||h.weightBps<100||h.weightBps>9900)&&Z("Each basket weight must be an integer from 100 to 9900 basis points."),{token:T,weightBps:h.weightBps}}).sort((l,h)=>BigInt(l.token)<BigInt(h.token)?-1:1);(new Set(r.map(l=>l.token.toLowerCase())).size!==r.length||r.reduce((l,h)=>l+h.weightBps,0)!==1e4||!r.some(l=>c(l.token,ne)||c(l.token,ze)))&&Z("Choose unique basket token addresses with USDG or WETH and weights totaling 10000 basis points.");let u=e.swapFeeBps??100;u!==30&&u!==100&&Z("Choose a basket swap fee of 30 or 100 basis points.");let o=i.positive(e.amount),p=L.minimum(e.minAmountOut),m=L.slippage(e),d=e.payWith===void 0?ne:de(i.address(e.payWith));!c(d,ne)&&!c(d,ze)&&Z("Pay the first basket deposit with USDG or WETH."),c(d,ne)&&BigInt(o)<25000000n&&Z("A basket first deposit must be worth at least 25 USDG.");let v=i.object(await L.api(t,"/v1/baskets/config"));(v.chainId!==4663||!c(v.basketMakerV2,ge)||!c(v.weth,ze)||!c(v.usdg,ne))&&Z("TickerSpring BasketMaker deployment changed; Oak needs a reviewed pin.");let k=await i.request(t,"/v1/agent/prepare/basket-make",{owner:a,...i.attribution(e),name:n,symbol:s,tokens:r.map(l=>({token:l.token,weightPct:l.weightBps/100})),swapFeePct:u/100,amount:t.formatAmount(o,c(d,ne)?6:18),payWith:c(d,ne)?"USDG":"WETH",slippageBps:m}),b=i.prepared(t,k,a,"basket-make"),y=i.object(b.bundle.params),w=i.object(y.basket),D=L.minimum(y.minOut),O=i.futureDeadline(y.deadline);(!c(y.maker,ge)||!c(y.token,d)||i.integer(y.amount)!==o||D<p||!c(y.recipient,a)||w.name!==n||w.symbol!==s||!Array.isArray(w.tokens)||!Array.isArray(w.normalizedWeights)||w.tokens.length!==r.length||w.normalizedWeights.length!==r.length||i.integer(w.swapFeePercentage)!==(BigInt(u)*10n**14n).toString()||!r.every((l,h)=>c(w.tokens[h],l.token)&&i.integer(w.normalizedWeights[h])===(BigInt(l.weightBps)*10n**14n).toString())||typeof w.salt!="string"||!/^0x[0-9a-fA-F]{64}$/.test(w.salt)||!Array.isArray(y.legs))&&Z();let x=y.legs.map(l=>{let h=i.object(l),T=i.address(h.tokenIn),P=i.address(h.tokenOut),q=BigInt(i.positive(h.amountIn)),z=i.text(h.data);return(!c(T,d)||!r.some(I=>c(I.token,P)))&&Z(),xe(z,T,P,q,ge),{tokenIn:T,tokenOut:P,amountIn:q,data:z}});return x.reduce((l,h)=>l+h.amountIn,0n)>BigInt(o)&&Z(),L.exactApproval(b.txs,d,ge,o),L.exactCall(b.txs,ge,nn,"make",[{name:n,symbol:s,tokens:r.map(l=>l.token),normalizedWeights:r.map(l=>BigInt(l.weightBps)*10n**14n),swapFeePercentage:BigInt(u)*10n**14n,salt:w.salt},d,BigInt(o),x,D,a,BigInt(O)]),i.result(t,b,a,{input:{token:{address:d,symbol:c(d,ne)?"USDG":"WETH",decimals:c(d,ne)?6:18,chainId:4663},amount:o},predictedPool:de(i.address(y.pool)),minimumBptOut:D.toString(),name:n,symbol:s,tokens:r,swapFeeBps:u,salt:w.salt,deadline:O,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 an,getAddress as wt,parseAbi as sn}from"viem";var rn=sn(["function cancel(uint256 id,uint256 min0,uint256 min1,uint64 deadline,uint8 deliveryMask)"]);async function Tt(t,e,a){i.inputs(e,["id"]);let n=i.integer(e.id),s=await L.account(t,a),u=i.object(s.data).limitOrders.map(i.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=i.object(o.order),m=i.token(o.token);if(!c(o.hook,A.contracts.limitOrderHook)||!c(p.owner,a)||o.side!=="buy"&&o.side!=="sell")throw new f("TickerSpring order identity could not be verified.");let d={address:wt(A.contracts.usdg),symbol:"USDG",decimals:6,chainId:4663},v=BigInt(Math.floor(Date.now()/1e3)+300),k=t.unsignedTx({to:wt(A.contracts.limitOrderHook),data:an({abi:rn,functionName:"cancel",args:[BigInt(n),0n,0n,v,3]}),value:"0",chainId:4663,description:`Simulate cancellation returns for order ${n}; never sign this read-only quote.`}),b=await t.preview([k],a),y=b.changes.map(w=>{let D=c(w.token.address,m.address)?m:c(w.token.address,d.address)?d:void 0;if(!D||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:D,amount:i.integer(w.amount)}});return{id:n,owner:a,chainId:4663,asOf:new Date().toISOString(),originalInput:{token:o.side==="buy"?d:m,amount:i.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 un}from"viem";var le={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 Ke(t,e){if(t.type.endsWith("[]"))return(!Array.isArray(e)||e.length>100)&&Q(),e.map(n=>Ke({...t,type:t.type.slice(0,-2)},n));if(t.type==="tuple"){let n=i.object(e),s=t.components;return i.inputs(n,s.map(r=>r.name)),Object.fromEntries(s.map(r=>[r.name,Ke(r,n[r.name])]))}if(/^u?int\d*$/.test(t.type)){(typeof e!="string"||!/^-?\d+$/.test(e)||t.type.startsWith("uint")&&e.startsWith("-"))&&Q();let n=BigInt(e),s=Number(t.type.replace(/\D/g,"")||256),r=t.type.startsWith("uint")?0n:-(1n<<BigInt(s-1)),u=t.type.startsWith("uint")?(1n<<BigInt(s))-1n:(1n<<BigInt(s-1))-1n;return(n<r||n>u)&&Q(),n}if(t.type==="address")return i.address(e);if(t.type==="bool")return typeof e!="boolean"&&Q(),e;if(t.type==="string")return i.text(e);let a=/^bytes(\d*)$/.exec(t.type);if(a)return(typeof e!="string"||!/^0x(?:[a-fA-F0-9]{2})*$/.test(e)||a[1]&&e.length!==2+Number(a[1])*2)&&Q(),e;Q()}function At(t){return{name:"tickerspring_contract_read",inputSchema:{type:"object",properties:{kind:{enum:["vault","limit","grid","spring","basket_vault","basket_factory","basket_maker"]},address:B,function:{type:"string"},arguments:{type:"array",maxItems:16}},required:["kind"],additionalProperties:!1},execute:async(e,a)=>{try{i.address(a),i.inputs(e,["kind","address","function","arguments"]),(typeof e.kind!="string"||!Object.hasOwn(le,e.kind))&&Q();let n=e.kind,s=le[n],r;n==="vault"?(r=i.address(e.address),A.vaults.some(b=>c(b.address,r))||Q()):(e.address!==void 0&&Q(),r=un("address"in s?s.address:n==="limit"?A.contracts.limitOrderHook:A.contracts.gridStrategy));let u=s.abi;if(e.function===void 0)return e.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=i.text(e.function),p=u.filter(b=>b.type==="function"&&b.name===o);(p.length!==1||p[0].type!=="function")&&Q();let m=p[0],d=e.arguments??[];(!Array.isArray(d)||d.length!==m.inputs.length)&&Q();let v=m.inputs.map((b,y)=>Ke(b,d[y])),k=await t.clientFor(4663).readContract({address:r,abi:u,functionName:o,args:v});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(t.plainError(n))}}}}var me={type:"string",pattern:"^\\d+$"},Ve={type:"string",pattern:"^\\d+(\\.\\d+)?$"},Be={type:"integer",minimum:1,maximum:90},xt={enum:["any","stock","crypto","utility","meme","unclassified"]};function _(t){throw new f(t)}function ie(t,e,a){return(typeof t!="number"||!Number.isInteger(t)||t<e||t>a)&&_(`Use an integer from ${e} to ${a}.`),t}function We(t){return typeof t!="boolean"&&_("Use an explicit boolean setting."),t}function ye(t,e){return(typeof t!="string"||!e.includes(t))&&_(`Choose ${e.join(", ")}.`),t}function cn(t){let e=i.text(t);return/^[a-z0-9][a-z0-9-]{0,63}$/.test(e)||_("Use an agent slug from tickerspring_agents."),e}function Qe(t){let e=i.text(t);return/^(?:[1-9]|[12][0-9]|30)d$/.test(e)||_("Choose a period from 1d to 30d."),e}function oe(t,e){let a=Object.entries(e).filter(([,n])=>n!==void 0).map(([n,s])=>[n,String(s)]);return a.length?`${t}?${new URLSearchParams(a)}`:t}function Ze(t){if(t&&typeof t=="object"&&!Array.isArray(t)&&Object.hasOwn(t,"decimal")){let e=t.decimal;return/^\d+(\.\d+)?$/.test(e)||_("Use a positive decimal string."),e}return Array.isArray(t)?`[${t.map(Ze).join(",")}]`:t&&typeof t=="object"?`{${Object.entries(t).filter(([,e])=>e!==void 0).map(([e,a])=>`${JSON.stringify(e)}:${Ze(a)}`).join(",")}}`:JSON.stringify(t)}var Ye=t=>({decimal:i.price(i.text(t))}),Xe=(t,e)=>({decimal:t.formatAmount(i.positive(e),6)});async function Je(t,e,a){let n=await ce(t.http,`https://api.tickerspring.com${e}`,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":"Oak-TickerSpring/1.0"},body:Ze(a)},s=>!!s&&typeof s=="object"&&Object.hasOwn(s,"data"));return(n.data===null||n.data===void 0)&&_("TickerSpring returned no backtest result."),{...L.readResult(e,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 Bt(t){let e=(n,s,r,u)=>({name:`tickerspring_${n}`,inputSchema:{type:"object",properties:s,required:r,additionalProperties:!1},execute:async(o,p)=>{try{return i.address(p),i.inputs(o,Object.keys(s)),await u(o,p)}catch(m){throw new f(t.plainError(m))}}}),a=async n=>{let s=await L.api(t,n);return s==null&&_("TickerSpring has no current data for this query."),L.readResult(n,s)};return[At(t),e("stats",{},[],async()=>{let n=await ce(t.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 L.readResult("/v1/public/stats",n)}),e("vault_history",{vault:B,kind:{enum:["prices","earnings"]}},["vault","kind"],async n=>{let s=i.address(n.vault);return A.vaults.some(r=>c(r.address,s))||_("Use a pinned TickerSpring agent vault."),a(`/v1/agent/vaults/${s}/${ye(n.kind,["prices","earnings"])}`)}),e("basket_history",{basket:B,days:Be},["basket"],n=>a(oe(`/v1/baskets/${i.address(n.basket)}/history`,{days:ie(n.days??30,1,90)}))),e("strategy_tokens",{kind:{enum:["grid","ladder"]},limit:{type:"integer",minimum:1,maximum:10},category:xt,include:{enum:["good","all"]}},["kind"],n=>{let s=ye(n.kind,["grid","ladder"]);return s==="ladder"&&n.category!==void 0&&_("The ladder scan does not accept a category filter."),a(oe(`/v1/agent/${s}/tokens`,{limit:ie(n.limit??5,1,10),include:ye(n.include??"all",["good","all"]),...s==="grid"?{category:ye(n.category??"any",xt.enum)}:{}}))}),e("ranges",{token:B,amount:me,days:Be,feeBps:{type:"integer",minimum:0,maximum:1e3}},["token"],n=>a(oe("/v1/agent/ranges",{token:i.address(n.token),days:ie(n.days??14,1,90),...n.amount===void 0?{}:{amountUsd:t.formatAmount(i.positive(n.amount),6)},...n.feeBps===void 0?{}:{feeBps:ie(n.feeBps,0,1e3)}}))),e("backtest_grid",{token:B,buyPrice:Ve,sellPrice:Ve,amount:me,repeat:{type:"boolean"},days:Be,feeBps:{type:"integer",minimum:0,maximum:1e3},needsVolume:{type:"boolean"}},["token","buyPrice","sellPrice","amount"],async n=>{let s=Ye(n.buyPrice),r=Ye(n.sellPrice),[u,o=""]=s.decimal.split("."),[p,m=""]=r.decimal.split("."),d=Math.max(o.length,m.length);return BigInt(`${u}${o.padEnd(d,"0")}`)>=BigInt(`${p}${m.padEnd(d,"0")}`)&&_("The grid sell price must be above its buy price."),BigInt(i.positive(n.amount))<10000n&&_("Backtest at least 0.01 USDG."),Je(t,"/v1/agent/backtest/grid",{token:i.address(n.token),buyPrice:s,sellPrice:r,amountUsd:Xe(t,n.amount),repeat:We(n.repeat??!0),days:ie(n.days??30,1,90),needsVolume:We(n.needsVolume??!0),...n.feeBps===void 0?{}:{feeBps:ie(n.feeBps,0,1e3)}})}),e("backtest_ladder",{token:B,side:{enum:["buy","sell"]},levels:{type:"array",minItems:1,maxItems:20,items:{type:"object",properties:{price:Ve,amount:me},required:["price","amount"],additionalProperties:!1}},days:Be,feeBps:{type:"integer",minimum:0,maximum:1e3},needsVolume:{type:"boolean"}},["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=i.object(r);return i.inputs(u,["price","amount"]),{price:Ye(u.price),amountUsd:Xe(t,u.amount)}});return Je(t,"/v1/agent/backtest/ladder",{token:i.address(n.token),side:ye(n.side,["buy","sell"]),levels:s,days:ie(n.days??30,1,90),needsVolume:We(n.needsVolume??!0),...n.feeBps===void 0?{}:{feeBps:ie(n.feeBps,0,1e3)}})}),e("strategy_finder",{amount:me,period:{type:"string"},token:B,category:{type:"string"},strategy:{type:"string"}},[],n=>a(oe("/v1/strategy-finder",{...n.amount===void 0?{}:{budget:t.formatAmount(i.positive(n.amount),6)},period:Qe(n.period??"7d"),...n.token===void 0?{}:{token:i.address(n.token)},...Object.fromEntries(["category","strategy"].filter(s=>n[s]!==void 0).map(s=>{let r=i.text(n[s]);return/^[a-z][a-z0-9-]{0,39}$/.test(r)||_("Use a published strategy or category identifier."),[s,r]}))}))),e("strategy_detail",{token:B,period:{type:"string"}},["token"],n=>a(oe(`/v1/strategy-finder/${i.address(n.token)}`,{period:Qe(n.period??"7d")}))),e("strategy_track_record",{},[],()=>a("/v1/strategy-finder/track-record")),e("backtest_strategy",{token:B,strategy:{type:"string"},variant:{type:"string"},settings:{type:"object"},amount:me,days:{type:"integer",minimum:21,maximum:60},period:{type:"string"}},["token","strategy"],n=>{let s=i.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:i.text(n.variant);return r!==void 0&&!/^[a-zA-Z0-9._-]{1,80}$/.test(r)&&_("Use a published strategy variant identifier."),Je(t,"/v1/strategy-finder/backtest",{token:i.address(n.token),strategy:s,...r===void 0?{}:{variant:r},...n.amount===void 0?{}:{budgetUsd:Xe(t,n.amount)},days:ie(n.days??60,21,60),period:Qe(n.period??"7d")})}),e("agents",{},[],()=>a("/v1/agents")),e("agent_vault",{slug:{type:"string"}},["slug"],(n,s)=>a(oe(`/v1/agents/${cn(n.slug)}/vault`,{owner:s}))),e("trade_directory",{},[],()=>a("/v1/trade")),e("trade_token",{token:B},["token"],n=>a(oe("/v1/trade/token",{address:i.address(n.token)}))),e("trade_quotes",{tokenIn:B,tokenOut:B,amount:me},["tokenIn","tokenOut","amount"],n=>a(oe("/v1/trade/quotes",{tokenIn:i.address(n.tokenIn),tokenOut:i.address(n.tokenOut),amountIn:i.positive(n.amount)}))),e("spring_config",{},[],()=>a("/v1/spring-orders/config")),e("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."})),e("sign_request",{id:{type:"string"}},["id"],async(n,s)=>{let r=i.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=i.object(await L.api(t,u)),p=i.object(o.bundle);(!c(p.owner,s)||p.chainId!==4663)&&_("This sign request does not belong to the current wallet on chain 4663.");let m=Date.parse(i.text(p.expiresAt));return Number.isFinite(m)||_("TickerSpring returned no valid sign-request expiration."),{...L.readResult(u,o),expired:m<=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."}}),e("instructions",{document:{enum:["skill","api","privy","turnkey","openapi"]}},["document"],async n=>{let s=ye(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 Dt,getAddress as pn,parseAbi as dn}from"viem";var St=pn(A.contracts.limitOrderHook),Et=dn(["function realize(uint256 id)","function claim(uint256 id,bool currency0)"]);function ln(t){i.inputs(t,["action","id","currency0"]);let e=BigInt(i.integer(t.id));if(t.action==="realize"){if(t.currency0!==void 0)throw new f("Use currency0 only for a single-currency claim.");return Dt({abi:Et,functionName:"realize",args:[e]})}if(t.action!=="claim"||typeof t.currency0!="boolean")throw new f("Choose realize, or claim with an explicit currency0 boolean. Use tickerspring_claim to claim both currencies.");return Dt({abi:Et,functionName:"claim",args:[e,t.currency0]})}async function mn(t,e,a){let n=i.object(await t.clientFor(4663).readContract({address:St,abi:le.limit.abi,functionName:"getOrder",args:[BigInt(i.integer(e))]}));if(!c(n.owner,a))throw new f("This limit order does not belong to the current wallet.")}function It(t){return{name:"tickerspring_order_accounting",inputSchema:{type:"object",properties:{action:{enum:["realize","claim"]},id:{type:"string",pattern:"^\\d+$"},currency0:{type:"boolean"}},required:["action","id"],additionalProperties:!1},execute:async(e,a)=>{try{i.address(a);let n=ln(e);await mn(t,e.id,a);let s=[t.unsignedTx({to:St,data:n,value:"0",chainId:4663,description:e.action==="realize"?`Realize accounting for order ${String(e.id)}`:`Claim currency${e.currency0?"0":"1"} for order ${String(e.id)}`})],r=await t.preview(s,a);return{txs:s,from:a,id:i.integer(e.id),action:e.action,preview:r,source:le.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(t.plainError(n))}}}}var Ee="https://api.tickerspring.com",M={type:"string",pattern:"^\\d+$"},ae={address:Y(A.contracts.usdg),symbol:"USDG",decimals:6,chainId:E},Se=K.vault,bn=K.basket,De=Y(A.contracts.basketZap);function g(t){throw new f(t)}async function U(t,e){return(await ce(t.http,`${Ee}${e}`,{headers:{"User-Agent":"Oak-TickerSpring/1.0"}},n=>!!n&&typeof n=="object"&&Object.hasOwn(n,"data"))).data}function V(t,e){return{chainId:E,source:`${Ee}${t}`,data:e}}function ke(t){let e=t.slippageBps??100;return(typeof e!="number"||!Number.isInteger(e)||e<1||e>500)&&g("Use slippageBps from 1 to 500."),e}function be(t){let e=BigInt(i.positive(t));return e<=1n&&g("Provide a minimum output greater than 1 base unit."),e}function he(t,e,a,n,s){let r=t.at(-1),u=Ot({abi:a,functionName:n,args:s});(!r||!c(r.to,e)||!N(r.data,u))&&g("TickerSpring calldata does not match the requested action.")}function tt(t,e,a,n){if(t.length!==1&&t.length!==2&&g("TickerSpring returned unexpected transaction steps."),t.length===2){let s=t[0],r=Ot({abi:gn,functionName:"approve",args:[a,BigInt(n)]});(!c(s.to,e)||!N(s.data,r))&&g("TickerSpring approval must match the exact input amount and spender.")}}function Pt(t){let e=Y(i.address(t));return A.vaults.some(a=>c(a.address,e))||g("This vault is not pinned to an official TickerSpring agent release in Oak."),e}async function nt(t,e){let a=Pt(e),n=i.object(await U(t,`/v1/agent/vaults/${a}`)),s=i.object(n.agentVault),r=A.vaults.find(u=>c(u.address,a));return(!c(n.vault,a)||!c(s.address,a)||s.release!==r.release||s.audited!==!0||s.shareDecimals!==12||!c(i.object(s.asset).address,ae.address)||s.stale!==!1)&&g("TickerSpring vault identity, release or current state could not be verified."),{address:a,data:n,entry:s,share:i.token({address:a,symbol:s.symbol,decimals:12})}}async function _t(t,e){let a=`/v1/agent/accounts/${e}`,n=i.object(await U(t,a));return(!c(n.owner,e)||!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(i.text(n.asOf)))||i.object(n.totals).complete!==!0)&&g("TickerSpring could not return the complete account for this wallet. Retry before acting."),{...V(a,n),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(t,e,a){i.inputs(e,["vault","amount","minShares","slippageBps","agentTag"]);let n=i.positive(e.amount),s=be(e.minShares),r=ke(e),u=await nt(t,e.vault);(u.entry.status!=="open"||u.entry.depositsOpen!==!0)&&g(`TickerSpring vault is not taking deposits: ${i.text(u.entry.statusReason)}`),BigInt(n)<BigInt(i.integer(u.entry.minDepositUnits))&&g("Increase the deposit to the vault minimum shown by tickerspring_vaults."),u.entry.remainingCapacityUnits!==null&&BigInt(n)>BigInt(i.integer(u.entry.remainingCapacityUnits))&&g("Reduce the deposit to the vault remaining capacity.");let o=await i.request(t,"/v1/agent/prepare/vault-deposit",{owner:a,...i.attribution(e),vault:u.address,amount:t.formatAmount(n,6),slippageBps:r}),p=i.prepared(t,o,a,"vault-deposit"),m=i.object(p.bundle.params),d=be(m.minShares);return(!c(m.vault,u.address)||!c(m.receiver,a)||i.integer(m.assets)!==n||d<s)&&g("TickerSpring deposit does not preserve the requested vault, amount, receiver or minimum shares."),tt(p.txs,ae.address,u.address,n),he(p.txs,u.address,Se,"requestDeposit",[BigInt(n),a,d]),i.result(t,p,a,{input:{token:ae,amount:n},minimumOutput:{token:u.share,amount:d.toString()}},`Vault harvest fee: ${String(u.entry.feeBps)} bps. Deposit creates a keeper request, not immediately owned shares. Monitor tickerspring_account; cancel an unfilled request with tickerspring_vault_cancel_deposit.`)}async function hn(t,e,a){i.inputs(e,["vault","id","agentTag"]);let n=Pt(e.vault),s=i.integer(e.id),r=i.prepared(t,await i.request(t,"/v1/agent/prepare/vault-cancel-deposit",{owner:a,...i.attribution(e),vault:n,id:s}),a,"vault-cancel-deposit");return r.txs.length!==1&&g("TickerSpring returned unexpected cancellation steps."),he(r.txs,n,Se,"cancelDeposit",[BigInt(s)]),i.result(t,r,a,{vault:n,id:s},"Cancel only a pending deposit. Verify refunded USDG and request status with tickerspring_account and balances.")}async function vn(t,e,a){i.inputs(e,["vault","shares","mode","minUsdg","minToken","slippageBps","agentTag"]);let n=i.positive(e.shares),s=ke(e);e.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."),e.mode!=="usdg"&&e.mode!=="in-kind"&&g("Choose usdg or in-kind withdrawal mode.");let r=BigInt(i.integer(e.minUsdg)),u=e.mode==="in-kind"?BigInt(i.integer(e.minToken)):0n;r+u<=1n&&g("Provide protected withdrawal minima greater than 1 base unit in total."),e.mode==="usdg"&&e.minToken!==void 0&&g("Use minToken only for in-kind withdrawals.");let o=await nt(t,e.vault);(!Array.isArray(o.entry.withdrawModes)||!o.entry.withdrawModes.includes(e.mode))&&g("That withdrawal mode is not currently offered by this vault.");let p=i.prepared(t,await i.request(t,"/v1/agent/prepare/vault-withdraw",{owner:a,...i.attribution(e),vault:o.address,shares:t.formatAmount(n,12),mode:e.mode,slippageBps:s}),a,"vault-withdraw");(p.txs.length!==1||!c(p.txs[0].to,o.address))&&g("TickerSpring returned unexpected withdrawal steps.");let m=fn({abi:Se,data:p.txs[0].data}),d=m.args;if((d[0]!==BigInt(n)||!c(d[1],a)||!c(d[2],a))&&g("TickerSpring withdrawal must redeem the requested shares for this wallet."),e.mode==="in-kind")(m.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{(m.functionName!=="redeem"||typeof d[4]!="bigint"||d[4]<r)&&g("TickerSpring withdrawal minimum does not protect the requested USDG.");let v=i.object(d[3]);c(v.tokenIn,i.address(i.object(o.entry.token).address))||g("TickerSpring withdrawal route must sell only the vault pool token.")}return he(p.txs,o.address,Se,m.functionName,d),i.result(t,p,a,{input:{token:o.share,amount:n},mode:e.mode,minimumOutputs:[{token:ae,amount:r.toString()},...e.mode==="in-kind"?[{token:i.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 wn(t,e,a,n){i.inputs(e,["basket","token","amount","minAmountOut","slippageBps","agentTag"]);let s=Y(i.address(e.basket)),r=A.baskets.find(l=>c(l.pool,s));if(!r){let l=i.object(await U(t,`/v1/baskets/${s}`));(!c(l.pool,s)||l.listed!==!1||!c(l.maker,a)||!Array.isArray(l.tokens))&&g("Use a pinned basket, or an unverified basket this wallet created through the pinned BasketMaker.");let h=i.text(l.createdTx);/^0x[0-9a-fA-F]{64}$/.test(h)||g("The basket creation receipt is unavailable.");let T=t.clientFor(E),P=await T.getTransactionReceipt({hash:h}),q=Y(A.basketConfig.basketMakerV2),z=P.logs.some(F=>{if(!c(F.address,q))return!1;try{let R=yn({abi:et(K.maker),data:F.data,topics:F.topics}),J=i.object(R.args);return R.eventName==="Made"&&c(J.pool,s)&&c(J.maker,a)&&c(J.recipient,a)}catch{return!1}});(P.status!=="success"||!z||await T.readContract({address:Y(A.basketConfig.weightedPoolFactory),abi:et(K.basketFactory),functionName:"isPoolFromFactory",args:[s]})!==!0)&&g("This basket has no successful creation by the pinned BasketMaker and factory.");let I=l.tokens.map(F=>i.token(F)),G=await T.readContract({address:Y(A.basketConfig.vault),abi:et(K.basketVault),functionName:"getPoolTokens",args:[s]});(new Set(I.map(F=>F.address.toLowerCase())).size!==I.length||!Array.isArray(G)||G.length!==I.length||!I.every(F=>G.some(R=>c(R,F.address))))&&g("The unverified basket constituents disagree with its on-chain vault."),r={pool:s,tokens:I}}let u=r,o=e.token===void 0?ae:(()=>{let l=Y(i.address(e.token));if(c(l,ae.address))return ae;let h=[...u.tokens,...A.baskets.flatMap(T=>T.tokens)].find(T=>c(T.address,l));return(!h||!u.tokens.some(T=>c(T.address,l))&&h.symbol!=="WETH")&&g("Use USDG, WETH or a constituent of this basket."),i.token(h)})(),p=i.positive(e.amount),m=be(e.minAmountOut),d=ke(e),v=i.token({address:s,symbol:"BPT",decimals:18}),k=n==="buy"?o:v,b=n==="buy"?v:o,y=i.prepared(t,await i.request(t,`/v1/agent/prepare/basket-${n}`,{owner:a,...i.attribution(e),basket:s,amount:t.formatAmount(p,k.decimals),[n==="buy"?"payWith":"receive"]:o.address,slippageBps:d}),a,`basket-${n}`),w=i.object(y.bundle.params),D=be(w.minOut),O=i.futureDeadline(w.deadline);(w.side!==n||!c(w.zap,De)||!c(w.pool,s)||!c(w.token,o.address)||!c(w.recipient,a)||i.integer(w.amount)!==p||D<m||!Array.isArray(w.legs))&&g("TickerSpring basket quote does not preserve the requested pool, token, amount, receiver or minimum.");let x=w.legs.map(l=>{let h=i.object(l),T=i.address(h.tokenIn),P=i.address(h.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 q=i.text(h.data);/^0x(?:[0-9a-fA-F]{2})+$/.test(q)||g("TickerSpring returned malformed basket route calldata.");let z=BigInt(i.positive(h.amountIn));return xe(q,T,P,z,De),{tokenIn:T,tokenOut:P,amountIn:z,data:q}});return n==="buy"&&x.reduce((l,h)=>l+h.amountIn,0n)>BigInt(p)&&g("TickerSpring basket routes exceed the authorized input."),tt(y.txs,k.address,De,p),he(y.txs,De,bn,n,n==="buy"?[s,o.address,BigInt(p),x,D,a,BigInt(O)]:[s,BigInt(p),o.address,x,D,a,BigInt(O)]),i.result(t,y,a,{input:{token:k,amount:p},minimumOutput:{token:b,amount:D.toString()},deadline:O},"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 Ft(t){let e=(a,n,s,r)=>({name:`tickerspring_${a}`,inputSchema:{type:"object",properties:{...n,...["grid","ladder_strategy","ladder","basket_make","vault_deposit","vault_cancel_deposit","vault_withdraw","basket_buy","basket_sell"].includes(a)?{agentTag:{type:"string",pattern:"^[a-z0-9][a-z0-9._-]{0,39}$"}}:{}},required:s,additionalProperties:!1},execute:async(u,o)=>{try{return i.address(o),await r(u,o)}catch(p){throw new f(t.plainError(p))}}});return[...Bt(t),It(t),e("products",{},[],async a=>(i.inputs(a,[]),{...Ue(),...V("/v1/agent/products",await U(t,"/v1/agent/products"))})),e("tokens",{query:{type:"string",maxLength:128},category:{type:"string"},sort:{enum:["volume"]}},[],async a=>{i.inputs(a,["query","category","sort"]);let n=new URLSearchParams;if(a.query!==void 0){let u=i.text(a.query);u.length>128&&g("Use a token query up to 128 characters."),n.set("q",u)}if(a.category!==void 0){let u=i.text(a.category);/^[a-z][a-z0-9-]{0,39}$/.test(u)||g("Use a published token category."),n.set("category",u)}a.sort!==void 0&&(a.sort!=="volume"&&g("Use the documented volume sort."),n.set("sort","volume"));let s=`/v1/tokens${n.size?`?${n}`:""}`,r;try{r=i.object(await U(t,s))}catch(u){throw new f(`${t.plainError(u)} ${Ne}`)}return Array.isArray(r.tokens)||g("TickerSpring token discovery is unavailable."),{tokenFilterGuidance:Ne,...V(s,{...r,tokens:r.tokens.map(u=>{let o=i.object(u);return{...o,...i.token(o)}})})}}),e("vaults",{vault:B},[],async a=>{if(i.inputs(a,["vault"]),a.vault!==void 0){let s=await nt(t,a.vault);return V(`/v1/agent/vaults/${s.address}`,s.data)}let n=await U(t,"/v1/agent/vaults");return Array.isArray(n)||g("TickerSpring vault list is unavailable."),V("/v1/agent/vaults",n.map(s=>{let r=i.object(s),u=Y(i.address(r.address));return{...r,address:u,chainId:E,pinned:A.vaults.some(o=>c(o.address,u)&&o.release===r.release)}}))}),e("baskets",{basket:B},[],async(a,n)=>{i.inputs(a,["basket"]);let s=a.basket===void 0?"/v1/baskets":`/v1/baskets/${Y(i.address(a.basket))}`,r=await U(t,s),u=a.basket===void 0?void 0:await U(t,`${s}/account/${n}`);return{...V(s,r),...u===void 0?{}:{holding:u}}}),e("order_exit_preview",{id:M},["id"],(a,n)=>Tt(t,a,n)),e("account",{},[],(a,n)=>(i.inputs(a,[]),_t(t,n))),e("activity",{cursor:{type:"string",minLength:1,maxLength:512}},[],async(a,n)=>{i.inputs(a,["cursor"]);let s=a.cursor===void 0?void 0:i.text(a.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=i.object(await U(t,r));return i.text(u.cursor),Array.isArray(u.changes)||g("TickerSpring activity is unavailable."),V(r,u)}),e("report_card",{agent:{type:"string",pattern:"^[a-z0-9][a-z0-9._-]{0,39}$"}},[],async(a,n)=>{i.inputs(a,["agent"]);let s=i.attribution({agentTag:a.agent}),r=`/v1/agent/report-card/${n}${s.agentTag===void 0?"":`?agent=${encodeURIComponent(String(s.agentTag))}`}`;return V(r,await U(t,r))}),e("plan",{kind:{enum:["grid","ladder"]},token:B,amount:M,gap:{type:"string"},days:{type:"integer",minimum:28,maximum:90}},["kind","token","amount"],async a=>{i.inputs(a,["kind","token","amount","gap","days"]),a.kind!=="grid"&&a.kind!=="ladder"&&g("Choose grid or ladder planning.");let n=i.positive(a.amount);BigInt(n)<(a.kind==="grid"?11000000n:55000000n)&&g("Plan at least 11 USDG for a grid or 55 USDG for a ladder."),a.kind==="ladder"&&(a.gap!==void 0||a.days!==void 0)&&g("The ladder planner does not accept gap or days.");let s=a.days??60;(typeof s!="number"||!Number.isInteger(s)||s<28||s>90)&&g("Choose 28 to 90 days for grid planning.");let r=a.gap===void 0?void 0:i.price(i.text(a.gap));if(r!==void 0){let[o,p=""]=r.split("."),m=10n**BigInt(p.length),d=BigInt(`${o}${p}`);(d*1000n<m*5n||d*2n>m)&&g("Choose a grid gap from 0.005 to 0.5.")}let u=`/v1/agent/${a.kind}/plan?token=${i.address(a.token)}&amountUsd=${t.formatAmount(n,6)}${a.kind==="grid"?`&days=${s}${r===void 0?"":`&gap=${r}`}`:""}`;return V(u,await U(t,u))}),e("swap_quote",{tokenIn:B,tokenOut:B,amount:M,slippageBps:{type:"integer",minimum:1,maximum:500}},["tokenIn","tokenOut","amount"],async a=>{i.inputs(a,["tokenIn","tokenOut","amount","slippageBps"]);let n=Y(i.address(a.tokenIn)),s=Y(i.address(a.tokenOut)),r;if(c(n,ae.address))r=ae;else if(c(n,A.basketConfig.weth))r=i.token({address:n,symbol:"WETH",decimals:18});else{let k=i.object(await U(t,"/v1/tokens"));Array.isArray(k.tokens)||g("TickerSpring token list is unavailable.");let b=k.tokens.map(i.object).filter(y=>c(y.address,n));b.length!==1&&g("Use an input address uniquely listed by TickerSpring."),r=i.token(b[0])}let u=`/v1/agent/swap/quote?tokenIn=${n}&tokenOut=${s}&amount=${t.formatAmount(i.positive(a.amount),r.decimals)}&slippageBps=${ke(a)}`,o=i.object(await U(t,u)),p=i.token(o.tokenOut),m=i.token(o.tokenIn);(!c(m.address,n)||m.decimals!==r.decimals||!c(p.address,s)||i.integer(o.amountInUnits)!==i.positive(a.amount))&&g("TickerSpring swap quote does not match the requested input and output.");let d=i.positive(o.expectedOutUnits),v=i.positive(o.minimumOutUnits);return BigInt(v)>BigInt(d)&&g("TickerSpring swap quote has inconsistent output amounts."),{...V(u,o),input:{token:r,amount:i.positive(a.amount)},output:{token:p,amount:d},minimumOutput:{token:p,amount:v},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."}}),e("candles",{token:B,interval:{enum:["15m","1h","4h","1d"]},limit:{type:"integer",minimum:1,maximum:500}},["token"],async a=>{i.inputs(a,["token","interval","limit"]);let n=a.interval??"1h",s=a.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=${i.address(a.token)}&interval=${String(n)}&limit=${s}`;return V(r,await U(t,r))}),e("basket_plan",{tokens:{type:"array",minItems:1,maxItems:8,items:{type:"object",properties:{token:B,weightBps:{type:"integer",minimum:100,maximum:1e4}},required:["token"],additionalProperties:!1}},name:{type:"string"},symbol:{type:"string"},swapFeeBps:{enum:[30,100]}},["tokens"],async a=>{i.inputs(a,["tokens","name","symbol","swapFeeBps"]),(!Array.isArray(a.tokens)||a.tokens.length<1||a.tokens.length>8)&&g("Choose 1 to 8 tokens for basket planning.");let n=a.tokens.map(u=>{let o=i.object(u);return i.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:i.address(o.token),...o.weightBps===void 0?{}:{weightPct:o.weightBps/100}}}),s=a.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 V(r,await i.request(t,r,{tokens:n,swapFeePct:s/100,...a.name===void 0?{}:{name:i.text(a.name)},...a.symbol===void 0?{}:{symbol:i.text(a.symbol)}}))}),e("tx_status",{hash:{type:"string",pattern:"^0x[0-9a-fA-F]{64}$"}},["hash"],async(a,n)=>{i.inputs(a,["hash"]);let s=i.text(a.hash);/^0x[0-9a-fA-F]{64}$/.test(s)||g("Provide a full transaction hash.");let r=await t.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."}}),e("spring_orders",{},[],a=>(i.inputs(a,[]),{chainId:E,url:"https://tickerspring.com/trade/spring-orders",source:`${Ee}/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."})),e("capabilities",{},[],a=>(i.inputs(a,[]),{...Ue(),chainId:E,source:`${Ee}/v1/agent/llms.txt`,inventory:yt,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(a=>e(a==="grid"?"grid":"ladder_strategy",{action:{enum:["open","close","setRepeat","collect"]},token:B,buyPrice:{type:"string"},sellPrice:{type:"string"},amount:M,repeat:{type:"boolean"},startingPrice:{type:"string"},id:M,min0:M,min1:M},["action"],(n,s)=>bt(t,n,s,a))),e("ladder",{token:B,side:{enum:["buy","sell"]},slippageBps:{type:"integer",minimum:0,maximum:9999},levels:{type:"array",minItems:2,maxItems:20,items:{type:"object",properties:{price:{type:"string"},amount:M,minAmountOut:M},required:["price","amount","minAmountOut"],additionalProperties:!1}}},["token","side","levels"],(a,n)=>Ct(t,a,n)),e("basket_make",{name:{type:"string"},symbol:{type:"string"},tokens:{type:"array",minItems:2,maxItems:8,items:{type:"object",properties:{token:B,weightBps:{type:"integer",minimum:100,maximum:9900}},required:["token","weightBps"],additionalProperties:!1}},swapFeeBps:{enum:[30,100]},amount:M,payWith:B,minAmountOut:M,slippageBps:{type:"integer",minimum:1,maximum:500}},["name","symbol","tokens","amount","minAmountOut"],(a,n)=>vt(t,a,n)),e("vault_deposit",{vault:B,amount:M,minShares:M,slippageBps:{type:"integer",minimum:1,maximum:500}},["vault","amount","minShares"],(a,n)=>kn(t,a,n)),e("vault_cancel_deposit",{vault:B,id:M},["vault","id"],(a,n)=>hn(t,a,n)),e("vault_withdraw",{vault:B,shares:M,mode:{enum:["usdg","in-kind"]},minUsdg:M,minToken:M,slippageBps:{type:"integer",minimum:1,maximum:500}},["vault","shares","mode","minUsdg"],(a,n)=>vn(t,a,n)),...["buy","sell"].map(a=>e(`basket_${a}`,{basket:B,token:B,amount:M,minAmountOut:M,slippageBps:{type:"integer",minimum:1,maximum:500}},["basket","amount","minAmountOut"],(n,s)=>wn(t,n,s,a)))]}var L={api:U,readResult:V,slippage:ke,minimum:be,exactCall:he,exactApproval:tt,account:_t};var Dn="https://api.tickerspring.com",pe=Le[E].tickerSpring.limitOrderHook.address,se={address:xn(Le[E].tokens.USDG.address),symbol:"USDG",decimals:fe,chainId:E},Mt=10000000n,Rt="(bytes32 pool,int24 lower,bool sell0,address inputToken,uint128 maximumInput,uint128 maximumCorrectionInput,uint256 minimumFullOutput,uint16 maximumFeeBps,uint64 deadline)",Oe=Bn([`function create(${Rt} params)`,`function createMarketOrder(${Rt} 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)"]),Ie={type:"string",pattern:"^\\d+$"},En={type:"string",pattern:"^[a-z0-9][a-z0-9._-]{0,39}$"};function j(t){return pt(t)?t:C()}function C(){throw new f("TickerSpring returned an incomplete or inconsistent response.")}function X(t){return(typeof t!="string"||!t.trim())&&C(),t}function _e(t){return dt(t,"Provide a valid token or wallet address.",ct)}function ee(t){if(typeof t!="string")throw new f("Amount must be a non-negative integer string in base units.");return ut(t),t}function ue(t){let e=ee(t);if(BigInt(e)<=0n)throw new f("The amount must be positive.");return e}function it(t){let e=typeof t=="number"&&Number.isFinite(t)?String(t):t;if(typeof e!="string"||!/^\d+(\.\d+)?$/.test(e)||!/[1-9]/.test(e))throw new f("TickerSpring requires a positive decimal price in USDG per token.");return e}function at(t){let e=j(t);return(typeof e.decimals!="number"||!Number.isInteger(e.decimals)||e.decimals<0||e.decimals>255||e.chainId!==void 0&&e.chainId!==E)&&C(),{address:_e(e.address),symbol:X(e.symbol),decimals:e.decimals,chainId:E}}function Fe(t){let e=ue(t);if(BigInt(e)<=BigInt(Math.floor(Date.now()/1e3)))throw new f("The prepared TickerSpring order has expired. Prepare it again.");return e}function Me(t,e){if(Object.keys(t).some(a=>!e.includes(a)))throw new f("Provide only the documented TickerSpring inputs.")}function st(t){if(t.agentTag===void 0)return{};if(typeof t.agentTag!="string"||!/^[a-z0-9][a-z0-9._-]{0,39}$/.test(t.agentTag))throw new f("Use an agentTag of 1 to 40 lowercase letters, digits, dots, underscores or hyphens.");return{agentTag:t.agentTag}}async function ve(t,e,a){let n=await ce(t.http,`${Dn}${e}`,{method:a?"POST":"GET",headers:{"Content-Type":"application/json","User-Agent":"Oak-TickerSpring/1.0"},...a?{body:JSON.stringify(a)}:{}},s=>!!s&&typeof s=="object"&&!Array.isArray(s));return j(n.data)}function rt(t,e,a,n){let s=j(e.bundle),r=j(e.walletSendCalls);(s.kind!==n||s.chainId!==E||!c(s.owner,a)||r.chainId!=="0x1237"||!c(r.from,a)||!Array.isArray(s.steps)||!s.steps.length||!Array.isArray(r.calls)||r.calls.length!==s.steps.length)&&C();let u=X(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,m)=>{let d=j(p),v=j(r.calls[m]);return(d.n!==m+1||d.kind!=="approve"&&d.kind!=="call"||d.from!==void 0&&!c(d.from,a)||d.chainId!==void 0&&d.chainId!==E||!c(v.to,X(d.to))||v.data!==d.data||d.value!=="0"||v.value!=="0x0")&&C(),t.unsignedTx({to:_e(d.to),data:X(d.data),value:ee(d.value),chainId:E,description:X(d.label)})});return{bundle:s,txs:o,expiresAt:u}}async function Pe(t,e,a,n={},s){let{bundle:r,txs:u,expiresAt:o}=e,p=await t.preview(u,a);if(Date.parse(o)<=Date.now())throw new f("The prepared TickerSpring bundle expired during preview. Prepare it again.");n.deadline!==void 0&&Fe(n.deadline);let m=p.changes.map(({token:k,amount:b})=>{let y=b.startsWith("-");return`${y?"-":""}${t.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"))&&C();let d=r.simulation===void 0?void 0:j(r.simulation),v=d?.ok===!1?`API simulation: ${X(d.error)}.`:"";return{txs:u,from:a,expiresAt:o,...n,preview:p,summary:[X(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,v,p.summary,...m].filter(Boolean).join(" ")}}async function Lt(t,e,a){Me(e,["token","side","amount","price","slippageBps","minAmountOut","startingPrice","agentTag"]);let n=st(e),s=_e(e.token),r=ue(e.amount),u=it(X(e.price)),o=e.slippageBps===void 0?500:e.slippageBps;if(we("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=e.minAmountOut===void 0?0n:BigInt(ue(e.minAmountOut));if(e.minAmountOut!==void 0&&p<=1n)throw new f("The minimum output amount must be greater than 1 base unit.");if(e.side!=="buy"&&e.side!=="sell")throw new f("Choose buy or sell for the limit order.");if(e.side==="buy"&&BigInt(r)<Mt)throw new f("TickerSpring orders require at least 10 USDG.");let m=await ve(t,"/v1/tokens");Array.isArray(m.tokens)||C();let d=m.tokens.map(j).filter(l=>c(l.address,s)&&(l.chainId===void 0||l.chainId===E));if(d.length!==1)throw new f("TickerSpring did not return a unique token for that address on chain 4663.");let v=d[0],k=at(v);if(c(k.address,se.address))throw new f("Choose the order token paired with USDG.");let b=j(v.markets);typeof b.limitOrders!="boolean"&&C();let y=e.side==="buy"?se:k,w=e.side==="buy"?k:se;if(e.side==="sell"){let l=BigInt(te(u,18,"floor"));if(BigInt(r)*l*10n**BigInt(fe)/(10n**BigInt(k.decimals)*10n**18n)<Mt)throw new f("TickerSpring orders require at least 10 USDG at the limit price.")}if(b.limitOrders&&e.startingPrice!==void 0)throw new f("startingPrice is only used to open a new limit market.");let D=b.limitOrders?void 0:it(e.startingPrice===void 0?v.priceUsd:X(e.startingPrice)),O=await ve(t,"/v1/agent/prepare/limit-order",{owner:a,...n,token:s,side:e.side,price:u,amount:t.formatAmount(r,y.decimals),...D===void 0?{}:{startingPrice:D}}),x=Nt(t,a,O,{amount:r,limitPrice:u,slippageBps:o,callerMinOut:p,marketToken:k,inputToken:y,outputToken:w,markets:b,startingPrice:D});return Pe(t,x.p,a,x.details)}function Nt(t,e,a,n){let{amount:s,limitPrice:r,slippageBps:u,callerMinOut:o,marketToken:p,inputToken:m,outputToken:d,markets:v}=n,k=rt(t,a,e,"limit-order"),b=j(k.bundle.params),y=j(b.create),w=Fe(y.deadline),D=ue(y.minimumFullOutput);(!c(b.hook,pe)||!c(y.inputToken,m.address)||ee(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(ee(y.maximumCorrectionInput))>BigInt(s))&&C(),c(y.pool,$e.poolFor(p.address,pe))||C();let O=BigInt(m.address)<BigInt(d.address);y.sell0!==O&&C();let x=BigInt(s)*9750n/10000n,l=BigInt(te(r,18,"floor")),h=c(m.address,se.address)?l>0n?x*10n**BigInt(p.decimals)*10n**18n/(10n**BigInt(fe)*l):0n:x*l*10n**BigInt(fe)/(10n**BigInt(p.decimals)*10n**18n),T=BigInt(we(h.toString(),u)),P=Te(y.lower),q=P*P,z=1n<<192n,I=q>0n?y.sell0?x*q/z:x*z/q:0n,G=p.decimals===18?BigInt(we(I.toString(),u)):T,F=[o,T,G].reduce(($,W)=>$>W?$:W,0n);if(BigInt(D)<=1n||BigInt(D)<F)throw new f("TickerSpring minimum output is below the quoted slippage minimum.");let R={pool:y.pool,lower:y.lower,sell0:y.sell0,inputToken:m.address,maximumInput:BigInt(s),maximumCorrectionInput:BigInt(ee(y.maximumCorrectionInput)),minimumFullOutput:BigInt(D),maximumFeeBps:250,deadline:BigInt(w)},J;if(v.limitOrders)J=Ce({abi:Oe,functionName:"create",args:[R]});else{let $=j(b.market);c($.token,p.address)||C();let W=BigInt(ue($.initialPrice)),je=BigInt(ue($.minimumPrice)),qe=BigInt(ue($.maximumPrice));(W<je||W>qe)&&C(),n.startingPrice!==void 0&&$e.checkInitialization(W,je,qe,n.startingPrice,p),J=Ce({abi:Oe,functionName:"createMarketOrder",args:[R,p.address,W,je,qe]})}if((!Array.isArray(b.approvals)||b.approvals.length>1||k.txs.length!==b.approvals.length+1)&&C(),b.approvals.length){let $=j(b.approvals[0]),W=Ce({abi:An,functionName:"approve",args:[pe,BigInt(s)]});(!c($.token,m.address)||!c($.spender,pe)||ee($.amount)!==s||!c(k.txs[0].to,m.address)||!N(k.txs[0].data,W))&&C()}let H=k.txs.at(-1);return(!c(H.to,pe)||!N(H.data,J))&&C(),{p:k,details:{input:{token:m,amount:s},minimumOutput:{token:d,amount:D},deadline:w,...n.startingPrice===void 0?{}:{startingPrice:n.startingPrice}}}}async function jt(t,e,a,n){Me(e,["id","agentTag"]);let s=st(e),r=ee(e.id),u=await ve(t,"/v1/agent/prepare/order-action",{owner:a,id:r,action:n,...s}),o=rt(t,u,a,"order-action");(o.txs.length!==1||!c(o.txs[0].to,pe))&&C();let p=Tn({abi:Oe,data:o.txs[0].data});if((p.functionName!==n||p.args[0]!==BigInt(r))&&C(),p.functionName==="cancel"){let[,m,d,v,k]=p.args;if(Fe(v.toString()),m+d===0n||k!==3)throw new f("TickerSpring returned a cancellation without protected amounts or both token deliveries. Prepare it again.");return Pe(t,o,a,{id:r,deadline:v.toString()})}return N(o.txs[0].data,Ce({abi:Oe,functionName:"claimBoth",args:[BigInt(r)]}))||C(),Pe(t,o,a,{id:r})}async function qt(t,e){let a=await ve(t,`/v1/agent/accounts/${e}`);if(!c(a.owner,e)||a.limitOrdersComplete!==!0||!Array.isArray(a.limitOrders)||!Array.isArray(a.unavailable)||a.unavailable.length)throw new f("TickerSpring could not return the complete order list for this wallet.");let n=X(a.asOf);Number.isFinite(Date.parse(n))||C();let s=new Set,r=a.limitOrders.map(u=>{let o=j(u),p=j(o.order),m=at(o.token);(!c(o.hook,pe)||!c(p.owner,e)||o.side!=="buy"&&o.side!=="sell"||c(m.address,se.address)||o.feeBps!==250)&&C();let d=ee(o.id);s.has(d)&&C(),s.add(d);let v=BigInt(m.address)<BigInt(se.address)?[m,se]:[se,m],k=j(o.claimable);return{id:d,status:X(o.status),side:o.side,chainId:E,feeBps:250,input:{token:o.side==="buy"?se:m,amount:ee(p.debit)},claimable:v.map((b,y)=>({token:b,amount:ee(k[y===0?"net0":"net1"])}))}});return{owner:e,chainId:E,asOf:n,orders:r}}var Sn=t=>{let e=n=>async s=>{try{return lt(s),await n(s)}catch(r){throw new f(t.plainError(r))}},a=(n,s,r,u)=>({name:`tickerspring_${n}`,inputSchema:{type:"object",properties:{...s,...["create","cancel","claim"].includes(n)?{agentTag:En}:{}},required:r,additionalProperties:!1},execute:(o,p)=>e(m=>u(o,m))(p)});return{tools:[...Ft(t),a("create",{token:B,side:{type:"string",enum:["buy","sell"]},amount:{...Ie,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:{...Ie,description:"Optional caller minimum output in base units."}},["token","side","amount","price"],(n,s)=>Lt(t,n,s)),a("cancel",{id:Ie},["id"],(n,s)=>jt(t,n,s,"cancel")),a("claim",{id:Ie},["id"],(n,s)=>jt(t,n,s,"claimBoth")),a("orders",{},[],(n,s)=>(Me(n,[]),qt(t,s)))],positions:e(async n=>(await qt(t,n)).orders.map(r=>({module:"tickerspring",id:r.id,chainId:E,assets:r.claimable,description:`${r.side} order ${r.id}: ${r.status}; assets are claimable amounts only. Original input: ${t.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.`})))}},da=t=>mt("tickerspring",[Sn(t)]),i={attribution:st,object:j,text:X,address:_e,integer:ee,positive:ue,token:at,price:it,futureDeadline:Fe,inputs:Me,request:ve,prepared:rt,result:Pe,create:Lt,validateOrder:Nt};var ot={address:Ut(A.contracts.usdg),symbol:"USDG",decimals:6,chainId:E},Re=Ut(A.contracts.limitOrderHook);async function Ct(t,e,a){i.inputs(e,["token","side","levels","slippageBps","agentTag"]);let n=i.address(e.token);if(e.side!=="buy"&&e.side!=="sell")throw new f("Choose buy or sell for the limit-order ladder.");if(!Array.isArray(e.levels)||e.levels.length<2||e.levels.length>20)throw new f("Provide 2 to 20 independent limit-order levels.");let s=e.slippageBps===void 0?500:e.slippageBps;if(typeof s!="number"||!Number.isInteger(s)||s<0||s>9999)throw new f("Use slippageBps from 0 to 9999.");let r=await i.request(t,"/v1/tokens");if(!Array.isArray(r.tokens))throw new f("TickerSpring token list is unavailable.");let u=r.tokens.map(i.object).filter(x=>c(x.address,n));if(u.length!==1)throw new f("Use a unique TickerSpring token address on chain 4663.");let o=u[0],p=i.token(o);if(c(p.address,ot.address))throw new f("Choose a ladder token paired with USDG.");let m=i.object(o.markets);if(m.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=e.side==="buy"?ot:p,v=e.side==="buy"?p:ot,k=e.levels.map(x=>{let l=i.object(x);i.inputs(l,["price","amount","minAmountOut"]);let h=i.price(i.text(l.price)),T=i.positive(l.amount),P=i.positive(l.minAmountOut);if((e.side==="buy"?BigInt(T):BigInt(T)*BigInt(te(h,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:h,amount:T,minAmountOut:P}}),b=i.prepared(t,await i.request(t,"/v1/agent/prepare/ladder",{owner:a,...i.attribution(e),token:n,side:e.side,orders:k.map(x=>({price:x.price,amount:t.formatAmount(x.amount,d.decimals)}))}),a,"ladder"),y=i.object(b.bundle.params);if(!c(y.hook,Re)||!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 D=k.reduce((x,l)=>x+BigInt(l.amount),0n).toString();if(w.length){let x=i.object(w[0]),l=b.txs[0];if(!c(x.token,d.address)||!c(x.spender,Re)||i.integer(x.amount)!==D||!c(l.to,d.address)||!N(l.data,In({abi:Cn,functionName:"approve",args:[Re,BigInt(D)]})))throw new f("TickerSpring ladder approval must equal the sum of the level inputs.")}let O=k.map((x,l)=>{let h=i.object(y.orders[l]),T=b.txs[l+w.length];return i.validateOrder(t,a,{bundle:{...b.bundle,kind:"limit-order",params:{...h,hook:Re,approvals:[]},steps:[{n:1,kind:"call",to:T.to,data:T.data,value:"0",label:T.description}]},walletSendCalls:{chainId:"0x1237",from:a,calls:[{to:T.to,data:T.data,value:"0x0"}]}},{amount:x.amount,limitPrice:x.price,slippageBps:s,callerMinOut:BigInt(x.minAmountOut),marketToken:p,inputToken:d,outputToken:v,markets:m}).details});return i.result(t,b,a,{input:{token:d,amount:D},levels:O,deadline:O.reduce((x,l)=>BigInt(l.deadline)<BigInt(x)?l.deadline:x,O[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,Ct as c,bt as d,$e as e,vt as f,Tt as g,le as h,At as i,Bt as j,ln as k,mn as l,It as m,Ft as n,L as o,Sn as p,da as q,i as r,xe as s};
1
+ import{a as Ne,b as Ue}from"./4BVP652W.js";import{i as Te}from"./S2TAJHHK.js";import{o as we}from"./GHPREYQK.js";import{b as mt}from"./Z4SRGAVL.js";import{a as lt}from"./PBQSJSZO.js";import{c as ce}from"./MYFAKCQI.js";import{c as B,d as ct,e as pt,g as N,h as c,i as dt}from"./5KUWLUPM.js";import{a as ut,b as te}from"./UP7FBDMJ.js";import{a as E,d as fe,i as Le}from"./FWD4L3CJ.js";import{a as f}from"./XSD5NL7J.js";import{encodeFunctionData as In,erc20Abi as Cn,getAddress as Ut}from"viem";import{decodeFunctionData as Tn,encodeFunctionData as Ce,erc20Abi as An,getAddress as xn,parseAbi as Bn}from"viem";import{decodeEventLog as yn,decodeFunctionData as fn,parseAbi as et,encodeFunctionData as Ot,erc20Abi as gn,getAddress as Y}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 yt={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 zt,encodeAbiParameters as Kt,encodeFunctionData as Ge,erc20Abi as Vt,getAddress as Ae,keccak256 as Wt}from"viem";var re=Ae(A.contracts.usdg),Qt=Ae(A.strategyProfile.hook);function S(t="TickerSpring strategy calldata does not match the requested action."){throw new f(t)}function ft(t){return typeof t!="boolean"&&S("Provide an explicit repeat setting."),t}function gt(t,e=Qt){let a=BigInt(t)<BigInt(re)?[t,re]:[re,t];return Wt(Kt([{type:"address"},{type:"address"},{type:"uint24"},{type:"int24"},{type:"address"}],[...a,A.strategyProfile.poolFee,A.strategyProfile.tickSpacing,e]))}function Yt(t,e){(typeof t!="number"||!Number.isInteger(t)||t%10!==0||t<-887270||t>887260)&&S();let a=Te(t),n=a*a,s=1n<<192n;return BigInt(e.address)<BigInt(re)?n*10n**BigInt(e.decimals)*10n**18n/(s*10n**6n):s*10n**BigInt(e.decimals)*10n**18n/(n*10n**6n)}function He(t,e,a){let n=Yt(t,a),s=BigInt(te(e,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(t,e,a,n){i.inputs(e,["action","token","buyPrice","sellPrice","amount","repeat","startingPrice","id","min0","min1","agentTag"]);let s=e.action;["open","close","collect","setRepeat"].includes(String(s))||S("Choose open, close, collect or setRepeat.");let r=Ae(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"];i.inputs(e,[...I,"agentTag"]);let G=i.integer(e.id),F=s==="setRepeat"?ft(e.repeat):void 0,R=i.prepared(t,await i.request(t,`/v1/agent/prepare/${n}`,{owner:a,...i.attribution(e),action:s,id:G,...F===void 0?{}:{repeat:F}}),a,n);(R.txs.length!==1||!c(R.txs[0].to,r))&&S();let J=zt({abi:u,data:R.txs[0].data}),H=J.args;if((J.functionName!==s||H[0]!==BigInt(G))&&S(),s==="setRepeat"&&H[1]!==F&&S(),s==="collect"&&H[1]!==3&&S("Collect must deliver both strategy currencies."),s==="close"){let $=BigInt(i.integer(e.min0)),W=BigInt(i.integer(e.min1));($+W<=1n||typeof H[1]!="bigint"||typeof H[2]!="bigint"||H[1]<$||H[2]<W||H[4]!==3)&&S("Close must preserve protected minima and deliver both strategy currencies."),i.futureDeadline(String(H[3]))}return N(R.txs[0].data,Ge({abi:u,functionName:J.functionName,args:H}))||S(),i.result(t,R,a,{id:G,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."),i.inputs(e,["action","token","buyPrice","sellPrice","amount","repeat","startingPrice","agentTag"]);let o=i.positive(e.amount),p=Ae(i.address(e.token));BigInt(o)<11000000n&&S("TickerSpring grids require at least 11 USDG.");let m=i.price(i.text(e.buyPrice)),d=i.price(i.text(e.sellPrice));BigInt(te(m,18,"floor"))>=BigInt(te(d,18,"floor"))&&S("The grid sell price must be above its buy price.");let v=ft(e.repeat),k=await i.request(t,"/v1/tokens");Array.isArray(k.tokens)||S("TickerSpring token list is unavailable.");let b=k.tokens.map(i.object).filter(I=>c(I.address,p));b.length!==1&&S("Use a unique TickerSpring token address.");let y=b[0],w=i.token(y),D=i.object(y.markets);(c(p,re)||typeof D.grids!="boolean")&&S();let O=D.grids?void 0:i.price(i.text(e.startingPrice));D.grids&&e.startingPrice!==void 0&&S("startingPrice is only used to open a new grid market.");let x=D.grids?"open":"openWithMarket",l=i.prepared(t,await i.request(t,"/v1/agent/prepare/grid",{owner:a,...i.attribution(e),action:x,token:p,buyPrice:m,sellPrice:d,amount:t.formatAmount(o,6),repeat:v,...O===void 0?{}:{startingPrice:O}}),a,"grid"),h=i.object(l.bundle.params),T=i.object(h.open),P=i.futureDeadline(T.deadline);(!c(h.strategy,r)||!c(T.pool,gt(p))||T.sellFirst!==!1||T.repeat!==v||i.integer(T.amount)!==o||T.maxFeeBps!==100)&&S(),He(T.buyLower,m,w),He(T.sellLower,d,w);let q={pool:T.pool,buyLower:T.buyLower,sellLower:T.sellLower,sellFirst:!1,repeat:v,amount:BigInt(o),maxFeeBps:100,deadline:BigInt(P)},z=[q];if(O!==void 0){let I=i.object(h.market),G=BigInt(i.positive(I.initialPrice)),F=BigInt(i.positive(I.minimumPrice)),R=BigInt(i.positive(I.maximumPrice));(!c(I.token,p)||G<F||G>R)&&S(),kt(G,F,R,O,w),z=[q,p,G,F,R]}return l.txs.length!==1&&l.txs.length!==2&&S(),l.txs.length===2&&(!c(l.txs[0].to,re)||!N(l.txs[0].data,Ge({abi:Vt,functionName:"approve",args:[r,BigInt(o)]})))&&S("Grid approval must equal the exact USDG input."),(!c(l.txs.at(-1).to,r)||!N(l.txs.at(-1).data,Ge({abi:u,functionName:x,args:z})))&&S(),i.result(t,l,a,{input:{token:{address:re,symbol:"USDG",decimals:6,chainId:E},amount:o},token:w,buyPrice:m,sellPrice:d,repeat:v,startingPrice:O,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 kt(t,e,a,n,s){(typeof t!="bigint"||typeof e!="bigint"||typeof a!="bigint"||t<=0n||e<=0n||e>t||a<t)&&S();let r=t,u=e,o=a,p=r*r,m=1n<<192n,d=BigInt(s.address)<BigInt(re)?p*10n**BigInt(s.decimals)*10n**18n/(m*10n**6n):m*10n**BigInt(s.decimals)*10n**18n/(p*10n**6n),v=BigInt(te(n,18,"floor")),k=d>v?d-v:v-d;(v===0n||k*10000n>v*25n||u*10000n<r*9975n||o*10000n>r*10025n)&&S("TickerSpring grid initialization differs from the authorized starting price or bounds.")}var $e={poolFor:gt,checkPrice:He,checkInitialization:kt};import{decodeFunctionData as Xt,encodeFunctionData as Jt,parseAbi as Zt,zeroAddress as en}from"viem";var ht=Zt(K.kyber);function xe(t,e,a,n,s){let r=()=>{throw new f("TickerSpring basket route changes its input, output, amount, recipient or fee policy.")},u=Xt({abi:ht,data:t});(u.functionName!=="swap"||!u.args)&&r();let o=i.object(u.args[0]),p=i.object(o.desc);(!c(p.srcToken,e)||!c(p.dstToken,a)||!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((m,d)=>((typeof d!="bigint"||d<0n)&&r(),m+d),0n)!==n||!p.srcReceivers.every(m=>c(m,i.address(o.callTarget)))||!c(o.approveTarget,en)&&!c(o.approveTarget,i.address(o.callTarget)))&&r(),N(Jt({abi:ht,functionName:u.functionName,args:u.args}),t)||r()}import{getAddress as de,parseAbi as tn}from"viem";var ge=de(A.basketConfig.basketMakerV2),ne=de(A.contracts.usdg),ze=de(A.basketConfig.weth),nn=tn(K.maker);function Z(t="TickerSpring basket creation differs from the authorized name, tokens, weights, fee, deposit or recipient."){throw new f(t)}async function vt(t,e,a){i.inputs(e,["name","symbol","tokens","swapFeeBps","amount","payWith","minAmountOut","slippageBps","agentTag"]);let n=i.text(e.name),s=i.text(e.symbol);(n.length>64||!/^[A-Za-z0-9 ._+-]+$/.test(n)||!/^[A-Za-z0-9.+-]{1,20}$/.test(s)||/^ts/i.test(s))&&Z("Use a plain basket name and a symbol that does not start with ts."),(!Array.isArray(e.tokens)||e.tokens.length<2||e.tokens.length>8)&&Z("Choose 2 to 8 basket tokens with weights totaling 10000 basis points.");let r=e.tokens.map(l=>{let h=i.object(l);i.inputs(h,["token","weightBps"]);let T=de(i.address(h.token));return(typeof h.weightBps!="number"||!Number.isInteger(h.weightBps)||h.weightBps<100||h.weightBps>9900)&&Z("Each basket weight must be an integer from 100 to 9900 basis points."),{token:T,weightBps:h.weightBps}}).sort((l,h)=>BigInt(l.token)<BigInt(h.token)?-1:1);(new Set(r.map(l=>l.token.toLowerCase())).size!==r.length||r.reduce((l,h)=>l+h.weightBps,0)!==1e4||!r.some(l=>c(l.token,ne)||c(l.token,ze)))&&Z("Choose unique basket token addresses with USDG or WETH and weights totaling 10000 basis points.");let u=e.swapFeeBps??100;u!==30&&u!==100&&Z("Choose a basket swap fee of 30 or 100 basis points.");let o=i.positive(e.amount),p=L.minimum(e.minAmountOut),m=L.slippage(e),d=e.payWith===void 0?ne:de(i.address(e.payWith));!c(d,ne)&&!c(d,ze)&&Z("Pay the first basket deposit with USDG or WETH."),c(d,ne)&&BigInt(o)<25000000n&&Z("A basket first deposit must be worth at least 25 USDG.");let v=i.object(await L.api(t,"/v1/baskets/config"));(v.chainId!==4663||!c(v.basketMakerV2,ge)||!c(v.weth,ze)||!c(v.usdg,ne))&&Z("TickerSpring BasketMaker deployment changed; Oak needs a reviewed pin.");let k=await i.request(t,"/v1/agent/prepare/basket-make",{owner:a,...i.attribution(e),name:n,symbol:s,tokens:r.map(l=>({token:l.token,weightPct:l.weightBps/100})),swapFeePct:u/100,amount:t.formatAmount(o,c(d,ne)?6:18),payWith:c(d,ne)?"USDG":"WETH",slippageBps:m}),b=i.prepared(t,k,a,"basket-make"),y=i.object(b.bundle.params),w=i.object(y.basket),D=L.minimum(y.minOut),O=i.futureDeadline(y.deadline);(!c(y.maker,ge)||!c(y.token,d)||i.integer(y.amount)!==o||D<p||!c(y.recipient,a)||w.name!==n||w.symbol!==s||!Array.isArray(w.tokens)||!Array.isArray(w.normalizedWeights)||w.tokens.length!==r.length||w.normalizedWeights.length!==r.length||i.integer(w.swapFeePercentage)!==(BigInt(u)*10n**14n).toString()||!r.every((l,h)=>c(w.tokens[h],l.token)&&i.integer(w.normalizedWeights[h])===(BigInt(l.weightBps)*10n**14n).toString())||typeof w.salt!="string"||!/^0x[0-9a-fA-F]{64}$/.test(w.salt)||!Array.isArray(y.legs))&&Z();let x=y.legs.map(l=>{let h=i.object(l),T=i.address(h.tokenIn),P=i.address(h.tokenOut),q=BigInt(i.positive(h.amountIn)),z=i.text(h.data);return(!c(T,d)||!r.some(I=>c(I.token,P)))&&Z(),xe(z,T,P,q,ge),{tokenIn:T,tokenOut:P,amountIn:q,data:z}});return x.reduce((l,h)=>l+h.amountIn,0n)>BigInt(o)&&Z(),L.exactApproval(b.txs,d,ge,o),L.exactCall(b.txs,ge,nn,"make",[{name:n,symbol:s,tokens:r.map(l=>l.token),normalizedWeights:r.map(l=>BigInt(l.weightBps)*10n**14n),swapFeePercentage:BigInt(u)*10n**14n,salt:w.salt},d,BigInt(o),x,D,a,BigInt(O)]),i.result(t,b,a,{input:{token:{address:d,symbol:c(d,ne)?"USDG":"WETH",decimals:c(d,ne)?6:18,chainId:4663},amount:o},predictedPool:de(i.address(y.pool)),minimumBptOut:D.toString(),name:n,symbol:s,tokens:r,swapFeeBps:u,salt:w.salt,deadline:O,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 an,getAddress as wt,parseAbi as sn}from"viem";var rn=sn(["function cancel(uint256 id,uint256 min0,uint256 min1,uint64 deadline,uint8 deliveryMask)"]);async function Tt(t,e,a){i.inputs(e,["id"]);let n=i.integer(e.id),s=await L.account(t,a),u=i.object(s.data).limitOrders.map(i.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=i.object(o.order),m=i.token(o.token);if(!c(o.hook,A.contracts.limitOrderHook)||!c(p.owner,a)||o.side!=="buy"&&o.side!=="sell")throw new f("TickerSpring order identity could not be verified.");let d={address:wt(A.contracts.usdg),symbol:"USDG",decimals:6,chainId:4663},v=BigInt(Math.floor(Date.now()/1e3)+300),k=t.unsignedTx({to:wt(A.contracts.limitOrderHook),data:an({abi:rn,functionName:"cancel",args:[BigInt(n),0n,0n,v,3]}),value:"0",chainId:4663,description:`Simulate cancellation returns for order ${n}; never sign this read-only quote.`}),b=await t.preview([k],a),y=b.changes.map(w=>{let D=c(w.token.address,m.address)?m:c(w.token.address,d.address)?d:void 0;if(!D||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:D,amount:i.integer(w.amount)}});return{id:n,owner:a,chainId:4663,asOf:new Date().toISOString(),originalInput:{token:o.side==="buy"?d:m,amount:i.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 un}from"viem";var le={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 Ke(t,e){if(t.type.endsWith("[]"))return(!Array.isArray(e)||e.length>100)&&Q(),e.map(n=>Ke({...t,type:t.type.slice(0,-2)},n));if(t.type==="tuple"){let n=i.object(e),s=t.components;return i.inputs(n,s.map(r=>r.name)),Object.fromEntries(s.map(r=>[r.name,Ke(r,n[r.name])]))}if(/^u?int\d*$/.test(t.type)){(typeof e!="string"||!/^-?\d+$/.test(e)||t.type.startsWith("uint")&&e.startsWith("-"))&&Q();let n=BigInt(e),s=Number(t.type.replace(/\D/g,"")||256),r=t.type.startsWith("uint")?0n:-(1n<<BigInt(s-1)),u=t.type.startsWith("uint")?(1n<<BigInt(s))-1n:(1n<<BigInt(s-1))-1n;return(n<r||n>u)&&Q(),n}if(t.type==="address")return i.address(e);if(t.type==="bool")return typeof e!="boolean"&&Q(),e;if(t.type==="string")return i.text(e);let a=/^bytes(\d*)$/.exec(t.type);if(a)return(typeof e!="string"||!/^0x(?:[a-fA-F0-9]{2})*$/.test(e)||a[1]&&e.length!==2+Number(a[1])*2)&&Q(),e;Q()}function At(t){return{name:"tickerspring_contract_read",inputSchema:{type:"object",properties:{kind:{enum:["vault","limit","grid","spring","basket_vault","basket_factory","basket_maker"]},address:B,function:{type:"string"},arguments:{type:"array",maxItems:16}},required:["kind"],additionalProperties:!1},execute:async(e,a)=>{try{i.address(a),i.inputs(e,["kind","address","function","arguments"]),(typeof e.kind!="string"||!Object.hasOwn(le,e.kind))&&Q();let n=e.kind,s=le[n],r;n==="vault"?(r=i.address(e.address),A.vaults.some(b=>c(b.address,r))||Q()):(e.address!==void 0&&Q(),r=un("address"in s?s.address:n==="limit"?A.contracts.limitOrderHook:A.contracts.gridStrategy));let u=s.abi;if(e.function===void 0)return e.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=i.text(e.function),p=u.filter(b=>b.type==="function"&&b.name===o);(p.length!==1||p[0].type!=="function")&&Q();let m=p[0],d=e.arguments??[];(!Array.isArray(d)||d.length!==m.inputs.length)&&Q();let v=m.inputs.map((b,y)=>Ke(b,d[y])),k=await t.clientFor(4663).readContract({address:r,abi:u,functionName:o,args:v});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(t.plainError(n))}}}}var me={type:"string",pattern:"^\\d+$"},Ve={type:"string",pattern:"^\\d+(\\.\\d+)?$"},Be={type:"integer",minimum:1,maximum:90},xt={enum:["any","stock","crypto","utility","meme","unclassified"]};function _(t){throw new f(t)}function ie(t,e,a){return(typeof t!="number"||!Number.isInteger(t)||t<e||t>a)&&_(`Use an integer from ${e} to ${a}.`),t}function We(t){return typeof t!="boolean"&&_("Use an explicit boolean setting."),t}function ye(t,e){return(typeof t!="string"||!e.includes(t))&&_(`Choose ${e.join(", ")}.`),t}function cn(t){let e=i.text(t);return/^[a-z0-9][a-z0-9-]{0,63}$/.test(e)||_("Use an agent slug from tickerspring_agents."),e}function Qe(t){let e=i.text(t);return/^(?:[1-9]|[12][0-9]|30)d$/.test(e)||_("Choose a period from 1d to 30d."),e}function oe(t,e){let a=Object.entries(e).filter(([,n])=>n!==void 0).map(([n,s])=>[n,String(s)]);return a.length?`${t}?${new URLSearchParams(a)}`:t}function Ze(t){if(t&&typeof t=="object"&&!Array.isArray(t)&&Object.hasOwn(t,"decimal")){let e=t.decimal;return/^\d+(\.\d+)?$/.test(e)||_("Use a positive decimal string."),e}return Array.isArray(t)?`[${t.map(Ze).join(",")}]`:t&&typeof t=="object"?`{${Object.entries(t).filter(([,e])=>e!==void 0).map(([e,a])=>`${JSON.stringify(e)}:${Ze(a)}`).join(",")}}`:JSON.stringify(t)}var Ye=t=>({decimal:i.price(i.text(t))}),Xe=(t,e)=>({decimal:t.formatAmount(i.positive(e),6)});async function Je(t,e,a){let n=await ce(t.http,`https://api.tickerspring.com${e}`,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":"Oak-TickerSpring/1.0"},body:Ze(a)},s=>!!s&&typeof s=="object"&&Object.hasOwn(s,"data"));return(n.data===null||n.data===void 0)&&_("TickerSpring returned no backtest result."),{...L.readResult(e,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 Bt(t){let e=(n,s,r,u)=>({name:`tickerspring_${n}`,inputSchema:{type:"object",properties:s,required:r,additionalProperties:!1},execute:async(o,p)=>{try{return i.address(p),i.inputs(o,Object.keys(s)),await u(o,p)}catch(m){throw new f(t.plainError(m))}}}),a=async n=>{let s=await L.api(t,n);return s==null&&_("TickerSpring has no current data for this query."),L.readResult(n,s)};return[At(t),e("stats",{},[],async()=>{let n=await ce(t.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 L.readResult("/v1/public/stats",n)}),e("vault_history",{vault:B,kind:{enum:["prices","earnings"]}},["vault","kind"],async n=>{let s=i.address(n.vault);return A.vaults.some(r=>c(r.address,s))||_("Use a pinned TickerSpring agent vault."),a(`/v1/agent/vaults/${s}/${ye(n.kind,["prices","earnings"])}`)}),e("basket_history",{basket:B,days:Be},["basket"],n=>a(oe(`/v1/baskets/${i.address(n.basket)}/history`,{days:ie(n.days??30,1,90)}))),e("strategy_tokens",{kind:{enum:["grid","ladder"]},limit:{type:"integer",minimum:1,maximum:10},category:xt,include:{enum:["good","all"]}},["kind"],n=>{let s=ye(n.kind,["grid","ladder"]);return s==="ladder"&&n.category!==void 0&&_("The ladder scan does not accept a category filter."),a(oe(`/v1/agent/${s}/tokens`,{limit:ie(n.limit??5,1,10),include:ye(n.include??"all",["good","all"]),...s==="grid"?{category:ye(n.category??"any",xt.enum)}:{}}))}),e("ranges",{token:B,amount:me,days:Be,feeBps:{type:"integer",minimum:0,maximum:1e3}},["token"],n=>a(oe("/v1/agent/ranges",{token:i.address(n.token),days:ie(n.days??14,1,90),...n.amount===void 0?{}:{amountUsd:t.formatAmount(i.positive(n.amount),6)},...n.feeBps===void 0?{}:{feeBps:ie(n.feeBps,0,1e3)}}))),e("backtest_grid",{token:B,buyPrice:Ve,sellPrice:Ve,amount:me,repeat:{type:"boolean"},days:Be,feeBps:{type:"integer",minimum:0,maximum:1e3},needsVolume:{type:"boolean"}},["token","buyPrice","sellPrice","amount"],async n=>{let s=Ye(n.buyPrice),r=Ye(n.sellPrice),[u,o=""]=s.decimal.split("."),[p,m=""]=r.decimal.split("."),d=Math.max(o.length,m.length);return BigInt(`${u}${o.padEnd(d,"0")}`)>=BigInt(`${p}${m.padEnd(d,"0")}`)&&_("The grid sell price must be above its buy price."),BigInt(i.positive(n.amount))<10000n&&_("Backtest at least 0.01 USDG."),Je(t,"/v1/agent/backtest/grid",{token:i.address(n.token),buyPrice:s,sellPrice:r,amountUsd:Xe(t,n.amount),repeat:We(n.repeat??!0),days:ie(n.days??30,1,90),needsVolume:We(n.needsVolume??!0),...n.feeBps===void 0?{}:{feeBps:ie(n.feeBps,0,1e3)}})}),e("backtest_ladder",{token:B,side:{enum:["buy","sell"]},levels:{type:"array",minItems:1,maxItems:20,items:{type:"object",properties:{price:Ve,amount:me},required:["price","amount"],additionalProperties:!1}},days:Be,feeBps:{type:"integer",minimum:0,maximum:1e3},needsVolume:{type:"boolean"}},["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=i.object(r);return i.inputs(u,["price","amount"]),{price:Ye(u.price),amountUsd:Xe(t,u.amount)}});return Je(t,"/v1/agent/backtest/ladder",{token:i.address(n.token),side:ye(n.side,["buy","sell"]),levels:s,days:ie(n.days??30,1,90),needsVolume:We(n.needsVolume??!0),...n.feeBps===void 0?{}:{feeBps:ie(n.feeBps,0,1e3)}})}),e("strategy_finder",{amount:me,period:{type:"string"},token:B,category:{type:"string"},strategy:{type:"string"}},[],n=>a(oe("/v1/strategy-finder",{...n.amount===void 0?{}:{budget:t.formatAmount(i.positive(n.amount),6)},period:Qe(n.period??"7d"),...n.token===void 0?{}:{token:i.address(n.token)},...Object.fromEntries(["category","strategy"].filter(s=>n[s]!==void 0).map(s=>{let r=i.text(n[s]);return/^[a-z][a-z0-9-]{0,39}$/.test(r)||_("Use a published strategy or category identifier."),[s,r]}))}))),e("strategy_detail",{token:B,period:{type:"string"}},["token"],n=>a(oe(`/v1/strategy-finder/${i.address(n.token)}`,{period:Qe(n.period??"7d")}))),e("strategy_track_record",{},[],()=>a("/v1/strategy-finder/track-record")),e("backtest_strategy",{token:B,strategy:{type:"string"},variant:{type:"string"},settings:{type:"object"},amount:me,days:{type:"integer",minimum:21,maximum:60},period:{type:"string"}},["token","strategy"],n=>{let s=i.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:i.text(n.variant);return r!==void 0&&!/^[a-zA-Z0-9._-]{1,80}$/.test(r)&&_("Use a published strategy variant identifier."),Je(t,"/v1/strategy-finder/backtest",{token:i.address(n.token),strategy:s,...r===void 0?{}:{variant:r},...n.amount===void 0?{}:{budgetUsd:Xe(t,n.amount)},days:ie(n.days??60,21,60),period:Qe(n.period??"7d")})}),e("agents",{},[],()=>a("/v1/agents")),e("agent_vault",{slug:{type:"string"}},["slug"],(n,s)=>a(oe(`/v1/agents/${cn(n.slug)}/vault`,{owner:s}))),e("trade_directory",{},[],()=>a("/v1/trade")),e("trade_token",{token:B},["token"],n=>a(oe("/v1/trade/token",{address:i.address(n.token)}))),e("trade_quotes",{tokenIn:B,tokenOut:B,amount:me},["tokenIn","tokenOut","amount"],n=>a(oe("/v1/trade/quotes",{tokenIn:i.address(n.tokenIn),tokenOut:i.address(n.tokenOut),amountIn:i.positive(n.amount)}))),e("spring_config",{},[],()=>a("/v1/spring-orders/config")),e("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."})),e("sign_request",{id:{type:"string"}},["id"],async(n,s)=>{let r=i.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=i.object(await L.api(t,u)),p=i.object(o.bundle);(!c(p.owner,s)||p.chainId!==4663)&&_("This sign request does not belong to the current wallet on chain 4663.");let m=Date.parse(i.text(p.expiresAt));return Number.isFinite(m)||_("TickerSpring returned no valid sign-request expiration."),{...L.readResult(u,o),expired:m<=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."}}),e("instructions",{document:{enum:["skill","api","privy","turnkey","openapi"]}},["document"],async n=>{let s=ye(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 Dt,getAddress as pn,parseAbi as dn}from"viem";var St=pn(A.contracts.limitOrderHook),Et=dn(["function realize(uint256 id)","function claim(uint256 id,bool currency0)"]);function ln(t){i.inputs(t,["action","id","currency0"]);let e=BigInt(i.integer(t.id));if(t.action==="realize"){if(t.currency0!==void 0)throw new f("Use currency0 only for a single-currency claim.");return Dt({abi:Et,functionName:"realize",args:[e]})}if(t.action!=="claim"||typeof t.currency0!="boolean")throw new f("Choose realize, or claim with an explicit currency0 boolean. Use tickerspring_claim to claim both currencies.");return Dt({abi:Et,functionName:"claim",args:[e,t.currency0]})}async function mn(t,e,a){let n=i.object(await t.clientFor(4663).readContract({address:St,abi:le.limit.abi,functionName:"getOrder",args:[BigInt(i.integer(e))]}));if(!c(n.owner,a))throw new f("This limit order does not belong to the current wallet.")}function It(t){return{name:"tickerspring_order_accounting",inputSchema:{type:"object",properties:{action:{enum:["realize","claim"]},id:{type:"string",pattern:"^\\d+$"},currency0:{type:"boolean"}},required:["action","id"],additionalProperties:!1},execute:async(e,a)=>{try{i.address(a);let n=ln(e);await mn(t,e.id,a);let s=[t.unsignedTx({to:St,data:n,value:"0",chainId:4663,description:e.action==="realize"?`Realize accounting for order ${String(e.id)}`:`Claim currency${e.currency0?"0":"1"} for order ${String(e.id)}`})],r=await t.preview(s,a);return{txs:s,from:a,id:i.integer(e.id),action:e.action,preview:r,source:le.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(t.plainError(n))}}}}var Ee="https://api.tickerspring.com",M={type:"string",pattern:"^\\d+$"},ae={address:Y(A.contracts.usdg),symbol:"USDG",decimals:6,chainId:E},Se=K.vault,bn=K.basket,De=Y(A.contracts.basketZap);function g(t){throw new f(t)}async function U(t,e){return(await ce(t.http,`${Ee}${e}`,{headers:{"User-Agent":"Oak-TickerSpring/1.0"}},n=>!!n&&typeof n=="object"&&Object.hasOwn(n,"data"))).data}function V(t,e){return{chainId:E,source:`${Ee}${t}`,data:e}}function ke(t){let e=t.slippageBps??100;return(typeof e!="number"||!Number.isInteger(e)||e<1||e>500)&&g("Use slippageBps from 1 to 500."),e}function be(t){let e=BigInt(i.positive(t));return e<=1n&&g("Provide a minimum output greater than 1 base unit."),e}function he(t,e,a,n,s){let r=t.at(-1),u=Ot({abi:a,functionName:n,args:s});(!r||!c(r.to,e)||!N(r.data,u))&&g("TickerSpring calldata does not match the requested action.")}function tt(t,e,a,n){if(t.length!==1&&t.length!==2&&g("TickerSpring returned unexpected transaction steps."),t.length===2){let s=t[0],r=Ot({abi:gn,functionName:"approve",args:[a,BigInt(n)]});(!c(s.to,e)||!N(s.data,r))&&g("TickerSpring approval must match the exact input amount and spender.")}}function Pt(t){let e=Y(i.address(t));return A.vaults.some(a=>c(a.address,e))||g("This vault is not pinned to an official TickerSpring agent release in Oak."),e}async function nt(t,e){let a=Pt(e),n=i.object(await U(t,`/v1/agent/vaults/${a}`)),s=i.object(n.agentVault),r=A.vaults.find(u=>c(u.address,a));return(!c(n.vault,a)||!c(s.address,a)||s.release!==r.release||s.audited!==!0||s.shareDecimals!==12||!c(i.object(s.asset).address,ae.address)||s.stale!==!1)&&g("TickerSpring vault identity, release or current state could not be verified."),{address:a,data:n,entry:s,share:i.token({address:a,symbol:s.symbol,decimals:12})}}async function _t(t,e){let a=`/v1/agent/accounts/${e}`,n=i.object(await U(t,a));return(!c(n.owner,e)||!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(i.text(n.asOf)))||i.object(n.totals).complete!==!0)&&g("TickerSpring could not return the complete account for this wallet. Retry before acting."),{...V(a,n),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(t,e,a){i.inputs(e,["vault","amount","minShares","slippageBps","agentTag"]);let n=i.positive(e.amount),s=be(e.minShares),r=ke(e),u=await nt(t,e.vault);(u.entry.status!=="open"||u.entry.depositsOpen!==!0)&&g(`TickerSpring vault is not taking deposits: ${i.text(u.entry.statusReason)}`),BigInt(n)<BigInt(i.integer(u.entry.minDepositUnits))&&g("Increase the deposit to the vault minimum shown by tickerspring_vaults."),u.entry.remainingCapacityUnits!==null&&BigInt(n)>BigInt(i.integer(u.entry.remainingCapacityUnits))&&g("Reduce the deposit to the vault remaining capacity.");let o=await i.request(t,"/v1/agent/prepare/vault-deposit",{owner:a,...i.attribution(e),vault:u.address,amount:t.formatAmount(n,6),slippageBps:r}),p=i.prepared(t,o,a,"vault-deposit"),m=i.object(p.bundle.params),d=be(m.minShares);return(!c(m.vault,u.address)||!c(m.receiver,a)||i.integer(m.assets)!==n||d<s)&&g("TickerSpring deposit does not preserve the requested vault, amount, receiver or minimum shares."),tt(p.txs,ae.address,u.address,n),he(p.txs,u.address,Se,"requestDeposit",[BigInt(n),a,d]),i.result(t,p,a,{input:{token:ae,amount:n},minimumOutput:{token:u.share,amount:d.toString()}},`Vault harvest fee: ${String(u.entry.feeBps)} bps. Deposit creates a keeper request, not immediately owned shares. Monitor tickerspring_account; cancel an unfilled request with tickerspring_vault_cancel_deposit.`)}async function hn(t,e,a){i.inputs(e,["vault","id","agentTag"]);let n=Pt(e.vault),s=i.integer(e.id),r=i.prepared(t,await i.request(t,"/v1/agent/prepare/vault-cancel-deposit",{owner:a,...i.attribution(e),vault:n,id:s}),a,"vault-cancel-deposit");return r.txs.length!==1&&g("TickerSpring returned unexpected cancellation steps."),he(r.txs,n,Se,"cancelDeposit",[BigInt(s)]),i.result(t,r,a,{vault:n,id:s},"Cancel only a pending deposit. Verify refunded USDG and request status with tickerspring_account and balances.")}async function vn(t,e,a){i.inputs(e,["vault","shares","mode","minUsdg","minToken","slippageBps","agentTag"]);let n=i.positive(e.shares),s=ke(e);e.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."),e.mode!=="usdg"&&e.mode!=="in-kind"&&g("Choose usdg or in-kind withdrawal mode.");let r=BigInt(i.integer(e.minUsdg)),u=e.mode==="in-kind"?BigInt(i.integer(e.minToken)):0n;r+u<=1n&&g("Provide protected withdrawal minima greater than 1 base unit in total."),e.mode==="usdg"&&e.minToken!==void 0&&g("Use minToken only for in-kind withdrawals.");let o=await nt(t,e.vault);(!Array.isArray(o.entry.withdrawModes)||!o.entry.withdrawModes.includes(e.mode))&&g("That withdrawal mode is not currently offered by this vault.");let p=i.prepared(t,await i.request(t,"/v1/agent/prepare/vault-withdraw",{owner:a,...i.attribution(e),vault:o.address,shares:t.formatAmount(n,12),mode:e.mode,slippageBps:s}),a,"vault-withdraw");(p.txs.length!==1||!c(p.txs[0].to,o.address))&&g("TickerSpring returned unexpected withdrawal steps.");let m=fn({abi:Se,data:p.txs[0].data}),d=m.args;if((d[0]!==BigInt(n)||!c(d[1],a)||!c(d[2],a))&&g("TickerSpring withdrawal must redeem the requested shares for this wallet."),e.mode==="in-kind")(m.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{(m.functionName!=="redeem"||typeof d[4]!="bigint"||d[4]<r)&&g("TickerSpring withdrawal minimum does not protect the requested USDG.");let v=i.object(d[3]);c(v.tokenIn,i.address(i.object(o.entry.token).address))||g("TickerSpring withdrawal route must sell only the vault pool token.")}return he(p.txs,o.address,Se,m.functionName,d),i.result(t,p,a,{input:{token:o.share,amount:n},mode:e.mode,minimumOutputs:[{token:ae,amount:r.toString()},...e.mode==="in-kind"?[{token:i.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 wn(t,e,a,n){i.inputs(e,["basket","token","amount","minAmountOut","slippageBps","agentTag"]);let s=Y(i.address(e.basket)),r=A.baskets.find(l=>c(l.pool,s));if(!r){let l=i.object(await U(t,`/v1/baskets/${s}`));(!c(l.pool,s)||l.listed!==!1||!c(l.maker,a)||!Array.isArray(l.tokens))&&g("Use a pinned basket, or an unverified basket this wallet created through the pinned BasketMaker.");let h=i.text(l.createdTx);/^0x[0-9a-fA-F]{64}$/.test(h)||g("The basket creation receipt is unavailable.");let T=t.clientFor(E),P=await T.getTransactionReceipt({hash:h}),q=Y(A.basketConfig.basketMakerV2),z=P.logs.some(F=>{if(!c(F.address,q))return!1;try{let R=yn({abi:et(K.maker),data:F.data,topics:F.topics}),J=i.object(R.args);return R.eventName==="Made"&&c(J.pool,s)&&c(J.maker,a)&&c(J.recipient,a)}catch{return!1}});(P.status!=="success"||!z||await T.readContract({address:Y(A.basketConfig.weightedPoolFactory),abi:et(K.basketFactory),functionName:"isPoolFromFactory",args:[s]})!==!0)&&g("This basket has no successful creation by the pinned BasketMaker and factory.");let I=l.tokens.map(F=>i.token(F)),G=await T.readContract({address:Y(A.basketConfig.vault),abi:et(K.basketVault),functionName:"getPoolTokens",args:[s]});(new Set(I.map(F=>F.address.toLowerCase())).size!==I.length||!Array.isArray(G)||G.length!==I.length||!I.every(F=>G.some(R=>c(R,F.address))))&&g("The unverified basket constituents disagree with its on-chain vault."),r={pool:s,tokens:I}}let u=r,o=e.token===void 0?ae:(()=>{let l=Y(i.address(e.token));if(c(l,ae.address))return ae;let h=[...u.tokens,...A.baskets.flatMap(T=>T.tokens)].find(T=>c(T.address,l));return(!h||!u.tokens.some(T=>c(T.address,l))&&h.symbol!=="WETH")&&g("Use USDG, WETH or a constituent of this basket."),i.token(h)})(),p=i.positive(e.amount),m=be(e.minAmountOut),d=ke(e),v=i.token({address:s,symbol:"BPT",decimals:18}),k=n==="buy"?o:v,b=n==="buy"?v:o,y=i.prepared(t,await i.request(t,`/v1/agent/prepare/basket-${n}`,{owner:a,...i.attribution(e),basket:s,amount:t.formatAmount(p,k.decimals),[n==="buy"?"payWith":"receive"]:o.address,slippageBps:d}),a,`basket-${n}`),w=i.object(y.bundle.params),D=be(w.minOut),O=i.futureDeadline(w.deadline);(w.side!==n||!c(w.zap,De)||!c(w.pool,s)||!c(w.token,o.address)||!c(w.recipient,a)||i.integer(w.amount)!==p||D<m||!Array.isArray(w.legs))&&g("TickerSpring basket quote does not preserve the requested pool, token, amount, receiver or minimum.");let x=w.legs.map(l=>{let h=i.object(l),T=i.address(h.tokenIn),P=i.address(h.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 q=i.text(h.data);/^0x(?:[0-9a-fA-F]{2})+$/.test(q)||g("TickerSpring returned malformed basket route calldata.");let z=BigInt(i.positive(h.amountIn));return xe(q,T,P,z,De),{tokenIn:T,tokenOut:P,amountIn:z,data:q}});return n==="buy"&&x.reduce((l,h)=>l+h.amountIn,0n)>BigInt(p)&&g("TickerSpring basket routes exceed the authorized input."),tt(y.txs,k.address,De,p),he(y.txs,De,bn,n,n==="buy"?[s,o.address,BigInt(p),x,D,a,BigInt(O)]:[s,BigInt(p),o.address,x,D,a,BigInt(O)]),i.result(t,y,a,{input:{token:k,amount:p},minimumOutput:{token:b,amount:D.toString()},deadline:O},"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 Ft(t){let e=(a,n,s,r)=>({name:`tickerspring_${a}`,inputSchema:{type:"object",properties:{...n,...["grid","ladder_strategy","ladder","basket_make","vault_deposit","vault_cancel_deposit","vault_withdraw","basket_buy","basket_sell"].includes(a)?{agentTag:{type:"string",pattern:"^[a-z0-9][a-z0-9._-]{0,39}$"}}:{}},required:s,additionalProperties:!1},execute:async(u,o)=>{try{return i.address(o),await r(u,o)}catch(p){throw new f(t.plainError(p))}}});return[...Bt(t),It(t),e("products",{},[],async a=>(i.inputs(a,[]),{...Ue(),...V("/v1/agent/products",await U(t,"/v1/agent/products"))})),e("tokens",{query:{type:"string",maxLength:128},category:{type:"string"},sort:{enum:["volume"]}},[],async a=>{i.inputs(a,["query","category","sort"]);let n=new URLSearchParams;if(a.query!==void 0){let u=i.text(a.query);u.length>128&&g("Use a token query up to 128 characters."),n.set("q",u)}if(a.category!==void 0){let u=i.text(a.category);/^[a-z][a-z0-9-]{0,39}$/.test(u)||g("Use a published token category."),n.set("category",u)}a.sort!==void 0&&(a.sort!=="volume"&&g("Use the documented volume sort."),n.set("sort","volume"));let s=`/v1/tokens${n.size?`?${n}`:""}`,r;try{r=i.object(await U(t,s))}catch(u){throw new f(`${t.plainError(u)} ${Ne}`)}return Array.isArray(r.tokens)||g("TickerSpring token discovery is unavailable."),{tokenFilterGuidance:Ne,...V(s,{...r,tokens:r.tokens.map(u=>{let o=i.object(u);return{...o,...i.token(o)}})})}}),e("vaults",{vault:B},[],async a=>{if(i.inputs(a,["vault"]),a.vault!==void 0){let s=await nt(t,a.vault);return V(`/v1/agent/vaults/${s.address}`,s.data)}let n=await U(t,"/v1/agent/vaults");return Array.isArray(n)||g("TickerSpring vault list is unavailable."),V("/v1/agent/vaults",n.map(s=>{let r=i.object(s),u=Y(i.address(r.address));return{...r,address:u,chainId:E,pinned:A.vaults.some(o=>c(o.address,u)&&o.release===r.release)}}))}),e("baskets",{basket:B},[],async(a,n)=>{i.inputs(a,["basket"]);let s=a.basket===void 0?"/v1/baskets":`/v1/baskets/${Y(i.address(a.basket))}`,r=await U(t,s),u=a.basket===void 0?void 0:await U(t,`${s}/account/${n}`);return{...V(s,r),...u===void 0?{}:{holding:u}}}),e("order_exit_preview",{id:M},["id"],(a,n)=>Tt(t,a,n)),e("account",{},[],(a,n)=>(i.inputs(a,[]),_t(t,n))),e("activity",{cursor:{type:"string",minLength:1,maxLength:512}},[],async(a,n)=>{i.inputs(a,["cursor"]);let s=a.cursor===void 0?void 0:i.text(a.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=i.object(await U(t,r));return i.text(u.cursor),Array.isArray(u.changes)||g("TickerSpring activity is unavailable."),V(r,u)}),e("report_card",{agent:{type:"string",pattern:"^[a-z0-9][a-z0-9._-]{0,39}$"}},[],async(a,n)=>{i.inputs(a,["agent"]);let s=i.attribution({agentTag:a.agent}),r=`/v1/agent/report-card/${n}${s.agentTag===void 0?"":`?agent=${encodeURIComponent(String(s.agentTag))}`}`;return V(r,await U(t,r))}),e("plan",{kind:{enum:["grid","ladder"]},token:B,amount:M,gap:{type:"string"},days:{type:"integer",minimum:28,maximum:90}},["kind","token","amount"],async a=>{i.inputs(a,["kind","token","amount","gap","days"]),a.kind!=="grid"&&a.kind!=="ladder"&&g("Choose grid or ladder planning.");let n=i.positive(a.amount);BigInt(n)<(a.kind==="grid"?11000000n:55000000n)&&g("Plan at least 11 USDG for a grid or 55 USDG for a ladder."),a.kind==="ladder"&&(a.gap!==void 0||a.days!==void 0)&&g("The ladder planner does not accept gap or days.");let s=a.days??60;(typeof s!="number"||!Number.isInteger(s)||s<28||s>90)&&g("Choose 28 to 90 days for grid planning.");let r=a.gap===void 0?void 0:i.price(i.text(a.gap));if(r!==void 0){let[o,p=""]=r.split("."),m=10n**BigInt(p.length),d=BigInt(`${o}${p}`);(d*1000n<m*5n||d*2n>m)&&g("Choose a grid gap from 0.005 to 0.5.")}let u=`/v1/agent/${a.kind}/plan?token=${i.address(a.token)}&amountUsd=${t.formatAmount(n,6)}${a.kind==="grid"?`&days=${s}${r===void 0?"":`&gap=${r}`}`:""}`;return V(u,await U(t,u))}),e("swap_quote",{tokenIn:B,tokenOut:B,amount:M,slippageBps:{type:"integer",minimum:1,maximum:500}},["tokenIn","tokenOut","amount"],async a=>{i.inputs(a,["tokenIn","tokenOut","amount","slippageBps"]);let n=Y(i.address(a.tokenIn)),s=Y(i.address(a.tokenOut)),r;if(c(n,ae.address))r=ae;else if(c(n,A.basketConfig.weth))r=i.token({address:n,symbol:"WETH",decimals:18});else{let k=i.object(await U(t,"/v1/tokens"));Array.isArray(k.tokens)||g("TickerSpring token list is unavailable.");let b=k.tokens.map(i.object).filter(y=>c(y.address,n));b.length!==1&&g("Use an input address uniquely listed by TickerSpring."),r=i.token(b[0])}let u=`/v1/agent/swap/quote?tokenIn=${n}&tokenOut=${s}&amount=${t.formatAmount(i.positive(a.amount),r.decimals)}&slippageBps=${ke(a)}`,o=i.object(await U(t,u)),p=i.token(o.tokenOut),m=i.token(o.tokenIn);(!c(m.address,n)||m.decimals!==r.decimals||!c(p.address,s)||i.integer(o.amountInUnits)!==i.positive(a.amount))&&g("TickerSpring swap quote does not match the requested input and output.");let d=i.positive(o.expectedOutUnits),v=i.positive(o.minimumOutUnits);return BigInt(v)>BigInt(d)&&g("TickerSpring swap quote has inconsistent output amounts."),{...V(u,o),input:{token:r,amount:i.positive(a.amount)},output:{token:p,amount:d},minimumOutput:{token:p,amount:v},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."}}),e("candles",{token:B,interval:{enum:["15m","1h","4h","1d"]},limit:{type:"integer",minimum:1,maximum:500}},["token"],async a=>{i.inputs(a,["token","interval","limit"]);let n=a.interval??"1h",s=a.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=${i.address(a.token)}&interval=${String(n)}&limit=${s}`;return V(r,await U(t,r))}),e("basket_plan",{tokens:{type:"array",minItems:1,maxItems:8,items:{type:"object",properties:{token:B,weightBps:{type:"integer",minimum:100,maximum:1e4}},required:["token"],additionalProperties:!1}},name:{type:"string"},symbol:{type:"string"},swapFeeBps:{enum:[30,100]}},["tokens"],async a=>{i.inputs(a,["tokens","name","symbol","swapFeeBps"]),(!Array.isArray(a.tokens)||a.tokens.length<1||a.tokens.length>8)&&g("Choose 1 to 8 tokens for basket planning.");let n=a.tokens.map(u=>{let o=i.object(u);return i.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:i.address(o.token),...o.weightBps===void 0?{}:{weightPct:o.weightBps/100}}}),s=a.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 V(r,await i.request(t,r,{tokens:n,swapFeePct:s/100,...a.name===void 0?{}:{name:i.text(a.name)},...a.symbol===void 0?{}:{symbol:i.text(a.symbol)}}))}),e("tx_status",{hash:{type:"string",pattern:"^0x[0-9a-fA-F]{64}$"}},["hash"],async(a,n)=>{i.inputs(a,["hash"]);let s=i.text(a.hash);/^0x[0-9a-fA-F]{64}$/.test(s)||g("Provide a full transaction hash.");let r=await t.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."}}),e("spring_orders",{},[],a=>(i.inputs(a,[]),{chainId:E,url:"https://tickerspring.com/trade/spring-orders",source:`${Ee}/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."})),e("capabilities",{},[],a=>(i.inputs(a,[]),{...Ue(),chainId:E,source:`${Ee}/v1/agent/llms.txt`,inventory:yt,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(a=>e(a==="grid"?"grid":"ladder_strategy",{action:{enum:["open","close","setRepeat","collect"]},token:B,buyPrice:{type:"string"},sellPrice:{type:"string"},amount:M,repeat:{type:"boolean"},startingPrice:{type:"string"},id:M,min0:M,min1:M},["action"],(n,s)=>bt(t,n,s,a))),e("ladder",{token:B,side:{enum:["buy","sell"]},slippageBps:{type:"integer",minimum:0,maximum:9999},levels:{type:"array",minItems:2,maxItems:20,items:{type:"object",properties:{price:{type:"string"},amount:M,minAmountOut:M},required:["price","amount","minAmountOut"],additionalProperties:!1}}},["token","side","levels"],(a,n)=>Ct(t,a,n)),e("basket_make",{name:{type:"string"},symbol:{type:"string"},tokens:{type:"array",minItems:2,maxItems:8,items:{type:"object",properties:{token:B,weightBps:{type:"integer",minimum:100,maximum:9900}},required:["token","weightBps"],additionalProperties:!1}},swapFeeBps:{enum:[30,100]},amount:M,payWith:B,minAmountOut:M,slippageBps:{type:"integer",minimum:1,maximum:500}},["name","symbol","tokens","amount","minAmountOut"],(a,n)=>vt(t,a,n)),e("vault_deposit",{vault:B,amount:M,minShares:M,slippageBps:{type:"integer",minimum:1,maximum:500}},["vault","amount","minShares"],(a,n)=>kn(t,a,n)),e("vault_cancel_deposit",{vault:B,id:M},["vault","id"],(a,n)=>hn(t,a,n)),e("vault_withdraw",{vault:B,shares:M,mode:{enum:["usdg","in-kind"]},minUsdg:M,minToken:M,slippageBps:{type:"integer",minimum:1,maximum:500}},["vault","shares","mode","minUsdg"],(a,n)=>vn(t,a,n)),...["buy","sell"].map(a=>e(`basket_${a}`,{basket:B,token:B,amount:M,minAmountOut:M,slippageBps:{type:"integer",minimum:1,maximum:500}},["basket","amount","minAmountOut"],(n,s)=>wn(t,n,s,a)))]}var L={api:U,readResult:V,slippage:ke,minimum:be,exactCall:he,exactApproval:tt,account:_t};var Dn="https://api.tickerspring.com",pe=Le[E].tickerSpring.limitOrderHook.address,se={address:xn(Le[E].tokens.USDG.address),symbol:"USDG",decimals:fe,chainId:E},Mt=10000000n,Rt="(bytes32 pool,int24 lower,bool sell0,address inputToken,uint128 maximumInput,uint128 maximumCorrectionInput,uint256 minimumFullOutput,uint16 maximumFeeBps,uint64 deadline)",Oe=Bn([`function create(${Rt} params)`,`function createMarketOrder(${Rt} 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)"]),Ie={type:"string",pattern:"^\\d+$"},En={type:"string",pattern:"^[a-z0-9][a-z0-9._-]{0,39}$"};function j(t){return pt(t)?t:C()}function C(){throw new f("TickerSpring returned an incomplete or inconsistent response.")}function X(t){return(typeof t!="string"||!t.trim())&&C(),t}function _e(t){return dt(t,"Provide a valid token or wallet address.",ct)}function ee(t){if(typeof t!="string")throw new f("Amount must be a non-negative integer string in base units.");return ut(t),t}function ue(t){let e=ee(t);if(BigInt(e)<=0n)throw new f("The amount must be positive.");return e}function it(t){let e=typeof t=="number"&&Number.isFinite(t)?String(t):t;if(typeof e!="string"||!/^\d+(\.\d+)?$/.test(e)||!/[1-9]/.test(e))throw new f("TickerSpring requires a positive decimal price in USDG per token.");return e}function at(t){let e=j(t);return(typeof e.decimals!="number"||!Number.isInteger(e.decimals)||e.decimals<0||e.decimals>255||e.chainId!==void 0&&e.chainId!==E)&&C(),{address:_e(e.address),symbol:X(e.symbol),decimals:e.decimals,chainId:E}}function Fe(t){let e=ue(t);if(BigInt(e)<=BigInt(Math.floor(Date.now()/1e3)))throw new f("The prepared TickerSpring order has expired. Prepare it again.");return e}function Me(t,e){if(Object.keys(t).some(a=>!e.includes(a)))throw new f("Provide only the documented TickerSpring inputs.")}function st(t){if(t.agentTag===void 0)return{};if(typeof t.agentTag!="string"||!/^[a-z0-9][a-z0-9._-]{0,39}$/.test(t.agentTag))throw new f("Use an agentTag of 1 to 40 lowercase letters, digits, dots, underscores or hyphens.");return{agentTag:t.agentTag}}async function ve(t,e,a){let n=await ce(t.http,`${Dn}${e}`,{method:a?"POST":"GET",headers:{"Content-Type":"application/json","User-Agent":"Oak-TickerSpring/1.0"},...a?{body:JSON.stringify(a)}:{}},s=>!!s&&typeof s=="object"&&!Array.isArray(s));return j(n.data)}function rt(t,e,a,n){let s=j(e.bundle),r=j(e.walletSendCalls);(s.kind!==n||s.chainId!==E||!c(s.owner,a)||r.chainId!=="0x1237"||!c(r.from,a)||!Array.isArray(s.steps)||!s.steps.length||!Array.isArray(r.calls)||r.calls.length!==s.steps.length)&&C();let u=X(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,m)=>{let d=j(p),v=j(r.calls[m]);return(d.n!==m+1||d.kind!=="approve"&&d.kind!=="call"||d.from!==void 0&&!c(d.from,a)||d.chainId!==void 0&&d.chainId!==E||!c(v.to,X(d.to))||v.data!==d.data||d.value!=="0"||v.value!=="0x0")&&C(),t.unsignedTx({to:_e(d.to),data:X(d.data),value:ee(d.value),chainId:E,description:X(d.label)})});return{bundle:s,txs:o,expiresAt:u}}async function Pe(t,e,a,n={},s){let{bundle:r,txs:u,expiresAt:o}=e,p=await t.preview(u,a);if(Date.parse(o)<=Date.now())throw new f("The prepared TickerSpring bundle expired during preview. Prepare it again.");n.deadline!==void 0&&Fe(n.deadline);let m=p.changes.map(({token:k,amount:b})=>{let y=b.startsWith("-");return`${y?"-":""}${t.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"))&&C();let d=r.simulation===void 0?void 0:j(r.simulation),v=d?.ok===!1?`API simulation: ${X(d.error)}.`:"";return{txs:u,from:a,expiresAt:o,...n,preview:p,summary:[X(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,v,p.summary,...m].filter(Boolean).join(" ")}}async function Lt(t,e,a){Me(e,["token","side","amount","price","slippageBps","minAmountOut","startingPrice","agentTag"]);let n=st(e),s=_e(e.token),r=ue(e.amount),u=it(X(e.price)),o=e.slippageBps===void 0?500:e.slippageBps;if(we("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=e.minAmountOut===void 0?0n:BigInt(ue(e.minAmountOut));if(e.minAmountOut!==void 0&&p<=1n)throw new f("The minimum output amount must be greater than 1 base unit.");if(e.side!=="buy"&&e.side!=="sell")throw new f("Choose buy or sell for the limit order.");if(e.side==="buy"&&BigInt(r)<Mt)throw new f("TickerSpring orders require at least 10 USDG.");let m=await ve(t,"/v1/tokens");Array.isArray(m.tokens)||C();let d=m.tokens.map(j).filter(l=>c(l.address,s)&&(l.chainId===void 0||l.chainId===E));if(d.length!==1)throw new f("TickerSpring did not return a unique token for that address on chain 4663.");let v=d[0],k=at(v);if(c(k.address,se.address))throw new f("Choose the order token paired with USDG.");let b=j(v.markets);typeof b.limitOrders!="boolean"&&C();let y=e.side==="buy"?se:k,w=e.side==="buy"?k:se;if(e.side==="sell"){let l=BigInt(te(u,18,"floor"));if(BigInt(r)*l*10n**BigInt(fe)/(10n**BigInt(k.decimals)*10n**18n)<Mt)throw new f("TickerSpring orders require at least 10 USDG at the limit price.")}if(b.limitOrders&&e.startingPrice!==void 0)throw new f("startingPrice is only used to open a new limit market.");let D=b.limitOrders?void 0:it(e.startingPrice===void 0?v.priceUsd:X(e.startingPrice)),O=await ve(t,"/v1/agent/prepare/limit-order",{owner:a,...n,token:s,side:e.side,price:u,amount:t.formatAmount(r,y.decimals),...D===void 0?{}:{startingPrice:D}}),x=Nt(t,a,O,{amount:r,limitPrice:u,slippageBps:o,callerMinOut:p,marketToken:k,inputToken:y,outputToken:w,markets:b,startingPrice:D});return Pe(t,x.p,a,x.details)}function Nt(t,e,a,n){let{amount:s,limitPrice:r,slippageBps:u,callerMinOut:o,marketToken:p,inputToken:m,outputToken:d,markets:v}=n,k=rt(t,a,e,"limit-order"),b=j(k.bundle.params),y=j(b.create),w=Fe(y.deadline),D=ue(y.minimumFullOutput);(!c(b.hook,pe)||!c(y.inputToken,m.address)||ee(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(ee(y.maximumCorrectionInput))>BigInt(s))&&C(),c(y.pool,$e.poolFor(p.address,pe))||C();let O=BigInt(m.address)<BigInt(d.address);y.sell0!==O&&C();let x=BigInt(s)*9750n/10000n,l=BigInt(te(r,18,"floor")),h=c(m.address,se.address)?l>0n?x*10n**BigInt(p.decimals)*10n**18n/(10n**BigInt(fe)*l):0n:x*l*10n**BigInt(fe)/(10n**BigInt(p.decimals)*10n**18n),T=BigInt(we(h.toString(),u)),P=Te(y.lower),q=P*P,z=1n<<192n,I=q>0n?y.sell0?x*q/z:x*z/q:0n,G=p.decimals===18?BigInt(we(I.toString(),u)):T,F=[o,T,G].reduce(($,W)=>$>W?$:W,0n);if(BigInt(D)<=1n||BigInt(D)<F)throw new f("TickerSpring minimum output is below the quoted slippage minimum.");let R={pool:y.pool,lower:y.lower,sell0:y.sell0,inputToken:m.address,maximumInput:BigInt(s),maximumCorrectionInput:BigInt(ee(y.maximumCorrectionInput)),minimumFullOutput:BigInt(D),maximumFeeBps:250,deadline:BigInt(w)},J;if(v.limitOrders)J=Ce({abi:Oe,functionName:"create",args:[R]});else{let $=j(b.market);c($.token,p.address)||C();let W=BigInt(ue($.initialPrice)),je=BigInt(ue($.minimumPrice)),qe=BigInt(ue($.maximumPrice));(W<je||W>qe)&&C(),n.startingPrice!==void 0&&$e.checkInitialization(W,je,qe,n.startingPrice,p),J=Ce({abi:Oe,functionName:"createMarketOrder",args:[R,p.address,W,je,qe]})}if((!Array.isArray(b.approvals)||b.approvals.length>1||k.txs.length!==b.approvals.length+1)&&C(),b.approvals.length){let $=j(b.approvals[0]),W=Ce({abi:An,functionName:"approve",args:[pe,BigInt(s)]});(!c($.token,m.address)||!c($.spender,pe)||ee($.amount)!==s||!c(k.txs[0].to,m.address)||!N(k.txs[0].data,W))&&C()}let H=k.txs.at(-1);return(!c(H.to,pe)||!N(H.data,J))&&C(),{p:k,details:{input:{token:m,amount:s},minimumOutput:{token:d,amount:D},deadline:w,...n.startingPrice===void 0?{}:{startingPrice:n.startingPrice}}}}async function jt(t,e,a,n){Me(e,["id","agentTag"]);let s=st(e),r=ee(e.id),u=await ve(t,"/v1/agent/prepare/order-action",{owner:a,id:r,action:n,...s}),o=rt(t,u,a,"order-action");(o.txs.length!==1||!c(o.txs[0].to,pe))&&C();let p=Tn({abi:Oe,data:o.txs[0].data});if((p.functionName!==n||p.args[0]!==BigInt(r))&&C(),p.functionName==="cancel"){let[,m,d,v,k]=p.args;if(Fe(v.toString()),m+d===0n||k!==3)throw new f("TickerSpring returned a cancellation without protected amounts or both token deliveries. Prepare it again.");return Pe(t,o,a,{id:r,deadline:v.toString()})}return N(o.txs[0].data,Ce({abi:Oe,functionName:"claimBoth",args:[BigInt(r)]}))||C(),Pe(t,o,a,{id:r})}async function qt(t,e){let a=await ve(t,`/v1/agent/accounts/${e}`);if(!c(a.owner,e)||a.limitOrdersComplete!==!0||!Array.isArray(a.limitOrders)||!Array.isArray(a.unavailable)||a.unavailable.length)throw new f("TickerSpring could not return the complete order list for this wallet.");let n=X(a.asOf);Number.isFinite(Date.parse(n))||C();let s=new Set,r=a.limitOrders.map(u=>{let o=j(u),p=j(o.order),m=at(o.token);(!c(o.hook,pe)||!c(p.owner,e)||o.side!=="buy"&&o.side!=="sell"||c(m.address,se.address)||o.feeBps!==250)&&C();let d=ee(o.id);s.has(d)&&C(),s.add(d);let v=BigInt(m.address)<BigInt(se.address)?[m,se]:[se,m],k=j(o.claimable);return{id:d,status:X(o.status),side:o.side,chainId:E,feeBps:250,input:{token:o.side==="buy"?se:m,amount:ee(p.debit)},claimable:v.map((b,y)=>({token:b,amount:ee(k[y===0?"net0":"net1"])}))}});return{owner:e,chainId:E,asOf:n,orders:r}}var Sn=t=>{let e=n=>async s=>{try{return lt(s),await n(s)}catch(r){throw new f(t.plainError(r))}},a=(n,s,r,u)=>({name:`tickerspring_${n}`,inputSchema:{type:"object",properties:{...s,...["create","cancel","claim"].includes(n)?{agentTag:En}:{}},required:r,additionalProperties:!1},execute:(o,p)=>e(m=>u(o,m))(p)});return{tools:[...Ft(t),a("create",{token:B,side:{type:"string",enum:["buy","sell"]},amount:{...Ie,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:{...Ie,description:"Optional caller minimum output in base units."}},["token","side","amount","price"],(n,s)=>Lt(t,n,s)),a("cancel",{id:Ie},["id"],(n,s)=>jt(t,n,s,"cancel")),a("claim",{id:Ie},["id"],(n,s)=>jt(t,n,s,"claimBoth")),a("orders",{},[],(n,s)=>(Me(n,[]),qt(t,s)))],positions:e(async n=>(await qt(t,n)).orders.map(r=>({module:"tickerspring",id:r.id,chainId:E,assets:r.claimable,description:`${r.side} order ${r.id}: ${r.status}; assets are claimable amounts only. Original input: ${t.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.`})))}},da=t=>mt("tickerspring",[Sn(t)]),i={attribution:st,object:j,text:X,address:_e,integer:ee,positive:ue,token:at,price:it,futureDeadline:Fe,inputs:Me,request:ve,prepared:rt,result:Pe,create:Lt,validateOrder:Nt};var ot={address:Ut(A.contracts.usdg),symbol:"USDG",decimals:6,chainId:E},Re=Ut(A.contracts.limitOrderHook);async function Ct(t,e,a){i.inputs(e,["token","side","levels","slippageBps","agentTag"]);let n=i.address(e.token);if(e.side!=="buy"&&e.side!=="sell")throw new f("Choose buy or sell for the limit-order ladder.");if(!Array.isArray(e.levels)||e.levels.length<2||e.levels.length>20)throw new f("Provide 2 to 20 independent limit-order levels.");let s=e.slippageBps===void 0?500:e.slippageBps;if(typeof s!="number"||!Number.isInteger(s)||s<0||s>9999)throw new f("Use slippageBps from 0 to 9999.");let r=await i.request(t,"/v1/tokens");if(!Array.isArray(r.tokens))throw new f("TickerSpring token list is unavailable.");let u=r.tokens.map(i.object).filter(x=>c(x.address,n));if(u.length!==1)throw new f("Use a unique TickerSpring token address on chain 4663.");let o=u[0],p=i.token(o);if(c(p.address,ot.address))throw new f("Choose a ladder token paired with USDG.");let m=i.object(o.markets);if(m.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=e.side==="buy"?ot:p,v=e.side==="buy"?p:ot,k=e.levels.map(x=>{let l=i.object(x);i.inputs(l,["price","amount","minAmountOut"]);let h=i.price(i.text(l.price)),T=i.positive(l.amount),P=i.positive(l.minAmountOut);if((e.side==="buy"?BigInt(T):BigInt(T)*BigInt(te(h,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:h,amount:T,minAmountOut:P}}),b=i.prepared(t,await i.request(t,"/v1/agent/prepare/ladder",{owner:a,...i.attribution(e),token:n,side:e.side,orders:k.map(x=>({price:x.price,amount:t.formatAmount(x.amount,d.decimals)}))}),a,"ladder"),y=i.object(b.bundle.params);if(!c(y.hook,Re)||!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 D=k.reduce((x,l)=>x+BigInt(l.amount),0n).toString();if(w.length){let x=i.object(w[0]),l=b.txs[0];if(!c(x.token,d.address)||!c(x.spender,Re)||i.integer(x.amount)!==D||!c(l.to,d.address)||!N(l.data,In({abi:Cn,functionName:"approve",args:[Re,BigInt(D)]})))throw new f("TickerSpring ladder approval must equal the sum of the level inputs.")}let O=k.map((x,l)=>{let h=i.object(y.orders[l]),T=b.txs[l+w.length];return i.validateOrder(t,a,{bundle:{...b.bundle,kind:"limit-order",params:{...h,hook:Re,approvals:[]},steps:[{n:1,kind:"call",to:T.to,data:T.data,value:"0",label:T.description}]},walletSendCalls:{chainId:"0x1237",from:a,calls:[{to:T.to,data:T.data,value:"0x0"}]}},{amount:x.amount,limitPrice:x.price,slippageBps:s,callerMinOut:BigInt(x.minAmountOut),marketToken:p,inputToken:d,outputToken:v,markets:m}).details});return i.result(t,b,a,{input:{token:d,amount:D},levels:O,deadline:O.reduce((x,l)=>BigInt(l.deadline)<BigInt(x)?l.deadline:x,O[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,Ct as c,bt as d,$e as e,vt as f,Tt as g,le as h,At as i,Bt as j,ln as k,mn as l,It as m,Ft as n,L as o,Sn as p,da as q,i as r,xe as s};