@oakagentkit/core 0.2.5 → 0.2.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/abort-scope.d.ts +2 -0
- package/build/dist/api/abort-scope.js +1 -0
- package/build/dist/api/chain.js +1 -1
- package/build/dist/api/history.js +1 -1
- package/build/dist/api/http.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/checks.js +1 -1
- package/build/dist/api/modules/borro/copy.d.ts +17 -12
- package/build/dist/api/modules/borro/copy.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.d.ts +6 -2
- package/build/dist/api/modules/borro/reader.js +1 -1
- package/build/dist/api/modules/borro/types.d.ts +6 -0
- package/build/dist/api/modules/chop/abi.d.ts +558 -0
- package/build/dist/api/modules/chop/abi.js +1 -0
- package/build/dist/api/modules/chop/actions.d.ts +24 -0
- package/build/dist/api/modules/chop/actions.js +1 -0
- package/build/dist/api/modules/chop/checks.d.ts +34 -0
- package/build/dist/api/modules/chop/checks.js +1 -0
- package/build/dist/api/modules/chop/copy.d.ts +15 -0
- package/build/dist/api/modules/chop/copy.js +1 -0
- package/build/dist/api/modules/chop/guard.d.ts +13 -0
- package/build/dist/api/modules/chop/guard.js +1 -0
- package/build/dist/api/modules/chop/index.d.ts +3 -0
- package/build/dist/api/modules/chop/index.js +1 -0
- package/build/dist/api/modules/chop/pins.d.ts +53 -0
- package/build/dist/api/modules/chop/pins.js +1 -0
- package/build/dist/api/modules/chop/positions.d.ts +3 -0
- package/build/dist/api/modules/chop/positions.js +1 -0
- package/build/dist/api/modules/chop/reader.d.ts +195 -0
- package/build/dist/api/modules/chop/reader.js +1 -0
- package/build/dist/api/modules/chop/types.d.ts +44 -0
- package/build/dist/api/modules/chop/types.js +0 -0
- package/build/dist/api/modules/clanker/extensions.d.ts +9 -0
- 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.d.ts +15 -0
- 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/earn/copy.d.ts +32 -10
- package/build/dist/api/modules/earn/copy.js +1 -1
- package/build/dist/api/modules/earn/cost.d.ts +11 -1
- package/build/dist/api/modules/earn/cost.js +1 -1
- package/build/dist/api/modules/earn/index.js +1 -1
- package/build/dist/api/modules/earn/lp.d.ts +14 -1
- package/build/dist/api/modules/earn/lp.js +1 -1
- package/build/dist/api/modules/earn/options.d.ts +6 -4
- package/build/dist/api/modules/earn/options.js +1 -1
- package/build/dist/api/modules/erc8004/common.d.ts +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/validation.js +1 -1
- package/build/dist/api/modules/factor/abi.d.ts +642 -0
- package/build/dist/api/modules/factor/abi.js +1 -0
- package/build/dist/api/modules/factor/actions.d.ts +15 -0
- package/build/dist/api/modules/factor/actions.js +1 -0
- package/build/dist/api/modules/factor/api.d.ts +7 -0
- package/build/dist/api/modules/factor/api.js +1 -0
- package/build/dist/api/modules/factor/checks.d.ts +11 -0
- package/build/dist/api/modules/factor/checks.js +1 -0
- package/build/dist/api/modules/factor/copy.d.ts +33 -0
- package/build/dist/api/modules/factor/copy.js +1 -0
- package/build/dist/api/modules/factor/guard.d.ts +12 -0
- package/build/dist/api/modules/factor/guard.js +1 -0
- package/build/dist/api/modules/factor/index.d.ts +16 -0
- package/build/dist/api/modules/factor/index.js +8 -0
- package/build/dist/api/modules/factor/messages.d.ts +46 -0
- package/build/dist/api/modules/factor/messages.js +1 -0
- package/build/dist/api/modules/factor/pins.d.ts +64 -0
- package/build/dist/api/modules/factor/pins.js +1 -0
- package/build/dist/api/modules/factor/reader.d.ts +17 -0
- package/build/dist/api/modules/factor/reader.js +1 -0
- package/build/dist/api/modules/factor/types.d.ts +18 -0
- package/build/dist/api/modules/factor/types.js +0 -0
- package/build/dist/api/modules/gloam/abi.d.ts +89 -0
- package/build/dist/api/modules/gloam/abi.js +1 -0
- package/build/dist/api/modules/gloam/actions.d.ts +5 -0
- package/build/dist/api/modules/gloam/actions.js +1 -0
- package/build/dist/api/modules/gloam/checks.d.ts +17 -0
- package/build/dist/api/modules/gloam/checks.js +1 -0
- package/build/dist/api/modules/gloam/copy.d.ts +23 -0
- package/build/dist/api/modules/gloam/copy.js +2 -0
- package/build/dist/api/modules/gloam/index.d.ts +6 -0
- package/build/dist/api/modules/gloam/index.js +1 -0
- package/build/dist/api/modules/gloam/pins.d.ts +41 -0
- package/build/dist/api/modules/gloam/pins.js +1 -0
- package/build/dist/api/modules/gloam/types.d.ts +308 -0
- package/build/dist/api/modules/gloam/types.js +1 -0
- 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.d.ts +29 -1
- package/build/dist/api/modules/heyresearch/public-reads.js +1 -1
- package/build/dist/api/modules/heyresearch/scan.js +1 -1
- package/build/dist/api/modules/heyresearch/status-labels.d.ts +2 -0
- package/build/dist/api/modules/heyresearch/status-labels.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/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.js +1 -1
- package/build/dist/api/modules/hookr/addons.js +1 -1
- package/build/dist/api/modules/hookr/agent-gate.js +1 -1
- package/build/dist/api/modules/hookr/contracts.d.ts +2 -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.js +1 -1
- package/build/dist/api/modules/hookr/fill-bounty.js +1 -1
- package/build/dist/api/modules/hookr/index.js +1 -1
- package/build/dist/api/modules/hookr/launch-options.js +1 -1
- package/build/dist/api/modules/hookr/launch-receipt.js +1 -1
- 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.d.ts +2 -0
- 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.js +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.js +1 -1
- 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/actions.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/lighter/index.js +1 -1
- package/build/dist/api/modules/longbow/administration.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/perps-batch.js +1 -1
- package/build/dist/api/modules/meridian/perps-stream.js +1 -1
- package/build/dist/api/modules/meridian/perps.js +1 -1
- package/build/dist/api/modules/meridian/predict-read.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/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.d.ts +2 -0
- 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/gateway.js +1 -1
- package/build/dist/api/modules/orbio/index.js +1 -1
- package/build/dist/api/modules/pendle/convert.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/pons/claim.js +1 -1
- package/build/dist/api/modules/pons/holder-directory.js +1 -1
- package/build/dist/api/modules/pons/index.js +1 -1
- package/build/dist/api/modules/pons/launch-status.d.ts +1 -0
- package/build/dist/api/modules/pons/launch-status.js +1 -1
- package/build/dist/api/modules/pons/reads.js +1 -1
- package/build/dist/api/modules/pons/trade.d.ts +3 -2
- 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.d.ts +1 -0
- 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/stock-swap.js +1 -1
- package/build/dist/api/modules/raeto/authorization.d.ts +30 -0
- package/build/dist/api/modules/raeto/authorization.js +1 -0
- package/build/dist/api/modules/raeto/copy.d.ts +46 -0
- package/build/dist/api/modules/raeto/copy.js +1 -0
- package/build/dist/api/modules/raeto/errors.d.ts +4 -0
- package/build/dist/api/modules/raeto/errors.js +1 -0
- package/build/dist/api/modules/raeto/estimate.d.ts +2 -0
- package/build/dist/api/modules/raeto/estimate.js +1 -0
- package/build/dist/api/modules/raeto/index.d.ts +16 -0
- package/build/dist/api/modules/raeto/index.js +1 -0
- package/build/dist/api/modules/raeto/pairing.d.ts +40 -0
- package/build/dist/api/modules/raeto/pairing.js +1 -0
- package/build/dist/api/modules/raeto/pins.d.ts +24 -0
- package/build/dist/api/modules/raeto/pins.js +1 -0
- package/build/dist/api/modules/raeto/templates.d.ts +22 -0
- package/build/dist/api/modules/raeto/templates.js +1 -0
- package/build/dist/api/modules/raeto/terms.d.ts +8 -0
- package/build/dist/api/modules/raeto/terms.js +1 -0
- package/build/dist/api/modules/raeto/types.d.ts +64 -0
- package/build/dist/api/modules/raeto/types.js +0 -0
- package/build/dist/api/modules/relay/api.d.ts +16 -0
- package/build/dist/api/modules/relay/api.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.d.ts +1 -0
- package/build/dist/api/modules/relay/index.js +1 -1
- package/build/dist/api/modules/relay/order.js +1 -1
- package/build/dist/api/modules/relay/outbound-status.js +1 -1
- package/build/dist/api/modules/relay/readiness.d.ts +1 -0
- package/build/dist/api/modules/relay/readiness.js +1 -1
- package/build/dist/api/modules/relay/reads.js +1 -1
- package/build/dist/api/modules/relay/vaults.js +1 -1
- package/build/dist/api/modules/spark/actions.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/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.d.ts +1 -0
- 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/fee-percent.d.ts +4 -0
- package/build/dist/api/modules/uniswap/fee-percent.js +1 -0
- 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.d.ts +2 -0
- 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.d.ts +2 -0
- 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.d.ts +38 -0
- package/build/dist/api/modules/uniswap/quote-guard.js +1 -0
- 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.d.ts +10 -3
- 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.d.ts +6 -0
- 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/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.d.ts +3 -0
- package/build/dist/api/modules/wormhole/index.js +1 -1
- package/build/dist/api/modules/wormhole/scan-text.js +1 -1
- package/build/dist/api/modules/wormhole/swap-token-verdict.d.ts +11 -0
- package/build/dist/api/modules/wormhole/swap-token-verdict.js +1 -0
- package/build/dist/api/modules/wormhole/third-party-text.d.ts +24 -0
- package/build/dist/api/modules/wormhole/third-party-text.js +1 -0
- package/build/dist/api/modules/wormhole/token-check.d.ts +2 -0
- package/build/dist/api/modules/wormhole/token-check.js +1 -1
- package/build/dist/api/modules/wormhole/x402-client.d.ts +36 -0
- package/build/dist/api/modules/wormhole/x402-client.js +1 -0
- package/build/dist/api/oak-fee.d.ts +12 -0
- package/build/dist/api/oak-fee.js +1 -0
- package/build/dist/api/param-text.d.ts +22 -0
- package/build/dist/api/param-text.js +1 -0
- package/build/dist/api/position-economics.d.ts +70 -0
- package/build/dist/api/position-economics.js +1 -0
- package/build/dist/api/positions.d.ts +8 -5
- package/build/dist/api/positions.js +1 -1
- package/build/dist/api/prices.d.ts +3 -0
- package/build/dist/api/prices.js +1 -1
- package/build/dist/api/progress.d.ts +7 -0
- package/build/dist/api/progress.js +1 -0
- package/build/dist/api/read-budgets.d.ts +4 -0
- package/build/dist/api/read-budgets.js +1 -0
- package/build/dist/api/read-shape.d.ts +45 -0
- package/build/dist/api/read-shape.js +1 -0
- package/build/dist/api/revert.d.ts +23 -0
- package/build/dist/api/revert.js +1 -0
- package/build/dist/api/routes.js +1 -1
- package/build/dist/api/rpc.d.ts +1 -0
- package/build/dist/api/rpc.js +1 -1
- package/build/dist/api/secret-fields.js +1 -1
- package/build/dist/api/send.js +1 -1
- package/build/dist/api/signing-registry.d.ts +8 -0
- package/build/dist/api/signing-registry.js +1 -1
- package/build/dist/api/simulate.js +1 -1
- package/build/dist/api/swap.d.ts +4 -0
- package/build/dist/api/swap.js +1 -1
- package/build/dist/api/tokens.d.ts +1 -0
- package/build/dist/api/tokens.js +1 -1
- package/build/dist/api/tool-policy.js +1 -1
- package/build/dist/api/types.d.ts +9 -1
- package/build/dist/api/untrusted-unwrap.d.ts +1 -0
- package/build/dist/api/untrusted-unwrap.js +1 -0
- package/build/dist/api/usd-estimate.d.ts +23 -0
- package/build/dist/api/usd-estimate.js +1 -0
- package/build/dist/api/vendor-limits.js +1 -1
- package/build/dist/chunks/{JVLLVNF2.js → 2E4I7CJ7.js} +1 -1
- package/build/dist/chunks/2FHELZ7Y.js +1 -0
- package/build/dist/chunks/2GXHYI23.js +1 -0
- package/build/dist/chunks/2LWBN35N.js +1 -0
- package/build/dist/chunks/{4HG6FRVH.js → 2OKYXT25.js} +1 -1
- package/build/dist/chunks/2SUHQWND.js +1 -0
- package/build/dist/chunks/2ZWKIBJT.js +1 -0
- package/build/dist/chunks/32RXFUOH.js +1 -0
- package/build/dist/chunks/3CH2IPQL.js +1 -0
- package/build/dist/chunks/3DNJTJ2X.js +1 -0
- package/build/dist/chunks/3K2N5VFH.js +1 -0
- package/build/dist/chunks/3VBIRLU3.js +1 -0
- package/build/dist/chunks/3VWVW7PX.js +1 -0
- package/build/dist/chunks/3ZABD6ZF.js +2 -0
- package/build/dist/chunks/44MB6SA6.js +1 -0
- package/build/dist/chunks/4D4ZRZUW.js +1 -0
- package/build/dist/chunks/{KIFSRO5K.js → 4FPV4CRC.js} +1 -1
- package/build/dist/chunks/4GNUXN4K.js +1 -0
- package/build/dist/chunks/{K4DHHQBI.js → 4JRXEN7C.js} +2 -2
- package/build/dist/chunks/4JTTA3BX.js +1 -0
- package/build/dist/chunks/4OVIMYNH.js +2 -0
- package/build/dist/chunks/{326QMOTR.js → 4Q2ZBZXM.js} +1 -1
- package/build/dist/chunks/4RQAOOO2.js +1 -0
- package/build/dist/chunks/4TTDAF4B.js +1 -0
- package/build/dist/chunks/523ZIR3J.js +1 -0
- package/build/dist/chunks/5DPJQCKJ.js +68 -0
- package/build/dist/chunks/5HIHUYA4.js +1 -0
- package/build/dist/chunks/5PI57UC2.js +1 -0
- package/build/dist/chunks/5RXALTDT.js +1 -0
- package/build/dist/chunks/5TUXSOMI.js +1 -0
- package/build/dist/chunks/5UAXLWJ2.js +1 -0
- package/build/dist/chunks/5XAXJEWM.js +5 -0
- package/build/dist/chunks/67BWOVET.js +1 -0
- package/build/dist/chunks/6NUNCD5J.js +1 -0
- package/build/dist/chunks/6PZGDVHV.js +1 -0
- package/build/dist/chunks/{OKUO3BVM.js → 6UVGQYZ3.js} +1 -1
- package/build/dist/chunks/753HZZTY.js +1 -0
- package/build/dist/chunks/77CLMPM7.js +1 -0
- package/build/dist/chunks/7D73A6KS.js +1 -0
- package/build/dist/chunks/7MBVTNLU.js +1 -0
- package/build/dist/chunks/7QKYDNF6.js +18 -0
- package/build/dist/chunks/7VC53B5X.js +70 -0
- package/build/dist/chunks/{QSHCBASA.js → 7VNO46LV.js} +1 -1
- package/build/dist/chunks/ACH4BSME.js +3 -0
- package/build/dist/chunks/AHUCYDBC.js +1 -0
- package/build/dist/chunks/AI3VAPA3.js +1 -0
- package/build/dist/chunks/AMTRDPVO.js +1 -0
- package/build/dist/chunks/APHNOGNS.js +1 -0
- package/build/dist/chunks/APQYLJGS.js +1 -0
- package/build/dist/chunks/{WDK6VOG4.js → ARI72OYT.js} +1 -1
- package/build/dist/chunks/ARLGF5MU.js +1 -0
- package/build/dist/chunks/BAIY32AV.js +1 -0
- package/build/dist/chunks/BB765L75.js +3 -0
- package/build/dist/chunks/BE3A7677.js +1 -0
- package/build/dist/chunks/BX46C5ZP.js +1 -0
- package/build/dist/chunks/{IY7BXLT4.js → BZ34ZR65.js} +1 -1
- package/build/dist/chunks/C3WBHFLX.js +1 -0
- package/build/dist/chunks/C75MT5SD.js +1 -0
- package/build/dist/chunks/CAWTAR5V.js +1 -0
- package/build/dist/chunks/CNLL4NCR.js +1 -0
- package/build/dist/chunks/CO4GCF4L.js +1 -0
- package/build/dist/chunks/{P5PYFK7L.js → CQ5WRWV4.js} +1 -1
- package/build/dist/chunks/{SJJR4ZBZ.js → CSDN4MYP.js} +1 -1
- package/build/dist/chunks/CSOO4SW7.js +1 -0
- package/build/dist/chunks/CZL6T2ZQ.js +1 -0
- package/build/dist/chunks/D742AYEV.js +1 -0
- package/build/dist/chunks/DGCJZ3HO.js +1 -0
- package/build/dist/chunks/DNNFKDZR.js +1 -0
- package/build/dist/chunks/DPE7SPW7.js +1 -0
- package/build/dist/chunks/DSTMEY5F.js +1 -0
- package/build/dist/chunks/{X3BYCOWS.js → DYYEA5HB.js} +1 -1
- package/build/dist/chunks/EFESPGA2.js +1 -0
- package/build/dist/chunks/EGZREEG2.js +1 -0
- package/build/dist/chunks/EH5G4O3U.js +1 -0
- package/build/dist/chunks/EI6GGPDS.js +20 -0
- package/build/dist/chunks/EVBHQQQG.js +1 -0
- package/build/dist/chunks/EZZM2GQT.js +2 -0
- package/build/dist/chunks/F3VDVTMS.js +1 -0
- package/build/dist/chunks/F4UQEPJT.js +1 -0
- package/build/dist/chunks/FHTNMGFR.js +1 -0
- package/build/dist/chunks/FIO6VC2J.js +1 -0
- package/build/dist/chunks/FJLJ7ZQ5.js +1 -0
- package/build/dist/chunks/{WP6RHXGN.js → FL5SSHUL.js} +1 -1
- package/build/dist/chunks/FNGIJKMZ.js +1 -0
- package/build/dist/chunks/{KIFZ5ZSK.js → FOD34G2H.js} +1 -1
- package/build/dist/chunks/{WV3A3OUU.js → FOKEFXGP.js} +1 -1
- package/build/dist/chunks/FV4WZOTD.js +1 -0
- package/build/dist/chunks/FWIFTPSE.js +2 -0
- package/build/dist/chunks/FZ6IJZZM.js +1 -0
- package/build/dist/chunks/G2LAO23N.js +1 -0
- package/build/dist/chunks/GDRQ2ANN.js +1 -0
- package/build/dist/chunks/GG24LO2R.js +1 -0
- package/build/dist/chunks/GLF7WEY2.js +1 -0
- package/build/dist/chunks/GQ3XZFRL.js +1 -0
- package/build/dist/chunks/{QU5XKRGK.js → GQYV4TFO.js} +1 -1
- package/build/dist/chunks/GRSXWQWD.js +1 -0
- package/build/dist/chunks/{3GOHSYHW.js → GSFHM5L3.js} +1 -1
- package/build/dist/chunks/H5DY7CNB.js +1 -0
- package/build/dist/chunks/HCBX4NFM.js +1 -0
- package/build/dist/chunks/HHO5ISMM.js +1 -0
- package/build/dist/chunks/HIX5N25Z.js +1 -0
- package/build/dist/chunks/HKVQ646Q.js +1 -0
- package/build/dist/chunks/HS4DZPYT.js +1 -0
- package/build/dist/chunks/I6PQW2JI.js +1 -0
- package/build/dist/chunks/IEG6GLFR.js +1 -0
- package/build/dist/chunks/INOYMBWE.js +1 -0
- package/build/dist/chunks/IV4K7FMD.js +1 -0
- package/build/dist/chunks/{T2WHOZXM.js → J73ATSEQ.js} +1 -1
- package/build/dist/chunks/JBTOZ6IH.js +1 -0
- package/build/dist/chunks/JESMX2UC.js +1 -0
- package/build/dist/chunks/JJGZ7W3V.js +1 -0
- package/build/dist/chunks/JKRBGAX2.js +1 -0
- package/build/dist/chunks/JLRHM2DQ.js +1 -0
- package/build/dist/chunks/JOKL5L6X.js +1 -0
- package/build/dist/chunks/JS53DQVT.js +1 -0
- package/build/dist/chunks/{WIRBCS4W.js → JWR5XVP2.js} +1 -1
- package/build/dist/chunks/K6D6SDIG.js +1 -0
- package/build/dist/chunks/K7HTDKAT.js +1 -0
- package/build/dist/chunks/{GQ5GYUEH.js → KDGSYNOP.js} +1 -1
- package/build/dist/chunks/KKPMOAVI.js +1 -0
- package/build/dist/chunks/KREBNL2D.js +1 -0
- package/build/dist/chunks/L646YWDP.js +1 -0
- package/build/dist/chunks/{2MAMJJJC.js → LR4XTZ37.js} +1 -1
- package/build/dist/chunks/LVFI74ST.js +1 -0
- package/build/dist/chunks/{Z4FZVJ5Z.js → M7ZXDLKM.js} +1 -1
- package/build/dist/chunks/MVD3KWPP.js +1 -0
- package/build/dist/chunks/N245WC5R.js +1 -0
- package/build/dist/chunks/{WTXC3XKW.js → N4XNNXOJ.js} +1 -1
- package/build/dist/chunks/N6GIC7HJ.js +1 -0
- package/build/dist/chunks/{RUC7KH7A.js → NA424YAL.js} +1 -1
- package/build/dist/chunks/NUFZUKYS.js +1 -0
- package/build/dist/chunks/O3JWCJIF.js +1 -0
- package/build/dist/chunks/OARVU3RC.js +1 -0
- package/build/dist/chunks/OEZ7FCLF.js +1 -0
- package/build/dist/chunks/{H43RNCX2.js → OUROA7XR.js} +1 -1
- package/build/dist/chunks/{3FUVMSCF.js → OYJFXEDU.js} +1 -1
- package/build/dist/chunks/OYPAVXGQ.js +1 -0
- package/build/dist/chunks/{SMYWWIE6.js → OZ5MDUD2.js} +1 -1
- package/build/dist/chunks/P6OMKZMR.js +3 -0
- package/build/dist/chunks/PV4AK32X.js +1 -0
- package/build/dist/chunks/{HKEMQBFA.js → PXVREXCS.js} +1 -1
- package/build/dist/chunks/PZEF5LBL.js +2 -0
- package/build/dist/chunks/Q2ACLVWR.js +1 -0
- package/build/dist/chunks/QFSBDPLN.js +1 -0
- package/build/dist/chunks/QJNLLI6N.js +1 -0
- package/build/dist/chunks/QMZEGT5B.js +1 -0
- package/build/dist/chunks/{HSCQZ66A.js → REWXG6X6.js} +1 -1
- package/build/dist/chunks/{6B3VVISQ.js → RLI4JDOL.js} +1 -1
- package/build/dist/chunks/{4MXM6Q4W.js → RLMVA575.js} +1 -1
- package/build/dist/chunks/RPB46QAC.js +1 -0
- package/build/dist/chunks/{Q42YI3EP.js → RT7IU6TI.js} +1 -1
- package/build/dist/chunks/{ER47KGRM.js → SBY4RJ7I.js} +1 -1
- package/build/dist/chunks/SCG5HWMN.js +1 -0
- package/build/dist/chunks/SENOU5JR.js +1 -0
- package/build/dist/chunks/SKEKXEUU.js +1 -0
- package/build/dist/chunks/SOTYQGPT.js +1 -0
- package/build/dist/chunks/SZ466I5X.js +1 -0
- package/build/dist/chunks/{GNC6RXLT.js → TDZTC5WR.js} +1 -1
- package/build/dist/chunks/TE6D3OIX.js +1 -0
- package/build/dist/chunks/TID4C2KC.js +1 -0
- package/build/dist/chunks/TK55VASJ.js +2 -0
- package/build/dist/chunks/TM7Z5SA4.js +1 -0
- package/build/dist/chunks/TNJTET4G.js +1 -0
- package/build/dist/chunks/TPEKCXVE.js +1 -0
- package/build/dist/chunks/TVIMP5CK.js +1 -0
- package/build/dist/chunks/U2YCQWZK.js +1 -0
- package/build/dist/chunks/U363GQTF.js +1 -0
- package/build/dist/chunks/{U4JGEMKT.js → UEDGYZOC.js} +1 -1
- package/build/dist/chunks/UOCRYXAB.js +1 -0
- package/build/dist/chunks/UQEEF5W5.js +1 -0
- package/build/dist/chunks/{QQECG3WP.js → UUID2E22.js} +1 -1
- package/build/dist/chunks/UWBKAWX3.js +7 -0
- package/build/dist/chunks/V37L4DU4.js +1 -0
- package/build/dist/chunks/VR344DAZ.js +1 -0
- package/build/dist/chunks/{TX2EOIRS.js → VST6LFUB.js} +1 -1
- package/build/dist/chunks/VTPT5544.js +1 -0
- package/build/dist/chunks/VVWFB53Q.js +1 -0
- package/build/dist/chunks/WHTRPRRD.js +1 -0
- package/build/dist/chunks/WHVZ372B.js +1 -0
- package/build/dist/chunks/{AFBEZXNV.js → WNWRF4HE.js} +1 -1
- package/build/dist/chunks/WOGWLFAL.js +3 -0
- package/build/dist/chunks/WUT7TZYM.js +1 -0
- package/build/dist/chunks/XCKTE4ON.js +1 -0
- package/build/dist/chunks/XEPCDGN2.js +1 -0
- package/build/dist/chunks/XHYFISVV.js +1 -0
- package/build/dist/chunks/XPEDQBLI.js +1 -0
- package/build/dist/chunks/{D3YLXQPW.js → XQ24RSEI.js} +1 -1
- package/build/dist/chunks/XRDXFHIK.js +1 -0
- package/build/dist/chunks/XTFRPI4G.js +1 -0
- package/build/dist/chunks/XVJ7ILKK.js +1 -0
- package/build/dist/chunks/XWKK75TO.js +1 -0
- package/build/dist/chunks/{74Y2KDNR.js → XYPGLG6A.js} +1 -1
- package/build/dist/chunks/Y77EVVT4.js +1 -0
- package/build/dist/chunks/YEIM6BZQ.js +1 -0
- package/build/dist/chunks/{S47VUTHM.js → YMV5TL5C.js} +1 -1
- package/build/dist/chunks/YSMWCKIX.js +1 -0
- package/build/dist/chunks/YTLH4M4Y.js +1 -0
- package/build/dist/chunks/YUHNPUNK.js +1 -0
- package/build/dist/chunks/YWZQJJYY.js +1 -0
- package/build/dist/chunks/{UMIZMJWW.js → ZF2VPDRQ.js} +1 -1
- package/build/dist/chunks/ZFU65MB4.js +1 -0
- package/build/dist/chunks/ZKZUS3QU.js +1 -0
- package/build/dist/chunks/ZOMFHTB2.js +1 -0
- package/build/dist/chunks/{BTD5SMOW.js → ZP36DSOD.js} +1 -1
- package/build/dist/chunks/ZQ6AF3VX.js +1 -0
- package/package.json +1 -1
- package/build/dist/chunks/2KYAMXTS.js +0 -1
- package/build/dist/chunks/2TK3ETUO.js +0 -1
- package/build/dist/chunks/3MLUCYCB.js +0 -1
- package/build/dist/chunks/3NJ5KQ3Q.js +0 -1
- package/build/dist/chunks/3XNZUIRU.js +0 -1
- package/build/dist/chunks/3XXBLNEX.js +0 -1
- package/build/dist/chunks/45BRW2ZF.js +0 -1
- package/build/dist/chunks/46547QT3.js +0 -1
- package/build/dist/chunks/4PY3UFNR.js +0 -1
- package/build/dist/chunks/52ELWNXJ.js +0 -2
- package/build/dist/chunks/553UE2ZQ.js +0 -1
- package/build/dist/chunks/57MEFFCU.js +0 -1
- package/build/dist/chunks/5APS4T2D.js +0 -1
- package/build/dist/chunks/5SMVQCAP.js +0 -1
- package/build/dist/chunks/64GOINYS.js +0 -1
- package/build/dist/chunks/6D5DJA5B.js +0 -1
- package/build/dist/chunks/6I4NTKB2.js +0 -1
- package/build/dist/chunks/6OGDTEGH.js +0 -1
- package/build/dist/chunks/6PBGEPUK.js +0 -20
- package/build/dist/chunks/6WZX7C4T.js +0 -2
- package/build/dist/chunks/7WSHW7KW.js +0 -1
- package/build/dist/chunks/ABPL3ZZI.js +0 -1
- package/build/dist/chunks/AKYF5264.js +0 -7
- package/build/dist/chunks/APGLZXIW.js +0 -1
- package/build/dist/chunks/AVG4W3Y7.js +0 -1
- package/build/dist/chunks/B3RXD5ET.js +0 -1
- package/build/dist/chunks/BBS3ODWZ.js +0 -1
- package/build/dist/chunks/BJ2VGRF4.js +0 -1
- package/build/dist/chunks/BTPXJAUX.js +0 -1
- package/build/dist/chunks/C36BFZH6.js +0 -1
- package/build/dist/chunks/C7AXJHBT.js +0 -1
- package/build/dist/chunks/CBG5HARQ.js +0 -2
- package/build/dist/chunks/CCTXCMH4.js +0 -1
- package/build/dist/chunks/CHXBOXOD.js +0 -1
- package/build/dist/chunks/DJN3JAWB.js +0 -1
- package/build/dist/chunks/E674J2MD.js +0 -1
- package/build/dist/chunks/EE64JSLY.js +0 -1
- package/build/dist/chunks/EJ7O75A7.js +0 -1
- package/build/dist/chunks/ELSXLZN5.js +0 -1
- package/build/dist/chunks/FQ6UZCM6.js +0 -1
- package/build/dist/chunks/GEIFITAQ.js +0 -1
- package/build/dist/chunks/GGSAKCND.js +0 -1
- package/build/dist/chunks/GL4NCUMH.js +0 -1
- package/build/dist/chunks/GW626GG2.js +0 -1
- package/build/dist/chunks/H2XDMFQQ.js +0 -1
- package/build/dist/chunks/HAQPIBYR.js +0 -1
- package/build/dist/chunks/HCUHMCBW.js +0 -1
- package/build/dist/chunks/I26DMNJG.js +0 -1
- package/build/dist/chunks/IMO3GDA5.js +0 -1
- package/build/dist/chunks/INOZIE55.js +0 -1
- package/build/dist/chunks/J2OT4KAH.js +0 -1
- package/build/dist/chunks/JUZ5JU6D.js +0 -70
- package/build/dist/chunks/K3RDPI5J.js +0 -1
- package/build/dist/chunks/KBKK7UNY.js +0 -1
- package/build/dist/chunks/KPCY5V35.js +0 -1
- package/build/dist/chunks/L4N2RSK2.js +0 -1
- package/build/dist/chunks/L5BLHY34.js +0 -1
- package/build/dist/chunks/LSXUAHOE.js +0 -1
- package/build/dist/chunks/M37654RL.js +0 -1
- package/build/dist/chunks/MJ6WEWMI.js +0 -3
- package/build/dist/chunks/MR5L7V6Z.js +0 -1
- package/build/dist/chunks/N4Q6GN65.js +0 -1
- package/build/dist/chunks/NAZPDRIF.js +0 -1
- package/build/dist/chunks/NDCLTVIU.js +0 -1
- package/build/dist/chunks/NEEZBJBC.js +0 -1
- package/build/dist/chunks/NKX3FE34.js +0 -1
- package/build/dist/chunks/NKZKKCK2.js +0 -1
- package/build/dist/chunks/OJ4WJUPP.js +0 -1
- package/build/dist/chunks/OJPG45AC.js +0 -1
- package/build/dist/chunks/OTXSKFUD.js +0 -1
- package/build/dist/chunks/P3S4BR5G.js +0 -1
- package/build/dist/chunks/P56RZC2M.js +0 -1
- package/build/dist/chunks/P7I62KFR.js +0 -1
- package/build/dist/chunks/PK66GCDT.js +0 -1
- package/build/dist/chunks/PSBQWDYI.js +0 -1
- package/build/dist/chunks/PXT5YTWU.js +0 -1
- package/build/dist/chunks/QA3UHEO3.js +0 -1
- package/build/dist/chunks/QC3HH5UD.js +0 -3
- package/build/dist/chunks/QF52OIBS.js +0 -1
- package/build/dist/chunks/QO3KCJMP.js +0 -1
- package/build/dist/chunks/QZZ4O34L.js +0 -1
- package/build/dist/chunks/RQ4GHJXE.js +0 -1
- package/build/dist/chunks/RUX3RY7Y.js +0 -1
- package/build/dist/chunks/RVDUSNWW.js +0 -1
- package/build/dist/chunks/S7IFAQPG.js +0 -1
- package/build/dist/chunks/SIYUNOLI.js +0 -1
- package/build/dist/chunks/SSHCD6RZ.js +0 -18
- package/build/dist/chunks/T3AJSQYT.js +0 -1
- package/build/dist/chunks/TEJ7W534.js +0 -1
- package/build/dist/chunks/TM2XCRU7.js +0 -1
- package/build/dist/chunks/TVWMTMEF.js +0 -1
- package/build/dist/chunks/U5PMVP56.js +0 -1
- package/build/dist/chunks/U67J4BCH.js +0 -1
- package/build/dist/chunks/UHTRW2R6.js +0 -1
- package/build/dist/chunks/UHVSINR5.js +0 -1
- package/build/dist/chunks/VEQBHI6O.js +0 -1
- package/build/dist/chunks/VJS4DHQQ.js +0 -1
- package/build/dist/chunks/VOMGT5SG.js +0 -1
- package/build/dist/chunks/VY7XRHZQ.js +0 -1
- package/build/dist/chunks/VYAJXLND.js +0 -1
- package/build/dist/chunks/VYN2NRAP.js +0 -1
- package/build/dist/chunks/W2BYU5JQ.js +0 -2
- package/build/dist/chunks/W6BS3T7S.js +0 -1
- package/build/dist/chunks/WCNHZYQQ.js +0 -1
- package/build/dist/chunks/X2KFXCVD.js +0 -1
- package/build/dist/chunks/X3PQMS4N.js +0 -1
- package/build/dist/chunks/XBE3B6Y2.js +0 -1
- package/build/dist/chunks/XLOYBLFI.js +0 -1
- package/build/dist/chunks/XR7VK24E.js +0 -1
- package/build/dist/chunks/XSRIJUFU.js +0 -1
- package/build/dist/chunks/Y25EXZCO.js +0 -1
- package/build/dist/chunks/YCZPSMZ5.js +0 -1
- package/build/dist/chunks/YN56C7PN.js +0 -1
- package/build/dist/chunks/YWRDZQI6.js +0 -1
- package/build/dist/chunks/YXTSWRV5.js +0 -1
- package/build/dist/chunks/Z43BTOTE.js +0 -1
- package/build/dist/chunks/ZMFRMWHR.js +0 -1
- package/build/dist/chunks/ZSN4IRI5.js +0 -1
- package/build/dist/chunks/ZV5HIQXC.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as X}from"./3FUVMSCF.js";import{b as N}from"./P56RZC2M.js";import{a as h}from"./66F5ZH34.js";import{c as b,i as q,l as j}from"./NWNYJ26T.js";import{a as l}from"./FWD4L3CJ.js";import{a as o}from"./XSD5NL7J.js";import{a as R}from"./JXOEJPJ4.js";import{encodeFunctionData as ye,erc20Abi as W,getAddress as S,zeroAddress as D}from"viem";var v={locker:{address:"0xd0f7d8c6e9f6d80c297bebe4f7fd1b9c8125c32f",source:"https://sourcify.dev/server/v2/contract/4663/0xd0f7d8c6e9f6d80c297bebe4f7fd1b9c8125c32f?fields=abi,sources,compilation",match:"exact_match",verifiedAt:"2026-07-08T19:01:30Z",fetchedAt:"2026-10-31",abi:[{name:"Extended",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newUnlockTime",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeChanged",type:"event",inputs:[{name:"fee",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"LockOwnershipTransferred",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"from",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"Locked",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"owner",type:"address",indexed:!0,internalType:"address"},{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"},{name:"unlockTime",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"Withdrawn",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"owner",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"admin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"extend",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"newUnlockTime",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"fee",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"feeCollector",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"getLock",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"owner",type:"address",internalType:"address"},{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"unlockTime",type:"uint256",internalType:"uint256"},{name:"withdrawn",type:"bool",internalType:"bool"}],internalType:"struct RobinhoodLocker.Lock"}],stateMutability:"view"},{name:"isUnlocked",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"lock",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"unlockTime",type:"uint256",internalType:"uint256"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"lockedAmount",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"locks",type:"function",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"owner",type:"address",internalType:"address"},{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"unlockTime",type:"uint256",internalType:"uint256"},{name:"withdrawn",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"locksByOwner",type:"function",inputs:[{name:"o",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"locksByToken",type:"function",inputs:[{name:"t",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"nextLockId",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"setAdmin",type:"function",inputs:[{name:"a",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"setFee",type:"function",inputs:[{name:"_fee",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeCollector",type:"function",inputs:[{name:"c",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"timeRemaining",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"totalLocks",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"transferLockOwnership",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"withdraw",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"}]},burner:{address:"0x6bf43ca706faa8ea46803299c191484e82280652",source:"https://sourcify.dev/server/v2/contract/4663/0x6bf43ca706faa8ea46803299c191484e82280652?fields=abi,sources,compilation",match:"exact_match",verifiedAt:"2026-07-22T23:28:15Z",fetchedAt:"2026-10-31",abi:[{name:"Burned",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"burner",type:"address",indexed:!0,internalType:"address"},{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeChanged",type:"event",inputs:[{name:"fee",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"DEAD",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"admin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"burn",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"burns",type:"function",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"burner",type:"address",internalType:"address"},{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"timestamp",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"burnsByBurner",type:"function",inputs:[{name:"b",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"burnsByToken",type:"function",inputs:[{name:"t",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"fee",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"feeCollector",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"getBurn",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"burner",type:"address",internalType:"address"},{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"timestamp",type:"uint256",internalType:"uint256"}],internalType:"struct RobinhoodBurner.Burn"}],stateMutability:"view"},{name:"nextBurnId",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"setAdmin",type:"function",inputs:[{name:"a",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"setFee",type:"function",inputs:[{name:"_fee",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeCollector",type:"function",inputs:[{name:"c",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"totalBurnedOf",type:"function",inputs:[{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"totalBurns",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"}]},vesting:{address:"0x910e19bcC4bce46999994Ed7297E0Fc4431ec72E",source:"https://sourcify.dev/server/v2/contract/4663/0x910e19bcC4bce46999994Ed7297E0Fc4431ec72E?fields=abi,sources,compilation",match:"exact_match",verifiedAt:"2026-07-27T00:28:59Z",fetchedAt:"2026-10-31",abi:[{name:"AdminTransferStarted",type:"event",inputs:[{name:"current",type:"address",indexed:!0,internalType:"address"},{name:"pending",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"AdminTransferred",type:"event",inputs:[{name:"previous",type:"address",indexed:!0,internalType:"address"},{name:"current",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"BeneficiaryTransferred",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"from",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"Claimed",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"beneficiary",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeChanged",type:"event",inputs:[{name:"fee",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeCollectorChanged",type:"event",inputs:[{name:"collector",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{name:"FeesWithdrawn",type:"event",inputs:[{name:"collector",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"VestingCreated",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"beneficiary",type:"address",indexed:!0,internalType:"address"},{name:"creator",type:"address",indexed:!1,internalType:"address"},{name:"total",type:"uint256",indexed:!1,internalType:"uint256"},{name:"start",type:"uint64",indexed:!1,internalType:"uint64"},{name:"cliff",type:"uint64",indexed:!1,internalType:"uint64"},{name:"end",type:"uint64",indexed:!1,internalType:"uint64"}],anonymous:!1},{name:"MAX_BATCH",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MAX_FEE",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MIN_DURATION",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"acceptAdmin",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"},{name:"accruedFees",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"admin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"claim",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"claimable",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"create",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"beneficiary",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"start",type:"uint64",internalType:"uint64"},{name:"cliff",type:"uint64",internalType:"uint64"},{name:"end",type:"uint64",internalType:"uint64"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"createMany",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"beneficiaries",type:"address[]",internalType:"address[]"},{name:"amounts",type:"uint256[]",internalType:"uint256[]"},{name:"start",type:"uint64",internalType:"uint64"},{name:"cliff",type:"uint64",internalType:"uint64"},{name:"end",type:"uint64",internalType:"uint64"}],outputs:[{name:"firstId",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"fee",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"feeCollector",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"getSchedule",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"creator",type:"address",internalType:"address"},{name:"start",type:"uint64",internalType:"uint64"},{name:"beneficiary",type:"address",internalType:"address"},{name:"cliff",type:"uint64",internalType:"uint64"},{name:"token",type:"address",internalType:"address"},{name:"end",type:"uint64",internalType:"uint64"},{name:"total",type:"uint128",internalType:"uint128"},{name:"claimed",type:"uint128",internalType:"uint128"}],internalType:"struct RobinhoodVesting.Schedule"}],stateMutability:"view"},{name:"nextScheduleId",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"pendingAdmin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"schedules",type:"function",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"creator",type:"address",internalType:"address"},{name:"start",type:"uint64",internalType:"uint64"},{name:"beneficiary",type:"address",internalType:"address"},{name:"cliff",type:"uint64",internalType:"uint64"},{name:"token",type:"address",internalType:"address"},{name:"end",type:"uint64",internalType:"uint64"},{name:"total",type:"uint128",internalType:"uint128"},{name:"claimed",type:"uint128",internalType:"uint128"}],stateMutability:"view"},{name:"schedulesByBeneficiary",type:"function",inputs:[{name:"b",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"schedulesByCreator",type:"function",inputs:[{name:"c",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"schedulesByToken",type:"function",inputs:[{name:"token",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"setFee",type:"function",inputs:[{name:"_fee",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeCollector",type:"function",inputs:[{name:"c",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"totalSchedules",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"transferAdmin",type:"function",inputs:[{name:"newAdmin",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"transferBeneficiary",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"newBeneficiary",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"withdrawFees",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"}]},airdrop:{address:"0x6B1fE7b821001144Ee74EEA258b0AafdE20102E8",source:"https://sourcify.dev/server/v2/contract/4663/0x6B1fE7b821001144Ee74EEA258b0AafdE20102E8?fields=abi,sources,compilation",match:"match",verifiedAt:"2026-07-30T16:48:51Z",fetchedAt:"2026-10-31",abi:[{name:"AdminTransferStarted",type:"event",inputs:[{name:"current",type:"address",indexed:!0,internalType:"address"},{name:"pending",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"AdminTransferred",type:"event",inputs:[{name:"previous",type:"address",indexed:!0,internalType:"address"},{name:"current",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"AirdropCreated",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"creator",type:"address",indexed:!0,internalType:"address"},{name:"merkleRoot",type:"bytes32",indexed:!1,internalType:"bytes32"},{name:"total",type:"uint256",indexed:!1,internalType:"uint256"},{name:"maxClaims",type:"uint32",indexed:!1,internalType:"uint32"},{name:"endTime",type:"uint64",indexed:!1,internalType:"uint64"},{name:"listURI",type:"string",indexed:!1,internalType:"string"}],anonymous:!1},{name:"Claimed",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"index",type:"uint256",indexed:!1,internalType:"uint256"},{name:"account",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeChanged",type:"event",inputs:[{name:"feeBase",type:"uint256",indexed:!1,internalType:"uint256"},{name:"feePerWallet",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeCollectorChanged",type:"event",inputs:[{name:"collector",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{name:"FeesWithdrawn",type:"event",inputs:[{name:"collector",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"Swept",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"creator",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"MAX_FEE",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MAX_RECIPIENTS",type:"function",inputs:[],outputs:[{name:"",type:"uint32",internalType:"uint32"}],stateMutability:"view"},{name:"MAX_URI",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MIN_WINDOW",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"acceptAdmin",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"},{name:"accruedFees",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"admin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"airdrops",type:"function",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"creator",type:"address",internalType:"address"},{name:"endTime",type:"uint64",internalType:"uint64"},{name:"maxClaims",type:"uint32",internalType:"uint32"},{name:"token",type:"address",internalType:"address"},{name:"claims",type:"uint32",internalType:"uint32"},{name:"swept",type:"bool",internalType:"bool"},{name:"merkleRoot",type:"bytes32",internalType:"bytes32"},{name:"total",type:"uint128",internalType:"uint128"},{name:"remaining",type:"uint128",internalType:"uint128"}],stateMutability:"view"},{name:"claim",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"index",type:"uint256",internalType:"uint256"},{name:"account",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"proof",type:"bytes32[]",internalType:"bytes32[]"}],outputs:[],stateMutability:"nonpayable"},{name:"create",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"merkleRoot",type:"bytes32",internalType:"bytes32"},{name:"total",type:"uint256",internalType:"uint256"},{name:"maxClaims",type:"uint32",internalType:"uint32"},{name:"endTime",type:"uint64",internalType:"uint64"},{name:"uri",type:"string",internalType:"string"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"feeBase",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"feeCollector",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"feePerWallet",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"getAirdrop",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"creator",type:"address",internalType:"address"},{name:"endTime",type:"uint64",internalType:"uint64"},{name:"maxClaims",type:"uint32",internalType:"uint32"},{name:"token",type:"address",internalType:"address"},{name:"claims",type:"uint32",internalType:"uint32"},{name:"swept",type:"bool",internalType:"bool"},{name:"merkleRoot",type:"bytes32",internalType:"bytes32"},{name:"total",type:"uint128",internalType:"uint128"},{name:"remaining",type:"uint128",internalType:"uint128"}],internalType:"struct RobinhoodAirdrop.Airdrop"}],stateMutability:"view"},{name:"isClaimed",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"index",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"listURI",type:"function",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{name:"nextAirdropId",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"pendingAdmin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"quote",type:"function",inputs:[{name:"maxClaims",type:"uint32",internalType:"uint32"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"setFee",type:"function",inputs:[{name:"_feeBase",type:"uint256",internalType:"uint256"},{name:"_feePerWallet",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeCollector",type:"function",inputs:[{name:"c",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"sweep",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"totalAirdrops",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"transferAdmin",type:"function",inputs:[{name:"newAdmin",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"withdrawFees",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"}]},liquidityLocker:{address:"0x91Aa2dA1956C77F8448E18DCaf53383bCc658e67",source:"https://sourcify.dev/server/v2/contract/4663/0x91Aa2dA1956C77F8448E18DCaf53383bCc658e67?fields=abi,sources,compilation",match:"exact_match",verifiedAt:"2026-10-04T15:10:02Z",fetchedAt:"2026-10-31",abi:[{name:"AdminTransferStarted",type:"event",inputs:[{name:"next",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"AdminTransferred",type:"event",inputs:[{name:"previous",type:"address",indexed:!0,internalType:"address"},{name:"next",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"CollectFailed",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{name:"CollectFeeChanged",type:"event",inputs:[{name:"bps",type:"uint16",indexed:!1,internalType:"uint16"}],anonymous:!1},{name:"Collected",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"recipient",type:"address",indexed:!0,internalType:"address"},{name:"amount0",type:"uint256",indexed:!1,internalType:"uint256"},{name:"amount1",type:"uint256",indexed:!1,internalType:"uint256"},{name:"cut0",type:"uint256",indexed:!1,internalType:"uint256"},{name:"cut1",type:"uint256",indexed:!1,internalType:"uint256"},{name:"byAdmin",type:"bool",indexed:!1,internalType:"bool"}],anonymous:!1},{name:"CutDeferred",type:"event",inputs:[{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"CutSwept",type:"event",inputs:[{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"EthClaimed",type:"event",inputs:[{name:"recipient",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"EthCredited",type:"event",inputs:[{name:"recipient",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"Extended",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newUnlockTime",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeRecipientChanged",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"recipient",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"FeeVaultChanged",type:"event",inputs:[{name:"vault",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{name:"FixedFeeChanged",type:"event",inputs:[{name:"fee",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"HookAllowedChanged",type:"event",inputs:[{name:"hook",type:"address",indexed:!0,internalType:"address"},{name:"allowed",type:"bool",indexed:!1,internalType:"bool"}],anonymous:!1},{name:"KeeperChanged",type:"event",inputs:[{name:"keeper",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"LockOwnershipTransferred",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"from",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"Locked",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"owner",type:"address",indexed:!0,internalType:"address"},{name:"manager",type:"address",indexed:!0,internalType:"address"},{name:"tokenId",type:"uint256",indexed:!1,internalType:"uint256"},{name:"token0",type:"address",indexed:!1,internalType:"address"},{name:"token1",type:"address",indexed:!1,internalType:"address"},{name:"pool",type:"bytes32",indexed:!1,internalType:"bytes32"},{name:"unlockTime",type:"uint256",indexed:!1,internalType:"uint256"},{name:"collectFeeBps",type:"uint16",indexed:!1,internalType:"uint16"},{name:"hookVerified",type:"bool",indexed:!1,internalType:"bool"},{name:"feeRecipient",type:"address",indexed:!1,internalType:"address"},{name:"fixedFeePaid",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"PausedChanged",type:"event",inputs:[{name:"paused",type:"bool",indexed:!1,internalType:"bool"}],anonymous:!1},{name:"PreLockFeesReturned",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"to",type:"address",indexed:!0,internalType:"address"},{name:"amount0",type:"uint256",indexed:!1,internalType:"uint256"},{name:"amount1",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"Rescued",type:"event",inputs:[{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"RevenueSinkChanged",type:"event",inputs:[{name:"sink",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{name:"ShareRedirected",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"StrayPositionReturned",type:"event",inputs:[{name:"manager",type:"address",indexed:!0,internalType:"address"},{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"to",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"Withdrawn",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"to",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"BATCH_GAS_PER_LOCK",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MAX_BATCH",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MAX_COLLECT_FEE_BPS",type:"function",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{name:"MAX_FIXED_FEE",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MAX_LOCK_DURATION",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MIN_COLLECT_FEE_BPS",type:"function",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{name:"V3_FACTORY",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"V3_POSITIONS",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IV3PositionManager"}],stateMutability:"view"},{name:"V4_POOL_MANAGER",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"V4_POSITIONS",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IV4PositionManager"}],stateMutability:"view"},{name:"acceptAdmin",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"},{name:"admin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"adminCollect",type:"function",inputs:[{name:"ids",type:"uint256[]",internalType:"uint256[]"}],outputs:[],stateMutability:"nonpayable"},{name:"claimOwedEth",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"},{name:"claimOwedEthTo",type:"function",inputs:[{name:"to",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"collect",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"collectFeeBps",type:"function",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{name:"collectMany",type:"function",inputs:[{name:"ids",type:"uint256[]",internalType:"uint256[]"}],outputs:[],stateMutability:"nonpayable"},{name:"collectOneIsolated",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"byAdmin",type:"bool",internalType:"bool"}],outputs:[],stateMutability:"nonpayable"},{name:"cutOf",type:"function",inputs:[{name:"amount",type:"uint256",internalType:"uint256"},{name:"bps",type:"uint16",internalType:"uint16"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"pure"},{name:"extend",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"newUnlockTime",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"feeVault",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"fixedFee",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"getLock",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"owner",type:"address",internalType:"address"},{name:"unlockTime",type:"uint40",internalType:"uint40"},{name:"collectFeeBps",type:"uint16",internalType:"uint16"},{name:"isV4",type:"bool",internalType:"bool"},{name:"hookVerified",type:"bool",internalType:"bool"},{name:"withdrawn",type:"bool",internalType:"bool"},{name:"feeRecipient",type:"address",internalType:"address"},{name:"token0",type:"address",internalType:"address"},{name:"token1",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"}],internalType:"struct HoodLockLPLocker.Lock"}],stateMutability:"view"},{name:"hookAllowed",type:"function",inputs:[{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"isUnlocked",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"keeper",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"lock",type:"function",inputs:[{name:"manager",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"},{name:"unlockTime",type:"uint256",internalType:"uint256"},{name:"feeRecipient",type:"address",internalType:"address"},{name:"acceptUnverifiedHook",type:"bool",internalType:"bool"},{name:"maxCollectFeeBps",type:"uint16",internalType:"uint16"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"lockIdOf",type:"function",inputs:[{name:"",type:"address",internalType:"address"},{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"locksOf",type:"function",inputs:[{name:"owner",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"name",type:"function",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{name:"nextLockId",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"onERC721Received",type:"function",inputs:[{name:"",type:"address",internalType:"address"},{name:"",type:"address",internalType:"address"},{name:"",type:"uint256",internalType:"uint256"},{name:"",type:"bytes",internalType:"bytes"}],outputs:[{name:"",type:"bytes4",internalType:"bytes4"}],stateMutability:"pure"},{name:"owedEth",type:"function",inputs:[{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"paused",type:"function",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"pendingAdmin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"pendingCut",type:"function",inputs:[{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"pushOwedEth",type:"function",inputs:[{name:"who",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"rescueERC20",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"to",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"returnStrayPosition",type:"function",inputs:[{name:"manager",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"},{name:"to",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"revenueSink",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"setCollectFeeBps",type:"function",inputs:[{name:"bps",type:"uint16",internalType:"uint16"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeRecipient",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"recipient",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeVault",type:"function",inputs:[{name:"vault",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"setFixedFee",type:"function",inputs:[{name:"fee_",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"setHookAllowed",type:"function",inputs:[{name:"hook",type:"address",internalType:"address"},{name:"allowed",type:"bool",internalType:"bool"}],outputs:[],stateMutability:"nonpayable"},{name:"setKeeper",type:"function",inputs:[{name:"k",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"setPaused",type:"function",inputs:[{name:"p",type:"bool",internalType:"bool"}],outputs:[],stateMutability:"nonpayable"},{name:"setRevenueSink",type:"function",inputs:[{name:"sink",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"sweepPendingCut",type:"function",inputs:[{name:"token",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"transferAdmin",type:"function",inputs:[{name:"next",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"transferLockOwnership",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"withdraw",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"to",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"}]}};var Fe=v,Ie=S(v.vesting.address),Ee=["hoodlock_read","hoodlock_record","hoodlock_vesting_status","hoodlock_public"],$e=["hoodlock_vesting_create","hoodlock_vesting_claim","hoodlock_vesting_transfer","hoodlock_withdraw","hoodlock_extend","hoodlock_transfer_lock","hoodlock_set_fee_recipient","hoodlock_collect","hoodlock_airdrop_sweep","hoodlock_recover","hoodlock_admin"],C=h("Decimal record ID, including zero for token locks, burns, vesting and airdrops. LP IDs start at one."),le={id:C,kind:{type:"string",enum:["token","v2","v3","v4"]}},Y=(1n<<256n)-1n;function c(e,n,t=256){if(typeof e!="string"||!/^\d+$/.test(e))throw new o(`${n} must be a decimal base-unit string.`);let a=BigInt(e);if(a>(1n<<BigInt(t))-1n)throw new o(`${n} exceeds uint${t}.`);return a}function f(e,n,t=!1){let a=q(e,`Provide a valid ${n} address.`);return t?a:j(a,`${n} must not be the zero address.`)}function me(e,n){let t=c(e,n);if(t===0n||t===Y)throw new o(`${n} must be a positive exact amount, never unlimited.`);return t}function Q(e){if(typeof e!="string"||!Object.hasOwn(v,e))throw new o("Choose locker, burner, vesting, airdrop or liquidityLocker.");return e}function B(e){return v[e].abi}function k(e){return S(v[e].address)}function V(e,n){let t=B(e).find(a=>a.type==="function"&&a.name===n);if(!t)throw new o(`No published HoodLock ${e}.${n} function exists.`);return t}async function p(e,n,t,a=[]){return e.clientFor(l).readContract({address:k(n),abi:B(n),functionName:t,args:a})}function _(e,n){if(Array.isArray(e))return Object.fromEntries(n.map((t,a)=>[t,e[a]]));if(e&&typeof e=="object")return e;throw new o("HoodLock returned an invalid record. Retry the chain read.")}var ce=["owner","token","amount","unlockTime","withdrawn"],fe=["owner","unlockTime","collectFeeBps","isV4","hookVerified","withdrawn","feeRecipient","token0","token1","tokenId"],ee=["creator","start","beneficiary","cliff","token","end","total","claimed"],K=["creator","endTime","maxClaims","token","claims","swept","merkleRoot","total","remaining"];function M(e){return JSON.parse(JSON.stringify(e,(n,t)=>typeof t=="bigint"?t.toString():t))}async function g(e,n){let t=f(n,"token",!0);if(t===D)return N;let a=e.clientFor(l),[i,s]=await Promise.all([a.readContract({address:t,abi:W,functionName:"symbol"}),a.readContract({address:t,abi:W,functionName:"decimals"})]);if(!Number.isInteger(s)||s<0||s>255)throw new o("Token decimals are invalid.");return{address:t,chainId:l,symbol:R(String(i)),decimals:s}}function F(e,n,t="current owner"){if(f(e,t)!==S(n))throw new o(`This wallet is not the ${t}.`)}function z(e){if(e.withdrawn)throw new o("This HoodLock lock was already withdrawn.")}function Z(e){if(!["token","v2","v3","v4"].includes(String(e.kind)))throw new o("Provide kind: token, v2, v3 or v4.");return e.kind==="token"||e.kind==="v2"?"locker":"liquidityLocker"}async function H(e,n,t){return _(await p(e,n,"getLock",[t]),n==="locker"?ce:fe)}function G(e,n){if((e.kind==="v3"||e.kind==="v4")&&!!n.isV4!=(e.kind==="v4"))throw new o("Lock kind disagrees with the on-chain NFT version.")}async function T(e,n,t,a,i,s,r=0n,u=[]){let d=e.unsignedTx({to:k(t),chainId:l,value:r.toString(),data:ye({abi:B(t),functionName:a,args:i}),description:s}),m=await e.preview([...u,d],S(n));return{txs:m.txs,preview:m,summary:s,contract:k(t),chainId:l,method:a,arguments:M(i)}}function w(e,n,t,a,i){return{name:n,inputSchema:{type:"object",properties:t,required:a,additionalProperties:!1},async execute(s,r){try{return await i(s,S(r))}catch(u){throw new o(e.plainError(u))}}}}async function Te(e,n,t){let a=f(n.token,"token"),i=c(n.start,"start",64),s=c(n.cliff,"cliff",64),r=c(n.end,"end",64),[u,d,m,y,x]=await Promise.all([e.clientFor(l).getBlock(),p(e,"vesting","fee"),p(e,"vesting","MIN_DURATION"),p(e,"vesting","MAX_BATCH"),g(e,a)]);if(i>s||s>r||r<=i)throw new o("Vesting dates require start <= cliff <= end and end > start.");if(r>=1000000000000n||r<=u.timestamp+BigInt(String(m))+30n)throw new o("Vesting end must be Unix seconds, more than 24 hours plus a 30-second inclusion margin after the current block.");let I=n.entries!==void 0;if(I&&(n.beneficiary!==void 0||n.amount!==void 0))throw new o("Use entries or beneficiary/amount, not both.");if(I&&(!Array.isArray(n.entries)||n.entries.length===0||n.entries.length>Number(y)))throw new o(`Provide between 1 and ${String(y)} vesting entries.`);let $=I?n.entries:[{beneficiary:n.beneficiary,amount:n.amount}],P=$.map(A=>f(A?.beneficiary,"beneficiary")),L=$.map(A=>me(A?.amount,"amount"));if(L.some(A=>A>=1n<<128n))throw new o("Each vesting amount must fit uint128.");let O=L.reduce((A,de)=>A+de,0n);if(O>=Y)throw new o("Vesting total exceeds the exact approval range.");let E=BigInt(String(d))*BigInt($.length);if(n.maxFee!==void 0&&E>c(n.maxFee,"maxFee"))throw new o("Live vesting fee exceeds maxFee.");let re=I?"createMany":"create",oe=I?[a,P,L,i,s,r]:[a,P[0],L[0],i,s,r],ue=`Create ${$.length} irrevocable HoodLock vesting schedule(s): ${O} ${x.symbol} base units (${a}, decimals ${x.decimals}) for ${P.join(", ")}; start ${i}, cliff ${s}, end ${r}; exact fee ${E} wei. Creator cannot cancel or recover principal. Recorded totals use tokens actually received; preserve mined schedule IDs.`;return X(e,{...await T(e,t,"vesting",re,oe,ue,E,[e.approval(a,k("vesting"),O.toString(),l)]),token:x,amount:O.toString(),fee:{token:N,amount:E.toString()}},k("vesting"),E)}async function te(e,n){let t=_(await p(e,"vesting","getSchedule",[n]),ee);if(BigInt(String(t.total))===0n)throw new o("No HoodLock vesting schedule exists for this ID.");let[a,i]=await Promise.all([p(e,"vesting","claimable",[n]),g(e,t.token)]);return{id:n.toString(),contract:k("vesting"),chainId:l,schedule:M(t),token:i,claimable:String(a),remaining:(BigInt(String(t.total))-BigInt(String(t.claimed))).toString(),proofUrl:`https://hoodlock.tech/proof/vesting/${n}`}}async function ne(e,n,t){let a=n.account===void 0?t:f(n.account,"account"),i=n.role??"beneficiary";if(!["beneficiary","creator","token"].includes(String(i)))throw new o("Choose beneficiary, creator or token for vesting discovery.");let r=await p(e,"vesting",i==="creator"?"schedulesByCreator":i==="token"?"schedulesByToken":"schedulesByBeneficiary",[a]),u=[];for(let d of[...new Set(r.map(String))]){let m=await te(e,BigInt(d));(i!=="beneficiary"||f(m.schedule.beneficiary,"beneficiary")===a)&&u.push(m)}return{account:a,role:i,schedules:u,summary:`Found ${u.length} HoodLock vesting schedule(s); completed schedules remain visible.`}}async function J(e,n,t){return n.id===void 0?ne(e,n,t):te(e,c(n.id,"id"))}function Le(e){return{tools:[w(e,"hoodlock_vesting_create",{token:b,beneficiary:b,amount:h(),entries:{type:"array",minItems:1,maxItems:200,items:{type:"object",properties:{beneficiary:b,amount:h()},required:["beneficiary","amount"],additionalProperties:!1}},start:h(),cliff:h(),end:h(),maxFee:h()},["token","start","cliff","end"],(t,a)=>Te(e,t,a)),w(e,"hoodlock_vesting_status",{id:C,account:b,role:{type:"string",enum:["beneficiary","creator","token"]}},[],(t,a)=>J(e,t,a)),...["claim","transfer"].map(t=>w(e,`hoodlock_vesting_${t}`,{id:C,...t==="transfer"?{beneficiary:b}:{}},t==="transfer"?["id","beneficiary"]:["id"],async(a,i)=>{let s=c(a.id,"id"),r=_(await p(e,"vesting","getSchedule",[s]),ee);if(F(r.beneficiary,i,"current beneficiary"),t==="transfer"){let m=f(a.beneficiary,"beneficiary");return T(e,i,"vesting","transferBeneficiary",[s,m],`Transfer beneficiary rights for vesting #${s} from ${i} to ${m}. Remaining tokens follow the schedule; creator cannot revoke it.`)}let u=BigInt(String(await p(e,"vesting","claimable",[s])));if(u===0n)throw new o("Nothing is claimable yet; check the cliff and previous claims.");let d=await g(e,r.token);return{...await T(e,i,"vesting","claim",[s],`Claim currently ${u} ${d.symbol} base units from vesting #${s} to current beneficiary ${i}; live inclusion time determines the final amount.`),token:d,amount:u.toString()}})),...["withdraw","extend","transfer_lock","set_fee_recipient"].map(t=>w(e,`hoodlock_${t}`,{...le,...t==="withdraw"?{to:b}:t==="extend"?{unlockTime:h()}:t==="transfer_lock"?{owner:b}:{recipient:b}},["kind","id",...t==="extend"?["unlockTime"]:t==="transfer_lock"?["owner"]:t==="set_fee_recipient"?["recipient"]:[]],async(a,i)=>{let s=Z(a),r=c(a.id,"id"),u=await H(e,s,r);F(u.owner,i),z(u),G(a,u);let d=(await e.clientFor(l).getBlock()).timestamp;if(t==="withdraw"){if(d<BigInt(String(u.unlockTime)))throw new o(`Still locked until Unix ${String(u.unlockTime)}; expiry never withdraws automatically.`);let y=a.to===void 0?i:f(a.to,"withdrawal recipient");if(s==="locker"&&y!==i)throw new o("Token locks withdraw only to the current owner; omit to or use this wallet.");return{...await T(e,i,s,"withdraw",s==="locker"?[r]:[r,y],`Withdraw mature HoodLock ${a.kind} lock #${r} to ${y}; ${s==="locker"?`${String(u.amount)} token base units`:`position NFT #${String(u.tokenId)}`}.`),record:M(u),recipient:y}}if(t==="extend"){let y=c(a.unlockTime,"unlockTime");if(y<=BigInt(String(u.unlockTime))||y<=d||y>d+3153600000n)throw new o("New unlockTime must extend the lock, be future Unix seconds, and at most 100 years away.");return T(e,i,s,"extend",[r,y],`Extend HoodLock ${a.kind} lock #${r} from ${String(u.unlockTime)} to ${y}; it cannot be shortened.`)}if(t==="set_fee_recipient"){if(s!=="liquidityLocker")throw new o("Only NFT locks have a fee recipient.");let y=f(a.recipient,"fee recipient");return T(e,i,s,"setFeeRecipient",[r,y],`Redirect future collected fees for HoodLock NFT lock #${r} to ${y}; ownership and maturity stay the same.`)}let m=f(a.owner,"new owner");return T(e,i,s,"transferLockOwnership",[r,m],`Transfer HoodLock ${a.kind} lock #${r} to ${m}; that owner can withdraw after maturity.${s==="liquidityLocker"?" The contract also resets feeRecipient to the new owner.":""}`)})),w(e,"hoodlock_collect",{id:C,ids:{type:"array",minItems:1,maxItems:50,items:C}},[],async(t,a)=>{if(t.id===void 0==(t.ids===void 0))throw new o("Provide exactly one of id or ids.");let i=t.ids===void 0?[c(t.id,"id")]:ie(t.ids),s=[];for(let u of i){let d=await H(e,"liquidityLocker",u);F(d.owner,a),z(d),s.push({id:u.toString(),...M(d)})}let r=t.ids!==void 0;return{...await T(e,a,"liquidityLocker",r?"collectMany":"collect",r?[i]:[i[0]],`Collect fees for HoodLock NFT lock(s) ${i.join(", ")}; each lock's frozen collectFeeBps goes to HoodLock, the net to its recorded feeRecipient. Liquidity stays locked.${r?" Individual locks may fail; inspect Collected/CollectFailed events and balances.":""} Native ETH may become owedEth if delivery fails; refused ERC-20 fee shares fall back to the lock owner.`),locks:s}}),w(e,"hoodlock_airdrop_sweep",{id:C},["id"],async(t,a)=>{let i=c(t.id,"id"),s=_(await p(e,"airdrop","getAirdrop",[i]),K);if(F(s.creator,a,"airdrop creator"),s.swept)throw new o("This airdrop was already swept.");if(BigInt(String(s.endTime))===0n)throw new o("A zero-deadline airdrop can never be swept.");if((await e.clientFor(l).getBlock()).timestamp<BigInt(String(s.endTime)))throw new o("This airdrop has not ended; wait until endTime.");let r=await g(e,s.token);return{...await T(e,a,"airdrop","sweep",[i],`Recover the ${String(s.remaining)} remaining ${r.symbol} base units from expired airdrop #${i} to creator ${a}. This closes claims permanently.`),token:r,amount:String(s.remaining)}}),w(e,"hoodlock_record",{id:C,kind:{type:"string",enum:["token","v2","v3","v4","burn","vesting","airdrop"]}},["kind","id"],async(t,a)=>{let i=c(t.id,"id");if(t.kind==="vesting")return J(e,t,a);if(t.kind==="burn"){let d=_(await p(e,"burner","getBurn",[i]),["burner","token","amount","timestamp"]);if(BigInt(String(d.amount))===0n)throw new o("No HoodLock burn exists for this ID.");return{id:i.toString(),chainId:l,contract:k("burner"),record:M(d),token:await g(e,d.token),totalSupplyReduced:!1,proofUrl:`https://hoodlock.tech/proof/burn/${i}`}}if(t.kind==="airdrop"){let d=_(await p(e,"airdrop","getAirdrop",[i]),K);if(String(d.creator).toLowerCase()===D)throw new o("No HoodLock airdrop exists for this ID.");return{id:i.toString(),chainId:l,contract:k("airdrop"),record:M(d),token:await g(e,d.token),listURI:R(String(await p(e,"airdrop","listURI",[i])))}}let s=Z(t),r=await H(e,s,i);if(String(r.owner).toLowerCase()===D)throw new o("No HoodLock lock exists for this ID.");G(t,r);let u=s==="locker"?{token:await g(e,r.token)}:{token0:await g(e,r.token0),token1:await g(e,r.token1)};return{id:i.toString(),chainId:l,contract:k(s),record:M(r),...u,proofUrl:`https://hoodlock.tech/proof/${s==="locker"?"lock":"position"}/${i}`}}),w(e,"hoodlock_read",{contract:{type:"string",enum:Object.keys(v)},method:{type:"string",enum:be()},arguments:{type:"array",maxItems:6,items:{}}},["contract","method"],async t=>{let a=Q(t.contract),i=V(a,String(t.method));if(i.stateMutability!=="view"&&i.stateMutability!=="pure")throw new o("hoodlock_read accepts only published view/pure functions.");let s=U(i,t.arguments??[]),r=await p(e,a,i.name,s);return{chainId:l,contract:k(a),method:i.name,value:i.outputs.length===1&&i.outputs[0].type==="string"?R(String(r)):M(r),outputs:i.outputs,summary:"Raw contract view; owner indexes may include previous owners. Check current records. No transaction was built."}}),w(e,"hoodlock_recover",{method:{type:"string",enum:["claimOwedEth","claimOwedEthTo","pushOwedEth","sweepPendingCut"]},arguments:{type:"array",maxItems:1,items:b}},["method"],async(t,a)=>{let i=String(t.method);if(!["claimOwedEth","claimOwedEthTo","pushOwedEth","sweepPendingCut"].includes(i))throw new o("Choose a published deferred ETH or protocol-cut recovery method.");let s=U(V("liquidityLocker",i),t.arguments??[]),r=i==="claimOwedEthTo"||i==="pushOwedEth"?f(s[0],"recipient"):a,u=i==="sweepPendingCut"?await p(e,"liquidityLocker","pendingCut",s):await p(e,"liquidityLocker","owedEth",[i==="pushOwedEth"?r:a]);if(BigInt(String(u))===0n)throw new o("There is no deferred balance to recover.");let d=i==="sweepPendingCut"?String(await p(e,"liquidityLocker","feeVault")):r;return T(e,a,"liquidityLocker",i,s,`HoodLock ${i}: recover ${String(u)} base units to ${d}; only the contract-recorded credit or cut can move.`)}),w(e,"hoodlock_admin",{contract:{type:"string",enum:Object.keys(v)},method:{type:"string",enum:[...new Set(Object.values(se).flat())]},arguments:{type:"array",maxItems:3,items:{}}},["contract","method"],(t,a)=>we(e,t,a))],positions:async t=>((await ne(e,{},t)).schedules??[]).filter(s=>BigInt(s.remaining)>0n).map(s=>({module:"hoodlock",id:`vesting:${s.id}`,chainId:l,assets:[{token:s.token,amount:s.remaining}],description:`HoodLock vesting #${s.id}: ${s.claimable} base units claimable; ${s.remaining} remain for current beneficiary ${t}.`}))}}function ie(e){if(!Array.isArray(e)||e.length===0||e.length>50)throw new o("Provide between 1 and 50 distinct decimal IDs.");let n=e.map(t=>c(t,"id"));if(new Set(n.map(String)).size!==n.length)throw new o("Duplicate IDs are not allowed in a collection batch.");return n}function be(){return[...new Set(Object.keys(v).flatMap(e=>B(e).filter(n=>n.type==="function"&&["view","pure"].includes(n.stateMutability)&&n.name!=="onERC721Received").map(n=>n.name)))]}function ae(e,n){if(e.type.endsWith("[]")){if(!Array.isArray(n)||n.length>200)throw new o("Function arrays must contain at most 200 items.");return n.map(t=>ae({...e,type:e.type.slice(0,-2)},t))}if(e.type==="address")return f(n,e.name??"address",!0);if(e.type==="bool"){if(typeof n!="boolean")throw new o("Function boolean arguments must be booleans.");return n}if(/^uint\d*$/.test(e.type))return c(n,e.name??"integer",Number(e.type.slice(4)||256));throw new o(`Unsupported published argument type ${e.type}.`)}function U(e,n){if(!Array.isArray(n)||n.length!==e.inputs.length)throw new o(`${e.name} needs ${e.inputs.length} ABI-ordered arguments.`);return e.inputs.map((t,a)=>ae(t,n[a]))}var se={locker:["setAdmin","setFee","setFeeCollector"],burner:["setAdmin","setFee","setFeeCollector"],vesting:["setFee","setFeeCollector","transferAdmin","acceptAdmin","withdrawFees"],airdrop:["setFee","setFeeCollector","transferAdmin","acceptAdmin","withdrawFees"],liquidityLocker:["setCollectFeeBps","setFixedFee","setFeeVault","setRevenueSink","setPaused","setHookAllowed","setKeeper","transferAdmin","acceptAdmin","adminCollect","rescueERC20","returnStrayPosition"]};async function we(e,n,t){let a=Q(n.contract),i=String(n.method);if(!se[a].includes(i))throw new o(`No supported admin ${a}.${i} route exists.`);let s=U(V(a,i),n.arguments??[]),r=i==="acceptAdmin"?"pendingAdmin":i==="withdrawFees"?"feeCollector":"admin",u=await p(e,a,r);if(i==="adminCollect"&&S(String(u))!==t?F(await p(e,a,"keeper"),t,"admin or keeper"):F(u,t,r),i==="adminCollect"&&ie(s[0].map(String)),i==="returnStrayPosition"){let d=f(s[0],"manager"),m=["V3_POSITIONS","V4_POSITIONS"];if(!(await Promise.all(m.map(x=>p(e,"liquidityLocker",x)))).some(x=>S(String(x))===d))throw new o("Only a configured position manager can return a stray NFT.");if(BigInt(String(await p(e,"liquidityLocker","lockIdOf",s.slice(0,2))))!==0n)throw new o("An actively locked NFT cannot be rescued.")}return T(e,t,a,i,s,`HoodLock ${a}.${i}(${JSON.stringify(M(s))}) by authorized ${r} ${t}. This changes protocol configuration or recovers only assets allowed by the contract. Existing custody rights cannot be overridden.`)}export{Fe as a,Ie as b,Ee as c,$e as d,c as e,Le as f};
|
|
1
|
+
import{b as W}from"./OYJFXEDU.js";import{b as N}from"./DNNFKDZR.js";import{a as k}from"./66F5ZH34.js";import{c as b,i as q,l as j}from"./NWNYJ26T.js";import{a as l}from"./FWD4L3CJ.js";import{a as o}from"./XSD5NL7J.js";import{a as R}from"./JXOEJPJ4.js";import{encodeFunctionData as ye,erc20Abi as X,getAddress as S,zeroAddress as U}from"viem";var v={locker:{address:"0xd0f7d8c6e9f6d80c297bebe4f7fd1b9c8125c32f",source:"https://sourcify.dev/server/v2/contract/4663/0xd0f7d8c6e9f6d80c297bebe4f7fd1b9c8125c32f?fields=abi,sources,compilation",match:"exact_match",verifiedAt:"2026-07-08T19:01:30Z",fetchedAt:"2026-10-31",abi:[{name:"Extended",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newUnlockTime",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeChanged",type:"event",inputs:[{name:"fee",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"LockOwnershipTransferred",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"from",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"Locked",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"owner",type:"address",indexed:!0,internalType:"address"},{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"},{name:"unlockTime",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"Withdrawn",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"owner",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"admin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"extend",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"newUnlockTime",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"fee",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"feeCollector",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"getLock",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"owner",type:"address",internalType:"address"},{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"unlockTime",type:"uint256",internalType:"uint256"},{name:"withdrawn",type:"bool",internalType:"bool"}],internalType:"struct RobinhoodLocker.Lock"}],stateMutability:"view"},{name:"isUnlocked",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"lock",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"unlockTime",type:"uint256",internalType:"uint256"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"lockedAmount",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"locks",type:"function",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"owner",type:"address",internalType:"address"},{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"unlockTime",type:"uint256",internalType:"uint256"},{name:"withdrawn",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"locksByOwner",type:"function",inputs:[{name:"o",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"locksByToken",type:"function",inputs:[{name:"t",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"nextLockId",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"setAdmin",type:"function",inputs:[{name:"a",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"setFee",type:"function",inputs:[{name:"_fee",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeCollector",type:"function",inputs:[{name:"c",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"timeRemaining",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"totalLocks",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"transferLockOwnership",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"withdraw",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"}]},burner:{address:"0x6bf43ca706faa8ea46803299c191484e82280652",source:"https://sourcify.dev/server/v2/contract/4663/0x6bf43ca706faa8ea46803299c191484e82280652?fields=abi,sources,compilation",match:"exact_match",verifiedAt:"2026-07-22T23:28:15Z",fetchedAt:"2026-10-31",abi:[{name:"Burned",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"burner",type:"address",indexed:!0,internalType:"address"},{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeChanged",type:"event",inputs:[{name:"fee",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"DEAD",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"admin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"burn",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"burns",type:"function",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"burner",type:"address",internalType:"address"},{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"timestamp",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"burnsByBurner",type:"function",inputs:[{name:"b",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"burnsByToken",type:"function",inputs:[{name:"t",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"fee",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"feeCollector",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"getBurn",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"burner",type:"address",internalType:"address"},{name:"token",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"timestamp",type:"uint256",internalType:"uint256"}],internalType:"struct RobinhoodBurner.Burn"}],stateMutability:"view"},{name:"nextBurnId",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"setAdmin",type:"function",inputs:[{name:"a",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"setFee",type:"function",inputs:[{name:"_fee",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeCollector",type:"function",inputs:[{name:"c",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"totalBurnedOf",type:"function",inputs:[{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"totalBurns",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"}]},vesting:{address:"0x910e19bcC4bce46999994Ed7297E0Fc4431ec72E",source:"https://sourcify.dev/server/v2/contract/4663/0x910e19bcC4bce46999994Ed7297E0Fc4431ec72E?fields=abi,sources,compilation",match:"exact_match",verifiedAt:"2026-07-27T00:28:59Z",fetchedAt:"2026-10-31",abi:[{name:"AdminTransferStarted",type:"event",inputs:[{name:"current",type:"address",indexed:!0,internalType:"address"},{name:"pending",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"AdminTransferred",type:"event",inputs:[{name:"previous",type:"address",indexed:!0,internalType:"address"},{name:"current",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"BeneficiaryTransferred",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"from",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"Claimed",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"beneficiary",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeChanged",type:"event",inputs:[{name:"fee",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeCollectorChanged",type:"event",inputs:[{name:"collector",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{name:"FeesWithdrawn",type:"event",inputs:[{name:"collector",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"VestingCreated",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"beneficiary",type:"address",indexed:!0,internalType:"address"},{name:"creator",type:"address",indexed:!1,internalType:"address"},{name:"total",type:"uint256",indexed:!1,internalType:"uint256"},{name:"start",type:"uint64",indexed:!1,internalType:"uint64"},{name:"cliff",type:"uint64",indexed:!1,internalType:"uint64"},{name:"end",type:"uint64",indexed:!1,internalType:"uint64"}],anonymous:!1},{name:"MAX_BATCH",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MAX_FEE",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MIN_DURATION",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"acceptAdmin",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"},{name:"accruedFees",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"admin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"claim",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"claimable",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"create",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"beneficiary",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"start",type:"uint64",internalType:"uint64"},{name:"cliff",type:"uint64",internalType:"uint64"},{name:"end",type:"uint64",internalType:"uint64"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"createMany",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"beneficiaries",type:"address[]",internalType:"address[]"},{name:"amounts",type:"uint256[]",internalType:"uint256[]"},{name:"start",type:"uint64",internalType:"uint64"},{name:"cliff",type:"uint64",internalType:"uint64"},{name:"end",type:"uint64",internalType:"uint64"}],outputs:[{name:"firstId",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"fee",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"feeCollector",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"getSchedule",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"creator",type:"address",internalType:"address"},{name:"start",type:"uint64",internalType:"uint64"},{name:"beneficiary",type:"address",internalType:"address"},{name:"cliff",type:"uint64",internalType:"uint64"},{name:"token",type:"address",internalType:"address"},{name:"end",type:"uint64",internalType:"uint64"},{name:"total",type:"uint128",internalType:"uint128"},{name:"claimed",type:"uint128",internalType:"uint128"}],internalType:"struct RobinhoodVesting.Schedule"}],stateMutability:"view"},{name:"nextScheduleId",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"pendingAdmin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"schedules",type:"function",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"creator",type:"address",internalType:"address"},{name:"start",type:"uint64",internalType:"uint64"},{name:"beneficiary",type:"address",internalType:"address"},{name:"cliff",type:"uint64",internalType:"uint64"},{name:"token",type:"address",internalType:"address"},{name:"end",type:"uint64",internalType:"uint64"},{name:"total",type:"uint128",internalType:"uint128"},{name:"claimed",type:"uint128",internalType:"uint128"}],stateMutability:"view"},{name:"schedulesByBeneficiary",type:"function",inputs:[{name:"b",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"schedulesByCreator",type:"function",inputs:[{name:"c",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"schedulesByToken",type:"function",inputs:[{name:"token",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"setFee",type:"function",inputs:[{name:"_fee",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeCollector",type:"function",inputs:[{name:"c",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"totalSchedules",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"transferAdmin",type:"function",inputs:[{name:"newAdmin",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"transferBeneficiary",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"newBeneficiary",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"withdrawFees",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"}]},airdrop:{address:"0x6B1fE7b821001144Ee74EEA258b0AafdE20102E8",source:"https://sourcify.dev/server/v2/contract/4663/0x6B1fE7b821001144Ee74EEA258b0AafdE20102E8?fields=abi,sources,compilation",match:"match",verifiedAt:"2026-07-30T16:48:51Z",fetchedAt:"2026-10-31",abi:[{name:"AdminTransferStarted",type:"event",inputs:[{name:"current",type:"address",indexed:!0,internalType:"address"},{name:"pending",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"AdminTransferred",type:"event",inputs:[{name:"previous",type:"address",indexed:!0,internalType:"address"},{name:"current",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"AirdropCreated",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"creator",type:"address",indexed:!0,internalType:"address"},{name:"merkleRoot",type:"bytes32",indexed:!1,internalType:"bytes32"},{name:"total",type:"uint256",indexed:!1,internalType:"uint256"},{name:"maxClaims",type:"uint32",indexed:!1,internalType:"uint32"},{name:"endTime",type:"uint64",indexed:!1,internalType:"uint64"},{name:"listURI",type:"string",indexed:!1,internalType:"string"}],anonymous:!1},{name:"Claimed",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"index",type:"uint256",indexed:!1,internalType:"uint256"},{name:"account",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeChanged",type:"event",inputs:[{name:"feeBase",type:"uint256",indexed:!1,internalType:"uint256"},{name:"feePerWallet",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeCollectorChanged",type:"event",inputs:[{name:"collector",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{name:"FeesWithdrawn",type:"event",inputs:[{name:"collector",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"Swept",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"creator",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"MAX_FEE",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MAX_RECIPIENTS",type:"function",inputs:[],outputs:[{name:"",type:"uint32",internalType:"uint32"}],stateMutability:"view"},{name:"MAX_URI",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MIN_WINDOW",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"acceptAdmin",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"},{name:"accruedFees",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"admin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"airdrops",type:"function",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"creator",type:"address",internalType:"address"},{name:"endTime",type:"uint64",internalType:"uint64"},{name:"maxClaims",type:"uint32",internalType:"uint32"},{name:"token",type:"address",internalType:"address"},{name:"claims",type:"uint32",internalType:"uint32"},{name:"swept",type:"bool",internalType:"bool"},{name:"merkleRoot",type:"bytes32",internalType:"bytes32"},{name:"total",type:"uint128",internalType:"uint128"},{name:"remaining",type:"uint128",internalType:"uint128"}],stateMutability:"view"},{name:"claim",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"index",type:"uint256",internalType:"uint256"},{name:"account",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"},{name:"proof",type:"bytes32[]",internalType:"bytes32[]"}],outputs:[],stateMutability:"nonpayable"},{name:"create",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"merkleRoot",type:"bytes32",internalType:"bytes32"},{name:"total",type:"uint256",internalType:"uint256"},{name:"maxClaims",type:"uint32",internalType:"uint32"},{name:"endTime",type:"uint64",internalType:"uint64"},{name:"uri",type:"string",internalType:"string"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"feeBase",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"feeCollector",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"feePerWallet",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"getAirdrop",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"creator",type:"address",internalType:"address"},{name:"endTime",type:"uint64",internalType:"uint64"},{name:"maxClaims",type:"uint32",internalType:"uint32"},{name:"token",type:"address",internalType:"address"},{name:"claims",type:"uint32",internalType:"uint32"},{name:"swept",type:"bool",internalType:"bool"},{name:"merkleRoot",type:"bytes32",internalType:"bytes32"},{name:"total",type:"uint128",internalType:"uint128"},{name:"remaining",type:"uint128",internalType:"uint128"}],internalType:"struct RobinhoodAirdrop.Airdrop"}],stateMutability:"view"},{name:"isClaimed",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"index",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"listURI",type:"function",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{name:"nextAirdropId",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"pendingAdmin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"quote",type:"function",inputs:[{name:"maxClaims",type:"uint32",internalType:"uint32"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"setFee",type:"function",inputs:[{name:"_feeBase",type:"uint256",internalType:"uint256"},{name:"_feePerWallet",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeCollector",type:"function",inputs:[{name:"c",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"sweep",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"totalAirdrops",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"transferAdmin",type:"function",inputs:[{name:"newAdmin",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"withdrawFees",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"}]},liquidityLocker:{address:"0x91Aa2dA1956C77F8448E18DCaf53383bCc658e67",source:"https://sourcify.dev/server/v2/contract/4663/0x91Aa2dA1956C77F8448E18DCaf53383bCc658e67?fields=abi,sources,compilation",match:"exact_match",verifiedAt:"2026-10-04T15:10:02Z",fetchedAt:"2026-10-31",abi:[{name:"AdminTransferStarted",type:"event",inputs:[{name:"next",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"AdminTransferred",type:"event",inputs:[{name:"previous",type:"address",indexed:!0,internalType:"address"},{name:"next",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"CollectFailed",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{name:"CollectFeeChanged",type:"event",inputs:[{name:"bps",type:"uint16",indexed:!1,internalType:"uint16"}],anonymous:!1},{name:"Collected",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"recipient",type:"address",indexed:!0,internalType:"address"},{name:"amount0",type:"uint256",indexed:!1,internalType:"uint256"},{name:"amount1",type:"uint256",indexed:!1,internalType:"uint256"},{name:"cut0",type:"uint256",indexed:!1,internalType:"uint256"},{name:"cut1",type:"uint256",indexed:!1,internalType:"uint256"},{name:"byAdmin",type:"bool",indexed:!1,internalType:"bool"}],anonymous:!1},{name:"CutDeferred",type:"event",inputs:[{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"CutSwept",type:"event",inputs:[{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"EthClaimed",type:"event",inputs:[{name:"recipient",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"EthCredited",type:"event",inputs:[{name:"recipient",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"Extended",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newUnlockTime",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"FeeRecipientChanged",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"recipient",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"FeeVaultChanged",type:"event",inputs:[{name:"vault",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{name:"FixedFeeChanged",type:"event",inputs:[{name:"fee",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"HookAllowedChanged",type:"event",inputs:[{name:"hook",type:"address",indexed:!0,internalType:"address"},{name:"allowed",type:"bool",indexed:!1,internalType:"bool"}],anonymous:!1},{name:"KeeperChanged",type:"event",inputs:[{name:"keeper",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"LockOwnershipTransferred",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"from",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"Locked",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"owner",type:"address",indexed:!0,internalType:"address"},{name:"manager",type:"address",indexed:!0,internalType:"address"},{name:"tokenId",type:"uint256",indexed:!1,internalType:"uint256"},{name:"token0",type:"address",indexed:!1,internalType:"address"},{name:"token1",type:"address",indexed:!1,internalType:"address"},{name:"pool",type:"bytes32",indexed:!1,internalType:"bytes32"},{name:"unlockTime",type:"uint256",indexed:!1,internalType:"uint256"},{name:"collectFeeBps",type:"uint16",indexed:!1,internalType:"uint16"},{name:"hookVerified",type:"bool",indexed:!1,internalType:"bool"},{name:"feeRecipient",type:"address",indexed:!1,internalType:"address"},{name:"fixedFeePaid",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"PausedChanged",type:"event",inputs:[{name:"paused",type:"bool",indexed:!1,internalType:"bool"}],anonymous:!1},{name:"PreLockFeesReturned",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"to",type:"address",indexed:!0,internalType:"address"},{name:"amount0",type:"uint256",indexed:!1,internalType:"uint256"},{name:"amount1",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"Rescued",type:"event",inputs:[{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"RevenueSinkChanged",type:"event",inputs:[{name:"sink",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{name:"ShareRedirected",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"token",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{name:"StrayPositionReturned",type:"event",inputs:[{name:"manager",type:"address",indexed:!0,internalType:"address"},{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"to",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"Withdrawn",type:"event",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"to",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{name:"BATCH_GAS_PER_LOCK",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MAX_BATCH",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MAX_COLLECT_FEE_BPS",type:"function",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{name:"MAX_FIXED_FEE",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MAX_LOCK_DURATION",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"MIN_COLLECT_FEE_BPS",type:"function",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{name:"V3_FACTORY",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"V3_POSITIONS",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IV3PositionManager"}],stateMutability:"view"},{name:"V4_POOL_MANAGER",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"V4_POSITIONS",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IV4PositionManager"}],stateMutability:"view"},{name:"acceptAdmin",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"},{name:"admin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"adminCollect",type:"function",inputs:[{name:"ids",type:"uint256[]",internalType:"uint256[]"}],outputs:[],stateMutability:"nonpayable"},{name:"claimOwedEth",type:"function",inputs:[],outputs:[],stateMutability:"nonpayable"},{name:"claimOwedEthTo",type:"function",inputs:[{name:"to",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"collect",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"collectFeeBps",type:"function",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{name:"collectMany",type:"function",inputs:[{name:"ids",type:"uint256[]",internalType:"uint256[]"}],outputs:[],stateMutability:"nonpayable"},{name:"collectOneIsolated",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"byAdmin",type:"bool",internalType:"bool"}],outputs:[],stateMutability:"nonpayable"},{name:"cutOf",type:"function",inputs:[{name:"amount",type:"uint256",internalType:"uint256"},{name:"bps",type:"uint16",internalType:"uint16"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"pure"},{name:"extend",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"newUnlockTime",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"feeVault",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"fixedFee",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"getLock",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"owner",type:"address",internalType:"address"},{name:"unlockTime",type:"uint40",internalType:"uint40"},{name:"collectFeeBps",type:"uint16",internalType:"uint16"},{name:"isV4",type:"bool",internalType:"bool"},{name:"hookVerified",type:"bool",internalType:"bool"},{name:"withdrawn",type:"bool",internalType:"bool"},{name:"feeRecipient",type:"address",internalType:"address"},{name:"token0",type:"address",internalType:"address"},{name:"token1",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"}],internalType:"struct HoodLockLPLocker.Lock"}],stateMutability:"view"},{name:"hookAllowed",type:"function",inputs:[{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"isUnlocked",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"keeper",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"lock",type:"function",inputs:[{name:"manager",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"},{name:"unlockTime",type:"uint256",internalType:"uint256"},{name:"feeRecipient",type:"address",internalType:"address"},{name:"acceptUnverifiedHook",type:"bool",internalType:"bool"},{name:"maxCollectFeeBps",type:"uint16",internalType:"uint16"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"payable"},{name:"lockIdOf",type:"function",inputs:[{name:"",type:"address",internalType:"address"},{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"locksOf",type:"function",inputs:[{name:"owner",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256[]",internalType:"uint256[]"}],stateMutability:"view"},{name:"name",type:"function",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{name:"nextLockId",type:"function",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"onERC721Received",type:"function",inputs:[{name:"",type:"address",internalType:"address"},{name:"",type:"address",internalType:"address"},{name:"",type:"uint256",internalType:"uint256"},{name:"",type:"bytes",internalType:"bytes"}],outputs:[{name:"",type:"bytes4",internalType:"bytes4"}],stateMutability:"pure"},{name:"owedEth",type:"function",inputs:[{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"paused",type:"function",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{name:"pendingAdmin",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"pendingCut",type:"function",inputs:[{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{name:"pushOwedEth",type:"function",inputs:[{name:"who",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"rescueERC20",type:"function",inputs:[{name:"token",type:"address",internalType:"address"},{name:"to",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"returnStrayPosition",type:"function",inputs:[{name:"manager",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"},{name:"to",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"revenueSink",type:"function",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{name:"setCollectFeeBps",type:"function",inputs:[{name:"bps",type:"uint16",internalType:"uint16"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeRecipient",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"recipient",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"setFeeVault",type:"function",inputs:[{name:"vault",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"setFixedFee",type:"function",inputs:[{name:"fee_",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{name:"setHookAllowed",type:"function",inputs:[{name:"hook",type:"address",internalType:"address"},{name:"allowed",type:"bool",internalType:"bool"}],outputs:[],stateMutability:"nonpayable"},{name:"setKeeper",type:"function",inputs:[{name:"k",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"setPaused",type:"function",inputs:[{name:"p",type:"bool",internalType:"bool"}],outputs:[],stateMutability:"nonpayable"},{name:"setRevenueSink",type:"function",inputs:[{name:"sink",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"sweepPendingCut",type:"function",inputs:[{name:"token",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"transferAdmin",type:"function",inputs:[{name:"next",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"transferLockOwnership",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{name:"withdraw",type:"function",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"to",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"}]}};var _e=v,Ie=S(v.vesting.address),Ee=["hoodlock_read","hoodlock_record","hoodlock_vesting_status","hoodlock_public"],Le=["hoodlock_vesting_create","hoodlock_vesting_claim","hoodlock_vesting_transfer","hoodlock_withdraw","hoodlock_extend","hoodlock_transfer_lock","hoodlock_set_fee_recipient","hoodlock_collect","hoodlock_airdrop_sweep","hoodlock_recover","hoodlock_admin"],C=k("Decimal record ID, including zero for token locks, burns, vesting and airdrops. LP IDs start at one."),le={id:C,kind:{type:"string",enum:["token","v2","v3","v4"],description:"Lock type: token = ERC-20 token lock; v2 = V2 LP-token lock; v3 or v4 = Uniswap v3 or v4 liquidity-position (NFT) lock."}},Y=(1n<<256n)-1n;function m(e,n,t=256){if(typeof e!="string"||!/^\d+$/.test(e))throw new o(`${n} must be a decimal base-unit string.`);let a=BigInt(e);if(a>(1n<<BigInt(t))-1n)throw new o(`${n} exceeds uint${t}.`);return a}function f(e,n,t=!1){let a=q(e,`Provide a valid ${n} address.`);return t?a:j(a,`${n} must not be the zero address.`)}function ce(e,n){let t=m(e,n);if(t===0n||t===Y)throw new o(`${n} must be a positive exact amount, never unlimited.`);return t}function Q(e){if(typeof e!="string"||!Object.hasOwn(v,e))throw new o("Choose locker, burner, vesting, airdrop or liquidityLocker.");return e}function B(e){return v[e].abi}function h(e){return S(v[e].address)}function D(e,n){let t=B(e).find(a=>a.type==="function"&&a.name===n);if(!t)throw new o(`No published HoodLock ${e}.${n} function exists.`);return t}async function p(e,n,t,a=[]){return e.clientFor(l).readContract({address:h(n),abi:B(n),functionName:t,args:a})}function F(e,n){if(Array.isArray(e))return Object.fromEntries(n.map((t,a)=>[t,e[a]]));if(e&&typeof e=="object")return e;throw new o("HoodLock returned an invalid record. Retry the chain read.")}var me=["owner","token","amount","unlockTime","withdrawn"],fe=["owner","unlockTime","collectFeeBps","isV4","hookVerified","withdrawn","feeRecipient","token0","token1","tokenId"],ee=["creator","start","beneficiary","cliff","token","end","total","claimed"],K=["creator","endTime","maxClaims","token","claims","swept","merkleRoot","total","remaining"];function x(e){return JSON.parse(JSON.stringify(e,(n,t)=>typeof t=="bigint"?t.toString():t))}async function g(e,n){let t=f(n,"token",!0);if(t===U)return N;let a=e.clientFor(l),[i,s]=await Promise.all([a.readContract({address:t,abi:X,functionName:"symbol"}),a.readContract({address:t,abi:X,functionName:"decimals"})]);if(!Number.isInteger(s)||s<0||s>255)throw new o("Token decimals are invalid.");return{address:t,chainId:l,symbol:R(String(i)),decimals:s}}function _(e,n,t="current owner"){if(f(e,t)!==S(n))throw new o(`This wallet is not the ${t}.`)}function z(e){if(e.withdrawn)throw new o("This HoodLock lock was already withdrawn.")}function Z(e){if(!["token","v2","v3","v4"].includes(String(e.kind)))throw new o("Provide kind: token, v2, v3 or v4.");return e.kind==="token"||e.kind==="v2"?"locker":"liquidityLocker"}async function H(e,n,t){return F(await p(e,n,"getLock",[t]),n==="locker"?me:fe)}function G(e,n){if((e.kind==="v3"||e.kind==="v4")&&!!n.isV4!=(e.kind==="v4"))throw new o("Lock kind disagrees with the on-chain NFT version.")}async function T(e,n,t,a,i,s,r=0n,u=[]){let d=e.unsignedTx({to:h(t),chainId:l,value:r.toString(),data:ye({abi:B(t),functionName:a,args:i}),description:s}),c=await e.preview([...u,d],S(n));return{txs:c.txs,preview:c,summary:s,contract:h(t),chainId:l,method:a,arguments:x(i)}}function w(e,n,t,a,i){return{name:n,inputSchema:{type:"object",properties:t,required:a,additionalProperties:!1},async execute(s,r){try{return await i(s,S(r))}catch(u){throw new o(e.plainError(u))}}}}async function Te(e,n,t){let a=f(n.token,"token"),i=m(n.start,"start",64),s=m(n.cliff,"cliff",64),r=m(n.end,"end",64),[u,d,c,y,M]=await Promise.all([e.clientFor(l).getBlock(),p(e,"vesting","fee"),p(e,"vesting","MIN_DURATION"),p(e,"vesting","MAX_BATCH"),g(e,a)]);if(i>s||s>r||r<=i)throw new o("Vesting dates require start <= cliff <= end and end > start.");if(r>=1000000000000n||r<=u.timestamp+BigInt(String(c))+30n)throw new o("Vesting end must be Unix seconds, more than 24 hours plus a 30-second inclusion margin after the current block.");let I=n.entries!==void 0;if(I&&(n.beneficiary!==void 0||n.amount!==void 0))throw new o("Use entries or beneficiary/amount, not both.");if(I&&(!Array.isArray(n.entries)||n.entries.length===0||n.entries.length>Number(y)))throw new o(`Provide between 1 and ${String(y)} vesting entries.`);let L=I?n.entries:[{beneficiary:n.beneficiary,amount:n.amount}],P=L.map(A=>f(A?.beneficiary,"beneficiary")),O=L.map(A=>ce(A?.amount,"amount"));if(O.some(A=>A>=1n<<128n))throw new o("Each vesting amount must fit uint128.");let $=O.reduce((A,de)=>A+de,0n);if($>=Y)throw new o("Vesting total exceeds the exact approval range.");let E=BigInt(String(d))*BigInt(L.length);if(n.maxFee!==void 0&&E>m(n.maxFee,"maxFee"))throw new o("Live vesting fee exceeds maxFee.");let re=I?"createMany":"create",oe=I?[a,P,O,i,s,r]:[a,P[0],O[0],i,s,r],ue=`Create ${L.length} irrevocable HoodLock vesting schedule(s): ${$} ${M.symbol} base units (${a}, decimals ${M.decimals}) for ${P.join(", ")}; start ${i}, cliff ${s}, end ${r}; exact fee ${E} wei. Creator cannot cancel or recover principal. Recorded totals use tokens actually received; preserve mined schedule IDs.`;return W(e,{...await T(e,t,"vesting",re,oe,ue,E,[e.approval(a,h("vesting"),$.toString(),l)]),token:M,amount:$.toString(),fee:{token:N,amount:E.toString()}},h("vesting"),E)}async function te(e,n){let t=F(await p(e,"vesting","getSchedule",[n]),ee);if(BigInt(String(t.total))===0n)throw new o("No HoodLock vesting schedule exists for this ID.");let[a,i]=await Promise.all([p(e,"vesting","claimable",[n]),g(e,t.token)]);return{id:n.toString(),contract:h("vesting"),chainId:l,schedule:x(t),token:i,claimable:String(a),remaining:(BigInt(String(t.total))-BigInt(String(t.claimed))).toString(),proofUrl:`https://hoodlock.tech/proof/vesting/${n}`}}async function ne(e,n,t){let a=n.account===void 0?t:f(n.account,"account"),i=n.role??"beneficiary";if(!["beneficiary","creator","token"].includes(String(i)))throw new o("Choose beneficiary, creator or token for vesting discovery.");let r=await p(e,"vesting",i==="creator"?"schedulesByCreator":i==="token"?"schedulesByToken":"schedulesByBeneficiary",[a]),u=[];for(let d of[...new Set(r.map(String))]){let c=await te(e,BigInt(d));(i!=="beneficiary"||f(c.schedule.beneficiary,"beneficiary")===a)&&u.push(c)}return{account:a,role:i,schedules:u,summary:`Found ${u.length} HoodLock vesting schedule(s); completed schedules remain visible.`}}async function J(e,n,t){return n.id===void 0?ne(e,n,t):te(e,m(n.id,"id"))}function Oe(e){return{tools:[w(e,"hoodlock_vesting_create",{token:{...b,description:"Address of the ERC-20 token to vest. The wallet approves and transfers it to the vesting contract."},beneficiary:{...b,description:"Address that receives the vested tokens (single schedule). Use this with amount, or use entries, not both."},amount:k('Amount of the token to vest, in base units of that token (read its decimals). Example: "1000000000000000000" = 1 token at 18 decimals. Single schedule only.'),entries:{type:"array",minItems:1,maxItems:200,description:"Batch of schedules sharing one token, start, cliff and end. Use this instead of beneficiary and amount.",items:{type:"object",properties:{beneficiary:{...b,description:"Address that receives this entry's vested tokens."},amount:k('Amount of the token vested to this beneficiary, in base units of that token (read its decimals). Example: "1000000000000000000" = 1 token at 18 decimals.')},required:["beneficiary","amount"],additionalProperties:!1}},start:k('Vesting start time in Unix seconds, as a decimal string. Example: "1800000000".'),cliff:k("Cliff time in Unix seconds, between start and end; nothing is claimable before it."),end:k("Vesting end time in Unix seconds, more than 24 hours after the current block."),maxFee:k("Optional cap on the total creation fee in wei of native ETH (1 ETH = 10^18 wei); the call fails if the live fee is higher.")},["token","start","cliff","end"],(t,a)=>Te(e,t,a)),w(e,"hoodlock_vesting_status",{id:C,account:{...b,description:"Address to list vesting schedules for when no id is given. Defaults to the connected wallet."},role:{type:"string",enum:["beneficiary","creator","token"],description:"How account relates to the schedules when listing: beneficiary (default), creator, or the vested token address."}},[],(t,a)=>J(e,t,a)),...["claim","transfer"].map(t=>w(e,`hoodlock_vesting_${t}`,{id:C,...t==="transfer"?{beneficiary:{...b,description:"Address of the new beneficiary who takes over the remaining vesting rights."}}:{}},t==="transfer"?["id","beneficiary"]:["id"],async(a,i)=>{let s=m(a.id,"id"),r=F(await p(e,"vesting","getSchedule",[s]),ee);if(_(r.beneficiary,i,"current beneficiary"),t==="transfer"){let c=f(a.beneficiary,"beneficiary");return T(e,i,"vesting","transferBeneficiary",[s,c],`Transfer beneficiary rights for vesting #${s} from ${i} to ${c}. Remaining tokens follow the schedule; creator cannot revoke it.`)}let u=BigInt(String(await p(e,"vesting","claimable",[s])));if(u===0n)throw new o("Nothing is claimable yet; check the cliff and previous claims.");let d=await g(e,r.token);return{...await T(e,i,"vesting","claim",[s],`Claim currently ${u} ${d.symbol} base units from vesting #${s} to current beneficiary ${i}; live inclusion time determines the final amount.`),token:d,amount:u.toString()}})),...["withdraw","extend","transfer_lock","set_fee_recipient"].map(t=>w(e,`hoodlock_${t}`,{...le,...t==="withdraw"?{to:{...b,description:"Address that receives the withdrawn position NFT or LP; defaults to the connected wallet. Token locks withdraw only to the owner."}}:t==="extend"?{unlockTime:k('New unlock time in Unix seconds, later than the current unlock time and in the future (at most 100 years). Example: "1800000000".')}:t==="transfer_lock"?{owner:{...b,description:"Address of the new lock owner, who can withdraw after maturity."}}:{recipient:{...b,description:"Address that receives future collected fees for this NFT lock."}}},["kind","id",...t==="extend"?["unlockTime"]:t==="transfer_lock"?["owner"]:t==="set_fee_recipient"?["recipient"]:[]],async(a,i)=>{let s=Z(a),r=m(a.id,"id"),u=await H(e,s,r);_(u.owner,i),z(u),G(a,u);let d=(await e.clientFor(l).getBlock()).timestamp;if(t==="withdraw"){if(d<BigInt(String(u.unlockTime)))throw new o(`Still locked until Unix ${String(u.unlockTime)}; expiry never withdraws automatically.`);let y=a.to===void 0?i:f(a.to,"withdrawal recipient");if(s==="locker"&&y!==i)throw new o("Token locks withdraw only to the current owner; omit to or use this wallet.");return{...await T(e,i,s,"withdraw",s==="locker"?[r]:[r,y],`Withdraw mature HoodLock ${a.kind} lock #${r} to ${y}; ${s==="locker"?`${String(u.amount)} token base units`:`position NFT #${String(u.tokenId)}`}.`),record:x(u),recipient:y}}if(t==="extend"){let y=m(a.unlockTime,"unlockTime");if(y<=BigInt(String(u.unlockTime))||y<=d||y>d+3153600000n)throw new o("New unlockTime must extend the lock, be future Unix seconds, and at most 100 years away.");return T(e,i,s,"extend",[r,y],`Extend HoodLock ${a.kind} lock #${r} from ${String(u.unlockTime)} to ${y}; it cannot be shortened.`)}if(t==="set_fee_recipient"){if(s!=="liquidityLocker")throw new o("Only NFT locks have a fee recipient.");let y=f(a.recipient,"fee recipient");return T(e,i,s,"setFeeRecipient",[r,y],`Redirect future collected fees for HoodLock NFT lock #${r} to ${y}; ownership and maturity stay the same.`)}let c=f(a.owner,"new owner");return T(e,i,s,"transferLockOwnership",[r,c],`Transfer HoodLock ${a.kind} lock #${r} to ${c}; that owner can withdraw after maturity.${s==="liquidityLocker"?" The contract also resets feeRecipient to the new owner.":""}`)})),w(e,"hoodlock_collect",{id:C,ids:{type:"array",minItems:1,maxItems:50,description:"Several NFT lock ids to collect in one batch, 1 to 50 distinct. Use this or id, not both.",items:C}},[],async(t,a)=>{if(t.id===void 0==(t.ids===void 0))throw new o("Provide exactly one of id or ids.");let i=t.ids===void 0?[m(t.id,"id")]:ie(t.ids),s=[];for(let u of i){let d=await H(e,"liquidityLocker",u);_(d.owner,a),z(d),s.push({id:u.toString(),...x(d)})}let r=t.ids!==void 0;return{...await T(e,a,"liquidityLocker",r?"collectMany":"collect",r?[i]:[i[0]],`Collect fees for HoodLock NFT lock(s) ${i.join(", ")}; each lock's frozen collectFeeBps goes to HoodLock, the net to its recorded feeRecipient. Liquidity stays locked.${r?" Individual locks may fail; inspect Collected/CollectFailed events and balances.":""} Native ETH may become owedEth if delivery fails; refused ERC-20 fee shares fall back to the lock owner.`),locks:s}}),w(e,"hoodlock_airdrop_sweep",{id:C},["id"],async(t,a)=>{let i=m(t.id,"id"),s=F(await p(e,"airdrop","getAirdrop",[i]),K);if(_(s.creator,a,"airdrop creator"),s.swept)throw new o("This airdrop was already swept.");if(BigInt(String(s.endTime))===0n)throw new o("A zero-deadline airdrop can never be swept.");if((await e.clientFor(l).getBlock()).timestamp<BigInt(String(s.endTime)))throw new o("This airdrop has not ended; wait until endTime.");let r=await g(e,s.token);return{...await T(e,a,"airdrop","sweep",[i],`Recover the ${String(s.remaining)} remaining ${r.symbol} base units from expired airdrop #${i} to creator ${a}. This closes claims permanently.`),token:r,amount:String(s.remaining)}}),w(e,"hoodlock_record",{id:C,kind:{type:"string",enum:["token","v2","v3","v4","burn","vesting","airdrop"],description:"Record type: token, v2, v3 or v4 lock; or a burn, vesting schedule or airdrop. The id is looked up in that registry."}},["kind","id"],async(t,a)=>{let i=m(t.id,"id");if(t.kind==="vesting")return J(e,t,a);if(t.kind==="burn"){let d=F(await p(e,"burner","getBurn",[i]),["burner","token","amount","timestamp"]);if(BigInt(String(d.amount))===0n)throw new o("No HoodLock burn exists for this ID.");return{id:i.toString(),chainId:l,contract:h("burner"),record:x(d),token:await g(e,d.token),totalSupplyReduced:!1,proofUrl:`https://hoodlock.tech/proof/burn/${i}`}}if(t.kind==="airdrop"){let d=F(await p(e,"airdrop","getAirdrop",[i]),K);if(String(d.creator).toLowerCase()===U)throw new o("No HoodLock airdrop exists for this ID.");return{id:i.toString(),chainId:l,contract:h("airdrop"),record:x(d),token:await g(e,d.token),listURI:R(String(await p(e,"airdrop","listURI",[i])))}}let s=Z(t),r=await H(e,s,i);if(String(r.owner).toLowerCase()===U)throw new o("No HoodLock lock exists for this ID.");G(t,r);let u=s==="locker"?{token:await g(e,r.token)}:{token0:await g(e,r.token0),token1:await g(e,r.token1)};return{id:i.toString(),chainId:l,contract:h(s),record:x(r),...u,proofUrl:`https://hoodlock.tech/proof/${s==="locker"?"lock":"position"}/${i}`}}),w(e,"hoodlock_read",{contract:{type:"string",enum:Object.keys(v),description:"Which HoodLock contract to read: locker, burner, vesting, airdrop or liquidityLocker."},method:{type:"string",enum:be(),description:"Name of a published view or pure function on that contract."},arguments:{type:"array",maxItems:6,description:"Function arguments in ABI order: addresses as 0x strings, uint values as decimal strings, booleans as true/false.",items:{}}},["contract","method"],async t=>{let a=Q(t.contract),i=D(a,String(t.method));if(i.stateMutability!=="view"&&i.stateMutability!=="pure")throw new o("hoodlock_read accepts only published view/pure functions.");let s=V(i,t.arguments??[]),r=await p(e,a,i.name,s);return{chainId:l,contract:h(a),method:i.name,value:i.outputs.length===1&&i.outputs[0].type==="string"?R(String(r)):x(r),outputs:i.outputs,summary:"Raw contract view; owner indexes may include previous owners. Check current records. No transaction was built."}}),w(e,"hoodlock_recover",{method:{type:"string",enum:["claimOwedEth","claimOwedEthTo","pushOwedEth","sweepPendingCut"],description:"Recovery call on the liquidity locker: claimOwedEth (to you), claimOwedEthTo (to a given address), pushOwedEth (send a holder's owed ETH to that holder), sweepPendingCut (protocol cut of a token)."},arguments:{type:"array",maxItems:1,description:"ABI-ordered arguments: one address for claimOwedEthTo (recipient), pushOwedEth (holder) or sweepPendingCut (token); empty for claimOwedEth.",items:b}},["method"],async(t,a)=>{let i=String(t.method);if(!["claimOwedEth","claimOwedEthTo","pushOwedEth","sweepPendingCut"].includes(i))throw new o("Choose a published deferred ETH or protocol-cut recovery method.");let s=V(D("liquidityLocker",i),t.arguments??[]),r=i==="claimOwedEthTo"||i==="pushOwedEth"?f(s[0],"recipient"):a,u=i==="sweepPendingCut"?await p(e,"liquidityLocker","pendingCut",s):await p(e,"liquidityLocker","owedEth",[i==="pushOwedEth"?r:a]);if(BigInt(String(u))===0n)throw new o("There is no deferred balance to recover.");let d=i==="sweepPendingCut"?String(await p(e,"liquidityLocker","feeVault")):r;return T(e,a,"liquidityLocker",i,s,`HoodLock ${i}: recover ${String(u)} base units to ${d}; only the contract-recorded credit or cut can move.`)}),w(e,"hoodlock_admin",{contract:{type:"string",enum:Object.keys(v),description:"Which HoodLock contract to administer: locker, burner, vesting, airdrop or liquidityLocker. Only its admin or role holder can succeed."},method:{type:"string",enum:[...new Set(Object.values(se).flat())],description:"Admin function to call; must be supported on the chosen contract."},arguments:{type:"array",maxItems:3,description:"Function arguments in ABI order: addresses as 0x strings, uint values as decimal strings, booleans as true/false.",items:{}}},["contract","method"],(t,a)=>we(e,t,a))],positions:async t=>((await ne(e,{},t)).schedules??[]).filter(s=>BigInt(s.remaining)>0n).map(s=>({module:"hoodlock",id:`vesting:${s.id}`,chainId:l,assets:[{token:s.token,amount:s.remaining}],description:`HoodLock vesting #${s.id}: ${s.claimable} base units claimable; ${s.remaining} remain for current beneficiary ${t}.`}))}}function ie(e){if(!Array.isArray(e)||e.length===0||e.length>50)throw new o("Provide between 1 and 50 distinct decimal IDs.");let n=e.map(t=>m(t,"id"));if(new Set(n.map(String)).size!==n.length)throw new o("Duplicate IDs are not allowed in a collection batch.");return n}function be(){return[...new Set(Object.keys(v).flatMap(e=>B(e).filter(n=>n.type==="function"&&["view","pure"].includes(n.stateMutability)&&n.name!=="onERC721Received").map(n=>n.name)))]}function ae(e,n){if(e.type.endsWith("[]")){if(!Array.isArray(n)||n.length>200)throw new o("Function arrays must contain at most 200 items.");return n.map(t=>ae({...e,type:e.type.slice(0,-2)},t))}if(e.type==="address")return f(n,e.name??"address",!0);if(e.type==="bool"){if(typeof n!="boolean")throw new o("Function boolean arguments must be booleans.");return n}if(/^uint\d*$/.test(e.type))return m(n,e.name??"integer",Number(e.type.slice(4)||256));throw new o(`Unsupported published argument type ${e.type}.`)}function V(e,n){if(!Array.isArray(n)||n.length!==e.inputs.length)throw new o(`${e.name} needs ${e.inputs.length} ABI-ordered arguments.`);return e.inputs.map((t,a)=>ae(t,n[a]))}var se={locker:["setAdmin","setFee","setFeeCollector"],burner:["setAdmin","setFee","setFeeCollector"],vesting:["setFee","setFeeCollector","transferAdmin","acceptAdmin","withdrawFees"],airdrop:["setFee","setFeeCollector","transferAdmin","acceptAdmin","withdrawFees"],liquidityLocker:["setCollectFeeBps","setFixedFee","setFeeVault","setRevenueSink","setPaused","setHookAllowed","setKeeper","transferAdmin","acceptAdmin","adminCollect","rescueERC20","returnStrayPosition"]};async function we(e,n,t){let a=Q(n.contract),i=String(n.method);if(!se[a].includes(i))throw new o(`No supported admin ${a}.${i} route exists.`);let s=V(D(a,i),n.arguments??[]),r=i==="acceptAdmin"?"pendingAdmin":i==="withdrawFees"?"feeCollector":"admin",u=await p(e,a,r);if(i==="adminCollect"&&S(String(u))!==t?_(await p(e,a,"keeper"),t,"admin or keeper"):_(u,t,r),i==="adminCollect"&&ie(s[0].map(String)),i==="returnStrayPosition"){let d=f(s[0],"manager"),c=["V3_POSITIONS","V4_POSITIONS"];if(!(await Promise.all(c.map(M=>p(e,"liquidityLocker",M)))).some(M=>S(String(M))===d))throw new o("Only a configured position manager can return a stray NFT.");if(BigInt(String(await p(e,"liquidityLocker","lockIdOf",s.slice(0,2))))!==0n)throw new o("An actively locked NFT cannot be rescued.")}return T(e,t,a,i,s,`HoodLock ${a}.${i}(${JSON.stringify(x(s))}) by authorized ${r} ${t}. This changes protocol configuration or recovers only assets allowed by the contract. Existing custody rights cannot be overridden.`)}export{_e as a,Ie as b,Ee as c,Le as d,m as e,Oe as f};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{parseAbi as e}from"viem";var t=e(["function register()","function draw(uint256 id, uint256 amount, uint8 kind)","function deliver(uint256 id, bytes32 proof)","function decline(uint256 id)","function job(uint256 id) view returns ((address customer, uint40 dueAt, uint40 deliveredAt, uint8 state, bool allowEarly, bool late, address agent, uint256 price, uint256 early, uint256 fromPool, bytes32 proof))","function agent(address who) view returns ((bool registered, bool barred, uint40 firstSettledAt, uint32 settled, uint32 settledAtHalf, uint32 notDelivered, uint32 unanswered, uint32 customers, uint32 onTime, uint32 late, uint32 advancesRepaid, uint32 advancesNotRepaid, uint32 earlyKept, uint256 bond, uint256 feesPaid, uint256 advancedNow, uint256 volume))","function canDrawOn(uint256 id) view returns (uint256 early, uint256 fromPool)","function owed(address who) view returns (uint256)","function burnPot() view returns (address)","function gateway() view returns (address)","function BPS() view returns (uint256)","function ADVANCE_MAX_BPS() view returns (uint256)","function ADVANCE_FEE_BPS() view returns (uint256)","function JOB_FEE_BPS() view returns (uint256)","function REJECTED_BPS() view returns (uint256)","function POOL_OUT_MAX_BPS() view returns (uint256)","function MIN_JOB() view returns (uint256)","function MIN_DUE() view returns (uint256)","function MAX_DUE() view returns (uint256)","function GRACE() view returns (uint256)","function REVIEW() view returns (uint256)","function CUSTOMER_FEES_MIN() view returns (uint256)","event Advanced(uint256 indexed id, address indexed agent, uint8 kind, uint256 amount, uint256 fee)","event BondAdded(address indexed agent, uint256 amount, uint256 bond)","event BondTaken(address indexed agent, uint256 amount, uint256 bond)","event Collected(address indexed who, address indexed to, uint256 amount)","event Declined(uint256 indexed id, address indexed agent, uint256 toCustomer)","event Delivered(uint256 indexed id, address indexed agent, bytes32 proof, bool late)","event Locked(uint256 indexed id, address indexed customer, address indexed agent, uint256 price, uint256 dueAt, bool allowEarly)","event Owed(address indexed who, uint256 amount)","event PoolIn(address indexed from, uint256 amount)","event Refunded(uint256 indexed id, address indexed agent, uint256 toCustomer, uint256 notRepaid, uint256 fromBond, uint256 lost)","event Registered(address indexed agent)","event Settled(uint256 indexed id, address indexed agent, uint256 toAgent, uint256 poolRepaid, uint256 jobFee)","event SettledAtHalf(uint256 indexed id, address indexed agent, uint256 toCustomer, uint256 toAgent, uint256 poolRepaid, uint256 jobFee)","error AlreadyRegistered()","error BadDueTime()","error Barred()","error EarlyNotAllowed()","error GasShort()","error NotAgent()","error NotCustomer()","error NotRegistered()","error NothingOwed()","error OverBond(uint256 room)","error OverHalf(uint256 room)","error OverLimit(uint256 room)","error OwesThePool(uint256 amount)","error PoolShort(uint256 room)","error PushFailed()","error ReentrancyGuardReentrantCall()","error TooLate()","error TooSmall(uint256 minimum)","error TooSoon(uint256 at)","error WrongState(uint8 state)","error ZeroAddress()","error ZeroAmount()"]),r=e(["function keyOf(address account) view returns (address)","function desk() view returns (address)"]);export{t as a,r as b};
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{e as P,h as A,n as S}from"./KIFSRO5K.js";import{a as N,b as h,f as y,g as v}from"./T2WHOZXM.js";import{N as k,b as I}from"./GEIFITAQ.js";import{a as b}from"./66F5ZH34.js";import{c as w,g}from"./NWNYJ26T.js";import{a as m}from"./FWD4L3CJ.js";import{a as r}from"./XSD5NL7J.js";import{encodeFunctionData as f,parseAbi as T,zeroAddress as _}from"viem";var i=T(["function ownerOf(uint256) view returns (address)","function getApproved(uint256) view returns (address)","function getPositionLiquidity(uint256) view returns (uint128)","function safeTransferFrom(address from,address to,uint256 tokenId)","function approve(address spender,uint256 tokenId)","function burn(uint256 tokenId)"]),q={version:{type:"string",enum:["v3","v4"]},tokenId:b(),operation:{type:"string",enum:["transfer","approve","revoke","burn"]},target:w};function D(s){return{tools:[!1,!0].map(c=>({name:c?"uniswap_position_manage":"uniswap_position_status",inputSchema:{type:"object",additionalProperties:!1,required:c?["version","tokenId","operation"]:["version","tokenId"],properties:q},async execute(e,p){if(e.version!=="v3"&&e.version!=="v4")throw new r("Specify position version v3 or v4.");let o=N(e.tokenId,"tokenId"),a=e.version==="v3"?P.positionManager:I,d=s.clientFor(m),l=await d.readContract({address:a,abi:i,functionName:"ownerOf",args:[o]});if(!c){v(e,["version","tokenId"]);let n=await d.readContract({address:a,abi:i,functionName:"getApproved",args:[o]});return{version:e.version,tokenId:o.toString(),manager:a,owner:l,approved:n}}if(!g(l,p))throw new r("Only manage a Uniswap NFT owned by the signing wallet.");let t=e.operation;v(e,["version","tokenId","operation",...["transfer","approve"].includes(String(t))?["target"]:[]]);let u;if(t==="transfer"||t==="approve"){let n=h(e.target);if(n===_)throw new r("Choose a nonzero target, or operation revoke to clear approval.");u=t==="transfer"?f({abi:i,functionName:"safeTransferFrom",args:[p,n,o]}):f({abi:i,functionName:"approve",args:[n,o]})}else if(t==="revoke")u=f({abi:i,functionName:"approve",args:[_,o]});else if(t==="burn"){if(e.version==="v4"){if(await d.readContract({address:a,abi:i,functionName:"getPositionLiquidity",args:[o]})!==0n)throw new r("Remove all liquidity before burning an empty position.");return k(s).tools.find(O=>O.name==="uniswap_remove").execute({version:"v4",tokenId:o.toString(),liquidity:"all",amount0Min:"0",amount1Min:"0"},p)}let n=S(await d.readContract({address:a,abi:A,functionName:"positions",args:[o]}));if(n.liquidity!==0n||n.tokensOwed0!==0n||n.tokensOwed1!==0n)throw new r("Remove liquidity and collect all owed tokens before burning a v3 NFT.");u=f({abi:i,functionName:"burn",args:[o]})}else throw new r("Choose transfer, approve, revoke or burn. Operator-wide approvals are not exact approvals.");return y(s,[s.unsignedTx({to:a,data:u,value:"0",chainId:m,description:`${t} Uniswap ${e.version} NFT #${o}${e.target?` with target ${e.target}`:""}.`})],p,"Position ownership or exact per-NFT approval changes. A transferred position includes its liquidity and accrued rights; burn requires an empty NFT.")}}))}}export{i as a,D as b};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as v}from"./66F5ZH34.js";import{c as b,d as S,i as D,m as P,n as O}from"./NWNYJ26T.js";import{a as l}from"./FWD4L3CJ.js";import{a as d}from"./XSD5NL7J.js";import{encodeFunctionData as $,erc20Abi as B,getAddress as F,parseAbi as U}from"viem";var _={source:"https://github.com/beefyfinance/beefy-v2/blob/main/src/config/promos/chain/robinhood.json",observedAt:"2026-10-31",version:2,boosts:[{id:"moo_alandale-cow-robinhood-weth-shop-vault",address:"0xdC955E855148bE11621a74A5B4588846558215d1",token:"0xEBe70034de92614ebe06Cde98C12257f9397dC0e",vaultId:"alandale-cow-robinhood-weth-shop-vault"},{id:"moo_alandale-cow-robinhood-usdg-net-vault",address:"0x3bB573076462ab4E3De4542cFDAa4f36F0Ce082d",token:"0x857b3971E8038a8f8E2C0Da797145447eFbf6b86",vaultId:"alandale-cow-robinhood-usdg-net-vault"},{id:"moo_alandale-cow-robinhood-weth-usdg-vault",address:"0x13ec60CcFFD2cf989912CCBC038D618d3F56a30E",token:"0x4ED469Ac0080bE3CD192530D482E4d321823e743",vaultId:"alandale-cow-robinhood-weth-usdg-vault"},{id:"moo_alandale-cow-robinhood-weth-lute-vault",address:"0xC5ff71a8754c9A9FC0c27EE297025Ea7eEbDD19d",token:"0xd4A452bB077618b931603DbcB60ea43c05eBEa45",vaultId:"alandale-cow-robinhood-weth-lute-vault"},{id:"moo_alandale-cow-robinhood-usdg-lute-vault",address:"0x83a074A41c06c07631e284463ea2bfc3d2f674c5",token:"0xe50D89C43D0D13eE1439Bb5E94876A1163a26434",vaultId:"alandale-cow-robinhood-usdg-lute-vault"},{id:"moo_alandale-cow-robinhood-weth-spy-vault",address:"0xcdDa7830A6F034d66a46919f3D132f53A56a356d",token:"0x87673A619Fc4F3Fc08068A0BB04f60aA2D04ca62",vaultId:"alandale-cow-robinhood-weth-spy-vault"}]};var x=_.boosts.map(c=>({...c,address:F(c.address.toLowerCase()),token:F(c.token.toLowerCase())})),H=["beefy_boost","beefy_boost_manage"],R=U(["function stakedToken() view returns(address)","function owner() view returns(address)","function whitelisted(address) view returns(bool)","function earned(address) view returns(address[],uint256[])","function stake(uint256)","function withdraw(uint256)","function getReward()","function exit()","function notifyRewardAmount(address,uint256,uint256)","function removeReward(address,address)","function rescueTokens(address,address)","function setWhitelist(address,bool)","function transferOwnership(address)","function renounceOwnership()"]);function f(c){return D(c,"Provide an address.",S)}function I(c){return P(c,"Invalid Beefy reward-pool integer.")}function C(c){return O(c,"Amount must be positive and fit in uint256.",{notString:"Provide a positive base-unit integer string.",positive:!0})}var V=c=>{async function k(e){try{return await e()}catch(o){throw new d(c.plainError(o))}}function A(e,o){if(e.chainId!==void 0&&e.chainId!==l)throw new d("Beefy requires chain 4663.");for(let n of Object.keys(e))if(!["chainId",...o].includes(n))throw new d(`Unsupported Beefy input: ${n}.`)}function T(e){let o=x.find(n=>n.address===f(e.boost));if(!o)throw new d("Choose a pinned Robinhood Beefy v2 boost from beefy_boosts.");return o}async function y(){let e=c.clientFor(l);if(await e.getChainId()!==l)throw new d("The Beefy endpoint must report chain 4663.");let o=I(await e.getBlockNumber()),n=(s,i,r=[])=>e.readContract({address:s,abi:R,functionName:i,args:r,blockNumber:o}),t=async(s,i)=>I(await e.readContract({address:s,abi:B,functionName:"balanceOf",args:[i],blockNumber:o}));async function a(s){let[i,r]=await Promise.all([e.readContract({address:s,abi:B,functionName:"symbol",blockNumber:o}),e.readContract({address:s,abi:B,functionName:"decimals",blockNumber:o})]);if(typeof i!="string"||!i.trim()||typeof r!="number"||!Number.isInteger(r)||r<0||r>255)throw new d("Invalid Beefy boost token metadata.");return{address:s,symbol:i,decimals:r,chainId:l}}async function u(s,i){if(f(await n(s.address,"stakedToken"))!==s.token)throw new d("The Beefy boost staked token no longer matches its pinned configuration.");let r=await n(s.address,"earned",[i]);if(!Array.isArray(r)||r.length!==2||!Array.isArray(r[0])||!Array.isArray(r[1])||r[0].length!==r[1].length||r[0].length>100)throw new d("Invalid Beefy boost rewards.");let w=r[0].map(f);if(new Set(w).size!==w.length)throw new d("Duplicate Beefy boost reward tokens.");let p=await Promise.all(w.map(async(h,g)=>({token:await a(h),amount:I(r[1][g]).toString()})));return{id:s.id,boost:s.address,vaultId:s.vaultId,staked:{token:await a(s.token),amount:(await t(s.address,i)).toString()},rewards:p,block:o.toString(),chainId:l,source:_.source}}return{read:n,balance:t,token:a,pool:u,blockNumber:o}}function m(e,o,n=[]){return c.unsignedTx({to:e,data:$({abi:R,functionName:o,args:n}),value:"0",chainId:l,description:`Beefy reward pool: ${o}.`})}async function E(e,o,n,t){return{txs:e,inputs:t,preview:await c.preview(e,o),summary:n}}return{tools:[{name:"beefy_boosts",inputSchema:{type:"object",properties:{chainId:{const:l}},additionalProperties:!1},execute:(e,o)=>k(async()=>{A(e,[]),o=f(o);let n=await y(),t=[];for(let a of x)t.push(await n.pool(a,o));return{boosts:t,summary:"Pinned Robinhood v2 reward pools. Staked moo receipts keep their underlying vault exposure. Earned amounts are estimates; inspect claim preview. Boost receipt acquisition depends on the corresponding vault adapter."}})},{name:"beefy_boost",inputSchema:{type:"object",properties:{boost:b,action:{enum:["stake","withdraw","claim","exit"]},amount:{anyOf:[v(),{const:"all"}]},chainId:{const:l}},required:["boost","action"],additionalProperties:!1},execute:(e,o)=>k(async()=>{let n=String(e.action);if(!["stake","withdraw","claim","exit"].includes(n))throw new d("Choose stake, withdraw, claim or exit.");A(e,["boost","action",...["stake","withdraw"].includes(n)?["amount"]:[]]),o=f(o);let t=T(e),a=await y();await a.pool(t,o);let u,s=[];if(n==="stake"||n==="withdraw"){let i=n==="stake"?t.token:t.address,r=await a.balance(i,o),w=e.amount==="all"?r:C(e.amount);if(w===0n||w>r)throw new d("Provide a positive amount no greater than your current Beefy boost input balance.");s=[{token:i,amount:w.toString()}],u=[...n==="stake"?[c.approval(t.token,t.address,w.toString(),l)]:[],m(t.address,n,[w])]}else n==="exit"&&(s=[{token:t.address,amount:(await a.balance(t.address,o)).toString()}]),u=[m(t.address,n==="claim"?"getReward":"exit")];return E(u,o,`${n} Beefy boost ${t.id}. Withdraw returns moo receipts; exit also claims rewards. Redeem moo receipts with the matching supported vault adapter afterward. No output amount is guaranteed by these calls.`,s)})},{name:"beefy_boost_manage",inputSchema:{type:"object",properties:{boost:b,action:{enum:["notify_reward","remove_reward","rescue_tokens","set_manager","transfer_ownership","renounce_ownership"]},token:b,amount:v(),duration:v(),recipient:b,manager:b,enabled:{type:"boolean"},chainId:{const:l}},required:["boost","action"],additionalProperties:!1},execute:(e,o)=>k(async()=>{let n={notify_reward:["token","amount","duration"],remove_reward:["token","recipient"],rescue_tokens:["token","recipient"],set_manager:["manager","enabled"],transfer_ownership:["recipient"],renounce_ownership:[]},t=String(e.action);if(!Object.hasOwn(n,t))throw new d("Choose a documented Beefy reward-pool management action.");A(e,["boost","action",...n[t]]),o=f(o);let a=T(e),u=await y();if(await u.pool(a,o),!(t==="notify_reward"?await u.read(a.address,"whitelisted",[o])===!0:f(await u.read(a.address,"owner"))===o))throw new d("This wallet does not hold the required Beefy reward-pool owner or manager role.");let i=[],r=[];if(t==="notify_reward"){let p=f(e.token),h=C(e.amount),g=C(e.duration);if(p===a.token||g<3600n)throw new d("Reward token must differ from the stake token and duration must be at least 3600 seconds.");if(await u.balance(p,o)<h)throw new d("Insufficient reward token balance.");r.push({token:p,amount:h.toString()}),i.push(c.approval(p,a.address,h.toString(),l),m(a.address,"notifyRewardAmount",[p,h,g]))}else if(t==="remove_reward"||t==="rescue_tokens")i.push(m(a.address,t==="remove_reward"?"removeReward":"rescueTokens",[f(e.token),f(e.recipient)]));else if(t==="set_manager"){if(typeof e.enabled!="boolean")throw new d("Provide a boolean enabled value.");i.push(m(a.address,"setWhitelist",[f(e.manager),e.enabled]))}else t==="transfer_ownership"?i.push(m(a.address,"transferOwnership",[f(e.recipient)])):i.push(m(a.address,"renounceOwnership"));let w=t==="remove_reward"?" Removing this reward discards all unclaimed entitlements for that token.":t==="renounce_ownership"?" Renouncing ownership permanently gives up owner administration.":"";return E(i,o,`Beefy owner/manager action ${t} on ${a.address}.${w} Review the exact calldata and preview before human confirmation.`,r)})}],positions:e=>k(async()=>{e=f(e);let o=await y(),n=[];for(let t of x){let a=await o.pool(t,e);a.staked.amount==="0"&&a.rewards.every(u=>u.amount==="0")||n.push({module:"beefy",id:t.address,chainId:l,assets:[a.staked,...a.rewards.filter(u=>u.amount!=="0")],description:`${t.id}: moo receipt stake and estimated claimable rewards at block ${o.blockNumber}. Unstake/exit before redeeming moo receipts.`})}return n})}};export{x as a,H as b,R as c,V as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as H,b as z}from"./LIUXNOLP.js";import{a as _}from"./U4JGEMKT.js";import{a as O,b as B}from"./43LI5NKJ.js";import{b as D,c as E,d as U}from"./IOYRL6AY.js";import{a as $,b as M,i as R,s as S}from"./FWD4L3CJ.js";import{a as u,b as N,c as I,e as F}from"./XSD5NL7J.js";import{decodeFunctionResult as J,encodeFunctionData as Q,erc20Abi as q,getAddress as G,isAddress as X,toEventSelector as Y,toHex as v,zeroAddress as Z}from"viem";var C="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";function ee(e){let r=e.toLowerCase();return r===Z||r===C?C:e}var te=Y("Transfer(address,address,uint256)"),K="Preview note: simulation transfer-based token changes exclude gas and do not prove external settlement.";function A(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function P(){throw new u("The endpoint returned an unexpected simulation response.")}async function L(e,r,d,a){let s=await e.getChainId();if(s!==r)throw new u(`Preview is on chain ${r}, but the endpoint reports chain ${s}.`);let i=await H(e),t=await z(e,i);if(i.number===null||typeof i.baseFeePerGas!="bigint"||i.baseFeePerGas<0n||typeof t!="bigint"||t<0n)throw new u("Current block base fee and gas price are unavailable or inconsistent. Retry the preview.");let n=t<i.baseFeePerGas?i.baseFeePerGas:t,y=D(i.gasLimit),b=d.map(f=>({from:a,to:f.to,data:f.data,value:v(BigInt(f.value)),gasPrice:v(n),gas:v(y)})),w=()=>e.request({method:"eth_simulateV1",params:[{blockStateCalls:[{blockOverrides:{baseFeePerGas:v(i.baseFeePerGas)},calls:b}],validation:!1,traceTransfers:!0},v(i.number)]},{retryCount:0});try{return await w()}catch(f){if(!I(f))throw f;let o=await e.getBalance({address:a,blockNumber:i.number}),c=await Promise.all(d.map(m=>e.estimateGas({account:a,to:m.to,data:m.data,value:BigInt(m.value),gas:y,blockNumber:i.number}).catch(()=>{}))),p=o;for(let[m,l]of b.entries()){let g=BigInt(l.value),x=U(D(i.gasLimit,c[m]),p,g,n,a,r),T=c[m];if(T!==void 0&&T>x)throw new u(E(a,r,o-p+g+T*n,o));l.gas=v(x),p-=g}let h=await w();if(Array.isArray(h)&&A(h[0])&&Array.isArray(h[0].calls))for(let[m,l]of h[0].calls.entries()){let g=b[m];if(g&&A(l)&&l.status==="0x0"&&typeof l.gasUsed=="string"&&/^0x[0-9a-f]+$/i.test(l.gasUsed)&&BigInt(l.gasUsed)>=BigInt(g.gas))throw new u(E(a,r,BigInt(g.value)+(BigInt(g.gas)+1n)*n,o))}return h}}function V(e,r,d,a){(!Array.isArray(e)||e.length!==1||!A(e[0])||!Array.isArray(e[0].calls)||e[0].calls.length!==r)&&P();let s=new Map;for(let[i,t]of e[0].calls.entries()){if(A(t)||P(),t.status==="0x0")throw new u(`Preview call ${i+1} on chain ${a} reverted. ${F(t.error)}`);(t.status!=="0x1"||t.error||!Array.isArray(t.logs))&&P();for(let n of t.logs){if((!A(n)||!Array.isArray(n.topics))&&P(),typeof n.topics[0]!="string"||n.topics[0].toLowerCase()!==te||n.topics.length===4)continue;(n.topics.length!==3||typeof n.address!="string"||!X(n.address,{strict:!1})||typeof n.data!="string"||!/^0x[0-9a-fA-F]{64}$/.test(n.data)||!n.topics.slice(1).every(c=>typeof c=="string"&&/^0x0{24}[0-9a-fA-F]{40}$/.test(c)))&&P();let y=n.topics[1].slice(-40).toLowerCase(),b=n.topics[2].slice(-40).toLowerCase(),w=d.slice(2).toLowerCase(),f=BigInt(n.data),o=(b===w?f:0n)-(y===w?f:0n);if(o!==0n){let c=ee(n.address.toLowerCase());s.set(c,(s.get(c)??0n)+o)}}}return s}async function W(e,r,d,a){let s=r===$?S.mainnet:r===M?S.testnet:void 0,i=s&&[{address:s.usdg,symbol:"USDG",decimals:6},{address:s.weth,symbol:"WETH",decimals:18},...r===$?[{address:R[4663].meridian.CollateralToken_USDe.address,symbol:"USDe",decimals:18}]:[]].find(n=>n.address.toLowerCase()===e);if(i)return{...i,address:G(e),chainId:r};let t;if(e===C){let n=d.chain?.nativeCurrency??(r===4663?{symbol:"ETH",decimals:18}:void 0);if(!n)throw new u(`Native token metadata is unavailable for chain ${r}.`);t={address:e,chainId:r,symbol:n.symbol,decimals:n.decimals}}else if(a)t=await a(e,r,d);else{let n=await _(d,r,e,"decimals");t={address:e,chainId:r,symbol:e,decimals:n}}if(!t||typeof t.address!="string"||t.address.toLowerCase()!==e||t.chainId!==r||typeof t.symbol!="string"||!t.symbol.trim()||!Number.isInteger(t.decimals)||t.decimals<0||t.decimals>255)throw new u(`Invalid token metadata for ${e} on chain ${r}.`);return{address:e===C?e:G(e),chainId:r,symbol:e===C?t.symbol:G(e),decimals:t.decimals}}function le(e){return async(r,d)=>{O(d);let a=r.map(B),s=a[0]?.chainId;if(s===void 0)return{txs:a,changes:[],summary:K};let i=a.find(t=>t.chainId!==s);if(i)throw new u(`Preview cannot combine chain ${s} with chain ${i.chainId}. Preview each chain separately.`);try{let t=e.clientFor(s),n;try{n=await L(t,s,a,d)}catch(o){if(!N(o,-32601,-32004)||!e.anvilFor)throw o;t=await e.anvilFor(s),n=await L(t,s,a,d)}let y=V(n,a.length,d,s),b=new Map,w=[];for(let[o,c]of y)if(c!==0n)try{b.set(o,await W(o,s,t,e.tokenFor))}catch(p){if(o===C||e.tokenFor||(await t.getCode({address:o})??"0x")!=="0x")throw p;w.push(o)}if(w.length){let o=w.flatMap(m=>["symbol","decimals"].map(l=>B({to:m,data:Q({abi:q,functionName:l}),value:"0",chainId:s,description:`Read simulated token ${l}.`}))),c=await L(t,s,[...a,...o],d);(!Array.isArray(c)||c.length!==1||!A(c[0])||!Array.isArray(c[0].calls)||c[0].calls.length!==a.length+o.length)&&P();let p=c[0].calls,h=V([{calls:p.slice(0,a.length)}],a.length,d,s);if(y.size!==h.size||[...y].some(([m,l])=>h.get(m)!==l))throw new u("Simulation changed while reading new-token metadata. Refresh the preview.");for(let[m,l]of w.entries()){let g=(T,j)=>{let k=p[a.length+m*2+j];if(!A(k)||k.status!=="0x1"||k.error||typeof k.returnData!="string"||!/^0x[0-9a-fA-F]+$/.test(k.returnData))throw new u(`Invalid simulated token metadata for ${l} on chain ${s}.`);return J({abi:q,functionName:T,data:k.returnData})},x={address:l,chainId:s,symbol:g("symbol",0),decimals:g("decimals",1)};b.set(l,await W(l,s,t,async()=>x))}}let f=[...y].filter(([,o])=>o!==0n).map(([o,c])=>({token:b.get(o),amount:c.toString()}));return{txs:a,changes:f,summary:K}}catch(t){throw new u(`Preview on chain ${s} failed: ${F(t)}`)}}}export{C as a,ee as b,le as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as B}from"./P5PYFK7L.js";import{a as te,d as ne,e as oe}from"./ZQAFFWDK.js";import{d as re}from"./WP6RHXGN.js";import{b as T}from"./3MLUCYCB.js";import{a as f,b as H,c as ee}from"./43LI5NKJ.js";import{c as z}from"./OTXSKFUD.js";import{b as o,e as q}from"./IX3GZMTM.js";import{a as x,i as $,w as U,x as y,y as Z,z as J}from"./FWD4L3CJ.js";import{a as r}from"./XSD5NL7J.js";import{decodeFunctionData as R,encodeFunctionData as L,parseAbi as se}from"viem";var we=60,G=50,Qe=200;var Ae="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",W="0x0000000000000000000000000000000000000000",P=$[4663].routes.kyberswap.address,Q=$[4663].routes.velora.address,X=U[4663].kyberswap.toLowerCase(),ie=U[4663].velora.toLowerCase(),ge="0x0000000000000000000000000000000000000000000000000000000000000000",_=se(["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)"]),N=se(["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)"]),D=class extends r{name="NoRouteError";constructor(t="No swap route is available for this token pair and amount."){super(t)}},F=class extends r{name="ExpiredQuoteError";constructor(t="Quote has expired. Request a fresh quote."){super(t)}},ve=1e3,h=new Map;function ue(e){for(let[t,n]of h)BigInt(e)>=o(n.expiresAt)&&h.delete(t)}function K(e){return{...e,...e.sourcePoolRoute!==void 0?{sourcePoolRoute:structuredClone(e.sourcePoolRoute)}:{},...e.txs?{txs:e.txs.map(t=>({...t}))}:{}}}function ae(e){let t=K(e);return t.txs&&(t.txs.forEach(Object.freeze),Object.freeze(t.txs)),Object.freeze(t)}var Se=["router","from","to","wallet","amountIn","amountOut","minAmountOut","expiresAt","chainId","spender","value","ponsCurveToken","ponsPoolToken","blockNumber","calldataMinAmountOut","expectedSpend","expectedRefund"];function M(e,t,n=!1){for(let s of Se)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 V(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 C(e){let t=e.toLowerCase();return t===Ae.toLowerCase()||t===W.toLowerCase()}function he(e,t=G){if(!Number.isInteger(t)||t<0||t>=1e4)throw new r("Slippage must be an integer from 0 to 9999 bps.");return q(e,String(1e4-t),"10000","floor")}var be=200;function _e(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 Y(s),s}function Y(e){if(!Number.isInteger(e)||e<0||e>be)throw new r("Velora returned an unsupported venue fee. Request a fresh quote.")}function de(e,t=1){return Y(t),o(e)*10000n/BigInt(1e4-t)+1n}function Oe(e,t){Y(t);let n=e>>96n,s=Z>>96n,a=0x3fffn,d=1n<<92n,l=e&(1n<<96n)-1n;if(n!==s&&!(n===0n&&t===0)||(l&a)!==BigInt(t)||(l&~(d|a))!==0n)throw new r("Velora partnerAndFee must match the accepted venue fee and recipient.")}function ce(e){if(e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");let t=e.provider??"venue";return`Venue fee: ${e.venueFee} base units (${e.venueFeeBps} bps) retained by ${t}; Oak swap fee: 0 (venue fee is never Oak income).`}function xe(e){f(e.from),f(e.to),f(e.wallet);let t=e.callTarget??y[x].kyberswap.address,n=e.approveTarget??W;f(t),f(n);let s=o(e.amountIn),a=o(e.minAmountOut);return L({abi:_,functionName:"swap",args:[{callTarget:t,approveTarget:n,targetData:e.targetData??"0x",desc:{srcToken:e.from,dstToken:e.to,srcReceivers:C(e.from)?[]:[t],srcAmounts:C(e.from)?[]:[s],feeReceivers:[],feeAmounts:[],dstReceiver:e.wallet,amount:s,minReturnAmount:a,flags:0n,permit:"0x"},clientData:e.clientData??"0x"}]})}function Ie(e){f(e.from),f(e.to),f(e.wallet);let t=e.executor??y[x].velora.address;return f(t),L({abi:N,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??ge,beneficiary:e.wallet},e.partnerAndFee??0n,"0x",e.executorData??"0x"]})}function De(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===X)return R({abi:_,data:e}).args[0].desc.minReturnAmount;if(t===ie)return R({abi:N,data:e}).args[1].toAmount;if(t==="0x3593564c")return ne(e).swap.amountOutMinimum;let n=R({abi:te,data:e});if(n.functionName==="buy"||n.functionName==="sell")return n.args[1];throw new r(`Unsupported swap router selector ${t}.`)}function le(e,t,n=!1){let s=o(t),a=De(e);if(a<=0n||s<=0n||a!==s&&!(n&&(a>s||e.slice(0,10).toLowerCase()===X&&a+1n===s)))throw new r(`Built swap calldata minimum output (${a}) does not match the accepted quote minimum (${s}).`);return a}function me(e,t){let{from:n,to:s,wallet:a,amountIn:d}=t;if(!n||!s||!a||d===void 0)throw new r("Accepted quote must include input, output, amount and wallet.");for(let u of[n,s,a,t.router,e.to])f(u);let l=(u,p,A)=>{if(u.toLowerCase()!==p.toLowerCase())throw new r(`Built swap ${A} does not match the accepted quote.`)};if(l(e.to,t.router,"router"),e.chainId!==(t.chainId??x))throw new r("Built swap chain does not match the accepted quote.");let g=C(n)?o(d):0n;if(o(e.value)!==g||t.value!==void 0&&o(t.value)!==g)throw new r("Built swap value does not match the accepted quote input.");let w=e.data.slice(0,10).toLowerCase(),i=t.router.toLowerCase(),c;if(i===P.toLowerCase()&&w===X){l(t.spender??t.router,P,"spender");let u=R({abi:_,data:e.data});if(L({abi:_,...u}).toLowerCase()!==e.data.toLowerCase())throw new r("KyberSwap calldata must be canonically decodable.");let{callTarget:p,approveTarget:A,desc:m}=u.args[0];l(p,y[x].kyberswap.address,"executor"),l(A,W,"executor approval target");let b=C(n);if(m.srcReceivers.length!==m.srcAmounts.length||(b?m.srcReceivers.length!==0:m.srcReceivers.length===0||m.srcAmounts.some(v=>v<=0n)||m.srcAmounts.reduce((v,S)=>v+S,0n)!==o(d)))throw new r("KyberSwap source transfers must send the exact input to the pinned executor or verified input pool.");for(let v of m.srcReceivers)if(v.toLowerCase()!==p.toLowerCase()&&!re(n,v,e.data))throw new r(`KyberSwap source transfers: receiver ${v} is not a verified input pool or the pinned executor.`);if(m.feeReceivers.length||m.feeAmounts.length||m.flags!==0n&&m.flags!==512n||m.permit!=="0x")throw new r("KyberSwap fee recipients, fee amounts, flags and permit must match the pinned zero-fee policy.");c={from:m.srcToken,to:m.dstToken,wallet:m.dstReceiver,amount:m.amount}}else if(i===Q.toLowerCase()&&w===ie){l(t.spender??t.router,Q,"spender");let u=R({abi:N,data:e.data});if(L({abi:N,...u}).toLowerCase()!==e.data.toLowerCase())throw new r("Velora calldata must be canonically decodable.");let[p,A,m,b]=u.args;if(!J.some(v=>v.toLowerCase()===p.toLowerCase()))throw new r("Built swap executor does not match the accepted quote.");if(b!=="0x")throw new r("Velora permit must match the pinned empty-permit policy.");if((t.calldataMinAmountOut!==void 0||m!==0n)&&Oe(m,t.venueFeeBps??0),t.calldataMinAmountOut!==void 0&&o(t.calldataMinAmountOut)!==de(t.minAmountOut,t.venueFeeBps??1))throw new r("Velora calldata minimum must cover the accepted net output, venue fee and router dust.");if(t.calldataMinAmountOut!==void 0&&(A.quotedAmount!==o(t.grossAmountOut??"0")||A.quotedAmount<o(t.calldataMinAmountOut)))throw new r("Velora quoted gross output must match the accepted quote and cover its calldata minimum.");if(m!==0n&&t.calldataMinAmountOut===void 0)throw new r("Velora venue fee requires a fee-adjusted calldata minimum.");c={from:A.srcToken,to:A.destToken,wallet:A.beneficiary,amount:A.fromAmount}}else if(t.provider==="pons"&&(t.ponsPoolToken||t.ponsCurveToken))c=oe(e,{...t,from:n,to:s,wallet:a});else throw new r("Built swap selector does not match the accepted router.");if(l(c.from,n,"input token"),l(c.to,s,"output token"),l(c.wallet,a,"recipient"),c.amount!==o(d))throw new r("Built swap input amount does not match the accepted quote.");le(e.data,t.calldataMinAmountOut??t.minAmountOut,i===P.toLowerCase())}function j(e,t={}){if(!e||typeof e.quoteId!="string"||!e.quoteId.trim())throw new r("Quote must include a non-empty quoteId.");if(f(e.router),e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");let n=o(e.amountOut),s=e.destAmountAfterFee??e.netAmountOut,a,d,l;if(s!==void 0){if(d=o(s),a=e.grossAmountOut!==void 0?o(e.grossAmountOut):n>=d?n:d,a<d)throw new r("Gross output cannot be less than net output.");l=e.venueFee!==void 0?o(e.venueFee):a-d}else if(e.grossAmountOut!==void 0){if(a=o(e.grossAmountOut),d=n,a<d)throw new r("Gross output cannot be less than net output.");l=e.venueFee!==void 0?o(e.venueFee):a-d}else e.venueFee!==void 0?(l=o(e.venueFee),d=n,a=d+l):(d=n,a=n,l=0n);if(d<=0n)throw new D("Quote output amount must be positive.");let g=t.slippageBps??e.slippageBps??G,w=e.minAmountOut!==void 0?o(e.minAmountOut):o(he(d.toString(),g));if(w<=0n||w>a)throw new r("Quote minAmountOut must be positive and not exceed gross output.");if((t.provider??e.provider)==="velora"&&e.calldataMinAmountOut!==void 0){if(o(e.calldataMinAmountOut)!==de(w.toString(),e.venueFeeBps??1)||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 O=o(t.amountIn??e.amountIn??"0"),I=o(e.expectedSpend??"0"),pe=o(e.expectedRefund??"0"),fe=o(e.calldataMinAmountOut??"0");if(O<=0n||I<=0n||I+pe!==O||fe*I/O!==w)throw new r("Pons actual minimum and refund do not match the encoded minimum.")}let i=V(t.now),c=BigInt(i+we),u=e.expiresAt!==void 0?o(e.expiresAt):c,p=(u>c?c:u).toString(),A=l.toString(),m=e.venueFeeBps??(a>0n&&l>0n?Number((l*10000n+a/2n)/a):0),b=t.provider??e.provider??(e.router.toLowerCase()===Q.toLowerCase()?"velora":"kyberswap"),v=b==="pons"&&e.feeDisclosure?e.feeDisclosure:ce({provider:b,venueFee:A,venueFeeBps:m,oakFee:"0"}),S={...e,quoteId:e.quoteId,amountOut:d.toString(),minAmountOut:w.toString(),router:e.router,expiresAt:p,provider:b,grossAmountOut:a.toString(),destAmountAfterFee:d.toString(),netAmountOut:d.toString(),venueFee:A,venueFeeBps:m,oakFee:"0",feeDisclosure:v,...t.from??e.from?{from:T(t.from??e.from)}:{},...t.to??e.to?{to:T(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??x,spender:e.spender??e.router,...t.allowance??e.allowance?{allowance:t.allowance??e.allowance}:{}};if(BigInt(i)>=o(p))throw new F;if(t.cache===!1)return S;if(ue(i),BigInt(i)>=o(p))throw new F;let k=h.get(S.quoteId);if(k){M(S,k,!0);let O=ae({...k,expiresAt:S.expiresAt});return h.set(O.quoteId,O),K(O)}for(;h.size>=ve;)h.delete(h.keys().next().value);let E=ae(S);return h.set(E.quoteId,E),K(E)}async function Ne(e,t,n={}){e={...e},f(e.from),f(e.to),f(e.wallet),e.from=T(e.from),e.to=T(e.to);let s=o(e.amountIn);if(s<=0n)throw new r("Swap amountIn must be greater than zero.");let a=e.slippageBps??G;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 D;let d={from:e.from,to:e.to,amountIn:s.toString(),slippageBps:a},l=await Promise.allSettled(t.map(async i=>{let c=await(i.quotePrices??i.quote).call(i,{...d},e.wallet);return{quote:j(c,{provider:i.name,from:e.from,to:e.to,amountIn:s.toString(),wallet:e.wallet,slippageBps:a,chainId:e.chainId??x,allowance:e.allowance,now:e.now,cache:!1}),provider:i}})),g,w=[];for(let i of l)i.status==="rejected"&&(g??=z(i.reason)),i.status==="fulfilled"&&o(i.value.quote.expiresAt)>BigInt(V(e.now))&&w.push(i.value);if(w.length===0){let i=l.some(c=>c.status==="rejected"&&c.reason instanceof Error&&c.reason.message===B)&&l.every(c=>c.status==="rejected"&&(c.reason instanceof D||c.reason instanceof Error&&c.reason.message===B));throw g??new D(i?B:void 0)}w.sort((i,c)=>{let p=o(c.quote.amountOut)-o(i.quote.amountOut)||o(c.quote.minAmountOut)-o(i.quote.minAmountOut);return p>0n?1:p<0n?-1:0});for(let{quote:i,provider:c}of w)try{if(BigInt(V(e.now))>=o(i.expiresAt))continue;if(n.deferBuild||!c.prepareQuote)return j(i,{now:e.now});let u=await c.prepareQuote(i.quoteId,e.wallet);if(u.quoteId!==i.quoteId)throw new r("Prepared quote ID does not match the selected route.");if(M(u,i,!0),!u.data)throw new r("Selected route did not return swap calldata.");let p={...i,expiresAt:u.expiresAt,data:u.data,value:u.value,allowance:u.allowance??i.allowance};return me(H({to:p.router,data:u.data,value:u.value??"0",chainId:p.chainId??x,description:"Selected swap route"}),p),j(p,{now:e.now})}catch(u){g??=z(u);continue}throw g??new D}function Me(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=h.get(e.quoteId),s=V(t.now);if(ue(s),!n||BigInt(s)>=o(n.expiresAt))throw h.delete(e.quoteId),new F;if(e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");M(e,n),M({...n,...t},n);let a=n.from,d=n.to,l=n.amountIn,g=n.wallet;if(!a||!d||!g||l===void 0)throw new r("Accepted quote must include input, output, amount and wallet.");let w=n.chainId??x,i=n.spender??n.router,c=t.allowance??e.allowance??n?.allowance??"0";f(a),f(d),f(g),f(i);let u=o(l);if(u<=0n)throw new r("Swap amountIn must be greater than zero.");let p=o(n.minAmountOut);if(p<=0n)throw new r("Swap minAmountOut must be greater than zero.");let A=e.router.toLowerCase()===Q.toLowerCase(),m=t.data??e.data??n?.data??(A?Ie({from:a,to:d,amountIn:u.toString(),amountOut:n.amountOut,minAmountOut:p.toString(),wallet:g}):xe({from:a,to:d,amountIn:u.toString(),minAmountOut:p.toString(),wallet:g}));le(m,n.calldataMinAmountOut??p.toString(),n.router.toLowerCase()===P.toLowerCase());let b=n.venueFee??"0",v=n.venueFeeBps??0,S=n.provider??(A?"velora":"kyberswap"),k=n.feeDisclosure??ce({provider:S,venueFee:b,venueFeeBps:v,oakFee:"0"}),E=C(a),O=t.value??e.value??n?.value??(E?u.toString():"0"),I=H({to:e.router,data:m,value:O,chainId:w,description:`Swap ${u} base units of ${a} for at least ${p} base units of ${d} via ${S} (${e.router}). ${k}`});return me(I,n),E||o(c)>=u?[I]:[ee(a,i,u.toString(),w),I]}export{we as a,G as b,Qe as c,Ae as d,W as e,_ as f,D as g,F as h,ve as i,K as j,ae as k,M as l,V as m,C as n,he as o,be as p,_e as q,de as r,Oe as s,ce as t,xe as u,Ie as v,De as w,le as x,me as y,j as z,Ne as A,Me as B};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as P,e as _,f as m}from"./O7HCEPQY.js";import{c as p,f as r,g as f,h as N,i as S,k as D,p as x,q}from"./46KWRAYK.js";import{b as I}from"./66F5ZH34.js";import{h as A}from"./NWNYJ26T.js";import{randomInt as U,randomUUID as H}from"node:crypto";import{isDeepStrictEqual as b}from"node:util";import{recoverTypedDataAddress as z}from"viem";function j(t){Object.keys(t).some(u=>!["subaccount","subaccountId","instructions","failureBehavior","continuation","signature"].includes(u))&&r("Use the Meridian batch schema."),D(t.subaccountId),(!Array.isArray(t.instructions)||t.instructions.length<1||t.instructions.length>20)&&r("A Meridian batch needs 1\u201320 instructions."),["ContinueOnFailure","StopOnFailure"].includes(String(t.failureBehavior))||r("Choose ContinueOnFailure or StopOnFailure explicitly; a batch does not roll back earlier results.");let c=new Set;return t.instructions.map(u=>{let e=f(u),a=e.kind;a!=="NEW"&&a!=="CANCEL"&&r("Each Meridian batch instruction needs kind NEW or CANCEL.");let o=a==="NEW"?P.order:["orderId","clientOrderId"];Object.keys(e).some(i=>i!=="kind"&&!o.includes(i))&&r("Unsupported Meridian batch instruction fields."),a==="CANCEL"&&e.orderId===void 0==(e.clientOrderId===void 0)&&r("Each batch cancellation needs exactly one orderId or clientOrderId.");for(let i of a==="NEW"?["clientOrderId"]:["orderId","clientOrderId"])if(e[i]!==void 0){let g=`${a}:${i}:${e[i]}`;c.has(g)&&r("Duplicate Meridian batch order identifiers."),c.add(g)}let d={subaccountId:t.subaccountId,...t.subaccount===void 0?{}:{subaccount:t.subaccount}};return a==="CANCEL"?{action:"cancel",kind:a,args:{...d,...e.orderId===void 0?{clientOrderIds:[e.clientOrderId]}:{orderIds:[e.orderId]}}}:{action:"order",kind:a,args:{...d,...Object.fromEntries(Object.entries(e).filter(([i])=>i!=="kind"))}}})}function M(t,c,u,e,a){let o=j(t);(!Number.isInteger(c)||c<0||c>=o.length)&&r("Invalid Meridian batch signing index.");let d=o[c],i=_(d.action,d.args,u,e,a);return d.kind==="CANCEL"&&(i.data={sender:u,subaccount:i.data.subaccount,nonce:e,...i.data.orderIds?{orderId:i.data.orderIds[0]}:{clientOrderId:i.data.clientOrderIds[0]}}),i}function ee(t,c,u,e,a,o){(e.stage!=="perps_batch_sign"||e.chainId!==p||!A(e.wallet,c)||typeof e.requestId!="string"||!e.requestId||typeof e.index!="number"||typeof e.signedAt!="number"||typeof e.expiresAt!="number"||e.expiresAt<=o||e.expiresAt>o+120||e.signedAt<o-120||e.signedAt>o+10)&&r("Meridian batch signing round is invalid or expired."),(a?a.requestId!==e.requestId||Number(a.index)+1!==e.index||a.expiresAt!==e.expiresAt:e.index!==0)&&r("Unexpected Meridian batch signing order.");let d=M(t,e.index,c,N(e.nonce,"the nonce",!1,64),e.signedAt),i=m(d,f(e.signatureTypes));(!b(e.request,i)||!b(e.data,d.data)||!b(u,[{kind:"typedData",request:i}]))&&r("Meridian batch signing fields differ from the local instruction.")}function te(t,c){let u=new Map;return{name:"meridian_perps_batch",inputSchema:{type:"object",additionalProperties:!1,required:["subaccountId","instructions","failureBehavior"],description:"Sign 1\u201320 NEW/CANCEL instructions locally and submit one batch. failureBehavior is explicit. Cancel/replace is not atomic. Reconcile each result and check fills after submission.",properties:{subaccountId:{type:"string",format:"uuid"},subaccount:{type:"string"},failureBehavior:{type:"string",enum:["ContinueOnFailure","StopOnFailure"]},instructions:{type:"array",minItems:1,maxItems:20,items:{type:"object",properties:{kind:{type:"string",enum:["NEW","CANCEL"]},quantity:I("D9 quantity base units."),price:I("D9 price base units."),stopPrice:I("D9 stop price base units."),expiresAt:I("Unix seconds.")},additionalProperties:!0}},continuation:{type:"object"},signature:{type:"string"}}},execute:async(e,a)=>{let o=S(a),d=j(e);d.forEach((s,n)=>M(e,n,o,"0",Math.floor(Date.now()/1e3)));let i=s=>({steps:[{kind:"typedData",request:structuredClone(s.round.request)}],continuation:structuredClone(s.round),summary:`Review and confirm Meridian batch instruction ${Number(s.round.index)+1}/${d.length}. D9 signed quantities and prices have 9 decimals. Every instruction is separately signed; no API submission occurs until all signatures are collected. ${e.failureBehavior}; earlier successful results are never rolled back.`});if(e.continuation!==void 0){let s=f(e.continuation),n=u.get(String(s.requestId));(!n||!A(s.wallet,o)||!b(n.round,s)||!b(n.args,Object.fromEntries(Object.entries(e).filter(([l])=>!["continuation","signature"].includes(l)))))&&r("Meridian batch continuation is lost, expired or changed. Check orders before restarting."),u.delete(String(s.requestId));let F=s.request;(typeof s.expiresAt!="number"||s.expiresAt<=Math.floor(Date.now()/1e3))&&(clearTimeout(n.timer),r("Meridian batch expired. Check orders before restarting."));try{(typeof e.signature!="string"||!/^0x[0-9a-fA-F]{130}$/.test(e.signature)||!A(await z({...F,signature:e.signature}),o))&&r("The local Meridian batch signature does not match this wallet.");let l=Number(s.index),L=n.values[l];if(n.signed.push({type:d[l].kind,data:L.data,signature:e.signature}),l+1<d.length){let h=n.values[l+1],$=f(s.signatureTypes);return n.round={...s,index:l+1,nonce:h.message.nonce,data:h.data,request:m(h,$),review:n.reviews[l+1]},u.set(String(s.requestId),n),i(n)}clearTimeout(n.timer),(t.network==="testnet"||await t.clientFor(p).getChainId()!==p)&&r("Meridian batch requires chain 4663.");let W=await q(t);return n.values.some(h=>!b(m(h,W).types,m(h,f(s.signatureTypes)).types))&&r("Meridian batch signing types changed; check orders before restarting."),{result:await x(t,"/v1/order/batch",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({failureBehavior:e.failureBehavior,instructions:n.signed})}),chainId:p,summary:"Meridian batch API responded. Inspect every instruction result and subsequent order/fill state. HTTP success is not atomic success or proof of execution."}}catch(l){throw clearTimeout(n.timer),l}}e.signature!==void 0&&r("Meridian batch signatures require an active local signing round."),u.size>=1e3&&r("Too many pending Meridian batches. Try again shortly."),(t.network==="testnet"||await t.clientFor(p).getChainId()!==p)&&r("Meridian batch requires chain 4663.");let g=await q(t),y=f(await x(t,"/v1/time")).time;(typeof y!="number"||!Number.isSafeInteger(y)||Math.abs(y-Date.now())>3e4)&&r("Synchronize the clock before signing a Meridian batch.");let C=Math.floor(y/1e3),B=BigInt(y)*1000000n+BigInt(U(999980)),w=d.map((s,n)=>M(e,n,o,(B+BigInt(n)).toString(),C)),T=[];for(let[s,n]of d.entries())T.push(await c(n.action,n.args,o,w[s].data));let k=H(),v=w[0],R={stage:"perps_batch_sign",chainId:p,wallet:o,requestId:k,index:0,signedAt:C,expiresAt:C+90,nonce:v.message.nonce,data:v.data,request:m(v,g),signatureTypes:{TradeOrder:g.TradeOrder,CancelOrder:g.CancelOrder},review:T[0]},O=setTimeout(()=>u.delete(k),9e4);O.unref?.();let E={args:structuredClone(e),round:R,values:w,reviews:T,signed:[],timer:O};return u.set(k,E),i(E)}}}export{ee as a,te as b};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as z}from"./JKD2B6OX.js";import{b as J,d as K,e as Z}from"./V74F6IDY.js";import{a as W}from"./HSCQZ66A.js";import{a as j,c as O,d as v,h as H,i as E,j as F}from"./D3YLXQPW.js";import{Z as $,ca as G}from"./6PBGEPUK.js";import{a as R}from"./E3RACZUY.js";import{j as L}from"./57MEFFCU.js";import{j as M}from"./P56RZC2M.js";import{a as D}from"./IOYRL6AY.js";import{e as V,h as N}from"./NWNYJ26T.js";import{a as u}from"./XSD5NL7J.js";import{erc20Abi as X,formatUnits as I,parseAbiItem as Y}from"viem";var q=Y("event CreateVaultV2(address indexed caller,address indexed owner,bytes32 salt,address indexed vault)"),ee=t=>G("unverified",{...t?{vaultLabel:t}:{}});function te(t){if(!V(t)||!V(t.chain)||t.chain.id!==4663||!Array.isArray(t.contracts)||!Array.isArray(t.markets)||t.contracts.length>1e3||t.markets.length>1e3)throw new u("Borro vault discovery returned an unreadable candidate list.");let a=[...t.contracts.filter(V).filter(e=>e.name==="BorroUSDGVault").map(e=>e.address),...t.markets.filter(V).map(e=>V(e.vault)?e.vault.address:void 0)];return[...new Set(a.map(O))]}function re(t){return t.sort((a,e)=>+(e.symbol==="USDG")-+(a.symbol==="USDG")||0)}function se(t,a={}){let e=a.resolveAllowedAsset??E(a.officialStockTokens),d=F({resolveAllowedAsset:e}),m=async(o,r={})=>{let n=await H(o),s={vaults:[],refused:[],sources:[],incomplete:!1,warnings:[],measuredAtBlock:n.toString()},y=new Map,b=()=>{if(r.signal?.aborted)throw new u("Borro read was cancelled.")};b();try{for(let l of te(await J(t.http,"contracts",r.signal)))y.set(l.toLowerCase(),{vault:l});s.sources.push("contracts.json")}catch{s.incomplete=!0,s.warnings.push("Borro candidate discovery is unavailable; this inventory may be incomplete.")}if(a.factoryEvents!==!1)try{let l=new Map;for(let c=BigInt(R.factory.fromBlock);c<=n;c+=10000000n){b();let i=c+9999999n<n?c+9999999n:n,p=await o.getLogs({address:R.factory.address,event:q,fromBlock:c,toBlock:i,strict:!0});if(p.length>1e3)throw new u("Borro factory inventory exceeds the read limit.");for(let f of p){let h=O(f.args.vault);if(f.removed||!N(f.address,R.factory.address)||f.blockNumber===null||f.blockNumber<c||f.blockNumber>i||l.has(h.toLowerCase()))throw new u("Borro factory events are unreadable.");l.set(h.toLowerCase(),{vault:h,block:f.blockNumber})}if(l.size>1e3)throw new u("Borro factory inventory exceeds the read limit.")}for(let[c,i]of l)y.set(c,i);s.sources.push("factory-events")}catch{s.incomplete=!0,s.warnings.push("Borro factory discovery is unavailable; vault creation dates or inventory may be incomplete.")}b();let C=e;if(!a.resolveAllowedAsset&&!a.officialStockTokens)try{C=E(await M({http:t.http,allowAmbiguousSymbols:!0}))}catch{s.incomplete=!0,s.warnings.push("Official stock identities could not be checked; held-share exits remain available by vault address.")}let x=F({resolveAllowedAsset:C}),g=[...y.values()];for(let l=0;l<g.length;l+=4){b();let c=await Promise.all(g.slice(l,l+4).map(async i=>{try{let p=await x(o,i.vault,r.wallet?"withdraw":"deposit",{blockNumber:n,...r.wallet?{wallet:r.wallet}:{}});if(i.block!==void 0)try{let f=await o.getBlock({blockNumber:i.block}),h=v(f.timestamp);h<=8640000000000n&&f.number===i.block&&(p.deployedAt=new Date(Number(h)*1e3).toISOString())}catch{}return{facts:p}}catch{return{rejected:{vault:i.vault,reason:ee(i.vault)}}}}));for(let i of c)i.facts&&(!r.asset||i.facts.symbol.toUpperCase()===r.asset.toUpperCase())&&s.vaults.push(i.facts),i.rejected&&s.refused.push(i.rejected)}return re(s.vaults),s};return{discoverVaults:m,verifyVault:d,resolveVault:async(o,r,n,s)=>{if(r.asset!==void 0&&!/^[A-Za-z0-9.$_-]{1,32}$/.test(r.asset))throw new u("Provide an official asset symbol.");if(r.vault){let b=await d(o,r.vault,n,{wallet:s});if(r.asset&&b.symbol.toUpperCase()!==r.asset.toUpperCase())throw new u("The asset symbol does not match the verified vault.");return b}if(!r.asset)throw new u("Provide an asset symbol or the vault address.");let y=await m(o,{asset:r.asset,...n==="withdraw"?{wallet:s}:{}});if(y.incomplete)throw new u("Borro discovery is incomplete. Provide the vault address for on-chain verification.");if(y.vaults.length!==1)throw new u(y.vaults.length?"More than one Borro vault uses this symbol. Provide the vault address.":"No verified Borro vault matched this asset. Provide the vault address to check it on chain.");return{...y.vaults[0],mode:n}}}}var P=(t,a)=>({token:t,amount:a.toString()});async function ae(t,a,e){try{let[d,m]=await Promise.all([a.getGasPrice(),L("ETH",{client:a,http:t.http,chainId:4663,blockNumber:e})]);if(!/^\d+$/.test(m.usdE18)||BigInt(m.usdE18)<=0n||v(d)===0n)return{};let w=n=>Number(I(n*d*BigInt(m.usdE18)/10n**18n,18)),o=w(D*2n),r=w(D);return[o,r].every(n=>Number.isFinite(n)&&n>0)?{gasInUsd:o,gasOutUsd:r}:{}}catch{return{}}}async function oe(t,a,e,d,m=new Map){let w={vault:e.vault,verified:!0,symbol:e.symbol,vaultSymbol:e.vaultSymbol,setup:e.setup,measuredAtBlock:e.measuredAtBlock,...e.owner?{owner:e.owner}:{},...e.curator?{curator:e.curator}:{},...e.deployedAt?{deployedAt:e.deployedAt}:{}};try{let o=BigInt(e.measuredAtBlock),r={address:e.asset,symbol:e.symbol,decimals:e.assetDecimals,chainId:4663},n={address:e.vault,symbol:e.vaultSymbol,decimals:18,chainId:4663},s=(B,k,T=[])=>a.readContract({address:B,abi:[...j,...X],functionName:k,args:T,blockNumber:o}),[y,b,C,x,g,l,c]=await Promise.all([s(e.vault,"totalAssets"),s(e.vault,"performanceFee"),s(e.asset,"balanceOf",[d]),s(e.vault,"balanceOf",[d]),W(a,e,o),ae(t,a,o),a.getBlock({blockNumber:o})]),i=v(x),p=v(b);if(p>10n**18n)throw new u("Borro performance fee is unreadable.");let f=v(await s(e.vault,"convertToAssets",[i])),h={};if(e.owner)try{let[B,k]=await Promise.all([s(e.owner,"getThreshold"),s(e.owner,"getOwners")]),T=v(B);if(!Array.isArray(k)||k.length>1e3||new Set(k.map(O)).size!==k.length||T<1n||T>BigInt(k.length))throw new u("Unreadable group wallet.");h={safeThreshold:Number(T),safeOwners:k.length}}catch{}let U;if(N(e.asset,R.assetRule.usdg.address))try{let B=(await z(a,o)).rateBasePct;Number.isFinite(B)&&B>=0&&(U=B)}catch{}let A=Z(m,r,e.vault);if(c.number!==o)throw new u("Borro block timestamp could not be verified.");let _=Number(v(c.timestamp)),S=e.deployedAt?Date.parse(e.deployedAt)/1e3:void 0,Q=$({symbol:e.symbol,kind:N(e.asset,R.assetRule.usdg.address)?"usdg":"stock",nowSeconds:_,...S===void 0?{}:{deployedAtSeconds:S},threshold:h.safeThreshold,owners:h.safeOwners,borroRatePct:A.apr===void 0?void 0:A.apr*100,feePct:Number(I(p,16)),layerbankRatePct:U,totalAmount:I(v(y),e.assetDecimals),readyAmount:g.readyBase===void 0?void 0:I(g.readyBase,e.assetDecimals),gasInUsd:l.gasInUsd===void 0?void 0:`up to $${l.gasInUsd.toFixed(4)}`,gasOutUsd:l.gasOutUsd===void 0?void 0:`up to $${l.gasOutUsd.toFixed(4)}`});return{...w,asset:r,shares:n,totalAssets:P(r,v(y)),performanceFeeWad:p.toString(),walletAssetBalance:P(r,v(C)),walletShares:P(n,i),walletShareValue:P(r,f),liquidityKind:g.kind,...g.readyBase===void 0?{}:{cashOnHand:P(r,g.readyBase)},...h,...l,...U===void 0?{}:{layerbankRateBasePct:U},...A.apr===void 0?{}:{apr:A.apr,rateSource:A.source},...A.readyToWithdraw?{vendorReadyToWithdraw:A.readyToWithdraw}:{},...S!==void 0&&S<=_?{ageSeconds:String(Math.floor(_-S))}:{},risk:{title:"Lending on Borro",text:Q,source:"Oak"}}}catch{return{...w,error:"This Borro vault can't be read right now. Please try again."}}}async function be(t,a,e={},d={}){if(e.vault&&!d.resolveAllowedAsset&&!d.officialStockTokens)try{d={...d,officialStockTokens:await M({http:t.http,allowAmbiguousSymbols:!0})}}catch{}let m=t.clientFor(4663),w=se(t,d);O(a);let o;if(e.vault){let s=await w.resolveVault(m,e,"deposit",a);o={vaults:[s],refused:[],sources:[],incomplete:!1,warnings:[],measuredAtBlock:s.measuredAtBlock}}else o=await w.discoverVaults(m,e.asset?{asset:e.asset}:{});let r=await K(t.http),n=[];for(let s of o.vaults)n.push(await oe(t,m,s,a,r));return{...o,vaults:n}}export{te as a,re as b,se as c,P as d,oe as e,be as f};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as V,H as W,I as D,L as X,a as w,z as B}from"./NEEZBJBC.js";import{a as Q}from"./66F5ZH34.js";import{f as J,g as E}from"./NWNYJ26T.js";import{b as K,d as U}from"./IX3GZMTM.js";import{a as b}from"./FWD4L3CJ.js";import{a as r}from"./XSD5NL7J.js";import{encodeFunctionData as ee,erc20Abi as oe,getAddress as I,parseAbi as te}from"viem";var N="https://hookr.fun/api/mcp",Y=te(["function fill(uint256 orderId) returns (uint256)","function fillGasFloor(uint256 orderId) view returns (uint256)"]),P={type:"string",pattern:"^[1-9][0-9]*$"},Z={type:"string",pattern:"^0x[0-9a-fA-F]{64}$"},ne={cursor:P,limit:{type:"integer",minimum:1,maximum:32}};function C(t,m){if(typeof t!="string"||!/^[1-9][0-9]*$/.test(t)||t.length>78||BigInt(t)>=1n<<256n)throw new r(`Provide ${m} as a positive decimal integer string.`);return BigInt(t)}function h(t){return J(t,"Hookr returned an invalid read response. Retry later.")}function v(t,m,e,o){return{name:t,inputSchema:{type:"object",description:`Read ${t.replace("hookr_","Hookr ")}. No signature or transaction.`,properties:m,required:e,additionalProperties:!1},execute:async(n,s)=>{if(Object.keys(n).some(a=>!Object.hasOwn(m,a))||e.some(a=>n[a]===void 0))throw new r(`Provide the documented arguments for ${t}.`);return o(n,s)}}}function F(t){if(typeof t!="string"||!/^0x[0-9a-fA-F]{64}$/.test(t))throw new r("Provide a 32-byte Hookr poolId.");return t}function $(t,m){let e=h(t),o=h(e.key);if(typeof o.fee!="number"||!Number.isInteger(o.fee)||o.fee<0||o.fee>16777215||typeof o.tickSpacing!="number"||!Number.isInteger(o.tickSpacing)||o.tickSpacing<=0||o.tickSpacing>8388607)throw new r("Hookr pool key is invalid.");let n={currency0:I(String(o.currency0)),currency1:I(String(o.currency1)),fee:o.fee,tickSpacing:o.tickSpacing,hooks:I(String(o.hooks))},s=m??F(e.poolId);if(BigInt(n.currency0)>=BigInt(n.currency1)||!E(V(n),s))throw new r("Hookr pool key does not match its PoolId.");let a=h(e.token),u=h(e.quote),c=i=>{let k=I(String(i.address));if(typeof i.symbol!="string"||!i.symbol.trim()||typeof i.decimals!="number"||!Number.isInteger(i.decimals)||i.decimals<0||i.decimals>255||![n.currency0,n.currency1].includes(k))throw new r("Hookr listed token metadata is invalid.");return{...i,address:k,chainId:b}},d=c(a),l=c(u);if(d.address===l.address)throw new r("Hookr listed token pair is invalid.");return{...e,poolId:s,key:n,token:d,quote:l}}async function re(t,m,e){try{let o=await t.http(N,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"tools/call",params:{name:m,arguments:e}}),signal:AbortSignal.timeout(15e3),redirect:"error"});if(!o.ok)throw new Error(`HTTP ${o.status}`);let n=h(await o.json());if(n.error||n.id!==1)throw new Error("RPC failure");let s=h(n.result);if(s.isError)throw new Error("Tool failure");let a=h(s.structuredContent);if(a.status==="unavailable"||a.error)throw new Error("Unavailable");return a}catch{throw new r(`Hookr ${m} read is unavailable. Retry later; unavailable data is not an empty result.`)}}var O=re;function me(t){let m=e=>v(e?"hookr_orders":"hookr_open_orders",ne,[],async(o,n)=>{let s=o.limit??16;if(typeof s!="number"||!Number.isInteger(s)||s<1||s>32)throw new r("Hookr page limit must be an integer from 1 to 32.");let a=t.clientFor(b),u=await a.getBlock();if(typeof u.number!="bigint"||typeof u.timestamp!="bigint"||u.timestamp<=0n)throw new r("Hookr order reads need a valid chain block and timestamp.");let c=new Proxy(X(a),{get(y,f,p){return f==="readContract"?g=>y.readContract({...g,blockNumber:u.number}):Reflect.get(y,f,p)}}),d={...t,clientFor:()=>c},l=await c.readContract({address:w,abi:B,functionName:"lastOrderId"});if(typeof l!="bigint"||l<0n)throw new r("Could not read the last Hookr order ID. Coverage is unknown.");let i=o.cursor===void 0?l:C(o.cursor,"cursor");if(i>l)throw new r("Hookr cursor exceeds the latest order ID. Restart pagination.");let k=[],T=new Map,A=i,S=i>BigInt(s)?i-BigInt(s):0n;for(;i>S;){let y=i--,f=W(await c.readContract({address:w,abi:B,functionName:"getOrder",args:[y]}));if(Number(f.status)===0||BigInt(f.owner)===0n)throw new r(`Hookr order #${y} is missing. Coverage is unknown.`);if(e?!E(f.owner,n):Number(f.status)!==1)continue;let p=await D(d,y,{order:f,tokens:T});if(e){k.push(p);continue}let g=null,q=null,M=null,j=null,z=BigInt(p.expiry)<u.timestamp,G=p.fillable&&!z;if(G)try{let _=await c.readContract({address:w,abi:Y,functionName:"fillGasFloor",args:[BigInt(p.orderId)]}),R=await a.estimateGas({account:n,to:w,data:ee({abi:Y,functionName:"fill",args:[BigInt(p.orderId)]}),blockNumber:u.number}),H=await a.getGasPrice();if(typeof _!="bigint"||_<0n||typeof R!="bigint"||R<=0n||typeof H!="bigint"||H<0n)throw new Error("Invalid gas data");let L=(_*6n+4n)/5n,x=R>L?R:L;g=x.toString(),q=H.toString(),M=(x*H).toString(),j=(BigInt(p.bounty)-x*H).toString()}catch{}k.push({...p,fillable:G,expired:z,economics:{gasLimit:g,gasPrice:q,estimatedGasCost:M,bountyLessEstimatedGas:j,note:"Estimate only; excludes bounty claim gas and competition. Recheck the fill preview."}})}return{chainId:b,book:w,blockNumber:u.number.toString(),chainTime:u.timestamp.toString(),orders:k,scanned:{from:A.toString(),through:(i+1n).toString()},nextCursor:i>0n?i.toString():null,complete:i===0n}});return[m(!1),m(!0),v("hookr_order",{orderId:P},["orderId"],async e=>D(t,C(e.orderId,"orderId"))),v("hookr_pools",{token:{type:"string"},limit:{type:"integer",minimum:1,maximum:50},cursor:{type:"string",pattern:"^[0-9]{1,6}$"}},[],async e=>{if(e.token!==void 0)try{I(String(e.token))}catch{throw new r("Provide a valid token address.")}if(e.limit!==void 0&&(typeof e.limit!="number"||!Number.isInteger(e.limit)||e.limit<1||e.limit>50))throw new r("Pool page limit must be from 1 to 50.");if(e.cursor!==void 0&&(typeof e.cursor!="string"||!/^[0-9]{1,6}$/.test(e.cursor)))throw new r("Provide the pool nextCursor from the previous page.");let o=await O(t,"hookr_pools",e);if(!Array.isArray(o.pools))throw new r("Hookr pool coverage is unknown. Retry later.");return{...o,pools:o.pools.map(n=>$(n)),chainId:b,source:N}}),v("hookr_pool",{poolId:Z,side:{type:"string",enum:["buy","sell"]},amountIn:P,minAmountOut:P},["poolId"],async e=>{let o=F(e.poolId),n=[e.side,e.amountIn,e.minAmountOut].some(g=>g!==void 0);if(n&&(e.side!=="buy"&&e.side!=="sell"||e.amountIn===void 0||e.minAmountOut===void 0))throw new r("Provide side, amountIn and minAmountOut together for order-specific bounty bounds.");let s=n?C(e.amountIn,"amountIn"):void 0,a=n?C(e.minAmountOut,"minAmountOut"):void 0;if(s!==void 0&&(s>=1n<<128n||a>=1n<<128n))throw new r("Hookr order amounts must fit uint128 base units.");let u=await O(t,"hookr_pool",{poolId:o}),c=u.listing?$(u.listing,o):void 0,d={...u,...c?{listing:c}:{},chainId:b,source:N};if(!n)return{...d,bountyBounds:{status:"requires-order-terms",note:"The keeper bounty floor depends on the order. Supply side, amountIn and minAmountOut in base units. The batch-1 0.0005 ETH observation is not a permanent floor."}};if(!c)throw new r("Hookr pool key is unavailable; bounty floor is unknown.");let l=c.key,i=h(e.side==="buy"?c.quote:c.token),k=I(String(i.address))===l.currency0,T=t.clientFor(b),A=await T.getBlock(),S=await T.readContract({address:w,abi:B,functionName:"bountyBounds",args:[l,k,s,a],blockNumber:A.number});if(!Array.isArray(S)||S.length!==3||S.some(g=>typeof g!="bigint"||g<0n||g>=1n<<128n))throw new r("Hookr bounty bounds are unavailable; the floor is unknown.");let[y,f,p]=S;return{...d,bountyBounds:{status:"available",blockNumber:A.number.toString(),token:{address:"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",symbol:"ETH",decimals:18,chainId:b},minBounty:y.toString(),defaultBounty:f.toString(),maxBounty:p.toString(),effectiveFloor:(y>0n?y:f).toString(),note:"ETH wei for this order at this block. Oak create uses the positive minimum, or the default when minimum is zero; recheck at creation."}}}),v("hookr_quote",{poolId:Z,side:{type:"string",enum:["buy","sell"]},amountIn:Q()},["poolId","side","amountIn"],async(e,o)=>{let n=F(e.poolId);if(e.side!=="buy"&&e.side!=="sell")throw new r("Hookr side must be buy or sell.");if(typeof e.amountIn!="string"||K(e.amountIn)<=0n)throw new r("Provide a positive amountIn in base units.");let s=await O(t,"hookr_pool",{poolId:n}),a=$(s.listing,n),u=h(e.side==="buy"?a.quote:a.token),c=I(String(u.address)),d=c==="0x0000000000000000000000000000000000000000"?18:await t.clientFor(b).readContract({address:c,abi:oe,functionName:"decimals"});if(typeof d!="number"||!Number.isInteger(d)||d<0||d>255||typeof u.symbol!="string")throw new r("Hookr input token metadata is unavailable.");let l=U(e.amountIn,d),i=await O(t,"hookr_quote",{poolId:n,side:e.side,amount:l,payer:o}),k=await O(t,"hookr_check_trade",{poolId:n,side:e.side,amount:l,wallet:o});return{chainId:b,source:N,input:{token:{address:c,symbol:u.symbol,decimals:d,chainId:b},amount:e.amountIn},quote:i,check:k,note:"Informational quote. Review pool rules; unknown trade checks do not authorize a trade."}})]}export{re as a,me as b};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var n=/[\p{Cc}\p{Cf}\p{Zl}\p{Zp}]/u,r=/\b(?:unsafe|safe|safety|risks?|risky|recommend\w*|buy\w*)\b/i,i=/(?:[a-z][a-z0-9+.-]*:\/\/|(?:https?|ftp|file|mailto|javascript|data):|www\.|\/\/|\b[a-z0-9-]+(?:\.[a-z0-9-]+)+\b)/i,o="HEY Research Lab context unavailable",a="Project names this contract",c="Builder evidence, not a trading signal.",E="Not on HEY Research Lab yet";function e(t,s){return typeof t=="string"&&!!t.trim()&&t.length<=s&&!n.test(t)&&!/[<>[\]`]/.test(t)&&!r.test(t)&&!i.test(t)}function p(t,s){return!e(t,80)||!e(s,300)?o:`Builder status by HEY Research Lab: ${t}. ${s}`}export{a,c as b,E as c,e as d,p as e};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as E}from"./VEQBHI6O.js";import{e as f}from"./NWNYJ26T.js";import{a as k}from"./XSD5NL7J.js";import{createHash as N,createPublicKey as I,verify as x}from"node:crypto";import{getAddress as R,isAddress as C}from"viem";var v="https://dashboard.agentwormhole.com",h=4663,$="name,symbol,description,logo",L="wormhole-x402@0.11.0",D=5e3,A=65536,O="MCowBQYDK2VwAyEAgzc6812eT397nvzP/off3M93Z+yM5/BmEefSnRnS7o0=",B=I({key:Buffer.from(O,"base64"),format:"der",type:"spki"}),P=N("sha256").update(Buffer.from(O,"base64")).digest("hex"),S=/^[0-9a-f]{64}$/,H=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/,b=["v","metadata_hash","scope","chain_id","token","bundle_hash","verdict","codes","ruleset","issued_at","expires_at"];function z(e){return JSON.stringify(Object.fromEntries(b.map(t=>[t,e[t]])))}function J(e){return f(e)&&Object.keys(e).length===b.length&&b.every(t=>Object.hasOwn(e,t))&&e.v===2&&typeof e.metadata_hash=="string"&&S.test(e.metadata_hash)&&typeof e.bundle_hash=="string"&&S.test(e.bundle_hash)&&typeof e.scope=="string"&&Number.isSafeInteger(e.chain_id)&&typeof e.token=="string"&&/^0x[0-9a-f]{40}$/.test(e.token)&&["clean_by_rules","flagged"].includes(String(e.verdict))&&Array.isArray(e.codes)&&e.codes.length<=100&&e.codes.every(t=>typeof t=="string"&&/^[A-Z0-9_-]{1,40}$/.test(t))&&typeof e.ruleset=="string"&&/^wormhole-x402@\d+\.\d+\.\d+$/.test(e.ruleset)&&[e.issued_at,e.expires_at].every(t=>typeof t=="string"&&H.test(t)&&Number.isFinite(Date.parse(t))&&new Date(t).toISOString()===t)}async function K(e,t){let i=e.headers.get("content-length");if(i&&(!/^\d+$/.test(i)||Number(i)>A))throw e.body?.cancel().catch(()=>{}),new Error("oversized_response");let a=e.body?.getReader();if(!a)throw new Error("invalid_response");let d=[],s=0,c=()=>{a.cancel().catch(()=>{})};t.addEventListener("abort",c,{once:!0});try{for(;;){if(t.aborted)throw new Error("timeout");let{value:u,done:l}=await a.read();if(l)break;if(s+=u.byteLength,s>A)throw new Error("oversized_response");d.push(u)}if(t.aborted)throw new Error("timeout");return JSON.parse(Buffer.concat(d).toString("utf8"))}finally{t.removeEventListener("abort",c),a.cancel().catch(()=>{}),a.releaseLock()}}async function F(e,t){if(!f(t)||Object.keys(t).length!==1||typeof t.token!="string"||!C(t.token,{strict:!0})||t.token.toLowerCase()==="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee")throw new k("Provide only token: a valid ERC-20 contract address on Robinhood Chain 4663.");let i=R(t.token),a=`${v}/api/v1/token/${h}/${i.toLowerCase()}`,d={token:{address:i,chainId:h},contentBound:!1,mutationCountAuthenticated:!1,attribution:{provider:"Agent Wormhole",source:a,page:`${v}/t/${h}/${i.toLowerCase()}`},keyId:P,unknowns:["Fresh full metadata is not available in the free response; description/logo and current displayed bytes are not bound.","The key was bootstrapped from the same origin, not independently authenticated; key rotation policy is unknown.","No contract code, economics, sellability, linked pages or image bytes were checked. Rules are evadable."]},s=(o,n=!1)=>({...d,status:"unchecked",verdict:null,signatureValid:n,codes:[],reason:o}),c=new AbortController,u,l=new Promise((o,n)=>{u=setTimeout(()=>{c.abort(),n(new Error("timeout"))},D)});try{return await Promise.race([l,(async()=>{let o=await e(a,{method:"GET",redirect:"error",credentials:"omit",headers:{accept:"application/json"},signal:c.signal}).catch(y=>{if(y instanceof E)return y.response;throw y});if(c.signal.aborted)throw new Error("timeout");if(o.redirected)return o.body?.cancel().catch(()=>{}),s("redirect_refused");if(!o.ok)return o.body?.cancel().catch(()=>{}),o.status===404?{...d,status:"unobserved",verdict:null,signatureValid:!1,codes:[],reason:"No attestation. Absence is not a verdict."}:s(o.status===429?"rate_limited":`http_${o.status}`);let n=await K(o,c.signal);if(!f(n)||!J(n.attestation)||typeof n.signature!="string"||!/^[A-Za-z0-9+/]{86}==$/.test(n.signature))return s("invalid_attestation");let r=n.attestation,m=Buffer.from(n.signature,"base64");if(m.length!==64||m.toString("base64")!==n.signature||!x(null,Buffer.from(z(r)),B,m))return s("invalid_signature");if(r.chain_id!==h||r.token!==i.toLowerCase()||r.scope!==$)return s("identity_or_scope_mismatch",!0);if(N("sha256").update(JSON.stringify({v:2,chainId:h,address:r.token,metadataHash:r.metadata_hash})).digest("hex")!==r.bundle_hash)return s("bundle_mismatch",!0);if(n.observed!==!0||n.chain_id!==h||typeof n.token!="string"||n.token.toLowerCase()!==r.token||n.bundle_hash!==r.bundle_hash||n.verdict!==r.verdict||JSON.stringify(n.codes)!==JSON.stringify(r.codes))return s("record_mismatch",!0);let p=Date.parse(r.issued_at),g=Date.parse(r.expires_at),w=Date.now();if(p>w||g<=p||g-p>864e5)return s("invalid_time_window",!0);let _=[...w>=g?["expired"]:[],...r.ruleset!==L?["unrecognized_ruleset"]:[],...n.attestation_current!==!0||n.re_attestation!=="current"?["service_reports_not_current"]:[]],T={attestation:r,signature:n.signature,scope:r.scope,metadataHash:r.metadata_hash,bundleHash:r.bundle_hash,ruleset:r.ruleset,issuedAt:r.issued_at,expiresAt:r.expires_at,bundleIdentityValid:!0};return{...d,status:_.length?"stale":"verified",verdict:_.length?null:r.verdict,signatureValid:!0,codes:r.codes,evidence:T,staleReasons:_,mutationCount:Number.isSafeInteger(n.mutations)&&Number(n.mutations)>=0?n.mutations:null,notice:"A verified metadata snapshot is not a safety certificate. Unsigned service history and freshness do not prove no mutation since the scan."}})()])}catch(o){return s(c.signal.aborted||o instanceof Error&&o.message==="timeout"?"timeout":"unavailable_or_malformed_response")}finally{u!==void 0&&clearTimeout(u)}}export{D as a,F as b};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{c as O}from"./MRMR4QHA.js";import{b as w,i as D}from"./Q42YI3EP.js";import{d as S,e as x,f as C,g as f}from"./SK2VBNAU.js";import{a as m}from"./FWD4L3CJ.js";import{a as P}from"./XSD5NL7J.js";var I=/^PT-[\p{L}\p{N}._-]{1,40}$/u,L=10n**18n,N=t=>new Date(t*1e3).toISOString().slice(0,10);async function E(t,o,e){let i=await f(t,e.map(s=>({address:s.pt,abi:C,functionName:"balanceOf",args:[o]}))),a=new Map;return e.forEach((s,l)=>{let n=i[l];if(!n.ok||typeof n.value!="bigint")throw new P("Oak couldn't read every Pendle balance, so it won't show this wallet's terms as complete.");a.set(s.pt.toLowerCase(),n.value)}),a}function M(t,o,e){let[i,a=""]=t.formatAmount(o.toString(),e).split("."),s=a.slice(0,6).replace(/0+$/,"");return s?`${i}.${s}`:i}function Y(t){let o=`Your fixed term on Pendle ended on ${t.endDate}.`;if(t.kind==="stable"){let a=t.unitAmount?`Your ${t.ptAmount} tokens are worth ${t.unitAmount} USDG now.`:`Your ${t.ptAmount} tokens can be cashed out to USDG now.`;return`${o} ${a}
|
|
2
|
-
Want me to cash out to USDG, or start a new term? One "yes" is enough; say "cash out" or "new term".`}let e=t.unitAddress?`${t.unitSymbol} (token ${t.unitAddress})`:t.unitSymbol,i=t.unitAmount?`Your ${t.ptAmount} tokens pay out about ${t.unitAmount} ${e} now.`:`Your ${t.ptAmount} tokens can be cashed out for ${e} now.`;return`${o} ${i} Want me to cash out and swap that to USDG, or start a new term? One "yes" is enough.`}async function T(t,o){let e=new Map,i=await f(t,o.map(n=>({address:n.facts.verified.yt,abi:x,functionName:"pyIndexStored"}))),a=o.map((n,d)=>{let r=i[d];if(!r.ok||typeof r.value!="bigint")return;let p=r.value>n.facts.syExchangeRate?r.value:n.facts.syExchangeRate;return p>0n?n.balance*L/p:void 0}),s=o.flatMap((n,d)=>a[d]===void 0?[]:[{item:n,amount:a[d]}]),l=await f(t,s.map(({item:n,amount:d})=>({address:n.facts.verified.sy,abi:S,functionName:"previewRedeem",args:[n.facts.verified.inputToken,d]})));return s.forEach(({item:n},d)=>{let r=l[d];r.ok&&typeof r.value=="bigint"&&e.set(n.row.market.toLowerCase(),r.value)}),e}async function F(t,o,e={}){let i=t.clientFor(m),a=e.now!==void 0?{now:e.now}:{},s=await D(t,{allowChain:!0,...a,...e.signal?{signal:e.signal}:{}});w(e.signal);let l=await E(i,o,s.rows),n=s.rows.filter(u=>(l.get(u.pt.toLowerCase())??0n)>0n);w(e.signal);let{ok:d}=await O(i,n,a),r=d.map(u=>({...u,balance:l.get(u.row.pt.toLowerCase())}));w(e.signal);let p=await T(i,r.filter(u=>u.facts.verified.expired));return r.map(({row:u,facts:b,balance:k})=>{let c=b.verified,y=M(t,k,c.ptDecimals),g=N(c.expiry),h=I.test(b.ptSymbol)?b.ptSymbol:"PT",A={module:"pendle",id:`${m}:${c.pt}`,chainId:m,assets:[{token:{address:c.pt,chainId:m,symbol:h,decimals:c.ptDecimals},amount:k.toString()}]};if(!c.expired)return{...A,description:`${y} ${h} in the Pendle term ending ${g}. It pays out at the end date if held until then; leaving early sells at that day's market price.`};let $=p.get(u.market.toLowerCase()),v=$===void 0?void 0:M(t,$,c.inputDecimals),R=Y({kind:c.kind,endDate:g,ptAmount:y,unitSymbol:c.inputSymbol,...v!==void 0?{unitAmount:v}:{},...u.source==="chain"?{unitAddress:c.inputToken}:{}});return{...A,matured:!0,oakNotice:R,description:`${y} ${h} in a Pendle term that ended ${g}; ready to cash out.`}})}export{N as a,E as b,M as c,Y as d,F as e};
|