@oakagentkit/core 0.3.5 → 0.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/dist/api/addresses.d.ts +14 -0
- package/build/dist/api/addresses.js +1 -1
- package/build/dist/api/chain.js +1 -1
- package/build/dist/api/history.d.ts +2 -0
- package/build/dist/api/history.js +1 -1
- package/build/dist/api/identity-link.js +1 -1
- package/build/dist/api/metadata.js +1 -1
- package/build/dist/api/modules/beefy/boosts.js +1 -1
- package/build/dist/api/modules/beefy/clm.js +1 -1
- package/build/dist/api/modules/beefy/guard.js +1 -1
- package/build/dist/api/modules/beefy/index.js +1 -1
- package/build/dist/api/modules/beefy/liquidity.js +1 -1
- package/build/dist/api/modules/beefy/management.js +1 -1
- package/build/dist/api/modules/beefy/vaults.js +1 -1
- package/build/dist/api/modules/borro/actions.js +1 -1
- package/build/dist/api/modules/borro/index.js +1 -1
- package/build/dist/api/modules/borro/liquidity.js +1 -1
- package/build/dist/api/modules/borro/positions.js +1 -1
- package/build/dist/api/modules/borro/reader.js +1 -1
- package/build/dist/api/modules/chop/display.js +1 -1
- package/build/dist/api/modules/chop/guard.js +1 -1
- package/build/dist/api/modules/chop/index.js +1 -1
- package/build/dist/api/modules/clanker/extensions.js +1 -1
- package/build/dist/api/modules/clanker/index.js +1 -1
- package/build/dist/api/modules/clanker/manage.js +1 -1
- package/build/dist/api/modules/clanker/pool-config.js +1 -1
- package/build/dist/api/modules/clanker/protocol.js +1 -1
- package/build/dist/api/modules/clanker/state.js +1 -1
- package/build/dist/api/modules/earn/index.js +1 -1
- package/build/dist/api/modules/erc8004/common.js +1 -1
- package/build/dist/api/modules/erc8004/domain.js +1 -1
- package/build/dist/api/modules/erc8004/index.js +1 -1
- package/build/dist/api/modules/erc8004/management.js +1 -1
- package/build/dist/api/modules/erc8004/reputation.js +1 -1
- package/build/dist/api/modules/erc8004/services.js +1 -1
- package/build/dist/api/modules/erc8004/thesis.js +1 -1
- package/build/dist/api/modules/erc8004/validation.js +1 -1
- package/build/dist/api/modules/fobo/index.js +1 -1
- package/build/dist/api/modules/fobo/intent.js +1 -1
- package/build/dist/api/modules/fobo/steps.js +1 -1
- package/build/dist/api/modules/fobo/verify.js +1 -1
- package/build/dist/api/modules/grove/index.js +1 -1
- package/build/dist/api/modules/heyresearch/builder-feed.js +1 -1
- package/build/dist/api/modules/heyresearch/index.js +1 -1
- package/build/dist/api/modules/heyresearch/public-reads.js +1 -1
- package/build/dist/api/modules/heyresearch/token-facts.js +1 -1
- package/build/dist/api/modules/hoodag/chain-reads.js +1 -1
- package/build/dist/api/modules/hoodag/index.js +1 -1
- package/build/dist/api/modules/hoodag/management.js +1 -1
- package/build/dist/api/modules/hoodag/public-reads.js +1 -1
- package/build/dist/api/modules/hoodag/reconstruct.js +1 -1
- package/build/dist/api/modules/hoodlock/airdrop.js +1 -1
- package/build/dist/api/modules/hoodlock/buyback.js +1 -1
- package/build/dist/api/modules/hoodlock/commerce.js +1 -1
- package/build/dist/api/modules/hoodlock/fee.js +1 -1
- package/build/dist/api/modules/hoodlock/guard.js +1 -1
- package/build/dist/api/modules/hoodlock/index.js +1 -1
- package/build/dist/api/modules/hoodlock/lifecycle.js +1 -1
- package/build/dist/api/modules/hoodlock/locks-burn.js +1 -1
- package/build/dist/api/modules/hoodlock/public.js +1 -1
- package/build/dist/api/modules/hookr/actions.d.ts +39 -2
- package/build/dist/api/modules/hookr/actions.js +1 -1
- package/build/dist/api/modules/hookr/addons.js +1 -1
- package/build/dist/api/modules/hookr/agent-gate.d.ts +14 -2
- package/build/dist/api/modules/hookr/agent-gate.js +1 -1
- package/build/dist/api/modules/hookr/agent-link.d.ts +17 -0
- package/build/dist/api/modules/hookr/agent-link.js +1 -0
- package/build/dist/api/modules/hookr/api-client.d.ts +9 -0
- package/build/dist/api/modules/hookr/api-client.js +1 -0
- package/build/dist/api/modules/hookr/blocks/advisory.d.ts +41 -0
- package/build/dist/api/modules/hookr/blocks/advisory.js +1 -0
- package/build/dist/api/modules/hookr/blocks/buy-sell-block.d.ts +7 -0
- package/build/dist/api/modules/hookr/blocks/buy-sell-block.js +1 -0
- package/build/dist/api/modules/hookr/blocks/core-settings.d.ts +6 -0
- package/build/dist/api/modules/hookr/blocks/core-settings.js +1 -0
- package/build/dist/api/modules/hookr/blocks/exit-clock.d.ts +14 -0
- package/build/dist/api/modules/hookr/blocks/exit-clock.js +1 -0
- package/build/dist/api/modules/hookr/blocks/holder-pot.d.ts +30 -0
- package/build/dist/api/modules/hookr/blocks/holder-pot.js +1 -0
- package/build/dist/api/modules/hookr/blocks/managed-fee.d.ts +96 -0
- package/build/dist/api/modules/hookr/blocks/managed-fee.js +1 -0
- package/build/dist/api/modules/hookr/blocks/market-guard.d.ts +116 -0
- package/build/dist/api/modules/hookr/blocks/market-guard.js +1 -0
- package/build/dist/api/modules/hookr/blocks/market-hours-fee.d.ts +87 -0
- package/build/dist/api/modules/hookr/blocks/market-hours-fee.js +1 -0
- package/build/dist/api/modules/hookr/blocks/pay-later.d.ts +199 -0
- package/build/dist/api/modules/hookr/blocks/pay-later.js +1 -0
- package/build/dist/api/modules/hookr/blocks/sandwich-guard.d.ts +3 -0
- package/build/dist/api/modules/hookr/blocks/sandwich-guard.js +1 -0
- package/build/dist/api/modules/hookr/blocks/storm-fee.d.ts +3 -0
- package/build/dist/api/modules/hookr/blocks/storm-fee.js +1 -0
- package/build/dist/api/modules/hookr/blocks/swap-cut.d.ts +3 -0
- package/build/dist/api/modules/hookr/blocks/swap-cut.js +1 -0
- package/build/dist/api/modules/hookr/blocks/swap-reward-mint.d.ts +125 -0
- package/build/dist/api/modules/hookr/blocks/swap-reward-mint.js +1 -0
- package/build/dist/api/modules/hookr/blocks/wallet-cap.d.ts +3 -0
- package/build/dist/api/modules/hookr/blocks/wallet-cap.js +1 -0
- package/build/dist/api/modules/hookr/blocks/zap-source.d.ts +161 -0
- package/build/dist/api/modules/hookr/blocks/zap-source.js +1 -0
- package/build/dist/api/modules/hookr/blocks/zap-target.d.ts +51 -0
- package/build/dist/api/modules/hookr/blocks/zap-target.js +1 -0
- package/build/dist/api/modules/hookr/claims.d.ts +53 -0
- package/build/dist/api/modules/hookr/claims.js +1 -0
- package/build/dist/api/modules/hookr/contracts.d.ts +3 -1
- package/build/dist/api/modules/hookr/contracts.js +1 -1
- package/build/dist/api/modules/hookr/create-cancel.js +1 -1
- package/build/dist/api/modules/hookr/discovery.d.ts +2 -2
- package/build/dist/api/modules/hookr/discovery.js +1 -1
- package/build/dist/api/modules/hookr/fill-bounty.d.ts +2 -0
- package/build/dist/api/modules/hookr/fill-bounty.js +1 -1
- package/build/dist/api/modules/hookr/gas.d.ts +48 -0
- package/build/dist/api/modules/hookr/gas.js +1 -0
- package/build/dist/api/modules/hookr/gates.d.ts +51 -0
- package/build/dist/api/modules/hookr/gates.js +1 -0
- package/build/dist/api/modules/hookr/hook-blocks.d.ts +304 -0
- package/build/dist/api/modules/hookr/hook-blocks.js +1 -0
- package/build/dist/api/modules/hookr/index.d.ts +4 -2
- package/build/dist/api/modules/hookr/index.js +1 -1
- package/build/dist/api/modules/hookr/jobs.d.ts +7 -0
- package/build/dist/api/modules/hookr/jobs.js +1 -0
- package/build/dist/api/modules/hookr/launch-options.d.ts +52 -3
- package/build/dist/api/modules/hookr/launch-options.js +1 -1
- package/build/dist/api/modules/hookr/launch-profile.d.ts +8 -0
- package/build/dist/api/modules/hookr/launch-profile.js +1 -1
- package/build/dist/api/modules/hookr/launch-receipt.js +1 -1
- package/build/dist/api/modules/hookr/launch.d.ts +24 -0
- package/build/dist/api/modules/hookr/launch.js +1 -1
- package/build/dist/api/modules/hookr/liquidity.js +1 -1
- package/build/dist/api/modules/hookr/lp-positions.js +1 -1
- package/build/dist/api/modules/hookr/lp-reads.js +1 -1
- package/build/dist/api/modules/hookr/lp-receipt.js +1 -1
- package/build/dist/api/modules/hookr/lp-state.d.ts +90 -2
- package/build/dist/api/modules/hookr/lp-state.js +1 -1
- package/build/dist/api/modules/hookr/pay-later-actions.d.ts +52 -0
- package/build/dist/api/modules/hookr/pay-later-actions.js +1 -0
- package/build/dist/api/modules/hookr/pins.d.ts +5 -0
- package/build/dist/api/modules/hookr/pins.js +1 -1
- package/build/dist/api/modules/hookr/pm-liquidity.d.ts +215 -0
- package/build/dist/api/modules/hookr/pm-liquidity.js +1 -0
- package/build/dist/api/modules/hookr/public-reads.d.ts +1 -1
- package/build/dist/api/modules/hookr/public-reads.js +1 -1
- package/build/dist/api/modules/hookr/read-utils.js +1 -1
- package/build/dist/api/modules/hookr/relay.js +1 -1
- package/build/dist/api/modules/hookr/revenue.d.ts +4 -1
- package/build/dist/api/modules/hookr/revenue.js +1 -1
- package/build/dist/api/modules/hookr/scan.d.ts +25 -0
- package/build/dist/api/modules/hookr/scan.js +1 -0
- package/build/dist/api/modules/hookr/swap.d.ts +161 -0
- package/build/dist/api/modules/hookr/swap.js +1 -0
- package/build/dist/api/modules/kyberswap/index.js +1 -1
- package/build/dist/api/modules/kyberswap/source-pools.js +1 -1
- package/build/dist/api/modules/layerbank/abi.js +1 -1
- package/build/dist/api/modules/layerbank/actions.js +1 -1
- package/build/dist/api/modules/layerbank/checks.js +1 -1
- package/build/dist/api/modules/layerbank/index.js +1 -1
- package/build/dist/api/modules/layerbank/merkl.js +1 -1
- package/build/dist/api/modules/layerbank/reader.js +1 -1
- package/build/dist/api/modules/layerbank/reserve.js +1 -1
- package/build/dist/api/modules/lighter/index.js +1 -1
- package/build/dist/api/modules/longbow/administration.js +1 -1
- package/build/dist/api/modules/longbow/analytics.js +1 -1
- package/build/dist/api/modules/longbow/fixed.js +1 -1
- package/build/dist/api/modules/longbow/index.js +1 -1
- package/build/dist/api/modules/longbow/nft.js +1 -1
- package/build/dist/api/modules/longbow/rebates.js +1 -1
- package/build/dist/api/modules/longbow/staking.js +1 -1
- package/build/dist/api/modules/meridian/index.js +1 -1
- package/build/dist/api/modules/meridian/markets.js +1 -1
- package/build/dist/api/modules/meridian/rfq.js +1 -1
- package/build/dist/api/modules/merkl/discovery.js +1 -1
- package/build/dist/api/modules/merkl/index.js +1 -1
- package/build/dist/api/modules/merkl/manage.js +1 -1
- package/build/dist/api/modules/merkl/protocol.js +1 -1
- package/build/dist/api/modules/merkl/stock-lp.d.ts +51 -0
- package/build/dist/api/modules/merkl/stock-lp.js +1 -0
- package/build/dist/api/modules/morpho/allocator.js +1 -1
- package/build/dist/api/modules/morpho/bundles.js +1 -1
- package/build/dist/api/modules/morpho/in-kind.js +1 -1
- package/build/dist/api/modules/morpho/index.js +1 -1
- package/build/dist/api/modules/morpho/local-guard.js +1 -1
- package/build/dist/api/modules/morpho/midnight.js +1 -1
- package/build/dist/api/modules/morpho/protocol.js +1 -1
- package/build/dist/api/modules/morpho/vault-management.js +1 -1
- package/build/dist/api/modules/morpho/vault-tools.js +1 -1
- package/build/dist/api/modules/morpho/vault-v2.js +1 -1
- package/build/dist/api/modules/netnet/card-plan.js +1 -1
- package/build/dist/api/modules/netnet/card-read.js +1 -1
- package/build/dist/api/modules/netnet/card-recovery.js +1 -1
- package/build/dist/api/modules/netnet/desk-action.js +1 -1
- package/build/dist/api/modules/netnet/desk-read.js +1 -1
- package/build/dist/api/modules/netnet/financial.js +1 -1
- package/build/dist/api/modules/netnet/index.js +1 -1
- package/build/dist/api/modules/netnet/staking.js +1 -1
- package/build/dist/api/modules/orbio/index.js +1 -1
- package/build/dist/api/modules/orbio/positions.js +1 -1
- package/build/dist/api/modules/pendle/costs.js +1 -1
- package/build/dist/api/modules/pendle/index.js +1 -1
- package/build/dist/api/modules/pendle/markets.js +1 -1
- package/build/dist/api/modules/pendle/positions.js +1 -1
- package/build/dist/api/modules/pendle/pricecheck.js +1 -1
- package/build/dist/api/modules/pendle/reader.js +1 -1
- package/build/dist/api/modules/pendle/redeem.js +1 -1
- package/build/dist/api/modules/pendle/trade.js +1 -1
- package/build/dist/api/modules/pendle/validate.js +1 -1
- package/build/dist/api/modules/pendle/verify.js +1 -1
- package/build/dist/api/modules/pons/claim.js +1 -1
- package/build/dist/api/modules/pons/index.js +1 -1
- package/build/dist/api/modules/pons/launch-status.js +1 -1
- package/build/dist/api/modules/pons/prices.js +1 -1
- package/build/dist/api/modules/pons/reads.js +1 -1
- package/build/dist/api/modules/pons/swap-terms.js +1 -1
- package/build/dist/api/modules/pons/trade.js +1 -1
- package/build/dist/api/modules/poolstrade/index.js +1 -1
- package/build/dist/api/modules/priors/coverage.js +1 -1
- package/build/dist/api/modules/priors/discovery.js +1 -1
- package/build/dist/api/modules/priors/features.js +1 -1
- package/build/dist/api/modules/priors/holdings.js +1 -1
- package/build/dist/api/modules/priors/index.js +1 -1
- package/build/dist/api/modules/priors/integration.js +1 -1
- package/build/dist/api/modules/priors/market.js +1 -1
- package/build/dist/api/modules/priors/pt.js +1 -1
- package/build/dist/api/modules/priors/savings-exit.js +1 -1
- package/build/dist/api/modules/priors/starter-line.js +1 -1
- package/build/dist/api/modules/priors/stock-swap.js +1 -1
- package/build/dist/api/modules/raeto/index.js +1 -1
- package/build/dist/api/modules/relay/bootstrap.js +1 -1
- package/build/dist/api/modules/relay/discovery.js +1 -1
- package/build/dist/api/modules/relay/inbound.js +1 -1
- package/build/dist/api/modules/relay/index.js +1 -1
- package/build/dist/api/modules/relay/outbound-status.js +1 -1
- package/build/dist/api/modules/relay/reads.js +1 -1
- package/build/dist/api/modules/spark/actions.js +1 -1
- package/build/dist/api/modules/spark/details.js +1 -1
- package/build/dist/api/modules/spark/index.js +1 -1
- package/build/dist/api/modules/spark/management.js +1 -1
- package/build/dist/api/modules/steakhouse/analytics.js +1 -1
- package/build/dist/api/modules/steakhouse/erc4626.js +1 -1
- package/build/dist/api/modules/steakhouse/index.js +1 -1
- package/build/dist/api/modules/steakhouse/local-guard.js +1 -1
- package/build/dist/api/modules/steakhouse/management.js +1 -1
- package/build/dist/api/modules/steakhouse/v2-exit.js +1 -1
- package/build/dist/api/modules/tickerspring/basket-routes.js +1 -1
- package/build/dist/api/modules/tickerspring/contract-reads.js +1 -1
- package/build/dist/api/modules/tickerspring/discovery.js +1 -1
- package/build/dist/api/modules/tickerspring/exit-preview.js +1 -1
- package/build/dist/api/modules/tickerspring/guards.js +1 -1
- package/build/dist/api/modules/tickerspring/index.js +1 -1
- package/build/dist/api/modules/tickerspring/journeys.js +1 -1
- package/build/dist/api/modules/tickerspring/ladder.js +1 -1
- package/build/dist/api/modules/tickerspring/maker.js +1 -1
- package/build/dist/api/modules/tickerspring/order-accounting.js +1 -1
- package/build/dist/api/modules/tickerspring/research.js +1 -1
- package/build/dist/api/modules/tickerspring/strategies.js +1 -1
- package/build/dist/api/modules/uniswap/auction-create.js +1 -1
- package/build/dist/api/modules/uniswap/auction.js +1 -1
- package/build/dist/api/modules/uniswap/batch.js +1 -1
- package/build/dist/api/modules/uniswap/common.js +1 -1
- package/build/dist/api/modules/uniswap/fees.js +1 -1
- package/build/dist/api/modules/uniswap/index.js +1 -1
- package/build/dist/api/modules/uniswap/local-guard.js +1 -1
- package/build/dist/api/modules/uniswap/oracle.js +1 -1
- package/build/dist/api/modules/uniswap/pool-math.js +1 -1
- package/build/dist/api/modules/uniswap/pools.js +1 -1
- package/build/dist/api/modules/uniswap/position.js +1 -1
- package/build/dist/api/modules/uniswap/protocol.js +1 -1
- package/build/dist/api/modules/uniswap/quote-guard.js +1 -1
- package/build/dist/api/modules/uniswap/stock-prices.d.ts +25 -0
- package/build/dist/api/modules/uniswap/stock-prices.js +1 -1
- package/build/dist/api/modules/uniswap/stocks.js +1 -1
- package/build/dist/api/modules/uniswap/token-jar.js +1 -1
- package/build/dist/api/modules/uniswap/trade-batch.js +1 -1
- package/build/dist/api/modules/uniswap/trade.js +1 -1
- package/build/dist/api/modules/uniswap/v2.js +1 -1
- package/build/dist/api/modules/uniswap/v3.js +1 -1
- package/build/dist/api/modules/uniswap/v4.js +1 -1
- package/build/dist/api/modules/uniswap/wrap.js +1 -1
- package/build/dist/api/modules/upoch/index.js +1 -1
- package/build/dist/api/modules/upoch/reads.js +1 -1
- package/build/dist/api/modules/velora/claims.js +1 -1
- package/build/dist/api/modules/velora/delta-reads.js +1 -1
- package/build/dist/api/modules/velora/index.js +1 -1
- package/build/dist/api/modules/wormhole/index.js +1 -1
- package/build/dist/api/modules/wormhole/scan-text.d.ts +1 -1
- package/build/dist/api/positions.js +1 -1
- package/build/dist/api/pricenote.js +1 -1
- package/build/dist/api/prices.js +1 -1
- package/build/dist/api/rpc.js +1 -1
- package/build/dist/api/send.js +1 -1
- package/build/dist/api/signing-registry.js +1 -1
- package/build/dist/api/signing.js +1 -1
- package/build/dist/api/simulate.js +1 -1
- package/build/dist/api/swap.d.ts +2 -0
- package/build/dist/api/swap.js +1 -1
- package/build/dist/api/tokens.d.ts +9 -1
- package/build/dist/api/tokens.js +1 -1
- package/build/dist/api/tool-policy.d.ts +1 -0
- package/build/dist/api/tool-policy.js +1 -1
- package/build/dist/api/universal-router.js +1 -1
- package/build/dist/api/usd-estimate.js +1 -1
- package/build/dist/chunks/{DMDOSHV7.js → 266VIESP.js} +1 -1
- package/build/dist/chunks/{HFVXNKA5.js → 2BM2WX2G.js} +1 -1
- package/build/dist/chunks/{HDBZZOHJ.js → 2GYL3N2O.js} +1 -1
- package/build/dist/chunks/{OY5W7ZSL.js → 2H2OZE6X.js} +1 -1
- package/build/dist/chunks/{E76Z2TT4.js → 2QQ5CGQI.js} +1 -1
- package/build/dist/chunks/{4PLLS6CT.js → 2VYA6WIN.js} +1 -1
- package/build/dist/chunks/{FRT6AC6M.js → 2ZYFBBOE.js} +1 -1
- package/build/dist/chunks/{LCH6F5HT.js → 342OZP53.js} +1 -1
- package/build/dist/chunks/{XADHV2DT.js → 35DTANJW.js} +1 -1
- package/build/dist/chunks/{4IOHSX3Z.js → 37UBQQWL.js} +1 -1
- package/build/dist/chunks/3RGED2KO.js +1 -0
- package/build/dist/chunks/{4HQEJHCD.js → 3XIJCHT7.js} +1 -1
- package/build/dist/chunks/3XY44BP5.js +1 -0
- package/build/dist/chunks/3YNXQ3EZ.js +1 -0
- package/build/dist/chunks/{JDHPMS7X.js → 4JU23O3Z.js} +1 -1
- package/build/dist/chunks/{Y2QADJOB.js → 4P6DRKY3.js} +1 -1
- package/build/dist/chunks/{W3DGFMQE.js → 4RTXP2YP.js} +1 -1
- package/build/dist/chunks/{CNDIAF3P.js → 4WYTIM4T.js} +1 -1
- package/build/dist/chunks/{HPS4KOU4.js → 52AEVHKJ.js} +1 -1
- package/build/dist/chunks/{ZTKT3ZQK.js → 53VBLEYS.js} +1 -1
- package/build/dist/chunks/{ADIPEGNN.js → 5AO2QPWE.js} +1 -1
- package/build/dist/chunks/{GQITAJVF.js → 5BPFF7NX.js} +1 -1
- package/build/dist/chunks/5EQTOA5F.js +1 -0
- package/build/dist/chunks/{WAKZWSHB.js → 5KKAN7XQ.js} +1 -1
- package/build/dist/chunks/{VVAM3EAK.js → 5N6YJFFA.js} +1 -1
- package/build/dist/chunks/{QIB6OMQV.js → 5O67QQIY.js} +1 -1
- package/build/dist/chunks/{FAH7FKUT.js → 5UWVXEPD.js} +1 -1
- package/build/dist/chunks/{KKTOBXIT.js → 5VA66LFF.js} +1 -1
- package/build/dist/chunks/5VKVAUFQ.js +1 -0
- package/build/dist/chunks/5Y457HYC.js +1 -0
- package/build/dist/chunks/627SGCTU.js +1 -0
- package/build/dist/chunks/64LAWFBE.js +1 -0
- package/build/dist/chunks/{6F527FLN.js → 6HNQAYBM.js} +1 -1
- package/build/dist/chunks/{FUP53K6G.js → 6LDC5D2S.js} +1 -1
- package/build/dist/chunks/6RVAV6BB.js +1 -0
- package/build/dist/chunks/{WSILNJS2.js → 6STUQOFL.js} +1 -1
- package/build/dist/chunks/{4Z3IGMU6.js → 7AYP4ATZ.js} +1 -1
- package/build/dist/chunks/{YGW4ODAP.js → 7EPU3XGY.js} +1 -1
- package/build/dist/chunks/7GL547YZ.js +1 -0
- package/build/dist/chunks/{E47UYYK4.js → 7KK3OC7Q.js} +1 -1
- package/build/dist/chunks/{IZP3EKKS.js → 7PBCV7VS.js} +1 -1
- package/build/dist/chunks/{A3BJSQ23.js → 7VU5VCTL.js} +1 -1
- package/build/dist/chunks/{Z7FGEWO2.js → 7WXAS54T.js} +1 -1
- package/build/dist/chunks/{DRLBTB4E.js → A72ADVYF.js} +1 -1
- package/build/dist/chunks/{ANIF3JMV.js → AG66NM3J.js} +1 -1
- package/build/dist/chunks/AODUTN65.js +1 -0
- package/build/dist/chunks/{DBOGRUPS.js → AONO47JX.js} +1 -1
- package/build/dist/chunks/{2I7XHRTI.js → AOTTQPK7.js} +1 -1
- package/build/dist/chunks/{JTPHZCO3.js → AQJLEG6B.js} +1 -1
- package/build/dist/chunks/AZBTNUXF.js +1 -0
- package/build/dist/chunks/B4U43D5Z.js +1 -0
- package/build/dist/chunks/B5B7U3NZ.js +1 -0
- package/build/dist/chunks/{ZX43P4BK.js → B75SS7H6.js} +1 -1
- package/build/dist/chunks/{GBIBRYOV.js → B7HVPHSS.js} +1 -1
- package/build/dist/chunks/{LT5P6PZW.js → B7WZJHIJ.js} +1 -1
- package/build/dist/chunks/{3A2IKFTV.js → BIFANUTV.js} +1 -1
- package/build/dist/chunks/BM4KHOFB.js +1 -0
- package/build/dist/chunks/{ZVY7GGSP.js → BW755PNH.js} +1 -1
- package/build/dist/chunks/{VXCGMALF.js → BWE5PXRE.js} +1 -1
- package/build/dist/chunks/{7U62MMUQ.js → BY2OWKZB.js} +1 -1
- package/build/dist/chunks/{F7MGYRPU.js → CCPG6PRL.js} +1 -1
- package/build/dist/chunks/{OI3N4EW4.js → CG7ABZXH.js} +1 -1
- package/build/dist/chunks/{S37D7HOK.js → CITHH7NK.js} +1 -1
- package/build/dist/chunks/CJMVRV34.js +1 -0
- package/build/dist/chunks/{JJSCDDQO.js → CLHA557R.js} +1 -1
- package/build/dist/chunks/CQPIR6ER.js +1 -0
- package/build/dist/chunks/{MI5HZDMH.js → D6JOXK7Q.js} +1 -1
- package/build/dist/chunks/{IZFED3R2.js → DLNDJZR4.js} +1 -1
- package/build/dist/chunks/{UUF4Z6K6.js → DUTAMN3F.js} +1 -1
- package/build/dist/chunks/{NMJVQX5M.js → DWRRIFXS.js} +1 -1
- package/build/dist/chunks/{3ZH5SOC2.js → EFOC337C.js} +1 -1
- package/build/dist/chunks/{2PS4GCOZ.js → EKHNXPWO.js} +1 -1
- package/build/dist/chunks/EWZFZUVF.js +1 -0
- package/build/dist/chunks/EXKV6QJD.js +1 -0
- package/build/dist/chunks/{OB7BFDOV.js → EYE3ZAJB.js} +1 -1
- package/build/dist/chunks/{MQ5F2VOK.js → EZUQMTLE.js} +1 -1
- package/build/dist/chunks/FMEO7RX7.js +1 -0
- package/build/dist/chunks/{ZQPC54J5.js → FYWK3UK6.js} +1 -1
- package/build/dist/chunks/G53U6Y4L.js +1 -0
- package/build/dist/chunks/{O5QTITN6.js → GRHBE4MQ.js} +1 -1
- package/build/dist/chunks/GV6FZ6UG.js +1 -0
- package/build/dist/chunks/GV6Z3MET.js +1 -0
- package/build/dist/chunks/{GK3D7OKG.js → GVCNTGLC.js} +1 -1
- package/build/dist/chunks/H5J2LFPZ.js +1 -0
- package/build/dist/chunks/{DCGNVMKG.js → HC3QFA5I.js} +1 -1
- package/build/dist/chunks/{C76D54YG.js → HGSFRN57.js} +1 -1
- package/build/dist/chunks/HJI7KO6F.js +1 -0
- package/build/dist/chunks/{G5AMH4IP.js → HN5RBTNE.js} +1 -1
- package/build/dist/chunks/{MSRCJ2BS.js → HPBTSJW7.js} +1 -1
- package/build/dist/chunks/HPO673QQ.js +1 -0
- package/build/dist/chunks/{C57DITTF.js → HTOP2OKU.js} +1 -1
- package/build/dist/chunks/{DGDMRATN.js → ICHT3H3W.js} +1 -1
- package/build/dist/chunks/IJVBCEA2.js +1 -0
- package/build/dist/chunks/ILTGXU6G.js +1 -0
- package/build/dist/chunks/{I4473OC6.js → IMD33NQS.js} +1 -1
- package/build/dist/chunks/{X24YTJST.js → IY7FWTAL.js} +1 -1
- package/build/dist/chunks/{TOIKOIY6.js → J5624CVF.js} +1 -1
- package/build/dist/chunks/JCS24YBB.js +1 -0
- package/build/dist/chunks/JFYC2LVI.js +1 -0
- package/build/dist/chunks/JQVTHPUO.js +1 -0
- package/build/dist/chunks/{TGXEKBLV.js → JUVY6PCR.js} +1 -1
- package/build/dist/chunks/JYED2PZ3.js +1 -0
- package/build/dist/chunks/{KO7ANIKY.js → K3HCSCXE.js} +1 -1
- package/build/dist/chunks/{7VH6JQ2H.js → K5C6QBOO.js} +1 -1
- package/build/dist/chunks/{W7BFM6CK.js → KAXLZJU6.js} +1 -1
- package/build/dist/chunks/{YW4W3LPQ.js → KHLM6NIZ.js} +1 -1
- package/build/dist/chunks/{OIQTZOBN.js → KKGHXNM4.js} +1 -1
- package/build/dist/chunks/{TZ7S5KRB.js → KW5LJGNY.js} +1 -1
- package/build/dist/chunks/{SUNTJ6IU.js → KYANIEPX.js} +1 -1
- package/build/dist/chunks/{ZZ6FZGHF.js → L4UFGM7M.js} +1 -1
- package/build/dist/chunks/{YWVPK3DV.js → L76P6WIH.js} +1 -1
- package/build/dist/chunks/{QMNUB2GM.js → LBT6WR4U.js} +1 -1
- package/build/dist/chunks/LD3A2KLN.js +1 -0
- package/build/dist/chunks/{WRUTW6CG.js → LFSNAQ7V.js} +1 -1
- package/build/dist/chunks/LHC2YV2U.js +1 -0
- package/build/dist/chunks/{R66NSNNQ.js → LHVGWNMW.js} +1 -1
- package/build/dist/chunks/{RUHNLNVX.js → LOH6LUVT.js} +1 -1
- package/build/dist/chunks/{23HNDJ76.js → M2SWILNG.js} +1 -1
- package/build/dist/chunks/{IT2JLILU.js → MFKDNAHB.js} +1 -1
- package/build/dist/chunks/MFQTBUSD.js +1 -0
- package/build/dist/chunks/MFRKZOU4.js +1 -0
- package/build/dist/chunks/{V4UJMUIB.js → MLN5KTG7.js} +1 -1
- package/build/dist/chunks/{TJU644I7.js → MSIT5Q3M.js} +1 -1
- package/build/dist/chunks/{S4JUFCT4.js → MSQNOK3I.js} +1 -1
- package/build/dist/chunks/NCCKCGKL.js +1 -0
- package/build/dist/chunks/NGHRUNXO.js +1 -0
- package/build/dist/chunks/{N65J3L2H.js → NIGRNLNM.js} +1 -1
- package/build/dist/chunks/{DXAPKN7H.js → NLC36QHL.js} +1 -1
- package/build/dist/chunks/NUTTPUYJ.js +1 -0
- package/build/dist/chunks/{QMIH6HXH.js → NWW6GY5E.js} +1 -1
- package/build/dist/chunks/{O4S6XAYV.js → O7L55XM3.js} +1 -1
- package/build/dist/chunks/{NAO7VWZF.js → OCIEVYPR.js} +1 -1
- package/build/dist/chunks/{4NBXBKOX.js → OD7CY6BY.js} +1 -1
- package/build/dist/chunks/{RUTSEGGD.js → OHZHQSCA.js} +1 -1
- package/build/dist/chunks/{A4K5GXVO.js → ORKXBYVC.js} +1 -1
- package/build/dist/chunks/OUXPOFY2.js +1 -0
- package/build/dist/chunks/{NIWAVMDR.js → OWHXYE2G.js} +1 -1
- package/build/dist/chunks/PD5NXIRT.js +1 -0
- package/build/dist/chunks/{TXGZ6NWN.js → PG7HZIZL.js} +1 -1
- package/build/dist/chunks/PLEJPTTK.js +1 -0
- package/build/dist/chunks/{VREGY7E6.js → PMFR47H3.js} +1 -1
- package/build/dist/chunks/{ZXRIJG6H.js → PX2G2H6G.js} +1 -1
- package/build/dist/chunks/QAAKUIWE.js +1 -0
- package/build/dist/chunks/{YXXK6EPI.js → QBHY2QRC.js} +1 -1
- package/build/dist/chunks/{WQ2XTDHO.js → QCPJZBEO.js} +1 -1
- package/build/dist/chunks/{ELHRXA5U.js → QFK335LC.js} +1 -1
- package/build/dist/chunks/{3PHJUFU2.js → QFUSCK5C.js} +1 -1
- package/build/dist/chunks/QGO4EKXZ.js +1 -0
- package/build/dist/chunks/{IPU656WB.js → QKH7ED6B.js} +1 -1
- package/build/dist/chunks/{XW3VGWXK.js → QMWHQRYC.js} +1 -1
- package/build/dist/chunks/{USGMGKAG.js → QXBQ7WPB.js} +1 -1
- package/build/dist/chunks/{MQXSCNUL.js → R5UOFPDO.js} +1 -1
- package/build/dist/chunks/{MDLJFCT4.js → R5Z4HPCA.js} +1 -1
- package/build/dist/chunks/{A4FLWHLP.js → REXGROOD.js} +1 -1
- package/build/dist/chunks/RKJFSDGV.js +1 -0
- package/build/dist/chunks/RKS3M7L5.js +1 -0
- package/build/dist/chunks/{GDOHHXNH.js → RLX6YTNT.js} +1 -1
- package/build/dist/chunks/{PV7FEVBD.js → RWEA4SWP.js} +1 -1
- package/build/dist/chunks/{ZKBOPZH5.js → RWUF6T4I.js} +1 -1
- package/build/dist/chunks/{USEF3QKG.js → S432S6NA.js} +1 -1
- package/build/dist/chunks/{XTXXWRN2.js → SDDYM2H3.js} +1 -1
- package/build/dist/chunks/{2OVJ2BTJ.js → SEXKWYUM.js} +1 -1
- package/build/dist/chunks/TKJ4GFUP.js +1 -0
- package/build/dist/chunks/{BSX4LFYI.js → TNHU5UBQ.js} +1 -1
- package/build/dist/chunks/{PDPTJMTJ.js → TT2ST3Q3.js} +1 -1
- package/build/dist/chunks/TTBB6EFN.js +1 -0
- package/build/dist/chunks/{OVM4QIET.js → U4MSIH4G.js} +1 -1
- package/build/dist/chunks/{LKUZAJPZ.js → UCMOQAVD.js} +1 -1
- package/build/dist/chunks/{OB3YMTDI.js → UIVOYAO2.js} +1 -1
- package/build/dist/chunks/{3YH5B5NQ.js → UL4DY6GX.js} +1 -1
- package/build/dist/chunks/{XRDLMTBJ.js → UMY6SP7C.js} +1 -1
- package/build/dist/chunks/UNBRUWSV.js +1 -0
- package/build/dist/chunks/{LGLWEGPY.js → UPX3OWKA.js} +1 -1
- package/build/dist/chunks/{MJGEGNDU.js → UYYYSFMQ.js} +1 -1
- package/build/dist/chunks/{4RCYYN6O.js → V7HTGO23.js} +1 -1
- package/build/dist/chunks/{O2QBSINK.js → V7P4PCLL.js} +1 -1
- package/build/dist/chunks/{FRVCSDKU.js → VMSGNN3D.js} +1 -1
- package/build/dist/chunks/VQMBPY2P.js +1 -0
- package/build/dist/chunks/{HZSYMGJ2.js → VS7ZA4OF.js} +1 -1
- package/build/dist/chunks/{BJ2U2VXJ.js → VTWAVH74.js} +1 -1
- package/build/dist/chunks/W3M4KAPX.js +1 -0
- package/build/dist/chunks/{LZM3DO5Q.js → W5GWK72I.js} +1 -1
- package/build/dist/chunks/{65OITTDL.js → W73SLWBT.js} +1 -1
- package/build/dist/chunks/{2FOI2625.js → W7BTXU3F.js} +1 -1
- package/build/dist/chunks/{6LVHN33V.js → WADRRW3E.js} +1 -1
- package/build/dist/chunks/{ZXFJKW6H.js → WG7PMGTJ.js} +1 -1
- package/build/dist/chunks/{N742W5KX.js → WRNPYW47.js} +1 -1
- package/build/dist/chunks/{XL3W7DAQ.js → X3BB6WME.js} +1 -1
- package/build/dist/chunks/{SX5YNFHG.js → XD4JA43O.js} +1 -1
- package/build/dist/chunks/{GBPB7JIB.js → XSQJOOEY.js} +1 -1
- package/build/dist/chunks/{3BQ5XHDJ.js → Y7SKGRWC.js} +1 -1
- package/build/dist/chunks/{R73R4KN3.js → YBLJ2MCR.js} +1 -1
- package/build/dist/chunks/{6CKCZJ3F.js → YDJHXSS7.js} +1 -1
- package/build/dist/chunks/{GKUPC4DO.js → YLU5JVRI.js} +1 -1
- package/build/dist/chunks/YR6Y6UIR.js +1 -0
- package/build/dist/chunks/{FHB7QYJO.js → Z5WRTISY.js} +1 -1
- package/build/dist/chunks/ZB67QDN2.js +1 -0
- package/build/dist/chunks/{O4P5IQCP.js → ZRG34Y7Q.js} +1 -1
- package/build/dist/chunks/ZSGW2ZSO.js +1 -0
- package/build/dist/chunks/{HRAHGYNK.js → ZTNBX4VH.js} +1 -1
- package/package.json +1 -1
- package/build/dist/chunks/5H7NVE6O.js +0 -1
- package/build/dist/chunks/7OOCAZBE.js +0 -1
- package/build/dist/chunks/7TRO6MBQ.js +0 -1
- package/build/dist/chunks/DFM4T6ZE.js +0 -1
- package/build/dist/chunks/FCVH4FYH.js +0 -1
- package/build/dist/chunks/GDUKZYE2.js +0 -1
- package/build/dist/chunks/GYPMUYB5.js +0 -1
- package/build/dist/chunks/J7OZLXSG.js +0 -1
- package/build/dist/chunks/JFC2QCMW.js +0 -1
- package/build/dist/chunks/M267JEDO.js +0 -1
- package/build/dist/chunks/M6JNGU4E.js +0 -1
- package/build/dist/chunks/M7OVMIIE.js +0 -1
- package/build/dist/chunks/MQK6OP7S.js +0 -1
- package/build/dist/chunks/N624NR7Y.js +0 -1
- package/build/dist/chunks/OSMOBKRQ.js +0 -1
- package/build/dist/chunks/Q3Q3YHEX.js +0 -1
- package/build/dist/chunks/QBNASL3T.js +0 -1
- package/build/dist/chunks/QQD4PV64.js +0 -1
- package/build/dist/chunks/RN3WUJIO.js +0 -1
- package/build/dist/chunks/RP5VCG54.js +0 -1
- package/build/dist/chunks/TI727O2H.js +0 -1
- package/build/dist/chunks/UHIJMDD2.js +0 -1
- package/build/dist/chunks/W32UECOL.js +0 -1
- package/build/dist/chunks/WWNAGOCD.js +0 -1
- package/build/dist/chunks/XWC6IC5E.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{e as p,f as s,i as d,j as u,p as P}from"./UMY6SP7C.js";import{a as o}from"./XSD5NL7J.js";import{decodeAbiParameters as R,encodeAbiParameters as x,keccak256 as M,parseAbi as C,stringToHex as $,zeroAddress as f}from"viem";var l={id:"market-hours-fee",supported:!0,contract:"HookrSessionAdvisory",address:"0x78Bc6b7302Dda8632e661c8d74966bdBea1c66b1",source:"src/extensions/HookrSessionAdvisory.sol",advisoryTerms:"regularPips:uint24, preMarketPips:uint24, afterHoursPips:uint24, overnightPips:uint24, closedPips:uint24, openRampSeconds:uint16, closeRampSeconds:uint16, flags:uint8",payment:"Returns an LP fee surcharge.",wiring:"Requires a separate session advisory binding and verified calendar, phase, gas and fee-cap handling."},h=[{type:"tuple",components:[{name:"regularPips",type:"uint24"},{name:"preMarketPips",type:"uint24"},{name:"afterHoursPips",type:"uint24"},{name:"overnightPips",type:"uint24"},{name:"closedPips",type:"uint24"},{name:"openRampSeconds",type:"uint16"},{name:"closeRampSeconds",type:"uint16"},{name:"flags",type:"uint8"}]}];function k(r){p(r,["regularPips","preMarketPips","afterHoursPips","overnightPips","closedPips","openRampSeconds","closeRampSeconds","flags"],["regularPips","preMarketPips","afterHoursPips","overnightPips","closedPips","openRampSeconds","closeRampSeconds","flags"]);let e={regularPips:Number(s(r.regularPips,24)),preMarketPips:Number(s(r.preMarketPips,24)),afterHoursPips:Number(s(r.afterHoursPips,24)),overnightPips:Number(s(r.overnightPips,24)),closedPips:Number(s(r.closedPips,24)),openRampSeconds:Number(s(r.openRampSeconds,16)),closeRampSeconds:Number(s(r.closeRampSeconds,16)),flags:Number(s(r.flags,8))};if(e.flags>1||e.openRampSeconds+e.closeRampSeconds>12600||Math.max(e.regularPips,e.preMarketPips,e.afterHoursPips,e.overnightPips,e.closedPips)>6e5)throw new o("Invalid market-hours-fee advisory terms.");return x(h,[e])}function w(r){let[e]=R(h,r),n=Object.fromEntries(Object.entries(e).map(([a,t])=>[a,String(t)]));if(k(n).toLowerCase()!==r.toLowerCase())throw new o("Non-canonical market-hours-fee advisory terms.");return e}function O(r){let e=w(r);return`Market hours LP surcharge: regular ${e.regularPips}, pre-market ${e.preMarketPips}, after-hours ${e.afterHoursPips}, overnight ${e.overnightPips}, closed ${e.closedPips} pips; open and close ramps ${e.openRampSeconds}/${e.closeRampSeconds} seconds, flags ${e.flags}. Surcharge is an LP fee for in-range LPs, clipped to available pool fee room, including during the launch guard.`}var A={address:l.address,codeHash:"0x0e33fd89175de3909a2a51a4d93c0bd359b17dd9396dd49faeea0d49370d6e18",schemaHash:M($("SessionSchedule(uint24 regularPips,uint24 preMarketPips,uint24 afterHoursPips,uint24 overnightPips,uint24 closedPips,uint16 openRampSeconds,uint16 closeRampSeconds,uint8 flags)")),phaseMask:1,feeOnly:!0,failOpen:!1,gasMin:15e4},N=C(["function owner() view returns (address)","function lastCoveredYear() view returns (uint256)","function pendingOwner() view returns (address)","function delay() view returns (uint48)"]);async function T(r,e,n){p(n,["terms","owner","lastCoveredYear"],["terms","owner","lastCoveredYear"]);let a=d(n.owner);if(a===f)throw new o("Calendar governance owner must be nonzero.");let t=s(n.lastCoveredYear,256),c=k(p(n.terms,["regularPips","preMarketPips","afterHoursPips","overnightPips","closedPips","openRampSeconds","closeRampSeconds","flags"],["regularPips","preMarketPips","afterHoursPips","overnightPips","closedPips","openRampSeconds","closeRampSeconds","flags"])),[v,y,b,S]=await Promise.all(["owner","lastCoveredYear","pendingOwner","delay"].map(H=>P(r,l.address,N,H,[],e)));if(v!==a||u(y)!==t)throw new o("Calendar owner or coverage differs at the named block.");let m=d(b),g=u(S,48);if(m!==f)throw new o(`Market hours fee refused: an ownership transfer to ${m} is pending on advisory ${l.address}. Whoever accepts it controls the calendar that sets this pool's surcharge. Retry after the transfer is accepted or cancelled, naming the owner you then see.`);let i=w(c);return{data:c,summary:`${O(c)} Calendar covers through ${t}; owner ${a} may append years and mark weekdays closed or early-close after a timelock of ${g} seconds. No ownership transfer is pending at the checked block. The owner is not fixed by this launch and can change later; an ownership transfer waits the same timelock and must then be accepted. Outside calendar coverage, the flag controls whether weekdays use the closed surcharge.`,delaySeconds:g,descriptor:A,phases:1,requiredCaps:{maxLpFeePips:BigInt(Math.max(i.regularPips,i.preMarketPips,i.afterHoursPips,i.overnightPips,i.closedPips)),maxQuoteTakePips:0n,maxSubjectTakeBps:0n},owner:a,lastCoveredYear:t}}export{l as a,k as b,w as c,O as d,A as e,N as f,T as g};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e}from"./XSD5NL7J.js";var c={tickSpacing:200,baseLpFeePips:3e3,deadlineSeconds:300n};function d(o){return o?"Arb recapture: ON, 25% to a closed source executor, 15% Hookr, 60% LPs; swaps need a high gas limit; cannot be changed. Oak read the executor share (25%) on chain; the 15% Hookr and 60% LP shares are Hookr's published split, not read by Oak":"Arb recapture: OFF, cannot be added later"}var h=1<<18,i=["market-guard","market-hours-fee","managed-fee","zap-source","zap-target","swap-reward-mint"];function u(o,r,a){let n=o===void 0?"agents-only":o;if(n!=="agents-only"&&n!=="open")throw new e("Choose launchProfile agents-only or open.");let t=a.filter(s=>i.includes(s.id));if(t.length>1)throw new e("A Hookr pool has one advisory slot. Choose exactly one advisory Hook Block.");if(n==="agents-only"){if(t.length)throw new e("The agent gate and an advisory Hook Block both need the one advisory slot. Choose launchProfile open and omit agentGate to use this block.");if(r==null)throw new e("An agents-only launch requires explicit agentGate terms.")}else{if(r!==void 0)throw new e("An open launch uses its advisory Hook Block instead of the agent gate. Omit agentGate.");if(t.length!==1)throw new e("Choose exactly one advisory Hook Block for an open launch.")}return{kind:n,advisory:t[0]??null}}export{c as a,d as b,h as c,i as d,u as e};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as o,d as y,e as m}from"./
|
|
1
|
+
import{a as o,d as y,e as m}from"./BWE5PXRE.js";import{a as l}from"./66F5ZH34.js";import{b as c}from"./EWZFZUVF.js";import{a as d}from"./XSD5NL7J.js";import{concatHex as x,encodeAbiParameters as P,encodeFunctionData as w,getAddress as u,keccak256 as f,parseAbi as k,stringToHex as I}from"viem";var g=k(["function ownerOf(uint256) view returns (address)","function tokenURI(uint256) view returns (string)","function setMetadata(uint256,string,bytes)","function approve(address,uint256)"]),v=k(["function listingOf(uint256) view returns ((address seller,uint256 price,uint64 expiry,uint256 nonce,bytes32 uriHash,uint256 loansRepaid))","function recordHash(uint256) view returns (bytes32)"]),C=(t,r)=>f(x(BigInt(t)<BigInt(r)?[t,r]:[r,t]));function _(t){if(!Array.isArray(t)||t.length<1||t.length>1e4)throw new d("Provide 1 to 10000 identity IDs.");let r=[...new Set(t.map(e=>m(e,"agentIds").toString()))].sort((e,a)=>BigInt(e)<BigInt(a)?-1:1),i=[r.map(e=>f(f(P([{type:"uint256"}],[BigInt(e)]))))];for(;i.at(-1).length>1;){let e=i.at(-1),a=[];for(let s=0;s<e.length;s+=2)a.push(e[s+1]?C(e[s],e[s+1]):e[s]);i.push(a)}return{root:i.at(-1)[0],ids:r,proofs:r.map((e,a)=>{let s=[],p=a;for(let b of i.slice(0,-1)){let h=b[p^1];h&&s.push(h),p=Math.floor(p/2)}return{agentId:e,proof:s}})}}function S(t){return{tools:[{name:"priors_market_origin",inputSchema:{type:"object",properties:{agentIds:{type:"array",minItems:1,maxItems:1e4,items:l(),description:"Exact ERC-8004 agent ID list (decimal strings, 1 to 10000) to commit in a bid_any Merkle root."}},required:["agentIds"],additionalProperties:!1},async execute(r){return{chainId:c,..._(r.agentIds),caveat:"Locally commits exactly these IDs. This does not verify third-party origin, quality, current owner or a seller claim."}}},{name:"priors_market_pins",inputSchema:{type:"object",properties:{agentId:l('ERC-8004 agent ID whose listing pins to read, as a decimal string. Example: "437".')},required:["agentId"],additionalProperties:!1},async execute(r){if(t.network==="testnet")throw new d("Priors market requires mainnet chain 4663.");let n=m(r.agentId,"agentId"),i=t.clientFor(c),e=await i.getBlockNumber({cacheTime:0}),[a,s,p]=await Promise.all([i.readContract({address:o.market,abi:v,functionName:"listingOf",args:[n],blockNumber:e}),i.readContract({address:o.market,abi:v,functionName:"recordHash",args:[n],blockNumber:e}),i.readContract({address:o.registry,abi:g,functionName:"tokenURI",args:[n],blockNumber:e})]);return{chainId:c,blockNumber:e.toString(),listing:y(a),recordHash:s,currentUriHash:f(I(p)),caveat:"Pins bind identity file and credit state, not included code, servers or keys. Listing and current URI hashes may differ; preview refuses an altered listing."}}},{name:"priors_market_clear_bid_budget",inputSchema:{type:"object",properties:{},additionalProperties:!1},async execute(r,n){if(t.network==="testnet")throw new d("Priors market requires mainnet chain 4663.");let i=[t.approval(o.usdg,o.bidSpender,"0",c)],e=await t.preview(i,u(n));return{txs:i,summary:`Clear all this wallet future bid spending allowance to ${o.bidSpender}. Existing bids cannot fill from it until approved again. ${e.summary}`}}},{name:"priors_market_revoke_nft",inputSchema:{type:"object",properties:{agentId:l('ERC-8004 agent ID whose single-NFT market approval to clear, as a decimal string. Example: "437".')},required:["agentId"],additionalProperties:!1},async execute(r,n){let i=m(r.agentId,"agentId");if(t.network==="testnet")throw new d("Priors market requires mainnet chain 4663.");if(u(await t.clientFor(c).readContract({address:o.registry,abi:g,functionName:"ownerOf",args:[i]}))!==u(n))throw new d("Only current NFT owner may revoke this per-token approval.");let e=[t.unsignedTx({to:o.registry,data:w({abi:g,functionName:"approve",args:["0x0000000000000000000000000000000000000000",i]}),value:"0",chainId:c,description:`Revoke exact ERC-8004 NFT ${i} market approval.`})],a=await t.preview(e,n);return{txs:e,summary:`Clear this identity per-token transfer approval. Also cancel its listing before granting any new market approval. ${a.summary}`}}},{name:"priors_x_link",inputSchema:{type:"object",properties:{agentId:l('ERC-8004 agent ID this wallet owns, as a decimal string. Example: "437".'),postUrl:{type:"string",maxLength:160,description:"Canonical https://x.com/<handle>/status/<id> owner proof post URL, or empty to unlink. Owner creates the public post themselves."}},required:["agentId","postUrl"],additionalProperties:!1},async execute(r,n){if(t.network==="testnet")throw new d("Priors X metadata is mainnet only.");let i=m(r.agentId,"agentId");if(u(await t.clientFor(c).readContract({address:o.registry,abi:g,functionName:"ownerOf",args:[i]}))!==u(n))throw new d("Only the identity owner can link or clear X metadata.");if(typeof r.postUrl!="string"||r.postUrl!==""&&!/^https:\/\/x\.com\/[A-Za-z0-9_]{1,15}\/status\/[0-9]{1,30}$/.test(r.postUrl))throw new d("Provide a canonical X status URL or empty string to unlink.");let e=[t.unsignedTx({to:o.registry,data:w({abi:g,functionName:"setMetadata",args:[i,"x",I(r.postUrl)]}),value:"0",chainId:c,description:"Set/clear the owner identity X proof-post metadata."})],a=await t.preview(e,n);return{txs:e,summary:`Publish ${r.postUrl?"the specified X post URL":"empty X metadata"} on public ERC-8004 identity ${i}. Priors independently verifies the post; metadata alone does not prove the X account or affect credit terms. ${a.summary}`}}}]}}export{_ as a,S as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as W}from"./N624NR7Y.js";import{c as K}from"./SCG5HWMN.js";import{a as N}from"./WWYAAIE2.js";import{g as S}from"./NWNYJ26T.js";import{a as j,b as M,c as O}from"./IX3GZMTM.js";import{b as q,j as z}from"./TI727O2H.js";import{a}from"./XSD5NL7J.js";import{a as $}from"./JXOEJPJ4.js";import{encodeAbiParameters as ce,encodeFunctionData as J,erc20Abi as V,getAddress as Z,isAddress as me,keccak256 as X,parseAbi as ue,parseAbiParameters as ye,zeroAddress as ee}from"viem";var x=q,C=Z(z[x].hoodlock.airdrop.address),oe="https://hoodlock.tech",P=25e4,ge=256,fe=604800n,pe=30n,Q=250000000000000000n,Y=0xffffffffn,be=(1n<<64n)-1n,ne=(1n<<128n)-1n,re="0x0000000000000000000000000000000000000000000000000000000000000000",xe="0x1111111111111111111111111111111111111111",Ae=ye("uint256, address, uint256"),T=ue(["function quote(uint32 maxClaims) view returns (uint256)","function create(address token, bytes32 merkleRoot, uint256 total, uint32 maxClaims, uint64 endTime, string uri) payable returns (uint256 id)","function claim(uint256 id, uint256 index, address account, uint256 amount, bytes32[] proof)","function getAirdrop(uint256 id) view returns (address creator, uint64 endTime, uint32 maxClaims, address token, uint32 claims, bool swept, bytes32 merkleRoot, uint128 total, uint128 remaining)","function isClaimed(uint256 id, uint256 index) view returns (bool)"]);function he(o,e,r){let n=e.trim();if(n.startsWith("-")){let t=n.slice(1);return`-${o.formatAmount(t,r)}`}let d=n.startsWith("+")?n.slice(1):n;return o.formatAmount(d,r)}function te(o,e){if(!e.changes.length)return e.summary;let r=e.changes.map(n=>`${he(o,n.amount,n.token.decimals)} ${$(n.token.symbol)}`).join(", ");return`${e.summary} (${r})`}async function we(o,e){try{let[r,n]=await Promise.all([o.readContract({address:e,abi:V,functionName:"symbol"}),o.readContract({address:e,abi:V,functionName:"decimals"})]),d=typeof r=="string"&&r.trim()?r.trim():"TOKEN",t=Number(n);return{symbol:d,decimals:Number.isInteger(t)&&t>=0&&t<=255?t:18}}catch{return{symbol:"TOKEN",decimals:18}}}function w(o,e,r){if(typeof e=="string"&&e.includes(".")){if(r?.decimals===void 0)throw new a(`Decimal string amount "${e}" requires explicit token decimals; amount inputs are base-unit integer strings by default.`);let d=r.rounding!==void 0?O(e,r.decimals,r.rounding):o?o.parseAmount(e,r.decimals):O(e,r.decimals),t=M(d);if(t<=0n)throw new a("Airdrop entry amount must be positive.");return t}let n;try{if(typeof e=="bigint")n=e;else if(typeof e=="string")n=M(e.trim());else throw j()}catch(d){throw d instanceof a?d:new a(`Invalid airdrop amount "${String(e)}".`,{cause:d})}if(n<=0n)throw new a("Airdrop entry amount must be strictly positive (> 0).");return n}function H(o,e){try{let r=typeof o=="bigint"?o:BigInt(String(o).trim());if(r<0n)throw new a(`${e} must be non-negative.`);return r}catch(r){throw r instanceof a?r:new a(`Invalid ${e}: ${String(o)}`,{cause:r})}}function A(o,e){if(typeof o!="string"||!me(o,{strict:!1}))throw new a(`Invalid ${e} address "${String(o)}": token/account must be a valid EVM address, never a symbol.`);return Z(o)}function L(o,e,r){let n=typeof o=="bigint"?o:BigInt(o);if(n<0n||n>Y)throw new a(`Airdrop leaf index must be in 0..${Y.toString()}.`);let d=A(e,"account"),t=w(void 0,r),s=ce(Ae,[n,d,t]);return X(X(s))}function ie(o,e){let r=o;for(let n of e)r=N(r,n);return r}function Ne(o){try{let e=L(o.index,o.account,o.amount),r=ie(e,o.proof);return S(r,o.root)}catch{return!1}}function U(o,e){if(!Array.isArray(o)||o.length===0)throw new a("Airdrop entries list cannot be empty; maxClaims must be in 1..250000.");if(o.length>P)throw new a(`Airdrop entries length (${o.length}) exceeds maxClaims limit of ${P}.`);let r=[],n=0n;for(let i=0;i<o.length;i+=1){let l=o[i];if(!l)throw new a(`Missing airdrop entry at position ${i}.`);let c=l.index??i;if(!Number.isInteger(c)||c!==i)throw new a(`Airdrop entry index at position ${i} must be contiguous ${i} (got ${String(c)}).`);let u=A(l.account,`entries[${i}].account`),g=w(e?.context,l.amount,e);n+=g,r.push({index:c,account:u,amount:g.toString()})}if(n<=0n||n>ne)throw new a("Airdrop total amount must be > 0 and fit in uint128.");let d=r.map(i=>L(i.index,i.account,i.amount)),t=[d];for(;t[t.length-1].length>1;){let i=t[t.length-1],l=[];for(let c=0;c<i.length;c+=2){let u=i[c],g=i[c+1];g===void 0?l.push(u):l.push(N(u,g))}t.push(l)}let s=t[t.length-1][0];if(s.toLowerCase()===re)throw new a("Computed Merkle root cannot be zero.");let f=t.length>1?t[1]:t[0],m=r.map((i,l)=>{let c=[],u=l;for(let g=0;g<t.length-1;g+=1){let y=t[g],b=u^1;b<y.length&&c.push(y[b]),u=Math.floor(u/2)}return{index:i.index,account:i.account,amount:i.amount,leaf:d[l],proof:c}}),p={format:"openzeppelin-standard-merkle-tree-v1",leafEncoding:["uint256","address","uint256"],root:s,totalAmount:n.toString(),maxClaims:r.length,values:r.map(i=>[i.index,i.account,i.amount]),entries:r};return{root:s,leaves:d,level1:f,totalAmount:n.toString(),maxClaims:r.length,entries:r,proofs:m,list:p}}function ke(o){if(!o||!Array.isArray(o.entries)&&!Array.isArray(o.values))throw new a("Saved airdrop list is missing entries/values.");let e=Array.isArray(o.entries)&&o.entries.length>0?o.entries:o.values.map(([n,d,t])=>({index:n,account:d,amount:t})),r=U(e);if(o.root&&!S(r.root,o.root))throw new a(`Rebuilt tree root ${r.root} does not match saved list root ${o.root}.`);if(o.maxClaims!==void 0&&r.maxClaims!==o.maxClaims)throw new a(`Rebuilt maxClaims (${r.maxClaims}) does not match saved list maxClaims (${o.maxClaims}).`);if(o.totalAmount!==void 0&&r.totalAmount!==o.totalAmount)throw new a(`Rebuilt totalAmount (${r.totalAmount}) does not match saved list totalAmount (${o.totalAmount}).`);return r}async function ae(o,e){return K(o.http,e,{method:"GET"},r=>r!==null&&typeof r=="object")}async function $e(o,e,r){let n=A(e.token,"token");if(n===ee)throw new a("Airdrop token cannot be the zero address.");let d=U(e.entries,{decimals:e.decimals,rounding:e.rounding,context:o}),t=e.maxClaims??d.maxClaims;if(!Number.isInteger(t)||t<1||t>P||t!==d.maxClaims)throw new a(`maxClaims (${String(t)}) must equal entries.length (${d.maxClaims}) and be in 1..${P}.`);let s=BigInt(d.totalAmount),f=e.total!==void 0?w(o,e.total,{decimals:e.decimals,rounding:e.rounding}):s;if(f<s)throw new a(`Airdrop total (${f.toString()}) is less than the sum of entry amounts (${s.toString()}).`);if(f<=0n||f>ne)throw new a("Airdrop total must be positive and fit in uint128.");let m=e.uri??"",p=new TextEncoder().encode(m).byteLength;if(p>ge)throw new a(`Airdrop URI length (${p} bytes) exceeds 256-byte limit.`);let i=e.endTime!==void 0?H(e.endTime,"endTime"):0n;if(i>be)throw new a("endTime exceeds uint64 maximum.");let l=o.clientFor(x),c=await l.getCode({address:n});if(!c||c==="0x")throw new a(`Token ${n} has no contract code on chain ${x}.`);let u;if(i!==0n){let _=(await l.getBlock()).timestamp,B=e.inclusionMargin!==void 0?H(e.inclusionMargin,"inclusionMargin"):pe;if(B<=0n)throw new a("inclusionMargin must be at least 1 second to leave room for signing and inclusion after the already-mined block.");let D=_+B,I=e.inclusionTime!==void 0?H(e.inclusionTime,"inclusionTime"):D;if(I<D)throw new a(`inclusionTime (${I.toString()}) must be after the already-mined block (${_.toString()}) with room for signing and inclusion (>= ${D.toString()}).`);u=I;let F=I+fe;if(i<F)throw new a(`endTime (${i.toString()}) is too short (window too short): must be 0 or at least inclusion time (${I.toString()}) + 604800 (7 days >= ${F.toString()}, after already-mined block.timestamp ${_.toString()}).`)}let g=await l.readContract({address:C,abi:T,functionName:"quote",args:[t]}),y=typeof g=="bigint"?g:BigInt(String(g));if(y<0n||y>Q)throw new a(`HoodLock quote(uint32) fee (${y.toString()}) exceeds max fee cap (${Q.toString()}).`);let b=o.formatAmount(y.toString(),W.decimals),h=o.approval(n,C,f.toString(),x),k=o.unsignedTx({chainId:x,to:C,data:J({abi:T,functionName:"create",args:[n,d.root,f,t,i,m]}),value:y.toString(),description:`Create HoodLock airdrop (${t} claims, total ${f.toString()}, quote fee ${b} ETH (${y.toString()} wei))`}),v=[h,k],E=A(e.account??r??xe,"wallet"),R=await o.preview(v,E),le=y>0n?` Quote fee: -${b} ETH (${b} ETH / ${y.toString()} wei).`:" Quote fee: 0 ETH (0 wei).",se=`${te(o,R)}${le}`;return{kind:"hoodlock_airdrop_create",chainId:x,token:n,merkleRoot:d.root,totalAmount:d.totalAmount,total:f.toString(),maxClaims:t,endTime:i,...u!==void 0?{inclusionTime:u}:{},uri:m,quoteFee:y,list:d.list,proofs:d.proofs,txs:v,preview:R,summary:se}}async function G(o,e,r,n){if(n.savedProof){let m=A(n.savedProof.account,"savedProof.account");if(m!==r)throw new a(`savedProof account (${m}) does not match claim account (${r}).`);return{index:n.savedProof.index,amount:w(o,n.savedProof.amount),proof:n.savedProof.proof}}if(n.proof!==void 0&&n.index!==void 0&&n.amount!==void 0){let m=Number(n.index);if(!Number.isInteger(m)||m<0)throw new a(`Invalid claim index: ${String(n.index)}`);return{index:m,amount:w(o,n.amount),proof:n.proof}}if(n.list||n.entries){let p=(n.list?ke(n.list):U(n.entries,{context:o})).proofs.find(i=>!(!S(i.account,r)||n.index!==void 0&&i.index!==Number(n.index)));if(!p)throw new a(`Account ${r} was not found in the saved airdrop list.`);return{index:p.index,amount:w(o,p.amount),proof:p.proof}}let d=`${oe}/api/airdrop/${e.toString()}/proof?address=${r}`,t=await ae(o,d),s=t?.data??t;if(!s||s.index===void 0||s.amount===void 0||!Array.isArray(s.proof))throw new a(`No valid proof returned from HoodLock API for airdrop ${e.toString()} and account ${r}.`);let f=Number(s.index);if(!Number.isInteger(f)||f<0)throw new a(`Invalid index in API proof: ${String(s.index)}`);return{index:f,amount:w(o,s.amount),proof:s.proof}}async function de(o,e){let r=o.clientFor(x),n=await r.readContract({address:C,abi:T,functionName:"getAirdrop",args:[e.id]}),[d,t,s,f,m,p,i,,l]=n,c=BigInt(t),u=Number(s),g=Number(m),y=BigInt(l),b=A(f,"airdrop.token");if(d===ee||i.toLowerCase()===re)throw new a(`Airdrop ${e.id.toString()} does not exist.`);if(p)throw new a(`Airdrop ${e.id.toString()} has already been swept.`);if(c>0n&&(await r.getBlock()).timestamp>=c)throw new a(`Airdrop ${e.id.toString()} expired at timestamp ${c.toString()}.`);if(g>=u)throw new a(`Airdrop ${e.id.toString()} has reached maxClaims (${u}).`);let[h,k]=await Promise.all([r.readContract({address:C,abi:T,functionName:"isClaimed",args:[e.id,BigInt(e.index)]}),we(r,b)]);if(h)throw new a(`Airdrop ${e.id.toString()} index ${e.index} has already been claimed.`);if(y<e.amount)throw new a(`Airdrop ${e.id.toString()} remaining balance (${y.toString()}) is less than claim amount (${e.amount.toString()}).`);let v=L(e.index,e.account,e.amount),E=ie(v,e.proof);if(!S(E,i))throw new a(`Computed Merkle root ${E} does not match on-chain airdrop root ${i} (bad proof).`);return{tokenAddress:b,tokenMeta:k,merkleRoot:i,leaf:v}}async function Se(o,e){let{tokenAddress:r,tokenMeta:n,merkleRoot:d,leaf:t}=await de(o,e),s=e.caller??e.account,f=!S(s,e.account),m=o.formatAmount(e.amount.toString(),n.decimals),p=o.unsignedTx({chainId:x,to:C,data:J({abi:T,functionName:"claim",args:[e.id,BigInt(e.index),e.account,e.amount,[...e.proof]]}),value:"0",description:f?`Claim ${m} ${$(n.symbol)} (${e.amount.toString()} base units) from HoodLock airdrop #${e.id.toString()} for recipient ${e.account} (caller ${s} pays gas only, token delta 0)`:`Claim ${m} ${$(n.symbol)} (${e.amount.toString()} base units) from HoodLock airdrop #${e.id.toString()} for ${e.account}`}),i=[p],l=await o.preview(i,s),c,u,g=e.amount.toString(),y;if(f){let b=l.changes.filter(h=>h.amount.trim().startsWith("-"));c={...l,changes:b,summary:`${l.summary} Recipient ${e.account} receives ${m} ${$(n.symbol)} (${e.amount.toString()} base units); caller ${s} change is 0 (gas only).`},u=`Third-party claim from HoodLock airdrop #${e.id.toString()} (index ${e.index}): recipient ${e.account} receives ${m} ${$(n.symbol)} (${e.amount.toString()} base units of ${r}); caller ${s} own token change is 0 (gas only). ${l.summary}`,y="0"}else c=l,u=`Claim ${m} ${$(n.symbol)} (${e.amount.toString()} base units of ${r}) from HoodLock airdrop #${e.id.toString()} (index ${e.index}) for recipient ${e.account}. ${te(o,c)}`,y=e.amount.toString();return{kind:"hoodlock_airdrop_claim",chainId:x,id:e.id,index:e.index,account:e.account,recipient:e.account,caller:e.caller,token:r,amount:e.amount.toString(),recipientDelta:g,senderDelta:y,leaf:t,merkleRoot:d,proof:[...e.proof],tx:p,txs:i,preview:c,summary:u}}async function Ce(o,e,r){let n=A(e.account??r??"","account"),d=e.caller!==void 0?A(e.caller,"caller"):r!==void 0?A(r,"wallet"):void 0;if(e.id!==void 0){let l=H(e.id,"id"),c=await G(o,l,n,e);return Se(o,{id:l,index:c.index,account:n,caller:d,amount:c.amount,proof:c.proof})}let t=`${oe}/api/airdrop/eligible?address=${n}`,s=await ae(o,t),f=Array.isArray(s)?s:s?.claimable??s?.eligible??s?.airdrops??s?.claims??[],m=[];for(let l of f){let c=l.id??l.airdropId;if(c!==void 0)try{let u=H(c,"eligible.id"),g,y,b;if(l.index!==void 0&&l.amount!==void 0&&Array.isArray(l.proof))g=Number(l.index),y=w(o,l.amount),b=l.proof;else{let k=await G(o,u,n,{id:u,account:n});g=k.index,y=k.amount,b=k.proof}let h=await de(o,{id:u,index:g,account:n,amount:y,proof:b});m.push({id:u.toString(),index:g,account:n,token:h.tokenAddress,amount:y.toString(),proof:[...b],merkleRoot:h.merkleRoot})}catch{continue}}let p=m.length===0?`No verified eligible HoodLock airdrops were returned by the index for ${n}. Discovery can lag after creation; this does not prove there are no claims. If you know the airdrop id, call hoodlock_airdrop_claim with id and account to resolve its list/proof and verify it on-chain.`:`Found ${m.length} eligible HoodLock airdrop(s) for ${n}: ${m.map(l=>`#${l.id}`).join(", ")}. Discovery can lag after creation. Choose an id, or pass a known new id, to hoodlock_airdrop_claim to verify and build a claim transaction.`;return{kind:"hoodlock_airdrop_eligible",chainId:x,account:n,recipient:n,caller:d,recipientDelta:"0",senderDelta:"0",eligible:m,claims:[],tx:void 0,txs:[],preview:{txs:[],changes:[],summary:p},summary:p}}var ve=o=>({tools:[{name:"hoodlock_airdrop_create",inputSchema:{type:"object",required:["token","entries"],additionalProperties:!1,properties:{token:{type:"string",description:"ERC-20 token contract address on chain 4663"},entries:{type:"array",description:"Ordered airdrop entries [{ index?, account, amount }] with base-unit integer string amounts"},total:{type:"string",description:"Optional total funded token amount as a base-unit integer string (>= sum of entries)"},maxClaims:{type:"number",description:"Optional claim count (must equal entries.length in 1..250000)"},endTime:{type:"number",description:"Unix timestamp in seconds (0 for non-sweepable or >= inclusion time + 604800)"},inclusionTime:{type:"number",description:"Optional expected transaction inclusion Unix timestamp in seconds (> already-mined block.timestamp)"},inclusionMargin:{type:"number",description:"Optional signing and inclusion margin in seconds above the already-mined block.timestamp (>= 1, default 30)"},uri:{type:"string",description:"Metadata URI (<= 256 UTF-8 bytes)"},decimals:{type:"number",description:"Optional token decimals when converting human decimal entry amounts via parseAmount"},rounding:{type:"string",enum:["floor","ceil"],description:"Optional rounding mode (floor or ceil) when converting decimal amounts"},account:{type:"string",description:"Optional creator wallet address for preview simulation"}}},execute:async(e,r)=>$e(o,e,r)},{name:"hoodlock_airdrop_claim",inputSchema:{type:"object",required:["account"],additionalProperties:!1,properties:{id:{type:"string",description:"Optional airdrop ID (omit to query eligible airdrops)"},account:{type:"string",description:"Leaf recipient address that receives the tokens"},caller:{type:"string",description:"Optional caller/relayer address submitting the tx (pays gas only, receives 0 tokens)"},index:{type:"number",description:"Optional leaf index when supplying proof directly or selecting from list/entries"},amount:{type:"string",description:"Optional leaf amount as a base-unit integer string"},proof:{type:"array",items:{type:"string"},description:"Optional Merkle sibling proof array of 32-byte hex strings"},savedProof:{type:"object",description:"Optional saved proof item ({ index, account, amount, leaf?, proof }) from hoodlock_airdrop_create"},list:{type:"object",description:"Optional saved airdrop list ({ format, leafEncoding, root, totalAmount, maxClaims, values, entries }) to rebuild proof locally"},entries:{type:"array",description:"Optional airdrop entries array ([{ index?, account, amount }]) to rebuild proof locally"}}},execute:async(e,r)=>Ce(o,e,r)}]}),Le=ve;export{V as a,x as b,C as c,oe as d,P as e,ge as f,fe as g,pe as h,Q as i,T as j,he as k,L as l,ie as m,Ne as n,U as o,ke as p,ve as q,Le as r};
|
|
1
|
+
import{b as W}from"./GV6FZ6UG.js";import{c as K}from"./SCG5HWMN.js";import{a as N}from"./WWYAAIE2.js";import{g as S}from"./NWNYJ26T.js";import{a as j,b as M,c as O}from"./IX3GZMTM.js";import{b as q,j as z}from"./EWZFZUVF.js";import{a}from"./XSD5NL7J.js";import{a as $}from"./JXOEJPJ4.js";import{encodeAbiParameters as ce,encodeFunctionData as J,erc20Abi as V,getAddress as Z,isAddress as me,keccak256 as X,parseAbi as ue,parseAbiParameters as ye,zeroAddress as ee}from"viem";var x=q,C=Z(z[x].hoodlock.airdrop.address),oe="https://hoodlock.tech",P=25e4,ge=256,fe=604800n,pe=30n,Q=250000000000000000n,Y=0xffffffffn,be=(1n<<64n)-1n,ne=(1n<<128n)-1n,re="0x0000000000000000000000000000000000000000000000000000000000000000",xe="0x1111111111111111111111111111111111111111",Ae=ye("uint256, address, uint256"),T=ue(["function quote(uint32 maxClaims) view returns (uint256)","function create(address token, bytes32 merkleRoot, uint256 total, uint32 maxClaims, uint64 endTime, string uri) payable returns (uint256 id)","function claim(uint256 id, uint256 index, address account, uint256 amount, bytes32[] proof)","function getAirdrop(uint256 id) view returns (address creator, uint64 endTime, uint32 maxClaims, address token, uint32 claims, bool swept, bytes32 merkleRoot, uint128 total, uint128 remaining)","function isClaimed(uint256 id, uint256 index) view returns (bool)"]);function he(o,e,r){let n=e.trim();if(n.startsWith("-")){let t=n.slice(1);return`-${o.formatAmount(t,r)}`}let d=n.startsWith("+")?n.slice(1):n;return o.formatAmount(d,r)}function te(o,e){if(!e.changes.length)return e.summary;let r=e.changes.map(n=>`${he(o,n.amount,n.token.decimals)} ${$(n.token.symbol)}`).join(", ");return`${e.summary} (${r})`}async function we(o,e){try{let[r,n]=await Promise.all([o.readContract({address:e,abi:V,functionName:"symbol"}),o.readContract({address:e,abi:V,functionName:"decimals"})]),d=typeof r=="string"&&r.trim()?r.trim():"TOKEN",t=Number(n);return{symbol:d,decimals:Number.isInteger(t)&&t>=0&&t<=255?t:18}}catch{return{symbol:"TOKEN",decimals:18}}}function w(o,e,r){if(typeof e=="string"&&e.includes(".")){if(r?.decimals===void 0)throw new a(`Decimal string amount "${e}" requires explicit token decimals; amount inputs are base-unit integer strings by default.`);let d=r.rounding!==void 0?O(e,r.decimals,r.rounding):o?o.parseAmount(e,r.decimals):O(e,r.decimals),t=M(d);if(t<=0n)throw new a("Airdrop entry amount must be positive.");return t}let n;try{if(typeof e=="bigint")n=e;else if(typeof e=="string")n=M(e.trim());else throw j()}catch(d){throw d instanceof a?d:new a(`Invalid airdrop amount "${String(e)}".`,{cause:d})}if(n<=0n)throw new a("Airdrop entry amount must be strictly positive (> 0).");return n}function H(o,e){try{let r=typeof o=="bigint"?o:BigInt(String(o).trim());if(r<0n)throw new a(`${e} must be non-negative.`);return r}catch(r){throw r instanceof a?r:new a(`Invalid ${e}: ${String(o)}`,{cause:r})}}function A(o,e){if(typeof o!="string"||!me(o,{strict:!1}))throw new a(`Invalid ${e} address "${String(o)}": token/account must be a valid EVM address, never a symbol.`);return Z(o)}function L(o,e,r){let n=typeof o=="bigint"?o:BigInt(o);if(n<0n||n>Y)throw new a(`Airdrop leaf index must be in 0..${Y.toString()}.`);let d=A(e,"account"),t=w(void 0,r),s=ce(Ae,[n,d,t]);return X(X(s))}function ie(o,e){let r=o;for(let n of e)r=N(r,n);return r}function Ne(o){try{let e=L(o.index,o.account,o.amount),r=ie(e,o.proof);return S(r,o.root)}catch{return!1}}function U(o,e){if(!Array.isArray(o)||o.length===0)throw new a("Airdrop entries list cannot be empty; maxClaims must be in 1..250000.");if(o.length>P)throw new a(`Airdrop entries length (${o.length}) exceeds maxClaims limit of ${P}.`);let r=[],n=0n;for(let i=0;i<o.length;i+=1){let l=o[i];if(!l)throw new a(`Missing airdrop entry at position ${i}.`);let c=l.index??i;if(!Number.isInteger(c)||c!==i)throw new a(`Airdrop entry index at position ${i} must be contiguous ${i} (got ${String(c)}).`);let u=A(l.account,`entries[${i}].account`),g=w(e?.context,l.amount,e);n+=g,r.push({index:c,account:u,amount:g.toString()})}if(n<=0n||n>ne)throw new a("Airdrop total amount must be > 0 and fit in uint128.");let d=r.map(i=>L(i.index,i.account,i.amount)),t=[d];for(;t[t.length-1].length>1;){let i=t[t.length-1],l=[];for(let c=0;c<i.length;c+=2){let u=i[c],g=i[c+1];g===void 0?l.push(u):l.push(N(u,g))}t.push(l)}let s=t[t.length-1][0];if(s.toLowerCase()===re)throw new a("Computed Merkle root cannot be zero.");let f=t.length>1?t[1]:t[0],m=r.map((i,l)=>{let c=[],u=l;for(let g=0;g<t.length-1;g+=1){let y=t[g],b=u^1;b<y.length&&c.push(y[b]),u=Math.floor(u/2)}return{index:i.index,account:i.account,amount:i.amount,leaf:d[l],proof:c}}),p={format:"openzeppelin-standard-merkle-tree-v1",leafEncoding:["uint256","address","uint256"],root:s,totalAmount:n.toString(),maxClaims:r.length,values:r.map(i=>[i.index,i.account,i.amount]),entries:r};return{root:s,leaves:d,level1:f,totalAmount:n.toString(),maxClaims:r.length,entries:r,proofs:m,list:p}}function ke(o){if(!o||!Array.isArray(o.entries)&&!Array.isArray(o.values))throw new a("Saved airdrop list is missing entries/values.");let e=Array.isArray(o.entries)&&o.entries.length>0?o.entries:o.values.map(([n,d,t])=>({index:n,account:d,amount:t})),r=U(e);if(o.root&&!S(r.root,o.root))throw new a(`Rebuilt tree root ${r.root} does not match saved list root ${o.root}.`);if(o.maxClaims!==void 0&&r.maxClaims!==o.maxClaims)throw new a(`Rebuilt maxClaims (${r.maxClaims}) does not match saved list maxClaims (${o.maxClaims}).`);if(o.totalAmount!==void 0&&r.totalAmount!==o.totalAmount)throw new a(`Rebuilt totalAmount (${r.totalAmount}) does not match saved list totalAmount (${o.totalAmount}).`);return r}async function ae(o,e){return K(o.http,e,{method:"GET"},r=>r!==null&&typeof r=="object")}async function $e(o,e,r){let n=A(e.token,"token");if(n===ee)throw new a("Airdrop token cannot be the zero address.");let d=U(e.entries,{decimals:e.decimals,rounding:e.rounding,context:o}),t=e.maxClaims??d.maxClaims;if(!Number.isInteger(t)||t<1||t>P||t!==d.maxClaims)throw new a(`maxClaims (${String(t)}) must equal entries.length (${d.maxClaims}) and be in 1..${P}.`);let s=BigInt(d.totalAmount),f=e.total!==void 0?w(o,e.total,{decimals:e.decimals,rounding:e.rounding}):s;if(f<s)throw new a(`Airdrop total (${f.toString()}) is less than the sum of entry amounts (${s.toString()}).`);if(f<=0n||f>ne)throw new a("Airdrop total must be positive and fit in uint128.");let m=e.uri??"",p=new TextEncoder().encode(m).byteLength;if(p>ge)throw new a(`Airdrop URI length (${p} bytes) exceeds 256-byte limit.`);let i=e.endTime!==void 0?H(e.endTime,"endTime"):0n;if(i>be)throw new a("endTime exceeds uint64 maximum.");let l=o.clientFor(x),c=await l.getCode({address:n});if(!c||c==="0x")throw new a(`Token ${n} has no contract code on chain ${x}.`);let u;if(i!==0n){let _=(await l.getBlock()).timestamp,B=e.inclusionMargin!==void 0?H(e.inclusionMargin,"inclusionMargin"):pe;if(B<=0n)throw new a("inclusionMargin must be at least 1 second to leave room for signing and inclusion after the already-mined block.");let D=_+B,I=e.inclusionTime!==void 0?H(e.inclusionTime,"inclusionTime"):D;if(I<D)throw new a(`inclusionTime (${I.toString()}) must be after the already-mined block (${_.toString()}) with room for signing and inclusion (>= ${D.toString()}).`);u=I;let F=I+fe;if(i<F)throw new a(`endTime (${i.toString()}) is too short (window too short): must be 0 or at least inclusion time (${I.toString()}) + 604800 (7 days >= ${F.toString()}, after already-mined block.timestamp ${_.toString()}).`)}let g=await l.readContract({address:C,abi:T,functionName:"quote",args:[t]}),y=typeof g=="bigint"?g:BigInt(String(g));if(y<0n||y>Q)throw new a(`HoodLock quote(uint32) fee (${y.toString()}) exceeds max fee cap (${Q.toString()}).`);let b=o.formatAmount(y.toString(),W.decimals),h=o.approval(n,C,f.toString(),x),k=o.unsignedTx({chainId:x,to:C,data:J({abi:T,functionName:"create",args:[n,d.root,f,t,i,m]}),value:y.toString(),description:`Create HoodLock airdrop (${t} claims, total ${f.toString()}, quote fee ${b} ETH (${y.toString()} wei))`}),v=[h,k],E=A(e.account??r??xe,"wallet"),R=await o.preview(v,E),le=y>0n?` Quote fee: -${b} ETH (${b} ETH / ${y.toString()} wei).`:" Quote fee: 0 ETH (0 wei).",se=`${te(o,R)}${le}`;return{kind:"hoodlock_airdrop_create",chainId:x,token:n,merkleRoot:d.root,totalAmount:d.totalAmount,total:f.toString(),maxClaims:t,endTime:i,...u!==void 0?{inclusionTime:u}:{},uri:m,quoteFee:y,list:d.list,proofs:d.proofs,txs:v,preview:R,summary:se}}async function G(o,e,r,n){if(n.savedProof){let m=A(n.savedProof.account,"savedProof.account");if(m!==r)throw new a(`savedProof account (${m}) does not match claim account (${r}).`);return{index:n.savedProof.index,amount:w(o,n.savedProof.amount),proof:n.savedProof.proof}}if(n.proof!==void 0&&n.index!==void 0&&n.amount!==void 0){let m=Number(n.index);if(!Number.isInteger(m)||m<0)throw new a(`Invalid claim index: ${String(n.index)}`);return{index:m,amount:w(o,n.amount),proof:n.proof}}if(n.list||n.entries){let p=(n.list?ke(n.list):U(n.entries,{context:o})).proofs.find(i=>!(!S(i.account,r)||n.index!==void 0&&i.index!==Number(n.index)));if(!p)throw new a(`Account ${r} was not found in the saved airdrop list.`);return{index:p.index,amount:w(o,p.amount),proof:p.proof}}let d=`${oe}/api/airdrop/${e.toString()}/proof?address=${r}`,t=await ae(o,d),s=t?.data??t;if(!s||s.index===void 0||s.amount===void 0||!Array.isArray(s.proof))throw new a(`No valid proof returned from HoodLock API for airdrop ${e.toString()} and account ${r}.`);let f=Number(s.index);if(!Number.isInteger(f)||f<0)throw new a(`Invalid index in API proof: ${String(s.index)}`);return{index:f,amount:w(o,s.amount),proof:s.proof}}async function de(o,e){let r=o.clientFor(x),n=await r.readContract({address:C,abi:T,functionName:"getAirdrop",args:[e.id]}),[d,t,s,f,m,p,i,,l]=n,c=BigInt(t),u=Number(s),g=Number(m),y=BigInt(l),b=A(f,"airdrop.token");if(d===ee||i.toLowerCase()===re)throw new a(`Airdrop ${e.id.toString()} does not exist.`);if(p)throw new a(`Airdrop ${e.id.toString()} has already been swept.`);if(c>0n&&(await r.getBlock()).timestamp>=c)throw new a(`Airdrop ${e.id.toString()} expired at timestamp ${c.toString()}.`);if(g>=u)throw new a(`Airdrop ${e.id.toString()} has reached maxClaims (${u}).`);let[h,k]=await Promise.all([r.readContract({address:C,abi:T,functionName:"isClaimed",args:[e.id,BigInt(e.index)]}),we(r,b)]);if(h)throw new a(`Airdrop ${e.id.toString()} index ${e.index} has already been claimed.`);if(y<e.amount)throw new a(`Airdrop ${e.id.toString()} remaining balance (${y.toString()}) is less than claim amount (${e.amount.toString()}).`);let v=L(e.index,e.account,e.amount),E=ie(v,e.proof);if(!S(E,i))throw new a(`Computed Merkle root ${E} does not match on-chain airdrop root ${i} (bad proof).`);return{tokenAddress:b,tokenMeta:k,merkleRoot:i,leaf:v}}async function Se(o,e){let{tokenAddress:r,tokenMeta:n,merkleRoot:d,leaf:t}=await de(o,e),s=e.caller??e.account,f=!S(s,e.account),m=o.formatAmount(e.amount.toString(),n.decimals),p=o.unsignedTx({chainId:x,to:C,data:J({abi:T,functionName:"claim",args:[e.id,BigInt(e.index),e.account,e.amount,[...e.proof]]}),value:"0",description:f?`Claim ${m} ${$(n.symbol)} (${e.amount.toString()} base units) from HoodLock airdrop #${e.id.toString()} for recipient ${e.account} (caller ${s} pays gas only, token delta 0)`:`Claim ${m} ${$(n.symbol)} (${e.amount.toString()} base units) from HoodLock airdrop #${e.id.toString()} for ${e.account}`}),i=[p],l=await o.preview(i,s),c,u,g=e.amount.toString(),y;if(f){let b=l.changes.filter(h=>h.amount.trim().startsWith("-"));c={...l,changes:b,summary:`${l.summary} Recipient ${e.account} receives ${m} ${$(n.symbol)} (${e.amount.toString()} base units); caller ${s} change is 0 (gas only).`},u=`Third-party claim from HoodLock airdrop #${e.id.toString()} (index ${e.index}): recipient ${e.account} receives ${m} ${$(n.symbol)} (${e.amount.toString()} base units of ${r}); caller ${s} own token change is 0 (gas only). ${l.summary}`,y="0"}else c=l,u=`Claim ${m} ${$(n.symbol)} (${e.amount.toString()} base units of ${r}) from HoodLock airdrop #${e.id.toString()} (index ${e.index}) for recipient ${e.account}. ${te(o,c)}`,y=e.amount.toString();return{kind:"hoodlock_airdrop_claim",chainId:x,id:e.id,index:e.index,account:e.account,recipient:e.account,caller:e.caller,token:r,amount:e.amount.toString(),recipientDelta:g,senderDelta:y,leaf:t,merkleRoot:d,proof:[...e.proof],tx:p,txs:i,preview:c,summary:u}}async function Ce(o,e,r){let n=A(e.account??r??"","account"),d=e.caller!==void 0?A(e.caller,"caller"):r!==void 0?A(r,"wallet"):void 0;if(e.id!==void 0){let l=H(e.id,"id"),c=await G(o,l,n,e);return Se(o,{id:l,index:c.index,account:n,caller:d,amount:c.amount,proof:c.proof})}let t=`${oe}/api/airdrop/eligible?address=${n}`,s=await ae(o,t),f=Array.isArray(s)?s:s?.claimable??s?.eligible??s?.airdrops??s?.claims??[],m=[];for(let l of f){let c=l.id??l.airdropId;if(c!==void 0)try{let u=H(c,"eligible.id"),g,y,b;if(l.index!==void 0&&l.amount!==void 0&&Array.isArray(l.proof))g=Number(l.index),y=w(o,l.amount),b=l.proof;else{let k=await G(o,u,n,{id:u,account:n});g=k.index,y=k.amount,b=k.proof}let h=await de(o,{id:u,index:g,account:n,amount:y,proof:b});m.push({id:u.toString(),index:g,account:n,token:h.tokenAddress,amount:y.toString(),proof:[...b],merkleRoot:h.merkleRoot})}catch{continue}}let p=m.length===0?`No verified eligible HoodLock airdrops were returned by the index for ${n}. Discovery can lag after creation; this does not prove there are no claims. If you know the airdrop id, call hoodlock_airdrop_claim with id and account to resolve its list/proof and verify it on-chain.`:`Found ${m.length} eligible HoodLock airdrop(s) for ${n}: ${m.map(l=>`#${l.id}`).join(", ")}. Discovery can lag after creation. Choose an id, or pass a known new id, to hoodlock_airdrop_claim to verify and build a claim transaction.`;return{kind:"hoodlock_airdrop_eligible",chainId:x,account:n,recipient:n,caller:d,recipientDelta:"0",senderDelta:"0",eligible:m,claims:[],tx:void 0,txs:[],preview:{txs:[],changes:[],summary:p},summary:p}}var ve=o=>({tools:[{name:"hoodlock_airdrop_create",inputSchema:{type:"object",required:["token","entries"],additionalProperties:!1,properties:{token:{type:"string",description:"ERC-20 token contract address on chain 4663"},entries:{type:"array",description:"Ordered airdrop entries [{ index?, account, amount }] with base-unit integer string amounts"},total:{type:"string",description:"Optional total funded token amount as a base-unit integer string (>= sum of entries)"},maxClaims:{type:"number",description:"Optional claim count (must equal entries.length in 1..250000)"},endTime:{type:"number",description:"Unix timestamp in seconds (0 for non-sweepable or >= inclusion time + 604800)"},inclusionTime:{type:"number",description:"Optional expected transaction inclusion Unix timestamp in seconds (> already-mined block.timestamp)"},inclusionMargin:{type:"number",description:"Optional signing and inclusion margin in seconds above the already-mined block.timestamp (>= 1, default 30)"},uri:{type:"string",description:"Metadata URI (<= 256 UTF-8 bytes)"},decimals:{type:"number",description:"Optional token decimals when converting human decimal entry amounts via parseAmount"},rounding:{type:"string",enum:["floor","ceil"],description:"Optional rounding mode (floor or ceil) when converting decimal amounts"},account:{type:"string",description:"Optional creator wallet address for preview simulation"}}},execute:async(e,r)=>$e(o,e,r)},{name:"hoodlock_airdrop_claim",inputSchema:{type:"object",required:["account"],additionalProperties:!1,properties:{id:{type:"string",description:"Optional airdrop ID (omit to query eligible airdrops)"},account:{type:"string",description:"Leaf recipient address that receives the tokens"},caller:{type:"string",description:"Optional caller/relayer address submitting the tx (pays gas only, receives 0 tokens)"},index:{type:"number",description:"Optional leaf index when supplying proof directly or selecting from list/entries"},amount:{type:"string",description:"Optional leaf amount as a base-unit integer string"},proof:{type:"array",items:{type:"string"},description:"Optional Merkle sibling proof array of 32-byte hex strings"},savedProof:{type:"object",description:"Optional saved proof item ({ index, account, amount, leaf?, proof }) from hoodlock_airdrop_create"},list:{type:"object",description:"Optional saved airdrop list ({ format, leafEncoding, root, totalAmount, maxClaims, values, entries }) to rebuild proof locally"},entries:{type:"array",description:"Optional airdrop entries array ([{ index?, account, amount }]) to rebuild proof locally"}}},execute:async(e,r)=>Ce(o,e,r)}]}),Le=ve;export{V as a,x as b,C as c,oe as d,P as e,ge as f,fe as g,pe as h,Q as i,T as j,he as k,L as l,ie as m,Ne as n,U as o,ke as p,ve as q,Le as r};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as g,j as k}from"./
|
|
1
|
+
import{i as g,j as k}from"./2GYL3N2O.js";import{d as p,f}from"./ZRG34Y7Q.js";import{q as m}from"./RWEA4SWP.js";import{c as u,f as h}from"./D6JOXK7Q.js";import{a as d}from"./SPJCSEKP.js";import{g as l}from"./NWNYJ26T.js";import{a as i}from"./XSD5NL7J.js";var w=["hoodlock_lock","hoodlock_burn","hoodlock_airdrop_create","hoodlock_airdrop_claim",...p,...u];async function H(e,r,t,s){if(!w.includes(e))throw new i("Unknown HoodLock action; nothing was signed.");let o=async()=>{throw new i("HoodLock does not require a swap for this action.")},n=d({clientFor:()=>s,http:fetch,preview:async a=>({txs:a,changes:[],summary:"Locally reconstructed HoodLock intent."}),quoteSwap:o,buildSwap:o}),c=await[g(n),k(n),...m(n).tools,...f(n).tools,...h(n).tools].find(a=>a.name===e).execute(r,t);if(!Array.isArray(c.txs)||c.txs.length===0)throw new i("HoodLock action has no transactions; use the read route.");return c.txs.map(a=>({...a}))}function I(e,r){if(!r.length||e.length!==r.length||e.some((t,s)=>{let o=r[s];return t.chainId!==o.chainId||!l(t.to,o.to)||!l(t.data,o.data)||t.value!==o.value}))throw new i("HoodLock transaction differs from the locally reconstructed request; nothing was signed.")}export{w as a,H as b,I as c};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as w,i as T,l as O,m as x,n as R}from"./NWNYJ26T.js";import{b as f,j as S}from"./
|
|
1
|
+
import{c as w,i as T,l as O,m as x,n as R}from"./NWNYJ26T.js";import{b as f,j as S}from"./EWZFZUVF.js";import{a as c}from"./XSD5NL7J.js";import{a as P}from"./JXOEJPJ4.js";import{encodeFunctionData as $,erc20Abi as E,parseAbi as z,zeroAddress as j}from"viem";var g=S[f].merkl.distributor.address,H=["function accessControlManager() view returns (address)","function isGovernor(address) view returns (bool)","function isGovernorOrGuardian(address) view returns (bool)","function canUpdateMerkleRoot(address) view returns (uint256)","function mainOperators(address,address) view returns (uint256)","function disputeToken() view returns (address)","function disputeAmount() view returns (uint256)","function disputer() view returns (address)","function endOfDisputePeriod() view returns (uint48)","function getMerkleRoot() view returns (bytes32)","function getEpochDuration() view returns (uint32)","function disputePeriod() view returns (uint48)","function upgradeabilityDeactivated() view returns (uint256)","function disputeTree(string)","function updateTree((bytes32 merkleRoot,bytes32 ipfsHash))","function toggleTrusted(address)","function toggleMainOperatorStatus(address,address)","function revokeUpgradeability()","function setEpochDuration(uint32)","function resolveDispute(bool)","function revokeTree()","function recoverERC20(address,address,uint256)","function setDisputePeriod(uint48)","function setDisputeToken(address)","function setDisputeAmount(uint256)"],y=z(H),F={type:"string",pattern:"^\\d+$"},C={type:"string",pattern:"^0x[0-9a-fA-F]{64}$"},G="Provide a valid address.";function m(o,l=!1){let n=T(o,G);return l?n:O(n,G)}function _(o,l=256){return R(o,`Value exceeds uint${l}.`,{bits:l})}function k(o){return x(o,"Merkl returned invalid protocol state.")}function I(o){return typeof o=="number"&&Number.isSafeInteger(o)&&o>=0?String(o):k(o).toString()}var D={updateTree:["merkleRoot","ipfsHash"],toggleTrusted:["target","enabled"],toggleMainOperatorStatus:["target","token","enabled"],revokeUpgradeability:[],setEpochDuration:["amount"],resolveDispute:["valid"],revokeTree:[],recoverERC20:["token","recipient","amount"],setDisputePeriod:["amount"],setDisputeToken:["token"],setDisputeAmount:["amount"]},W=o=>{let l=()=>o.clientFor(f),n=(r,i=[],e=g)=>l().readContract({address:e,abi:y,functionName:r,args:i}),b=(r,i,e,p)=>({name:`merkl_${r}`,inputSchema:{type:"object",properties:i,required:e,additionalProperties:!1},execute:async(u,s)=>{try{let a=Object.keys(u).find(d=>!Object.hasOwn(i,d));if(a)throw new c(`Unsupported Merkl input: ${a}.`);return await p(u,m(s))}catch(a){throw new c(o.plainError(a))}}}),U=async(r,i,e,p)=>{let u=[o.unsignedTx({to:g,data:$({abi:y,functionName:r,args:i}),value:"0",chainId:f,description:e})],s=await o.preview(u,p);return{txs:u,preview:s,summary:`Powered by Merkl \u2014 https://app.merkl.xyz. ${e} ${s.summary}`}};return{tools:[b("distributor_status",{},[],async(r,i)=>{let[e,p,u,s,a,d,t,h,N]=await Promise.all([n("getMerkleRoot"),n("disputeToken"),n("disputeAmount"),n("disputer"),n("endOfDisputePeriod"),n("getEpochDuration"),n("disputePeriod"),n("upgradeabilityDeactivated"),n("accessControlManager")]);if(typeof e!="string"||!/^0x[0-9a-fA-F]{64}$/.test(e)||typeof d!="number"||!Number.isInteger(d)||d<0||d>4294967295)throw new c("Merkl returned invalid Distributor state.");let v=m(N),[M,A]=await Promise.all([n("isGovernor",[i],v),n("isGovernorOrGuardian",[i],v)]);if(typeof M!="boolean"||typeof A!="boolean")throw new c("Merkl returned invalid governance roles.");return{chainId:f,distributor:g,root:e,disputeToken:m(p,!0),disputeAmount:k(u).toString(),disputer:m(s,!0),endOfDisputePeriod:I(a),epochDuration:String(d),disputePeriod:I(t),upgradeabilityDeactivated:k(h).toString(),accessControlManager:v,governor:M,governorOrGuardian:A,summary:"Powered by Merkl \u2014 https://app.merkl.xyz. Dispute amounts are token base units. Opening a dispute locks collateral until governor resolution; a rejected dispute forfeits it."}}),b("dispute",{reason:{type:"string",minLength:1,maxLength:2e3,description:"Public reason for disputing the Merkl tree, from 1 to 2000 characters."}},["reason"],async(r,i)=>{if(typeof r.reason!="string"||!r.reason.trim()||r.reason.length>2e3)throw new c("Provide a public dispute reason of 1 to 2000 characters.");let e=m(await n("disputeToken")),p=k(await n("disputeAmount")),[u,s]=await Promise.all([l().readContract({address:e,abi:E,functionName:"symbol"}),l().readContract({address:e,abi:E,functionName:"decimals"})]);if(typeof u!="string"||!u.trim()||typeof s!="number"||!Number.isInteger(s)||s<0||s>255)throw new c("Merkl dispute token metadata is invalid.");let a=`Dispute Merkl's tree: ${r.reason}. Lock ${p} ${P(u)} base units (token ${e}, decimals ${s}) until governor resolution; rejection forfeits the deposit. There is no unilateral withdrawal.`,d=[...p?[o.approval(e,g,p.toString(),f)]:[],o.unsignedTx({to:g,data:$({abi:y,functionName:"disputeTree",args:[r.reason]}),value:"0",chainId:f,description:a})],t=await o.preview(d,i);return{txs:d,preview:t,deposit:{token:{address:e,symbol:u,decimals:s,chainId:f},amount:p.toString()},summary:`Powered by Merkl \u2014 https://app.merkl.xyz. ${a} ${t.summary}`}}),b("distributor_admin",{operation:{enum:Object.keys(D),description:"Distributor admin operation: tree updates/revocation, trust/operator changes, epoch/dispute settings, resolution, token recovery or upgradeability revocation."},target:{...w,description:"Address whose trusted or operator status is changed."},token:{...w,description:"Reward or recovery token contract address."},recipient:{...w,description:"Address to receive recovered tokens."},amount:{...F,description:'Admin amount: Unix seconds for durations, otherwise token base units using recovery/dispute token decimals (USDG has 6: "1000000" = 1 USDG).'},enabled:{type:"boolean",description:"true enables the selected role; false disables it."},valid:{type:"boolean",description:"Whether the disputed tree is valid."},merkleRoot:{...C,description:"New reward tree root as a 0x-prefixed 32-byte hex string."},ipfsHash:{...C,description:"New tree IPFS content hash as a 0x-prefixed 32-byte hex string."}},["operation"],async(r,i)=>{let e=String(r.operation);if(!Object.hasOwn(D,e))throw new c("Choose a supported Distributor operation.");let p=D[e];for(let t of Object.keys(r))if(t!=="operation"&&!p.includes(t))throw new c(`Input ${t} does not match this Distributor operation.`);let u=m(await n("accessControlManager")),s=await n("isGovernor",[i],u);if(typeof s!="boolean")throw new c("Merkl returned invalid governor status.");if(!s&&!(e==="updateTree"?await n("canUpdateMerkleRoot",[i])===1n:e==="toggleMainOperatorStatus"&&r.token!==j?await n("isGovernorOrGuardian",[i],u)===!0:!1))throw new c("The connected wallet lacks the required Merkl governance role.");let a=p.map(t=>{if(t==="enabled"||t==="valid"){if(typeof r[t]!="boolean")throw new c(`Provide ${t} as boolean.`);return r[t]}if(t==="amount"){let h=_(r[t],e==="setEpochDuration"?32:e==="setDisputePeriod"?48:256);return e==="setEpochDuration"?Number(h):h}if(t==="merkleRoot"||t==="ipfsHash"){if(typeof r[t]!="string"||!/^0x[0-9a-fA-F]{64}$/.test(r[t]))throw new c("Provide a bytes32 root and IPFS hash.");return r[t]}return m(r[t],t==="token"&&e==="toggleMainOperatorStatus")}),d=a;if(e==="updateTree"&&(d=[{merkleRoot:a[0],ipfsHash:a[1]}]),e==="toggleTrusted"||e==="toggleMainOperatorStatus"){let t=await n(e==="toggleTrusted"?"canUpdateMerkleRoot":"mainOperators",e==="toggleTrusted"?[a[0]]:a.slice(0,2));if(t!==0n&&t!==1n)throw new c("Merkl returned invalid authorization state.");if(t===1n===r.enabled)return{txs:[],summary:"Powered by Merkl \u2014 https://app.merkl.xyz. Authorization already has the requested state."};d=a.slice(0,-1)}return U(e,d,`Merkl Distributor ${e} ${JSON.stringify(r)}. Governance affects every claimant. Upgradeability revocation is permanent; dispute resolution returns or forfeits collateral. Authorization operations toggle the observed state; re-preview if state changes.`,i)})]}};export{W as a};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{e as f}from"./
|
|
1
|
+
import{e as f}from"./ZRG34Y7Q.js";import{c as k}from"./SCG5HWMN.js";import{a as u}from"./66F5ZH34.js";import{i as p}from"./NWNYJ26T.js";import{a as i}from"./XSD5NL7J.js";var _="hoodlock_public",r="https://hoodlock.tech",h=["lp_locks","lp_lock","airdrop_history","airdrop_list","airdrop_list_by_root","featured","feature_tiers","buyback_status","referral_available","links"];function v(c){return{tools:[{name:_,inputSchema:{type:"object",properties:{route:{type:"string",enum:[...h],description:"Public HoodLock page to read: LP lock list or one lock, airdrop history or list, featured and feature tiers, buyback status, referral code check, or links."},id:u("Record id as a decimal string, for lp_lock, airdrop_list and links."),account:{type:"string",description:"Wallet address for airdrop_history. Defaults to the connected wallet."},token:{type:"string",description:"Token address, for the links route to build its token page link."},root:{type:"string",pattern:"^0x[0-9a-fA-F]{64}$",description:"Airdrop Merkle root as 0x followed by 64 hex digits, for airdrop_list_by_root."},code:{type:"string",minLength:1,maxLength:64,description:"Referral code to check, for referral_available."}},required:["route"],additionalProperties:!1},async execute(e,b){try{let a=String(e.route);if(!h.includes(a))throw new i("Choose a published HoodLock public read route.");let m=e.account??b,s=t=>p(t,"Provide a checksummed wallet or token address."),n=()=>f(e.id,"id").toString(),o;switch(a){case"links":{let t=e.id===void 0?void 0:n();return{source:r,links:{lockChecker:`${r}/lock-checker`,liquidityChecker:`${r}/liquidity-lock-checker`,burnChecker:`${r}/burn-checker`,vestingChecker:`${r}/vesting-checker`,embedDocs:`${r}/docs/embed`,badgeDocs:`${r}/docs/badge`,...e.token===void 0?{}:{token:`${r}/token/${s(e.token)}`},...t===void 0?{}:Object.fromEntries(["lock","burn","vesting","position"].map(l=>[l,`${r}/proof/${l}/${t}`]))},summary:"HoodLock-only records and integration links. Empty HoodLock results do not establish that no external locks or burns exist."}}case"lp_locks":o="/api/lp/locks";break;case"lp_lock":o=`/api/lp/lock/${n()}`;break;case"airdrop_history":o=`/api/airdrop/history?address=${s(m)}`;break;case"airdrop_list":o=`/api/airdrop/${n()}/list.json`;break;case"airdrop_list_by_root":if(typeof e.root!="string"||!/^0x[0-9a-fA-F]{64}$/.test(e.root))throw new i("Provide a bytes32 Merkle root.");o=`/api/airdrop/list-by-root/${e.root}.json`;break;case"featured":o="/api/featured";break;case"feature_tiers":o="/api/feature/tiers";break;case"referral_available":if(typeof e.code!="string"||e.code.length<1||e.code.length>64)throw new i("Provide a referral code with 1 to 64 characters.");o=`/api/aff/available?code=${encodeURIComponent(e.code)}`;break;default:o="/api/revenue/pool"}let d=`${r}${o}`,y=await k(c.http,d,{method:"GET",redirect:"error",signal:AbortSignal.timeout(1e4)},t=>t!==null&&typeof t=="object");return{source:d,data:y,untrusted:!0,summary:"Public off-chain HoodLock data. Verify custody, proofs, balances and authority on chain; API labels and indexes may lag. No transaction, authentication, payment or publication was performed."}}catch(a){throw new i(c.plainError(a))}}}]}}export{_ as a,v as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as x,c}from"./
|
|
1
|
+
import{a as x,c}from"./5BPFF7NX.js";import{a}from"./XSD5NL7J.js";import{parseAbi as M}from"viem";var b=M(["function readState(address router) view returns ((int256 totalPt,int256 totalSy,int256 totalLp,address treasury,int256 scalarRoot,uint256 expiry,uint256 lnFeeRateRoot,uint256 reserveFeePercent,uint256 lastLnImpliedRate) market)","function pyIndexCurrent() returns(uint256)","function exchangeRate() view returns(uint256)","function previewDeposit(address tokenIn,uint256 amount) view returns(uint256)","function previewRedeem(address tokenOut,uint256 amount) view returns(uint256)"]),R=10n**18n,E=31536e3,P="Pendle's price doesn't match what Oak checked on the chain. Try a smaller amount. Nothing was signed.";function n(e,t=!1){if(typeof e!="bigint"||e<(t?1n:0n)||e>=1n<<256n)throw new a("Oak could not read the Pendle price check from the chain. Nothing was signed.");return e}function d(e){return c(Number.isInteger(e)&&e>=0&&e<=77,"unreadable token decimals"),10n**BigInt(e)}function k(e){if(!Number.isFinite(e)||Math.abs(e)>40)throw new a(P);return BigInt(Math.floor(Math.exp(e)*1e18))}async function A(e,t,v,p,u,f){try{c(Number.isFinite(f)&&Math.abs(f)<=.03,"unreadable or excessive price impact"),n(p,!0),n(u,!0);let i=await e.getBlock(),s=i.number,[h,C]=await Promise.all([e.readContract({address:t.market,abi:b,functionName:"readState",args:[x],blockNumber:s}),e.simulateContract({address:t.yt,abi:b,functionName:"pyIndexCurrent",blockNumber:s}).then(o=>o.result)]),I=n(h.lastLnImpliedRate),D=n(h.lnFeeRateRoot),w=n(C,!0);c(Number.isSafeInteger(t.expiry)&&t.expiry>Number(i.timestamp),"this term has ended; use pendle_redeem");let y=(t.expiry-Number(i.timestamp))/E,g=Number(I)/1e18*y,r;if(v==="buy")r=n(await e.readContract({address:t.sy,abi:b,functionName:"previewDeposit",args:[t.inputToken,p],blockNumber:s}),!0)*w*k(g)*d(t.ptDecimals)/(R*R*d(t.syDecimals));else{let o=p*k(-g)*d(t.syDecimals)/(w*d(t.ptDecimals));n(o,!0),r=n(await e.readContract({address:t.sy,abi:b,functionName:"previewRedeem",args:[t.inputToken,o],blockNumber:s}),!0)}n(r,!0);let m=1-Math.exp(-Number(D)/1e18*y);c(Number.isFinite(m)&&m>=0&&m<=1,"unreadable market fee");let N=.01+m,F=u>r?u-r:r-u,l=Number(F)/Number(r);if(!Number.isFinite(l)||l>N)throw new a(P);return{estimateBase:r,relativeDifference:l,tolerance:N,blockNumber:s}}catch(i){throw i instanceof a?i:new a("Oak could not read the Pendle price check from the chain. Nothing was signed.")}}export{b as a,n as b,A as c};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as Y}from"./NGHRUNXO.js";import{c as X}from"./7GL547YZ.js";import{a as T}from"./RKS3M7L5.js";import{b as Z,c as $,d as z,e as J,g as K,h as v,j as n,k as S,l as G,m as M,o as a,p as t,q as l,r as p,s as y,v as W}from"./UMY6SP7C.js";import{b as s,h as _,i as D,j as N,k as U}from"./CJMVRV34.js";import{a as d}from"./XSD5NL7J.js";import{getAddress as i}from"viem";async function te(e,u,x,o=[],c=X){let r=await N(e,x);await D(e,r.number,[s.launcherV1,l,s.rulesV1]);let k=i(s.launcherV1),[b,B,F,L,O,R,q,I,C,V,g,m,w]=await Promise.all([Y(e,r.number,u,o,c),t(e,k,z,"launchFee",[],r.number),t(e,p,a("registry"),"rootOpenFor",[l,u],r.number),t(e,p,a("registry"),"newMarketsPaused",[],r.number),t(e,p,a("registry"),"isLauncher",[k],r.number),t(e,l,a("rootV1"),"poolManager",[],r.number),t(e,k,a("launcherV1"),"poolManager",[],r.number),t(e,k,a("launcherV1"),"registry",[],r.number),t(e,i(s.rulesV1),a("rulesV1"),"trustedRoot",[],r.number),t(e,i(s.rulesV1),a("rulesV1"),"poolManager",[],r.number),t(e,p,a("registry"),"admission",[l,i(s.rulesV1)],r.number),t(e,i(s.rulesV1),a("rulesV1"),"configSchemaHash",[],r.number),t(e,p,a("registry"),"quoteAssets",[],r.number)]);if(R!==y||q!==y||I!==p||C!==l||V!==y)throw new d("Hookr launch dependency wiring differs from the reviewed deployment.");v(m);let h=M(g),f=M(h.caps);if(h.implementation!==i(s.rulesV1)||n(h.kind,8)!==0n||h.codeHash!==_(s.rulesV1).codeHash||h.schemaHash!==m||n(h.gasLimit,32)===0n||n(f.maxLpFeePips,24)>600000n||n(f.maxQuoteTakePips,24)>=1000000n||n(f.maxSubjectTakeBps,16)>1000n)throw new d("Hookr core admission, schema or caps differ from the supported launch profile.");if(!Array.isArray(w)||w.length>32)throw new d("Hookr qualified quote list is incomplete or exceeds the bounded read.");let P=[];for(let H=0;H<w.length;H+=2)P.push(...await Promise.all(w.slice(H,H+2).map(oe=>W(e,i(String(oe)),r.number))));let ee=await W(e,i("0x0000000000000000000000000000000000000000"),r.number),A=G(B,5),re={token:ee,amount:n(A[0]).toString(),currency:"ETH",decimals:18,treasury:i(String(A[1])),pendingAmount:n(A[2]).toString(),pendingTreasury:i(String(A[3])),readyAt:n(A[4]).toString()},j=S(F),E=S(L),Q=S(O);return await U(e,r),{chainId:4663,blockNumber:r.number.toString(),blockHash:r.hash,timestamp:r.timestamp.toString(),version:"hookr-launcher-v1",launcher:k,root:l,core:i(s.rulesV1),poolManager:y,permissionMask:"0x2acc",launchFee:re,qualifiedQuotes:P,coreAdmission:{schemaHash:m,gasLimit:n(h.gasLimit,32).toString(),caps:{maxLpFeePips:n(f.maxLpFeePips,24).toString(),maxQuoteTakePips:n(f.maxQuoteTakePips,24).toString(),maxSubjectTakeBps:n(f.maxSubjectTakeBps,16).toString()}},gate:b,rootOpenForWallet:j,newMarketsPaused:E,launcherAdmitted:Q,launchAvailable:j&&!E&&Q&&b.healthyIdentityOnly&&b.walletAgent,scoreLaunchAvailable:j&&!E&&Q&&b.healthyForScores&&b.walletAgent,supportedSettings:{route:"launchAdvised",members:"1",tokenKinds:["new"],reservedTokenKinds:["existing"],tickSpacing:String(T.tickSpacing),baseLpFeePips:String(T.baseLpFeePips),deadlineSecondsMax:T.deadlineSeconds.toString(),guardEndBlock:"Explicit parent-block end through Anti-Snipe; default 0",burnBps:"0 to 1000 through Auto Burn",royaltyBps:"0",integrator:null,nameMaxUtf8Bytes:"48",symbolMaxUtf8Bytes:"12",supplyMaxBaseUnits:((1n<<108n)-1n).toString(),liquidityMax:((1n<<127n)-1n).toString(),fee:"8388608",tickSpacingMin:"1",tickSpacingMax:"32767",tickMin:"-887272",tickMax:"887272",requiresTickAlignment:!0,gateRequired:!0,gatePhases:"1",gateFailOpen:!1,arbitraryAdvisories:!1,devBuy:!1,locks:"Anti-Snipe guard only",hookBlocks:"Live list with verified field codecs; other blocks refused",minAgeSecondsRequired:!0,minAgeSecondsMax:"2592000",arbRecaptureDefault:!0,ownedRoot:!1,lpRewardsBpsMax:"1000",lpRewardsPlusBurnBpsMax:"1000",totalLpFeePipsMax:"600000",protocolShareBpsMin:"2000",protocolShareBpsMax:"5000",existingTokenFunding:"requires a separately qualified token route"},readStatus:"complete",warnings:["Read-only admission snapshot. hookr_launch supports one new-token agents-only pool; verified core Hook Blocks are optional, add/collect/remove require separate tools.","Oak identity linking alone does not establish on-chain Hookr gate eligibility.",b.reviewerSetsNotice]}}function pe(e){return[{name:"hookr_launch_options",inputSchema:{type:"object",additionalProperties:!1,properties:{...$,launchProfile:{type:"string",enum:["agents-only","open"],description:"Open uses exactly one advisory Hook Block and no agent identity gate."},reviewerSetIds:{type:"array",maxItems:8,uniqueItems:!0,items:Z,description:"Existing registered reviewer set IDs to inspect; no alias or arbitrary reviewer address."}}},execute:async(u,x)=>{if(J(u,["blockNumber","reviewerSetIds","launchProfile"]),u.launchProfile!==void 0&&u.launchProfile!=="agents-only"&&u.launchProfile!=="open")throw new d("Choose launchProfile agents-only or open.");if(e.network==="testnet")throw new d("Hookr launch reads are configured only on mainnet, chain 4663.");let o=u.reviewerSetIds??[];if(!Array.isArray(o)||o.length>8||new Set(o).size!==o.length)throw new d("Provide at most eight distinct reviewer set IDs.");let c=o.map(v);if(new Set(c).size!==c.length)throw new d("Provide distinct reviewer set IDs.");if(u.launchProfile==="open"){if(c.length)throw new d("An open launch does not use reviewer sets.");return ne(e.clientFor(4663),x,K(u))}try{return await te(e.clientFor(4663),x,K(u),c)}catch(r){throw r instanceof d?r:new d("Hookr launch settings are unavailable at the named block. Retry the complete read; no zero fee or healthy gate is implied.")}}}]}async function ne(e,u,x){let o=await N(e,x);await D(e,o.number,[s.launcherV1,l,s.rulesV1]);let c=i(s.launcherV1),r=i(s.rulesV1),[k,b,B,F,L,O,R,q,I,C,V]=await Promise.all([t(e,c,z,"launchFee",[],o.number),t(e,p,a("registry"),"rootOpenFor",[l,u],o.number),t(e,p,a("registry"),"newMarketsPaused",[],o.number),t(e,p,a("registry"),"isLauncher",[c],o.number),t(e,l,a("rootV1"),"poolManager",[],o.number),t(e,c,a("launcherV1"),"poolManager",[],o.number),t(e,c,a("launcherV1"),"registry",[],o.number),t(e,r,a("rulesV1"),"trustedRoot",[],o.number),t(e,r,a("rulesV1"),"poolManager",[],o.number),t(e,p,a("registry"),"admission",[l,r],o.number),t(e,r,a("rulesV1"),"configSchemaHash",[],o.number)]),g=M(C),m=M(g.caps);if(L!==y||O!==y||R!==p||q!==l||I!==y||g.implementation!==r||n(g.kind,8)!==0n||g.codeHash!==_(r).codeHash||g.schemaHash!==v(V)||n(g.gasLimit,32)===0n||n(m.maxLpFeePips,24)>600000n||n(m.maxQuoteTakePips,24)>=1000000n||n(m.maxSubjectTakeBps,16)>1000n)throw new d("Hookr open-launch dependency wiring or core admission differs from the reviewed profile.");let w=G(k,5),h=S(b),f=S(B),P=S(F);return await U(e,o),{chainId:4663,blockNumber:o.number.toString(),blockHash:o.hash,timestamp:o.timestamp.toString(),launcher:c,root:l,core:r,poolManager:y,launchProfile:"open",launchFee:{amount:n(w[0]).toString(),treasury:i(String(w[1]))},coreAdmission:{schemaHash:v(V),gasLimit:n(g.gasLimit,32).toString(),caps:{maxLpFeePips:n(m.maxLpFeePips,24).toString(),maxQuoteTakePips:n(m.maxQuoteTakePips,24).toString(),maxSubjectTakeBps:n(m.maxSubjectTakeBps,16).toString()}},rootOpenForWallet:h,newMarketsPaused:f,launcherAdmitted:P,launchAvailable:h&&!f&&P,supportedSettings:{gateRequired:!1,advisoryRequired:!0,advisoryCount:1,advisoryFailOpen:!1,tokenKinds:["new"],tickSpacing:200,baseLpFeePips:3e3},readStatus:"complete",warnings:["Admission snapshot only. The selected advisory, its terms, dependencies and full cap reservation must pass the same-block launch profile validator.","Zap Target admits buys only from its frozen feeder vaults; an open profile removes the agent identity requirement."]}}export{te as a,pe as b,ne as c};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as t}from"./NWNYJ26T.js";import{b as x,j as b,n as C}from"./
|
|
1
|
+
import{g as t}from"./NWNYJ26T.js";import{b as x,j as b,n as C}from"./EWZFZUVF.js";import{a as s}from"./XSD5NL7J.js";import{decodeAbiParameters as y,decodeFunctionData as q,encodeAbiParameters as f,encodeFunctionData as J,getAddress as U,parseAbi as Q,parseAbiParameters as A,zeroAddress as g}from"viem";var Y=U(b[x].ponsTrade.universal_router.address),ie=U(b[x].ponsTrade.permit2.address),H="0x0Af57F62982D03066ef917AcAd87F771c06528Ec",ae=Object.freeze({pons:U(C),fobo:H}),Z=Object.freeze({currency0:g,currency1:U(b[x].tokens.USDG.address),fee:500,tickSpacing:10,hooks:g}),ce=Object.freeze([H,g]),M=Q(["function execute(bytes commands,bytes[] inputs,uint256 deadline) payable"]),L=A("bytes,bytes[]"),X=A("((address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks) poolKey,bool zeroForOne,uint128 amountIn,uint128 amountOutMinimum,uint256 minHopPriceX36,bytes hookData)"),j=A("(address currencyIn,(address intermediateCurrency,uint24 fee,int24 tickSpacing,address hooks,bytes hookData)[] path,uint256[] minHopPriceX36,uint128 amountIn,uint128 amountOutMinimum)"),R=A("address,uint256"),G=A("((address token,uint160 amount,uint48 expiration,uint48 nonce) details,address spender,uint256 sigDeadline),bytes"),ee="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",I="Universal Router calldata must be one canonical v4 swap command, optionally after one Permit2 permit.",h="Universal Router actions must swap an exact input, settle it and take all output to the sender.",E="Universal Router settlement and receipt must match the swap.",W="Universal Router swap must carry no hook data or per-hop price limit.",te="Universal Router permit must cover the swap input token and name the Universal Router as spender.";function ue(o){return t(o,ee)?g:o}function m(o,n,a,l){let u;try{if(u=o(),t(n(u),a))return u}catch{}throw new s(l)}function le(o,n){let a=m(()=>q({abi:M,data:o}),e=>J({abi:M,...e}),o,I),[l,u,$]=a.args,P=t(l,"0x0a10");if(!P&&!t(l,"0x10")||u.length!==(P?2:1))throw new s(I);let K=u.at(-1),[T,c]=m(()=>y(L,K),e=>f(L,e),K,h),_=t(T,"0x060c0f");if(!_&&!t(T,"0x070c0f")||c.length!==3)throw new s(h);let S,d,O,w,k;if(_){let[e]=m(()=>y(X,c[0]),F=>f(X,F),c[0],h);if(e.hookData!=="0x"||e.minHopPriceX36!==0n)throw new s(W);let{currency0:r,currency1:i,fee:p,tickSpacing:v,hooks:D}=e.poolKey;S=[{poolKey:{currency0:r,currency1:i,fee:p,tickSpacing:v,hooks:D},zeroForOne:e.zeroForOne}],[d,O]=e.zeroForOne?[r,i]:[i,r],{amountIn:w,amountOutMinimum:k}=e}else{let[e]=m(()=>y(j,c[0]),i=>f(j,i),c[0],h);if(e.path.length<2)throw new s(h);if(e.minHopPriceX36.length!==0||e.path.some(i=>i.hookData!=="0x"))throw new s(W);let r=e.currencyIn;S=e.path.map(i=>{let p=i.intermediateCurrency;if(t(r,p))throw new s(h);let[v,D]=BigInt(r)<BigInt(p)?[r,p]:[p,r],F={poolKey:{currency0:v,currency1:D,fee:i.fee,tickSpacing:i.tickSpacing,hooks:i.hooks},zeroForOne:t(r,v)};return r=p,F}),d=e.currencyIn,O=r,{amountIn:w,amountOutMinimum:k}=e}if(w<=0n)throw new s("Universal Router swap input must be a positive exact amount.");if(t(d,O))throw new s("Universal Router swap must end in a different currency than it starts.");for(let{poolKey:e}of S)if(!n.some(r=>t(r,e.hooks)))throw new s(`Universal Router swap uses pool hook ${e.hooks}, which this route does not allow.`);let N=m(()=>y(R,c[1]),e=>f(R,e),c[1],E),z=m(()=>y(R,c[2]),e=>f(R,e),c[2],E);if(!t(N[0],d)||N[1]!==w||!t(z[0],O)||z[1]!==k)throw new s(E);let B={legs:S,currencyIn:d,currencyOut:O,amountIn:w,amountOutMinimum:k,deadline:$};if(P){let[e,r]=m(()=>y(G,u[0]),i=>f(G,i),u[0],I);if(t(d,g)||!t(e.details.token,d)||!t(e.spender,Y))throw new s(te);B.permit={...e.details,spender:e.spender,sigDeadline:e.sigDeadline,signature:r}}return B}function V(o,n){return t(o.currency0,n.currency0)&&t(o.currency1,n.currency1)&&o.fee===n.fee&&o.tickSpacing===n.tickSpacing&&t(o.hooks,n.hooks)}function de(o,n){return o.length===n.length&&o.every((a,l)=>V(a.poolKey,n[l].poolKey)&&a.zeroForOne===n[l].zeroForOne)}var pe=1200,me=1800;function ye(o){let n=0;for(let{poolKey:a}of o.legs)if(t(a.hooks,H))n++;else if(!V(a,Z))throw new s("Swap leaves the FOBO route: every pool must be a FoboHook pool or FOBO's ETH/USDG pool.");if(n===0)throw new s("Swap is not a FOBO route: it uses no FoboHook pool.")}export{Y as a,ie as b,H as c,ae as d,Z as e,ce as f,ue as g,le as h,V as i,de as j,pe as k,me as l,ye as m};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as w,d as A,i as T,m as C}from"./NWNYJ26T.js";import{b as c,j as _}from"./
|
|
1
|
+
import{c as w,d as A,i as T,m as C}from"./NWNYJ26T.js";import{b as c,j as _}from"./EWZFZUVF.js";import{a as r}from"./XSD5NL7J.js";import{encodeFunctionData as O,getAddress as x,keccak256 as D,parseAbi as P}from"viem";var g=x("0x03695edcfcf2c62a4dc36b032eb2513cd1d928a2"),S="0x0b3d9287f6788f70f8f32597eb50d8aaf791742819ecf58053f3e22fd96cb76b",$=["beefy_vault_manage"],I=P(["function owner() view returns(address)","function want() view returns(address)","function vault() view returns(address)","function strategy() view returns(address)","function approvalDelay() view returns(uint256)","function stratCandidate() view returns(address implementation,uint256 proposedTime)","function earn()","function proposeStrat(address)","function upgradeStrat()","function inCaseTokensGetStuck(address)","function transferOwnership(address)","function renounceOwnership()"]),i=x(_[c].vaults.beefyTestedLpVault.address);function d(p){return T(p,"Provide a contract or wallet address.",A)}function m(p){return C(p,"Invalid Beefy administration integer.")}var F=p=>{async function v(e){try{return await e()}catch(t){throw new r(p.plainError(t))}}function b(e,t){if(e.chainId!==void 0&&e.chainId!==c)throw new r("Beefy requires chain 4663.");for(let u of Object.keys(e))if(!["chainId","vault",...t].includes(u))throw new r(`Unsupported Beefy input: ${u}.`);if(d(e.vault)!==i)throw new r("Administration is qualified only for the measured up33-weth-up vault.")}async function k(){let e=p.clientFor(c);if(await e.getChainId()!==c)throw new r("The Beefy endpoint must report chain 4663.");let t=m(await e.getBlockNumber()),[u,n]=await Promise.all([e.getCode({address:i,blockNumber:t}),e.getCode({address:g,blockNumber:t})]),o=`0x363d3d373d3d3d363d73${g.slice(2).toLowerCase()}5af43d82803e903d91602b57fd5bf3`;if(u?.toLowerCase()!==o||!n||D(n)!==S)throw new r("The Beefy vault implementation no longer matches its qualified code hash.");let a=(E,N)=>e.readContract({address:E,abi:I,functionName:N,blockNumber:t}),[f,h,y,s,l,B]=await Promise.all([a(i,"owner"),a(i,"want"),a(i,"strategy"),a(i,"approvalDelay"),a(i,"stratCandidate"),e.getBlock({blockNumber:t})]);if(!Array.isArray(l)||l.length!==2)throw new r("Invalid Beefy strategy candidate.");return{client:e,blockNumber:t,owner:d(f),want:d(h),strategy:d(y),approvalDelay:m(s),candidate:{implementation:d(l[0]),proposedTime:m(l[1])},timestamp:m(B.timestamp),read:a}}return{tools:[{name:"beefy_vault_admin",inputSchema:{type:"object",properties:{vault:{...w,description:"Address of the Beefy vault contract; only the qualified up33-weth-up vault is supported."},chainId:{const:c,description:"Chain id; only 4663 (Robinhood Chain mainnet) is supported. Optional."}},required:["vault"],additionalProperties:!1},execute:e=>v(async()=>{b(e,[]);let t=await k();return{vault:i,chainId:c,owner:t.owner,want:t.want,strategy:t.strategy,candidate:{implementation:t.candidate.implementation,proposedTime:t.candidate.proposedTime.toString()},approvalDelay:t.approvalDelay.toString(),block:t.blockNumber.toString(),implementation:g,codeHash:S}})},{name:"beefy_vault_manage",inputSchema:{type:"object",properties:{vault:{...w,description:"Address of the Beefy vault contract; only the qualified up33-weth-up vault is supported."},action:{enum:["earn","propose_strategy","upgrade_strategy","rescue_tokens","transfer_ownership","renounce_ownership"],description:"earn: put idle want to work; propose_strategy then upgrade_strategy after the approval delay; rescue stuck tokens; transfer or permanently renounce ownership. Owner only except earn."},strategy:{...w,description:"Address of the new strategy contract to propose, deployed for this vault and its want token."},token:{...w,description:"Address of the stuck token to rescue to the owner wallet; the want token cannot be rescued."},recipient:{...w,description:"Address of the new owner for transfer_ownership; must not be the zero address."},chainId:{const:c,description:"Chain id; only 4663 (Robinhood Chain mainnet) is supported. Optional."}},required:["vault","action"],additionalProperties:!1},execute:(e,t)=>v(async()=>{let u={earn:[],propose_strategy:["strategy"],upgrade_strategy:[],rescue_tokens:["token"],transfer_ownership:["recipient"],renounce_ownership:[]},n=String(e.action);if(!Object.hasOwn(u,n))throw new r("Choose a documented Beefy vault management action.");b(e,["action",...u[n]]),t=d(t);let o=await k();if(n!=="earn"&&o.owner!==t)throw new r("This wallet is not the Beefy vault owner.");let a,f=[];if(n==="earn")a="earn";else if(n==="propose_strategy"){let s=d(e.strategy),l=await o.client.getCode({address:s,blockNumber:o.blockNumber});if(!l||l==="0x"||d(await o.read(s,"vault"))!==i||d(await o.read(s,"want"))!==o.want)throw new r("The proposed strategy must be deployed for this exact vault and want token.");a="proposeStrat",f=[s]}else if(n==="upgrade_strategy"){if(o.candidate.implementation==="0x0000000000000000000000000000000000000000"||o.candidate.proposedTime+o.approvalDelay>=o.timestamp)throw new r("Propose a strategy first and wait until the on-chain approval delay has fully passed.");a="upgradeStrat"}else if(n==="rescue_tokens"){let s=d(e.token);if(s===o.want)throw new r("The vault owner cannot rescue the want token.");a="inCaseTokensGetStuck",f=[s]}else if(n==="transfer_ownership"){let s=d(e.recipient);if(s==="0x0000000000000000000000000000000000000000")throw new r("Ownership transfer needs a nonzero recipient.");a="transferOwnership",f=[s]}else a="renounceOwnership";let h=[p.unsignedTx({to:i,data:O({abi:I,functionName:a,args:f}),value:"0",chainId:c,description:`Beefy vault ${n}.`})],y=n==="renounce_ownership"?" This permanently gives up owner administration.":n==="rescue_tokens"?" Rescued tokens go to the calling owner wallet; want is excluded.":n==="propose_strategy"||n==="upgrade_strategy"?" Strategy changes affect all vault depositors.":"";return{txs:h,inputs:[],preview:await p.preview(h,t),summary:`Beefy vault action ${n} on ${i}.${y} Inspect the preview before local human confirmation.`}})}]}};export{g as a,S as b,$ as c,I as d,F as e};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as U}from"./CQ5WRWV4.js";import{a as O,b as C,c as J,d as de}from"./IV4K7FMD.js";import{a as Ae,e as he}from"./GVCNTGLC.js";import{d as Se}from"./KKGHXNM4.js";import{a as ee,d as ve,f as Oe}from"./3XY44BP5.js";import{b as E}from"./7WXAS54T.js";import{a as ce,b as me,d as le,f as $,g as q,h as H,j as pe,k as fe,l as we,m as ge}from"./TNHU5UBQ.js";import{a as f,b as Y,c as ue}from"./43LI5NKJ.js";import{c as Z}from"./5TUXSOMI.js";import{g as y}from"./NWNYJ26T.js";import{b as o,e as ie}from"./IX3GZMTM.js";import{A as ae,b as F,j as G,x as X,y as M}from"./EWZFZUVF.js";import{a as r}from"./XSD5NL7J.js";import{decodeFunctionData as L,encodeFunctionData as z,parseAbi as ke}from"viem";var Te=60,oe=50,st=200;var ye="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",_="0x0000000000000000000000000000000000000000",R=G[4663].routes.kyberswap.address,P=G[4663].routes.velora.address,re=X[4663].kyberswap.toLowerCase(),Ie=X[4663].velora.toLowerCase(),Ce="0x0000000000000000000000000000000000000000000000000000000000000000",Le=[le.pons,...$],K=ke(["function swap((address callTarget, address approveTarget, bytes targetData, (address srcToken, address dstToken, address[] srcReceivers, uint256[] srcAmounts, address[] feeReceivers, uint256[] feeAmounts, address dstReceiver, uint256 amount, uint256 minReturnAmount, uint256 flags, bytes permit) desc, bytes clientData) execution) payable returns (uint256 returnAmount, uint256 gasUsed)"]),W=ke(["function swapExactAmountIn(address executor, (address srcToken, address destToken, uint256 fromAmount, uint256 toAmount, uint256 quotedAmount, bytes32 metadata, address beneficiary) swapData, uint256 partnerAndFee, bytes permit, bytes executorData) payable returns (uint256 receivedAmount, uint256 submittedAmount, uint256 augustusFeeAmount)"]),B=class extends r{name="NoRouteError";constructor(t="No swap route is available for this token pair and amount."){super(t)}},Q=class extends r{name="ExpiredQuoteError";constructor(t="Quote has expired. Request a fresh quote."){super(t)}},_e=1e3,I=new Map;function Fe(e){for(let[t,n]of I)BigInt(e)>=o(n.expiresAt)&&I.delete(t)}function ne(e){return{...e,...e.sourcePoolRoute!==void 0?{sourcePoolRoute:structuredClone(e.sourcePoolRoute)}:{},...e.txs?{txs:e.txs.map(t=>({...t}))}:{}}}function be(e){let t=ne(e);return t.txs&&(t.txs.forEach(Object.freeze),Object.freeze(t.txs)),Object.freeze(t)}var Pe=["router","from","to","wallet","amountIn","amountOut","minAmountOut","expiresAt","chainId","spender","value","hookrPoolId","gasLimit","ponsCurveToken","ponsPoolToken","blockNumber","calldataMinAmountOut","expectedSpend","expectedRefund","oakFee","oakFeeBps","oakFeeToken","grossAmountOut","venueFee","venueFeeBps"];function j(e,t,n=!1){for(let s of Pe)if(!(s==="expiresAt"&&n&&o(e.expiresAt)<=o(t.expiresAt))&&e[s]!==void 0&&String(e[s]).toLowerCase()!==String(t[s]).toLowerCase())throw new r(`Quote ${s} does not match the accepted quote.`)}function N(e=Date.now){let t=e();if(!Number.isFinite(t)||t<0)throw new r("Clock must return a non-negative timestamp.");return t>1e11?Math.floor(t/1e3):Math.floor(t)}function x(e){let t=e.toLowerCase();return t===ye.toLowerCase()||t===_.toLowerCase()}function Qe(e,t=oe){if(!Number.isInteger(t)||t<0||t>=1e4)throw new r("Slippage must be an integer from 0 to 9999 bps.");return ie(e,String(1e4-t),"10000","floor")}var Ne=200;function at(e){if(typeof e!="number"||!Number.isFinite(e)||!/^\d+(?:\.\d{1,2})?$/.test(String(e)))throw new r("Velora returned an unsupported venue fee. Request a fresh quote.");let[t,n=""]=String(e).split("."),s=Number(t)*100+Number(n.padEnd(2,"0"));return se(s),s}function se(e){if(!Number.isInteger(e)||e<0||e>Ne)throw new r("Velora returned an unsupported venue fee. Request a fresh quote.")}function xe(e,t=O.bps){return se(t),o(e)*10000n/BigInt(1e4-t)+1n}function Ve(e,t){if(se(t),t!==O.bps||e!==J)throw new r("Velora partnerAndFee must match the pinned Oak fee, recipient and flags.")}function Ee(e){if(e.oakFeeBps===O.bps)return`${de()} ${e.provider==="velora"?"Oak\u2019s share is paid to the Oak treasury.":"Paid to the Oak treasury."} Venue fee: ${e.venueFee} base units (${e.venueFeeBps} bps) retained by ${e.provider??"venue"}. Output and minimum are net.${e.provider==="velora"?" Velora retains 15% of the partner fee; Oak receives 85% (about 21.25 bps).":""}`;if(e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak fee requires the pinned rate and token; venue fees must never be counted as Oak income.");let t=e.provider??"venue";return`Venue fee: ${e.venueFee} base units (${e.venueFeeBps} bps) retained by ${t}; Oak swap fee: 0 (venue fee is never Oak income).`}function Me(e){f(e.from),f(e.to),f(e.wallet);let t=e.callTarget??M[F].kyberswap.address,n=e.approveTarget??_;f(t),f(n);let s=o(e.amountIn),a=o(e.minAmountOut);return z({abi:K,functionName:"swap",args:[{callTarget:t,approveTarget:n,targetData:e.targetData??"0x",desc:{srcToken:e.from,dstToken:e.to,srcReceivers:x(e.from)?[]:[t],srcAmounts:x(e.from)?[]:[s-BigInt(C(e.amountIn))],feeReceivers:[O.recipient],feeAmounts:[BigInt(O.bps)],dstReceiver:e.wallet,amount:s,minReturnAmount:a,flags:640n,permit:"0x"},clientData:e.clientData??"0x"}]})}function Ue(e){f(e.from),f(e.to),f(e.wallet);let t=e.executor??M[F].velora.address;return f(t),z({abi:W,functionName:"swapExactAmountIn",args:[t,{srcToken:e.from,destToken:e.to,fromAmount:o(e.amountIn),toAmount:o(e.minAmountOut),quotedAmount:o(e.amountOut),metadata:e.metadata??Ce,beneficiary:e.wallet},e.partnerAndFee??J,"0x",e.executorData??"0x"]})}function $e(e){if(typeof e!="string"||!/^0x([0-9a-fA-F]{2})+$/.test(e)||e.length<10)throw new r("Swap calldata must contain a 4-byte function selector.");let t=e.slice(0,10).toLowerCase();if(t===re)return L({abi:K,data:e}).args[0].desc.minReturnAmount;if(t===Ie)return L({abi:W,data:e}).args[1].toAmount;if(t==="0x3593564c")return H(e,Le).amountOutMinimum;let n=L({abi:Ae,data:e});if(n.functionName==="buy"||n.functionName==="sell")return n.args[1];throw new r(`Unsupported swap router selector ${t}.`)}function Be(e,t,n=!1){let s=o(t),a=$e(e);if(a<=0n||s<=0n||a!==s&&!(n&&(a>s||e.slice(0,10).toLowerCase()===re&&a+1n===s)))throw new r(`Built swap calldata minimum output (${a}) does not match the accepted quote minimum (${s}).`);return a}function De(e,t){let{from:n,to:s,wallet:a,amountIn:c}=t;if(!n||!s||!a||c===void 0)throw new r("Accepted quote must include input, output, amount and wallet.");for(let i of[n,s,a,t.router,e.to])f(i);let l=(i,m,w)=>{if(i.toLowerCase()!==m.toLowerCase())throw new r(`Built swap ${w} does not match the accepted quote.`)};if(l(e.to,t.router,"router"),e.chainId!==(t.chainId??F))throw new r("Built swap chain does not match the accepted quote.");let g=x(n)?o(c):0n;if(o(e.value)!==g||t.value!==void 0&&o(t.value)!==g)throw new r("Built swap value does not match the accepted quote input.");let A=e.data.slice(0,10).toLowerCase(),u=t.router.toLowerCase();if(u===R.toLowerCase()||u===P.toLowerCase()){let i=u===R.toLowerCase(),m=i?c:t.grossAmountOut,w=i?n:s;if(t.oakFeeBps!==O.bps||m===void 0||t.oakFee!==C(m)||t.oakFeeToken?.toLowerCase()!==E(w).toLowerCase())throw new r("Oak fee must match the pinned rate, token and amount.")}let d;if(u===R.toLowerCase()&&A===re){l(t.spender??t.router,R,"spender");let i=L({abi:K,data:e.data});if(z({abi:K,...i}).toLowerCase()!==e.data.toLowerCase())throw new r("KyberSwap calldata must be canonically decodable.");let{callTarget:m,approveTarget:w,desc:p}=i.args[0];l(m,M[F].kyberswap.address,"executor"),l(w,_,"executor approval target");let S=x(n);if(p.srcReceivers.length!==p.srcAmounts.length||(S?p.srcReceivers.length!==0:p.srcReceivers.length===0||p.srcAmounts.some(h=>h<=0n)||p.srcAmounts.reduce((h,k)=>h+k,0n)!==o(c)-BigInt(C(c))))throw new r("KyberSwap source transfers must send the exact input less the pinned fee to the pinned executor or verified input pool.");for(let h of p.srcReceivers)if(h.toLowerCase()!==m.toLowerCase()&&!Se(n,h,e.data))throw new r(`KyberSwap source transfers: receiver ${h} is not a verified input pool or the pinned executor.`);if(p.feeReceivers.length!==1||p.feeAmounts.length!==1||p.feeReceivers[0].toLowerCase()!==O.recipient.toLowerCase()||p.feeAmounts[0]!==BigInt(O.bps)||p.flags!==640n||p.permit!=="0x")throw new r("KyberSwap fee recipients, fee amounts, flags and permit must match the pinned Oak input-fee policy.");d={from:p.srcToken,to:p.dstToken,wallet:p.dstReceiver,amount:p.amount}}else if(u===P.toLowerCase()&&A===Ie){l(t.spender??t.router,P,"spender");let i=L({abi:W,data:e.data});if(z({abi:W,...i}).toLowerCase()!==e.data.toLowerCase())throw new r("Velora calldata must be canonically decodable.");let[m,w,p,S]=i.args;if(!ae.some(h=>h.toLowerCase()===m.toLowerCase()))throw new r("Built swap executor does not match the accepted quote.");if(S!=="0x")throw new r("Velora permit must match the pinned empty-permit policy.");if(Ve(p,t.oakFeeBps??O.bps),t.calldataMinAmountOut!==void 0&&o(t.calldataMinAmountOut)!==xe(t.minAmountOut,O.bps))throw new r("Velora calldata minimum must cover the accepted net output, venue fee and router dust.");if(t.calldataMinAmountOut!==void 0&&(w.quotedAmount!==o(t.grossAmountOut??"0")||w.quotedAmount<o(t.calldataMinAmountOut)))throw new r("Velora quoted gross output must match the accepted quote and cover its calldata minimum.");if(p!==0n&&t.calldataMinAmountOut===void 0)throw new r("Velora venue fee requires a fee-adjusted calldata minimum.");d={from:w.srcToken,to:w.destToken,wallet:w.beneficiary,amount:w.fromAmount}}else if(t.provider==="pons"&&(t.ponsPoolToken||t.ponsCurveToken))d=he(e,{...t,from:n,to:s,wallet:a});else if(t.provider==="hookr"){if(!t.hookrPoolId||!y(t.router,ee)||!y(t.spender??t.router,ee))throw new r("Hookr quote must bind the pinned Router and pool.");if(e.gasLimit!==t.gasLimit||t.gasLimit!==void 0&&(o(t.gasLimit)===0n||o(t.gasLimit)>10000000n))throw new r("Hookr gas limit is zero, exceeds the ceiling or differs from the quote.");let i=ve(e,{poolId:t.hookrPoolId,from:x(n)?_:n,to:x(s)?_:s,wallet:a,amountIn:o(c),minimum:o(t.minAmountOut),now:BigInt(N())});d={from:i.zeroForOne?i.key.currency0:i.key.currency1,to:i.zeroForOne?i.key.currency1:i.key.currency0,wallet:i.recipient,amount:-i.amountSpecified},x(n)&&(d.from=n),x(s)&&(d.to=s)}else if(t.provider==="fobo")d=ze(e,{...t,from:n,to:s,wallet:a});else throw new r("Built swap selector does not match the accepted router.");if(l(d.from,n,"input token"),l(d.to,s,"output token"),l(d.wallet,a,"recipient"),d.amount!==o(c))throw new r("Built swap input amount does not match the accepted quote.");t.provider!=="hookr"&&Be(e.data,t.calldataMinAmountOut??t.minAmountOut,u===R.toLowerCase())}var He="FOBO route: the quoted output is already net of FOBO's pool taxes (2.5% per pool after a coin's first minute, higher during it). Oak swap fee: 0 on FOBO's route.";function ze(e,t){let n=(c,l,g)=>{if(!y(c,l))throw new r(`Built swap ${g} does not match the accepted quote.`)};if(n(t.router,ce,"FOBO router"),n(t.spender??t.router,me,"FOBO spender"),t.oakFeeBps!==void 0||t.oakFee!==void 0&&o(t.oakFee)!==0n)throw new r("FOBO route trades carry no Oak fee.");let s=H(e.data,$);ge(s),n(s.currencyIn,q(t.from),"input token"),n(s.currencyOut,q(t.to),"output token");let a=o(t.expiresAt);if(s.deadline>a+BigInt(fe))throw new r("FOBO swap deadline is more than 20 minutes past the accepted quote. Request a fresh quote.");if(s.permit&&(s.permit.amount!==s.amountIn||BigInt(s.permit.expiration)>s.permit.sigDeadline||s.permit.sigDeadline>a+BigInt(we)))throw new r("FOBO permit must be for the exact swap input, expire no later than its signature deadline, and end within 30 minutes of the quote.");if(t.data!==void 0&&!y(t.data,e.data)&&!pe(H(t.data,$).legs,s.legs))throw new r("Built swap FOBO pools or direction differ from the accepted quote.");return{from:t.from,to:t.to,wallet:t.wallet,amount:s.amountIn}}function te(e,t={}){if(!e||typeof e.quoteId!="string"||!e.quoteId.trim())throw new r("Quote must include a non-empty quoteId.");if(f(e.router),e.oakFeeBps!==void 0){let v=t.provider??e.provider,b=v==="kyberswap"?t.amountIn??e.amountIn:e.grossAmountOut,V=v==="kyberswap"?t.from??e.from:t.to??e.to;if(!["kyberswap","velora"].includes(v??"")||e.oakFeeBps!==O.bps||b===void 0||e.oakFee!==C(b)||!V||e.oakFeeToken?.toLowerCase()!==E(V).toLowerCase())throw new r("Oak fee must match the pinned rate, token and amount.")}else if(e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak fee requires the pinned rate and token; venue fees must never be counted as Oak income.");let n=o(e.amountOut),s=e.destAmountAfterFee??e.netAmountOut,a,c,l;if(s!==void 0){if(c=o(s),a=e.grossAmountOut!==void 0?o(e.grossAmountOut):n>=c?n:c,a<c)throw new r("Gross output cannot be less than net output.");l=e.venueFee!==void 0?o(e.venueFee):a-c}else if(e.grossAmountOut!==void 0){if(a=o(e.grossAmountOut),c=n,a<c)throw new r("Gross output cannot be less than net output.");l=e.venueFee!==void 0?o(e.venueFee):a-c}else e.venueFee!==void 0?(l=o(e.venueFee),c=n,a=c+l):(c=n,a=n,l=0n);if(c<=0n)throw new B("Quote output amount must be positive.");let g=t.slippageBps??e.slippageBps??oe,A=e.minAmountOut!==void 0?o(e.minAmountOut):o(Qe(c.toString(),g));if(A<=0n||A>a)throw new r("Quote minAmountOut must be positive and not exceed gross output.");if((t.provider??e.provider)==="velora"&&e.calldataMinAmountOut!==void 0){if(o(e.calldataMinAmountOut)!==xe(A.toString(),O.bps)||o(e.calldataMinAmountOut)>a)throw new r("Velora calldata minimum must cover the accepted net output, venue fee and router dust.")}else if(e.calldataMinAmountOut!==void 0||e.ponsCurveToken!==void 0){if((t.provider??e.provider)!=="pons"||!e.ponsCurveToken)throw new r("Curve minimum requires a Pons curve quote.");f(e.ponsCurveToken);let v=o(t.amountIn??e.amountIn??"0"),b=o(e.expectedSpend??"0"),V=o(e.expectedRefund??"0"),Re=o(e.calldataMinAmountOut??"0");if(v<=0n||b<=0n||b+V!==v||Re*b/v!==A)throw new r("Pons actual minimum and refund do not match the encoded minimum.")}let u=N(t.now),d=BigInt(u+Te),i=e.expiresAt!==void 0?o(e.expiresAt):d,m=(i>d?d:i).toString(),w=l.toString(),p=e.venueFeeBps??(a>0n&&l>0n?Number((l*10000n+a/2n)/a):0),S=t.provider??e.provider??(e.router.toLowerCase()===P.toLowerCase()?"velora":"kyberswap"),h=S==="fobo"?He:(S==="pons"||S==="hookr")&&e.feeDisclosure?e.feeDisclosure:Ee({provider:S,venueFee:w,venueFeeBps:p,oakFee:e.oakFee??"0",oakFeeBps:e.oakFeeBps}),k={...e,quoteId:e.quoteId,amountOut:c.toString(),minAmountOut:A.toString(),router:e.router,expiresAt:m,provider:S,grossAmountOut:a.toString(),destAmountAfterFee:c.toString(),netAmountOut:c.toString(),venueFee:w,venueFeeBps:p,oakFee:e.oakFee??"0",feeDisclosure:h,...t.from??e.from?{from:E(t.from??e.from)}:{},...t.to??e.to?{to:E(t.to??e.to)}:{},...t.amountIn??e.amountIn?{amountIn:t.amountIn??e.amountIn}:{},...t.wallet??e.wallet?{wallet:t.wallet??e.wallet}:{},slippageBps:g,chainId:t.chainId??e.chainId??F,spender:e.spender??e.router,...t.allowance??e.allowance?{allowance:t.allowance??e.allowance}:{}};if(BigInt(u)>=o(m))throw new Q;if(t.cache===!1)return k;if(Fe(u),BigInt(u)>=o(m))throw new Q;let T=I.get(k.quoteId);if(T){j(k,T,!0);let v=be({...T,expiresAt:k.expiresAt});return I.set(v.quoteId,v),ne(v)}for(;I.size>=_e;)I.delete(I.keys().next().value);let D=be(k);return I.set(D.quoteId,D),ne(D)}async function it(e,t,n={}){e={...e},f(e.from),f(e.to),f(e.wallet),e.from=E(e.from),e.to=E(e.to);let s=o(e.amountIn);if(s<=0n)throw new r("Swap amountIn must be greater than zero.");let a=e.slippageBps??oe;if(!Number.isInteger(a)||a<0||a>=1e4)throw new r("Slippage must be an integer from 0 to 9999 bps.");if(!Array.isArray(t)||t.length===0)throw new B;let c={from:e.from,to:e.to,amountIn:s.toString(),slippageBps:a},l=await Promise.allSettled(t.map(async u=>{let d=await(u.quotePrices??u.quote).call(u,{...c},e.wallet);return{quote:te(d,{provider:u.name,from:e.from,to:e.to,amountIn:s.toString(),wallet:e.wallet,slippageBps:a,chainId:e.chainId??F,allowance:e.allowance,now:e.now,cache:!1}),provider:u}})),g,A=[];for(let u of l)u.status==="rejected"&&(g??=Z(u.reason)),u.status==="fulfilled"&&o(u.value.quote.expiresAt)>BigInt(N(e.now))&&A.push(u.value);if(A.length===0){let u=l.some(d=>d.status==="rejected"&&d.reason instanceof Error&&d.reason.message===U)&&l.every(d=>d.status==="rejected"&&(d.reason instanceof B||d.reason instanceof Oe||d.reason instanceof Error&&d.reason.message===U));throw g??new B(u?U:void 0)}A.sort((u,d)=>{let m=o(d.quote.amountOut)-o(u.quote.amountOut)||o(d.quote.minAmountOut)-o(u.quote.minAmountOut);return m>0n?1:m<0n?-1:0});for(let{quote:u,provider:d}of A)try{if(BigInt(N(e.now))>=o(u.expiresAt))continue;if(n.deferBuild||!d.prepareQuote)return te(u,{now:e.now});let i=await d.prepareQuote(u.quoteId,e.wallet);if(i.quoteId!==u.quoteId)throw new r("Prepared quote ID does not match the selected route.");if(j(i,u,!0),!i.data)throw new r("Selected route did not return swap calldata.");let m={...u,expiresAt:i.expiresAt,data:i.data,value:i.value,allowance:i.allowance??u.allowance};return De(Y({to:m.router,data:i.data,value:i.value??"0",chainId:m.chainId??F,description:"Selected swap route"}),m),te(m,{now:e.now})}catch(i){g??=Z(i);continue}throw g??new B}function ut(e,t={}){if(!e||typeof e.quoteId!="string"||!e.quoteId.trim())throw new r("Provide a valid quote to build a swap.");f(e.router);let n=I.get(e.quoteId),s=N(t.now);if(Fe(s),!n||BigInt(s)>=o(n.expiresAt))throw I.delete(e.quoteId),new Q;if(e.oakFeeBps===void 0&&e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak fee requires the pinned rate and token; venue fees must never be counted as Oak income.");j(e,n),j({...n,...t},n);let a=n.from,c=n.to,l=n.amountIn,g=n.wallet;if(!a||!c||!g||l===void 0)throw new r("Accepted quote must include input, output, amount and wallet.");let A=n.chainId??F,u=n.spender??n.router,d=t.allowance??e.allowance??n?.allowance??"0";f(a),f(c),f(g),f(u);let i=o(l);if(i<=0n)throw new r("Swap amountIn must be greater than zero.");let m=o(n.minAmountOut);if(m<=0n)throw new r("Swap minAmountOut must be greater than zero.");let w=e.router.toLowerCase()===P.toLowerCase(),p=t.data??e.data??n?.data??(w?Ue({from:a,to:c,amountIn:i.toString(),amountOut:n.grossAmountOut??n.amountOut,minAmountOut:n.calldataMinAmountOut??m.toString(),wallet:g}):Me({from:a,to:c,amountIn:i.toString(),minAmountOut:m.toString(),wallet:g}));n.provider!=="hookr"&&Be(p,n.calldataMinAmountOut??m.toString(),n.router.toLowerCase()===R.toLowerCase());let S=n.venueFee??"0",h=n.venueFeeBps??0,k=n.provider??(w?"velora":"kyberswap"),T=n.feeDisclosure??Ee({provider:k,venueFee:S,venueFeeBps:h,oakFee:n.oakFee??"0",oakFeeBps:n.oakFeeBps}),D=x(a),v=t.value??e.value??n?.value??(D?i.toString():"0"),b=Y({to:e.router,data:p,value:v,chainId:A,...n.provider==="hookr"&&n.gasLimit!==void 0?{gasLimit:n.gasLimit}:{},description:`Swap ${i} base units of ${a} for at least ${m} base units of ${c} via ${k} (${e.router}). ${T}`});return n.provider==="hookr"&&n.gasLimit!==void 0&&(b.gasLimit=n.gasLimit),De(b,n),D||o(d)>=i?[b]:[ue(a,u,i.toString(),A),b]}export{Te as a,oe as b,st as c,ye as d,_ as e,K as f,B as g,Q as h,_e as i,ne as j,be as k,j as l,N as m,x as n,Qe as o,Ne as p,at as q,xe as r,Ve as s,Ee as t,Me as u,Ue as v,$e as w,Be as x,De as y,He as z,te as A,it as B,ut as C};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as l,c as A}from"./
|
|
1
|
+
import{b as l,c as A}from"./5KKAN7XQ.js";import{b as h}from"./SCG5HWMN.js";import{e as o,h as b}from"./NWNYJ26T.js";import{b as f}from"./EWZFZUVF.js";var c=()=>({bonus:"unavailable",checks:["LayerBank bonus is unavailable. The base rate excludes rewards."]});function d(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}function I(e){let n=typeof e=="string"&&/^\d+$/.test(e)?Number(e):e;return typeof n=="number"&&Number.isSafeInteger(n)&&n>0?n:void 0}function k(e,n){return Math.abs(e-n)<=1e-8*Math.max(1,e,n)}function L(e,n){let t=e.aprRecord;if(!d(e.apr)||!o(t)||!d(t.cumulated)||!Array.isArray(t.breakdowns)||!t.breakdowns.length||!Array.isArray(e.campaigns))return;let m=e.campaigns,u=new Set,a=0,i=1/0;for(let s of t.breakdowns){if(!o(s)||s.type!=="CAMPAIGN"||!d(s.value)||typeof s.identifier!="string"||u.has(s.identifier))return;u.add(s.identifier);let r=m.find(g=>o(g)&&g.campaignId===s.identifier);if(!o(r)||r.distributionChainId!==f||r.opportunityId!==e.id||!d(r.apr)||!k(r.apr,s.value)||!o(r.params)||!b(r.params.targetToken,l)||!b(r.params.underlyingToken,A.address))return;let y=I(r.startTimestamp),p=I(r.endTimestamp);if(y===void 0||p===void 0||y>n||p<=n||y>=p)return;a+=s.value,i=Math.min(i,p)}if(!(!d(a)||!k(a,e.apr)||!k(a,t.cumulated)))return{bonus:{ratePct:a,endsAt:i},checks:[]}}async function T(e=h(),n=Math.floor(Date.now()/1e3)){try{let t=new URL("https://api.merkl.xyz/v4/opportunities");t.search=new URLSearchParams({chainId:String(f),mainProtocolId:"layerbank",campaigns:"true",items:"100"}).toString();let m=await e(t.toString(),{method:"GET",headers:{"User-Agent":"oak-core/layerbank"}});if(!m.ok)return c();let u=await m.json();if(!Array.isArray(u))return c();let a=u.filter(i=>o(i)&&i.chainId===f&&b(i.explorerAddress,l)&&i.status==="LIVE"&&i.action==="LEND");return a.length!==1||!o(a[0])?c():L(a[0],n)??c()}catch{return c()}}export{T as a};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as p,e as y}from"./
|
|
1
|
+
import{a as p,e as y}from"./BWE5PXRE.js";import{a as m}from"./UNBRUWSV.js";import{r as v}from"./GV6FZ6UG.js";import{a as f}from"./66F5ZH34.js";import{b as l}from"./EWZFZUVF.js";import{a as u}from"./XSD5NL7J.js";import{encodeFunctionData as w,getAddress as a,parseAbi as I}from"viem";var P="(address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks)",$="(address tokenIn,address tokenOut,uint24 fee,address recipient,uint256 amountIn,uint256 amountOutMinimum,uint160 sqrtPriceLimitX96)",g=I([`function swapExactIn(${P} key,bool zeroForOne,uint128 amountIn,uint256 minOut,uint160 sqrtPriceLimitX96,address to,uint256 deadline) returns (uint256 paid,uint256 out)`,`function exactInputSingle(${$} params) payable returns (uint256 amountOut)`,"function multicall(uint256 deadline,bytes[] data) payable returns (bytes[] results)"]),E=I(["function quoteExactInputSingle((address tokenIn,address tokenOut,uint256 amountIn,uint24 fee,uint160 sqrtPriceLimitX96) params) returns (uint256 amountOut,uint160 sqrtPriceX96After,uint32 initializedTicksCrossed,uint256 gasEstimate)"]),_=I([`function quoteExactInputSingle((${P} poolKey,bool zeroForOne,uint128 exactAmount,bytes hookData) params) returns (uint256 amountOut,uint256 gasEstimate)`]),C="0x0000000000000000000000000000000000000000",h={symbol:{type:"string",enum:m.tokens.map(e=>e.symbol),description:'Official stock ticker with a published Priors pool. Example: "TSLA".'},side:{type:"string",enum:["buy","sell"],description:'Choose "buy": pay USDG for the stock token; "sell": pay the stock token for USDG.'},amountIn:f('Input amount in base units: USDG (6 decimals) to buy, or the stock token (its decimals) to sell. Example: "1000000" = 1 USDG.')};async function O(e,o){let n=m.tokens.find(s=>s.symbol===e.symbol);if(!n||e.side!=="buy"&&e.side!=="sell")throw new u("Choose a published stock symbol and buy or sell.");let t=await v(String(e.symbol),{context:o});if(t.kind!=="official_stock"||t.address!==a(n.token))throw new u("Published Priors stock pool does not match the official stock contract address. Retry after the pool mapping is updated.");let r=y(e.amountIn,"amountIn",128);if(r===0n)throw new u("amountIn must be positive base units.");return{token:n,identity:t,amount:r,input:e.side==="buy"?p.usdg:a(n.token),output:e.side==="buy"?a(n.token):p.usdg}}function x(e,o,n){let[t,r]=BigInt(p.usdg)<BigInt(e)?[p.usdg,e]:[e,p.usdg];return{currency0:t,currency1:r,fee:o,tickSpacing:n,hooks:C}}function R(e){return{tools:[{name:"priors_stock_quote",inputSchema:{type:"object",properties:h,required:Object.keys(h),additionalProperties:!1},async execute(o,n){if(e.network==="testnet")throw new u("Priors stock swaps require mainnet chain 4663.");let t=await O(o,e),r=e.clientFor(l),s=await r.getBlockNumber({cacheTime:0}),k=await Promise.all(t.token.pools.map(async(i,d)=>{try{let c=x(a(t.token.token),i.fee,"tickSpacing"in i?i.tickSpacing:0),b=i.v===3?await r.simulateContract({address:a(m.v3.quoter),abi:E,functionName:"quoteExactInputSingle",args:[{tokenIn:t.input,tokenOut:t.output,amountIn:t.amount,fee:i.fee,sqrtPriceLimitX96:0n}],account:n,blockNumber:s}):await r.simulateContract({address:a(m.v4.quoter),abi:_,functionName:"quoteExactInputSingle",args:[{poolKey:c,zeroForOne:t.input===c.currency0,exactAmount:t.amount,hookData:"0x"}],account:n,blockNumber:s});return{poolIndex:d,version:i.v,amountOut:b.result[0].toString()}}catch(c){return{poolIndex:d,version:i.v,error:e.plainError(c)}}}));return{chainId:l,blockNumber:s.toString(),token:t.identity,quotes:k,warning:"Use explicit minimum output with priors_stock_swap and inspect its preview. Issuer restrictions can prevent sale. Quote is no promise of an exit; local regional eligibility remains required."}}},{name:"priors_stock_swap",inputSchema:{type:"object",properties:{...h,poolIndex:{type:"integer",minimum:0,maximum:2,description:"Index of the published pool to use, from priors_stock_quote (0 to 2)."},minOut:f("Minimum output in base units: the stock token when buying, USDG (6 decimals) when selling. Must be positive."),deadline:f("Deadline in Unix seconds, within the next 30 minutes. Example: 1800000000."),eligible:{type:"boolean",description:"Operator/user affirms eligibility for this stock-token trade in their jurisdiction."}},required:[...Object.keys(h),"poolIndex","minOut","deadline","eligible"],additionalProperties:!1},async execute(o,n){if(e.network==="testnet")throw new u("Priors stock swaps require mainnet chain 4663.");if(n=a(n),o.eligible!==!0)throw new u("Confirm local eligibility for Robinhood stock tokens before trading.");let t=await O(o,e),r=y(o.minOut,"minOut"),s=y(o.deadline,"deadline"),k=BigInt(Math.floor(Date.now()/1e3));if(r===0n||s<=k||s>k+1800n||!Number.isSafeInteger(o.poolIndex))throw new u("Provide positive minOut, poolIndex and a deadline within 30 minutes.");let i=t.token.pools[o.poolIndex];if(!i)throw new u("No published pool at that index. Read priors_stock_quote.");let d=x(a(t.token.token),i.fee,"tickSpacing"in i?i.tickSpacing:0),c=t.input===d.currency0,b=a(i.v===3?m.v3.router:m.v4.swapper),q=i.v===3?w({abi:g,functionName:"multicall",args:[s,[w({abi:g,functionName:"exactInputSingle",args:[{tokenIn:t.input,tokenOut:t.output,fee:i.fee,recipient:n,amountIn:t.amount,amountOutMinimum:r,sqrtPriceLimitX96:0n}]})]]}):w({abi:g,functionName:"swapExactIn",args:[d,c,t.amount,r,c?4295128740n:1461446703485210103287273052203988822378723970341n,n,s]}),S=[e.approval(t.input,b,t.amount.toString(),l),e.unsignedTx({to:b,data:q,value:"0",chainId:l,description:`Priors stock ${o.side}: ${t.amount} input base units; minimum ${r}; pinned V${i.v} pool.`})],A=await e.preview(S,n);return{txs:S,expiresAt:s.toString(),summary:`Stock ${o.side} ${o.symbol}: input ${t.amount} base units (${t.input}), minimum output ${r} (${t.output}), receiver ${n}, deadline ${s}. Issuer transfer/sale restrictions apply. Price impact is not measured by this builder; inspect minOut and the preview. ${A.summary}`}}}]}}export{g as a,R as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as G}from"./
|
|
1
|
+
import{a as G}from"./A72ADVYF.js";import{b as I}from"./K5C6QBOO.js";import{b as M}from"./BY2OWKZB.js";import{h as C}from"./2GXHYI23.js";import{b as W}from"./SPJCSEKP.js";import{a as U}from"./43LI5NKJ.js";import{a as P}from"./66F5ZH34.js";import{g as $}from"./NWNYJ26T.js";import{b as R}from"./IX3GZMTM.js";import{b as h,e as y,j as T,k as b}from"./EWZFZUVF.js";import{a as p}from"./XSD5NL7J.js";import{encodeFunctionData as A,erc20Abi as E,parseAbi as N}from"viem";var f=T[h].vaults.spark.address,i={address:b,chainId:h,symbol:"USDG",decimals:y},m={address:f,chainId:h,symbol:"spUSDG",decimals:6},_=(1n<<256n)-1n,k=N(["function asset() view returns (address)","function decimals() view returns (uint8)","function totalAssets() view returns (uint256)","function balanceOf(address owner) view returns (uint256)","function maxDeposit(address receiver) view returns (uint256)","function maxWithdraw(address owner) view returns (uint256)","function maxRedeem(address owner) view returns (uint256)","function previewDeposit(uint256 assets) view returns (uint256)","function previewWithdraw(uint256 assets) view returns (uint256)","function previewRedeem(uint256 shares) view returns (uint256)","function deposit(uint256 assets,address receiver) returns (uint256 shares)","function withdraw(uint256 assets,address receiver,address owner) returns (uint256 shares)","function redeem(uint256 shares,address receiver,address owner) returns (uint256 assets)"]),t=(s,l)=>({token:{...s},amount:l.toString()});function D(s,l,v=!1){if(!s||typeof s!="object"||Array.isArray(s)||Object.keys(s).some(g=>!l||g!=="amount"))throw new p(l?"Provide only the amount for this Spark action.":"Spark listing takes no arguments.");if(!l)return 0n;if(v&&s.amount==="max")return"max";if(typeof s.amount!="string")throw new p("Amount must be a positive integer string in base units.");let n=R(s.amount);if(n===0n||n>_)throw new p("Amount must be positive and within the uint256 range.");return n}var F=s=>{async function l(a){try{return await a()}catch(e){throw new p(s.plainError(e))}}async function v(a){U(a);let e=s.clientFor(h);if(await e.getChainId()!==h)throw new p("Spark requires an endpoint on chain 4663.");let[r,d,o]=await Promise.all([e.readContract({address:f,abi:k,functionName:"asset"}),e.readContract({address:f,abi:k,functionName:"decimals"}),e.readContract({address:b,abi:E,functionName:"decimals"})]);if(typeof r!="string"||!$(r,b))throw new p("Spark does not report the expected USDG asset on chain 4663.");if(d!==m.decimals||o!==i.decimals)throw new p("Spark shares and USDG must both have 6 decimals.");return async(u,x=[])=>{let c=await e.readContract({address:f,abi:k,functionName:u,args:x});if(typeof c!="bigint"||c<0n||c>_)throw new p(`Spark returned an invalid ${u} value.`);return c}}function n(a){let e=a.amount.startsWith("-"),r=e?a.amount.slice(1):a.amount;return`${e?"-":""}${s.formatAmount(r,a.token.decimals)} ${a.token.symbol}`}async function g(a,e,r,d){let o=await s.preview(a,e),u=o.changes.map(n).join(", ");return{txs:a,amounts:r,preview:o,summary:`${d} Preview values can change before execution. ${o.summary}${u?` Changes: ${u}.`:""}`}}return{positions:a=>l(async()=>{let e=await v(a),r=await e("balanceOf",[a]);if(r===0n)return[];let[d,o,u]=await Promise.all([e("previewRedeem",[r]),e("maxRedeem",[a]),e("maxWithdraw",[a])]);return[{module:"spark",id:`${h}:${f}`,chainId:h,assets:[t(m,r)],economics:{principal:d===0n?[]:[C("redeemable",{token:{...i},amount:d.toString(),source:"spark.previewRedeem",heldAs:m.address})],debt:[],rewards:[],backing:[],coverage:{complete:!0}},description:`${n(t(m,r))}; redeem preview ${n(t(i,d))} (rounded down). Current maximum redeem ${n(t(m,o))}; maximum withdrawal ${n(t(i,u))}.`}]}),tools:[I(s),...M(s),...G(s),{name:"spark_list",inputSchema:{type:"object",properties:{},additionalProperties:!1},execute:(a,e)=>l(async()=>{D(a,!1);let r=await v(e),d=await r("totalAssets"),[o,u,x,c,w]=await Promise.all([r("balanceOf",[e]),r("maxDeposit",[e]),r("maxWithdraw",[e]),r("maxRedeem",[e]),r("previewDeposit",[1000000n])]),S=await r("previewRedeem",[o]);return[{chainId:h,address:f,name:"Spark Savings USDG",asset:{...i},shareToken:{...m},totalAssets:t(i,d),balance:t(m,o),maxDeposit:t(i,u),maxWithdraw:t(i,x),maxRedeem:t(m,c),previewDepositAssets:t(i,1000000n),previewDeposit:t(m,w),previewRedeemShares:t(m,o),previewRedeem:t(i,S),rounding:"Deposit shares and redeemed assets round down; exact-asset withdrawals round shares up. Previews can change before execution."}]})},{name:"spark_deposit",inputSchema:{type:"object",properties:{amount:P('Amount of USDG in base units (USDG has 6 decimals). Example: "1000000" = 1 USDG.')},required:["amount"],additionalProperties:!1},execute:(a,e)=>l(async()=>{let r=D(a,!0),d=await v(e),[o,u]=await Promise.all([d("maxDeposit",[e]),d("previewDeposit",[r])]);if(r>o)throw new p("The deposit exceeds Spark\u2019s current maximum deposit.");if(u===0n)throw new p("This deposit would return zero Spark shares.");let x=[s.approval(b,f,r.toString(),h),s.unsignedTx({to:f,data:A({abi:k,functionName:"deposit",args:[r,e]}),value:"0",chainId:h,description:`Deposit ${n(t(i,r))} into Spark for this wallet.`})];return g(x,e,{assets:t(i,r),shares:t(m,u),maxDeposit:t(i,o)},`Approve exactly ${n(t(i,r))} for Spark ${f}, then deposit. Expected ${n(t(m,u))}, rounded down; current maximum deposit ${n(t(i,o))}.`)})},{name:"spark_withdraw",inputSchema:{type:"object",properties:{amount:{type:"string",anyOf:[{pattern:"^[0-9]+$"},{const:"max"}],description:'Amount of USDG in base units (USDG has 6 decimals; "1000000" = 1 USDG), or "max" to redeem all held shares.'}},required:["amount"],additionalProperties:!1},execute:(a,e)=>l(async()=>{let r=D(a,!0,!0),d=await v(e),[o,u,x]=await Promise.all([d("balanceOf",[e]),d("maxWithdraw",[e]),d("maxRedeem",[e])]);if(o===0n)throw new p("This wallet has no Spark shares to withdraw.");let c,w,S;if(r==="max"){if(w=o,w>x)throw new p("The full share balance exceeds Spark\u2019s current maximum redeem. Request an asset amount within the current maximum withdrawal.");c=await d("previewRedeem",[w]),S=A({abi:k,functionName:"redeem",args:[w,e,e]})}else{if(c=r,c>u)throw new p("The withdrawal exceeds Spark\u2019s current maximum withdrawal.");if(w=await d("previewWithdraw",[c]),w>o)throw new p("This wallet has insufficient Spark shares for the withdrawal.");S=A({abi:k,functionName:"withdraw",args:[c,e,e]})}if(c===0n||w===0n)throw new p("Spark returned a zero asset or share preview for this withdrawal.");let j=r==="max"?`Redeem all ${n(t(m,w))} from Spark to this wallet.`:`Withdraw ${n(t(i,c))} from Spark to this wallet.`,O=[s.unsignedTx({to:f,data:S,value:"0",chainId:h,description:j})];return g(O,e,{assets:t(i,c),shares:t(m,w),maxWithdraw:t(i,u),maxRedeem:t(m,x)},r==="max"?`Redeem all ${n(t(m,w))} for an expected ${n(t(i,c))}, rounded down. Current maximum redeem ${n(t(m,x))}.`:`Withdraw ${n(t(i,c))} using an expected ${n(t(m,w))}, rounded up. Current maximum withdrawal ${n(t(i,u))}.`)})}]}};function te(s){return W("spark",[F(s)])}export{F as a,te as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as v}from"./
|
|
1
|
+
import{a as v}from"./U4MSIH4G.js";import{h as w}from"./2GXHYI23.js";import{a as y}from"./HPBTSJW7.js";import{b as P,c as k,d as l}from"./5KKAN7XQ.js";import{o as h}from"./OUXPOFY2.js";import{a as f}from"./43LI5NKJ.js";import{m as b,n as B}from"./NWNYJ26T.js";import{b as d}from"./EWZFZUVF.js";import{a as s}from"./XSD5NL7J.js";import{erc20Abi as L,formatUnits as R}from"viem";var U=70515n,C=250202n,S=568341n;function N(a,r){return{token:{...a},amount:r.toString()}}function A(a){if(a.network!==void 0&&a.network!=="mainnet")throw new s("LayerBank requires chain 4663.")}async function g(a,r,n,e){try{return b(await a.readContract({address:r.address,abi:L,functionName:"balanceOf",args:[n],blockNumber:e}),"LayerBank returned a malformed wallet balance read.")}catch(t){throw t instanceof s?t:new s("LayerBank wallet balance could not be read. Please try again.")}}async function T(a,r,n){try{let[e,t]=await Promise.all([r.getGasPrice(),h("ETH",{client:r,http:a.http,chainId:d,blockNumber:n})]),i=B(t.usdE18,"LayerBank gas reference is unavailable.",{positive:!0}),c=b(e,"LayerBank gas reference is unavailable.");if(c===0n)throw new s("LayerBank gas reference is unavailable.");let u=m=>Number(R(m*c*i/10n**18n,18)),o=u(U+C),p=u(S);if(![o,p].every(m=>Number.isFinite(m)&&m>0))throw new s("LayerBank gas reference is unavailable.");return{gasInUsd:o,gasOutUsd:p}}catch{throw new s("LayerBank gas costs could not be checked against a fresh ETH/USD reference. Please try again.")}}async function x(a,r){A(a),f(r);let n=a.clientFor(d),e=await y(n),[t,i,c,u]=await Promise.all([g(n,k,r,e.blockNumber),g(n,l,r,e.blockNumber),v(a.http),T(a,n,e.blockNumber)]),o=[...c.checks,"Gas costs use measured USDG calls plus 20% headroom; entry includes approval and supply."];e.active||o.push("LayerBank reserve is inactive."),e.frozen&&o.push("LayerBank reserve is frozen for deposits."),e.paused&&o.push("LayerBank reserve is paused."),e.capRoomBase===0n&&o.push("LayerBank supply cap has no room left.");let p={rateBasePct:e.rateBasePct,...c.bonus==="unavailable"?{}:{bonus:c.bonus},cashUsdgBase:e.cashUsdgBase,capRoomBase:e.capRoomBase,open:e.active&&!e.frozen&&!e.paused&&e.capRoomBase>0n,walletUsdgBase:t,walletReceiptBase:i,...u,checks:o};return{reserve:e,reading:p}}function F(a){return async r=>{try{return(await x(a,r)).reading}catch(n){return{rateBasePct:0,cashUsdgBase:0n,capRoomBase:0n,open:!1,walletUsdgBase:0n,walletReceiptBase:0n,gasInUsd:0,gasOutUsd:0,checks:[n instanceof s?a.plainError(n):"LayerBank could not be checked right now. Please try again."]}}}}async function W(a,r){A(a),f(r);let n=a.clientFor(d),e=await y(n),t=await g(n,l,r,e.blockNumber);if(t===0n)return[];let i=a.formatAmount(t.toString(),6);return[{module:"layerbank",id:`${d}:${P}`,chainId:d,assets:[N(l,t)],economics:{principal:[w("redeemable",{token:{...k},amount:t.toString(),source:"layerbank.receiptBalance",heldAs:l.address,measuredAtBlock:e.blockNumber.toString()})],debt:[],rewards:[],backing:[],coverage:{complete:!0}},description:`${i} lRobUSDG = ${i} USDG; base supply rate ${e.rateBasePct}% a year, read now.`}]}export{U as a,C as b,S as c,N as d,A as e,g as f,x as g,F as h,W as i};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as s}from"./
|
|
1
|
+
import{b as s}from"./CJMVRV34.js";import{a as u}from"./7WXAS54T.js";import{a as p}from"./B7WZJHIJ.js";import{f as a}from"./NWNYJ26T.js";import{a as r}from"./XSD5NL7J.js";import{erc20Abi as f,getAddress as i,parseAbi as g,zeroAddress as b}from"viem";var w={type:"string",pattern:"^(0|[1-9][0-9]*)$",maxLength:78},O={type:"string",pattern:"^0x[0-9a-fA-F]{64}$"},R={blockNumber:{...w,description:"Optional named chain-4663 block; defaults to the head captured once for this read."}},T=g(["function launchFee() view returns (uint256 fee,address treasury,uint256 pendingFee,address pendingTreasury,uint256 readyAt)"]),k=p;function B(e,n,t=[]){let o=a(e,"Provide the documented Hookr object.");if(Object.keys(o).some(d=>!n.includes(d))||t.some(d=>!Object.hasOwn(o,d)))throw new r("Provide exactly the documented Hookr fields; wallet overrides are not accepted.");return o}function l(e,n=256){if(typeof e!="string"||!/^(0|[1-9][0-9]*)$/.test(e)||e.length>78||BigInt(e)>=1n<<BigInt(n))throw new r(`Provide a decimal integer string within uint${n}.`);return BigInt(e)}function N(e){return e.blockNumber===void 0?void 0:l(e.blockNumber,64)}function S(e){if(typeof e!="string"||!/^0x[0-9a-fA-F]{64}$/.test(e))throw new r("Provide an exact bytes32 Hookr ID.");return e.toLowerCase()}function $(e){if(typeof e!="string"||!/^0x[0-9a-fA-F]{40}$/.test(e)||i(e)!==e)throw new r("Provide an EIP-55 checksummed address.");return i(e)}function y(e,n=256){if(typeof e!="bigint"&&(typeof e!="number"||!Number.isSafeInteger(e)))throw new r("Hookr integer read is incomplete. Retry the named-block read.");let t=BigInt(e);if(t<0n||t>=1n<<BigInt(n))throw new r("Hookr integer read is outside its ABI bounds.");return t}function E(e){if(typeof e!="boolean")throw new r("Hookr boolean read is incomplete.");return e}function j(e,n){if(!Array.isArray(e)||e.length!==n)throw new r("Hookr tuple read is incomplete.");return e}var C=e=>a(e,"Hookr struct read is incomplete.");function F(e){return JSON.parse(JSON.stringify(e,(n,t)=>typeof t=="bigint"||typeof t=="number"?String(t):t))}function V(e){return k[e].abi}function m(e,n,t,o,d,c){return e.readContract({address:n,abi:t,functionName:o,args:d,blockNumber:c})}var L=i(s.rootV1),_=i(s.registry),D=i(s.poolManager),J=i(s.agentGateV1);function K(e){if(e===i(s.rulesV1))return"rulesV1";if(e===i(s.rulesPrevious))return"rules";if(e===i(s.rulesLegacy))return"rulesLegacy";throw new r("Unknown Hookr core deployment. Review and pin it before reading this position.")}async function U(e,n,t){if(n===b)return{address:u,symbol:"ETH",decimals:18,chainId:4663};let[o,d]=await Promise.all([m(e,n,f,"symbol",[],t),m(e,n,f,"decimals",[],t)]),c=y(d,8);if(typeof o!="string"||o.length===0||new TextEncoder().encode(o).length>128)throw new r("Hookr token metadata is incomplete. Retry before valuing this currency.");return{address:n,symbol:o,decimals:Number(c),chainId:4663}}export{w as a,O as b,R as c,T as d,B as e,l as f,N as g,S as h,$ as i,y as j,E as k,j as l,C as m,F as n,V as o,m as p,L as q,_ as r,D as s,J as t,K as u,U as v};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var a={chainId:4663,usdg:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",v4:{poolManager:"0x8366a39CC670B4001A1121B8F6A443A643e40951",swapper:"0x7Cd4E04E433E69e588728c86A3832753B5F846d4",quoter:"0x8dc178efb8111bb0973dd9d722ebeff267c98f94",stateView:"0xf3334192d15450cdd385c8b70e03f9a6bd9e673b"},v3:{router:"0xCaf681a66D020601342297493863E78C959E5cb2",quoter:"0x33e885eD0Ec9bF04EcfB19341582aADCb4c8A9E7",factory:"0x1f7d7550B1b028f7571E69A784071F0205FD2EfA"},tokens:[{symbol:"AAPL",token:"0xaF3D76f1834A1d425780943C99Ea8A608f8a93f9",pools:[{v:3,fee:500,pool:"0xAae0d815EE56e4092a5E5C2911E676Fea50B2d6D"},{v:4,fee:3e3,tickSpacing:60,id:"0xc748f4671a867db48b552f6b7650bf3255e05f80f00e3f7aad1b17ccb7898fdb"},{v:3,fee:3e3,pool:"0x783C9bbB765047CFdD2b84b92b2Ca9F11D34b7Ed"}]},{symbol:"AMD",token:"0x86923f96303D656E4aa86D9d42D1e57ad2023fdC",pools:[{v:3,fee:3e3,pool:"0x48D284A2A4d3DC1b3Da08231Fe44317e7e7Aa51f"}]},{symbol:"AMZN",token:"0x12f190a9F9d7D37a250758b26824B97CE941bF54",pools:[{v:3,fee:3e3,pool:"0x8AC92DA74AB5F3b1d024Dc1943Ad7e15Dc4179Ef"},{v:4,fee:2400,tickSpacing:24,id:"0xefc94885c96b02696b9b45de43eeeb8ac53c0199cab42b4daae4911b96fb8825"}]},{symbol:"ASML",token:"0x47F93d52cBeC7C6D2CfC080e154002370a60dAEA",pools:[{v:3,fee:1e4,pool:"0xedb22516B14Eb2d1C86927Db373B0E8bF70F5cD1"}]},{symbol:"BABA",token:"0xad25Ac6C84D497db898fa1E8387bf6Af3532a1c4",pools:[{v:4,fee:1e3,tickSpacing:10,id:"0x1791fc651cc794a282e5dbcb56d0b2b38eff8754b677c8876e86901521ecc439"},{v:3,fee:3e3,pool:"0xa57ab582b310dd6f9e934EA1EEEa152741545E6A"}]},{symbol:"COIN",token:"0x6330D8C3178a418788dF01a47479c0ce7CCF450b",pools:[{v:4,fee:2500,tickSpacing:25,id:"0xe2e1a0e32205e854525e0fb1d3667a53bd3b4919f032b9bcd2a038b6b6dac314"},{v:4,fee:1e4,tickSpacing:200,id:"0x007a13fa152f6dc383cad20a8eaab4e1e2538b606936eae2a424f8aa47d6db31"}]},{symbol:"CRCL",token:"0xdF0992E440dD0be65BD8439b609d6D4366bf1CB5",pools:[{v:3,fee:3e3,pool:"0x654E4143e82a5824445Ade0824351C2A9ACD95a8"},{v:4,fee:3e3,tickSpacing:30,id:"0x628c98ab436ee34a6a7decd606242890582591bdf7c9a35d90e0d08021c31ea0"},{v:4,fee:1500,tickSpacing:15,id:"0x5177eac8c2176468bbf15e44081e151d35c2e7d068e96d3db94f496a4dc944b2"}]},{symbol:"CRWV",token:"0x5f10A1C971B69e47e059e1dC91901B59b3fB49C3",pools:[{v:4,fee:9e3,tickSpacing:90,id:"0x237014478f7ef98afbe7412ac35b6a3f96b8fb111de48b7c4dbf49dba4bd9c4b"}]},{symbol:"DELL",token:"0x941AE714EC6D8130c7B75d67160Ca08f1e7d11Dd",pools:[{v:3,fee:1e4,pool:"0xc30c89cB7815A1488b7998D15eEC73961707Fc5a"}]},{symbol:"GME",token:"0x1b0E319c6A659F002271B69dB8A7df2F911c153E",pools:[{v:3,fee:500,pool:"0xE2b46c905E12Ab8E2f864e4821a4325884C1B126"}]},{symbol:"GOOGL",token:"0x2e0847E8910a9732eB3fb1bb4b70a580ADAD4FE3",pools:[{v:3,fee:500,pool:"0x34D0dC122CF9A8Eb296fC5e0D3A233625D7d19b7"},{v:4,fee:300,tickSpacing:3,id:"0x43fe16b75cabbf38f5b185d16142b02d1d9200d8f1ba17cb6cf899f562c6197f"},{v:4,fee:3e3,tickSpacing:60,id:"0xd4ecb79fdc521d7725d22b33ed43cb4e47aa96bfad76aa29577e3151f723ac5e"}]},{symbol:"INTC",token:"0xc72b96e0E48ecd4DC75E1e45396e26300BC39681",pools:[{v:3,fee:3e3,pool:"0x2e5a92f5013a64661A49312111be2e8aBd33F56a"}]},{symbol:"META",token:"0xc0D6457C16Cc70d6790Dd43521C899C87ce02f35",pools:[{v:4,fee:310,tickSpacing:3,id:"0xc58bb68060bcb7b3ea0f6d4a4afef1e57f628722e808db12afb6d1733552872f"},{v:3,fee:3e3,pool:"0x107a7Cb40d8665360ba10E59471Af06150A50922"},{v:4,fee:3e3,tickSpacing:60,id:"0x5875d407a42965b0e768c8925cea290e06fa50603ef34fc99eb92a1050e6ae36"}]},{symbol:"MSFT",token:"0xe93237C50D904957Cf27E7B1133b510C669c2e74",pools:[{v:3,fee:3e3,pool:"0xeb60bCD1D920ad6E102690CCFC6fB488899E1510"},{v:4,fee:3e3,tickSpacing:60,id:"0x9194a557b6a6bb2236b49ea7e2bbccec5d3eeb705aef00903be4b3de1d949579"}]},{symbol:"MSTR",token:"0xec262a75e413fAfD0dF80480274532C79D42da09",pools:[{v:4,fee:2500,tickSpacing:25,id:"0x319bac87e616a89e241c10aeb8afd4892a852cdd8b373cd9765ecddc40b87cfe"},{v:4,fee:2400,tickSpacing:24,id:"0xc105b8300ff65d750a0e4e63c7a879e20504069b770713464a5315e797735326"}]},{symbol:"MU",token:"0xfF080c8ce2E5feadaCa0Da81314Ae59D232d4afD",pools:[{v:3,fee:3e3,pool:"0xd057B1Bc54917855BBee58eAd58647f47caB35E5"}]},{symbol:"NBIS",token:"0x9D9c6684F596F66a64C030B93A886D51Fd4D7931",pools:[{v:4,fee:9900,tickSpacing:99,id:"0x7c2f9ce1214ba9baf56d1b6a1fc640c1b63e9a711172c0c7d10e5a9c4a3d4f0c"}]},{symbol:"NVDA",token:"0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC",pools:[{v:3,fee:500,pool:"0xd4EB21209C4D6093f80B5b84f5C45cc093EA14a3"},{v:4,fee:100,tickSpacing:1,id:"0x6444a8e0b267406a15db74ca00c4a24bdfa81ed3180f5b6d0851f8ed6f4f29c5"},{v:4,fee:3e3,tickSpacing:60,id:"0x3bb34a44f1b2b5f32c034c38a53065a521a47b199700fa9bd19d60985ff24bf1"}]},{symbol:"ORCL",token:"0xb0992820E760d836549ba69BC7598b4af75dEE03",pools:[{v:4,fee:1e4,tickSpacing:200,id:"0xc2ce4784e1e72cf0221b51b30c8aaadf6c0b12863cf03ab3687854fb7b1d850a"}]},{symbol:"PLTR",token:"0x894E1EC2D74FFE5AEF8Dc8A9e84686acCB964F2A",pools:[{v:4,fee:1500,tickSpacing:15,id:"0xc59eaeda6d1a6f031bc7e1d039772f2d675e7b4de2c8668610f4471bd60b3802"},{v:3,fee:3e3,pool:"0x851680416A4f4E1c463d45171d61ACDdBc8554c0"}]},{symbol:"QQQ",token:"0xD5f3879160bc7c32ebb4dC785F8a4F505888de68",pools:[{v:3,fee:500,pool:"0xD60A5d14dB690B7Afad71F76B108071D7175597d"}]},{symbol:"SGOV",token:"0x92FD66527192E3e61d4DDd13322Aa222DE86F9B5",pools:[{v:3,fee:500,pool:"0x6Ba50150B17Ffd0972915Aaf04fFd5E8f4Fa49b4"},{v:3,fee:3e3,pool:"0xfAb520051f96F4D2a32c22B6a3dD7fFfdf231bFe"}]},{symbol:"SLV",token:"0x411eFb0E7f985935DAec3D4C3ebaEa0d0AD7D89f",pools:[{v:3,fee:3e3,pool:"0x8cB787e6c315D464775289BaD00FDD67d53Ecb3D"},{v:3,fee:1e4,pool:"0x0Fa7BC480885DCf58Ad2ef63eC7289cF2481D51c"}]},{symbol:"SNDK",token:"0xB90A19fF0Af67f7779afF50A882A9CfF42446400",pools:[{v:4,fee:1e4,tickSpacing:200,id:"0x2707cb88a6a40fa0f948f58958051ba097d6f6a3cf7f87929bd68ccc5becea24"}]},{symbol:"SPCX",token:"0x4a0E65A3EcceC6dBe60AE065F2e7bb85Fae35eEa",pools:[{v:3,fee:500,pool:"0xc61284332117c3FB23A2A56cceFFD07F7aF60029"},{v:3,fee:3e3,pool:"0xEb07d9587eFD1778dFb9c385Ec43EF6d5F9fE401"}]},{symbol:"SPY",token:"0x117cc2133c37B721F49dE2A7a74833232B3B4C0C",pools:[{v:4,fee:100,tickSpacing:1,id:"0xe1ae6a4c6ccc9f037389a8d50a4f577bde1a9fe01d85d88ecbbd39955ce53288"},{v:3,fee:500,pool:"0xa7Bb1AC63BBaB0C44316E6c8C455213441689167"},{v:4,fee:500,tickSpacing:5,id:"0xe5923c8a8be481ec89a2ca784a2bbfa4235de6d88f92260fd66b660c4babf907"}]},{symbol:"TSLA",token:"0x322F0929c4625eD5bAd873c95208D54E1c003b2d",pools:[{v:3,fee:3e3,pool:"0xf4ACdAEEB7022862A763C9B1B885e11191c889E3"},{v:4,fee:3e3,tickSpacing:60,id:"0x8517f8071ae5b831b738052f12125e8e3d6c158b78728aa44ce3b25e5104d32e"}]},{symbol:"TSM",token:"0x58FfE4a942d3885bAa22D7520691F611EF09e7AA",pools:[{v:4,fee:7500,tickSpacing:75,id:"0x0ba5d53d2f6255f334b7c8ead4f56b6aef5af3402c5e4d11180afd38c6b85fb1"},{v:3,fee:1e4,pool:"0x07e8Ea83D4C1340774c8965125e26e12bf943bf1"}]},{symbol:"USAR",token:"0xd917B029C761D264c6A312BBbcDA868658eF86a6",pools:[{v:3,fee:3e3,pool:"0x04391780F519B7d3ba59c9590459D76e23d225C4"}]},{symbol:"USO",token:"0xa30FA36Db767ad9eD3f7a60fC79526fB4d56D344",pools:[{v:4,fee:1200,tickSpacing:15,id:"0x1f2ad5a274a776d8e1408292bde1d92d8fa7b6444acf14ad60b9c3e4e5b66420"},{v:3,fee:3e3,pool:"0x02175608F1b5E6b5ed221cCFdC7Be197D111D915"}]}],priceReferences:[{symbol:"AMC",token:"0x05a3d1Cd21d0C88145E82600E62e7E496e0F222B",pools:[{v:4,fee:1e3,tickSpacing:10,id:"0x7499938c352d5b5b8f0c648722aca5ee964ef9b85c3a3041f1ec379726291d9d"},{v:3,fee:3e3,pool:"0xaA34feA710a1A737840329051D81D3B0B7C564d5"},{v:4,fee:500,tickSpacing:5,id:"0x06b9732431bd134599dd112a93c708fe80cadd2fb7dc750fe632e1cbf49fd8c0"}]},{symbol:"AVGO",token:"0x156E175DD063a8cE274C50654eF40e0032b3fbcF",pools:[{v:3,fee:3e3,pool:"0x5B7C404f1d7d77F9f3885aB13d7764F8a173028c"}]},{symbol:"AXON",token:"0xC27dBD474aF5181c5A8777903690D8D262D12648",pools:[{v:4,fee:2500,tickSpacing:25,id:"0x76e3dd1779473383d64c232fd03862f3d8c31136141ab1aae52bcdf2ce897b6e"}]},{symbol:"BA",token:"0x4D21483a44Bf67a86b77E3dA301411880797D452",pools:[{v:3,fee:3e3,pool:"0xc6517047b189c72D3bAa9eF37D1d28F27a63638a"}]},{symbol:"BB",token:"0x48E39E56aCdbA37b09020C0b734A613C9a2f100A",pools:[{v:3,fee:1e4,pool:"0xc424e56e816F148a8B30ccbde2128e04d21f51e9"}]},{symbol:"BE",token:"0x822CC93fFD030293E9842c30BBD678F530701867",pools:[{v:3,fee:3e3,pool:"0x1baD145C8F06444E0dF81c28257cd20231Bd1f16"}]},{symbol:"CEG",token:"0xaE517A2903E68bd929Dfd15be875F8369D53e94a",pools:[{v:4,fee:9e3,tickSpacing:90,id:"0x21e190d0a42ad1b36f957bf2490eef78825d13a579d3a326bf10aadc1d634f4f"},{v:3,fee:1e4,pool:"0xc9529b7dc74BF15da6Cee01a282908E8C7aB6BA3"}]},{symbol:"COST",token:"0x4EA005168D7F09a7A0Ba9D1DEf21a479950E44C2",pools:[{v:3,fee:3e3,pool:"0x0a2121A50A09eD0796ae81F9c53fF9398355a398"}]},{symbol:"CRWD",token:"0xea72Ecca2d0f6bFA1394DBBCff85b52CD4233931",pools:[{v:4,fee:1e3,tickSpacing:10,id:"0xb11086b1ff40749a1e619c0f87299e5c67ac84a8feceee0c039d574e5cd4c520"}]},{symbol:"DIS",token:"0x501B1B3B79750313AD2C4CcCD08586c4C17d7283",pools:[{v:3,fee:3e3,pool:"0x75F7109Eb00Eab50426f19b00Fb05783bD1a0501"}]},{symbol:"DJT",token:"0x1D11f0496982706C5e14A514D4E79F2e6BdE4516",pools:[{v:3,fee:1e4,pool:"0x31a89afd92F9397465649AD03226c52292fc1ae5"}]},{symbol:"F",token:"0x25C288E6D899b9BC30160965aD9644c67e73bE0C",pools:[{v:3,fee:3e3,pool:"0x4dbAC19E895322ac5b93abad9008691632bFFC05"}]},{symbol:"FIG",token:"0x41F4267525a8AFf329540eF24fD83d9044758B33",pools:[{v:3,fee:3e3,pool:"0xca5904C0a9d42F0Ec1Bf760FDf779907877144fD"}]},{symbol:"GLD",token:"0xC9a981FEE1F9DEc688bb123ccDeCc63D0deBFC4e",pools:[{v:3,fee:3e3,pool:"0x7A6A053eCCf1446A2633E05aA6D40D09381997ec"},{v:3,fee:500,pool:"0xBA2f1ed4cEB2169D538d1e614D847E83C5A55913"},{v:3,fee:1e4,pool:"0x32cb909aCF78354E08aa45639Ff5CD33767E730a"}]},{symbol:"GLXY",token:"0x2D427692E928fa156ec22acfaBaFA0447C5805B7",pools:[{v:3,fee:3e3,pool:"0xC67C2D200E0b7E5D99F4CFBede8CB09B48892f2c"}]},{symbol:"HIMS",token:"0xCceE82fE024c36fA15E1005edE3E9e4787e23D09",pools:[{v:4,fee:9e3,tickSpacing:90,id:"0x68d4f28f1432e0ad714658853edb2e6b0b1ac4060355ff3d169fea656b1d1c52"},{v:3,fee:3e3,pool:"0xC8C90d3a1c1a24967E773ac2aD0d456BA3E31F64"}]},{symbol:"IBM",token:"0x980dcf6766FA79f5Cf0c4AAdb3ab477ff15a9619",pools:[{v:3,fee:3e3,pool:"0x8cD848ce18b829C5c769AFf27164078bB52e0E97"},{v:3,fee:1e4,pool:"0xA0A79bC62fC822f3bcDF0EBbc586031781c53a5B"},{v:4,fee:1500,tickSpacing:15,id:"0xfefcd3697193dacac74626b2c8ca15937479605b4ee074670186f746b448028a"},{v:4,fee:9e3,tickSpacing:90,id:"0xd43a51c85ca0b12309a46a8b6c68dd76837fbd3dba5d413cd4686b85a52f9081"}]},{symbol:"INDA",token:"0xACEF2e09adb47aD6aBeBAD9fF06689E60615C2B6",pools:[{v:4,fee:2e3,tickSpacing:20,id:"0x7d0895d8162b0be326ef944faeb5a84f4a08377b9bc9f010e38fa4d268a94469"},{v:3,fee:3e3,pool:"0x2171c94d8073C4913f4653a0766D18aA8A29D1f6"}]},{symbol:"JBL",token:"0xEAf2512dFC1bEAc608F8794B3793CD4E02894Aa6",pools:[{v:4,fee:2500,tickSpacing:25,id:"0xe0c9d8c4ca2e0f2435bb7d07ed6c9a4273397dd097e72fa4d9ba4ee476abfd3f"}]},{symbol:"JNJ",token:"0x03DfbBE0AC4E7bCDaFd08eD41A400326B77D8c80",pools:[{v:3,fee:3e3,pool:"0x7F0aCE18D1dCEd47063CF26e649bc8AB14D09e67"},{v:3,fee:1e4,pool:"0x8d39388EF11Bb78843130Bd74AB0e5d89fA76b30"}]},{symbol:"JPM",token:"0x07c44dA0848960bFf894F17584dB8B2F60B2409E",pools:[{v:3,fee:3e3,pool:"0x3ebDBc2a316F87BaeD3A9d1229E03b0a49A27eC3"}]},{symbol:"KTOS",token:"0x7FD06a4d81cCfA3F351394E144d5191874C31313",pools:[{v:4,fee:2500,tickSpacing:25,id:"0x2204b8dffc2cf19091c5fb124ca745459e41ba5bf6db69f3723c7f5908688819"}]},{symbol:"LLY",token:"0x8005d266423c7ea827372c9c864491e5786600ea",pools:[{v:3,fee:500,pool:"0xF212D02146a897F5F686E9d629F6A73da534324a"},{v:3,fee:3e3,pool:"0xD2038788ebe1e0BFd7C0A6112f09778F3aeAecA6"},{v:3,fee:1e4,pool:"0xF4274130137eeE20bAD928B593d992716516CEB9"}]},{symbol:"LMT",token:"0x329fcACEb9AD6F9580DD5F643fed0646900D043c",pools:[{v:3,fee:3e3,pool:"0x54f160Bea60EC5207918C539d86E0b906b4DA297"},{v:4,fee:5e3,tickSpacing:50,id:"0x0b118d2480ebdb11374d3ad2ea1b935e9458a9f704222004b3b8de07bc98f1eb"}]},{symbol:"LULU",token:"0x4e62068525Ab11FE768e29dfD00ef909B9803016",pools:[{v:3,fee:3e3,pool:"0x0F4227D27082B3BCA6818381b9ea6460275e49f4"}]},{symbol:"MCD",token:"0x2fdaa4604F10F4AE7f66fa48A174bCd25b1ece20",pools:[{v:3,fee:3e3,pool:"0x2e97F9Ec9C6BAC972aB5BC1b8a1A7973B701dd97"}]},{symbol:"MRNA",token:"0x43B07D15cE533bEc5476d70C22a78a1B2B662155",pools:[{v:3,fee:3e3,pool:"0xB40196272A6d2EB5edF6d93bc4DC39856AD95E0E"},{v:3,fee:1e4,pool:"0xA34d0667334074DF2d5BfD259e79E6B9cf1fA8Bf"}]},{symbol:"MRVL",token:"0x62fd0668e10D8B72339BE2DCF7643001688ff13B",pools:[{v:3,fee:3e3,pool:"0xb5E892F0fC6dAAdDA5b927266FE7907e623e4843"}]},{symbol:"NET",token:"0x116F00968269B7bfbaD4109cE591d6E74c0601d4",pools:[{v:3,fee:3e3,pool:"0xA9Caebb1b2fB2b954F192572b309aEf1cAf6a330"}]},{symbol:"NFLX",token:"0xE0444EF8BF4eD74f74FD73686e2ddF4C1c5591E8",pools:[{v:3,fee:3e3,pool:"0x59895C0302F41aEaa129D2fa2442CEc01E7eF45E"},{v:4,fee:1e4,tickSpacing:100,id:"0xe4930a6215f21aa3b37c01adbded3362f56ae31b9a60066f5f9641e601d5111f"}]},{symbol:"NU",token:"0x408c14038a04f7bD235329E26d2bf569ee20e250",pools:[{v:3,fee:1e4,pool:"0xb6d047637151f6De1d02028acdd187Aa9cb7AFE3"},{v:3,fee:3e3,pool:"0x0E3FaEd512E7909758EB924E6919e0057Bd6b45E"}]},{symbol:"ON",token:"0xbBD09F72b025360FeE5C928053Dca6248d35be54",pools:[{v:3,fee:1e4,pool:"0xfcE637eeAd7D62d9ED27F81D9767de03e9E534Cf"}]},{symbol:"P",token:"0x1Cdad396DB64BDa184d5182A97Dd9B3C62100b7D",pools:[{v:4,fee:1e4,tickSpacing:100,id:"0x2300c9273ea3f89e86787cfb01d522ca36be342d40ed754c15feca69f3afbe6a"}]},{symbol:"PANW",token:"0xB039597eD45CBa7B6E2fb9E8BE51802969CEe5Be",pools:[{v:4,fee:1e3,tickSpacing:10,id:"0xb544fd24f37f3d7a6ee3c20e4b4f7797807d92603ccae703149e374337d5013a"}]},{symbol:"PFE",token:"0x7066A64c24e4206CD62E83bf198c1E7EB361F51e",pools:[{v:3,fee:3e3,pool:"0xC7d573Fcda6D2107C97fb582ae18411F9Db32E7f"},{v:4,fee:1500,tickSpacing:15,id:"0x632d9bdccf26e13dbf23b185f29cba47e237371010e1abf7aceaeff653f66be4"},{v:3,fee:1e4,pool:"0xA26dF7296ef5DFc727f3bc6F1E9050E6B62e6abF"}]},{symbol:"POET",token:"0xcf6B2D875361be807EAfa57458c80f28521F9333",pools:[{v:3,fee:1e4,pool:"0xa1C781ed62AC2d0283f50fF5A843647a56ddd80a"}]},{symbol:"PYPL",token:"0xa45aBDc77918F7B9199b022eEe400C0BC5712BD2",pools:[{v:3,fee:3e3,pool:"0x4F59397a5F742dcF91C69763de550f406af7EbfF"}]},{symbol:"QUBT",token:"0x59818904ab4cE163b3cE4FfB64f2D6Ca02c434B4",pools:[{v:3,fee:1e4,pool:"0x2E2a857C08aD6C09f1d1EC4FDB4Cc7cd06cF17f4"},{v:3,fee:3e3,pool:"0x227Bbce9A81B3694b01754298a983Be3F9E44A93"}]},{symbol:"RBLX",token:"0xF0C4BF4C582cb3836e98394b1d4e7B7281101bE8",pools:[{v:3,fee:3e3,pool:"0x1BDB8e3A79Cb1a7F228808739311E23098D33d43"},{v:3,fee:1e4,pool:"0x2ef5945cd5664876b6481FdacFaA2942995a4DA8"},{v:4,fee:1e3,tickSpacing:10,id:"0xf807376333cd408c36d48a11a96309b92c5bd2bca9ba9f0b21800636cb3a30da"}]},{symbol:"RCAT",token:"0xFDE6b5d9BB419B10C23268c74e369AbFF39C0460",pools:[{v:3,fee:1e4,pool:"0x64710a70839585Af718e1B1FAEf9E7f1665F1116"}]},{symbol:"RDDT",token:"0x05b37Fb53A299a1b874A619e1c4C404D52C36F4C",pools:[{v:3,fee:1e4,pool:"0xa8744E76aED23B05F0126335E7BD38f7935D19fe"},{v:4,fee:1e4,tickSpacing:200,id:"0xec481672a94cfe42e2d8c996b7eaeee8a93093d56bd01c1714341971e3f406c1"}]},{symbol:"RIVN",token:"0xB1BF26c1D20ff267A4f93550d1E0d06ac40a114B",pools:[{v:3,fee:3e3,pool:"0xF9e71558eEf115b6C8fbFc9ad5fda00033E9d69C"},{v:3,fee:1e4,pool:"0xb30A75B200D98A600a3766869344928E35823E23"}]},{symbol:"RKLB",token:"0x3b14C39E89D60D627b42a1A4CA45b5bb45Fc12e2",pools:[{v:4,fee:9e3,tickSpacing:90,id:"0xbbc15d66fef8391f53569e19016e86545be9de3f302b82db93ed6165236d22f3"}]},{symbol:"SHOP",token:"0xF53F66751B1Eff985311b693531E3290F600c410",pools:[{v:3,fee:1e4,pool:"0x18A1aFa849A6940870c2163B7ECBCC85d455Ad99"},{v:4,fee:1e4,tickSpacing:100,id:"0x8baff387b51c50e2747e85bcddf87da78fee6efb45629743e1af4dfb07ad13ee"}]},{symbol:"SKHY",token:"0x84CAb63bc87912E71ad199ff14A0bA45de68FeF8",pools:[{v:3,fee:3e3,pool:"0x5F2a5025feb93a4C44DA4E3B37e4fD3Fb0ab5171"}]},{symbol:"SNAP",token:"0xF6589F11Bc40b669e584073F428B05562F568733",pools:[{v:3,fee:3e3,pool:"0x0EbD4650C9e641E9745b5A508A2D46935DFE753E"}]},{symbol:"SNOW",token:"0xBa0CAB75495255d0cB58E22B648bFED4ECD1F47E",pools:[{v:4,fee:1e4,tickSpacing:200,id:"0xac720e95589b7124f0affbdb9e66c7ec6e824c68eae00dc54f9e11b0b294bac8"}]},{symbol:"TE",token:"0xb1969f6604CA1AE7a2cD3F1827876e914594CA2D",pools:[{v:4,fee:1e3,tickSpacing:10,id:"0x87d302c27b610c19114a51f848ba27acd197933493458bea30c558df5cae6cd8"}]},{symbol:"TTWO",token:"0x5e81213613b6B86EaB4c6c50d718d34359459786",pools:[{v:3,fee:3e3,pool:"0xD9Ab4b7fAe6DC2f7020134Ec744A8F53Ef3E5E24"},{v:4,fee:1e4,tickSpacing:200,id:"0x131e6ebeeedb524a1e7590aa3eea3bc8782b5425a78d5128c0ca955190d0ea69"}]},{symbol:"UBER",token:"0xbd335Aa5A1693F0121A5c0Ef18A080E9958DA78b",pools:[{v:3,fee:3e3,pool:"0x0DF328152A3708F99f6cf13fb3c820BbBF9115C1"}]},{symbol:"UPS",token:"0xf23250dac154D05Bb671CB0d0eBEf3c635c79CE2",pools:[{v:3,fee:1e4,pool:"0x3Ab74C45DceCC6A62898204Dd42143a816B44CB1"},{v:3,fee:3e3,pool:"0x5c67a84Ec5494ffE24E217B28dEbb96341014c86"}]},{symbol:"V",token:"0x9BFF87700337babF5099e99F322F888DafB1d551",pools:[{v:3,fee:3e3,pool:"0xfE67885765C29C25A589d99003C19C082664c26f"}]},{symbol:"VTI",token:"0x0594134DF3f171a354D9C85eBD65b7A6148F6D09",pools:[{v:3,fee:1e4,pool:"0xb78DD1A97fa544c65d7D1f12453EcaAF1e05c36d"}]}],unpriced:{AAOI:{token:"0x521Cf887E6531c6F667b5BC4D896E5d9bfE8EB2E",reason:"thin"},ABCL:{token:"0x3139D77Ace0cbAA5bDfD38bD1F1911a794AF0B0e",reason:"no-pool"},ADBE:{token:"0x232B8ed6377BE97813853B0Ac104c4Cda8378d1B",reason:"thin"},AEHR:{token:"0x5F604fBA1162193A4388A5DFa56F556f3E133cC2",reason:"no-pool"},AEIS:{token:"0xfAf9cb261B5FCC1f404Bb10CD39C5c6C1974E612",reason:"no-pool"},ALAB:{token:"0x748c32c3ca24eDf31ea597Db1F3d330a7a6DA3Dc",reason:"no-pool"},AMAT:{token:"0x36046893810a7E7fCE501229d57dc3FC8c8716d0",reason:"thin"},AMBA:{token:"0x99D9D8663545151603863C5AcbD6FC3218899009",reason:"no-pool"},AMKR:{token:"0xDd356AA38F40A7b7076755aC854B6FBb1F0D305B",reason:"thin"},ANET:{token:"0x28bABD556b60E53663B8615036479a29c2CDd1Bf",reason:"thin"},APLD:{token:"0xb8DBf92F9741c9ac1c32115E78581f23509916FD",reason:"thin"},APP:{token:"0xA249BAF1063Af884807C1E1400AEf7784836917E",reason:"no-pool"},ASTS:{token:"0x1AF6446f07eb1d97c546AFC8c9544cBDF3AD5137",reason:"no-pool"},AUR:{token:"0x373C06c4f7BDe527D7Dae4BA169E42b55E393CeD",reason:"no-pool"},AVAV:{token:"0xF6290b5e7C26502e2dA514C31509849718EA76A5",reason:"no-pool"},AXTI:{token:"0x141eEa040c2250eEc0314e336975e81f85f6585e",reason:"no-pool"},BMNR:{token:"0x9a7842EDed60b0FE1e03eEc342C82A397c821eD0",reason:"no-pool"},BND:{token:"0x2F62fC9fAbb470C690f141c28340eD832bB27020",reason:"no-pool"},BULL:{token:"0xceF9027c7d6985b85f0BA431125073529A947A68",reason:"no-pool"},CBRS:{token:"0x5c90450Bbb4273D7b2f17CF6917AEB237A569679",reason:"thin"},CCL:{token:"0x9651342CeA770aE9a2969Ba2A52611523146aef9",reason:"thin"},CELH:{token:"0x8cF07C5A878945185d327aAa6e33FAa95F95e7bF",reason:"no-pool"},CIEN:{token:"0x44f6D488021f8233B9416294d1FE9b1fEe28382d",reason:"no-pool"},CLOV:{token:"0x62200915e7DEab1eC7f79fb246daDbB80eACdDd0",reason:"thin"},CLS:{token:"0xBf449977089c718C004a66C554B26B94ef3Ad4De",reason:"thin"},CLSK:{token:"0xcBB95BBF36099d34dA091dc6Fa6F49EfA257Cee3",reason:"no-pool"},COHR:{token:"0x92F9F459F1a9a5AD266b182BE7Bffd1C6c666894",reason:"no-pool"},CRDO:{token:"0x4D67253bc223e6b0e104F1084c1fb2b669dDC41b",reason:"no-pool"},CRM:{token:"0xd95B44124e475743a7589e68F3D74008A5536D44",reason:"thin"},CSCO:{token:"0xF543967EEBB6f1917992eF0E68De63ab07a5a0dA",reason:"no-pool"},CTSH:{token:"0x63D5a3b6939a33f1e75d8Bcd85759858239600DB",reason:"no-pool"},CVNA:{token:"0xa4f319104089FE321dc8093C6E707d4fE190A988",reason:"no-pool"},DDOG:{token:"0x27c99fBde9D0d2AA4f4Bfb4943f237843DdF6958",reason:"thin"},DOCN:{token:"0xc02f12B9fe9E707079EC0d546f3050d3F6C1F8bD",reason:"no-pool"},ELF:{token:"0x39EC44Bee4F6A116c6F9B8De566848a985C53C60",reason:"quote-failed"},EWT:{token:"0x1c690498150252222C275A5CEd69d3A6b1f52D5E",reason:"no-pool"},EWY:{token:"0x7f0aBeF0C07280F82c6a08ead09dEd6BAE2C13Fc",reason:"thin"},FICO:{token:"0xa48F22A46C0F1C46CA7D111CB6c137c271987180",reason:"no-pool"},FISV:{token:"0x9ECe29A4A2397C0a35fb5fA8EE2b9509130a98cc",reason:"no-pool"},FIX:{token:"0x93Dbb1d2Dc5D63F4abACFF30485273f538Df68Ac",reason:"thin"},FLNC:{token:"0x282e87451E10fA6679BC7D76C69BE44cD3fC777C",reason:"no-pool"},FLY:{token:"0x03BC731Ffb162cdd7B98D3C6542bFC291126075d",reason:"thin"},FTNT:{token:"0x3FB8976980d486084b2eb4a404BD12e72823958f",reason:"thin"},FUTU:{token:"0xeB30663bDFf0622Ef4e4E5cBb4E975F19f33f51D",reason:"no-pool"},GDX:{token:"0xBDFa7A06458Aa26b8E736E0fC87aD37C3BB8Ac2e",reason:"no-pool"},GE:{token:"0x63b814DDBd6BF339f25Fed8c36158a008D5B373e",reason:"no-pool"},GEV:{token:"0x94B8AAE43A1cCc08Aa64B7D1F29b4D920aF4a0C9",reason:"no-pool"},GLW:{token:"0x7c04E6A3368F2A1DE3874f0e80d2e0A1a9915da6",reason:"no-pool"},HII:{token:"0xEB61c0Ed490A367d4E3631cCf8a74B3bfc7E775D",reason:"no-pool"},HPE:{token:"0x59dd09d4900C2E4B5F75b7c0d4E6796fcc234Cb1",reason:"thin"},HWM:{token:"0xAEa445c5F3DB1a462998ccC422A875A361ee5d99",reason:"thin"},IBRX:{token:"0x7c148F74ac7445D1F28366b7FcDC6792a9Fcd0Cf",reason:"no-pool"},INFQ:{token:"0xB853bC83a753342a4f8320ea680b4B1E84118D21",reason:"no-pool"},INOD:{token:"0xf1953DAB6FaD537488d5A022361FfAa8B4c95eC6",reason:"no-pool"},INTU:{token:"0x56d23beE5f41A7120170b0c603Dae30128e460e9",reason:"no-pool"},IONQ:{token:"0x558378E000D634A36593E338eBacdd6207640EfE",reason:"thin"},IREN:{token:"0xF0AB0c93bE6F41369d302e55db1A96b3c430212D",reason:"thin"},JOBY:{token:"0xb334C5cE741B80B5B671F47F5C269Cb193fe8E24",reason:"no-pool"},KLAC:{token:"0x96b933C74eCB4A0926b9210cef7b743EF46be2E9",reason:"no-pool"},KSS:{token:"0x12e3c047bf9AeCAF9dDC98c05C31BFD1dd043993",reason:"no-pool"},LHX:{token:"0x48d60243c66437c6ac3c2495Be94747aEd5Dfe25",reason:"no-pool"},LITE:{token:"0x8eF20885F94e3D9bc7eB3080279188Bd5ED7c08C",reason:"thin"},LRCX:{token:"0x57b0030166DB0C31690d1A5aA167e2e26e2C29a4",reason:"no-pool"},LUNR:{token:"0xa5D4968421bA94814Be3B136b15cf422101aC1a3",reason:"no-pool"},MDB:{token:"0xDdf2266b79abf0B48898959B0ed6E6adf512be74",reason:"no-pool"},MOD:{token:"0xc6Cbad1016b38B797610c25E1dc7D95988B1f362",reason:"no-pool"},MPWR:{token:"0x52D50D0280AD1054b43f052bD70a49a212A1b128",reason:"thin"},MTSI:{token:"0xC93f4d80e268AB922e871bd169156C3CC41894e6",reason:"no-pool"},MXL:{token:"0x48961813349333209994750ffA89b3c5C22eC969",reason:"no-pool"},NAVN:{token:"0xf7181b63Fdb858558A74ba96BC42732684cd7965",reason:"no-pool"},NNE:{token:"0xBEF75684C43c4ea7BD18Dd532a2244674Ee8b926",reason:"thin"},NOW:{token:"0x0C3260aF4B8f13a69c4c2dFb84fD667890CDFa14",reason:"thin"},NVTS:{token:"0xbE6702d7b70315376dC48a3293f24f0982F86386",reason:"no-pool"},OKLO:{token:"0x8B2f88497f15A18E9D4FFa1a8fFB8538399aE774",reason:"no-pool"},ONTO:{token:"0x8ff63eAeEe3fE54Ba450c4F5538064Ec5A893Aef",reason:"no-pool"},OUST:{token:"0x40E7a279850e443f582059ae5dC1c3b6563E6395",reason:"no-pool"},PATH:{token:"0xfb2664f07B6Aadd29ea7a59D8859b1AeB8645cDa",reason:"thin"},PENG:{token:"0x9b23573b156B52565012F5cE02CDF60AFBaa70Be",reason:"no-pool"},PL:{token:"0xAA4d64474c172010aB57719cb9951E6142a100d3",reason:"no-pool"},POWL:{token:"0x237c16D66590F67B886d978ACD362EAeaD8B18c7",reason:"no-pool"},PR:{token:"0x4189F0c66EBBB0bfeF1C31f763131361EF32f77C",reason:"no-pool"},PWR:{token:"0x9Ab02Ead789b6903c3c44d0ED32F9c707CDF12FD",reason:"thin"},QBTS:{token:"0xC583c60aeF9Dc401Da72cEC1B404743a93cea1Cc",reason:"no-pool"},QCOM:{token:"0x0f17206447090e464C277571124dD2688E48AEA9",reason:"no-pool"},RDW:{token:"0x92Ef19E82bD8fF36661DE838D5eaE7e5CEF0EfFE",reason:"no-pool"},RGTI:{token:"0x284358abc07F9359f19f4b5b4aC91901Be2597Ba",reason:"no-pool"},RUN:{token:"0x756Bc80af765C82da966a788858d65aDF14f3793",reason:"thin"},SATS:{token:"0x95052ddcd5DC25641657424A8Cf04834997E1730",reason:"no-pool"},SCHD:{token:"0xd63ABB2C13d7a8421a8017a712802053568e3C1D",reason:"thin"},SHY:{token:"0xBE274710Bf3d9567e1B290eF6a5F9f90ca016FD8",reason:"no-pool"},SIMO:{token:"0x77E655E37F4d913fB9540e0d541D824171a60e81",reason:"no-pool"},SLS:{token:"0x285b231728c7E4333799183DF1094d775246a535",reason:"no-pool"},SMCI:{token:"0xc01aA1fECeC0605b13bc84874ff7256C0f5F562a",reason:"no-pool"},SMH:{token:"0x072f979c2CAc8e1391B0162a87Fee094bF8744a0",reason:"thin"},SMR:{token:"0x1Eebee7F74517e0279dFb09d25B0407bEEc3FDd6",reason:"no-pool"},SOFI:{token:"0x98E75885157C80992A8D41b696D8c9C6Fb30A926",reason:"thin"},SOUN:{token:"0x6E3Dfd9f7e1649BaA14D25cac18C94d62dB10A54",reason:"no-pool"},SOXX:{token:"0x75742c18BC1f1C5c5f448f4C9D9C6F66dafAAa38",reason:"thin"},SPMO:{token:"0xAd622320e520de39e72d41EF07438C3Fd3354875",reason:"no-pool"},TEAM:{token:"0x5B97476b922F3305131B8f0B9D333172E87f4aaE",reason:"no-pool"},TEM:{token:"0xB1CC0EC7Db69Cf43539119814df40071b9d61793",reason:"no-pool"},TER:{token:"0x2778C5024D5cA2CdB0f8eAD671ffc69963AdCD9C",reason:"no-pool"},TSEM:{token:"0x89776d4Cd68193597A2fC132cfaC1fDe36CCeA8a",reason:"no-pool"},TTD:{token:"0x0b5fb4031cae9163db10B169Ee72685F0EdC8545",reason:"no-pool"},UMC:{token:"0x0E6e67Ba88e7b5d9B67636A215c76779B948dE79",reason:"thin"},UNH:{token:"0xcF364ea52787e289De6F32077834056E3E70D6A8",reason:"no-pool"},VICR:{token:"0x6006ed4B2F94110851ff7509D97D034f0EeD9226",reason:"no-pool"},VRT:{token:"0xFA78C12E6488814A0262E4e802749a4a737d5fB7",reason:"thin"},VSAT:{token:"0x26dCbfb34FC83CAbD6990f449674efDc6097fF85",reason:"no-pool"},VST:{token:"0x561e2a49212b7cCF47f2744Ccb83e200722fADBc",reason:"no-pool"},WDAY:{token:"0x82DA4646242e1D962e96e932269Dc644c94a9CaA",reason:"quote-failed"},WDC:{token:"0xF52597345A8Edf418bc4071b4a35112472277D3e",reason:"no-pool"},WULF:{token:"0x348Be1A8663f15edDe5CDf8A96BB69078f7aB6Fd",reason:"thin"},WYFI:{token:"0x9e7ABD3C9139D14E4c86DcE0e455AAB7A0C2FB3E",reason:"thin"},XLK:{token:"0x15Cd20759CE7F3285c29A319dE2D1A2e098c6f43",reason:"thin"},XNDU:{token:"0xA8eB3BCcbf2017eE7CBfb652eB51CF2E1B153289",reason:"no-pool"},XOM:{token:"0xf9B46d3D1B22199D4D1025a9cEDB540A33F1a2d5",reason:"thin"},ZETA:{token:"0xE674C5c071821f48BB2d12CAdb83617Eff438f9e",reason:"no-pool"},ZM:{token:"0x44c4F142009036cF477eD2d09932051843137CF1",reason:"thin"},ZS:{token:"0x7dc013eB55e436f30d7ED1AFE4E36d6e45e3c3f7",reason:"no-pool"}},census:{block:111456101,measuredAt:"2026-11-11T05:12:11.414Z",file:"ops/qa/2026-11-11-stock-census.json",rule:"priceReferences: hookless Uniswap USDG pools with at least 10,000 USDG in range whose 10 USDG quote executed within 2% of the pool spot. unpriced: every other official stock, with the reason: no-pool (no live USDG pool), thin (under 10,000 USDG in range) or quote-failed (enough depth, but the 10 USDG quote failed, so the price is unverified)."},notOffered:{CLSK:"thin",EWY:"thin",IONQ:"thin",RGTI:"thin",RKLB:"thin"},sourceCommit:"02230282d8888e00794207ed271ee01b4ce30309"};export{a};
|