@oakagentkit/core 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/dist/api/addresses.d.ts +0 -1219
- package/build/dist/api/addresses.js +1 -1
- package/build/dist/api/amounts.d.ts +0 -1
- package/build/dist/api/amounts.js +1 -1
- package/build/dist/api/args.js +1 -1
- package/build/dist/api/canonical.d.ts +0 -1
- package/build/dist/api/canonical.js +1 -1
- package/build/dist/api/chain.d.ts +2 -0
- package/build/dist/api/chain.js +1 -1
- package/build/dist/api/deployments.d.ts +26 -0
- package/build/dist/api/deployments.js +1 -0
- package/build/dist/api/errors.js +1 -1
- package/build/dist/api/gas.js +1 -1
- package/build/dist/api/grandfather.js +1 -1
- package/build/dist/api/guards.d.ts +23 -0
- package/build/dist/api/guards.js +1 -0
- package/build/dist/api/history.js +1 -1
- package/build/dist/api/http.js +1 -1
- package/build/dist/api/identity-link.js +1 -1
- package/build/dist/api/launch.d.ts +1 -0
- package/build/dist/api/launch.js +1 -1
- package/build/dist/api/merkle.js +1 -1
- package/build/dist/api/metadata.js +1 -1
- package/build/dist/api/module.js +1 -1
- package/build/dist/api/modules/beefy/boosts.d.ts +132 -0
- package/build/dist/api/modules/beefy/boosts.js +1 -0
- package/build/dist/api/modules/beefy/clm.d.ts +282 -0
- package/build/dist/api/modules/beefy/clm.js +1 -0
- package/build/dist/api/modules/beefy/guard.d.ts +5 -0
- package/build/dist/api/modules/beefy/guard.js +1 -0
- package/build/dist/api/modules/beefy/index.js +1 -1
- package/build/dist/api/modules/beefy/liquidity.d.ts +237 -0
- package/build/dist/api/modules/beefy/liquidity.js +1 -0
- package/build/dist/api/modules/beefy/management.d.ts +100 -0
- package/build/dist/api/modules/beefy/management.js +1 -0
- package/build/dist/api/modules/beefy/vaults.d.ts +14 -0
- package/build/dist/api/modules/beefy/vaults.js +1 -0
- package/build/dist/api/modules/clanker/extensions.d.ts +62 -0
- package/build/dist/api/modules/clanker/extensions.js +1 -0
- package/build/dist/api/modules/clanker/index.js +1 -1
- package/build/dist/api/modules/clanker/manage.d.ts +2 -0
- package/build/dist/api/modules/clanker/manage.js +1 -0
- package/build/dist/api/modules/clanker/pool-config.d.ts +96 -0
- package/build/dist/api/modules/clanker/pool-config.js +1 -0
- package/build/dist/api/modules/clanker/protocol.d.ts +2 -0
- package/build/dist/api/modules/clanker/protocol.js +1 -0
- package/build/dist/api/modules/clanker/state.d.ts +246 -0
- package/build/dist/api/modules/clanker/state.js +1 -0
- package/build/dist/api/modules/erc8004/abi.d.ts +808 -0
- package/build/dist/api/modules/erc8004/abi.js +1 -0
- package/build/dist/api/modules/erc8004/common.d.ts +69 -0
- package/build/dist/api/modules/erc8004/common.js +1 -0
- package/build/dist/api/modules/erc8004/domain.d.ts +3 -0
- package/build/dist/api/modules/erc8004/domain.js +1 -0
- package/build/dist/api/modules/erc8004/index.d.ts +3 -171
- package/build/dist/api/modules/erc8004/index.js +1 -1
- package/build/dist/api/modules/erc8004/management.d.ts +4 -0
- package/build/dist/api/modules/erc8004/management.js +1 -0
- package/build/dist/api/modules/erc8004/reputation.d.ts +3 -0
- package/build/dist/api/modules/erc8004/reputation.js +1 -0
- package/build/dist/api/modules/erc8004/services.d.ts +2 -0
- package/build/dist/api/modules/erc8004/services.js +1 -0
- package/build/dist/api/modules/erc8004/validation.d.ts +2 -0
- package/build/dist/api/modules/erc8004/validation.js +1 -0
- package/build/dist/api/modules/grove/index.js +1 -1
- package/build/dist/api/modules/heyresearch/freshness.d.ts +12 -0
- package/build/dist/api/modules/heyresearch/freshness.js +1 -0
- package/build/dist/api/modules/heyresearch/index.js +1 -1
- package/build/dist/api/modules/heyresearch/public-reads.d.ts +5 -0
- package/build/dist/api/modules/heyresearch/public-reads.js +1 -0
- package/build/dist/api/modules/hoodag/chain-reads.d.ts +33 -0
- package/build/dist/api/modules/hoodag/chain-reads.js +1 -0
- package/build/dist/api/modules/hoodag/index.d.ts +9 -1
- package/build/dist/api/modules/hoodag/index.js +1 -1
- package/build/dist/api/modules/hoodag/management.d.ts +2 -0
- package/build/dist/api/modules/hoodag/management.js +1 -0
- package/build/dist/api/modules/hoodag/public-reads.d.ts +2 -0
- package/build/dist/api/modules/hoodag/public-reads.js +1 -0
- package/build/dist/api/modules/hoodag/reconstruct.d.ts +14 -0
- package/build/dist/api/modules/hoodag/reconstruct.js +1 -0
- package/build/dist/api/modules/hoodlock/airdrop.js +1 -1
- package/build/dist/api/modules/hoodlock/buyback.d.ts +28 -0
- package/build/dist/api/modules/hoodlock/buyback.js +1 -0
- package/build/dist/api/modules/hoodlock/commerce.d.ts +24 -0
- package/build/dist/api/modules/hoodlock/commerce.js +1 -0
- package/build/dist/api/modules/hoodlock/fee.d.ts +15 -0
- package/build/dist/api/modules/hoodlock/fee.js +1 -0
- package/build/dist/api/modules/hoodlock/guard.d.ts +5 -0
- package/build/dist/api/modules/hoodlock/guard.js +1 -0
- package/build/dist/api/modules/hoodlock/index.d.ts +4 -0
- package/build/dist/api/modules/hoodlock/index.js +1 -1
- package/build/dist/api/modules/hoodlock/lifecycle.d.ts +285 -0
- package/build/dist/api/modules/hoodlock/lifecycle.js +1 -0
- package/build/dist/api/modules/hoodlock/locks-burn.d.ts +3 -3
- package/build/dist/api/modules/hoodlock/locks-burn.js +1 -1
- package/build/dist/api/modules/hoodlock/public.d.ts +3 -0
- package/build/dist/api/modules/hoodlock/public.js +1 -0
- package/build/dist/api/modules/hookr/actions.d.ts +4 -0
- package/build/dist/api/modules/hookr/actions.js +1 -0
- package/build/dist/api/modules/hookr/addons.d.ts +4 -0
- package/build/dist/api/modules/hookr/addons.js +1 -0
- package/build/dist/api/modules/hookr/contracts.d.ts +30 -0
- package/build/dist/api/modules/hookr/contracts.js +1 -0
- package/build/dist/api/modules/hookr/create-cancel.d.ts +10 -73
- package/build/dist/api/modules/hookr/create-cancel.js +1 -1
- package/build/dist/api/modules/hookr/discovery.d.ts +3 -0
- package/build/dist/api/modules/hookr/discovery.js +1 -0
- package/build/dist/api/modules/hookr/fill-bounty.js +1 -1
- package/build/dist/api/modules/hookr/index.d.ts +0 -3
- package/build/dist/api/modules/hookr/index.js +1 -1
- package/build/dist/api/modules/hookr/public-reads.d.ts +4 -0
- package/build/dist/api/modules/hookr/public-reads.js +1 -0
- package/build/dist/api/modules/hookr/relay.d.ts +304 -0
- package/build/dist/api/modules/hookr/relay.js +1 -0
- package/build/dist/api/modules/hookr/revenue.d.ts +5 -0
- package/build/dist/api/modules/hookr/revenue.js +1 -0
- package/build/dist/api/modules/kyberswap/index.d.ts +18 -2
- package/build/dist/api/modules/kyberswap/index.js +1 -1
- package/build/dist/api/modules/kyberswap/source-pools.d.ts +28 -0
- package/build/dist/api/modules/kyberswap/source-pools.js +1 -0
- package/build/dist/api/modules/lighter/index.js +1 -1
- package/build/dist/api/modules/longbow/administration.d.ts +119 -0
- package/build/dist/api/modules/longbow/administration.js +1 -0
- package/build/dist/api/modules/longbow/analytics.d.ts +272 -0
- package/build/dist/api/modules/longbow/analytics.js +1 -0
- package/build/dist/api/modules/longbow/fixed.d.ts +126 -0
- package/build/dist/api/modules/longbow/fixed.js +1 -0
- package/build/dist/api/modules/longbow/index.d.ts +16 -0
- package/build/dist/api/modules/longbow/index.js +1 -1
- package/build/dist/api/modules/longbow/nft.d.ts +236 -0
- package/build/dist/api/modules/longbow/nft.js +1 -0
- package/build/dist/api/modules/longbow/rebates.d.ts +152 -0
- package/build/dist/api/modules/longbow/rebates.js +1 -0
- package/build/dist/api/modules/longbow/staking.d.ts +4 -0
- package/build/dist/api/modules/longbow/staking.js +1 -0
- 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.d.ts +4 -0
- package/build/dist/api/modules/meridian/perps-batch.js +1 -0
- package/build/dist/api/modules/meridian/perps-common.d.ts +56 -0
- package/build/dist/api/modules/meridian/perps-common.js +1 -0
- package/build/dist/api/modules/meridian/perps-guards.d.ts +3 -0
- package/build/dist/api/modules/meridian/perps-guards.js +1 -0
- package/build/dist/api/modules/meridian/perps-intents.d.ts +18 -0
- package/build/dist/api/modules/meridian/perps-intents.js +1 -0
- package/build/dist/api/modules/meridian/perps-stream.d.ts +3 -0
- package/build/dist/api/modules/meridian/perps-stream.js +1 -0
- package/build/dist/api/modules/meridian/perps.d.ts +3 -0
- package/build/dist/api/modules/meridian/perps.js +1 -0
- package/build/dist/api/modules/meridian/predict-read.d.ts +2 -0
- package/build/dist/api/modules/meridian/predict-read.js +1 -0
- package/build/dist/api/modules/meridian/rfq.d.ts +29 -0
- package/build/dist/api/modules/meridian/rfq.js +1 -1
- package/build/dist/api/modules/merkl/discovery.d.ts +2 -0
- package/build/dist/api/modules/merkl/discovery.js +1 -0
- package/build/dist/api/modules/merkl/index.d.ts +10 -1
- package/build/dist/api/modules/merkl/index.js +1 -1
- package/build/dist/api/modules/merkl/manage.d.ts +2 -0
- package/build/dist/api/modules/merkl/manage.js +1 -0
- package/build/dist/api/modules/merkl/protocol.d.ts +2 -0
- package/build/dist/api/modules/merkl/protocol.js +1 -0
- package/build/dist/api/modules/morpho/allocator.d.ts +308 -0
- package/build/dist/api/modules/morpho/allocator.js +1 -0
- package/build/dist/api/modules/morpho/bundles-abi.d.ts +705 -0
- package/build/dist/api/modules/morpho/bundles-abi.js +1 -0
- package/build/dist/api/modules/morpho/bundles.d.ts +3 -0
- package/build/dist/api/modules/morpho/bundles.js +1 -0
- package/build/dist/api/modules/morpho/in-kind.d.ts +85 -0
- package/build/dist/api/modules/morpho/in-kind.js +1 -0
- package/build/dist/api/modules/morpho/index.d.ts +10 -2
- package/build/dist/api/modules/morpho/index.js +1 -12
- package/build/dist/api/modules/morpho/local-guard.d.ts +26 -0
- package/build/dist/api/modules/morpho/local-guard.js +1 -0
- package/build/dist/api/modules/morpho/midnight-abi.d.ts +1690 -0
- package/build/dist/api/modules/morpho/midnight-abi.js +1 -0
- package/build/dist/api/modules/morpho/midnight.d.ts +179 -0
- package/build/dist/api/modules/morpho/midnight.js +1 -0
- package/build/dist/api/modules/morpho/protocol.d.ts +290 -0
- package/build/dist/api/modules/morpho/protocol.js +1 -0
- package/build/dist/api/modules/morpho/surface.d.ts +4 -0
- package/build/dist/api/modules/morpho/surface.js +1 -0
- package/build/dist/api/modules/morpho/vault-management.d.ts +10 -0
- package/build/dist/api/modules/morpho/vault-management.js +1 -0
- package/build/dist/api/modules/morpho/vault-tools.d.ts +6 -0
- package/build/dist/api/modules/morpho/vault-tools.js +1 -0
- package/build/dist/api/modules/morpho/vault-v2.d.ts +190 -0
- package/build/dist/api/modules/morpho/vault-v2.js +1 -0
- package/build/dist/api/modules/netnet/blackjack-hashes.d.ts +89 -0
- package/build/dist/api/modules/netnet/blackjack-hashes.js +1 -0
- package/build/dist/api/modules/netnet/card-abi.d.ts +3758 -0
- package/build/dist/api/modules/netnet/card-abi.js +1 -0
- package/build/dist/api/modules/netnet/card-plan.d.ts +43 -0
- package/build/dist/api/modules/netnet/card-plan.js +1 -0
- package/build/dist/api/modules/netnet/card-policy.d.ts +10 -0
- package/build/dist/api/modules/netnet/card-policy.js +1 -0
- package/build/dist/api/modules/netnet/card-read.d.ts +2 -0
- package/build/dist/api/modules/netnet/card-read.js +1 -0
- package/build/dist/api/modules/netnet/card-recovery.d.ts +2 -0
- package/build/dist/api/modules/netnet/card-recovery.js +1 -0
- package/build/dist/api/modules/netnet/desk-action-abi.d.ts +2 -0
- package/build/dist/api/modules/netnet/desk-action-abi.js +1 -0
- package/build/dist/api/modules/netnet/desk-action.d.ts +3 -0
- package/build/dist/api/modules/netnet/desk-action.js +1 -0
- package/build/dist/api/modules/netnet/desk-read.d.ts +5 -0
- package/build/dist/api/modules/netnet/desk-read.js +1 -0
- package/build/dist/api/modules/netnet/desk-registry.d.ts +5 -0
- package/build/dist/api/modules/netnet/desk-registry.js +1 -0
- package/build/dist/api/modules/netnet/financial-abi.d.ts +1764 -0
- package/build/dist/api/modules/netnet/financial-abi.js +1 -0
- package/build/dist/api/modules/netnet/financial.d.ts +13 -0
- package/build/dist/api/modules/netnet/financial.js +1 -0
- package/build/dist/api/modules/netnet/index.d.ts +1 -0
- package/build/dist/api/modules/netnet/index.js +1 -1
- package/build/dist/api/modules/netnet/staking.d.ts +8 -0
- package/build/dist/api/modules/netnet/staking.js +1 -0
- package/build/dist/api/modules/orbio/gateway.d.ts +24 -0
- package/build/dist/api/modules/orbio/gateway.js +1 -0
- package/build/dist/api/modules/orbio/index.d.ts +3 -1
- package/build/dist/api/modules/orbio/index.js +1 -1
- package/build/dist/api/modules/orbio/pins.d.ts +457 -0
- package/build/dist/api/modules/orbio/pins.js +1 -0
- package/build/dist/api/modules/pons/claim.d.ts +33 -1
- package/build/dist/api/modules/pons/claim.js +1 -1
- package/build/dist/api/modules/pons/holder-directory.d.ts +35 -0
- package/build/dist/api/modules/pons/holder-directory.js +1 -0
- package/build/dist/api/modules/pons/index.js +1 -1
- package/build/dist/api/modules/pons/launch-status.d.ts +151 -5
- package/build/dist/api/modules/pons/launch-status.js +1 -1
- package/build/dist/api/modules/pons/prices.js +1 -1
- package/build/dist/api/modules/pons/reads.d.ts +3 -0
- package/build/dist/api/modules/pons/reads.js +1 -0
- package/build/dist/api/modules/pons/swap-terms.d.ts +77 -0
- package/build/dist/api/modules/pons/swap-terms.js +1 -0
- package/build/dist/api/modules/pons/trade.d.ts +13 -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.d.ts +23 -0
- package/build/dist/api/modules/priors/coverage.js +1 -0
- package/build/dist/api/modules/priors/discovery.d.ts +4 -0
- package/build/dist/api/modules/priors/discovery.js +1 -0
- package/build/dist/api/modules/priors/features.d.ts +62 -0
- package/build/dist/api/modules/priors/features.js +1 -0
- package/build/dist/api/modules/priors/index.d.ts +9 -2
- package/build/dist/api/modules/priors/index.js +1 -1
- package/build/dist/api/modules/priors/integration.d.ts +6 -0
- package/build/dist/api/modules/priors/integration.js +1 -0
- package/build/dist/api/modules/priors/market.d.ts +10 -0
- package/build/dist/api/modules/priors/market.js +1 -0
- package/build/dist/api/modules/priors/pt.d.ts +421 -0
- package/build/dist/api/modules/priors/pt.js +1 -0
- package/build/dist/api/modules/priors/savings-exit.d.ts +85 -0
- package/build/dist/api/modules/priors/savings-exit.js +1 -0
- package/build/dist/api/modules/priors/starter-line.d.ts +495 -0
- package/build/dist/api/modules/priors/starter-line.js +1 -0
- package/build/dist/api/modules/priors/stock-swap.d.ts +101 -0
- package/build/dist/api/modules/priors/stock-swap.js +1 -0
- package/build/dist/api/modules/relay/api.d.ts +52 -0
- package/build/dist/api/modules/relay/api.js +1 -0
- package/build/dist/api/modules/relay/bootstrap.d.ts +2 -0
- package/build/dist/api/modules/relay/bootstrap.js +1 -0
- package/build/dist/api/modules/relay/discovery.d.ts +2 -0
- package/build/dist/api/modules/relay/discovery.js +1 -0
- package/build/dist/api/modules/relay/inbound.js +1 -1
- package/build/dist/api/modules/relay/index.d.ts +2 -0
- package/build/dist/api/modules/relay/index.js +1 -1
- package/build/dist/api/modules/relay/order.d.ts +2 -0
- package/build/dist/api/modules/relay/order.js +1 -0
- package/build/dist/api/modules/relay/outbound-status.js +1 -1
- package/build/dist/api/modules/relay/readiness.d.ts +5 -0
- package/build/dist/api/modules/relay/readiness.js +1 -0
- package/build/dist/api/modules/relay/reads.d.ts +3 -0
- package/build/dist/api/modules/relay/reads.js +1 -0
- package/build/dist/api/modules/relay/vaults.d.ts +24 -0
- package/build/dist/api/modules/relay/vaults.js +1 -0
- package/build/dist/api/modules/spark/actions.d.ts +2 -0
- package/build/dist/api/modules/spark/actions.js +1 -0
- package/build/dist/api/modules/spark/details.d.ts +3 -0
- package/build/dist/api/modules/spark/details.js +1 -0
- package/build/dist/api/modules/spark/index.js +1 -1
- package/build/dist/api/modules/spark/management.d.ts +7 -0
- package/build/dist/api/modules/spark/management.js +1 -0
- package/build/dist/api/modules/steakhouse/analytics.d.ts +2 -0
- package/build/dist/api/modules/steakhouse/analytics.js +1 -0
- package/build/dist/api/modules/steakhouse/erc4626.d.ts +2 -0
- package/build/dist/api/modules/steakhouse/erc4626.js +1 -0
- package/build/dist/api/modules/steakhouse/index.js +1 -1
- package/build/dist/api/modules/steakhouse/local-guard.d.ts +7 -0
- package/build/dist/api/modules/steakhouse/local-guard.js +1 -0
- package/build/dist/api/modules/steakhouse/management.d.ts +3 -0
- package/build/dist/api/modules/steakhouse/management.js +1 -0
- package/build/dist/api/modules/steakhouse/v2-exit.d.ts +19 -0
- package/build/dist/api/modules/steakhouse/v2-exit.js +1 -0
- package/build/dist/api/modules/tickerspring/basket-routes.d.ts +2 -0
- package/build/dist/api/modules/tickerspring/basket-routes.js +1 -0
- package/build/dist/api/modules/tickerspring/contract-reads.d.ts +2 -0
- package/build/dist/api/modules/tickerspring/contract-reads.js +1 -0
- package/build/dist/api/modules/tickerspring/discovery.d.ts +27 -0
- package/build/dist/api/modules/tickerspring/discovery.js +1 -0
- package/build/dist/api/modules/tickerspring/exit-preview.d.ts +14 -0
- package/build/dist/api/modules/tickerspring/exit-preview.js +1 -0
- package/build/dist/api/modules/tickerspring/guards.d.ts +7 -0
- package/build/dist/api/modules/tickerspring/guards.js +1 -0
- package/build/dist/api/modules/tickerspring/index.d.ts +80 -1
- package/build/dist/api/modules/tickerspring/index.js +1 -1
- package/build/dist/api/modules/tickerspring/journeys.d.ts +31 -0
- package/build/dist/api/modules/tickerspring/journeys.js +1 -0
- package/build/dist/api/modules/tickerspring/ladder.d.ts +8 -0
- package/build/dist/api/modules/tickerspring/ladder.js +1 -0
- package/build/dist/api/modules/tickerspring/maker.d.ts +8 -0
- package/build/dist/api/modules/tickerspring/maker.js +1 -0
- package/build/dist/api/modules/tickerspring/order-accounting.d.ts +4 -0
- package/build/dist/api/modules/tickerspring/order-accounting.js +1 -0
- package/build/dist/api/modules/tickerspring/research.d.ts +2 -0
- package/build/dist/api/modules/tickerspring/research.js +1 -0
- package/build/dist/api/modules/tickerspring/strategies.d.ts +17 -0
- package/build/dist/api/modules/tickerspring/strategies.js +1 -0
- package/build/dist/api/modules/uniswap/auction-create.d.ts +112 -0
- package/build/dist/api/modules/uniswap/auction-create.js +1 -0
- package/build/dist/api/modules/uniswap/auction.d.ts +212 -0
- package/build/dist/api/modules/uniswap/auction.js +1 -0
- package/build/dist/api/modules/uniswap/batch.d.ts +22 -0
- package/build/dist/api/modules/uniswap/batch.js +1 -0
- package/build/dist/api/modules/uniswap/common.d.ts +12 -0
- package/build/dist/api/modules/uniswap/common.js +1 -0
- package/build/dist/api/modules/uniswap/fees.d.ts +54 -0
- package/build/dist/api/modules/uniswap/fees.js +1 -0
- package/build/dist/api/modules/uniswap/index.d.ts +2 -1
- package/build/dist/api/modules/uniswap/index.js +1 -1
- package/build/dist/api/modules/uniswap/local-guard.d.ts +16 -0
- package/build/dist/api/modules/uniswap/local-guard.js +1 -0
- package/build/dist/api/modules/uniswap/oracle.d.ts +2 -0
- package/build/dist/api/modules/uniswap/oracle.js +1 -0
- package/build/dist/api/modules/uniswap/pool-math.d.ts +13 -0
- package/build/dist/api/modules/uniswap/pool-math.js +1 -0
- package/build/dist/api/modules/uniswap/pools.d.ts +30 -0
- package/build/dist/api/modules/uniswap/pools.js +1 -0
- package/build/dist/api/modules/uniswap/position.d.ts +69 -0
- package/build/dist/api/modules/uniswap/position.js +1 -0
- package/build/dist/api/modules/uniswap/protocol.d.ts +154 -0
- package/build/dist/api/modules/uniswap/protocol.js +1 -0
- package/build/dist/api/modules/uniswap/token-jar.d.ts +52 -0
- package/build/dist/api/modules/uniswap/token-jar.js +1 -0
- package/build/dist/api/modules/uniswap/trade-batch.d.ts +2 -0
- package/build/dist/api/modules/uniswap/trade-batch.js +1 -0
- package/build/dist/api/modules/uniswap/trade.d.ts +406 -0
- package/build/dist/api/modules/uniswap/trade.js +1 -0
- package/build/dist/api/modules/uniswap/v2.d.ts +180 -0
- package/build/dist/api/modules/uniswap/v2.js +1 -0
- package/build/dist/api/modules/uniswap/v3.d.ts +23 -2
- package/build/dist/api/modules/uniswap/v3.js +1 -1
- package/build/dist/api/modules/uniswap/v4.d.ts +17 -28
- package/build/dist/api/modules/uniswap/v4.js +1 -1
- package/build/dist/api/modules/uniswap/wrap.d.ts +17 -0
- package/build/dist/api/modules/uniswap/wrap.js +1 -0
- package/build/dist/api/modules/velora/claims.d.ts +86 -0
- package/build/dist/api/modules/velora/claims.js +1 -0
- package/build/dist/api/modules/velora/delta-reads.d.ts +2 -0
- package/build/dist/api/modules/velora/delta-reads.js +1 -0
- package/build/dist/api/modules/velora/index.js +1 -1
- package/build/dist/api/owner-signature.d.ts +29 -0
- package/build/dist/api/owner-signature.js +1 -0
- package/build/dist/api/positions.js +1 -1
- package/build/dist/api/pricenote.d.ts +0 -1
- package/build/dist/api/pricenote.js +1 -1
- package/build/dist/api/prices.js +1 -1
- package/build/dist/api/pricing.d.ts +1 -14
- package/build/dist/api/pricing.js +1 -1
- package/build/dist/api/routes.d.ts +2 -0
- package/build/dist/api/routes.js +1 -1
- package/build/dist/api/rpc.d.ts +23 -0
- package/build/dist/api/rpc.js +1 -0
- 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 +19 -0
- package/build/dist/api/signing-registry.js +1 -0
- package/build/dist/api/signing.d.ts +162 -0
- package/build/dist/api/signing.js +1 -0
- package/build/dist/api/simulate.js +1 -1
- package/build/dist/api/swap.d.ts +61 -27
- package/build/dist/api/swap.js +1 -1
- package/build/dist/api/tokens.d.ts +5 -0
- package/build/dist/api/tokens.js +1 -1
- package/build/dist/api/tool-policy.d.ts +6 -0
- package/build/dist/api/tool-policy.js +1 -1
- package/build/dist/api/tx.js +1 -1
- package/build/dist/api/types.d.ts +2 -0
- package/build/dist/api/vendor-limits.js +1 -1
- package/build/dist/chunks/2EDXKJ3B.js +1 -0
- package/build/dist/chunks/2NA6JLEC.js +1 -0
- package/build/dist/chunks/2SNQWKHA.js +1 -0
- package/build/dist/chunks/3ACEWCKZ.js +1 -0
- package/build/dist/chunks/3CCBUYUM.js +1 -0
- package/build/dist/chunks/3RFSGU2Y.js +1 -0
- package/build/dist/chunks/46ZA2R5L.js +1 -0
- package/build/dist/chunks/4IPW5WZ4.js +1 -0
- package/build/dist/chunks/53N7PNJH.js +1 -0
- package/build/dist/chunks/55NX776C.js +1 -0
- package/build/dist/chunks/5EHQM6DM.js +1 -0
- package/build/dist/chunks/5FTSKYQH.js +1 -0
- package/build/dist/chunks/5HW6JKME.js +1 -0
- package/build/dist/chunks/5VXNQFYJ.js +1 -0
- package/build/dist/chunks/5XFXH2JT.js +1 -0
- package/build/dist/chunks/5YS5V2LK.js +1 -0
- package/build/dist/chunks/64AF7ECA.js +1 -0
- package/build/dist/chunks/65QFM4JU.js +1 -0
- package/build/dist/chunks/67TJOOBI.js +1 -0
- package/build/dist/chunks/6HV5BR7P.js +1 -0
- package/build/dist/chunks/{A5ITAEUQ.js → 6IM6A5VA.js} +1 -1
- package/build/dist/chunks/6JCEJ66K.js +1 -0
- package/build/dist/chunks/6LLOTPH2.js +1 -0
- package/build/dist/chunks/6NR7SVRO.js +1 -0
- package/build/dist/chunks/6PU2CMQZ.js +1 -0
- package/build/dist/chunks/6SCCW74G.js +1 -0
- package/build/dist/chunks/73N3TOJL.js +1 -0
- package/build/dist/chunks/74BPMUAG.js +1 -0
- package/build/dist/chunks/7B5UH2VS.js +1 -0
- package/build/dist/chunks/7BTELNNI.js +1 -0
- package/build/dist/chunks/7LDAJ6BM.js +1 -0
- package/build/dist/chunks/7MR37STI.js +1 -0
- package/build/dist/chunks/7T4BYFD4.js +1 -0
- package/build/dist/chunks/7US6PD56.js +1 -0
- package/build/dist/chunks/7YU6DELJ.js +1 -0
- package/build/dist/chunks/7Z5IM2QZ.js +1 -0
- package/build/dist/chunks/A25P24G2.js +1 -0
- package/build/dist/chunks/AFHHRDPJ.js +1 -0
- package/build/dist/chunks/ANQ43XJA.js +1 -0
- package/build/dist/chunks/{UCMNB2UP.js → AXYOJBX6.js} +1 -1
- package/build/dist/chunks/AYM5L6L7.js +1 -0
- package/build/dist/chunks/BFVLBENV.js +1 -0
- package/build/dist/chunks/BV3AHLH5.js +1 -0
- package/build/dist/chunks/BXN3MDS4.js +1 -0
- package/build/dist/chunks/BYXBS45D.js +1 -0
- package/build/dist/chunks/C2FEXLMA.js +1 -0
- package/build/dist/chunks/C3TJLARP.js +1 -0
- package/build/dist/chunks/C3ZZSGSP.js +1 -0
- package/build/dist/chunks/CAU44UWP.js +1 -0
- package/build/dist/chunks/CBA776XQ.js +1 -0
- package/build/dist/chunks/CCEWSOBT.js +1 -0
- package/build/dist/chunks/CEQNXF6A.js +1 -0
- package/build/dist/chunks/{6SYTB6FB.js → D3OWLDVB.js} +1 -1
- package/build/dist/chunks/D6VP3N27.js +3 -0
- package/build/dist/chunks/DHXVYHT4.js +1 -0
- package/build/dist/chunks/DLIOZCEG.js +1 -0
- package/build/dist/chunks/EA6IYKIB.js +1 -0
- package/build/dist/chunks/EC5W3UZD.js +1 -0
- package/build/dist/chunks/{B4MLWDPM.js → EG6M6SSO.js} +1 -1
- package/build/dist/chunks/EVANKNJV.js +1 -0
- package/build/dist/chunks/EYYUWFUR.js +1 -0
- package/build/dist/chunks/F2YH72GF.js +1 -0
- package/build/dist/chunks/F3TJCOVV.js +1 -0
- package/build/dist/chunks/F6WBPPBN.js +1 -0
- package/build/dist/chunks/FSPNOVKB.js +1 -0
- package/build/dist/chunks/G4PDM3MX.js +1 -0
- package/build/dist/chunks/G7UKNO2I.js +1 -0
- package/build/dist/chunks/GHDDVBPK.js +1 -0
- package/build/dist/chunks/GSI5COTD.js +1 -0
- package/build/dist/chunks/GZ5TW3WB.js +1 -0
- package/build/dist/chunks/H4S2ZCWK.js +1 -0
- package/build/dist/chunks/H6ED3RHF.js +1 -0
- package/build/dist/chunks/HFQS5344.js +1 -0
- package/build/dist/chunks/{Y3P6SUNL.js → HIMVOTIU.js} +1 -1
- package/build/dist/chunks/HL2MLC3O.js +1 -0
- package/build/dist/chunks/HNMOB76J.js +1 -0
- package/build/dist/chunks/HQVC6X3T.js +1 -0
- package/build/dist/chunks/HRG2VVPY.js +1 -0
- package/build/dist/chunks/IHGVCPVA.js +2 -0
- package/build/dist/chunks/ITV52TIE.js +1 -0
- package/build/dist/chunks/IUXOUKQN.js +1 -0
- package/build/dist/chunks/IWALIX7Q.js +1 -0
- package/build/dist/chunks/JC4SYMBV.js +18 -0
- package/build/dist/chunks/JREVERSC.js +1 -0
- package/build/dist/chunks/JRO6WTK4.js +1 -0
- package/build/dist/chunks/JRVTSGAT.js +1 -0
- package/build/dist/chunks/K463HFGC.js +1 -0
- package/build/dist/chunks/KQFDLDHL.js +1 -0
- package/build/dist/chunks/L24EOVLT.js +1 -0
- package/build/dist/chunks/LBEMCOND.js +1 -0
- package/build/dist/chunks/LI7FYINH.js +1 -0
- package/build/dist/chunks/MRWCFTMS.js +1 -0
- package/build/dist/chunks/MYBDO5SA.js +1 -0
- package/build/dist/chunks/N6RL3SUZ.js +1 -0
- package/build/dist/chunks/N77ANGBT.js +1 -0
- package/build/dist/chunks/{SJ7HDRI4.js → NBRMUFJP.js} +1 -1
- package/build/dist/chunks/NCQFWPAW.js +1 -0
- package/build/dist/chunks/NHCRJC5X.js +1 -0
- package/build/dist/chunks/NIOBE2LK.js +1 -0
- package/build/dist/chunks/NMFVXBTL.js +1 -0
- package/build/dist/chunks/NO57NGRV.js +1 -0
- package/build/dist/chunks/O47JXRXN.js +1 -0
- package/build/dist/chunks/O5SU2I3G.js +1 -0
- package/build/dist/chunks/{GIBF3YJO.js → OG5HRQU4.js} +1 -1
- package/build/dist/chunks/OJLMF5AR.js +1 -0
- package/build/dist/chunks/OJMYESQU.js +1 -0
- package/build/dist/chunks/OW7GOYKA.js +1 -0
- package/build/dist/chunks/P4UQGWCP.js +1 -0
- package/build/dist/chunks/PJ65ZOQ7.js +1 -0
- package/build/dist/chunks/Q2VMH2LB.js +1 -0
- package/build/dist/chunks/QCD33HMD.js +1 -0
- package/build/dist/chunks/QHHZDXRG.js +1 -0
- package/build/dist/chunks/QNPEKNWM.js +1 -0
- package/build/dist/chunks/QQWF6A4P.js +1 -0
- package/build/dist/chunks/QRUC7EFE.js +1 -0
- package/build/dist/chunks/QYKXWBZC.js +1 -0
- package/build/dist/chunks/QZM7CWZW.js +1 -0
- package/build/dist/chunks/QZTUMSQY.js +1 -0
- package/build/dist/chunks/R7D256HG.js +1 -0
- package/build/dist/chunks/RETS2ZEK.js +1 -0
- package/build/dist/chunks/RFJCG4NA.js +1 -0
- package/build/dist/chunks/RRSODRGT.js +1 -0
- package/build/dist/chunks/RTBOMWCB.js +1 -0
- package/build/dist/chunks/SDICP7BT.js +1 -0
- package/build/dist/chunks/SLSPWXR6.js +1 -0
- package/build/dist/chunks/SPRVVJXI.js +1 -0
- package/build/dist/chunks/SQ5BNSXR.js +1 -0
- package/build/dist/chunks/SQH7A4O3.js +1 -0
- package/build/dist/chunks/SXX52Y27.js +1 -0
- package/build/dist/chunks/T3NPRRTY.js +1 -0
- package/build/dist/chunks/T6MTTMLQ.js +1 -0
- package/build/dist/chunks/TAI63P6E.js +1 -0
- package/build/dist/chunks/TCS3ICNE.js +2 -0
- package/build/dist/chunks/TNRDCBGO.js +1 -0
- package/build/dist/chunks/TRCP7X5P.js +1 -0
- package/build/dist/chunks/TWR7BF72.js +1 -0
- package/build/dist/chunks/U3FMCX3L.js +1 -0
- package/build/dist/chunks/UIIJWIR6.js +1 -0
- package/build/dist/chunks/UMK564HS.js +1 -0
- package/build/dist/chunks/UPPYXY74.js +1 -0
- package/build/dist/chunks/UWOFA6GV.js +1 -0
- package/build/dist/chunks/UXG67LH3.js +1 -0
- package/build/dist/chunks/V6SDKPZS.js +1 -0
- package/build/dist/chunks/{GDP4JSAX.js → VJ3W2V3B.js} +1 -1
- package/build/dist/chunks/{BOFA26WU.js → VXLJRRKV.js} +1 -1
- package/build/dist/chunks/VY3P34PY.js +1 -0
- package/build/dist/chunks/WCKMQFGS.js +1117 -0
- package/build/dist/chunks/WDGPCPQJ.js +1 -0
- package/build/dist/chunks/WIDTTGSH.js +1 -0
- package/build/dist/chunks/WQZLYX64.js +1 -0
- package/build/dist/chunks/X5V2Z2NM.js +1 -0
- package/build/dist/chunks/XKRWJCYE.js +1 -0
- package/build/dist/chunks/XPFVT2EA.js +1 -0
- package/build/dist/chunks/XV6F3RET.js +1 -0
- package/build/dist/chunks/XW7RH7YY.js +1 -0
- package/build/dist/chunks/Y2IWPNEW.js +1 -0
- package/build/dist/chunks/YHPOXAKA.js +1 -0
- package/build/dist/chunks/YR3QJVJQ.js +1 -0
- package/build/dist/chunks/ZCGVBK5K.js +1 -0
- package/build/dist/chunks/ZGXNTWYG.js +1 -0
- package/build/dist/chunks/ZPM2MFXZ.js +1 -0
- package/build/dist/chunks/ZT67OMLW.js +1 -0
- package/build/dist/chunks/ZYR5LSVB.js +1 -0
- package/package.json +13 -9
- package/build/dist/chunks/2IRORNOH.js +0 -1
- package/build/dist/chunks/3PA2XT75.js +0 -1
- package/build/dist/chunks/52TGAWSI.js +0 -1
- package/build/dist/chunks/66DWJWDA.js +0 -1
- package/build/dist/chunks/73EABRFC.js +0 -1
- package/build/dist/chunks/A5KSG6LW.js +0 -1
- package/build/dist/chunks/B4FOHEBE.js +0 -1
- package/build/dist/chunks/BHR46XNW.js +0 -3
- package/build/dist/chunks/CQNZWL7F.js +0 -1
- package/build/dist/chunks/GN4QZ4JA.js +0 -1
- package/build/dist/chunks/I5CQ64EU.js +0 -1
- package/build/dist/chunks/ICCJ3TOO.js +0 -1
- package/build/dist/chunks/KL5YE7JA.js +0 -1
- package/build/dist/chunks/KVVTKM6E.js +0 -1
- package/build/dist/chunks/M6JGTQRY.js +0 -1
- package/build/dist/chunks/MK6L6TGI.js +0 -1
- package/build/dist/chunks/MOVRI5IV.js +0 -1
- package/build/dist/chunks/NA7HV7BR.js +0 -1
- package/build/dist/chunks/NGAI6GTU.js +0 -1
- package/build/dist/chunks/OBX7IZG5.js +0 -1
- package/build/dist/chunks/OSQ4AAM2.js +0 -2
- package/build/dist/chunks/OWEUVFB6.js +0 -1
- package/build/dist/chunks/P4G3EKF7.js +0 -1
- package/build/dist/chunks/QGDHMVPE.js +0 -1
- package/build/dist/chunks/SPAKOCR7.js +0 -1
- package/build/dist/chunks/T6O2L6HF.js +0 -1
- package/build/dist/chunks/TEVKPJV5.js +0 -1
- package/build/dist/chunks/YX4NVVSX.js +0 -1
- package/build/dist/chunks/ZUC6ILK2.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as y}from"./I5CQ64EU.js";import{c as E}from"./ZUC6ILK2.js";import{a as r}from"./NGAI6GTU.js";import{decodeAbiParameters as F,parseAbiParameters as X}from"viem";var G="12333333",J="9000000",Z="20000000000000000000",tt="300000000000000000000",nt=["100000000000000000000000","500000000000000000000000","1000000000000000000000000","10000000000000000000000000"],k=1800,U=9000n,A=9607n,L=150n,q=(1n<<256n)-1n,f=10000n,m=10n**18n,H=10n**30n,R=1n<<192n,_=20n*m,P=75n*m,O=100n*m,B=300n*m,x=100000n*m,w=500000n*m,p=1000000n*m,N=10000000n*m;function e(t){let n=typeof t=="bigint"?t:y(t);if(n<0n||n>q)throw new r("Amount must be within the uint256 range.");return n}function h(t){if(typeof t=="bigint")return t;if(typeof t=="number"){if(!Number.isSafeInteger(t))throw new r("Integer parameter must be a safe integer.");return BigInt(t)}if(typeof t!="string"||!/^-?\d+$/.test(t))throw new r("Value must be a signed integer decimal string.");return BigInt(t)}function v(t,n=77){let i=typeof t=="number"?t:typeof t=="string"&&/^\d+$/.test(t)?Number(t):NaN;if(!Number.isInteger(i)||i<0||i>n)throw new r(`Token decimals must be an integer from 0 to ${n}.`);return i}function T(t){return 10n**BigInt(t)}function I(t,n="Result"){if(t<0n||t>q)throw new r(`${n} exceeds uint256 bounds.`);return t}function b(t,n,i="Factor"){return I(t*n,i)}function g(t,n,i,o="floor"){if(i<=0n)throw new r("The denominator must be positive.");let c=t*n;if(c===0n)return 0n;let s=o==="ceil"?c/i+(c%i===0n?0n:1n):c/i;return I(s,"Math.mulDiv result")}function it(t){let n=e(t);return n<x?_.toString():n<w?(_+g(n-x,P-_,w-x)).toString():n<p?(P+g(n-w,O-P,p-w)).toString():n<N?(O+g(n-p,B-O,N-p)).toString():B.toString()}function et(t){let n=e(t);return I(9000000n+n/1000000000000n/6n,"noHoldPriceBase").toString()}function rt(t){let n=e(t),i=n/4n,o=n-i;return{burn:i.toString(),treasury:o.toString()}}function V(t){let n=e(t);return g(n,5n,100n,"ceil").toString()}function ot(t){let n=e(t);return(n-BigInt(V(n))).toString()}function ct(t,n){let i=e(t),o=e(n);if(o<=0n)throw new r("OAK-per-ETH price must be positive.");return g(i,m,o,"floor").toString()}function st(t,n,i=E){let o=e(t),c=e(n);if(c<=0n)throw new r("OAK USD price must be positive.");let s=T(v(i));return g(o,s,c,"ceil").toString()}function at(t,n,i=E){let o=e(t),c=e(n),s=T(v(i));return g(o,c,s,"floor").toString()}function ut(t,n){let i=e(t),o=e(n);if(i>f||o>f)throw new r("FeePolicyOutOfBounds: hook fee or creator tax exceeds 10000 bps.");let c=i+o+L;if(c>f-U)throw new r("FeePolicyOutOfBounds: fees and impact allowance exceed 1000 bps.");let s=f-c;return(s>A?A:s).toString()}function gt(t,n,i,o,c){let s=v(o,83);if(s<6)throw new r("OAK decimals must be at least 6 for burner conversion.");let a=e(c);if(a<U||a>A)throw new r("InvalidBurnerFloor: floor must be from 9000 to 9607 bps.");let u=e(t),d=e(n),l=e(i);if(l<=0n)throw new r("ETH USD price must be positive.");let D=T(s-6),S=b(u,D,"burnerMinOut usdgIn * decimalScale"),W=b(d,a,"burnerMinOut oakPerEthE18 * floorBps"),M=b(l,f,"burnerMinOut ethUsdE18 * 10000");return g(S,W,M,"floor").toString()}function mt(t,n,i=k){let o=h(t),c=h(n),s=h(i);if(s<=0n)throw new r("Observation window seconds must be positive.");let a=c-o,d=a/s-(a<0n&&a%s!==0n?1n:0n);return Number(d)}function lt(t,n){if(!t||typeof n!="string"||!/^0x[0-9a-fA-F]*$/.test(n))throw new r("Oracle observe call failed or returned invalid hex.");if(n==="0x"||n.length<258)throw new r("Oracle observe return data is empty or too short.");try{let[i]=F(X("int56[] tickCumulatives, uint160[] secondsPerLiquidityCumulativeX128s"),n);if(!Array.isArray(i)||i.length<2)throw new r("Oracle observe did not return two tick cumulatives.");return[i[0].toString(),i[1].toString()]}catch(i){throw i instanceof r?i:new r("Oracle observe return data could not be decoded.")}}function dt(t){let n=e(t);if(n<=0n)throw new r("sqrtRatioX96 must be positive.");let i=b(n,n,"sqrtRatioX96 squared");return g(i,H,R,"floor").toString()}function K(t){let n=e(t);if(n<=0n)throw new r("sqrtPriceX96 must be positive.");let i=b(n,n,"sqrtPriceX96 squared");return g(i,m,R,"floor").toString()}function C(t){let n="ethAmountWei"in t&&t.ethAmountWei!==void 0?t.ethAmountWei:"ethVolumeWei"in t?t.ethVolumeWei:void 0;if(n===void 0)throw new r("SwapTrade must provide ethAmountWei.");let i=h(n),o=i<0n?-i:i;if(o<=0n)throw new r("SwapTrade ETH volume must be positive.");let c;t.sqrtPriceX96!==void 0&&t.sqrtPriceX96!==""&&t.sqrtPriceX96!=="0"&&(c=BigInt(K(t.sqrtPriceX96)));let s;if(t.oakPerEthE18!==void 0&&t.oakPerEthE18!==""&&(s=e(t.oakPerEthE18)),c!==void 0&&s!==void 0&&c!==s)throw new r("SwapTrade oakPerEthE18 does not match post-swap sqrtPriceX96.");let a=c??s;if(a===void 0||a<=0n)throw new r("SwapTrade must provide a positive post-swap price.");let u=t.timestamp!==void 0&&t.timestamp!==""?e(t.timestamp):void 0;return{volumeWei:o,oakPerEth:a,timestamp:u}}function Y(t,n){if(!Array.isArray(t)||t.length===0)throw new r("At least one SwapTrade is required to compute the 30-minute average.");let i=n?.windowEnd!==void 0?e(BigInt(n.windowEnd)):n?.now!==void 0?e(BigInt(n.now)):void 0,o=n?.windowStart!==void 0?e(BigInt(n.windowStart)):i!==void 0?i-BigInt(k):void 0,c=0n,s=0n;for(let a of t){let{volumeWei:u,oakPerEth:d,timestamp:l}=C(a);o!==void 0&&i!==void 0&&l!==void 0&&(l<o||l>=i)||(c+=u*d,s+=u)}if(s<=0n)throw new r("No trades with positive ETH volume fell inside the 30-minute window.");return(c/s).toString()}function St(t,n,i=k){let o=e(BigInt(n)),c=e(BigInt(i));if(c<=0n||o<c)throw new r("Invalid 30-minute observation window bounds.");let s=o-c,a=[],u=0n;for(let l of t){let{volumeWei:D,timestamp:S}=C(l);S!==void 0&&(S<s||S>=o)||(a.push(l),u+=D)}return{oakPerEthE18:Y(a),tradeCount:a.length,ethVolumeWei:u.toString(),windowStart:s.toString(),windowEnd:o.toString()}}function ft(t,n){return e(t)<=e(n)}function bt(t,n){return e(t)<=e(n)}export{G as a,J as b,Z as c,tt as d,nt as e,k as f,U as g,A as h,L as i,it as j,et as k,rt as l,V as m,ot as n,ct as o,st as p,at as q,ut as r,gt as s,mt as t,lt as u,dt as v,K as w,Y as x,St as y,ft as z,bt as A};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as k,c as D,d as x}from"./MOVRI5IV.js";import{a as V}from"./GDP4JSAX.js";import{a as T}from"./A5ITAEUQ.js";import{a as X,b as W}from"./I5CQ64EU.js";import{a as c,d as j,i as O}from"./ZUC6ILK2.js";import{a as s}from"./NGAI6GTU.js";import{encodeFunctionData as J,erc20Abi as G,getAddress as a,isAddress as ft,parseAbi as pt}from"viem";var kt="hookr",y=a(O[4663].hookr.HookrLimitOrders.address),gt=a(O[4663].hookr.HookrRoot.address),At=a(O[4663].hookr.HookrRouter.address),wt=a(O[4663].hookr.HookrForwarder.address),Ot=a(O[4663].hookr.PoolManager.address),Bt=a(O[4663].hookr.HOOKR_Token.address),L="0x0000000000000000000000000000000000000000",ht="0x000000000000000000000000000000000000dEaD",Q=(1n<<128n)-1n,It=new Set([L.toLowerCase(),ht.toLowerCase(),y.toLowerCase(),At.toLowerCase(),wt.toLowerCase(),Ot.toLowerCase(),gt.toLowerCase()]),B=pt(["function getOrder(uint256 orderId) view returns (((address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks) key, address owner, uint40 createdAt, uint40 expiry, bool zeroForOne, uint8 status, address recipient, uint128 amountIn, uint128 minAmountOut, uint128 bounty, uint160 sqrtPriceLimitX96))","function quoteFill(uint256 orderId) view returns (bool fillable, uint256 amountOut)","function bountyBounds((address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks) key, bool zeroForOne, uint128 amountIn, uint128 minAmountOut) view returns (uint128 minBounty, uint128 defaultBounty, uint128 maxBounty)","function fill(uint256 orderId) returns (uint256 amountOut)","function claimBounty(address to) returns (uint256 amount)","function bountyOf(address keeper) view returns (uint256)","function lastOrderId() view returns (uint256)","function liabilities(address currency) view returns (uint256)"]);function St(t){let n=t.toLowerCase();return n===L.toLowerCase()||n===V.toLowerCase()}function Tt(t,n,i){let o=n.trim();if(o.startsWith("-")){let u=o.slice(1),r=t(u,i);return r==="0"?"0":`-${r}`}return t(o,i)}function Kt(t,n,i){return W(t,n,i)}function Y(t,n){return!t.changes||t.changes.length===0?"no net ERC-20/native transfer delta on caller":t.changes.map(i=>`${Tt(n,i.amount,i.token.decimals)} ${i.token.symbol} (${i.token.address})`).join(", ")}function $t(t){if(typeof t=="bigint"){if(t<=0n)throw new s("Hookr orderId must be a positive integer.");return t}if(typeof t=="number"){if(!Number.isSafeInteger(t)||t<=0)throw new s("Hookr orderId must be a positive integer.");return BigInt(t)}if(typeof t=="string"&&/^\d+$/.test(t.trim())){let n=BigInt(t.trim());if(n<=0n)throw new s("Hookr orderId must be a positive integer.");return n}throw new s("Provide a positive integer Hookr orderId.")}function tt(t){if(t==null)return c;if(typeof t!="number"||!Number.isSafeInteger(t)||t!==c)throw new s(`Hookr limit orders are only supported on chain ${c}.`);return c}function Ht(t){switch(t){case 0:return"None";case 1:return"Open";case 2:return"Filled";case 3:return"Cancelled";default:return"Unknown"}}function xt(t){if(Array.isArray(t)){let[n,i,o,u,r,d,g,m,b,e,l]=t;return{key:Array.isArray(n)?{currency0:n[0],currency1:n[1],fee:Number(n[2]),tickSpacing:Number(n[3]),hooks:n[4]}:n,owner:i,createdAt:o,expiry:u,zeroForOne:!!r,status:d,recipient:g,amountIn:BigInt(m),minAmountOut:BigInt(b),bounty:BigInt(e),sqrtPriceLimitX96:BigInt(l)}}if(t&&typeof t=="object"){let n=t;if(n.key&&typeof n.key=="object")return{key:{currency0:n.key.currency0,currency1:n.key.currency1,fee:Number(n.key.fee),tickSpacing:Number(n.key.tickSpacing),hooks:n.key.hooks},owner:n.owner,createdAt:n.createdAt,expiry:n.expiry,zeroForOne:!!n.zeroForOne,status:n.status,recipient:n.recipient,amountIn:BigInt(n.amountIn),minAmountOut:BigInt(n.minAmountOut),bounty:BigInt(n.bounty),sqrtPriceLimitX96:BigInt(n.sqrtPriceLimitX96)}}throw new s("HookrLimitOrders returned a malformed order tuple.")}function Rt(t){if(Array.isArray(t)&&t.length>=2)return{fillable:!!t[0],amountOut:BigInt(t[1])};if(t&&typeof t=="object"&&"fillable"in t&&"amountOut"in t){let n=t;return{fillable:!!n.fillable,amountOut:BigInt(n.amountOut)}}throw new s("HookrLimitOrders returned a malformed quoteFill response.")}function Ct(t){if(Array.isArray(t)&&t.length>=3)return{minBounty:BigInt(t[0]),defaultBounty:BigInt(t[1]),maxBounty:BigInt(t[2])};if(t&&typeof t=="object"&&"minBounty"in t&&"defaultBounty"in t&&"maxBounty"in t){let n=t;return{minBounty:BigInt(n.minBounty),defaultBounty:BigInt(n.defaultBounty),maxBounty:BigInt(n.maxBounty)}}throw new s("HookrLimitOrders returned a malformed bountyBounds response.")}async function Z(t,n,i=c){if(i!==c)throw new s(`Unsupported token chain ${i}; Hookr requires chain ${c}.`);if(St(n))return{...k,chainId:i};T(n);let o=a(n),u=o.toLowerCase();if(u===D.address.toLowerCase())return{address:o,symbol:D.symbol,decimals:j,chainId:i};if(u===x.address.toLowerCase())return{address:o,symbol:x.symbol,decimals:x.decimals,chainId:i};if(u===Bt.toLowerCase())return{address:o,symbol:"HOOKR",decimals:18,chainId:i};let[r,d]=await Promise.all([t.readContract({address:o,abi:G,functionName:"symbol"}),t.readContract({address:o,abi:G,functionName:"decimals"})]),g=typeof r=="string"&&r.trim()?r.trim():o,m=Number(d);if(!Number.isInteger(m)||m<0||m>255)throw new s(`Invalid token decimals for ${o} on chain ${i}.`);return{address:o,symbol:g,decimals:m,chainId:i}}async function Dt(t){if(typeof t.getBlock!="function")throw new s("Cannot read the latest block timestamp for Hookr order expiry.");let n=await t.getBlock().catch(()=>{throw new s("Cannot read the latest block timestamp for Hookr order expiry.")});if(!n||typeof n.timestamp!="bigint"||n.timestamp<=0n)throw new s("Hookr requires a usable latest block timestamp to check order expiry.");return n.timestamp}function P(t,n=[]){if(typeof t!="string"||!ft(t,{strict:!1}))throw new s("Provide a valid recipient wallet address.");let i=a(t),o=i.toLowerCase();if(It.has(o)||n.some(u=>u.toLowerCase()===o))throw new s(`Recipient ${i} is a reserved protocol or zero address (invalid recipient).`);return i}function nt(t){if(t.minBountyEth!==void 0||t.minAmountOutDecimal!==void 0||t.rounding!==void 0)throw new s("Use minBounty and minAmountOut as base-unit integer strings.")}function E(t,n){if(t!==void 0){if(typeof t!="string"||!/^\d+$/.test(t))throw new s(`Provide ${n} as a base-unit integer string.`);return X(t)}}function Pt(t){return{name:"hookr_fill",inputSchema:{type:"object",properties:{orderId:{type:"string",description:"HookrLimitOrders orderId as a positive integer string."},minBounty:{type:"string",description:"Optional minimum keeper bounty in wei (decimal base-unit string)."},minAmountOut:{type:"string",description:"Optional quote pre-check only, in token base-unit integer strings. Not enforced on chain: fill(uint256) enforces only the order minAmountOut."},chainId:{type:"number",description:"Target chain ID (must be 4663)."}},required:["orderId"],additionalProperties:!1},async execute(n,i){try{nt(n),T(i);let o=a(i),u=tt(n.chainId),r=$t(n.orderId),d=t.clientFor(u),[g,m,b]=await Promise.all([d.readContract({address:y,abi:B,functionName:"getOrder",args:[r]}),d.readContract({address:y,abi:B,functionName:"quoteFill",args:[r]}),Dt(d)]),e=xt(g),l=Number(e.status),h=Ht(l);if(l===0||e.owner.toLowerCase()===L.toLowerCase())throw new s(`Hookr order #${r} does not exist.`);if(l!==1)throw new s(`Hookr order #${r} is not open (current status: ${h}).`);let A=BigInt(e.expiry);if(A<b)throw new s(`Hookr order #${r} is expired (expiry ${A} < current timestamp ${b}).`);let f=Number(e.key.tickSpacing),$=Number(e.key.fee);if(!Number.isInteger(f)||f<=0)throw new s(`Hookr order #${r} has an invalid pool tickSpacing (${f}).`);if(e.amountIn<=0n||e.amountIn>Q)throw new s(`Hookr order #${r} has an invalid amountIn (${e.amountIn}).`);if(e.minAmountOut<=0n||e.minAmountOut>Q)throw new s(`Hookr order #${r} has an invalid minAmountOut (${e.minAmountOut}).`);let R=a(e.key.hooks);P(e.recipient,[R]);let et=await d.readContract({address:y,abi:B,functionName:"bountyBounds",args:[{currency0:a(e.key.currency0),currency1:a(e.key.currency1),fee:$,tickSpacing:f,hooks:R},e.zeroForOne,e.amountIn,e.minAmountOut]}),w=Ct(et),C=E(n.minBounty,"minBounty"),_=C!==void 0&&C>w.minBounty?C:w.minBounty;if(e.bounty<_)throw new s(`Hookr order #${r} is underbounty: order bounty (${e.bounty} wei) is below the required keeper bounty (${_} wei).`);if(e.bounty>w.maxBounty)throw new s(`Hookr order #${r} bounty (${e.bounty} wei) exceeds maximum bounty bound (${w.maxBounty} wei).`);let I=Rt(m),ot=e.zeroForOne?e.key.currency0:e.key.currency1,rt=e.zeroForOne?e.key.currency1:e.key.currency0,[H,p]=await Promise.all([Z(d,ot,u),Z(d,rt,u)]),S=E(n.minAmountOut,"minAmountOut"),F=S!==void 0&&S>e.minAmountOut?S:e.minAmountOut;if(!I.fillable||I.amountOut<=0n||I.amountOut<F)throw new s(`Hookr order #${r} is not executable: quoted output (${I.amountOut} base units of ${p.address}) does not meet minimum output (${F} base units).`);let it=J({abi:B,functionName:"fill",args:[r]}),st=t.formatAmount(e.amountIn.toString(),H.decimals),ut=t.formatAmount(I.amountOut.toString(),p.decimals),at=t.formatAmount(e.minAmountOut.toString(),p.decimals),mt=t.formatAmount(e.bounty.toString(),18),dt=S===void 0?"":` Caller minAmountOut ${S} base units is a quote pre-check only, not enforced on chain; fill(uint256) enforces the order minimum of ${e.minAmountOut} base units.`,v=`Fill Hookr order #${r}: maker's escrow pays ${st} ${H.symbol} (${e.amountIn} base units of ${H.address}); net output goes to ${a(e.recipient)} (quoted ${ut} ${p.symbol}, order minimum ${at} ${p.symbol}, ${e.minAmountOut} base units of ${p.address}). The filler sends no tokens or ETH (value 0), pays gas, and accrues ${mt} ETH (${e.bounty} wei) bounty to ${o}, payable only via claimBounty. Pool tickSpacing ${f}; expiry ${A} inclusive.${dt}`,q=t.unsignedTx({to:y,data:it,value:"0",chainId:u,description:v}),M=await t.preview([q],o),ct=Y(M,t.formatAmount),z={token:H,amount:e.amountIn.toString()},K={token:p,amount:e.minAmountOut.toString()},lt={token:p,amount:I.amountOut.toString()},U={token:{...k,chainId:u},amount:e.bounty.toString()},yt={orderId:r.toString(),key:{currency0:a(e.key.currency0),currency1:a(e.key.currency1),fee:$,tickSpacing:f,hooks:R},owner:a(e.owner),recipient:a(e.recipient),createdAt:BigInt(e.createdAt).toString(),expiry:A.toString(),zeroForOne:e.zeroForOne,status:l,statusLabel:h,amountIn:z,minAmountOut:K,bounty:U,sqrtPriceLimitX96:e.sqrtPriceLimitX96.toString()},bt={minBounty:{token:{...k,chainId:u},amount:w.minBounty.toString()},defaultBounty:{token:{...k,chainId:u},amount:w.defaultBounty.toString()},maxBounty:{token:{...k,chainId:u},amount:w.maxBounty.toString()}};return{txs:[q],summary:`${v} Preview deltas: ${ct}.`,preview:M,orderId:r.toString(),fillable:!0,amountIn:z,minAmountOut:K,quotedAmountOut:lt,bounty:U,bountyBounds:bt,order:yt}}catch(o){throw new s(t.plainError(o))}}}}function Et(t){return{name:"hookr_claim_bounty",inputSchema:{type:"object",properties:{to:{type:"string",description:"Optional recipient address for the claimed native ETH bounty (must be the signing wallet)."},minBounty:{type:"string",description:"Optional minimum claimable bounty in wei (decimal base-unit string)."},chainId:{type:"number",description:"Target chain ID (must be 4663)."}},additionalProperties:!1},async execute(n,i){try{nt(n),T(i);let o=a(i),u=tt(n.chainId),r=n.to!==void 0&&n.to!==null?P(String(n.to)):P(o);if(r!==o)throw new s("Hookr bounty recipient must be the signing wallet.");let g=await t.clientFor(u).readContract({address:y,abi:B,functionName:"bountyOf",args:[o]}),m=BigInt(g);if(m<=0n)throw new s(`No claimable Hookr keeper bounty for ${o}.`);let b=E(n.minBounty,"minBounty");if(b!==void 0&&m<b)throw new s(`Claimable Hookr bounty (${m} wei) is below the requested minimum (${b} wei).`);let e=J({abi:B,functionName:"claimBounty",args:[r]}),l=t.formatAmount(m.toString(),18),h=t.unsignedTx({to:y,data:e,value:"0",chainId:u,description:`Claim ${l} ETH (${m} wei) of accrued Hookr keeper bounty from ${y} to ${r}.`}),A=await t.preview([h],o),f=Y(A,t.formatAmount),$={token:{...k,chainId:u},amount:m.toString()};return{txs:[h],summary:`Claim ${l} ETH (${m} wei) Hookr keeper bounty to ${r}. Preview deltas: ${f}.`,preview:A,recipient:r,claimableBounty:$}}catch(o){throw new s(t.plainError(o))}}}}async function Lt(t,n){T(n);let i=a(n),o=t.clientFor(c);try{let u=await o.readContract({address:y,abi:B,functionName:"bountyOf",args:[i]}),r=BigInt(u);if(r<=0n)return[];let d=t.formatAmount(r.toString(),18);return[{module:kt,id:`hookr:bounty:${i.toLowerCase()}`,chainId:c,assets:[{token:{...k,chainId:c},amount:r.toString()}],description:`Hookr claimable keeper bounty (${d} ETH)`}]}catch(u){throw new s(t.plainError(u))}}var N=t=>({tools:[Pt(t),Et(t)],positions:n=>Lt(t,n)}),Ut=N,jt=N,Xt=N;export{kt as a,y as b,gt as c,At as d,wt as e,Ot as f,Bt as g,B as h,Tt as i,Kt as j,Pt as k,Et as l,Lt as m,N as n,Ut as o,jt as p,Xt as q};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as E,o as O}from"./2IRORNOH.js";import{c as Q}from"./MK6L6TGI.js";import{b as K}from"./UCMNB2UP.js";import{a as J}from"./I5CQ64EU.js";import{a as p,i as G}from"./ZUC6ILK2.js";import{a as _}from"./B4MLWDPM.js";import{a as r}from"./NGAI6GTU.js";import{decodeFunctionResult as ie,encodeAbiParameters as P,encodeFunctionData as v,erc20Abi as H,isAddress as te,parseAbi as oe,parseAbiParameters as L,toHex as F,zeroAddress as $}from"viem";var h=G[p].clanker,U=oe(["function deployToken(((address tokenAdmin,string name,string symbol,bytes32 salt,string image,string metadata,string context,uint256 originatingChainId) tokenConfig,(address hook,address pairedToken,int24 tickIfToken0IsClanker,int24 tickSpacing,bytes poolData) poolConfig,(address locker,address[] rewardAdmins,address[] rewardRecipients,uint16[] rewardBps,int24[] tickLower,int24[] tickUpper,uint16[] positionBps,bytes lockerData) lockerConfig,(address mevModule,bytes mevModuleData) mevModuleConfig,(address extension,uint256 msgValue,uint16 extensionBps,bytes extensionData)[] extensionConfigs) config) payable returns (address)","function tokenDeploymentInfo(address) view returns ((address,address,address,address[]))"]),k=oe(["function availableFees(address,address) view returns (uint256)","function claim(address,address)","function collectRewards(address)","function mevModuleEnabled(bytes32) view returns (bool)","function mevModuleOperational(bytes32) returns (bool)"]),C={address:h.paired_weth.address,symbol:"WETH",decimals:18,chainId:p},ae="https://www.clanker.world/api/tokens",X={type:"string",pattern:"^\\d+$"},Y={type:"string",pattern:"^0x[0-9a-fA-F]{40}$"},Z={type:"string",pattern:"^0x[0-9a-fA-F]{64}$"};function S(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function b(e){if(typeof e!="string"||!te(e,{strict:!1})||e.toLowerCase()===$)throw new r("Provide a valid nonzero address.");return e}function ee(e,t){if(typeof e!="string"||!/^0x[0-9a-fA-F]{64}$/.test(e))throw new r(`Provide an explicit bytes32 ${t}.`);return e}function A(e,t,i=!1){if(e===void 0&&!i)return"";if(typeof e!="string"||i&&!e.trim())throw new r(`Provide ${t} as text.`);return e}function R(e,t=256){let i=J(e);if(i>=1n<<BigInt(t))throw new r(`Amount exceeds the uint${t} range.`);return i}function q(e){if(typeof e!="bigint"||e<0n||e>=1n<<256n)throw new r("The contract returned an invalid amount.");return e.toString()}function V(e,t){let i=Object.keys(e).find(m=>!t.includes(m));if(i)throw new r(`Unsupported Clanker input: ${i}.`)}function ne(e,t){return t.changes.map(({token:i,amount:m})=>{let w=m.startsWith("-");return`${w?"-":"+"}${e.formatAmount(w?m.slice(1):m,i.decimals)} ${i.symbol} (${i.address}, chain ${i.chainId})`}).join("; ")}function de(e){return S(e)&&Array.isArray(e.data)&&Number.isSafeInteger(e.total)&&Number(e.total)>=0&&Number.isSafeInteger(e.tokensDeployed)&&Number(e.tokensDeployed)>=0&&(e.cursor===null||typeof e.cursor=="string"||e.cursor===void 0&&e.data.length===0&&e.total===0&&e.tokensDeployed===0)&&e.data.every(t=>S(t)&&typeof t.name=="string"&&typeof t.symbol=="string"&&Number.isSafeInteger(t.chain_id)&&["contract_address","admin","msg_sender","factory_address"].every(i=>typeof t[i]=="string"&&te(t[i],{strict:!1})))}async function ce(e,t={}){V(t,["q","limit","cursor","deployer"]);let i=t.limit??10;if(typeof i!="number"||!Number.isInteger(i)||i<1||i>20)throw new r("Choose an indexer limit from 1 to 20.");let m=new URL(ae);m.searchParams.set("chainId",String(p)),m.searchParams.set("limit",String(i)),t.q!==void 0&&m.searchParams.set("q",A(t.q,"search")),t.cursor!==void 0&&m.searchParams.set("cursor",A(t.cursor,"cursor",!0)),t.deployer!==void 0&&m.searchParams.set("msgSender",b(t.deployer));let w=await Q(e.http,m.toString(),{headers:{"User-Agent":"Oak-Clanker/1.0"}},de);return{tokens:w.data.filter(x=>x.chain_id===p&&x.factory_address.toLowerCase()===h.factory.address.toLowerCase()),total:w.total,cursor:w.cursor||null,tokensDeployed:w.tokensDeployed}}var ue=e=>{let t=()=>e.clientFor(p),i=async n=>{try{return await n()}catch(s){throw new r(e.plainError(s))}},m=(n,s,l,d="0")=>e.unsignedTx({to:n,data:s,value:d,chainId:p,description:l}),w=async(n,s)=>q(await t().readContract({address:h.fee_locker.address,abi:k,functionName:"availableFees",args:[n,s]})),x=async n=>{if(n.toLowerCase()===C.address.toLowerCase())return C;let[s,l]=await Promise.all([t().readContract({address:n,abi:H,functionName:"symbol"}),t().readContract({address:n,abi:H,functionName:"decimals"})]);if(typeof s!="string"||!s.trim()||!Number.isInteger(l)||l<0||l>255)throw new r("The contract returned invalid token metadata.");return{address:n,chainId:p,symbol:s,decimals:l}},j=n=>ce(e,n),se=async(n,s)=>{if(V(n,["name","symbol","salt","image","metadata","context","vanity","initialBuy","minAmountOut","slippageBps"]),n.vanity!==void 0&&n.vanity!==!1)throw new r("Clanker launches use vanity false and an explicit salt.");let l=A(n.name,"token name",!0),d=A(n.symbol,"token symbol",!0),g=ee(n.salt,"salt"),f=R(n.initialBuy??"0"),c=n.slippageBps??E;if(typeof c!="number")throw new r("Slippage must be an integer from 0 to 9999 bps.");O("0",c);let o=n.minAmountOut===void 0?void 0:R(n.minAmountOut,128);if(o!==void 0&&o<=1n)throw new r("Initial-buy minimum must exceed one base unit.");if(!f&&o!==void 0)throw new r("A minimum requires a positive initial buy.");let u={tokenConfig:{tokenAdmin:s,name:l,symbol:d,salt:g,image:A(n.image,"image"),metadata:A(n.metadata,"metadata"),context:n.context===void 0?JSON.stringify({interface:"Oak",platform:"robinhood"}):A(n.context,"context"),originatingChainId:BigInt(p)},poolConfig:{hook:h.fee_static_hook_v2.address,pairedToken:C.address,tickIfToken0IsClanker:-230400,tickSpacing:200,poolData:P(L("(address,bytes,bytes)"),[[$,"0x",P(L("uint24,uint24"),[1e4,1e4])]])},lockerConfig:{locker:h.locker.address,rewardAdmins:[s],rewardRecipients:[s],rewardBps:[1e4],tickLower:[-230400],tickUpper:[-12e4],positionBps:[1e4],lockerData:P(L("(uint8[])"),[[[0]]])},mevModuleConfig:{mevModule:h.mev_module.address,mevModuleData:P(L("(uint24,uint24,uint256)"),[[666777,41673,15n]])},extensionConfigs:[]},y=await t().simulateContract({address:h.factory.address,abi:U,functionName:"deployToken",args:[u],account:s,value:0n,gas:_}),a=b(y.result),D=W=>{let M=f?[{extension:h.devbuy.address,msgValue:f,extensionBps:0,extensionData:P(L("(address,address,uint24,int24,address),uint128,address"),[[$,$,0,0,$],W,s])}]:[];return m(h.factory.address,v({abi:U,functionName:"deployToken",args:[{...u,extensionConfigs:M}]}),`Launch ${l} (${d}); initial buy ${f} native ETH base units.`,f.toString())};if(f&&o===void 0){let M=(await e.preview([D(0n)],s)).changes.filter(T=>T.token.chainId===p&&T.token.address.toLowerCase()===a.toLowerCase()&&T.token.decimals===18).reduce((T,z)=>T+(/^-?\d+$/.test(z.amount)?BigInt(z.amount):(()=>{throw new r("Invalid initial-buy simulation amount.")})()),0n);if(M<=0n)throw new r("Initial-buy simulation returned no token output.");if(o=R(O(M.toString(),c),128),o<=1n)throw new r("Initial-buy output is too small for a protected minimum.")}let I=[D(o??0n)],B=await e.preview(I,s);return{txs:I,preview:B,predictedToken:a,token:{address:a,chainId:p,symbol:d,decimals:18},...o!==void 0?{minAmountOut:o.toString()}:{},summary:`Launch ${d} at ${a} (CREATE2 address predicted from simulation); vanity false; salt ${g}. Supply 100000000000000000000000000000 base units (18 decimals). Static LP fee 1%; protocol adds 20% of LP fees. Reward allocation: ${s} 10000 bps, both assets. Position 10000 bps, ticks -230400 to -120000, spacing 200. Sniper fees 666777 to 41673 over 15 seconds. ${B.summary} ${ne(e,B)}`}},re=async(n,s)=>{if(V(n,["token","poolId"]),n.poolId!==void 0&&n.token===void 0)throw new r("A pool ID requires its Clanker token.");let l=[C],d=[];if(n.token!==void 0){let o=b(n.token);if(o.toLowerCase()===C.address.toLowerCase())throw new r("Provide the launched Clanker token, not WETH.");if(n.poolId!==void 0){let u=ee(n.poolId,"pool ID for fee collection"),y=await t().readContract({address:h.factory.address,abi:U,functionName:"tokenDeploymentInfo",args:[o]});if(!Array.isArray(y)||y.length!==4||typeof y[0]!="string"||y[0].toLowerCase()!==o.toLowerCase())throw new r("The factory did not identify this Clanker token.");let a=b(y[1]),D=b(y[2]),I=await t().readContract({address:a,abi:k,functionName:"mevModuleEnabled",args:[u]});if(typeof I!="boolean")throw new r("The hook returned an invalid MEV guard state.");I&&d.push(m(a,v({abi:k,functionName:"mevModuleOperational",args:[u]}),"Update the Clanker pool MEV guard before collection.")),d.push(m(D,v({abi:k,functionName:"collectRewards",args:[o]}),"Collect pending LP fees into the fee locker."))}l.push(await x(o))}let g;if(d.length){if(await t().getChainId()!==p)throw new r("Fee simulation endpoint is on the wrong chain.");let o=[...d.map(a=>({from:s,gas:F(_),to:a.to,data:a.data,value:F(BigInt(a.value))})),...l.map(a=>({from:s,gas:F(_),to:h.fee_locker.address,data:v({abi:k,functionName:"availableFees",args:[s,a.address]}),value:"0x0"}))],u=await t().request({method:"eth_simulateV1",params:[{blockStateCalls:[{calls:o}],validation:!1,traceTransfers:!1},"latest"]},{retryCount:0});if(!Array.isArray(u)||u.length!==1||!S(u[0])||!Array.isArray(u[0].calls)||u[0].calls.length!==o.length)throw new r("The endpoint returned an unexpected fee simulation response.");let y=u[0].calls;if(!y.every(a=>S(a)&&a.status==="0x1"&&!a.error))throw new r("Clanker fee collection simulation failed.");g=y.slice(d.length).map(a=>{if(!S(a)||typeof a.returnData!="string"||!/^0x[0-9a-fA-F]{64}$/.test(a.returnData))throw new r("The endpoint returned an invalid fee balance.");return q(ie({abi:k,functionName:"availableFees",data:a.returnData}))})}else g=await Promise.all(l.map(o=>w(s,o.address)));let f=l.flatMap((o,u)=>BigInt(g[u])>0n?[{token:o,amount:g[u]}]:[]);if(!f.length)throw new r("No claimable fees for this wallet; pending LP fees may require the MEV window to end.");for(let{token:o}of f)d.push(m(h.fee_locker.address,v({abi:k,functionName:"claim",args:[s,o.address]}),`Claim ${o.symbol} fees to ${s}.`));let c=await e.preview(d,s);return{txs:d,preview:c,fees:f,summary:`Claim fees to ${s}. WETH fees aggregate across all Clanker launches for this recipient. ${c.summary} ${ne(e,c)}`}},N=(n,s,l,d)=>({name:`clanker_${n}`,inputSchema:{type:"object",properties:s,required:l,additionalProperties:!1},execute:(g,f)=>i(async()=>d(g,b(f)))});return{tools:[N("launch",{name:{type:"string"},symbol:{type:"string"},salt:Z,image:{type:"string"},metadata:{type:"string"},context:{type:"string"},vanity:{const:!1},initialBuy:{...X,description:"Native ETH base units, 18 decimals."},minAmountOut:{...X,description:"Minimum new token base units, 18 decimals; derived from simulation when omitted."},slippageBps:{type:"integer",minimum:0,maximum:9999,default:E}},["name","symbol","salt"],se),N("claim",{token:{...Y,description:"Optional launched token to claim already-collected token fees or collect LP fees."},poolId:{...Z,description:"Optional pool ID used with token to sync the MEV guard and collect pending LP fees before claiming."}},[],re),N("browse",{q:{type:"string"},limit:{type:"integer",minimum:1,maximum:20},cursor:{type:"string"},deployer:Y},[],j)],positions:n=>i(async()=>{b(n);let s=new Map,l=new Set,d;do{let c=await j({deployer:n,limit:20,...d?{cursor:d}:{}});for(let o of c.tokens)o.msg_sender.toLowerCase()===n.toLowerCase()&&s.set(o.contract_address.toLowerCase(),o);if(c.cursor&&l.has(c.cursor))throw new r("The Clanker indexer repeated a pagination cursor.");c.cursor&&l.add(c.cursor),d=c.cursor??void 0}while(d);let g=[],f=[C];for(let[c,o]of s){let u=await x(o.contract_address),y=q(await t().readContract({address:u.address,abi:H,functionName:"balanceOf",args:[n]}));g.push({module:"clanker",id:`launch:${c}`,chainId:p,assets:[{token:u,amount:y}],description:`Indexed launch ${o.name}; wallet token balance, not locked LP principal.`}),f.some(a=>a.address.toLowerCase()===u.address.toLowerCase())||f.push(u)}for(let c of f){let o=await w(n,c.address);BigInt(o)>0n&&g.push({module:"clanker",id:`fees:${c.address.toLowerCase()}`,chainId:p,assets:[{token:c,amount:o}],description:"Collected fees across launches for this recipient. Pending LP fees excluded; token-side discovery covers indexed launches by this wallet."})}return g})}},ke=e=>K("clanker",[ue(e)]);export{ce as a,ue as b,ke as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as he,b as Z,g as ee,h as te,i as we,m as F,n as ne,y as oe,z as ke}from"./2IRORNOH.js";import{a as be,b as $}from"./GDP4JSAX.js";import{a as L}from"./A5ITAEUQ.js";import{a as le}from"./I5CQ64EU.js";import{a as w,i as Y}from"./ZUC6ILK2.js";import{a as fe}from"./B4MLWDPM.js";import{a as i}from"./NGAI6GTU.js";import{a as me}from"./JXOEJPJ4.js";import{randomUUID as Se}from"node:crypto";import{encodeAbiParameters as H,encodeFunctionData as se,erc20Abi as ge,getAddress as Pe,parseAbi as R,parseAbiParameters as K,zeroAddress as U}from"viem";var ve=Y[w].pons,N=Y[w].ponsTrade,Ie=R(["function getLaunchedToken(address) view returns ((address token,address curve,address deployer,address creatorFeeRecipient,address pairToken,uint256 graduationThreshold,uint24 poolFee,int24 tickSpacing,uint16 creatorTaxBps,bool buybackEnabled,uint8 phase,uint256 sweptQuote,uint256 sweptTokens,uint256 sweptAt,bool exists))"]),z=R(["function getReserves() view returns (uint256 quoteReserve,uint256 tokenReserve)","function feeBps() view returns (uint256)","function creatorTaxBps() view returns (uint256)","function currentSnipeTaxBps(address) view returns (uint256)","function sellableTokens() view returns (uint256)","function buy(uint256 quoteIn,uint256 minTokensOut,address recipient) payable returns (uint256)","function sell(uint256 tokensIn,uint256 minQuoteOut,address recipient) returns (uint256)"]),Be=R(["function quoteExactInputSingle(((address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks) poolKey,bool zeroForOne,uint128 exactAmount,bytes hookData) params) returns (uint256 amountOut,uint256 gasEstimate)"]),qe=R(["function execute(bytes commands,bytes[] inputs,uint256 deadline) payable"]),Ee=R(["function approve(address token,address spender,uint160 amount,uint48 expiration)"]),Ne=K("((address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks) poolKey,bool zeroForOne,uint128 amountIn,uint128 amountOutMinimum,uint256 minHopPriceX36,bytes hookData)"),M={address:be,chainId:w,decimals:18,symbol:"ETH"},ye="There is no on-chain expiry. The signed transaction is protected by its minimum output.",Oe=`Quote expiry is enforced by Oak before signing only. ${ye}`,x=10000n,re=(1n<<256n)-1n,Te=(1n<<128n)-1n,y=(a,u)=>({token:a,amount:u.toString()}),xe=(a,u)=>(a+u-1n)/u,Ce={type:"object",additionalProperties:!1,required:["token","amountIn"],properties:{token:{type:"string",pattern:"^0x[0-9a-fA-F]{40}$",description:"Pons launch token address on chain 4663."},amountIn:{type:"string",pattern:"^[0-9]+$",description:"Positive base units: native ETH for buy, launch token for sell."},slippageBps:{type:"integer",minimum:0,maximum:9999,default:Z}}};async function Ae(a,u,k,o,A=!1,s=!1,f){if(L(k),Object.keys(u).some(l=>!["token","amountIn","slippageBps"].includes(l)))throw new i("Provide only token, amountIn and optional slippageBps.");if(typeof u.token!="string")throw new i("Provide a launch token address.");L(u.token);let e=Pe(u.token),t=le(u.amountIn);if(t===0n||t>re)throw new i("Trade amount must be positive and within the uint256 range.");let d=u.slippageBps??Z;if(typeof d!="number"||!Number.isInteger(d)||d<0||d>=1e4)throw new i("Slippage must be an integer from 0 to 9999 basis points.");let g=l=>l*(x-BigInt(d))/x,n=a.clientFor(w),c=f===void 0?await n.getBlock():await n.getBlock({blockNumber:f});if(f!==void 0&&c.number!==f)throw new i("Pons quote snapshot is unavailable.");let r=await n.readContract({address:ve.factory.address,abi:Ie,functionName:"getLaunchedToken",args:[e],blockNumber:c.number});if(!r.exists||r.token.toLowerCase()!==e.toLowerCase())throw new i("This address is not a Pons launch token.");if(s&&r.phase!==0)throw new ee("Pons curve quotes are only available before graduation.");if(r.phase===1)throw new i("Pons graduation is pending; the curve is closed and the pool is not ready.");if(r.phase===3)throw new i("This Pons launch was rescued and has no active trade route.");if(r.phase!==0&&r.phase!==2)throw new i("This Pons launch has an unknown trade phase.");if(r.pairToken.toLowerCase()!==U)throw new i("This trade route supports native ETH pairs only.");let[E,X]=await Promise.all([n.readContract({address:e,abi:ge,functionName:"symbol",blockNumber:c.number}),n.readContract({address:e,abi:ge,functionName:"decimals",blockNumber:c.number})]),v={address:e,chainId:w,symbol:me(E),decimals:X},S=o?M:v,O=o?v:M,P=[],j=(l,B,b,T)=>a.unsignedTx({to:l,data:B,value:b.toString(),chainId:w,description:T}),m,p,D,I=t,ie=null,G;if(r.phase===0){let l=h=>n.readContract({address:r.curve,abi:z,functionName:h,blockNumber:c.number}),[[B,b],T,q,ue,_]=await Promise.all([n.readContract({address:r.curve,abi:z,functionName:"getReserves",blockNumber:c.number}),l("feeBps"),l("creatorTaxBps"),o?n.readContract({address:r.curve,abi:z,functionName:"currentSnipeTaxBps",args:[k],blockNumber:c.number}):Promise.resolve(0n),o?l("sellableTokens"):Promise.resolve(0n)]);if(B<=0n||b<=0n||T+q>x-100n)throw new i("Pons curve reserves or fee settings are unavailable.");let ce=x-T-q-100n,J=ue<ce?ue:ce,de=h=>({base:h*T/x,creator:h*q/x,snipe:h*J/x}),pe=h=>{let C=de(h);return h-C.base-C.creator-C.snipe},Q;if(o){if(_<=0n||_>=b)throw new i("The curve has no available sellable tokens.");let h=pe(t);if(m=h*b/(B+h),m>=_){m=_;let C=m*B/(b-m)+1n;I=xe(C*x,x-T-q-J),I>t&&(I=t)}Q=I,p=g(m),D=xe(p*t,I)}else Q=t*B/(b+t),m=pe(Q),p=g(m),P.push(a.approval(e,r.curve,t.toString(),w));let W=de(Q);ie={base:y(M,W.base),creator:y(M,W.creator),snipe:y(M,W.snipe)},G=`Curve fees included: ${T} base, ${q} creator and ${J} opening-tax basis points, each rounded separately.`,P.push(j(r.curve,se({abi:z,functionName:o?"buy":"sell",args:[t,D??p,k]}),o?t:0n,o?"Buy Pons curve tokens with native ETH.":"Sell Pons curve tokens for native ETH."))}else{if(t>Te)throw new i("Trade amount exceeds the router uint128 range.");let l={currency0:U,currency1:e,fee:r.poolFee,tickSpacing:r.tickSpacing,hooks:ve.memeHook.address};if(m=(await n.simulateContract({address:N.quoter.address,abi:Be,functionName:"quoteExactInputSingle",args:[{poolKey:l,zeroForOne:o,exactAmount:t,hookData:"0x"}],account:k,gas:fe,blockNumber:c.number})).result[0],p=g(m),p>Te)throw new i("Minimum output exceeds the router uint128 range.");let b=c.timestamp+300n;if(b>=1n<<48n)throw new i("Permit2 expiry exceeds its timestamp range.");o||(P.push(a.approval(e,N.permit2.address,t.toString(),w)),P.push(j(N.permit2.address,se({abi:Ee,functionName:"approve",args:[e,N.universal_router.address,t,Number(b)]}),0n,"Approve the exact token amount to the Pons router through Permit2 for five minutes.")));let T=[H(Ne,[{poolKey:l,zeroForOne:o,amountIn:t,amountOutMinimum:p,minHopPriceX36:0n,hookData:"0x"}]),H(K("address,uint256"),[o?U:e,t]),H(K("address,uint256"),[o?e:U,p])],q=H(K("bytes,bytes[]"),["0x060c0f",T]);P.push(j(N.universal_router.address,se({abi:qe,functionName:"execute",args:["0x10",[q],b]}),o?t:0n,"Trade through Pons Universal Router v2.1.2.")),G="Quoter output is net of Pons hook fees; no additional fee is subtracted."}if(m<=0n||p<=0n||p>re||(D??p)>re)throw new i("Trade output or minimum is outside the supported positive range.");let ae=A?{changes:[],summary:"Quote only; preview is required before sending."}:await a.preview(P,k),V=t-I;return{txs:P,changes:ae.changes,summary:`${o?"Buy":"Sell"} ${v.symbol} (${v.address}) on chain ${w}. ${G} ${r.phase===0?`${ye} `:""}${V>0n?`Expected native refund: ${a.formatAmount(V.toString(),18)} ETH; minimum output uses the expected spend after refund. `:""}${ae.summary}`,quote:{phase:r.phase,amountIn:y(S,t),amountOut:y(O,m),minAmountOut:y(O,p),minimumKind:"absolute",calldataMinAmountOut:y(O,D??p),expectedSpend:y(S,I),expectedRefund:y(S,V),fees:ie,blockNumber:c.number.toString(),blockTimestamp:c.timestamp.toString()}}}function Xe(a){return $e(a,!0)}function $e(a,u=!1,k){let o=new Map,A=s=>{if(BigInt(F())>=BigInt(s.expiresAt))throw new te};return{name:"pons",async quote(s,f){s={...s,from:$(s.from),to:$(s.to)};let e=ne(s.from);if(e===ne(s.to))throw new ee("Pons curve quotes require native ETH and a launch token.");let t=F(),d=await Ae(a,{token:e?s.to:s.from,amountIn:s.amountIn,slippageBps:s.slippageBps},f,e,!0,u,k),g=d.txs.at(-1),n=d.quote,c=String(BigInt(k===void 0?t:n.blockTimestamp)+BigInt(he)),r=n.minAmountOut.amount,E=n.fees,X=E?`Pons curve fees included in net output: ${E.base.amount} base, ${E.creator.amount} creator and ${E.snipe.amount} opening tax, in native ETH base units (18 decimals). Oak swap fee: 0 (venue fee is never Oak income). ${Oe}`:"Quoter output is net of Pons hook fees; no additional fee is subtracted. Oak swap fee: 0.",v=ke({...s,quoteId:`pons:${Se()}`,provider:"pons",wallet:f,chainId:w,router:g.to,spender:n.phase===0?g.to:N.permit2.address,expiresAt:c,data:g.data,value:g.value,amountOut:n.amountOut.amount,minAmountOut:r,blockNumber:n.blockNumber,...n.phase===0?{ponsCurveToken:e?s.to:s.from,calldataMinAmountOut:n.calldataMinAmountOut.amount}:{ponsPoolToken:e?s.to:s.from},expectedSpend:n.expectedSpend.amount,expectedRefund:n.expectedRefund.amount,feeDisclosure:X,oakFee:"0"});oe(g,v),A(v);for(let[S,O]of o)BigInt(F())>=BigInt(O.quote.expiresAt)&&o.delete(S);for(;o.size>=we;)o.delete(o.keys().next().value);return o.set(v.quoteId,{quote:{...v},txs:d.txs.map(S=>({...S})),summary:d.summary}),v},async build(s,f){let e=o.get(s);if(!e)throw new te;if(A(e.quote),L(f),f.toLowerCase()!==e.quote.wallet.toLowerCase())throw new i("Quote was issued for a different wallet.");let t=e.txs.map(n=>({...n}));oe(t.at(-1),e.quote);let d=await a.preview(t,f);if(A(e.quote),d.changes.filter(n=>$(n.token.address).toLowerCase()===$(e.quote.to).toLowerCase()).reduce((n,c)=>n+BigInt(c.amount),0n)<BigInt(e.quote.minAmountOut))throw new i("Preview retained output is below the accepted minimum.");return{txs:t,summary:`${e.summary} ${d.summary} ${e.quote.feeDisclosure}`}}}}var Me=a=>({tools:[!0,!1].map(u=>({name:u?"pons_buy":"pons_sell",inputSchema:Ce,async execute(k,o){try{return await Ae(a,k,o,u)}catch(A){throw new i(a.plainError(A))}}}))}),je=Me;export{Xe as a,$e as b,Me as c,je as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as s}from"./MK6L6TGI.js";import{a as n}from"./5HCXZWUH.js";var i=new WeakMap;async function h(a,r,p){let e=new URL(r);if(!(e.origin==="https://aggregator-api.kyberswap.com"&&e.pathname==="/robinhood/api/v1/routes")&&!(e.origin==="https://api.velora.xyz"&&e.pathname==="/prices"))throw new Error("Only supported public price routes may be shared.");let t=i.get(a);t||(t=new n(3e3),i.set(a,t));let o=await t.read(r,()=>s(a,r,{method:"GET"},p));return{value:o.value,expiresAt:Math.floor(o.started/1e3)+60}}export{h as a};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{b as ge,o as be}from"./2IRORNOH.js";import{a as fe}from"./GDP4JSAX.js";import{c as he}from"./MK6L6TGI.js";import{a as pe}from"./A5ITAEUQ.js";import{a as me}from"./I5CQ64EU.js";import{a as l,i as re,l as u}from"./ZUC6ILK2.js";import{a}from"./NGAI6GTU.js";import{a as I}from"./JXOEJPJ4.js";import{decodeEventLog as Re,encodeAbiParameters as Ee,encodeFunctionData as j,erc20Abi as V,getAddress as Ae,keccak256 as _e,parseAbi as Q,parseAbiItem as Le,toHex as Oe,zeroAddress as N}from"viem";var ce=re[l].pons.launchAndBuyRouter.address,ye=re[l].ponsTrade.state_view.address,X={address:N,chainId:l,symbol:"ETH",decimals:18},f=Q(["function getLaunchedToken(address) view returns ((address token,address curve,address deployer,address creatorFeeRecipient,address pairToken,uint256 graduationThreshold,uint24 poolFee,int24 tickSpacing,uint16 creatorTaxBps,bool buybackEnabled,uint8 phase,uint256 sweptQuote,uint256 sweptTokens,uint256 sweptAt,bool exists))","function previewLaunchEconomics(uint256,address) view returns (bytes32)","function launchFee() view returns (uint256)","function canLaunch(address) view returns (bool)","function launchConfigCount() view returns (uint256)","function approvedPairTokens(address) view returns (bool)","function pairTokenEconomics(address) view returns (uint256 phantomQuote,uint256 graduationThreshold,uint8 decimals)","function transferCreatorFeeRecipient(address token,address newRecipient)","function setBuybackEnabled(address token,bool enabled)","function getLaunchConfig(uint256) view returns ((uint256 supply,uint256 curveFeeBps,uint256 phantomQuote,uint256 graduationThreshold,uint24 poolFee,int24 tickSpacing,bool enabled))","function maxCreatorTaxBps() view returns (uint256)","function getLaunchFeePolicy(address) view returns ((address,uint16,uint16,uint16,uint16))","function memeHook() view returns (address)","function createGraduatedPool(address)"]),z=Q(["function factory() view returns (address)","function feeEscrow() view returns (address)","function getReserves() view returns (uint256,uint256)","function realQuoteReserve() view returns (uint256)","function feeBps() view returns (uint256)"]),Ue=Q(["function launchFactory() view returns (address)"]),qe=Q(["function currentFeePolicy() view returns ((address,uint16,uint16,uint16,uint16))"]),we=Q(["function getSlot0(bytes32) view returns (uint160,int24,uint24,uint24)","function getLiquidity(bytes32) view returns (uint128)"]),ae=Q(["function launchToken((string,string,string,string,(string,string,string,string,string),address,uint16,bool,bytes32,bytes32),uint256,address) payable","function launchToken((string,string,string,string,(string,string,string,string,string),address,uint16,bool,bytes32,bytes32),uint256,address,address[]) payable","function launchAndBuy((string,string,string,string,(string,string,string,string,string),address,uint16,bool,bytes32,bytes32),uint256,address,uint256,uint256,address,address[]) payable"]),xe=Le("event TokenLaunched(address indexed token,address indexed curve,address indexed deployer,address pairToken,uint256 launchConfigId,uint256 graduationThreshold)"),He=["curve","pending pool creation","graduated","rescued"],Me=10000n,ke=2000n,M={type:"string",pattern:"^[0-9]+$"},_={type:"string",pattern:"^0x[0-9a-fA-F]{40}$"};function F(n){if(typeof n!="string")throw new a("Provide a token or wallet address.");return pe(n),Ae(n)}function p(n,e){return n.toLowerCase()===e.toLowerCase()}function D(n){if(typeof n!="string")throw new a("Amounts must be integer strings in base units.");let e=me(n);if(e>=1n<<256n)throw new a("Amount exceeds the uint256 range.");return e}function Te(n,e){if(typeof n!="string"||!n.trim())throw new a(`Provide ${e}.`);return n}function L(n,e){return{token:n,amount:e.toString()}}function Be(n,e,t,i,o){let r=n*BigInt(t)/10000n,s=i?(n-r)*BigInt(o)/10000n:0n;return{baseBps:n.toString(),creatorTaxBps:e.toString(),totalBps:(n+BigInt(e)).toString(),protocolBps:r.toString(),creatorBps:(n-r-s+BigInt(e)).toString(),buybackBps:s.toString(),buybackEnabled:i}}async function J(n,e,t){if(p(e,N))return X;let i=n.clientFor(l),[o,r]=await Promise.all([i.readContract({address:e,abi:V,functionName:"symbol",blockNumber:t}),i.readContract({address:e,abi:V,functionName:"decimals",blockNumber:t})]);return{address:Ae(e),chainId:l,symbol:I(o),decimals:r}}async function Z(n,e,t){let i=n.clientFor(l),[o,r]=await Promise.all([i.readContract({address:e,abi:Ue,functionName:"launchFactory",blockNumber:t}),i.readContract({address:u,abi:f,functionName:"getLaunchedToken",args:[e],blockNumber:t})]);if(!p(o,u)||!r.exists||!p(r.token,e))throw new a("This token is not a launch from the supported Pons factory.");if(r.phase>3)throw new a("Pons returned an unknown launch phase.");return r}async function Fe(n,e,t){let i=n.clientFor(l),o=await Z(n,e,t),[r,s,c,d,h,T,b]=await Promise.all([J(n,e,t),J(n,o.pairToken,t),i.readContract({address:e,abi:V,functionName:"totalSupply",blockNumber:t}),i.readContract({address:o.curve,abi:z,functionName:"factory",blockNumber:t}),i.readContract({address:o.curve,abi:z,functionName:"feeEscrow",blockNumber:t}),i.readContract({address:u,abi:f,functionName:"memeHook",blockNumber:t}),i.readContract({address:u,abi:f,functionName:"getLaunchFeePolicy",args:[e],blockNumber:t})]);if(!p(d,u))throw new a("The Pons curve does not belong to the supported factory.");let m=BigInt(b[3]),C=o.sweptQuote,g=null,S=null,v=null;if(o.phase===0){let[$,w,A]=await Promise.all([i.readContract({address:o.curve,abi:z,functionName:"getReserves",blockNumber:t}),i.readContract({address:o.curve,abi:z,functionName:"realQuoteReserve",blockNumber:t}),i.readContract({address:o.curve,abi:z,functionName:"feeBps",blockNumber:t})]);if(C=w,m=A,o.graduationThreshold<=0n||$[1]<=0n)throw new a("Pons returned unavailable curve reserves or threshold.");g=w*1000000n/o.graduationThreshold,g>1000000n&&(g=1000000n),S=L(s,$[0]*10n**BigInt(r.decimals)/$[1])}else if(o.phase===2){let $=[e,o.pairToken].sort((H,x)=>BigInt(H)<BigInt(x)?-1:1),w=_e(Ee([{type:"address"},{type:"address"},{type:"uint24"},{type:"int24"},{type:"address"}],[$[0],$[1],o.poolFee,o.tickSpacing,T])),[A,R]=await Promise.all([i.readContract({address:ye,abi:we,functionName:"getSlot0",args:[w],blockNumber:t}),i.readContract({address:ye,abi:we,functionName:"getLiquidity",args:[w],blockNumber:t})]);if(A[0]===0n)throw new a("The graduated Pons pool price is unavailable.");let E=A[0]**2n,q=10n**BigInt(r.decimals);S=L(s,p($[0],e)?E*q/(1n<<192n):(1n<<192n)*q/E),v={id:w,sqrtPriceX96:A[0].toString(),tick:A[1],protocolFee:A[2],lpFee:A[3],liquidity:R.toString()},g=1000000n}else o.phase===1&&(g=1000000n);return{token:r,pairToken:s,blockNumber:t.toString(),factory:u,curve:o.curve,hook:T,escrow:h,creator:o.deployer,creatorFeeRecipient:o.creatorFeeRecipient,phase:o.phase,phaseName:He[o.phase],tradable:o.phase===0||o.phase===2,graduationThreshold:L(s,o.graduationThreshold),raised:L(s,C),sweptTokens:L(r,o.sweptTokens),sweptAt:o.sweptAt.toString(),progressPpm:g?.toString()??null,totalSupply:L(r,c),fees:Be(m,o.creatorTaxBps,b[1],o.buybackEnabled,b[2]),pool:v,spot:S,priceKind:"Marginal spot per whole token; not an execution quote or time average."}}async function je(n,e){try{return await Fe(n,F(e),await n.clientFor(l).getBlockNumber({cacheTime:0}))}catch(t){throw new a(n.plainError(t))}}async function ve(n,e={}){try{let t=n.clientFor(l),i=await t.getBlockNumber({cacheTime:0}),o=e.toBlock===void 0?i:D(e.toBlock),r=e.fromBlock===void 0?o>=ke?o-ke+1n:0n:D(e.fromBlock),s=e.limit??20;if(typeof s!="number"||!Number.isInteger(s)||s<1||s>100)throw new a("Choose a launch limit from 1 to 100.");if(r>o||o>i||o-r+1n>Me)throw new a("Choose an ordered range of at most 10000 mined blocks.");let c=await t.getLogs({address:u,event:xe,fromBlock:r,toBlock:o,strict:!0}),d=new Map;for(let b of c.filter(m=>p(m.address,u)&&!m.removed&&m.blockNumber!==null&&m.blockNumber>=r&&m.blockNumber<=o).sort((m,C)=>m.blockNumber===C.blockNumber?(C.logIndex??0)-(m.logIndex??0):m.blockNumber>C.blockNumber?-1:1)){let m=F(b.args.token);d.set(m.toLowerCase(),m)}let h=[...d.values()];return{items:await Promise.all(h.slice(0,s).map(b=>Fe(n,b,i))),fromBlock:r.toString(),toBlock:o.toString(),statusBlock:i.toString(),truncated:h.length>s,coverage:"Only launches in the requested block range; this is not a complete launch history."}}catch(t){throw new a(n.plainError(t))}}async function Y(n,e,t,i){let o=(Array.isArray(e)?e:[e]).map(n.unsignedTx),r=await n.preview(o,t),s=r.changes.map(c=>{let d=c.amount.startsWith("-");return`${d?"-":""}${n.formatAmount(d?c.amount.slice(1):c.amount,c.token.decimals)} ${c.token.symbol} (${c.token.chainId}:${c.token.address})`});return{txs:o,preview:r,summary:`${i} ${r.summary}${s.length?` Changes: ${s.join(", ")}.`:""}`}}var K=["twitter","telegram","discord","website","farcaster"],Pe=5242880,Ce="https://ponsfamily.com/api/ipfs/image";function se(n,e){if(n==="")return"";if(typeof n!="string"||n.length>2048)throw new a(`Provide a public HTTPS or IPFS ${e}.`);try{let t=new URL(n);if(!["https:","ipfs:"].includes(t.protocol)||!t.hostname||t.username||t.password)throw new Error}catch{throw new a(`Provide a public HTTPS or IPFS ${e}.`)}return n}function De(n){if(n===void 0)return;if(!n||typeof n!="object"||Array.isArray(n))throw new a("Provide image mimeType and base64.");let e=n,t={"image/png":"png","image/jpeg":"jpg","image/webp":"webp"};if(Object.keys(e).some(s=>!["mimeType","base64"].includes(s))||typeof e.mimeType!="string"||!t[e.mimeType])throw new a("Use a PNG, JPEG, or WebP image.");if(typeof e.base64!="string"||!e.base64.length||e.base64.length>4*Math.ceil(Pe/3)||e.base64.length%4!==0||!/^[A-Za-z0-9+/]*={0,2}$/.test(e.base64))throw new a("Provide a base64 image of 1 to 5242880 bytes.");let i=atob(e.base64);if(!i.length||i.length>Pe||btoa(i)!==e.base64)throw new a("Provide a base64 image of 1 to 5242880 bytes.");let o=Uint8Array.from(i,s=>s.charCodeAt(0));if(!(e.mimeType==="image/png"?i.startsWith(`\x89PNG\r
|
|
2
|
-
|
|
3
|
-
`):e.mimeType==="image/jpeg"?o[0]===255&&o[1]===216&&o[2]===255:i.startsWith("RIFF")&&i.slice(8,12)==="WEBP"))throw new a("Image bytes do not match the declared PNG, JPEG, or WebP type.");return{bytes:o,mimeType:e.mimeType,extension:t[e.mimeType]}}async function Qe(n,e,t){if(typeof e!="string"||!/^0x[0-9a-fA-F]{64}$/.test(e))throw new a("Provide a mined Pons launch transaction hash.");let o=await n.clientFor(l).getTransactionReceipt({hash:e});if(o.status!=="success"||!p(o.from,t))throw new a("The Pons launch must be a successful transaction from this wallet.");let r=o.logs.flatMap(d=>{if(!p(d.address,u))return[];try{return[Re({abi:[xe],data:d.data,topics:d.topics,strict:!0}).args]}catch{return[]}}).filter(d=>p(d.deployer,t));if(r.length!==1)throw new a("The receipt does not contain exactly one Pons launch for this wallet.");let s=r[0].token,c=await Z(n,s,o.blockNumber);return{transactionHash:e,token:await J(n,s,o.blockNumber),curve:c.curve,creator:c.deployer,creatorFeeRecipient:c.creatorFeeRecipient,chainId:l,summary:`Pons launch mined: ${s}. Creator fee recipient ${c.creatorFeeRecipient}.`}}async function We(n,e,t){let i=Te(e.name,"a coin name"),o=Te(e.symbol,"a coin symbol");if(e.creatorFeeRecipient===void 0)throw new a("Provide an explicit nonzero creatorFeeRecipient; it is never defaulted to the agent wallet.");let r=F(e.creatorFeeRecipient);if(p(r,N))throw new a("Provide a nonzero creator fee recipient.");let s=p(r,t)?"":`Warning: creator fees go to ${r}, not the signing wallet ${t}; this wallet cannot claim those fees.`,c=F(e.pairToken??N),d=D(e.launchConfigId??"0"),h=D(e.initialBuy??"0"),T=F(e.buyRecipient??t);if(p(T,N))throw new a("Provide a nonzero initial buy recipient.");if(h===0n&&e.buyRecipient!==void 0)throw new a("A buy recipient requires an initial buy.");let b=D(e.minTokensOut??"0");if(h>0n&&e.minTokensOut!==void 0&&b<=1n)throw new a("Initial buy minimum must exceed one token base unit.");if(h>0n&&!p(T,t)&&e.minTokensOut===void 0)throw new a("Provide minTokensOut for an initial buy sent to another wallet.");if(h===0n&&b!==0n)throw new a("A launch without an initial buy must have a zero token minimum.");let m=e.creatorTaxBps??100;if(typeof m!="number"||!Number.isInteger(m)||m<0||m>65535)throw new a("Creator tax must be an integer number of basis points.");let C=e.buybackEnabled??!1;if(typeof C!="boolean")throw new a("Buyback enabled must be true or false.");let g=e.metadata??["",""],S=e.links??["","","","",""];if(!Array.isArray(g)||g.length!==2||!g.every(y=>typeof y=="string")||!Array.isArray(S)||S.length!==5||!S.every(y=>typeof y=="string"))throw new a("Provide two metadata strings and five link strings in ABI order.");if(e.metadata!==void 0&&(e.logo!==void 0||e.description!==void 0||e.image!==void 0))throw new a("Use named logo, description and image inputs or legacy metadata, not both.");if(e.links!==void 0&&e.socials!==void 0)throw new a("Use named socials or legacy links, not both.");let v=se(e.logo??g[0],"coin image URI"),$=e.description??g[1];if(typeof $!="string")throw new a("Provide a coin description string.");let w=e.socials;if(w!==void 0&&(!w||typeof w!="object"||Array.isArray(w)||Object.keys(w).some(y=>!K.includes(y))))throw new a("Provide twitter, telegram, discord, website and farcaster social links.");let A=K.map((y,k)=>se(w===void 0?S[k]:w[y]??"",`${y} link`)),R=De(e.image);if(R&&v)throw new a("Provide an image upload or an existing logo URI, not both.");let E=e.snipeTaxExemptions??[];if(!Array.isArray(E)||E.length>32)throw new a("Provide at most 32 snipe tax exemption addresses.");let q=E.map(F),H=e.salt??Oe(crypto.getRandomValues(new Uint8Array(32)));if(typeof H!="string"||!/^0x[0-9a-fA-F]{64}$/.test(H))throw new a("Salt must be 32 hex-encoded bytes.");let x=n.clientFor(l),B=await x.getBlockNumber({cacheTime:0}),[ue,Ie]=await Promise.all([x.readContract({address:u,abi:f,functionName:"canLaunch",args:[t],blockNumber:B}),x.readContract({address:u,abi:f,functionName:"launchConfigCount",blockNumber:B})]);if(!ue)throw new a("This wallet cannot launch on Pons. Ask Pons for launch access and retry when canLaunch is true.");if(d>=Ie)throw new a("Choose an existing Pons launchConfigId using pons_launch_options.");let[ee,W,Ne,Se]=await Promise.all([x.readContract({address:u,abi:f,functionName:"launchFee",blockNumber:B}),x.readContract({address:u,abi:f,functionName:"getLaunchConfig",args:[d],blockNumber:B}),x.readContract({address:u,abi:f,functionName:"maxCreatorTaxBps",blockNumber:B}),x.readContract({address:u,abi:f,functionName:"memeHook",blockNumber:B})]);if(!W.enabled)throw new a("This Pons launch configuration is disabled. Choose an enabled launchConfigId.");let O=X,de=W.phantomQuote,le=W.graduationThreshold;if(!p(c,N)){let[y,k]=await Promise.all([x.readContract({address:u,abi:f,functionName:"approvedPairTokens",args:[c],blockNumber:B}),x.readContract({address:u,abi:f,functionName:"pairTokenEconomics",args:[c],blockNumber:B})]);if(!y||k[0]<=0n||k[1]<=0n)throw new a("This pair token is not approved with usable Pons economics. Choose a supported pair.");if(O=await J(n,c,B),k[2]!==O.decimals)throw new a("Pair token decimals disagree with Pons. Ask Pons to refresh pair economics.");[de,le]=k}if(BigInt(m)>Ne)throw new a("Creator tax exceeds the current Pons maximum.");let[ne,te]=await Promise.all([x.readContract({address:u,abi:f,functionName:"previewLaunchEconomics",args:[d,c],blockNumber:B}),x.readContract({address:Se,abi:qe,functionName:"currentFeePolicy",blockNumber:B})]);if(e.expectedEconomics!==void 0&&e.expectedEconomics!==ne)throw new a("Pons launch economics changed. Refresh the launch preview.");let G=Be(W.curveFeeBps,m,te[1],C,te[2]),oe="";if(R){let y=new FormData;y.append("image",new Blob([R.bytes],{type:R.mimeType}),`coin.${R.extension}`);let k=await he(n.http,Ce,{method:"POST",body:y,redirect:"error"},P=>!!P&&typeof P=="object"&&typeof P.uri=="string");if(v=se(k.uri,"uploaded coin image URI"),!v)throw new a("Pons returned an empty image URI. Retry with a public image URI.");oe=`Image (${R.bytes.length} bytes, ${R.mimeType}) uploaded via multipart POST to ${Ce}; URI ${I(v)}. This off-chain upload persists even if launch is cancelled or fails; Pons retention/deletion is unknown.`}let ie=y=>{let k=[i,o,v,$,A,r,m,C,ne,H],P={to:h===0n?u:ce,chainId:l,value:(ee+(p(c,N)?h:0n)).toString(),data:h===0n?q.length?j({abi:ae,functionName:"launchToken",args:[k,d,c,q]}):j({abi:ae,functionName:"launchToken",args:[k,d,c]}):j({abi:ae,functionName:"launchAndBuy",args:[k,d,c,h,y,T,q]}),description:`Launch ${I(i)} through the Pons ${h===0n?"factory":"router"} from ${t}; creator fees to ${r}. ${s} ${oe}`.trim()};return h>0n&&!p(c,N)?[n.approval(c,ce,h.toString(),l),P]:[P]};if(h>0n&&e.minTokensOut===void 0){let k=(await n.preview(ie(0n).map(n.unsignedTx),t)).changes.filter(P=>P.token.chainId===l&&!p(P.token.address,N)&&!p(P.token.address,fe)&&!p(P.token.address,c)&&P.token.decimals===18&&/^\d+$/.test(P.amount)&&BigInt(P.amount)>0n);if(k.length!==1)throw new a("Pons launch preview did not identify a unique initial buy token output.");if(b=BigInt(be(k[0].amount,ge)),b<=1n)throw new a("Initial buy minimum must exceed one token base unit.")}let U=await Y(n,ie(b),t,`Unsigned Pons launch from ${t}: ${I(i)} (${I(o)}), image ${v?I(v):"none"}, description ${I($)}, links ${JSON.stringify(Object.fromEntries(K.map((y,k)=>[y,I(A[k])])))}. canLaunch=true at block ${B}; config ${d}, supply ${W.supply}, phantom quote ${de}, graduation threshold ${le} pair base units. Pair ${O.symbol} (${l}:${O.address}, ${O.decimals} decimals). Initial buy ${n.formatAmount(h.toString(),O.decimals)} ${O.symbol} to ${T}; minimum ${b} token base units (18 decimals). Launch fee ${n.formatAmount(ee.toString(),18)} ETH plus gas; exact transaction value ${ie(b).at(-1).value} wei. Curve fees ${G.totalBps} bps total, ${G.protocolBps} bps protocol, ${G.creatorBps} bps creator, ${G.buybackBps} bps buyback; creator tax ${m} bps, buybacks ${C?"on":"off"}, graduated hook fee ${te[3]} bps plus creator tax. Creator fee recipient ${r}. Extra opening-tax exemptions ${JSON.stringify(q)}. Name, metadata, pair, tax and launch economics are fixed after launch. ${oe}`);return s&&(U.preview.summary.includes(s)||(U.preview={...U.preview,summary:`${s} ${U.preview.summary}`}),U.summary.includes(s)||(U.summary=`${s} ${U.summary}`)),{...U,creatorFeeWarning:s||void 0,preview:{...U.preview,warnings:s?[s]:[]},canLaunch:ue,blockNumber:B.toString(),launchConfigId:d.toString(),pairToken:O,salt:H,logo:v&&I(v),economics:ne,launchFee:L(X,ee),initialBuy:L(O,h),minimum:{amount:b.toString(),decimals:18,token:{chainId:l,address:null,name:I(i),symbol:I(o)},addressStatus:"Read the mined token address with pons_launch transactionHash; the local bridge does this automatically."},fees:G}}async function Ge(n,e,t){let i=n.clientFor(l),o=await i.getBlockNumber({cacheTime:0}),r=F(e.pairToken??N),[s,c,d,h]=await Promise.all([i.readContract({address:u,abi:f,functionName:"canLaunch",args:[t],blockNumber:o}),i.readContract({address:u,abi:f,functionName:"launchConfigCount",blockNumber:o}),i.readContract({address:u,abi:f,functionName:"launchFee",blockNumber:o}),i.readContract({address:u,abi:f,functionName:"maxCreatorTaxBps",blockNumber:o})]),T=D(e.offset??"0"),b=await Promise.all(Array.from({length:Number(c>T?c-T>100n?100n:c-T:0n)},async(v,$)=>{let w=T+BigInt($),A=await i.readContract({address:u,abi:f,functionName:"getLaunchConfig",args:[w],blockNumber:o});return{id:w.toString(),...Object.fromEntries(Object.entries(A).map(([R,E])=>[R,typeof E=="bigint"?E.toString():E]))}})),m=p(r,N),[C,g,S]=await Promise.all([m?!0:i.readContract({address:u,abi:f,functionName:"approvedPairTokens",args:[r],blockNumber:o}),m?void 0:i.readContract({address:u,abi:f,functionName:"pairTokenEconomics",args:[r],blockNumber:o}),J(n,r,o)]);return{chainId:l,factory:u,router:ce,blockNumber:o.toString(),canLaunch:s,launchFee:L(X,d),maxCreatorTaxBps:h.toString(),configs:b,configCount:c.toString(),nextOffset:T+BigInt(b.length)<c?(T+BigInt(b.length)).toString():null,pairToken:S,pairApproved:C&&(!g||g[0]>0n&&g[1]>0n&&g[2]===S.decimals),pairEconomics:g?{phantomQuote:g[0].toString(),graduationThreshold:g[1].toString(),decimals:g[2]}:null,pairDiscovery:"Native ETH or any approved ERC-20 address with usable pairTokenEconomics; query each candidate address. The factory has no pair enumeration read."}}async function $e(n,e,t,i){let o=F(e.token),r=await Z(n,o,await n.clientFor(l).getBlockNumber({cacheTime:0}));if(!p(r.creatorFeeRecipient,t))throw new a(`Only the current creator fee recipient ${r.creatorFeeRecipient} can change this setting. Use that wallet.`);if(i){let s=F(e.creatorFeeRecipient);if(p(s,N))throw new a("Provide a nonzero creator fee recipient.");return Y(n,{to:u,chainId:l,value:"0",data:j({abi:f,functionName:"transferCreatorFeeRecipient",args:[o,s]}),description:`Transfer future creator fees and the buyback vest beneficiary for ${o} to ${s}.`},t,`Unsigned Pons fee recipient transfer to ${s}; previously credited fees stay with ${t}. This wallet loses future fee controls. Cost: gas only.`)}if(typeof e.enabled!="boolean")throw new a("Buyback enabled must be true or false.");return Y(n,{to:u,chainId:l,value:"0",data:j({abi:f,functionName:"setBuybackEnabled",args:[o,e.enabled]}),description:`Turn Pons buybacks ${e.enabled?"on":"off"} for ${o}.`},t,`Unsigned Pons buyback change: ${e.enabled?"on; funded from the creator fee share, tokens vest over five years":"off; existing vest stays locked on its schedule"}. Cost: gas only.`)}var ze=n=>{function e(t,i,o,r){return{name:t,inputSchema:{type:"object",properties:i,required:o,additionalProperties:!1,...t==="pons_launch"?{anyOf:[{required:["transactionHash"]},{required:["name","symbol","creatorFeeRecipient"]}]}:{}},execute:async(s,c)=>{try{F(c);for(let d of Object.keys(s))if(!(d in i))throw new a(`Unknown ${t} input: ${d}.`);return await r(s,c)}catch(d){throw new a(n.plainError(d))}}}}return{tools:[e("pons_browse",{fromBlock:M,toBlock:M,limit:{type:"integer",minimum:1,maximum:100}},[],t=>ve(n,t)),e("pons_status",{token:_},["token"],t=>je(n,F(t.token))),e("pons_launch_options",{pairToken:_,offset:M},[],(t,i)=>Ge(n,t,i)),e("pons_transfer_creator_fee_recipient",{token:_,creatorFeeRecipient:_},["token","creatorFeeRecipient"],(t,i)=>$e(n,t,i,!0)),e("pons_set_buyback",{token:_,enabled:{type:"boolean"}},["token","enabled"],(t,i)=>$e(n,t,i,!1)),e("pons_launch",{name:{type:"string",minLength:1},symbol:{type:"string",minLength:1},creatorFeeRecipient:_,pairToken:_,launchConfigId:M,buyRecipient:_,logo:{type:"string"},description:{type:"string"},socials:{type:"object",properties:Object.fromEntries(K.map(t=>[t,{type:"string"}])),additionalProperties:!1},image:{type:"object",properties:{mimeType:{type:"string",enum:["image/png","image/jpeg","image/webp"]},base64:{type:"string",minLength:1,maxLength:6990508}},required:["mimeType","base64"],additionalProperties:!1},snipeTaxExemptions:{type:"array",items:_,maxItems:32},transactionHash:{type:"string",pattern:"^0x[0-9a-fA-F]{64}$"},initialBuy:M,minTokensOut:M,creatorTaxBps:{type:"integer",minimum:0,maximum:65535},buybackEnabled:{type:"boolean"},expectedEconomics:{type:"string",pattern:"^0x[0-9a-fA-F]{64}$"},salt:{type:"string",pattern:"^0x[0-9a-fA-F]{64}$"},metadata:{type:"array",items:{type:"string"},minItems:2,maxItems:2},links:{type:"array",items:{type:"string"},minItems:5,maxItems:5}},[],(t,i)=>t.transactionHash===void 0?We(n,t,i):Qe(n,t.transactionHash,i)),e("pons_graduate",{token:_},["token"],async(t,i)=>{let o=F(t.token);if((await Z(n,o,await n.clientFor(l).getBlockNumber({cacheTime:0}))).phase!==1)throw new a("Graduation requires a launch pending pool creation (phase 1).");return Y(n,{to:u,chainId:l,value:"0",data:j({abi:f,functionName:"createGraduatedPool",args:[o]}),description:`Create the graduated Pons pool for ${o}.`},i,"Unsigned permissionless graduation retry; recheck status after the transaction is mined.")})],positions:async t=>{try{F(t);let i=await ve(n,{limit:100}),o=i.items.filter(r=>p(r.creator,t)||p(r.creatorFeeRecipient,t));return await Promise.all(o.map(async r=>{let s=await n.clientFor(l).readContract({address:r.token.address,abi:V,functionName:"balanceOf",args:[t],blockNumber:BigInt(r.blockNumber)});return{module:"pons",id:`${l}:${r.token.address}`,chainId:l,assets:[L(r.token,s)],description:`Pons ${r.phaseName}; creator fee recipient ${r.creatorFeeRecipient}. Discovery covers recent launches only (${i.fromBlock}-${i.toBlock}${i.truncated?", truncated":""}).`}}))}catch(i){throw new a(n.plainError(i))}}}},on=ze;export{je as a,ve as b,ze as c,on as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as $}from"./UCMNB2UP.js";import{a as y}from"./A5ITAEUQ.js";import{t as C}from"./ZUC6ILK2.js";import{a as d}from"./NGAI6GTU.js";import{a as S}from"./JXOEJPJ4.js";import{Buffer as H}from"node:buffer";import{decodeEventLog as B,encodeFunctionData as U,parseAbi as V,parseAbiItem as W,toEventSelector as D}from"viem";var m=V(["function register(string agentURI) returns (uint256 agentId)","function setMetadata(uint256 agentId,string metadataKey,bytes metadataValue)","event MetadataSet(uint256 indexed agentId,string indexed indexedMetadataKey,string metadataKey,bytes metadataValue)","function setAgentURI(uint256 agentId,string newURI)","function balanceOf(address owner) view returns (uint256)","function ownerOf(uint256 agentId) view returns (address)","function tokenURI(uint256 agentId) view returns (string)","function getApproved(uint256 agentId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)","function getAgentWallet(uint256 agentId) view returns (address)","function getMetadata(uint256 agentId,string metadataKey) view returns (bytes)","event Registered(uint256 indexed agentId,string agentURI,address indexed owner)","event URIUpdated(uint256 indexed agentId,string newURI,address indexed updatedBy)"]),oe={register:"erc8004_register"};function h(e){let{chainId:t,identityRegistry:n}=C[e.network??"mainnet"];return{chainId:t,registry:n,registryId:`eip155:${t}:${n}`}}var j="https://eips.ethereum.org/EIPS/eip-8004#registration-v1",v="oak.registrar",M="0x6f616b",_="Profile contents and oak.registrar are mutable, self-asserted metadata, not registry-validated claims or proof of provenance.",N={type:"string",pattern:"^[0-9]+$",description:"Agent ID as a decimal uint256 integer string."},J={type:"object",required:["type","name","description","image","services","x402Support","active","registrations"],properties:{type:{const:j},name:{type:"string",minLength:1},description:{type:"string"},image:{type:"string"},services:{type:"array",items:{type:"object",required:["name","endpoint"]}},x402Support:{type:"boolean"},active:{type:"boolean"},registrations:{type:"array"},tags:{type:"array",items:{type:"string"}},supportedTrust:{type:"array",items:{type:"string"}}}};function R(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function l(e,t){return e.toLowerCase()===t.toLowerCase()}function I(e){if(typeof e!="string"||!/^[0-9]+$/.test(e)||e.length>78||BigInt(e)>=2n**256n)throw new d("Provide an agent ID as a decimal uint256 integer string.");return BigInt(e)}function b(e,t,n=!1){if(typeof e!="string"||!n&&!e.trim())throw new d(`Provide a valid profile ${t}.`)}function E(e,t){b(e,t);try{let n=new URL(e);if(!["https:","ipfs:"].includes(n.protocol)||!n.hostname||n.username||n.password)throw new Error}catch{throw new d(`Profile ${t} must be an HTTPS or IPFS URI without credentials.`)}}function z(e,t,n,r){let{registryId:s}=h(e);if(!R(t))throw new d("Provide a registration-v1 profile object.");if(n!==void 0&&typeof n!="boolean")throw new d("The tag option must be a boolean.");if(t.type!==j)throw new d("Use the ERC-8004 registration-v1 profile type.");if(b(t.name,"name"),b(t.description,"description",!0),E(t.image,"image"),typeof t.active!="boolean"||typeof t.x402Support!="boolean")throw new d("Profile active and x402Support must be booleans.");if(!Array.isArray(t.services)||!Array.isArray(t.registrations))throw new d("Profile services and registrations must be arrays.");for(let o of t.services){if(!R(o))throw new d("Provide valid profile services.");b(o.name,"service name"),E(o.endpoint,"service endpoint"),o.version!==void 0&&b(o.version,"service version")}for(let o of["tags","supportedTrust"])if(t[o]!==void 0&&(!Array.isArray(t[o])||!t[o].every(p=>typeof p=="string"&&p.trim())))throw new d(`Profile ${o} must be an array of nonempty strings.`);let c=t.registrations.map(o=>{if(!R(o)||typeof o.agentRegistry!="string"||!/^eip155:[1-9][0-9]*:0x[0-9a-fA-F]{40}$/.test(o.agentRegistry))throw new d("Provide a valid agentRegistry for every registration.");let p=typeof o.agentId=="number"&&Number.isSafeInteger(o.agentId)?String(o.agentId):o.agentId,u=I(p);if(l(o.agentRegistry,s)){if(r===void 0)throw new d("Do not predict a registration ID; obtain it from the mined Registered receipt.");if(u!==r)throw new d("Profile registration ID does not match the agent being updated.")}return{...o}});r!==void 0&&!c.some(o=>l(o.agentRegistry,s))&&c.push({agentId:r.toString(),agentRegistry:s});let i=[...new Set((t.tags??[]).filter(o=>o!==v))];n!==!1&&i.push(v);let g={...t,registrations:c,...i.length?{tags:i}:{}};i.length||delete g.tags;let a;try{if(a=JSON.stringify(g),H.byteLength(a)>65536)throw new Error;JSON.parse(a)}catch{throw new d("Profile must be JSON data no larger than 64 KiB.")}return`data:application/json;base64,${H.from(a,"utf8").toString("base64")}`}async function A(e,t){try{let{chainId:n,registry:r}=h(e),s=I(t),c=e.clientFor(n),i=await c.readContract({address:r,abi:m,functionName:"ownerOf",args:[s]});y(i);let[g,a,o]=await Promise.all([c.readContract({address:r,abi:m,functionName:"tokenURI",args:[s]}),c.readContract({address:r,abi:m,functionName:"getAgentWallet",args:[s]}),c.readContract({address:r,abi:m,functionName:"getMetadata",args:[s,v]})]);if(y(a),typeof g!="string"||typeof o!="string"||!/^0x([0-9a-fA-F]{2})*$/.test(o))throw new d("The registry returned invalid identity data.");return{agentId:s.toString(),chainId:n,registry:r,owner:i,uri:g,agentWallet:a,registrarMetadata:o,registryValidated:!1,summary:_}}catch(n){throw new d(e.plainError(n))}}async function se(e,t){let n=await A(e,t);return{...n,uri:S(n.uri)}}async function F(e,t,n){let{chainId:r,registry:s}=h(e),c=e.clientFor(r),i=await c.readContract({address:s,abi:m,functionName:"ownerOf",args:[t]});if(y(i),l(i,n))return;let[g,a]=await Promise.all([c.readContract({address:s,abi:m,functionName:"getApproved",args:[t]}),c.readContract({address:s,abi:m,functionName:"isApprovedForAll",args:[i,n]})]);if(y(g),typeof a!="boolean")throw new d("The registry returned invalid operator approval data.");if(!l(g,n)&&!a)throw new d("Only the agent owner or an approved operator can update this profile.")}async function L(e,t,n,r){let{chainId:s,registry:c}=h(e);if(typeof t!="string"||!/^0x[0-9a-fA-F]{64}$/.test(t))throw new d("Provide the mined transaction hash.");let i=e.clientFor(s),g=await i.getTransactionReceipt({hash:t});if(!g)throw new d("The transaction is not mined yet. Try again after confirmation.");if(g.status!=="success"||!g.to||!l(g.to,c)||!l(g.from,n)||!l(g.transactionHash,t))throw new d("The receipt is not a successful matching registry transaction.");let a=await i.getTransaction({hash:t});if(a.chainId!==s||a.value!==0n||!a.to||!l(a.to,c)||!l(a.from,n))throw new d("The transaction does not match this chain, registry and wallet.");if(typeof a.input!="string"||!l(a.input,r))throw new d("The mined transaction calldata does not match the exact operation Oak built.");return g}async function G(e,t,n,r,s,c){let{registry:i}=h(e),g=await L(e,t,n,s),a=c===void 0?"Registered":"URIUpdated",o=D(c===void 0?"Registered(uint256,string,address)":"URIUpdated(uint256,string,address)"),p=g.logs.filter(x=>l(x.address,i)&&x.topics[0]===o&&!x.removed);if(p.length!==1)throw new d(`The receipt must contain one matching ${a} event.`);let u=p[0],f=B({abi:m,eventName:a,topics:u.topics,data:u.data,strict:!0}),w=f.args.agentId,q=f.eventName==="Registered"?f.args.agentURI:f.args.newURI,K=f.eventName==="Registered"?f.args.owner:f.args.updatedBy;if(c!==void 0&&w!==c||q!==r||!l(K,n))throw new d("The registry event does not match the expected agent, URI and wallet.");let k=await A(e,w.toString());if(k.uri!==r||c===void 0&&!l(k.owner,n))throw new d("The current agent owner or URI does not match the confirmed operation.");return k}function T(e,t){let{chainId:n,registry:r}=h(e);return e.unsignedTx({to:r,chainId:n,value:"0",data:U({abi:m,functionName:"setMetadata",args:[t,v,M]}),description:`Set mutable oak.registrar metadata to oak for agent ${t}.`})}async function Q(e,t,n,r){let{registry:s}=h(e),c=I(r.agentId),i=await L(e,t,n,T(e,c).data),g=D("MetadataSet(uint256,string,string,bytes)"),a=i.logs.filter(f=>l(f.address,s)&&f.topics[0]===g&&!f.removed);if(a.length!==1)throw new d("The receipt must contain one matching MetadataSet event.");let o=a[0],{args:p}=B({abi:m,eventName:"MetadataSet",topics:o.topics,data:o.data,strict:!0});if(p.agentId!==c||p.metadataKey!==v||p.metadataValue!==M)throw new d("The metadata event does not match this agent and registrar marker.");let u=await A(e,r.agentId);if(u.registrarMetadata!==M||u.uri!==r.uri||!l(u.owner,r.owner))throw new d("The current agent metadata, owner or URI does not match the confirmed operation.");return u}async function P(e,t,n,r){let s=await e.preview(t,n),c=s.changes.map(({amount:i,token:g})=>{let a=i.startsWith("-");return`${a?"-":""}${e.formatAmount(a?i.slice(1):i,g.decimals)} ${g.symbol} (${g.address}, chain ${g.chainId})`});return{txs:t,summary:`${s.summary} ${c.join("; ")} ${_} ${r}`}}async function X(e,t){let{chainId:n,registry:r}=h(e),s=e.clientFor(n),c=await s.readContract({address:r,abi:m,functionName:"balanceOf",args:[t]});if(c===0n)return;if(typeof c!="bigint"||c<0n)throw new d("Registry balance is unavailable; registration was not built.");let i=await s.getBlockNumber({cacheTime:0}),g=new Set;for(;;){let a=i>9999999n?i-9999999n:0n,o=await s.getLogs({address:r,event:W("event Transfer(address indexed from,address indexed to,uint256 indexed tokenId)"),args:{to:t},fromBlock:a,toBlock:i,strict:!0});for(let p of o){let u=p.args.tokenId.toString();if(p.removed||g.has(u))continue;g.add(u);let f=await A(e,u);if(l(f.owner,t))return f}if(a===0n)throw new d("Owned identity could not be located; registration was not built. Run oak setup link <agentId>.");i=a-1n}}async function O(e,t,n,r){let{chainId:s,registry:c}=h(e);if(y(r),n.chainId!==void 0&&n.chainId!==s)throw new d(`ERC-8004 actions are supported only on chain ${s}.`);let i=t?I(n.agentId):void 0,g=z(e,n.profile,n.tag,i),a=n.tag!==!1;if(n.metadataTransactionHash!==void 0&&(!a||n.transactionHash===void 0))throw new d("A metadata transaction hash requires tagging and the profile transaction hash.");let o=i===void 0?U({abi:m,functionName:"register",args:[g]}):U({abi:m,functionName:"setAgentURI",args:[i,g]});if(n.transactionHash!==void 0){let u=await G(e,n.transactionHash,r,g,o,i);if(!a)return u;if(n.metadataTransactionHash!==void 0)return Q(e,n.metadataTransactionHash,r,u);let f=I(u.agentId);await F(e,f,r);let w=await P(e,[T(e,f)],r,`Profile transaction confirmed for agent ${f}; onchain registrar metadata is pending. Submit this metadata transaction locally if not already submitted, then repeat the original arguments with transactionHash and metadataTransactionHash to verify both calls.`);return{...u,...w}}if(!t){let u=await X(e,r);if(u){let f={...u,registrationResumed:!0};if(!a||u.registrarMetadata===M)return f;let w=await P(e,[T(e,I(u.agentId))],r,`Resume registrar metadata for owned agent ${u.agentId}; no new identity will be minted.`);return{...f,...w}}}i!==void 0&&await F(e,i,r);let p=[e.unsignedTx({to:c,data:o,value:"0",chainId:s,description:i===void 0?"Register an ERC-8004 agent profile.":`Update ERC-8004 agent ${i} profile.`})];return i!==void 0&&a&&p.push(T(e,i)),P(e,p,r,`Submit locally, then repeat the original arguments with transactionHash to verify the profile receipt and URI.${a?i===void 0?" The mined Registered event supplies the actual agent ID; confirmation then builds a separate setMetadata transaction for oak.registrar. Both transactions require network gas.":" Submit the profile and metadata transactions in order, then supply metadataTransactionHash as well to verify the onchain oak.registrar marker. Both transactions require network gas.":" No registrar metadata transaction is built; --no-tag does not clear existing onchain metadata."}${i===void 0?" Update the profile registrations with the mined ID afterward.":""}`)}var Y=e=>{let t=(r,s,c)=>({name:r,inputSchema:s,execute:async(i,g)=>{try{let a=await c(i,g);return R(a)&&typeof a.uri=="string"?{...a,uri:S(a.uri)}:a}catch(a){throw new d(e.plainError(a))}}}),n=r=>({type:"object",additionalProperties:!1,required:r?["agentId","profile"]:["profile"],properties:{profile:J,tag:{type:"boolean",default:!0,description:"Set false for --no-tag; removes the profile tag and skips setMetadata, leaving existing onchain metadata unchanged."},transactionHash:{type:"string",pattern:"^0x[0-9a-fA-F]{64}$",description:"After local submission, verify exact calldata, event and URI; if tagged, build the metadata follow-up unless metadataTransactionHash is supplied."},metadataTransactionHash:{type:"string",pattern:"^0x[0-9a-fA-F]{64}$",description:"Hash of the separate setMetadata transaction; supplied with transactionHash to complete tagged confirmation."},...r?{agentId:N}:{}}});return{tools:[t("erc8004_register",n(!1),(r,s)=>O(e,!1,r,s)),t("erc8004_update",n(!0),(r,s)=>O(e,!0,r,s)),t("erc8004_identity",{type:"object",additionalProperties:!1,required:["agentId"],properties:{agentId:N}},r=>A(e,r.agentId))]}},de=e=>$("erc8004",[Y(e)]);export{m as a,oe as b,se as c,Y as d,de as e};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as Z,o as me}from"./2IRORNOH.js";import{a as R,b as ue}from"./A5ITAEUQ.js";import{a as B,c as ke}from"./I5CQ64EU.js";import{a as g,i as U}from"./ZUC6ILK2.js";import{a as ye}from"./B4MLWDPM.js";import{a as d,b as Y,d as S}from"./NGAI6GTU.js";import{decodeFunctionResult as Ie,encodeFunctionData as q,getAddress as m,parseAbi as j,zeroAddress as ee}from"viem";var fe=-887272,le=887272,D=(1n<<128n)-1n,Ce="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",Le="0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",Ne="0x3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f",J=2000n,qe=5,$e=1800n,f=Object.freeze({factory:m(U[4663].uniswap.v3_factory.address),positionManager:m(U[4663].uniswap.v3_position_manager.address),swapRouter02:m(U[4663].uniswap.swap_router02.address),permit2:m(U[4663].uniswap.permit2.address),weth:m(U[4663].uniswap.WETH.address),usdg:m(U[4663].uniswap.USDG.address),ethUsdgPool:m(U[4663].oracle.ethUsdgPool.address)}),_e=Object.freeze({100:1,500:10,3e3:60,1e4:200}),rn=Object.freeze([{fee:100,tickSpacing:1,address:m("0x52e65B17fB6E5BA00Ed806f37Afcd2DaA50271Ca"),token0:f.weth,token1:f.usdg,recordedLiquidity:"1957537485734736219",recordedSqrtPriceX96:"3839219776288481168641554",recordedTick:-198707,feeProtocol:68},{fee:500,tickSpacing:10,address:m("0x69bfaf19c9f377bb306a89aed9f6b07e2c1a8d9a"),token0:f.weth,token1:f.usdg,recordedLiquidity:"714542894544667104",recordedSqrtPriceX96:"3839644024453020182443671",recordedTick:-198705,feeProtocol:68},{fee:3e3,tickSpacing:60,address:m("0xa9188730fe85be88ad499d7d52b099e800fb0334"),token0:f.weth,token1:f.usdg,recordedLiquidity:"310559629687003603",recordedSqrtPriceX96:"3843235825752878635548672",recordedTick:-198686,feeProtocol:102},{fee:1e4,tickSpacing:200,address:m("0x5f009e071f07e92b6c624e83f52f17bbda34680d"),token0:f.weth,token1:f.usdg,recordedLiquidity:"5822966536584155",recordedSqrtPriceX96:"3853297838190389678059735",recordedTick:-198634,feeProtocol:102}]),v=j(["function positions(uint256 tokenId) view returns (uint96 nonce, address operator, address token0, address token1, uint24 fee, int24 tickLower, int24 tickUpper, uint128 liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128, uint128 tokensOwed0, uint128 tokensOwed1)","function ownerOf(uint256 tokenId) view returns (address)","function balanceOf(address owner) view returns (uint256)","function tokenOfOwnerByIndex(address owner, uint256 index) view returns (uint256)","function mint((address token0, address token1, uint24 fee, int24 tickLower, int24 tickUpper, uint256 amount0Desired, uint256 amount1Desired, uint256 amount0Min, uint256 amount1Min, address recipient, uint256 deadline) params) payable returns (uint256 tokenId, uint128 liquidity, uint256 amount0, uint256 amount1)","function increaseLiquidity((uint256 tokenId, uint256 amount0Desired, uint256 amount1Desired, uint256 amount0Min, uint256 amount1Min, uint256 deadline) params) payable returns (uint128 liquidity, uint256 amount0, uint256 amount1)","function decreaseLiquidity((uint256 tokenId, uint128 liquidity, uint256 amount0Min, uint256 amount1Min, uint256 deadline) params) payable returns (uint256 amount0, uint256 amount1)","function collect((uint256 tokenId, address recipient, uint128 amount0Max, uint128 amount1Max) params) payable returns (uint256 amount0, uint256 amount1)","function burn(uint256 tokenId) payable"]),Se=j(["function getPool(address tokenA, address tokenB, uint24 fee) view returns (address pool)","function feeAmountTickSpacing(uint24 fee) view returns (int24)"]),Ee=j(["function slot0() view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked)","function liquidity() view returns (uint128)","function tickSpacing() view returns (int24)","function fee() view returns (uint24)","function token0() view returns (address)","function token1() view returns (address)"]),Oe=j(["function exactInputSingle((address tokenIn, address tokenOut, uint24 fee, address recipient, uint256 amountIn, uint256 amountOutMinimum, uint160 sqrtPriceLimitX96) params) payable returns (uint256 amountOut)"]),pe=j(["function decimals() view returns (uint8)","function symbol() view returns (string)","function allowance(address owner, address spender) view returns (uint256)"]),Be="0xd0e30db0";function Re(n){if(typeof n!="string")return!1;let e=n.trim().toLowerCase();return e===ee||e===Ce||e==="eth"||e==="native"}function V(n,e){if(Re(n))throw new d(`Uniswap v3 requires wrapped ERC-20 WETH (${f.weth}) rather than native ETH in ${e}.`);if(typeof n!="string")throw new d(`${e} must be a valid 20-byte hex address.`);return R(n),m(n)}function De(n,e,t){let r=Number(n),o=Number(e),i=Number(t);if(!Number.isInteger(i)||i<=0)throw new d("Uniswap v3 tickSpacing must be a positive integer.");if(!Number.isInteger(r)||!Number.isInteger(o))throw new d("Uniswap v3 tickLower and tickUpper must be integers.");if(r<fe||o>le||r>le||o<fe)throw new d(`Uniswap v3 ticks are out of bounds [${fe}, ${le}].`);if(r>=o)throw new d("Uniswap v3 tickLower must be strictly less than tickUpper.");if(r%i!==0||o%i!==0)throw new d(`Uniswap v3 tickLower (${r}) and tickUpper (${o}) must be divisible by tickSpacing (${i}).`);return{tickLower:r,tickUpper:o,tickSpacing:i}}function Ve(n,e){let t=n.trim(),r=t.startsWith("-"),o=r||t.startsWith("+")?t.slice(1):t,i=ke(B(o).toString(),e);return r&&i!=="0"?`-${i}`:i}function He(n){let e=typeof n=="string"?Ie({abi:v,functionName:"positions",data:n}):n;return{nonce:BigInt(e[0]),operator:m(String(e[1])),token0:m(String(e[2])),token1:m(String(e[3])),fee:Number(e[4]),tickLower:Number(e[5]),tickUpper:Number(e[6]),liquidity:BigInt(e[7]),feeGrowthInside0LastX128:BigInt(e[8]),feeGrowthInside1LastX128:BigInt(e[9]),tokensOwed0:BigInt(e[10]),tokensOwed1:BigInt(e[11])}}function he(n,e){if(!n||!Array.isArray(n.logs))return[];let t=e?m(e).toLowerCase():void 0,r=f.positionManager.toLowerCase(),o=new Set;for(let i of n.logs){if(!i||typeof i.address!="string"||i.address.toLowerCase()!==r)continue;let s=Array.isArray(i.topics)?i.topics.map(u=>String(u).toLowerCase()):[],a=s[0];if(a===Le&&s.length>=4){let c=`0x${s[2].slice(-40)}`;if(!t||c===t){let l=BigInt(s[3]).toString();l!=="0"&&o.add(l)}}else if(a===Ne&&s.length>=2&&!t){let u=BigInt(s[1]).toString();u!=="0"&&o.add(u)}}return[...o]}function sn(n){let e=t=>typeof t=="bigint"?t:B(t);return q({abi:Oe,functionName:"exactInputSingle",args:[{tokenIn:m(n.tokenIn),tokenOut:m(n.tokenOut),fee:n.fee,recipient:m(n.recipient),amountIn:e(n.amountIn),amountOutMinimum:e(n.amountOutMinimum),sqrtPriceLimitX96:n.sqrtPriceLimitX96!==void 0?e(n.sqrtPriceLimitX96):0n}]})}var xe=1n<<96n;function ve(n){let e=Math.abs(n),t=(e&1)!==0?0xfffcb933bd6fad37aa2d162d1a594001n:0x100000000000000000000000000000000n;return(e&2)!==0&&(t=t*0xfff97272373d413259a46990580e213an>>128n),(e&4)!==0&&(t=t*0xfff2e50f5f656932ef12357cf3c7fdccn>>128n),(e&8)!==0&&(t=t*0xffe5caca7e10e4e61c3624eaa0941cd0n>>128n),(e&16)!==0&&(t=t*0xffcb9843d60f6159c9db58835c926644n>>128n),(e&32)!==0&&(t=t*0xff973b41fa98c081472e6896dfb254c0n>>128n),(e&64)!==0&&(t=t*0xff2ea16466c96a3843ec78b326b52861n>>128n),(e&128)!==0&&(t=t*0xfe5dee046a99a2a811c461f1969c3053n>>128n),(e&256)!==0&&(t=t*0xfcbe86c7900a88aedcffc83b479aa3a4n>>128n),(e&512)!==0&&(t=t*0xf987a7253ac413176f2b074cf7815e54n>>128n),(e&1024)!==0&&(t=t*0xf3392b0822b70005940c7a398e4b70f3n>>128n),(e&2048)!==0&&(t=t*0xe7159475a2c29b7443b29c7fa6e889d9n>>128n),(e&4096)!==0&&(t=t*0xd097f3bdfd2022b8845ad8f792aa5825n>>128n),(e&8192)!==0&&(t=t*0xa9f746462d870fdf8a65dc1f90e061e5n>>128n),(e&16384)!==0&&(t=t*0x70d869a156d2a1b890bb3df62baf32f7n>>128n),(e&32768)!==0&&(t=t*0x31be135f97d08fd981231505542fcfa6n>>128n),(e&65536)!==0&&(t=t*0x9aa508b5b7a84e1c677de54f3e99bc9n>>128n),(e&131072)!==0&&(t=t*0x5d6af8dedb81196699c329225ee604n>>128n),(e&262144)!==0&&(t=t*0x2216e584f5fa1ea926041bedfe98n>>128n),(e&524288)!==0&&(t=t*0x48a170391f7dc42444e8fa2n>>128n),n>0&&(t=((1n<<256n)-1n)/t),(t>>32n)+(t%(1n<<32n)===0n?0n:1n)}function We(n,e,t,r){if(r<=0n)return{amount0:0n,amount1:0n};let[o,i]=e<t?[e,t]:[t,e];if(n<=o)return{amount0:(r<<96n)*(i-o)/i/o,amount1:0n};if(n<i){let a=(r<<96n)*(i-n)/i/n,u=r*(n-o)/xe;return{amount0:a,amount1:u}}return{amount0:0n,amount1:r*(i-o)/xe}}async function T(n,e,t,r){let o=m(e),i,s;if(t===g&&o===f.weth?(i=18,s="WETH"):t===g&&o===f.usdg&&(i=6,s="USDG"),i===void 0){let a=await n.readContract({address:o,abi:pe,functionName:"decimals"});i=Number(a)}if(s===void 0)try{let a=await n.readContract({address:o,abi:pe,functionName:"symbol"});if(typeof a!="string"||!a.trim())throw new d("Token symbol is unavailable.");s=a.trim()}catch(a){throw new d(`Could not read token metadata. ${S(a)}`)}if(!Number.isInteger(i)||i<0||i>255)throw new d("Token decimals are invalid.");if(r!=null){let a=Number(r);if(!Number.isInteger(a)||a!==i)throw new d(`Token ${o} on chain ${t} has ${i} decimals, not ${String(r)}.`)}return{address:o,symbol:s,decimals:i,chainId:t}}async function Fe(n){try{if(!n.getBlock)throw new d("Block timestamps are unavailable.");let e=await n.getBlock();if(typeof e.timestamp!="bigint")throw new d("Invalid block timestamp.");return e.timestamp}catch(e){throw new d(`Could not read the current block timestamp. ${S(e)}`)}}function K(n,e){if(typeof n=="bigint"){if(n<0n)throw new d(`${e} must be a non-negative integer.`);return n}if(typeof n=="number"){if(!Number.isSafeInteger(n)||n<0)throw new d(`${e} must be a non-negative integer.`);return BigInt(n)}if(typeof n=="string")return B(n);throw new d(`${e} must be a non-negative integer.`)}async function Ae(n,e){let t=await Fe(n);if(e==null)return t+$e;let r=K(e,"deadline");if(r<=t)throw new d(`Uniswap v3 deadline (${r.toString()}) has expired at timestamp ${t.toString()}.`);return r}function $(n,e){if(typeof n!="string"||!/^\d+$/.test(n))throw new d(`${e} must be a non-negative integer string in base units.`);return B(n)}function Me(n){let e=n.slippageBps??Z;if(typeof e!="number")throw new d("Slippage must be an integer from 0 to 9999 bps.");return me("0",e),e}function ne(n,e,t,r){let o=n===void 0?B(me(e.toString(),t)):$(n,r);if(o<=1n)throw new d(`${r} must exceed 1 base unit; the simulated amount may be too small.`);return o}function X(n,e){return ue({to:f.positionManager,data:n,value:"0",chainId:g,description:e})}async function te(n,e,t){try{if(!n.request)throw new d("Sequential transaction simulation is unavailable.");let o=await n.request({method:"eth_simulateV1",params:[{blockStateCalls:[{calls:e.map(i=>({from:t,gas:`0x${ye.toString(16)}`,to:i.to,data:i.data,value:`0x${BigInt(i.value).toString(16)}`}))}],validation:!1,traceTransfers:!0},"latest"]},{retryCount:0});if(!Array.isArray(o)||o.length!==1||!Array.isArray(o[0]?.calls)||o[0].calls.length!==e.length)throw new d("Unexpected batch simulation response.");return o[0].calls.map((i,s)=>{if(i.status!=="0x1"||i.error||typeof i.returnData!="string"||!/^0x([a-fA-F0-9]{2})*$/.test(i.returnData))throw new d(`Simulation call ${s+1} failed. ${S(i.error)}`);return i.returnData})}catch(r){throw new d(`Uniswap v3 simulation failed. ${S(r)}`)}}function ie(n,e){try{return Ie({abi:v,functionName:n,data:e})}catch{throw new d(`Uniswap v3 ${n} simulation returned invalid amounts.`)}}function Q(n,e={}){if(e.chainId!==void 0&&Number(e.chainId)!==g)throw new d(`Uniswap v3 is only supported on Robinhood Chain (${g}).`);if(e.version!==void 0&&e.version!=="v3")throw new d(`Uniswap v3 handler received unsupported version "${String(e.version)}".`);let t=n.clientFor(g);return{...t,readContract:async r=>{try{return await t.readContract(r)}catch(o){throw new d(`Could not read Uniswap v3 ${r.functionName}. ${S(o)}`,{cause:o})}}}}async function ge(n,e,t){let r;try{r=await n.readContract({address:f.positionManager,abi:v,functionName:"ownerOf",args:[e]})}catch(s){throw new d(`Could not verify owner of Uniswap v3 position #${e}. ${S(s)}`)}let o=m(String(r)),i=m(t);if(o!==i)throw new d(`Wallet ${i} is not the owner of Uniswap v3 position #${e.toString()} (owned by ${o}).`);return o}async function oe(n,e){let t=await n.readContract({address:f.positionManager,abi:v,functionName:"positions",args:[e]});return He(t)}function we(n,e){if(!Array.isArray(e.changes)||!e.changes.length)return n;let t=e.changes.map(r=>`${Ve(r.amount,r.token.decimals)} ${r.token.symbol}`);return`${n} (${t.join(", ")})`}async function Ge(n,e,t){R(t);let r=m(t),o=Q(n,e),i=await Ae(o,e.deadline),s=Me(e),a=e.tokenId===void 0?void 0:K(e.tokenId,"tokenId"),u;if(a!==void 0){if(a<=0n)throw new d("Uniswap v3 tokenId must be a positive integer.");await ge(o,a,r),u=await oe(o,a)}let c=u?.token0??V(e.token0,"token0"),l=u?.token1??V(e.token1,"token1");if(BigInt(c)>=BigInt(l))throw new d("Uniswap v3 requires distinct sorted token addresses.");let w=u?.fee??Number(e.fee??100),b=_e[w];if(!b)throw new d("Unsupported Uniswap v3 fee tier.");let h=m(String(await o.readContract({address:f.factory,abi:Se,functionName:"getPool",args:[c,l,w]})));if(h===ee)throw new d("No Uniswap v3 pool exists for these tokens and fee tier.");let{tickLower:x,tickUpper:C,tickSpacing:_}=De(u?.tickLower??e.tickLower,u?.tickUpper??e.tickUpper,b),L=await T(o,c,g,e.token0Decimals),y=await T(o,l,g,e.token1Decimals),p=$(e.amount0Desired,"amount0Desired"),I=$(e.amount1Desired,"amount1Desired");if(p===0n&&I===0n)throw new d("Liquidity addition requires a positive desired amount.");let A=e.recipient===void 0?r:V(e.recipient,"recipient");if(A!==r)throw new d("Uniswap recipient must be the signing wallet.");if(e.wrapNative===!0&&c!==f.weth&&l!==f.weth)throw new d("Wrapping requires a positive WETH desired amount.");let E=await Promise.all([c,l].map(async N=>BigInt(await o.readContract({address:N,abi:pe,functionName:"allowance",args:[r,f.positionManager]})))),M=(N,G)=>{let de=[];if(e.wrapNative===!0){let z=c===f.weth?N:G;z>0n&&de.push(ue({to:f.weth,data:Be,value:z.toString(),chainId:g,description:"Wrap ETH into WETH."}))}for(let[z,Te]of[c,l].entries()){let ce=z===0?N:G;ce>0n&&E[z]<ce&&de.push(n.approval(Te,f.positionManager,ce.toString(),g))}return de},P=a===void 0?"mint":"increaseLiquidity",H=(N,G)=>X(a===void 0?q({abi:v,functionName:"mint",args:[{token0:c,token1:l,fee:w,tickLower:x,tickUpper:C,amount0Desired:p,amount1Desired:I,amount0Min:N,amount1Min:G,recipient:A,deadline:i}]}):q({abi:v,functionName:"increaseLiquidity",args:[{tokenId:a,amount0Desired:p,amount1Desired:I,amount0Min:N,amount1Min:G,deadline:i}]}),`${P==="mint"?"Mint":"Increase"} Uniswap v3 ${L.symbol}/${y.symbol} liquidity.`),W=await te(o,[...M(p,I),H(0n,0n)],r),k=ie(P,W[W.length-1]),O=k[k.length-2],Ue=k[k.length-1];if(O>p||Ue>I)throw new d("Simulated liquidity spend exceeds the desired amounts.");let F=M(p,I),se=ne(e.amount0Min,k[k.length-2],s,"amount0Min"),ae=ne(e.amount1Min,k[k.length-1],s,"amount1Min");if(se>p||ae>I)throw new d("Uniswap v3 minimum amount cannot exceed desired amount.");F.push(H(se,ae));let be=await n.preview(F,r);return{txs:F,preview:be,summary:we(F[F.length-1].description,be),details:{version:"v3",action:P,...a===void 0?{}:{tokenId:a.toString()},pool:h,fee:w,tickSpacing:_,tickLower:x,tickUpper:C,token0:L,token1:y,amount0Desired:p.toString(),amount1Desired:I.toString(),amount0Min:se.toString(),amount1Min:ae.toString(),deadline:i.toString(),recipient:A,expectedAmount0:k[k.length-2].toString(),expectedAmount1:k[k.length-1].toString()}}}async function ze(n,e,t){R(t);let r=m(t),o=Q(n,e),i=K(e.tokenId,"tokenId");if(i<=0n)throw new d("Uniswap v3 tokenId must be a positive integer.");await ge(o,i,r);let s=await oe(o,i),a=await T(o,s.token0,g),u=await T(o,s.token1,g),c=e.recipient===void 0?r:V(e.recipient,"recipient");if(c!==r)throw new d("Uniswap recipient must be the signing wallet.");let l=e.amount0Max===void 0?D:$(e.amount0Max,"amount0Max"),w=e.amount1Max===void 0?D:$(e.amount1Max,"amount1Max");if(l===0n&&w===0n||l>D||w>D)throw new d("Collect requires a positive amountMax within uint128.");let b=[X(q({abi:v,functionName:"collect",args:[{tokenId:i,recipient:c,amount0Max:l,amount1Max:w}]}),`Collect Uniswap v3 fees from position #${i}.`)],h=ie("collect",(await te(o,b,r))[0]),x=await n.preview(b,r);return{txs:b,preview:x,summary:we(b[0].description,x),details:{version:"v3",action:"collect",tokenId:i.toString(),recipient:c,token0:a,token1:u,amount0Max:l.toString(),amount1Max:w.toString(),expectedAmount0:h[0].toString(),expectedAmount1:h[1].toString()}}}async function Xe(n,e,t){R(t);let r=m(t),o=Q(n,e),i=K(e.tokenId,"tokenId");if(i<=0n)throw new d("Uniswap v3 tokenId must be a positive integer.");await ge(o,i,r);let s=await oe(o,i),a=s.liquidity===0n&&e.burn===!0;if(s.liquidity<=0n&&!a)throw new d("Position has zero active liquidity to remove.");if(e.liquidity===void 0&&!a)throw new d('Provide a liquidity amount or explicitly choose liquidity "all" for a full exit.');let u=e.liquidity==="all"||e.liquidity===void 0?s.liquidity:$(e.liquidity,"liquidity");if(u<=0n&&!a)throw new d("Liquidity to remove must be positive.");if(u>s.liquidity)throw new d("Requested liquidity exceeds position liquidity.");let c=await Ae(o,e.deadline),l=Me(e),w=await T(o,s.token0,g),b=await T(o,s.token1,g),h=e.recipient===void 0?r:V(e.recipient,"recipient");if(h!==r)throw new d("Uniswap recipient must be the signing wallet.");let x=(k,O)=>X(q({abi:v,functionName:"decreaseLiquidity",args:[{tokenId:i,liquidity:u,amount0Min:k,amount1Min:O,deadline:c}]}),`Decrease ${u} liquidity on Uniswap v3 position #${i}.`),C=a?[0n,0n]:ie("decreaseLiquidity",(await te(o,[x(0n,0n)],r))[0]),_=(k,O)=>{if(k!==void 0&&$(k,O)!==0n)throw new d(`${O} must be zero for an empty position burn.`);return 0n},L=a?_(e.amount0Min,"amount0Min"):ne(e.amount0Min,C[0],l,"amount0Min"),y=a?_(e.amount1Min,"amount1Min"):ne(e.amount1Min,C[1],l,"amount1Min"),p=a?[]:[x(L,y)],I=p.length,A=!a||s.tokensOwed0>0n||s.tokensOwed1>0n;A&&p.push(X(q({abi:v,functionName:"collect",args:[{tokenId:i,recipient:h,amount0Max:D,amount1Max:D}]}),`Collect principal and fees from Uniswap v3 position #${i}.`));let E=u===s.liquidity,M=E&&e.burn===!0;M&&p.push(X(q({abi:v,functionName:"burn",args:[i]}),`Burn empty Uniswap v3 position #${i}.`));let P=await te(o,p,r),H=A?ie("collect",P[I]):[0n,0n],W=await n.preview(p,r);return{txs:p,preview:W,summary:we(`Remove Uniswap v3 liquidity from position #${i}${M?`; burns position #${i} at ${f.positionManager}`:""}`,W),details:{version:"v3",action:"remove",tokenId:i.toString(),recipient:h,token0:w,token1:b,liquidityRemoved:u.toString(),amount0Min:L.toString(),amount1Min:y.toString(),deadline:c.toString(),expectedAmount0:H[0].toString(),expectedAmount1:H[1].toString(),fullExit:E,burned:M}}}async function je(n,e,t={}){let r=m(e),o=new Set;if(Array.isArray(t.tokenIds))for(let s of t.tokenIds){let a=K(s,"tokenId");a>0n&&o.add(a.toString())}if(Array.isArray(t.receipts))for(let s of t.receipts)for(let a of he(s,r))o.add(a);let i=!1;try{let s=BigInt(await n.readContract({address:f.positionManager,abi:v,functionName:"balanceOf",args:[r]})),a=s>64n?64n:s;for(let u=0n;u<a;u++){try{let c=BigInt(await n.readContract({address:f.positionManager,abi:v,functionName:"tokenOfOwnerByIndex",args:[r,u]}));c>0n&&o.add(c.toString())}catch(c){if(!Y(c,3,-32601,-32004))throw c;break}u+1n===s&&(i=!0)}s===0n&&(i=!0)}catch(s){if(!Y(s,3,-32601,-32004))throw s}if(typeof n.getLogs=="function"&&typeof n.getBlockNumber=="function")try{let s=t.toBlock??await n.getBlockNumber(),a=t.maxChunks??qe,u=t.fromBlock??(s>J*BigInt(a)?s-J*BigInt(a)+1n:0n),c=s,l=0;for(;c>=u&&l<a;){let w=c>=J-1n?c-(J-1n):0n,b=w<u?u:w,h=await n.getLogs({address:f.positionManager,fromBlock:b,toBlock:c});for(let x of he({logs:h},r))o.add(x);if(l+=1,b===0n||b<=u)break;c=b-1n}}catch(s){throw new d(`Could not discover Uniswap v3 positions from logs. ${S(s)}`)}else if(!i&&t.tokenIds===void 0&&t.receipts===void 0)throw new d("Uniswap v3 position discovery is unavailable; supply candidate token IDs or receipts.");return[...o].map(s=>BigInt(s)).sort((s,a)=>s<a?-1:s>a?1:0)}async function Pe(n,e,t={}){R(e);let r=m(e),o=Q(n),i=await je(o,r,t),s=[];for(let a of i){let u;try{let y=await o.readContract({address:f.positionManager,abi:v,functionName:"ownerOf",args:[a]});u=m(String(y))}catch(y){if(Y(y,3))continue;throw new d(`Could not verify owner of position #${a}. ${S(y)}`)}if(u!==r)continue;let c;try{c=await oe(o,a)}catch(y){throw new d(`Could not read position #${a}. ${S(y)}`)}if(c.liquidity===0n&&c.tokensOwed0===0n&&c.tokensOwed1===0n&&!t.includeEmpty)continue;let w=await T(o,c.token0,g),b=await T(o,c.token1,g),h=0n,x=0n;if(c.liquidity>0n)try{let y=await o.readContract({address:f.factory,abi:Se,functionName:"getPool",args:[c.token0,c.token1,c.fee]}),p=m(String(y));if(p===ee)throw new d("Position pool was not found.");if(p!==ee){let I=await o.readContract({address:p,abi:Ee,functionName:"slot0"}),A=BigInt(I[0]);if(A<=0n)throw new d("Position pool has no initialized price.");let E=ve(c.tickLower),M=ve(c.tickUpper),P=We(A,E,M,c.liquidity);h=P.amount0,x=P.amount1}}catch(y){throw new d(`Could not value Uniswap v3 position #${a}. ${S(y)}`)}let C=h+c.tokensOwed0,_=x+c.tokensOwed1,L=[{token:w,amount:C.toString()},{token:b,amount:_.toString()}];s.push({module:"uniswap",id:`uniswap:v3:${a.toString()}`,chainId:g,assets:L,description:`Uniswap v3 LP position #${a.toString()} (${w.symbol}/${b.symbol} fee ${c.fee} ticks [${c.tickLower}, ${c.tickUpper}] liquidity ${c.liquidity.toString()})`})}return s}async function Ke(n,e,t){Q(n,e);let r=e.wallet!==void 0?V(e.wallet,"wallet"):m(t),o=Array.isArray(e.tokenIds)?e.tokenIds:void 0,i=Array.isArray(e.receipts)?e.receipts:void 0,s=e.includeZero===!0||e.includeEmpty===!0,a=await Pe(n,r,{tokenIds:o,receipts:i,includeEmpty:s});return{positions:a,details:{version:"v3",wallet:r,count:a.length,positionManager:f.positionManager}}}function Qe(n){return[{name:"uniswap_add",inputSchema:{type:"object",description:"Mint a new Uniswap v3 concentrated liquidity position or increase liquidity on an existing v3 NFT position on Robinhood Chain (4663).",properties:{version:{type:"string",enum:["v3"],default:"v3"},tokenId:{type:"string",description:"Optional existing v3 NFT tokenId for increaseLiquidity."},token0:{type:"string",description:"Sorted ERC-20 token0 address (e.g. WETH)."},token1:{type:"string",description:"Sorted ERC-20 token1 address (e.g. USDG)."},fee:{type:"integer",enum:[100,500,3e3,1e4],default:100},tickLower:{type:"integer",description:"Lower tick boundary divisible by tickSpacing."},tickUpper:{type:"integer",description:"Upper tick boundary divisible by tickSpacing."},amount0Desired:{type:"string",description:"Desired token0 amount in decimal base units."},amount1Desired:{type:"string",description:"Desired token1 amount in decimal base units."},amount0Min:{type:"string",description:"Minimum token0 amount in decimal base units."},amount1Min:{type:"string",description:"Minimum token1 amount in decimal base units."},slippageBps:{type:"integer",minimum:0,maximum:9999,default:Z},deadline:{type:"integer",description:"Unix timestamp deadline (> current block timestamp)."},wrapNative:{type:"boolean",description:"Optional: wrap native ETH into WETH before minting."}}},execute:(i,s)=>Ge(n,i,s)},{name:"uniswap_collect",inputSchema:{type:"object",description:"Collect accrued Uniswap v3 LP fees for an owned NonfungiblePositionManager NFT.",properties:{version:{type:"string",enum:["v3"],default:"v3"},tokenId:{type:"string",description:"Uniswap v3 NFT tokenId."},recipient:{type:"string",description:"Optional fee recipient; must be the signing wallet."},amount0Max:{type:"string",description:"Max token0 to collect (defaults to uint128 max)."},amount1Max:{type:"string",description:"Max token1 to collect (defaults to uint128 max)."}},required:["tokenId"]},execute:(i,s)=>ze(n,i,s)},{name:"uniswap_remove",inputSchema:{type:"object",description:"Decrease liquidity on an owned Uniswap v3 NFT position, collect principal and fees, and optionally burn the empty NFT.",properties:{version:{type:"string",enum:["v3"],default:"v3"},tokenId:{type:"string",description:"Uniswap v3 NFT tokenId."},liquidity:{type:"string",description:"Positive base-unit liquidity amount, or all for a full exit."},amount0Min:{type:"string",description:"Minimum token0 principal in decimal base units."},amount1Min:{type:"string",description:"Minimum token1 principal in decimal base units."},slippageBps:{type:"integer",minimum:0,maximum:9999,default:Z},deadline:{type:"integer",description:"Unix timestamp deadline (> current block timestamp)."},burn:{type:"boolean",description:"Whether to burn the NFT after removing 100% of liquidity, or burn an already-empty position."}},required:["tokenId"]},execute:(i,s)=>Xe(n,i,s)},{name:"uniswap_list_positions",inputSchema:{type:"object",description:"List active Uniswap v3 LP positions owned by the wallet from NFT receipts and Transfer logs.",properties:{version:{type:"string",enum:["v3"],default:"v3"},wallet:{type:"string",description:"Optional wallet address override."},tokenIds:{type:"array",items:{type:"string"},description:"Optional candidate v3 NFT tokenIds to inspect."}}},execute:(i,s)=>Ke(n,i,s)}]}var re=n=>({tools:Qe(n),positions:e=>Pe(n,e)}),an=re,dn=re,cn=re,un=re;export{fe as a,le as b,D as c,f as d,_e as e,rn as f,v as g,Se as h,Ee as i,Oe as j,De as k,Ve as l,He as m,he as n,sn as o,Ge as p,ze as q,Xe as r,Pe as s,Ke as t,Qe as u,re as v,an as w,dn as x,cn as y,un as z};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as r}from"./NGAI6GTU.js";function o(t){if(typeof t!="string"||!/^\d+$/.test(t))throw new r("Amount must be a non-negative integer string in base units.");return BigInt(t)}function u(t){if(!Number.isInteger(t)||t<0||t>255)throw new r("Token decimals must be an integer from 0 to 255.");return 10n**BigInt(t)}function f(t,i,n){if(i<=0n)throw new r("The denominator must be positive.");if(n!=="floor"&&n!=="ceil")throw new r("Choose floor or ceil rounding.");return t/i+(n==="ceil"&&t%i!==0n?1n:0n)}function a(t,i,n){let e=u(i);if(typeof t!="string"||!/^\d+(\.\d+)?$/.test(t))throw new r("Amount must be a non-negative decimal string.");let[c="0",g=""]=t.split("."),s=g.slice(i);if(n===void 0&&/[1-9]/.test(s))throw new r("Amount exceeds the token precision. Choose floor or ceil rounding.");if(n!==void 0&&n!=="floor"&&n!=="ceil")throw new r("Choose floor or ceil rounding.");return(BigInt(c)*e+BigInt(g.slice(0,i).padEnd(i,"0")||"0")+(n==="ceil"&&/[1-9]/.test(s)?1n:0n)).toString()}function p(t,i){let n=o(t),e=u(i),c=(n%e).toString().padStart(i,"0").replace(/0+$/,"");return`${n/e}${c?`.${c}`:""}`}function b(t,i,n,e){return f(o(t)*o(i),o(n),e).toString()}function S(t,i,n,e,c,g){return f(o(t)*o(e)*u(n),o(c)*u(i),g).toString()}export{o as a,a as b,p as c,b as d,S as e};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function i(o,n){return o==="hoodlock_airdrop_claim"&&!Object.hasOwn(n,"id")}var r=new Map([["meridian_buy","Meridian buys are coming soon in Oak; nothing was signed."]]);export{i as a,r as b};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as Y}from"./SJ7HDRI4.js";import{b as V,c as W,d as G}from"./MOVRI5IV.js";import{e as de,f as L}from"./2IRORNOH.js";import{a as B}from"./GDP4JSAX.js";import{a as N}from"./A5ITAEUQ.js";import{a as H,b as se,c as ae,d as j}from"./I5CQ64EU.js";import{a as S,i as D}from"./ZUC6ILK2.js";import{a as r}from"./NGAI6GTU.js";import{decodeEventLog as pe,decodeFunctionData as ve,encodeAbiParameters as ye,encodeFunctionData as ge,erc20Abi as Z,getAddress as l,isAddress as $,keccak256 as Ne,parseAbi as Be,parseAbiParameters as we,toEventSelector as be}from"viem";var k=l(D[4663].hookr.HookrLimitOrders.address),Fe=l(D[4663].hookr.HookrRoot.address),ke=l(D[4663].hookr.HookrRouter.address),At=l(D[4663].hookr.HookrQuoter.address),Me=l(D[4663].hookr.HookrRegistry.address),ze=l(D[4663].hookr.HookrForwarder.address),Oe=l(D[4663].hookr.PoolManager.address),ht=l(D[4663].hookr.HOOKR_Token.address),qe=l("0x000000000000000000000000000000000000dEaD"),Xe=8388608,Ke=200,ce=60n,Ue=604800n,ue=31536000n,St=10,Ct=100,xt="500000000000000",Dt="10000000000000000",le=4096n,Q=32n,je=1e4,Ve=(1n<<127n)-1n,me=(1n<<128n)-1n,We=(1n<<160n)-1n,Ge=(1n<<40n)-1n,Ye=16777215,Qe=8388607,fe=1n<<192n,ee=0,M=1,Ze=2,Je=3,et=be("OrderCreated(uint256,address,bytes32,bool,uint128,uint128,uint128,uint40,address)"),tt=be("OrderCancelled(uint256,address,address,uint256,uint256)"),A=Be(["function bountyBounds((address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks) key, bool zeroForOne, uint128 amountIn, uint128 minAmountOut) view returns (uint128 minBounty, uint128 defaultBounty, uint128 maxBounty)","function createOrder(((address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks) key, bool zeroForOne, uint128 amountIn, uint128 minAmountOut, uint160 sqrtPriceLimitX96, address recipient, uint40 expiry, uint128 bounty) params) payable returns (uint256 orderId)","function cancel(uint256 orderId, address to)","function getOrder(uint256 orderId) view returns (((address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks) key, address owner, uint40 createdAt, uint40 expiry, bool zeroForOne, uint8 status, address recipient, uint128 amountIn, uint128 minAmountOut, uint128 bounty, uint160 sqrtPriceLimitX96))","function quoteFill(uint256 orderId) view returns (bool fillable, uint256 amountOut)","function lastOrderId() view returns (uint256)","function liabilities(address currency) view returns (uint256)","function router() view returns (address)","function registry() view returns (address)","function poolManager() view returns (address)","function forwarder() view returns (address)","event OrderCreated(uint256 indexed orderId, address indexed owner, bytes32 indexed poolId, bool zeroForOne, uint128 amountIn, uint128 minAmountOut, uint128 bounty, uint40 expiry, address recipient)","event OrderCancelled(uint256 indexed orderId, address indexed owner, address indexed to, uint256 amountIn, uint256 bounty)"]);function F(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Ie(e){let t=e.toLowerCase();return t===L.toLowerCase()||t===B.toLowerCase()||t===de.toLowerCase()}function T(e,t){if(typeof e!="string"||!e.trim())throw new r(`Provide a valid contract address for ${t}. Identify tokens by chain and address, never by symbol.`);let n=e.trim();if(!$(n,{strict:!1}))throw new r(`Invalid token address "${n}" for ${t}. Identify tokens by chain and address, never by symbol.`);return Ie(n)?L:l(n)}function Ae(e){let t=e===void 0?S:Number(e);if(!Number.isSafeInteger(t)||t!==S)throw new r(`Hookr limit orders are only supported on Robinhood Chain (${S}).`);return S}function nt(e){switch(e){case ee:return"None";case M:return"Open";case Ze:return"Filled";case Je:return"Cancelled";default:return"Unknown"}}function rt(e,t,n=ae){if(typeof e!="string"||!/^-?\d+$/.test(e.trim()))throw new r("Signed amount must be an integer string in base units.");let o=e.trim();if(o.startsWith("-")){let i=o.slice(1),u=n(i,t);return u==="0"?"0":`-${u}`}return n(o,t)}function Lt(e,t,n="floor"){return se(e,t,n)}function he(e){return Ne(ye(we("address, address, uint24, int24, address"),[l(e.currency0),l(e.currency1),e.fee,e.tickSpacing,l(e.hooks)]))}function Se(e,t){let n=e.toLowerCase();if(new Set([L.toLowerCase(),qe.toLowerCase(),k.toLowerCase(),ke.toLowerCase(),ze.toLowerCase(),Oe.toLowerCase(),t.toLowerCase()]).has(n))throw new r(`Recipient ${e} is a reserved address and cannot receive Hookr limit order funds.`)}async function J(e,t,n,o){if(Ie(e))return{address:B,symbol:V.symbol,decimals:V.decimals,chainId:t};let i=l(e),u=i.toLowerCase();if(F(o)){let s=typeof o.decimals=="number"&&Number.isInteger(o.decimals)&&o.decimals>=0&&o.decimals<=255?o.decimals:void 0,a=typeof o.symbol=="string"&&o.symbol.trim()?o.symbol.trim():void 0;if(s!==void 0&&a!==void 0)return{address:i,symbol:a,decimals:s,chainId:t}}if(u===W.address.toLowerCase())return{...W,chainId:t};if(u===G.address.toLowerCase())return{...G,chainId:t};try{let[s,a]=await Promise.all([n.readContract({address:i,abi:Z,functionName:"symbol"}),n.readContract({address:i,abi:Z,functionName:"decimals"})]);if(typeof s!="string"||!s.trim()||typeof a!="number"||!Number.isInteger(a)||a<0||a>255)throw new r(`Invalid token metadata for ${i}.`);return{address:i,symbol:s.trim(),decimals:a,chainId:t}}catch{throw new r(`Could not read valid token metadata for ${i}. Refusing to guess token decimals.`)}}function ot(e){let t=F(e.key)?e.key:F(e.poolKey)?e.poolKey:void 0,n=t?.fee??e.fee??Xe,o=(typeof n=="string"&&/^\d+$/.test(n),Number(n));if(!Number.isInteger(o)||o<0||o>Ye)throw new r("Pool fee must be a valid uint24 integer (default 8388608 for Hookr dynamic fee pools).");let i=t?.tickSpacing??e.tickSpacing??Ke,u=(typeof i=="string"&&/^-?\d+$/.test(i),Number(i));if(!Number.isInteger(u)||u<=0||u>Qe)throw new r("Pool tickSpacing must be a positive int24 integer.");let s=t?.hooks??e.hooks??Fe;if(typeof s!="string"||!$(s,{strict:!1}))throw new r("Provide a valid Hookr root contract address for hooks.");let a=l(s);if(t?.currency0!==void 0&&t?.currency1!==void 0||e.currency0!==void 0&&e.currency1!==void 0){let m=T(t?.currency0??e.currency0,"currency0"),h=T(t?.currency1??e.currency1,"currency1");if(m.toLowerCase()===h.toLowerCase())throw new r("Pool currency0 and currency1 must be distinct token addresses.");if(BigInt(m)>=BigInt(h))throw new r("Pool currency0 must sort strictly before currency1 by address.");let O;if(typeof e.zeroForOne=="boolean")O=e.zeroForOne;else if(e.tokenIn!==void 0||e.from!==void 0){let x=T(e.tokenIn??e.from,"tokenIn");if(x.toLowerCase()===m.toLowerCase())O=!0;else if(x.toLowerCase()===h.toLowerCase())O=!1;else throw new r("tokenIn does not match currency0 or currency1 of the pool key.")}else throw new r("Provide zeroForOne (boolean) or tokenIn when specifying a pool key.");return{key:{currency0:m,currency1:h,fee:o,tickSpacing:u,hooks:a},zeroForOne:O}}let g=e.tokenIn??e.from,f=e.tokenOut??e.to;if(g===void 0||f===void 0)throw new r("Provide either key ({ currency0, currency1, fee, tickSpacing, hooks }) with zeroForOne or tokenIn and tokenOut addresses.");let w=T(g,"tokenIn"),b=T(f,"tokenOut");if(w.toLowerCase()===b.toLowerCase())throw new r("Input and output tokens must have distinct addresses.");let p=BigInt(w)<BigInt(b),y=p?w:b,d=p?b:w;if(typeof e.zeroForOne=="boolean"&&e.zeroForOne!==p)throw new r("zeroForOne conflicts with the canonical sorting of tokenIn and tokenOut.");return{key:{currency0:y,currency1:d,fee:o,tickSpacing:u,hooks:a},zeroForOne:p}}function it(e,t,n){let o=Y(t),i=o*o;if(n){let s=j(e.toString(),i.toString(),fe.toString(),"ceil");return BigInt(s)}let u=j(e.toString(),fe.toString(),i.toString(),"ceil");return BigInt(u)}function R(e,t){if(typeof e=="bigint"){if(e<0n)throw new r(`${t} must be a non-negative integer.`);return e}if(typeof e=="number"){if(!Number.isSafeInteger(e)||e<0)throw new r(`${t} must be a non-negative safe integer.`);return BigInt(e)}if(typeof e=="string")return H(e.trim());throw new r(`Provide ${t} as a decimal base-unit string.`)}async function st(e,t){if(t!==void 0)return R(t,"now");if(typeof e.getBlock=="function"){let n=await e.getBlock().catch(()=>{throw new r("Could not read the chain timestamp for Hookr order expiry.")});return BigInt(n.timestamp)}throw new r("Could not read the chain timestamp for Hookr order expiry.")}function Ce(e,t){return!e.changes||e.changes.length===0?"no net ERC-20 transfer deltas":e.changes.map(n=>`${rt(n.amount,n.token.decimals,t.formatAmount)} ${n.token.symbol}`).join(", ")}function xe(e,t,n,o){if(!e||!Array.isArray(e.logs))throw new r("Provide a transaction receipt with a logs array.");for(let i of e.logs){if(!i||typeof i.address!="string"||!$(i.address,{strict:!1})||!Array.isArray(i.topics)||typeof i.data!="string"||i.topics.some(u=>typeof u!="string"||!/^0x[0-9a-fA-F]{64}$/.test(u)))throw new r(`Malformed Hookr ${t} receipt log.`);if(i.address.toLowerCase()===k.toLowerCase()&&i.topics[0]?.toLowerCase()===n.toLowerCase()){if(i.topics.length!==4||!/^0x0{24}/i.test(i.topics[2])||t==="OrderCancelled"&&!/^0x0{24}/i.test(i.topics[3])||!/^0x[0-9a-fA-F]*$/.test(i.data)||i.data.length!==2+o*64)throw new r(`Malformed Hookr ${t} receipt log.`);return{topics:i.topics,data:i.data}}}throw new r(`Could not find Hookr ${t} event in transaction receipt logs.`)}function De(e){if(e.receipt!==void 0){if(!F(e.receipt)||!Array.isArray(e.receipt.logs))throw new r("Provide a transaction receipt with a logs array.");return dt({logs:e.receipt.logs})}if(e.logs!==void 0){if(!Array.isArray(e.logs))throw new r("Provide receipt logs as an array.");return at(e.logs)}}function Le(e){let t=xe(e,"OrderCreated",et,6);try{let n=pe({abi:A,eventName:"OrderCreated",...t,strict:!0});if(ye(we("bool, uint128, uint128, uint128, uint40, address"),[n.args.zeroForOne,n.args.amountIn,n.args.minAmountOut,n.args.bounty,n.args.expiry,n.args.recipient]).toLowerCase()!==t.data.toLowerCase())throw new r("Noncanonical Hookr OrderCreated event data.");return{orderId:n.args.orderId.toString(),owner:l(n.args.owner),poolId:n.args.poolId,zeroForOne:n.args.zeroForOne,amountIn:n.args.amountIn.toString(),minAmountOut:n.args.minAmountOut.toString(),bounty:n.args.bounty.toString(),expiry:n.args.expiry.toString(),recipient:l(n.args.recipient)}}catch{throw new r("Malformed Hookr OrderCreated receipt log.")}}function at(e){return Le({logs:e}).orderId}function dt(e){return Le(e).orderId}function Pt(e){let t=xe(e,"OrderCancelled",tt,2);try{let n=pe({abi:A,eventName:"OrderCancelled",...t,strict:!0});return{orderId:n.args.orderId.toString(),owner:l(n.args.owner),to:l(n.args.to),amountIn:n.args.amountIn.toString(),bounty:n.args.bounty.toString()}}catch{throw new r("Malformed Hookr OrderCancelled receipt log.")}}async function Rt(e){let t=e.clientFor(S),[n,o,i,u]=await Promise.all([t.readContract({address:k,abi:A,functionName:"router"}),t.readContract({address:k,abi:A,functionName:"registry"}),t.readContract({address:k,abi:A,functionName:"poolManager"}),t.readContract({address:k,abi:A,functionName:"lastOrderId"})]).catch(()=>{throw new r("Could not read Hookr deployment details.")}),s=l(n),a=l(o),c=l(i);return{address:k,chainId:S,router:s,registry:a,poolManager:c,lastOrderId:u.toString(),live:s.toLowerCase()===ke.toLowerCase()&&a.toLowerCase()===Me.toLowerCase()&&c.toLowerCase()===Oe.toLowerCase()}}function Pe(e){if(Array.isArray(e)){let[n,o,i,u,s,a,c,g,f,w,b]=e;return{key:Array.isArray(n)?{currency0:n[0],currency1:n[1],fee:Number(n[2]),tickSpacing:Number(n[3]),hooks:n[4]}:n,owner:o,createdAt:i,expiry:u,zeroForOne:s,status:a,recipient:c,amountIn:BigInt(g),minAmountOut:BigInt(f),bounty:BigInt(w),sqrtPriceLimitX96:BigInt(b)}}let t=e;return{key:{currency0:t.key.currency0,currency1:t.key.currency1,fee:Number(t.key.fee),tickSpacing:Number(t.key.tickSpacing),hooks:t.key.hooks},owner:t.owner,createdAt:t.createdAt,expiry:t.expiry,zeroForOne:!!t.zeroForOne,status:Number(t.status),recipient:t.recipient,amountIn:BigInt(t.amountIn),minAmountOut:BigInt(t.minAmountOut),bounty:BigInt(t.bounty),sqrtPriceLimitX96:BigInt(t.sqrtPriceLimitX96)}}async function Re(e,t,n){let o=R(t,"orderId");if(o<=0n)throw new r("Order ID must be a positive integer.");let i=e.clientFor(S),u=n?.order??await i.readContract({address:k,abi:A,functionName:"getOrder",args:[o]}).catch(()=>{throw new r(`Could not read Hookr order #${o}. Order coverage is incomplete.`)}),s=Pe(u),a=Number(s.status);if(s.owner.toLowerCase()===L.toLowerCase()||a===ee)throw new r(`Hookr order #${o} does not exist.`);let c={currency0:l(s.key.currency0),currency1:l(s.key.currency1),fee:Number(s.key.fee),tickSpacing:Number(s.key.tickSpacing),hooks:l(s.key.hooks)},g=s.zeroForOne?c.currency0:c.currency1,f=s.zeroForOne?c.currency1:c.currency0,w=m=>{let h=m.toLowerCase(),O=n?.tokens.get(h);if(O)return O;let x=J(m,S,i);return n?.tokens.set(h,x),x},[b,p]=await Promise.all([w(g),w(f)]),y=!1,d=0n;if(a===M)try{let m=await i.readContract({address:k,abi:A,functionName:"quoteFill",args:[o]});if(typeof m[0]!="boolean"||typeof m[1]!="bigint"||m[1]<0n)throw new r(`Invalid quote for Hookr order #${o}.`);y=m[0],d=m[1]}catch{throw new r(`Could not quote Hookr order #${o}. Fillability and output amount are unknown.`)}return{orderId:o.toString(),poolId:he(c),key:c,owner:l(s.owner),recipient:l(s.recipient),createdAt:BigInt(s.createdAt).toString(),expiry:BigInt(s.expiry).toString(),zeroForOne:s.zeroForOne,status:a,statusLabel:nt(a),amountIn:s.amountIn.toString(),minAmountOut:s.minAmountOut.toString(),bounty:s.bounty.toString(),sqrtPriceLimitX96:s.sqrtPriceLimitX96.toString(),tokenIn:b,tokenOut:p,fillable:y,quotedAmountOut:d.toString()}}function ct(e){return{name:"hookr_create",inputSchema:{type:"object",properties:{key:{type:"object",properties:{currency0:{type:"string"},currency1:{type:"string"},fee:{type:"number"},tickSpacing:{type:"number"},hooks:{type:"string"}}},tokenIn:{type:"string",description:"Input token address on chain 4663."},tokenOut:{type:"string",description:"Output token address on chain 4663."},zeroForOne:{type:"boolean",description:"True when selling currency0 for currency1."},amountIn:{type:"string",description:"Input amount in base units (uint128)."},minAmountOut:{type:"string",description:"Minimum net output amount in base units (uint128)."},tick:{type:"number",description:"Optional limit tick in [-887272, 887272]."},expiry:{type:"string",description:"Order expiry unix timestamp in seconds (uint40)."},deadline:{type:"string",description:"Alias for expiry unix timestamp in seconds."},bounty:{type:"string",description:"Keeper bounty in native ETH wei (uint128)."},recipient:{type:"string",description:"Order output recipient address (must be the signing wallet)."},sqrtPriceLimitX96:{type:"string",description:"Optional sqrtPriceLimitX96 (defaults to 0)."},chainId:{type:"number",description:"Must be 4663 (Robinhood Chain)."}},required:["amountIn"]},async execute(t,n){N(n);let o=l(n),i=Ae(t.chainId),u=e.clientFor(i),s=De(t),{key:a,zeroForOne:c}=ot(t),g=c?a.currency0:a.currency1,f=c?a.currency1:a.currency0,[w,b]=await Promise.all([J(g,i,u,t.tokenInMeta),J(f,i,u,t.tokenOutMeta)]),p=t.recipient??o;if(typeof p!="string"||!$(p,{strict:!1}))throw new r("Provide a valid recipient address for the Hookr limit order.");let y=l(p);if(Se(y,a.hooks),y!==o)throw new r("Hookr recipient must be the signing wallet.");if(typeof t.amountIn!="string")throw new r("Provide amountIn as an integer string in base units.");let d=H(t.amountIn);if(d<=0n||d>Ve)throw new r("amountIn must be between 1 and int128.max base units.");if(t.tick!==void 0){let P=Number(t.tick);Y(P)}let m;if(t.minAmountOut!==void 0){if(typeof t.minAmountOut!="string")throw new r("Provide minAmountOut as an integer string in base units.");m=H(t.minAmountOut)}else if(t.tick!==void 0)m=it(d,Number(t.tick),c);else throw new r("Provide minAmountOut in base units (or tick to derive minAmountOut).");if(m<=0n||m>me)throw new r("minAmountOut must be between 1 and uint128.max base units.");let h=t.sqrtPriceLimitX96!==void 0?R(t.sqrtPriceLimitX96,"sqrtPriceLimitX96"):0n;if(h>We)throw new r("sqrtPriceLimitX96 exceeds uint160 bounds.");let O=await st(u,t.now),x=t.expiry??t.deadline,I;if(x!==void 0)I=R(x,"expiry");else if(t.lifetime!==void 0||t.ttlSeconds!==void 0){let P=R(t.lifetime??t.ttlSeconds,"lifetime");I=O+P}else I=O+Ue;if(I<O+ce)throw new r(`Order expiry (${I}) is expired or below the minimum lifetime of ${ce} seconds from block timestamp ${O}.`);if(I>O+ue||I>Ge)throw new r(`Order expiry (${I}) exceeds the maximum lifetime of ${ue} seconds (365 days).`);let z=await u.readContract({address:k,abi:A,functionName:"bountyBounds",args:[a,c,d,m]}).catch(()=>{throw new r("Could not read Hookr bounty bounds.")}),_=BigInt(z[0]),q=BigInt(z[1]),X=BigInt(z[2]);if(t.bounty!==void 0&&typeof t.bounty!="string")throw new r("Provide bounty as an integer string in base units.");let C=t.bounty!==void 0?H(t.bounty):q,K=_>0n?_:q;if(C<_||K>0n&&C<K)throw new r(`Order keeper bounty (${C} wei) is underbounty: must be at least ${K} wei (default keeper bounty floor).`);if(C>X||C>me)throw new r(`Order keeper bounty (${C} wei) exceeds the maximum allowed bounty of ${X} wei.`);let te=g.toLowerCase()===L.toLowerCase(),v=[];if(!te){let P;try{let U=await u.readContract({address:g,abi:Z,functionName:"allowance",args:[o,k]});if(typeof U!="bigint"||U<0n)throw new r("Invalid token allowance.");P=U}catch{throw new r(`Could not read token allowance for ${g}. No approval was prepared.`)}P<d&&v.push(e.approval(g,k,d.toString(),i))}let He=te?d+C:C,Te=ge({abi:A,functionName:"createOrder",args:[{key:a,zeroForOne:c,amountIn:d,minAmountOut:m,sqrtPriceLimitX96:h,recipient:y,expiry:Number(I),bounty:C}]}),ne=e.formatAmount(d.toString(),w.decimals),re=e.formatAmount(m.toString(),b.decimals),oe=e.formatAmount(C.toString(),18),$e=e.unsignedTx({to:k,data:Te,value:He.toString(),chainId:i,description:`Create Hookr limit order on ${k}: sell ${ne} ${w.symbol} (${w.address}) for at least ${re} ${b.symbol} (${b.address}) with ${oe} ETH keeper bounty (fee=${a.fee}, tickSpacing=${a.tickSpacing}, expiry=${I}).`});v.push($e);let ie=await e.preview(v,o),Ee=Ce(ie,e),_e=he(a);return{txs:v,summary:`Hookr limit order prepared: sell ${ne} ${w.symbol} for at least ${re} ${b.symbol} (bounty ${oe} ETH, expiry ${I}; preview deltas: ${Ee}).`,preview:ie,poolId:_e,key:a,zeroForOne:c,amountIn:d.toString(),minAmountOut:m.toString(),bounty:C.toString(),bountyBounds:{minBounty:_.toString(),defaultBounty:q.toString(),maxBounty:X.toString()},expiry:I.toString(),recipient:y,sqrtPriceLimitX96:h.toString(),tokenIn:w,tokenOut:b,...s!==void 0?{orderId:s}:{}}}}}function ut(e){return{name:"hookr_cancel",inputSchema:{type:"object",properties:{orderId:{type:"string",description:"Hookr order ID to cancel (uint256 decimal string)."},to:{type:"string",description:"Recipient address for the refunded principal and bounty (must be the signing wallet)."},chainId:{type:"number",description:"Must be 4663 (Robinhood Chain)."}},required:["orderId"]},async execute(t,n){N(n);let o=l(n),i=Ae(t.chainId),u=De(t),s=t.orderId??t.id??u;if(s===void 0)throw new r("Provide orderId to cancel a Hookr limit order.");let a=R(s,"orderId");if(a<=0n)throw new r("orderId must be a positive integer.");let c=await Re(e,a);if(c.owner.toLowerCase()!==o.toLowerCase())throw new r(`Unauthorized cancellation: only the order owner (${c.owner}) can cancel Hookr order #${a} (caller is ${o}).`);if(c.status!==M)throw new r(`Hookr order #${a} is not open (current status: ${c.statusLabel}).`);let g=t.to??o;if(typeof g!="string"||!$(g,{strict:!1}))throw new r("Provide a valid refund recipient address for cancel.");let f=l(g);if(Se(f,c.key.hooks),f!==o)throw new r("Hookr refund recipient must be the signing wallet.");let w=ge({abi:A,functionName:"cancel",args:[a,f]}),b=e.formatAmount(c.amountIn,c.tokenIn.decimals),p=e.formatAmount(c.bounty,18),y=e.unsignedTx({to:k,data:w,value:"0",chainId:i,description:`Cancel Hookr limit order #${a} on ${k} and refund ${b} ${c.tokenIn.symbol} plus ${p} ETH bounty to ${f}.`}),d=await e.preview([y],o),m=Ce(d,e);return{txs:[y],summary:`Cancel Hookr limit order #${a}: refund ${b} ${c.tokenIn.symbol} and ${p} ETH bounty to ${f} (preview deltas: ${m}).`,preview:d,orderId:a.toString(),to:f,refundedAmountIn:c.amountIn,refundedBounty:c.bounty,tokenIn:c.tokenIn,tokenOut:c.tokenOut}}}}function lt(e){let t=performance.now()+je;return new Proxy(e,{get(n,o,i){return o!=="readContract"?Reflect.get(n,o,i):async(...u)=>{let s=t-performance.now(),a=()=>new r("Hookr scan deadline exceeded. Order coverage is incomplete; retry later.");if(s<=0)throw a();let c;try{return await Promise.race([n.readContract(...u),new Promise((g,f)=>{c=setTimeout(()=>f(a()),s)})])}finally{c!==void 0&&clearTimeout(c)}}}})}function mt(e){return async t=>{N(t);let n=l(t),o=lt(e.clientFor(S)),i={...e,clientFor:()=>o},u=await o.readContract({address:k,abi:A,functionName:"lastOrderId"}).catch(()=>{throw new r("Could not read the last Hookr order ID. Order coverage is incomplete.")});if(typeof u!="bigint"||u<0n)throw new r("Could not read a valid last Hookr order ID. Order coverage is incomplete.");let s=u,a=s>le?s-le+1n:1n;if(s<=0n)return[];let c=[],g=new Map;for(let f=a;f<=s;f+=Q){let w=Array.from({length:Number(s-f+1n<Q?s-f+1n:Q)},(p,y)=>f+BigInt(y)),b=await Promise.all(w.map(async p=>{let y=await o.readContract({address:k,abi:A,functionName:"getOrder",args:[p]}).catch(()=>{throw new r(`Could not read Hookr order #${p}. Order coverage is incomplete.`)}),d=Pe(y);if(d.owner.toLowerCase()===L||Number(d.status)===ee)throw new r(`Hookr order #${p} does not exist. Order coverage is incomplete.`);return{id:p,order:d}}));for(let{id:p,order:y}of b){if(y.owner.toLowerCase()!==n.toLowerCase()||Number(y.status)!==M)continue;let d=await Re(i,p,{order:y,tokens:g}),m=[{token:d.tokenIn,amount:d.amountIn}];BigInt(d.bounty)>0n&&m.push({token:{address:B,symbol:"ETH",decimals:18,chainId:S},amount:d.bounty});let h=e.formatAmount(d.amountIn,d.tokenIn.decimals),O=e.formatAmount(d.minAmountOut,d.tokenOut.decimals),x=e.formatAmount(d.bounty,18),I=e.formatAmount(d.quotedAmountOut,d.tokenOut.decimals);c.push({module:"hookr",id:d.orderId,chainId:S,assets:m,description:`Hookr open limit order #${d.orderId}: sell ${h} ${d.tokenIn.symbol} (${d.tokenIn.address}) for at least ${O} ${d.tokenOut.symbol} (${d.tokenOut.address}), bounty ${x} ETH, expiry ${d.expiry}, fillable=${d.fillable} (quoted output ${I} ${d.tokenOut.symbol}).`})}}return a>1n&&c.push({module:"hookr",id:"coverage",chainId:S,assets:[],description:`Hookr order coverage is incomplete: scanned IDs ${a}-${s}. Older orders require an explicit order ID.`}),c}}function Ht(e){return ve({abi:A,data:e})}var E=e=>{let t=[ct(e),ut(e)],n=mt(e);return{tools:t,positions:n}},Tt=E,$t=E,Et=E,_t=e=>{let t=E(e);return{name:"hookr",tools:t.tools,...t.positions?{positions:t.positions}:{}}},vt=E;export{k as a,Fe as b,ke as c,At as d,Me as e,ze as f,Oe as g,ht as h,qe as i,Xe as j,Ke as k,ce as l,Ue as m,ue as n,St as o,Ct as p,xt as q,Dt as r,le as s,je as t,ee as u,M as v,Ze as w,Je as x,et as y,tt as z,A,rt as B,Lt as C,he as D,Le as E,at as F,dt as G,Pt as H,Rt as I,Re as J,ct as K,ut as L,mt as M,Ht as N,E as O,Tt as P,$t as Q,Et as R,_t as S,vt as T};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as ae,o as F}from"./2IRORNOH.js";import{b as P}from"./NA7HV7BR.js";import{a as h,i as re,j as K}from"./ZUC6ILK2.js";import{a as O}from"./NGAI6GTU.js";import{randomBytes as ue,randomUUID as le}from"node:crypto";import{isDeepStrictEqual as se}from"node:util";import{decodeFunctionData as oe,encodeAbiParameters as Z,erc20Abi as J,getAddress as pe,isAddress as me,keccak256 as ee,parseAbi as te,parseAbiParameters as ne,toEventSelector as fe,zeroAddress as U}from"viem";var ie=re[h].meridian,L=ie.PredictionMarketEscrow.address,H=ie.SecondaryMarketEscrow.address,A={address:ie.CollateralToken_USDe.address,chainId:h,symbol:"USDe",decimals:18},ye="wss://relayer.predict.meridian.xyz/auction",ge=ne("(address conditionResolver,bytes conditionId,uint8 predictedOutcome)[]"),he=ne("bytes32,uint256,uint256,address,address,address,bytes"),be=ne("address,address,address,address,uint256,uint256"),j=te(["function getNonce(address) view returns (uint256)","function isNonceUsed(address,uint256) view returns (bool)"]),we=te(["function mint(((address conditionResolver,bytes conditionId,uint8 predictedOutcome)[] picks,uint256 predictorCollateral,uint256 counterpartyCollateral,address predictor,address counterparty,uint256 predictorNonce,uint256 counterpartyNonce,uint256 predictorDeadline,uint256 counterpartyDeadline,bytes predictorSignature,bytes counterpartySignature,bytes32 refCode,bytes predictorSessionKeyData,bytes counterpartySessionKeyData,address predictorSponsor,bytes predictorSponsorData) request)"]),ke=te(["function executeTrade((address token,address collateral,address seller,address buyer,uint256 tokenAmount,uint256 price,uint256 sellerNonce,uint256 buyerNonce,uint256 sellerDeadline,uint256 buyerDeadline,bytes sellerSignature,bytes buyerSignature,bytes32 refCode,bytes sellerSessionKeyData,bytes buyerSessionKeyData) request)"]),Ie=fe("Transfer(address,address,uint256)"),Be=[{name:"predictionHash",type:"bytes32"},{name:"signer",type:"address"},{name:"collateral",type:"uint256"},{name:"nonce",type:"uint256"},{name:"deadline",type:"uint256"}],Se=[{name:"tradeHash",type:"bytes32"},{name:"signer",type:"address"},{name:"nonce",type:"uint256"},{name:"deadline",type:"uint256"}];function i(t){throw new O(t)}function R(t){return(!t||typeof t!="object"||Array.isArray(t))&&i("Meridian returned an invalid exchange object."),t}function S(t,n,d=!1){return d&&typeof t=="number"&&Number.isSafeInteger(t)&&t>=0&&(t=String(t)),(typeof t!="string"||!/^\d+$/.test(t)||BigInt(t)>=1n<<256n)&&i(`Provide ${n} as a decimal base-unit integer string.`),t}function x(t){return(typeof t!="string"||!me(t,{strict:!1})||t.toLowerCase()===U)&&i("Provide a nonzero token, resolver or wallet address."),pe(t)}function V(t,n){return(typeof t!="string"||!/^0x(?:[0-9a-fA-F]{2})+$/.test(t)||n!==void 0&&t.length!==2+n*2)&&i("Meridian returned invalid hexadecimal data."),t}function v(t){return(typeof t!="string"||t.length===0||t.length>256)&&i("Meridian returned an invalid exchange identifier."),t}function w(t,n){return t?.toLowerCase()===n.toLowerCase()}function G(){return BigInt(Math.floor(Date.now()/1e3))}function Me(t,n){let d=t==="buy"?["picks","stake","minCounterpartyCollateral","usdgAmountIn","slippageBps","continuation","signature"]:["token","amount","minPrice","slippageBps","continuation","signature"];Object.keys(n).some(k=>!d.includes(k))&&i("Unsupported Meridian arguments; use the tool input schema."),n.slippageBps!==void 0&&(typeof n.slippageBps!="number"||!Number.isInteger(n.slippageBps)||n.slippageBps<0||n.slippageBps>=1e4)&&i("Slippage must be an integer from 0 to 9999 basis points.");let c=n.slippageBps;if(t==="sell"){let k=S(n.amount,"the position amount");BigInt(k)===0n&&i("The position amount must be positive.");let B=x(n.token);(w(B,A.address)||w(B,K))&&i("Choose a Meridian position token to sell.");let $;if(n.minPrice!==void 0){let e=S(n.minPrice,"the minimum sale price");BigInt(e)<=1n&&i("The minimum sale price must be greater than 1 base unit."),$=c===void 0?e:F(e,c),BigInt($)<=1n&&i("The minimum sale price after slippage must be greater than 1 base unit.")}else{let e=BigInt(k)/100n>10n**18n?BigInt(k)/100n:10n**18n;$=c===void 0?e.toString():F(e.toString(),c)}return{side:t,token:B,amount:k,minPrice:$,...c===void 0?{}:{slippageBps:c}}}(!Array.isArray(n.picks)||n.picks.length<1||n.picks.length>10)&&i("Provide between one and ten Meridian picks.");let f=n.picks.map(k=>{let B=R(k);return(Object.keys(B).some($=>!["conditionResolver","conditionId","predictedOutcome"].includes($))||B.predictedOutcome!==0&&B.predictedOutcome!==1)&&i("Each pick needs a resolver, condition ID and outcome 0 or 1."),{conditionResolver:x(B.conditionResolver),conditionId:V(B.conditionId),predictedOutcome:B.predictedOutcome}}).sort((k,B)=>{let $=`${k.conditionResolver.toLowerCase()}:${k.conditionId.toLowerCase()}:${k.predictedOutcome}`,e=`${B.conditionResolver.toLowerCase()}:${B.conditionId.toLowerCase()}:${B.predictedOutcome}`;return $<e?-1:$>e?1:0}),m=f.map(k=>`${k.conditionResolver.toLowerCase()}:${k.conditionId.toLowerCase()}`);new Set(m).size!==f.length&&i("Do not repeat a condition in the same prediction.");let I=S(n.stake,"the USDe stake");BigInt(I)<10n**18n&&i("Meridian requires a stake of at least 1 USDe.");let M=n.usdgAmountIn===void 0?void 0:S(n.usdgAmountIn,"the USDG swap amount");M!==void 0&&BigInt(M)===0n&&i("The USDG swap amount must be positive.");let _=n.minCounterpartyCollateral!==void 0?S(n.minCounterpartyCollateral,"the minimum counterparty collateral"):F(I,c??ae);return BigInt(_)<=1n&&i("The minimum counterparty collateral must be greater than 1 base unit."),{side:t,picks:f,stake:I,minCounterpartyCollateral:_,...M===void 0?{}:{usdgAmountIn:M},...c===void 0?{}:{slippageBps:c}}}var X=class{constructor(n,d){this.id=n;this.prefix=d;this.socket=new globalThis.WebSocket(ye),this.socket.addEventListener("open",()=>{this.opened=!0,this.notify?.()}),this.socket.addEventListener("close",()=>this.stop("Meridian exchange socket was lost. Start a fresh auction.")),this.socket.addEventListener("error",()=>this.stop("Meridian exchange socket failed. Start a fresh auction.")),this.socket.addEventListener("message",c=>{try{(typeof c.data!="string"||c.data.length>65536)&&i("Meridian returned a malformed exchange message.");let f=R(JSON.parse(c.data));if(f.type==="pong")return;let m=v(f.type),I=R(f.payload);if((m==="error"||m===`${d}.error`||m===`${d}.rejected`||m===`${d}.failed`||m===`${d}.expired`)&&i("Meridian rejected or failed the exchange. Start a fresh auction."),m===`${d}.ack`){(I.id!==n||this.auctionId!==void 0)&&i("Meridian acknowledged a different exchange."),this.auctionId=v(I.auctionId);return}if((!m.startsWith(`${d}.`)||I.auctionId!==this.auctionId||!this.auctionId)&&i("Meridian returned a message for a different exchange."),(m===`${d}.pending`||m===`${d}.filled`)&&!this.accepting&&i("Meridian returned settlement before acceptance."),m===`${d}.pending`)return;this.queue.length>=16&&i("Meridian returned too many exchange messages."),this.queue.push({type:m,payload:I}),this.notify?.()}catch{this.stop("Meridian rejected or returned an invalid exchange message. Start a fresh auction.")}})}id;prefix;socket;queue=[];notify;error;auctionId;accepting=!1;opened=!1;check(){if(this.error)throw this.error;this.socket.readyState>1&&i("Meridian exchange socket was lost. Start a fresh auction.")}stop(n){this.error??=new O(n),this.notify?.(),this.socket.readyState<2&&this.socket.close()}async wait(n,d=3e4){return new Promise((c,f)=>{let m=setTimeout(()=>this.stop("Meridian exchange timed out. Start a fresh auction."),d),I=()=>{try{if(this.check(),n===void 0?!this.opened:!this.queue.length)return;let M=n===void 0?void 0:this.queue.shift();M&&M.type!==`${this.prefix}.${n}`&&i("Meridian returned an unexpected exchange stage."),clearTimeout(m),this.notify=void 0,c(M?.payload??{})}catch(M){clearTimeout(m),this.notify=void 0,f(M)}};this.notify=I,I()})}send(n,d){this.check(),this.socket.readyState!==1&&i("Meridian exchange socket is not open."),n==="accept"&&(this.accepting=!0),this.socket.send(JSON.stringify({...n==="start"?{id:this.id}:{},type:`${this.prefix}.${n}`,payload:d}))}};function Y(t){return ee(Z(ge,[t]))}function $e(t,n,d){return ee(Z(he,[Y(t.picks),BigInt(t.stake),BigInt(d.counterpartyCollateral),n,d.counterparty,U,"0x"]))}function Ae(t,n,d,c){return ee(Z(be,[t.token,A.address,n,d,BigInt(t.amount),BigInt(c)]))}function Q(t,n){let{input:d,wallet:c,nonce:f,deadline:m}=t,I={name:d.side==="buy"?"PredictionMarketEscrow":"SecondaryMarketEscrow",version:"1",chainId:h,verifyingContract:t.continuation.escrowContract};return(!f||!m)&&i("Meridian exchange is missing its signing terms."),d.side==="buy"?(n||i("Meridian has not returned a winning bid."),{domain:I,primaryType:"MintApproval",types:{MintApproval:Be},message:{predictionHash:$e(d,c,n),signer:c,collateral:d.stake,nonce:f,deadline:m}}):{domain:I,primaryType:"TradeApproval",types:{TradeApproval:Se},message:{tradeHash:Ae(d,c,n?n.buyer:U,n?n.price:"0"),signer:c,nonce:f,deadline:m}}}function de(t){let n=[BigInt(t.deadline)],d=t.continuation;if(d.stage==="primary_accept"||d.stage==="secondary_accept"){n.push(BigInt(d.acceptDeadline));let c=d.winningBid;d.stage==="primary_accept"&&n.push(BigInt(c.counterpartyDeadline)),c.buyerDeadline!==void 0&&n.push(BigInt(S(c.buyerDeadline,"the buyer deadline",!0)))}return n.reduce((c,f)=>c<f?c:f)}function z(t){t.channel?.check(),t.deadline&&G()>=de(t)&&i("Meridian exchange expired. Start a fresh auction.")}var Ne=t=>{let n=new Map;function d(e){clearTimeout(e.timer),n.delete(e.continuation.requestId),e.channel?.stop("Meridian exchange is closed or expired. Start a fresh auction.")}function c(e,a){clearTimeout(e.timer),e.timer=setTimeout(()=>d(e),a),e.timer.unref?.()}function f(e){let{wallet:a,chainId:s,escrowContract:p,requestId:u}=e.continuation;return{wallet:a,chainId:s,escrowContract:p,requestId:u}}async function m(e){let{input:a,wallet:s}=e,p=t.clientFor(h),u=a.side==="buy"?A.address:a.token,r=a.side==="buy"?a.stake:a.amount,[y,b]=await Promise.all([p.readContract({address:u,abi:J,functionName:"balanceOf",args:[s]}),p.readContract({address:u,abi:J,functionName:"allowance",args:[s,e.continuation.escrowContract]})]);if(a.side==="sell"&&await p.readContract({address:u,abi:J,functionName:"decimals"})!==18&&i("Meridian position tokens must have 18 decimals."),y>=BigInt(r)&&b>=BigInt(r))return;(e.continuation.stage==="primary_accept"||e.continuation.stage==="secondary_accept")&&i("Meridian prerequisites changed during the auction. Start a fresh auction after funding and approval.");let l,C;if(y<BigInt(r)){a.side==="sell"&&i("The wallet does not have enough position tokens to sell."),a.usdgAmountIn||i("Not enough USDe. Provide usdgAmountIn in USDG base units to quote a swap before the auction.");let g=await t.quoteSwap({from:K,to:A.address,amountIn:a.usdgAmountIn,...a.slippageBps===void 0?{}:{slippageBps:a.slippageBps}},s);(G()>=BigInt(S(g.expiresAt,"the swap expiry"))||BigInt(S(g.minAmountOut,"the swap minimum"))+y<BigInt(r))&&i("The USDG swap minimum does not cover the USDe stake, or the quote expired. Request a fresh quote with sufficient input.");let o=await t.buildSwap(g.quoteId,s);(!("txs"in o)||!o.txs.length)&&i("The swap coordinator did not return prerequisite transactions."),l=o.txs,C=`${o.summary} Minimum USDe output: ${g.minAmountOut} base units (18 decimals).`}else l=[t.approval(u,e.continuation.escrowContract,r,h)],C=`Approve exactly ${r} base units (18 decimals) of ${u} for ${e.continuation.escrowContract} on chain ${h}.`;l.some(g=>g.chainId!==h)&&i("Meridian prerequisite transactions must use chain 4663.");let D=await t.preview(l,s),T=D.changes.map(g=>{let o=g.amount.startsWith("-");return`${o?"-":"+"}${t.formatAmount(o?g.amount.slice(1):g.amount,g.token.decimals)} ${g.token.symbol} (${g.token.address}, chain ${g.token.chainId}, ${g.token.decimals} decimals)`}).join("; ");return e.channel?.stop("Meridian prerequisites must be mined before the auction."),e.channel=void 0,e.deadline=void 0,e.nonce=void 0,e.continuation={...f(e),stage:"prerequisites"},{steps:l.map(g=>({kind:"tx",tx:g})),continuation:structuredClone(e.continuation),summary:`${C} ${D.summary} ${T}. Mine these prerequisites before continuing; no RFQ has started.`}}function I(e){let a=e.continuation;a.stage==="prerequisites"&&i("Meridian prerequisites need to finish before signing."),z(e),c(e,Number(de(e)-G())*1e3);let s=e.input,p=s.side==="buy"?`Stake ${s.stake} base units of USDe (${A.address}, 18 decimals)`:`Sell ${s.amount} base units of position ${s.token} (18 decimals)`,u=a.stage==="secondary_start"?"Initial buyer-zero, price-zero intent only.":a.stage==="primary_accept"?`Counterparty ${a.winningBid.counterparty}; counterparty collateral ${a.winningBid.counterpartyCollateral} USDe base units; counterparty deadline ${a.winningBid.counterpartyDeadline}.`:`Buyer ${a.winningBid.buyer}; receive ${a.winningBid.price} USDe base units (${A.address}, 18 decimals).`;return{steps:[{kind:"typedData",request:structuredClone(a.request)}],continuation:structuredClone(a),summary:`${p} on chain ${h}. Approval was checked on chain. ${u} Sign locally for domain ${a.request.domain.name}, version 1, escrow ${a.escrowContract}, signature deadline ${e.deadline}${"acceptDeadline"in a?`, acceptance deadline ${a.acceptDeadline}`:""}. External relayer settlement is pending; a signature is not a fill.`}}async function M(e){let a=await e.channel.wait("result"),s=R(a.winningBid),p=v(a.auctionId);s.auctionId!==p&&i("Meridian winning bid belongs to another auction.");let u=S(a.acceptDeadline,"the acceptance deadline",!0);if(e.input.side==="buy"){let r={auctionId:p,counterparty:v(s.counterparty),counterpartyCollateral:S(s.counterpartyCollateral,"the counterparty collateral"),counterpartyNonce:S(s.counterpartyNonce,"the counterparty nonce",!0),counterpartyDeadline:S(s.counterpartyDeadline,"the counterparty deadline",!0),receivedAt:v(s.receivedAt)};x(r.counterparty),(!Number.isFinite(Date.parse(r.receivedAt))||BigInt(r.counterpartyCollateral)<=1n||BigInt(r.counterpartyCollateral)<BigInt(e.input.minCounterpartyCollateral))&&i("Meridian winning bid counterparty collateral is below the caller minimum."),e.continuation={...f(e),stage:"primary_accept",auctionId:p,winningBid:r,acceptDeadline:u,request:Q(e,r)}}else{let r={auctionId:p,buyer:v(s.buyer),price:S(s.price,"the sale price"),...s.buyerDeadline!==void 0?{buyerDeadline:S(s.buyerDeadline,"the buyer deadline",!0)}:{},...s.buyerNonce!==void 0?{buyerNonce:S(s.buyerNonce,"the buyer nonce",!0)}:{},...s.receivedAt!==void 0?{receivedAt:v(s.receivedAt)}:{}};x(r.buyer),(BigInt(r.price)<=1n||BigInt(r.price)<BigInt(e.input.minPrice))&&i("Meridian winning bid sale price is below the caller minimum."),e.continuation={...f(e),stage:"secondary_accept",auctionId:p,winningBid:r,acceptDeadline:u,request:Q(e,r)}}return I(e)}async function _(e,a){let s=e.continuation;s.stage!=="primary_accept"&&s.stage!=="secondary_accept"&&i("Meridian exchange is not ready for acceptance."),z(e),e.channel.send("accept",{auctionId:s.auctionId,[e.input.side==="buy"?"predictorSignature":"sellerSignature"]:a}),c(e,15e4);let p=await e.channel.wait("filled",12e4),u=V(p.transactionHash,32),r=t.clientFor(h),[y,b]=await Promise.all([r.waitForTransactionReceipt({hash:u,timeout:12e4}),r.getTransaction({hash:u})]);(y.status!=="success"||!w(y.transactionHash,u)||!w(b.hash,u)||!w(y.to,s.escrowContract)||!w(b.to,s.escrowContract)||b.chainId!==h)&&i("Meridian fill has no matching successful receipt on chain 4663.");let{input:l,wallet:C}=e;if(l.side==="buy"&&s.stage==="primary_accept"){let o=oe({abi:we,data:b.input}).args[0];(!w(Y([...o.picks]),Y(l.picks))||o.predictorCollateral!==BigInt(l.stake)||o.counterpartyCollateral!==BigInt(s.winningBid.counterpartyCollateral)||!w(o.predictor,C)||!w(o.counterparty,s.winningBid.counterparty)||o.predictorNonce!==BigInt(e.nonce)||o.counterpartyNonce!==BigInt(s.winningBid.counterpartyNonce)||o.predictorDeadline!==BigInt(e.deadline)||o.counterpartyDeadline!==BigInt(s.winningBid.counterpartyDeadline)||!w(o.predictorSponsor,U)||o.predictorSponsorData!=="0x"||o.predictorSignature!==a)&&i("Meridian mint receipt does not match the accepted prediction.")}else if(l.side==="sell"&&s.stage==="secondary_accept"){let o=oe({abi:ke,data:b.input}).args[0];(!w(o.token,l.token)||!w(o.collateral,A.address)||!w(o.seller,C)||!w(o.buyer,s.winningBid.buyer)||o.tokenAmount!==BigInt(l.amount)||o.price!==BigInt(s.winningBid.price)||o.sellerNonce!==BigInt(e.nonce)||o.sellerDeadline!==BigInt(e.deadline)||o.sellerSignature!==a)&&i("Meridian sale receipt does not match the accepted trade.")}let D=new Map,T=new Map;for(let o of y.logs){if(o.topics[0]!==Ie||o.topics.length!==3)continue;(!/^0x[0-9a-fA-F]{64}$/.test(o.data)||!o.topics.slice(1).every(ce=>/^0x0{24}[0-9a-fA-F]{40}$/.test(ce)))&&i("Meridian receipt has malformed transfer logs.");let E=`0x${o.topics[1].slice(-40)}`,N=`0x${o.topics[2].slice(-40)}`,q=o.address.toLowerCase(),W=BigInt(o.data);D.set(q,(D.get(q)??0n)+(w(N,C)?W:0n)-(w(E,C)?W:0n)),w(E,U)&&w(N,C)&&T.set(q,(T.get(q)??0n)+W)}let g;if(l.side==="buy"&&s.stage==="primary_accept"){let o=BigInt(l.stake)+BigInt(s.winningBid.counterpartyCollateral),E=[...T].filter(([N,q])=>!w(N,A.address)&&q===o&&D.get(N)===o);(E.length!==1||D.get(A.address.toLowerCase())!==-BigInt(l.stake))&&i("Meridian mint receipt does not prove the expected collateral and position delta."),g=`${o} base units received in position ${E[0][0]}`}else l.side==="sell"&&s.stage==="secondary_accept"?((D.get(l.token.toLowerCase())!==-BigInt(l.amount)||D.get(A.address.toLowerCase())!==BigInt(s.winningBid.price))&&i("Meridian sale receipt does not prove the expected collateral and position delta."),g=`${l.amount} base units sold from position ${l.token}; ${s.winningBid.price} USDe base units received`):i("Meridian fill has a different exchange stage.");return{txs:[],hashes:[u],status:"mined",summary:`Mined: ${u}. Status: mined. Meridian ${l.side} filled by the external relayer. Successful receipt and transfer deltas verified on chain ${h}: ${g} (18 decimals); collateral USDe ${A.address} (18 decimals).`}}async function k(e,a,s){let p=x(s),u=Me(e,a),r;if(a.continuation!==void 0){let y=R(a.continuation),b=n.get(v(y.requestId));b||i("Meridian exchange is lost or expired. Start a fresh auction."),(!w(b.wallet,p)||!se(b.input,u)||!se(b.continuation,y))&&i("Meridian continuation or arguments do not match the active wallet exchange."),b.busy&&i("Meridian exchange is already processing this continuation."),r=b}else{a.signature!==void 0&&i("A signature requires an active Meridian continuation."),n.size>=1e3&&i("Too many active Meridian exchanges. Please try again later.");let y=le(),b=setTimeout(()=>{let l=n.get(y);l&&d(l)},9e5);b.unref?.(),r={input:u,wallet:p,continuation:{stage:"prerequisites",wallet:p,chainId:h,escrowContract:e==="buy"?L:H,requestId:y},busy:!1,timer:b},n.set(y,r)}r.busy=!0;try{z(r),await t.clientFor(h).getChainId()!==h&&i("Meridian requires an RPC on chain 4663.");let y=r.continuation.stage;y==="prerequisites"&&a.signature!==void 0&&i("Do not sign before Meridian prerequisites have mined.");let b=await m(r);if(b)return b;if(y==="prerequisites")return r.nonce=e==="buy"?(await t.clientFor(h).readContract({address:L,abi:j,functionName:"getNonce",args:[p]})).toString():BigInt(`0x${ue(16).toString("hex")}`).toString(),r.deadline=(G()+300n).toString(),e==="sell"&&await t.clientFor(h).readContract({address:H,abi:j,functionName:"isNonceUsed",args:[p,BigInt(r.nonce)]})&&i("Meridian seller nonce is already used. Start a fresh auction."),r.channel=new X(r.continuation.requestId,e==="buy"?"auction":"secondary.auction"),await r.channel.wait(),u.side==="buy"?(r.channel.send("start",{id:r.continuation.requestId,picks:u.picks,predictorCollateral:u.stake,predictor:p,predictorNonce:r.nonce,predictorDeadline:r.deadline,chainId:h,escrowContract:L,mode:"blind"}),await M(r)):(r.continuation={...f(r),stage:"secondary_start",request:Q(r)},I(r));let l=V(a.signature);if(e==="sell"&&await t.clientFor(h).readContract({address:H,abi:j,functionName:"isNonceUsed",args:[p,BigInt(r.nonce)]})&&i("Meridian seller nonce is already used. Start a fresh auction."),e==="buy"&&(await t.clientFor(h).readContract({address:L,abi:j,functionName:"getNonce",args:[p]})).toString()!==r.nonce&&i("Meridian predictor nonce changed. Start a fresh auction."),z(r),y==="secondary_start"&&u.side==="sell")return r.channel.send("start",{id:r.continuation.requestId,token:u.token,collateral:A.address,tokenAmount:u.amount,seller:p,sellerNonce:r.nonce,sellerDeadline:r.deadline,chainId:h,escrowContract:H,mode:"blind",sellerSignature:l}),await M(r);let C=await _(r,l);return d(r),C}catch(y){throw d(r),new O(t.plainError(y))}finally{r.busy=!1}}let B={type:"string",pattern:"^0x[0-9a-fA-F]{40}$"},$={continuation:{type:"object"},signature:{type:"string",pattern:"^0x([0-9a-fA-F]{2})+$"}};return{tools:[{name:"meridian_buy",inputSchema:{type:"object",additionalProperties:!1,required:["picks","stake"],properties:{...$,stake:P("USDe stake in base units, 18 decimals, chain 4663."),minCounterpartyCollateral:P("Optional caller minimum counterparty collateral in USDe base units, 18 decimals."),usdgAmountIn:P("Optional exact USDG swap input in base units, 6 decimals, if USDe balance is insufficient."),slippageBps:{type:"integer",minimum:0,maximum:9999},picks:{type:"array",minItems:1,maxItems:10,items:{type:"object",additionalProperties:!1,required:["conditionResolver","conditionId","predictedOutcome"],properties:{conditionResolver:B,conditionId:{type:"string",pattern:"^0x([0-9a-fA-F]{2})+$"},predictedOutcome:{type:"integer",enum:[0,1]}}}}}},execute:(e,a)=>k("buy",e,a)},{name:"meridian_sell",inputSchema:{type:"object",additionalProperties:!1,required:["token","amount"],properties:{...$,token:{...B,description:"Position token address on chain 4663."},amount:P("Position amount in base units, 18 decimals."),minPrice:P("Optional caller minimum sale price in USDe base units, 18 decimals."),slippageBps:{type:"integer",minimum:0,maximum:9999}}},execute:(e,a)=>k("sell",e,a)}]}};export{Ne as a};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as u,b as R,i as M}from"./ZUC6ILK2.js";import{a as o}from"./NGAI6GTU.js";import{a as D}from"./JXOEJPJ4.js";import{createPublicClient as A,custom as v,defineChain as F}from"viem";var g="https://rpc.mainnet.chain.robinhood.com",$="oak-core/0.1.0",H=M[4663].ponsClaims.multicall3.address,E=new Set(["eth_sendTransaction","eth_sendRawTransaction","eth_sign","personal_sign","eth_signTransaction","eth_signTypedData","eth_signTypedData_v1","eth_signTypedData_v3","eth_signTypedData_v4","wallet_sendTransaction","wallet_sign"]);function S(e=u,t=g){if(!Number.isSafeInteger(e)||e<=0)throw new o("Provide a positive integer chain ID.");let n=e===u?"Robinhood Chain":e===R?"Robinhood Chain Testnet":`Chain ${e}`;return F({id:e,name:n,nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:[t]}},...e===u?{contracts:{multicall3:{address:H}}}:{}})}function Q(e=u,t){if(t?.chain&&t.chain.id===e)return t.chain.contracts?.multicall3?.address;if(!(!Number.isSafeInteger(e)||e<=0))return S(e).contracts?.multicall3?.address}function j(e,t){if(e===null)return t;if(/^\d+(\.\d+)?$/.test(e.trim()))return Number(e.trim())*1e3;let n=Date.parse(e);return Number.isFinite(n)?Math.max(0,n-Date.now()):t}function T(e,t){return t.throwIfAborted(),e<=0?Promise.resolve():new Promise((n,i)=>{let r=()=>{clearTimeout(a),i(t.reason)},a=setTimeout(()=>{t.removeEventListener("abort",r),n()},e);t.addEventListener("abort",r,{once:!0})})}function z(e,t,n){let i=e?.trim()||n?.rpcUrl?.trim()||n?.rpcUrls?.[t]?.trim(),r=t===u?process.env.OAK_RPC_URL?.trim():t===R?(process.env.OAK_TESTNET_RPC_URL??process.env.OAK_RPC_URL)?.trim():process.env[`OAK_RPC_URL_${t}`]?.trim(),a=i||r||(t===u?g:void 0);if(!a)throw new o(`No RPC URL configured for chain ${t}.`);if((n?.requireKeyedRpc??process.env.NODE_ENV==="production")&&t===u&&a===g)throw new o("Production requires a keyed OAK_RPC_URL.");return a}var U=1e4;async function x(e,t=U){if(!Number.isFinite(t)||t<=0||t>3e4)throw new o("RPC timeout must be greater than zero and at most 30000 ms.");let n=new AbortController,i;try{return await Promise.race([new Promise((r,a)=>{i=setTimeout(()=>{a(new o("The RPC request timed out. Please try again.")),n.abort()},t)}),e(n.signal)])}finally{clearTimeout(i)}}function J(e,t=u,n){let i=typeof e=="object"&&e!==null,r=i?e:n??{},a=typeof e=="string"?e:r.rpcUrl,p=i?r.chainId??t:t;if(!Number.isSafeInteger(p)||p<=0)throw new o("Provide a positive integer chain ID.");if(r.timeoutMs!==void 0&&(!Number.isFinite(r.timeoutMs)||r.timeoutMs<=0||r.timeoutMs>3e4))throw new o("RPC timeout must be greater than zero and at most 30000 ms.");let P=z(a,p,r),w=S(p,P);if(r.transport){let d=r.transport({chain:w,retryCount:0});return A({chain:w,transport:v({request:f=>{if(E.has(f.method)||/^(eth_send|eth_sign|personal_sign|wallet_)/i.test(f.method))throw new o("Read-only RPC client does not allow this method.");return x(()=>d.request(f),r.timeoutMs)}},{retryCount:0})})}let N=r.fetch??globalThis.fetch,L=r.userAgent?.trim()||$,C=r.retries??3,b=r.retryDelayMs??250,_=r.maxRetryDelayMs??3e4,O=1,q=v({async request({method:d,params:f}){return x(async h=>{if(E.has(d)||/^(eth_send|eth_sign|personal_sign|wallet_)/i.test(d))throw new o(`Read-only RPC client does not allow ${d}.`);let k=O++,K=JSON.stringify({jsonrpc:"2.0",id:k,method:d,params:f??[]});for(let c=0;;c++){h.throwIfAborted();let m=await N(P,{method:"POST",redirect:"error",headers:{"content-type":"application/json","user-agent":L},body:K,signal:h});if(m.status===429){let y=b*2**c*(.5+Math.random()),l=Math.max(y,j(m.headers.get("retry-after"),y));if(await m.body?.cancel?.(),c>=C||l>_||l>=(r.timeoutMs??U))throw new o(`The RPC endpoint is busy; retry in ${Math.max(1,Math.ceil(l/1e3))} seconds.`);await T(l,h);continue}if(!m.ok){let y=m.status>=500;if(await m.body?.cancel?.(),!y||c>=C)throw new o(`The RPC endpoint returned HTTP ${m.status}. Please try again.`);await T(Math.min(_,b*2**c*(.5+Math.random())),h);continue}let s;try{s=await m.json()}catch{throw new o("The RPC endpoint returned malformed JSON.")}if(s.error){if(s.error.code===429||/rate limit|too many requests/i.test(s.error.message??"")){if(c>=C)throw new o(`The RPC endpoint is busy; retry in ${Math.max(1,Math.ceil(b*2**c/1e3))} seconds.`);await T(Math.min(_,b*2**c*(.5+Math.random())),h);continue}let l=new Error(D(s.error.message??"RPC error"));throw typeof s.error.code=="number"&&(l.code=s.error.code),s.error.data!==void 0&&(l.data=s.error.data),l}return s.result}},r.timeoutMs)}},{retryCount:0});return A({chain:w,transport:q})}function W(e={}){let t=new Map;return n=>{let i=t.get(n);if(i)return i;let r=J(e.rpcUrls?.[n],n,e);return t.set(n,r),r}}export{g as a,$ as b,H as c,S as d,Q as e,U as f,x as g,J as h,W as i};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as m,b as M}from"./Y3P6SUNL.js";import{a as s,d as D}from"./NGAI6GTU.js";var y=class extends s{constructor(n){super(`The service returned HTTP ${n.status}. Please try again.`);this.response=n}response};function d(){return new s("The request was cancelled.")}async function p(t,a){if(a.aborted)throw d();await new Promise((n,i)=>{let o=setTimeout(()=>{a.removeEventListener("abort",w),n()},t),w=()=>{clearTimeout(o),a.removeEventListener("abort",w),i(d())};a.addEventListener("abort",w,{once:!0})})}function O(t,a){if(t===null)return a;if(/^\d+(\.\d+)?$/.test(t))return Number(t)*1e3;let n=Date.parse(t);return Number.isFinite(n)?Math.max(0,n-Date.now()):a}function q(t={}){let a=t.fetch??globalThis.fetch,n=t.timeoutMs??1e4,i=t.retries??2,u=t.retryDelayMs??250,o=t.maxRetryDelayMs??3e4;if(!Number.isInteger(i)||i<0||i>10||!Number.isFinite(n)||n<=0||n>2147483647||!Number.isFinite(u)||u<0||!Number.isFinite(o)||o<0||o>2147483647)throw new s("Provide finite timeout and retry bounds, with 0 to 10 retries.");return async(w,P)=>{let r=new Request(w,{...P,redirect:"error"}),c=M(a,r.url),E=r.method==="GET"||r.method==="HEAD";for(let b=0;;b++){if(r.signal.aborted)throw d();if(c){let e=Date.now()+2e3,l=c.reserve();for(l>0&&await p(l,r.signal);;){if(r.signal.aborted)throw d();if(Date.now()>e)throw new m(c.label,1);let f=c.dispatchDelay();if(f===0)break;if(Date.now()+f>e)throw new m(c.label,f/1e3);await p(f,r.signal)}}if(r.signal.aborted)throw d();let T=new AbortController,v=()=>T.abort();r.signal.addEventListener("abort",v,{once:!0});let g=!1,k=setTimeout(()=>{g=!0,T.abort()},n),x;try{let e=await a(r.clone(),{signal:T.signal});if(e.redirected)throw await e.body?.cancel(),new s("The request failed. Please try again.");if(e.ok){let l=await e.text();if(r.method!=="HEAD"&&e.status!==204&&e.status!==205)try{JSON.parse(l)}catch{throw new s("The service returned malformed JSON.")}return new Response(l||null,{status:e.status,statusText:e.statusText,headers:e.headers})}else{let l=e.status===429||e.status>=500,f=u*2**b*(.5+Math.random()),h=Math.max(f,O(e.headers.get("Retry-After"),f));if(e.status===429&&c?.backoff(h),!E||!l||b>=i||h>o){if(e.status===429)throw await e.body?.cancel(),new m(c?.label??"The service",Math.max(1,h/1e3));let N=await e.text();throw new y(new Response(N||null,{status:e.status,statusText:e.statusText,headers:e.headers}))}await e.body?.cancel(),x=h}}catch(e){throw r.signal.aborted?d():g?new s("The request timed out. Please try again."):e instanceof y?e:new s(D(e))}finally{clearTimeout(k),r.signal.removeEventListener("abort",v)}await p(x,r.signal)}}}async function H(t,a,n,i){let u=await t(a,n);if(!u.ok)throw new s(`The service returned HTTP ${u.status}. Please try again.`);let o;try{o=await u.json()}catch{throw new s("The service returned malformed JSON.")}try{if(i(o))return o}catch{}throw new s("The service returned an unexpected response.")}export{y as a,q as b,H as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as ce}from"./YX4NVVSX.js";import{a as ie}from"./BHR46XNW.js";import{a as j}from"./73EABRFC.js";import{a as U,b as P}from"./GDP4JSAX.js";import{b as ae,c as re}from"./MK6L6TGI.js";import{a as F}from"./GIBF3YJO.js";import{a as H}from"./A5ITAEUQ.js";import{a as ne,b as B,c as te}from"./5HCXZWUH.js";import{e as se,g as N,h as oe}from"./M6JGTQRY.js";import{a as T,b as _,c as L,d as Y,i as I,j as ee,t as D}from"./ZUC6ILK2.js";import{a as h}from"./NGAI6GTU.js";import{a as b,b as K,c as V}from"./JXOEJPJ4.js";import{decodeFunctionResult as Se,encodeFunctionData as xe,erc20Abi as W,getAddress as w,isAddress as M,parseAbi as J}from"viem";var he="https://api.robinhood.com/rhj/assets",Oe={address:U,symbol:"ETH",decimals:18,chainId:T},G={address:w(ee),symbol:"USDG",decimals:Y,chainId:T},Z={address:w(I[4663].tokens.WETH.address),symbol:"WETH",decimals:18,chainId:T},pe={address:w(I[4663].meridian.CollateralToken_USDe.address),symbol:"USDe",decimals:18,chainId:T};function $(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function z(e,t=T,s={}){let n=Array.isArray(e)?e:$(e)&&Array.isArray(e.assets)?e.assets:void 0;if(!n)throw new h("Official stock asset list response is malformed.");let a=new Map,r=new Map;if(n.length>1e4)throw new h("Official stock asset list exceeds the lookup limit.");for(let i of n){if(!$(i))continue;let o=i;if(typeof o.tokenSymbol!="string"||!o.tokenSymbol.trim()||!Array.isArray(o.deployments))continue;if(o.deployments.length>100)throw new h("Official stock deployment list exceeds the lookup limit.");let d=o.tokenSymbol.trim();if(!/^[A-Za-z0-9.$_-]{1,32}$/.test(d))throw new h(`Invalid official stock ticker ${b(d)}.`);let k=typeof o.tokenDecimals=="number"&&Number.isInteger(o.tokenDecimals)&&o.tokenDecimals>=0&&o.tokenDecimals<=255?o.tokenDecimals:18;for(let m of o.deployments){if(!$(m))continue;let u=m;if(u.chainId!==t||typeof u.contractAddress!="string"||!M(u.contractAddress,{strict:!1}))continue;let p=w(u.contractAddress),f=p.toLowerCase(),y=d.toUpperCase(),c=r.get(y);if(!s.allowAmbiguousSymbols&&c&&c!==f)throw new h(`Ambiguous official stock ticker ${b(d)} across multiple addresses.`);r.set(y,f),a.set(f,{address:p,symbol:d,decimals:k,chainId:t,...s.includeNames&&typeof o.tokenName=="string"&&o.tokenName.trim()?{name:o.tokenName.trim()}:{}})}}return[...a.values()]}function Ce(e,t){if(typeof e.address!="string"||!M(e.address,{strict:!1}))return!1;let s=e.chainId??T,n=e.address.toLowerCase();return t.some(a=>a.chainId===s&&a.address.toLowerCase()===n&&a.symbol===e.symbol)}function de(e,t){H(e.address);let s=e.chainId??T,n=w(e.address),a=n.toLowerCase(),r=e.symbol.trim().toUpperCase(),i=t.find(d=>d.chainId===s&&d.address.toLowerCase()===a),o=t.find(d=>d.chainId===s&&d.symbol.toUpperCase()===r);if(i){if(e.symbol!==i.symbol)throw new h(`Token at ${n} does not match official stock ticker ${b(i.symbol)} (received ${b(e.symbol)}).`);if(e.decimals!==void 0&&e.decimals!==i.decimals)throw new h(`Token ${b(i.symbol)} at ${n} does not match official decimals ${i.decimals}.`);return i}if(o)throw new h(`Token symbol ${b(e.symbol)} at ${n} does not match the official stock contract address ${o.address}.`);return{address:n,symbol:e.symbol.trim(),decimals:e.decimals??18,chainId:s}}var le=new WeakMap,q=new WeakMap;function R(e,t){return(q.get(e)??N)(t)}async function ye(e){let t=e?.http??ae(),s=e?.url??he,n=e?.chainId??T,a=te(t),r=le.get(a);r||(r=new ne(3e4),le.set(a,r));let{value:i}=await R(t,()=>r.read(`${n}:${s}`,async()=>{let o=await N(d=>re(a,s,{method:"GET",signal:d},k=>$(k)||Array.isArray(k)));return z(o,n,{allowAmbiguousSymbols:!0}),o}));return z(i,n,e)}var ve=J(["function aggregate3((address target, bool allowFailure, bytes callData)[] calls) payable returns ((bool success, bytes returnData)[] returnData)"]);function ue(e){let t=e,s=new Set;for(;t&&typeof t=="object"&&!s.has(t)&&s.size<10;){s.add(t);let n=t;if(n.name==="ContractFunctionZeroDataError"||n.name==="AbiDecodingZeroDataError")return!0;let a=`${typeof n.shortMessage=="string"?n.shortMessage:""} ${typeof n.message=="string"?n.message:""}`;if(/returned no data \("0x"\)|Cannot decode zero data/i.test(a))return!0;t=n.cause}return!1}function De(e){return e instanceof h?/RPC endpoint|too many requests|malformed JSON/i.test(e.message):e instanceof Error?/fetch failed|network|ECONNREFUSED|ETIMEDOUT|HTTP \d{3}|rate limit|too many requests/i.test(e.message):!1}async function Ie(e,t,s){if(typeof e.getCode=="function")try{let n=await e.getCode({address:t});return!n||n==="0x"}catch{return ue(s)}return ue(s)}async function me(e,t,s){if(t.length===0)return[];let n=await Promise.allSettled(t.map(a=>e.readContract({address:a.address,abi:W,functionName:"balanceOf",args:[s]})));if(n.every(a=>a.status==="rejected")&&n[0]?.status==="rejected"&&De(n[0].reason))throw n[0].reason;return n.map(a=>{if(a.status!=="fulfilled"||a.value===void 0||a.value===null)return{ok:!1};try{let r=typeof a.value=="bigint"?a.value:BigInt(a.value);return r>=0n?{ok:!0,amount:r}:{ok:!1}}catch{return{ok:!1}}})}async function Pe(e,t,s,n){if(s.length===0)return[];let a=se(t,e);if(!a)return me(e,s,n);let r=s.map(o=>({target:o.address,allowFailure:!0,callData:xe({abi:W,functionName:"balanceOf",args:[n]})})),i;try{i=await e.readContract({address:a,abi:ve,functionName:"aggregate3",args:[r]})}catch(o){if(await Ie(e,a,o))return me(e,s,n);throw o}if(!Array.isArray(i)||i.length!==s.length)throw new h("Multicall3 aggregate3 returned an invalid result list.");return i.map(o=>{let d=o,k=Array.isArray(d)?d[0]:d?.success,m=Array.isArray(d)?d[1]:d?.returnData;if(!k||typeof m!="string"||m==="0x")return{ok:!1};try{let u=Se({abi:W,functionName:"balanceOf",data:m}),p=typeof u=="bigint"?u:BigInt(u);return p>=0n?{ok:!0,amount:p}:{ok:!1}}catch{return{ok:!1}}})}async function qe(e,t={}){H(e);let s=w(e),n=t.chainId??T,a=t.client??oe(t.rpcUrl,n),r=[];if(t.stockTokens?r=[...t.stockTokens]:t.stockAssetsPayload!==void 0?r=z(t.stockAssetsPayload,n):t.includeStockTokens!==!1&&n!==_&&(r=await ye({http:t.http,url:t.stockAssetsUrl,chainId:n})),t.tokens)for(let f of t.tokens)de(f,r);let i=n===T?[G,Z,pe,...t.oakTokenAddress||process.env.OAK_TOKEN_ADDRESS?[{address:w(t.oakTokenAddress??process.env.OAK_TOKEN_ADDRESS),symbol:"OAK",decimals:L,chainId:n}]:[]]:n===_?[{...G,address:w(D.testnet.usdg),chainId:n},{...Z,address:w(D.testnet.weth),chainId:n},...t.oakTokenAddress?[{address:w(t.oakTokenAddress),symbol:"OAK",decimals:L,chainId:n}]:[]]:[],o=[],d=new Set;for(let f of[...i,...r,...t.tokens??[]]){if(f.chainId!==n||P(f.address)===U)continue;let y=de(f,r),c=y.address.toLowerCase();d.has(c)||(d.add(c),o.push(y))}let[k,m]=await Promise.all([a.getBalance({address:s}),Pe(a,n,o,s)]),u=[],p={address:U,symbol:"ETH",decimals:18,chainId:n};(k>0n||t.includeZero)&&u.push({token:p,amount:k.toString()});for(let f=0;f<o.length;f++){let y=o[f],c=i.some(S=>A(S.address,y.address))||r.some(S=>A(S.address,y.address))?y.symbol:b(y.symbol),l=m[f]??{ok:!1};if(!l.ok){u.push({token:{address:y.address,symbol:c,decimals:y.decimals,chainId:y.chainId},amount:"unavailable"});continue}let g=l.amount;(g>0n||t.includeZero)&&u.push({token:{address:y.address,symbol:c,decimals:y.decimals,chainId:y.chainId},amount:g.toString()})}return u}var A=(e,t)=>e.toLowerCase()===t.toLowerCase(),C=e=>V(e.normalize("NFKC")).toLowerCase().replace(/[^\p{L}\p{N}]/gu,"");function ge(e){let t=e.context.network??"mainnet",{chainId:s,usdg:n,weth:a}=D[t],r=(i,o,d)=>({...i,address:P(w(i.address)),name:o,kind:d,verified:!0,source:"Oak fixed addresses",warnings:[]});return[r({...Oe,chainId:s},"Ether","native"),r({...G,address:n,chainId:s},"Global Dollar","stablecoin"),r({...Z,address:a,chainId:s},"Wrapped Ether","wrapped"),...t==="mainnet"?[r(pe,"USDe","stablecoin")]:[],...e.oakTokenAddress?[r({address:e.oakTokenAddress,symbol:"OAK",decimals:L,chainId:s},"Oak","oak")]:[]]}async function we(e){if(e.context.network==="testnet")return[];let t=await ye({http:e.context.http,includeNames:!0,allowAmbiguousSymbols:!0});return t.filter(s=>Ce(s,t)).map(s=>({...s,name:s.name??s.symbol,kind:"official_stock",verified:!0,source:he,warnings:[]}))}async function X(e,t,s=!0){let{chainId:n}=D[t.context.network??"mainnet"],a=t.context.clientFor(n);if(await a.getChainId()!==n)throw new h(`Token lookup requires Robinhood Chain ${n}.`);let[r,i,o]=await Promise.all([R(a,()=>F(a,n,e,"name")).catch(d=>{if(s)throw d;return""}),R(a,()=>F(a,n,e,"symbol")),R(a,()=>F(a,n,e,"decimals"))]);if(typeof r!="string"||s&&!r.trim()||typeof i!="string"||!i.trim()||!Number.isInteger(o)||o<0||o>255)throw new h("The contract returned invalid token metadata.");return{address:w(e),name:r||i,symbol:i,decimals:o,chainId:n}}async function fe(e,t){let s=await t.context.clientFor(T).readContract({address:I[T].clanker.factory.address,abi:J(["function tokenDeploymentInfo(address) view returns ((address,address,address,address[]))"]),functionName:"tokenDeploymentInfo",args:[e]});return Array.isArray(s)&&s.length===4&&typeof s[0]=="string"&&A(s[0],e)}async function Ee(e,t){let s=t.context.clientFor(T),n=I[T].poolsTrade,a=[n.instantLaunchStrategyFeesOn.address,n.instantLaunchStrategyFeesOff.address],r=J(["event TokenLaunched(bytes32 indexed poolId,address indexed token,address indexed feeSplitter,(address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks) poolKey)"])[0],i=await s.getBlockNumber(),o=new Set,d=0,k=0;for(let m=63127652n;m<=i;m+=10000000n){if(++d>be)throw new h("Token origin scan limit reached.");let u=m+9999999n>i?i:m+9999999n,p=await s.getLogs({address:a,event:r,args:{token:e},fromBlock:m,toBlock:u,strict:!0});for(let f of p){if(f.removed||!a.some(c=>A(c,f.address))||!f.args.token||!A(f.args.token,e)||!f.transactionHash||o.has(f.transactionHash))continue;if(o.add(f.transactionHash),++k>20)throw new h("Token origin receipt limit reached.");let y=await s.getTransactionReceipt({hash:f.transactionHash});if(ce(y).some(c=>A(c.token,e)))return w(y.from)}}}var be=5,_e=100,Le=500,Ne=3e4;function Te(e){let t=Date.now()+Ne,s=0,n=new Map,a=i=>{let o=t-Date.now();if(o<=0)throw new h("Token lookup time budget reached; results are partial.");return N(i,Math.min(1e4,o))},r=B((i,o)=>a(async d=>{let k=await e.context.http(i,{...o,signal:d});return new Proxy(k,{get(m,u){if(u==="json")return()=>a(()=>m.json());let p=Reflect.get(m,u,m);return typeof p=="function"?p.bind(m):p}})}),e.context.http);return q.set(r,a),{...e,context:{...e.context,http:r,clientFor:i=>{if(!n.has(i)){let o=e.context.clientFor(i),d=k=>{if(++s>Le)throw new h("Token lookup RPC budget reached; results are partial.");return a(k)};n.set(i,B(new Proxy(o,{get(k,m){let u=Reflect.get(k,m);return typeof u!="function"?u:(...p)=>d(()=>u.apply(k,p))}}),o)),q.set(n.get(i),d)}return n.get(i)}}}}function ke(e){return e.source==="Oak fixed addresses"?e:{...e,symbol:b(e.symbol),name:b(e.name)}}async function Xe(e,t){if(t=Te(t),typeof e!="string"||e.length>256||!C(e))throw new h("Provide a token name, symbol or address to find_token.");let s=C(e),n=M(e.trim(),{strict:!1})?P(w(e.trim())):void 0,{chainId:a}=D[t.context.network??"mainnet"],r=[],i=ge(t),o=!1;try{i.push(...await we(t))}catch{o=!0,r.push("The official stock list is unavailable; results are partial and stock identities and lookalikes could not be checked.")}let d=c=>n?A(c.address,n):C(c.symbol).includes(s)||C(c.name).includes(s),k=i.filter(d),m=[],u=(c,l)=>[c.symbol,c.name??""].some(g=>[l.symbol,l.name].some(S=>{let x=C(g),O=C(S);return!!x&&!!O&&(x.includes(O)||O.includes(x))})),p=(c,l={})=>{if(m.some(x=>A(x.address,c.address)))return;let g=[`Token ${b(c.symbol)} at ${c.address} is an unverified ${l.launchpad?"launchpad token":"token"}. Use its address, not its name or symbol.`];(K(c.symbol)||K(c.name)||i.some(x=>!A(x.address,c.address)&&u(c,x)))&&g.push(`Lookalike warning: ${b(c.symbol)} at ${c.address} resembles a verified token's name or symbol.`);let S={...c,...l,kind:l.launchpad?"launchpad":"erc20",verified:!1,source:l.launchpad?`${l.launchpad} origin and on-chain metadata; not a verified token`:"On-chain metadata only",warnings:g};m.push(S),r.push(...g)};if(n&&!k.length){let c=await X(n,t),l={};if(a===T){try{await fe(n,t)&&(l.launchpad="clanker")}catch{r.push("Clanker origin lookup was unavailable for this address.")}if(l.launchpad==="clanker")try{let S=(await j(t.context,{q:n,limit:20})).tokens.find(x=>A(x.contract_address,n));S&&(l.creator=w(S.msg_sender),l.creatorSource="Clanker indexer msg_sender")}catch{r.push("Clanker creator lookup is unavailable.")}else try{let g=await ie(t.context,n);l.launchpad="pons",l.creator=w(g.creator),l.creatorSource="Pons factory deployer"}catch{r.push("Pons launch origin could not be confirmed for this address.")}if(!l.launchpad)try{let g=await Ee(n,t);g&&(l.launchpad="pools.trade",l.creator=g,l.creatorSource="Launch transaction sender; may be a relayer")}catch{o=!0,r.push("pools.trade launch receipt lookup is unavailable; origin results are partial.")}}p(c,l)}else if(!n&&a===T){let c=new Set,l=new Set,g,S=0,x=0;try{do{if(++S>be)throw new h("Token search page limit reached.");let O=await j(t.context,{q:e.trim(),limit:20,...g?{cursor:g}:{}});for(let Q of O.tokens){if(++x>_e)throw new h("Token candidate limit reached.");let v=w(Q.contract_address);if(!(l.has(v)||i.some(E=>A(E.address,v)))){l.add(v);try{let E=await X(v,t);if(!d(E))continue;let Ae=await fe(v,t)?{launchpad:"clanker",creator:w(Q.msg_sender),creatorSource:"Clanker indexer msg_sender"}:{};p(E,Ae)}catch{o=!0,r.push(`Could not read Clanker candidate ${v}; it was omitted from these partial results.`)}}}if(O.cursor&&c.has(O.cursor))throw new h("The Clanker indexer repeated a pagination cursor.");O.cursor&&c.add(O.cursor),g=O.cursor??void 0}while(g)}catch{o=!0,r.push("Clanker name search is unavailable, incomplete or reached its scan limit; results are partial.")}r.push("Pons and pools.trade require a token address; name search does not cover those launchpads.")}a===_&&r.push("Testnet lookup covers pinned tokens and explicit token addresses; stock and launchpad discovery are unavailable.");let f=c=>[...new Map(c.map(l=>[l.address.toLowerCase(),l])).values()],y=f([...k,...m]);for(let c of y)if(y.some(l=>!A(l.address,c.address)&&(C(c.symbol)===C(l.symbol)||C(c.name)===C(l.name)))){let l=`Duplicate warning: several tokens share the symbol or name of ${c.address}. Choose the intended address; do not guess from the name.`;c.warnings.push(l),r.push(l)}return k.length>1&&r.push("Several verified tokens match this search, including possible substring matches. Choose an exact address; the search does not select a quote token."),{query:b(e.trim()),chainId:a,partial:o,matches:f(k).map(ke),unverified:f(m).map(ke),warnings:r}}async function Je(e,t){if(typeof e!="string"||!e.trim())throw new h("Provide a token address or verified symbol; use find_token to look it up.");let s=e.trim(),n=M(s,{strict:!1})?P(w(s)):void 0,a=ge(t),r=n&&a.find(u=>A(u.address,n));if(r)return r;let i=[],o=[];try{i=await we(t)}catch{if(!n)throw new h("The official stock list is unavailable; stock identities and symbol ambiguity cannot be checked. Use find_token and retry, or quote an explicit address.");o.push("The official stock list is unavailable; this address is unverified.")}if(n){let u=i.find(f=>A(f.address,n));if(u)return{...u,name:b(u.name)};let p=await X(n,Te(t),!1);return{...p,symbol:b(p.symbol),name:b(p.name),kind:"erc20",verified:!1,source:"On-chain metadata only",warnings:[...o,"This token address is unverified. On-chain names and symbols do not prove identity."]}}let d=s.toUpperCase()==="$OAK"?"OAK":s.toUpperCase(),k=[...a,...i].filter(u=>u.symbol.toUpperCase()===d);if(k.length!==1)throw new h(`Token symbol ${b(s)} is ${k.length?"ambiguous":"unverified"}; use find_token and choose an explicit address.`);let m=k[0];return m.source==="Oak fixed addresses"?m:{...m,name:b(m.name)}}export{he as a,Oe as b,G as c,Z as d,pe as e,z as f,Ce as g,de as h,ye as i,ve as j,qe as k,Xe as l,Je as m};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as u}from"./NGAI6GTU.js";import{getAddress as T,isAddress as E}from"viem";var I=/^[0-9]+$/,j=new Set(["^[0-9]+$","^\\d+$"]),D="^0x[0-9a-fA-F]{40}$",A=/^0x[0-9a-fA-F]{40}$/,b=new Set(["all","max"]),p={ETH:18,WETH:18,USDE:18,USDG:6},l=new WeakSet,$=new WeakMap;function R(e){return{type:"string",pattern:"^[0-9]+$",...e?{description:e}:{}}}function F(e){let n=R(e);return l.add(n),n}function f(e){let n;try{n=e===void 0?"nothing":JSON.stringify(e)??String(e)}catch{n=String(e)}return n.length>80?`${n.slice(0,77)}...`:n}function _(e,n){if(n===void 0||typeof n=="boolean")return n;if(n==="true")return!0;if(n==="false")return!1;throw new u(`${e} must be true or false; received ${f(n)}. Send the JSON boolean true or false (the strings "true" and "false" are also accepted).`)}function J(e,n,i={}){if(n===void 0)return;let r=typeof n=="number"?n:typeof n=="string"&&/^-?[0-9]{1,16}$/.test(n)?Number(n):Number.NaN,{minimum:t,maximum:s}=i;if(Number.isSafeInteger(r)&&(t===void 0||r>=t)&&(s===void 0||r<=s))return r;let d=t!==void 0&&s!==void 0?t===s?` equal to ${t}`:` from ${t} to ${s}`:t!==void 0?` of at least ${t}`:s!==void 0?` of at most ${s}`:"";throw new u(`${e} must be a whole number${d}; received ${f(n)}. Send a JSON number such as ${t!==void 0&&t===s?t:s!==void 0&&s>=50&&(t??0)<=50?50:t??1} (a string of digits is also accepted).`)}function k(e,n){let[i="",r=""]=e.split(".");if(!(r.length>n))return(BigInt(i||"0")*10n**BigInt(n)+BigInt(r.padEnd(n,"0")||"0")).toString()}function K(e){let i=(typeof e=="number"&&Number.isFinite(e)&&e>=0&&!/e/i.test(String(e))?String(e):typeof e=="string"?e.trim():void 0)?.match(/^(\d+\.?\d*|\.\d+)\s*\$?([A-Za-z]{2,10})?$/);if(!i||!i[1].includes(".")&&!i[2])return;let r=i[1].startsWith(".")?`0${i[1]}`:i[1].replace(/\.$/,""),t=i[2]?.toUpperCase();if(t&&p[t]!==void 0){let o=k(r,p[t]);return o===void 0?`${r} ${t} has more than ${p[t]} decimal places.`:`${r} ${t} = "${o}" (${p[t]} decimals). Send "${o}".`}let d=[[18,"ETH or WETH"],[6,"USDG"]].flatMap(([o,c])=>{let a=k(r,o);return a===void 0?[]:[`${r} ${c} (${o} decimals) = "${a}"`]});return`${d.length?`${d.join("; ")}. `:""}Multiply by 10^decimals of the token and send the whole-number string.`}function L(e,n,i={}){if(n===void 0)return;let{keyword:r,numbers:t=!0}=i;if(typeof n=="string"&&I.test(n))return n;if(r&&typeof n=="string"&&b.has(n))return r;let s=`a decimal integer string of base units such as "1000000"${t?" (a JSON whole number up to 9007199254740991 is also accepted)":""}${r?`, or "${r}" for the full balance`:""}`;if(typeof n=="number"&&Number.isInteger(n)&&n>=0){if(!Number.isSafeInteger(n))throw new u(`${e} received the JSON number ${f(n)}, which is above 9007199254740991 (2^53 - 1) and cannot be represented exactly. Send the exact value as a decimal integer string.`);if(!t)throw new u(`${e} must be a decimal integer string; received the JSON number ${n}. Send "${n}".`);return String(n)}let d=K(n);if(d)throw new u(`${e} must be base units, a whole number with no decimal point; received ${f(n)}. ${d}`);let o=typeof n=="string"&&b.has(n.toLowerCase())&&!r?" This field has no full-balance keyword; use the tool's separate full-exit option if it has one.":"";throw new u(`${e} must be ${s}; received ${f(n)}.${o}`)}function U(e,n){if(n===void 0)return;if(typeof n=="string"&&E(n,{strict:!1}))return T(n);let i=typeof n=="string"&&/^\$?[A-Za-z][A-Za-z0-9.]{0,15}$/.test(n)?" Token symbols are not accepted here; look up the address with find_token.":"";throw new u(`${e} must be a 0x address (0x followed by 40 hex digits, any letter case); received ${f(n)}.${i}`)}function W(e,n,i){if(typeof n=="string"){if(i.includes(n))return n;let r=i.filter(t=>A.test(t)&&t.toLowerCase()===n.toLowerCase());if(r.length===1)return r[0]}throw new u(`${e} must be one of ${i.map(r=>`"${r}"`).join(", ")} (addresses in any letter case); received ${f(n)}.`)}function h(e){return(e.type==="string"||e.type===void 0)&&j.has(e.pattern)}function S(e){if(!e||typeof e!="object"||Array.isArray(e))return;let n=e;if(n.type==="boolean")return{kind:"boolean"};if(n.type==="integer")return{kind:"integer",...typeof n.minimum=="number"?{minimum:n.minimum}:{},...typeof n.maximum=="number"?{maximum:n.maximum}:{}};if(typeof n.const=="number"&&Number.isSafeInteger(n.const))return{kind:"integer",minimum:n.const,maximum:n.const};if(h(n))return{kind:"uint",numbers:!l.has(n)};let i=typeof n.pattern=="string"?n.pattern.match(/^\^\(\?:\[0-9\]\+\|(all|max)\)\$$/):null;if(n.type==="string"&&i)return{kind:"uint",keyword:i[1],numbers:!0};let r=n.anyOf??n.oneOf;if(Array.isArray(r)&&r.length===2){let t=r.find(d=>d&&h(d)),s=r.find(d=>d&&typeof d.const=="string"&&b.has(d.const));if(t&&s)return{kind:"uint",keyword:s.const,numbers:!0}}if(n.type==="string"&&n.pattern===D)return{kind:"address"};if(n.type==="string"&&Array.isArray(n.enum)&&n.enum.every(t=>typeof t=="string")&&n.enum.some(t=>A.test(t)))return{kind:"enum",values:n.enum};if(n.type==="array"){let t=S(n.items);if(t&&(t.kind==="uint"||t.kind==="address"))return{kind:"array",item:t}}}function x(e,n,i){switch(n.kind){case"boolean":return _(e,i);case"integer":return J(e,i,n);case"uint":return L(e,i,n);case"address":return U(e,i);case"enum":return W(e,i,n.values);case"array":return Array.isArray(i)?i.map((r,t)=>x(`${e}[${t}]`,n.item,r)):i}}function N(e,n){let{pattern:i,anyOf:r,oneOf:t,enum:s,const:d,...o}=e;switch(n.kind){case"boolean":return{...e,type:["boolean","string"]};case"integer":return{...o,...Array.isArray(s)?{enum:[...s,...s.map(String)]}:{},type:["integer","string"]};case"uint":{let c=r??t,a=Array.isArray(c)?c:[],g=a.find(y=>h(y)),m=a.find(y=>typeof y.const=="string"),w=o.description??[g?.description,m?`Or "${m.const}"${m.description?`: ${m.description}`:"."}`:void 0].filter(Boolean).join(" ");return{...o,...w?{description:w}:{},type:n.numbers?["string","integer"]:"string"}}case"address":return{...o,type:"string",description:o.description??"A 0x address (any letter case)."};case"enum":return{...o,type:"string",description:`${o.description?`${o.description} `:""}One of: ${s.join(", ")} (any letter case).`};case"array":return{...e,items:N(e.items,n.item)}}}function O(e){let n=e.properties;return n&&typeof n=="object"&&!Array.isArray(n)?n:void 0}function G(e){let n=O(e);if(!n||$.has(e))return e;let i=!1,r={};for(let[s,d]of Object.entries(n)){let o=S(d);r[s]=o?N(d,o):d,i||=r[s]!==d}if(!i)return e;let t={...e,properties:r};return $.set(t,e),t}function z(e){return $.get(e)??e}function H(e,n){let i=O(z(e));if(!i||!n||typeof n!="object"||Array.isArray(n))return n;let r;for(let[t,s]of Object.entries(i)){if(!Object.hasOwn(n,t))continue;let d=S(s);if(!d)continue;let o=n[t],c=x(t,d,o);c!==o&&!(Array.isArray(c)&&Array.isArray(o)&&c.every((a,g)=>a===o[g]))&&(r??={...n},r[t]=c)}return r??n}export{R as a,F as b,f as c,_ as d,J as e,L as f,U as g,G as h,z as i,H as j};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as i,b as c}from"./JXOEJPJ4.js";var a=class extends Error{name="OakError"};function u(e){let n=[],s=new Set;for(;e&&typeof e=="object"&&!s.has(e)&&n.length<16;){s.add(e);let o=e;n.push(o),e=o.cause}return n}function r(e,...n){return u(e).some(s=>typeof s.code=="number"&&n.includes(s.code))}function d(e){return u(e).some(n=>typeof n.message=="string"&&/insufficient funds for gas \* price \+ value/i.test(n.message))}function g(e){if(e instanceof a)return c(e.message)||e.message.length>1024?i(e.message):e.message;let n=u(e),s=n.find(t=>t instanceof a&&/^(?:The RPC request timed out\. Please try again\.|The RPC endpoint returned malformed JSON\.|The RPC endpoint returned HTTP [1-5]\d{2}\. Please try again\.|The RPC endpoint is busy; retry in [1-9]\d* seconds\.)$/.test(t.message));if(s)return String(s.message);if(n.some(t=>t.name==="TimeoutError"))return"The request timed out. Please try again.";if(n.some(t=>t.name==="AbortError"))return"The request was cancelled.";if(r(e,4001))return"The request was declined.";if(r(e,-32601,-32004))return"This endpoint does not support the requested operation.";let o=n.map(t=>typeof t.message=="string"?t.message:"").join(" ");return d(e)?"Insufficient funds for the simulation gas budget. Check wallet ETH and the endpoint or fork block gas limit; no transaction was sent.":/revert/i.test(o)||r(e,3)?"The contract call reverted.":/fetch failed|ECONNREFUSED|ENOTFOUND|network/i.test(o)?"The service could not be reached. Please try again.":"The request failed. Please try again."}export{a,r as b,d as c,g as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as $}from"./MOVRI5IV.js";import{b as ee}from"./UCMNB2UP.js";import{a as D}from"./A5ITAEUQ.js";import{a as R}from"./I5CQ64EU.js";import{a,i as C}from"./ZUC6ILK2.js";import{a as d}from"./NGAI6GTU.js";import{a as Z}from"./JXOEJPJ4.js";import{encodeFunctionData as U,erc20Abi as oe,getAddress as l,isAddress as te,parseAbi as E}from"viem";var L=l(C[a].hoodlock.locker.address),P=l(C[a].hoodlock.burner.address),y=l(C[a].hoodlock.liquidityLocker.address),F=l(C[a].uniswap.v3_position_manager.address),ne=l(C[a].uniswap.v4_position_manager.address),He="0x000000000000000000000000000000000000dEaD",ge=3153600000n,be=1000000000000n,ie=65535,N=E(["function fee() view returns (uint256)","function lock(address token, uint256 amount, uint256 unlockTime) payable returns (uint256 lockId)","function getLock(uint256 lockId) view returns (address owner, address token, uint256 amount, uint256 unlockTime, bool withdrawn)","function locksByOwner(address owner) view returns (uint256[])","function locksByToken(address token) view returns (uint256[])"]),j=E(["function fee() view returns (uint256)","function burn(address token, uint256 amount) payable returns (uint256 burnId)","function DEAD() view returns (address)","function getBurn(uint256 burnId) view returns (address burner, address token, uint256 amount, uint256 timestamp)","function totalBurnedOf(address token) view returns (uint256)"]),M=E(["function fixedFee() view returns (uint256)","function collectFeeBps() view returns (uint16)","function paused() view returns (bool)","function lock(address manager, uint256 tokenId, uint256 unlockTime, address feeRecipient, bool acceptUnverifiedHook, uint16 maxCollectFeeBps) payable returns (uint256 lockId)","function lockIdOf(address manager, uint256 tokenId) view returns (uint256)","function getLock(uint256 lockId) view returns (address owner, uint40 unlockTime, uint16 collectFeeBps, bool isV4, bool hookVerified, bool withdrawn, address feeRecipient, address token0, address token1, uint256 tokenId)","function locksOf(address owner) view returns (uint256[])"]),Ae=E(["function approve(address to, uint256 tokenId)"]);function ve(e,o,n){let s=o.trim();if(s.startsWith("-")){let r=s.slice(1),u=e(r,n);return u==="0"?"0":`-${u}`}return e(s,n)}function re(e,o){return o.length===0?"no ERC-20 transfer deltas":o.map(n=>`${ve(e.formatAmount,n.amount,n.token.decimals)} ${n.token.symbol}`).join(", ")}function B(e,o="token"){if(typeof e!="string"||!e.trim())throw new d(`Provide a valid ${o} contract address.`);if(!te(e,{strict:!1}))throw new d(`Identify ${o} by chain and contract address, not by symbol.`);return l(e)}async function _(e,o){try{return await o()}catch(n){throw new d(e.plainError(n))}}function se(e){if(typeof e!="string")throw new d("Amount must be a non-negative integer string in base units.");let o=R(e);if(o<=0n)throw new d("Amount must be greater than zero.");return o}async function ae(e){let o=await e.getBlock();if(!o||typeof o.timestamp!="bigint")throw new d("Could not read the current chain timestamp. Please try again.");return o.timestamp}function ce(e,o){if(typeof e!="string"||!/^\d+$/.test(e.trim()))throw new d("unlockTime must be a non-negative integer string in Unix seconds.");let n=BigInt(e.trim());if(n>=be)throw new d("unlockTime appears to be in milliseconds; provide Unix seconds at most 100 years (3153600000 seconds) in the future.");if(n<=o)throw new d(`unlockTime (${n}) must be in the future (greater than current timestamp ${o}).`);let s=o+ge;if(n>s)throw new d(`unlockTime (${n}) exceeds the 100-year maximum lock duration (3153600000 seconds; max ${s}).`);return n}async function z(e,o,n=a){let s=l(o),[r,u]=await Promise.all([e.readContract({address:s,abi:oe,functionName:"symbol"}),e.readContract({address:s,abi:oe,functionName:"decimals"})]);return{address:s,symbol:Z(String(r)),decimals:Number(u),chainId:n}}function Te(e,o){if(e==null)return o;let n=typeof e=="number"?e:typeof e=="string"&&/^\d+$/.test(e.trim())?Number(e.trim()):NaN;if(!Number.isInteger(n)||n<0||n>ie)throw new d("maxCollectFeeBps must be an integer between 0 and 65535.");if(n<o)throw new d(`Live collectFeeBps (${o}) exceeds maxCollectFeeBps (${n}): collect fee changed.`);return Math.min(n,o)}function ye(e){return e.tokenId!==void 0||e.manager!==void 0||e.feeRecipient!==void 0||e.maxCollectFeeBps!==void 0||e.acceptUnverifiedHook!==void 0||e.kind==="v3"||e.kind==="lp"||e.kind==="v4"||e.version==="v3"||e.version==="v4"}async function Le(e,o,n){D(n);let s=l(n);if(o.kind==="v4"||o.version==="v4")throw new d("Uniswap v4 position locks are not supported yet; only Uniswap v3 position locks are enabled.");if(o.acceptUnverifiedHook===!0)throw new d("acceptUnverifiedHook must be false; Uniswap v4 hook position locks are not supported yet.");let r=o.manager!==void 0?B(o.manager,"manager"):F;if(r.toLowerCase()===ne.toLowerCase())throw new d(`Uniswap v4 PositionManager (${ne}) is not supported yet; use Uniswap v3 NonfungiblePositionManager (${F}).`);if(r.toLowerCase()!==F.toLowerCase())throw new d(`Unsupported position manager ${r}; only Uniswap v3 NonfungiblePositionManager (${F}) is supported.`);if(typeof o.tokenId!="string"&&typeof o.tokenId!="number")throw new d("Provide a valid Uniswap v3 NFT tokenId.");let u=String(o.tokenId).trim(),g=R(u);if(typeof o.feeRecipient!="string"||!te(o.feeRecipient,{strict:!1}))throw new d("Provide an explicit feeRecipient address for LP position locks.");let T=l(o.feeRecipient),i=e.clientFor(a),[k,p,m]=await Promise.all([ae(i),i.readContract({address:y,abi:M,functionName:"fixedFee"}),i.readContract({address:y,abi:M,functionName:"collectFeeBps"})]),v=ce(o.unlockTime,k),f=BigInt(p),w=Number(m);if(!Number.isInteger(w)||w<0||w>ie)throw new d(`Invalid on-chain collectFeeBps (${String(m)}).`);if(o.maxFee!==void 0){let h=R(String(o.maxFee));if(f>h)throw new d(`Live fixedFee (${f}) exceeds maxFee (${h}).`)}let b=Te(o.maxCollectFeeBps,w),I=(w/100).toString(),S=e.unsignedTx({to:r,data:U({abi:Ae,functionName:"approve",args:[y,g]}),value:"0",chainId:a,description:`Approve Uniswap v3 position NFT #${g} on ${r} for HoodLock LiquidityLocker ${y}.`}),x=e.unsignedTx({to:y,data:U({abi:M,functionName:"lock",args:[r,g,v,T,!1,b]}),value:f.toString(),chainId:a,description:`Lock Uniswap v3 NFT #${g} in HoodLock LiquidityLocker (${y}) until ${v} with feeRecipient ${T}, upfront fixedFee ${e.formatAmount(f.toString(),$.decimals)} ETH (${f} wei), and ongoing collect fee ${w} bps (${I}% of collected LP fees, frozen per lock).`}),t=[S,x],c=await e.preview(t,s),A=`Approve and lock Uniswap v3 NFT #${g} (manager ${r}) in HoodLock LiquidityLocker ${y} until Unix ${v}. Upfront fixedFee: ${e.formatAmount(f.toString(),$.decimals)} ETH (${f} wei). Ongoing LP fee share: ${w} bps (${I}% of collected LP fees, frozen per lock; maxCollectFeeBps=${b}) with feeRecipient ${T}.`;return{txs:c.txs,summary:A,preview:c,kind:"v3",contract:y,manager:r,tokenId:g.toString(),unlockTime:v.toString(),feeRecipient:T,acceptUnverifiedHook:!1,collectFeeBps:w,maxCollectFeeBps:b,fixedFee:{token:$,amount:f.toString()}}}async function he(e,o,n){D(n);let s=l(n),r=B(o.token,"token"),u=e.clientFor(a),[g,T,i]=await Promise.all([ae(u),u.readContract({address:L,abi:N,functionName:"fee"}),z(u,r,a)]),k=se(o.amount),p=ce(o.unlockTime,g),m=BigInt(T);if(o.maxFee!==void 0){let x=R(String(o.maxFee));if(m>x)throw new d(`Live lock fee (${m}) exceeds maxFee (${x}).`)}let v=e.approval(i.address,L,k.toString(),a),f=e.unsignedTx({to:L,data:U({abi:N,functionName:"lock",args:[i.address,k,p]}),value:m.toString(),chainId:a,description:`Lock ${e.formatAmount(k.toString(),i.decimals)} ${i.symbol} (${k} base units of ${i.address}) in HoodLock Locker ${L} until ${p} with exact fee ${e.formatAmount(m.toString(),$.decimals)} ETH (${m} wei).`}),w=[v,f],b=await e.preview(w,s),I=re(e,b.changes),S=`Approve and lock ${e.formatAmount(k.toString(),i.decimals)} ${i.symbol} (${k} base units of ${i.address}) in HoodLock Locker ${L} until Unix ${p}. Exact fee: ${e.formatAmount(m.toString(),$.decimals)} ETH (${m} wei). Preview changes: ${I}.`;return{txs:b.txs,summary:S,preview:b,kind:"token",contract:L,token:i,amount:k.toString(),unlockTime:p.toString(),fee:{token:$,amount:m.toString()}}}function $e(e){return{name:"hoodlock_lock",inputSchema:{type:"object",properties:{kind:{type:"string",enum:["token","v2","v3"],description:"Lock mode: token/v2 LP via Locker, or Uniswap v3 NFT via LiquidityLocker."},token:{type:"string",description:"ERC-20 token or v2 LP token contract address on chain 4663 (for token/v2 locks)."},amount:{type:"string",description:"Token amount as an integer string in base units (for token/v2 locks)."},manager:{type:"string",description:"Uniswap v3 NonfungiblePositionManager address (0x73991a25C818Bf1f1128dEAaB1492D45638DE0D3)."},tokenId:{type:"string",description:"Uniswap v3 NFT position tokenId as a decimal string."},feeRecipient:{type:"string",description:"Explicit recipient address for collected LP fees during a v3 position lock."},maxCollectFeeBps:{type:"number",description:"Maximum acceptable ongoing LP collect fee in bps (uint16, must be >= live collectFeeBps)."},unlockTime:{type:"string",description:"Unlock timestamp in Unix seconds (must be > now and <= now + 100 years)."}},required:["unlockTime"],additionalProperties:!1},async execute(o,n){return _(e,async()=>ye(o)?Le(e,o,n):he(e,o,n))}}}function Se(e){return{name:"hoodlock_burn",inputSchema:{type:"object",properties:{token:{type:"string",description:"ERC-20 token contract address on chain 4663 to send to the dead address via HoodLock Burner."},amount:{type:"string",description:"Amount to burn as an integer string in base units."}},required:["token","amount"],additionalProperties:!1},async execute(o,n){return _(e,async()=>{D(n);let s=l(n),r=B(o.token,"token"),u=e.clientFor(a),[g,T,i]=await Promise.all([u.readContract({address:P,abi:j,functionName:"fee"}),u.readContract({address:P,abi:j,functionName:"DEAD"}),z(u,r,a)]),k=se(o.amount),p=BigInt(g),m=l(T);if(o.maxFee!==void 0){let x=R(String(o.maxFee));if(p>x)throw new d(`Live burn fee (${p}) exceeds maxFee (${x}).`)}let v=e.approval(i.address,P,k.toString(),a),f=e.unsignedTx({to:P,data:U({abi:j,functionName:"burn",args:[i.address,k]}),value:p.toString(),chainId:a,description:`Send ${e.formatAmount(k.toString(),i.decimals)} ${i.symbol} (${k} base units of ${i.address}) to the dead address (${m}) via HoodLock Burner ${P} (totalSupply is unchanged) with exact fee ${e.formatAmount(p.toString(),$.decimals)} ETH (${p} wei).`}),w=[v,f],b=await e.preview(w,s),I=re(e,b.changes),S=`Approve and send ${e.formatAmount(k.toString(),i.decimals)} ${i.symbol} (${k} base units of ${i.address}) to the dead address (${m}) via HoodLock Burner ${P}. Note: tokens are transferred to ${m} and totalSupply is unchanged. Exact fee: ${e.formatAmount(p.toString(),$.decimals)} ETH (${p} wei). Preview changes: ${I}.`;return{txs:b.txs,summary:S,preview:b,contract:P,deadAddress:m,token:i,amount:k.toString(),fee:{token:$,amount:p.toString()},totalSupplyReduced:!1}})}}}async function de(e,o,n){D(o);let s=l(o),r=n?B(n,"token"):void 0,u=e.clientFor(a),g=[],T=new Set,i=t=>{for(let c of t){let A=c.toString();T.has(A)||(T.add(A),g.push(c))}};if(r){let[t,c]=await Promise.all([u.readContract({address:L,abi:N,functionName:"locksByToken",args:[r]}),u.readContract({address:L,abi:N,functionName:"locksByOwner",args:[s]})]);i(t),i(c)}else{let t=await u.readContract({address:L,abi:N,functionName:"locksByOwner",args:[s]});i(t)}let p=(await Promise.all(g.map(async t=>{let c=await u.readContract({address:L,abi:N,functionName:"getLock",args:[t]});return{id:t,owner:l(c[0]),token:l(c[1]),amount:BigInt(c[2]),unlockTime:BigInt(c[3]),withdrawn:!!c[4]}}))).filter(t=>!t.withdrawn&&t.amount>0n&&t.owner.toLowerCase()===s.toLowerCase()&&(!r||t.token.toLowerCase()===r.toLowerCase())),m=new Map,v=async t=>{let c=t.toLowerCase(),A=m.get(c);if(A)return A;let h=await z(u,t,a);return m.set(c,h),h},f=[],w=[];for(let t of p){let c=await v(t.token),A=t.amount.toString(),h=t.unlockTime.toString(),H={token:c,amount:A};f.push({lockId:t.id.toString(),kind:"token",contract:L,chainId:a,owner:t.owner,token:c,amount:A,asset:H,unlockTime:h,withdrawn:!1}),w.push({module:"hoodlock",id:`lock:${t.id.toString()}`,chainId:a,assets:[H],description:`HoodLock token lock #${t.id} of ${e.formatAmount(A,c.decimals)} ${c.symbol} (${c.address}) until Unix ${h}.`})}let b=await u.readContract({address:y,abi:M,functionName:"locksOf",args:[s]}),I=[...new Set(b.map(t=>t.toString()))].map(t=>BigInt(t)),S=[];for(let t of I){let c=await u.readContract({address:y,abi:M,functionName:"getLock",args:[t]}),[A,h,H,ue,le,me,ke,pe,fe,we]=c,V=l(A);if(me||ue||V.toLowerCase()!==s.toLowerCase())continue;let K=l(pe),W=l(fe);if(r&&K.toLowerCase()!==r.toLowerCase()&&W.toLowerCase()!==r.toLowerCase())continue;let[G,X]=await Promise.all([v(K),v(W)]),Q=l(ke),Y=Number(H),J=BigInt(h).toString(),q=BigInt(we).toString();S.push({lockId:t.toString(),kind:"v3",contract:y,manager:F,chainId:a,owner:V,tokenId:q,unlockTime:J,collectFeeBps:Y,feeRecipient:Q,hookVerified:!!le,token0:G,token1:X,withdrawn:!1}),w.push({module:"hoodlock",id:`lp-lock:${t.toString()}`,chainId:a,assets:[{token:{address:F,symbol:`UNI-V3 #${q}`,decimals:0,chainId:a},amount:"1"}],description:`HoodLock Uniswap v3 LP lock #${t} (NFT #${q}, ${G.symbol}/${X.symbol}, feeRecipient ${Q}, collectFeeBps ${Y}) until Unix ${J}. One NFT held in LiquidityLocker custody for ${V}. Underlying token amounts are not valued.`})}let x=`Found ${f.length} active token lock(s) and ${S.length} active Uniswap v3 LP lock(s) for ${s}.`;return{locks:f,lpLocks:S,positions:w,summary:x}}function xe(e){return{name:"hoodlock_list_locks",inputSchema:{type:"object",properties:{owner:{type:"string",description:"Optional owner wallet address to query (defaults to the authenticated wallet)."},token:{type:"string",description:"Optional ERC-20 or LP token address to filter active locks owned by the wallet."}},additionalProperties:!1},async execute(o,n){let s=o.owner!==void 0?B(o.owner,"owner"):l(n),r=o.token!==void 0?B(o.token,"token"):void 0;return _(e,()=>de(e,s,r))}}}function Ie(e){return async o=>(await _(e,()=>de(e,o))).positions}var O=e=>({tools:[$e(e),Se(e),xe(e)],positions:Ie(e)}),Ue=O,Ee=O,_e=e=>ee("hoodlock",[O(e)]),Oe=O;export{L as a,P as b,y as c,F as d,ne as e,He as f,ge as g,ve as h,$e as i,Se as j,xe as k,Ie as l,O as m,Ue as n,Ee as o,_e as p,Oe as q};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as o}from"./NGAI6GTU.js";import{createHash as f}from"node:crypto";function a(n){if(n===null||typeof n!="object"||Array.isArray(n))return!1;let t=Object.getPrototypeOf(n);return t===Object.prototype||t===null}function i(n){if(n===null||typeof n=="boolean"||typeof n=="string")return JSON.stringify(n);if(typeof n=="number"){if(!Number.isSafeInteger(n))throw new o("Canonical JSON numbers must be safe integers; encode base-unit amounts as decimal strings.");return Object.is(n,-0)?"0":String(n)}if(typeof n=="bigint")throw new o("BigInt values must be encoded as decimal strings before JSON serialization.");if(Array.isArray(n)){let t=[];for(let e=0;e<n.length;e++){if(!Object.prototype.hasOwnProperty.call(n,e))throw new o(`Sparse arrays are not permitted in canonical JSON (missing index ${e}).`);t.push(i(n[e]))}return`[${t.join(",")}]`}if(a(n)){let t=Object.keys(n).sort((r,s)=>r<s?-1:r>s?1:0),e=[];for(let r of t){let s=n[r];if(s===void 0)throw new o(`Canonical JSON object key "${r}" must not be undefined.`);e.push(`${JSON.stringify(r)}:${i(s)}`)}return`{${e.join(",")}}`}throw new o("Unsupported value in canonical JSON.")}function c(n){return new TextEncoder().encode(i(n))}function g(n){return`0x${f("sha256").update(c(n)).digest("hex")}`}function d(n){let t;if(typeof n=="string"){if(n.startsWith("\uFEFF"))return!1;t=n}else if(n instanceof Uint8Array){if(n.length>=3&&n[0]===239&&n[1]===187&&n[2]===191)return!1;try{t=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(n)}catch{return!1}}else return!1;if(t.length===0||t.startsWith("\uFEFF")||t.endsWith(`
|
|
2
|
-
`)||t.endsWith("\r"))return!1;try{let e=JSON.parse(t);return i(e)===t}catch{return!1}}export{i as a,c as b,g as c,d};
|