@oakagentkit/core 0.3.4 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/dist/api/addresses.d.ts +14 -0
- package/build/dist/api/addresses.js +1 -1
- package/build/dist/api/chain.js +1 -1
- package/build/dist/api/history.d.ts +2 -0
- package/build/dist/api/history.js +1 -1
- package/build/dist/api/identity-link.js +1 -1
- package/build/dist/api/metadata.js +1 -1
- package/build/dist/api/modules/beefy/boosts.js +1 -1
- package/build/dist/api/modules/beefy/clm.js +1 -1
- package/build/dist/api/modules/beefy/guard.js +1 -1
- package/build/dist/api/modules/beefy/index.js +1 -1
- package/build/dist/api/modules/beefy/liquidity.js +1 -1
- package/build/dist/api/modules/beefy/management.js +1 -1
- package/build/dist/api/modules/beefy/vaults.js +1 -1
- package/build/dist/api/modules/borro/actions.js +1 -1
- package/build/dist/api/modules/borro/index.js +1 -1
- package/build/dist/api/modules/borro/liquidity.js +1 -1
- package/build/dist/api/modules/borro/positions.js +1 -1
- package/build/dist/api/modules/borro/reader.js +1 -1
- package/build/dist/api/modules/chop/actions.d.ts +13 -1
- package/build/dist/api/modules/chop/actions.js +1 -1
- package/build/dist/api/modules/chop/checks.js +1 -1
- package/build/dist/api/modules/chop/copy.d.ts +1 -0
- package/build/dist/api/modules/chop/copy.js +1 -1
- package/build/dist/api/modules/chop/display.d.ts +36 -0
- package/build/dist/api/modules/chop/display.js +1 -0
- package/build/dist/api/modules/chop/guard.js +1 -1
- package/build/dist/api/modules/chop/index.js +1 -1
- package/build/dist/api/modules/chop/pins.d.ts +1 -0
- package/build/dist/api/modules/chop/pins.js +1 -1
- package/build/dist/api/modules/chop/positions.js +1 -1
- package/build/dist/api/modules/chop/reader.d.ts +6 -1
- package/build/dist/api/modules/chop/reader.js +1 -1
- package/build/dist/api/modules/chop/types.d.ts +7 -0
- package/build/dist/api/modules/chop/unfarm.d.ts +16 -0
- package/build/dist/api/modules/chop/unfarm.js +1 -0
- package/build/dist/api/modules/clanker/extensions.js +1 -1
- package/build/dist/api/modules/clanker/index.js +1 -1
- package/build/dist/api/modules/clanker/manage.js +1 -1
- package/build/dist/api/modules/clanker/pool-config.js +1 -1
- package/build/dist/api/modules/clanker/protocol.js +1 -1
- package/build/dist/api/modules/clanker/state.js +1 -1
- package/build/dist/api/modules/earn/index.js +1 -1
- package/build/dist/api/modules/erc8004/common.js +1 -1
- package/build/dist/api/modules/erc8004/domain.js +1 -1
- package/build/dist/api/modules/erc8004/index.js +1 -1
- package/build/dist/api/modules/erc8004/management.js +1 -1
- package/build/dist/api/modules/erc8004/reputation.js +1 -1
- package/build/dist/api/modules/erc8004/services.js +1 -1
- package/build/dist/api/modules/erc8004/thesis.js +1 -1
- package/build/dist/api/modules/erc8004/validation.js +1 -1
- package/build/dist/api/modules/factor/actions.js +1 -1
- package/build/dist/api/modules/factor/api.js +1 -1
- package/build/dist/api/modules/factor/checks.js +1 -1
- package/build/dist/api/modules/factor/copy.d.ts +11 -11
- package/build/dist/api/modules/factor/copy.js +1 -1
- package/build/dist/api/modules/factor/guard.js +1 -1
- package/build/dist/api/modules/factor/index.js +1 -1
- package/build/dist/api/modules/factor/reader.js +1 -1
- package/build/dist/api/modules/fobo/client.js +1 -1
- package/build/dist/api/modules/fobo/index.js +1 -1
- package/build/dist/api/modules/fobo/intent.js +1 -1
- package/build/dist/api/modules/fobo/steps.js +1 -1
- package/build/dist/api/modules/fobo/verify.js +1 -1
- package/build/dist/api/modules/gloam/index.js +1 -1
- package/build/dist/api/modules/grove/index.js +1 -1
- package/build/dist/api/modules/heyresearch/builder-feed.js +1 -1
- package/build/dist/api/modules/heyresearch/index.js +1 -1
- package/build/dist/api/modules/heyresearch/public-reads.js +1 -1
- package/build/dist/api/modules/heyresearch/scan.js +1 -1
- package/build/dist/api/modules/heyresearch/token-facts.js +1 -1
- package/build/dist/api/modules/hoodag/chain-reads.js +1 -1
- package/build/dist/api/modules/hoodag/index.js +1 -1
- package/build/dist/api/modules/hoodag/management.js +1 -1
- package/build/dist/api/modules/hoodag/public-reads.js +1 -1
- package/build/dist/api/modules/hoodag/reconstruct.js +1 -1
- package/build/dist/api/modules/hoodlock/airdrop.js +1 -1
- package/build/dist/api/modules/hoodlock/buyback.js +1 -1
- package/build/dist/api/modules/hoodlock/commerce.js +1 -1
- package/build/dist/api/modules/hoodlock/fee.js +1 -1
- package/build/dist/api/modules/hoodlock/guard.js +1 -1
- package/build/dist/api/modules/hoodlock/index.js +1 -1
- package/build/dist/api/modules/hoodlock/lifecycle.js +1 -1
- package/build/dist/api/modules/hoodlock/locks-burn.js +1 -1
- package/build/dist/api/modules/hoodlock/public.js +1 -1
- package/build/dist/api/modules/hookr/actions.d.ts +39 -2
- package/build/dist/api/modules/hookr/actions.js +1 -1
- package/build/dist/api/modules/hookr/addons.js +1 -1
- package/build/dist/api/modules/hookr/agent-gate.d.ts +14 -2
- package/build/dist/api/modules/hookr/agent-gate.js +1 -1
- package/build/dist/api/modules/hookr/agent-link.d.ts +17 -0
- package/build/dist/api/modules/hookr/agent-link.js +1 -0
- package/build/dist/api/modules/hookr/api-client.d.ts +9 -0
- package/build/dist/api/modules/hookr/api-client.js +1 -0
- package/build/dist/api/modules/hookr/blocks/advisory.d.ts +41 -0
- package/build/dist/api/modules/hookr/blocks/advisory.js +1 -0
- package/build/dist/api/modules/hookr/blocks/buy-sell-block.d.ts +7 -0
- package/build/dist/api/modules/hookr/blocks/buy-sell-block.js +1 -0
- package/build/dist/api/modules/hookr/blocks/core-settings.d.ts +6 -0
- package/build/dist/api/modules/hookr/blocks/core-settings.js +1 -0
- package/build/dist/api/modules/hookr/blocks/exit-clock.d.ts +14 -0
- package/build/dist/api/modules/hookr/blocks/exit-clock.js +1 -0
- package/build/dist/api/modules/hookr/blocks/holder-pot.d.ts +30 -0
- package/build/dist/api/modules/hookr/blocks/holder-pot.js +1 -0
- package/build/dist/api/modules/hookr/blocks/managed-fee.d.ts +96 -0
- package/build/dist/api/modules/hookr/blocks/managed-fee.js +1 -0
- package/build/dist/api/modules/hookr/blocks/market-guard.d.ts +116 -0
- package/build/dist/api/modules/hookr/blocks/market-guard.js +1 -0
- package/build/dist/api/modules/hookr/blocks/market-hours-fee.d.ts +87 -0
- package/build/dist/api/modules/hookr/blocks/market-hours-fee.js +1 -0
- package/build/dist/api/modules/hookr/blocks/pay-later.d.ts +199 -0
- package/build/dist/api/modules/hookr/blocks/pay-later.js +1 -0
- package/build/dist/api/modules/hookr/blocks/sandwich-guard.d.ts +3 -0
- package/build/dist/api/modules/hookr/blocks/sandwich-guard.js +1 -0
- package/build/dist/api/modules/hookr/blocks/storm-fee.d.ts +3 -0
- package/build/dist/api/modules/hookr/blocks/storm-fee.js +1 -0
- package/build/dist/api/modules/hookr/blocks/swap-cut.d.ts +3 -0
- package/build/dist/api/modules/hookr/blocks/swap-cut.js +1 -0
- package/build/dist/api/modules/hookr/blocks/swap-reward-mint.d.ts +125 -0
- package/build/dist/api/modules/hookr/blocks/swap-reward-mint.js +1 -0
- package/build/dist/api/modules/hookr/blocks/wallet-cap.d.ts +3 -0
- package/build/dist/api/modules/hookr/blocks/wallet-cap.js +1 -0
- package/build/dist/api/modules/hookr/blocks/zap-source.d.ts +161 -0
- package/build/dist/api/modules/hookr/blocks/zap-source.js +1 -0
- package/build/dist/api/modules/hookr/blocks/zap-target.d.ts +51 -0
- package/build/dist/api/modules/hookr/blocks/zap-target.js +1 -0
- package/build/dist/api/modules/hookr/claims.d.ts +53 -0
- package/build/dist/api/modules/hookr/claims.js +1 -0
- package/build/dist/api/modules/hookr/contracts.d.ts +3 -1
- package/build/dist/api/modules/hookr/contracts.js +1 -1
- package/build/dist/api/modules/hookr/create-cancel.js +1 -1
- package/build/dist/api/modules/hookr/discovery.d.ts +2 -2
- package/build/dist/api/modules/hookr/discovery.js +1 -1
- package/build/dist/api/modules/hookr/fill-bounty.d.ts +2 -0
- package/build/dist/api/modules/hookr/fill-bounty.js +1 -1
- package/build/dist/api/modules/hookr/gas.d.ts +48 -0
- package/build/dist/api/modules/hookr/gas.js +1 -0
- package/build/dist/api/modules/hookr/gates.d.ts +51 -0
- package/build/dist/api/modules/hookr/gates.js +1 -0
- package/build/dist/api/modules/hookr/hook-blocks.d.ts +304 -0
- package/build/dist/api/modules/hookr/hook-blocks.js +1 -0
- package/build/dist/api/modules/hookr/index.d.ts +4 -2
- package/build/dist/api/modules/hookr/index.js +1 -1
- package/build/dist/api/modules/hookr/jobs.d.ts +7 -0
- package/build/dist/api/modules/hookr/jobs.js +1 -0
- package/build/dist/api/modules/hookr/launch-options.d.ts +52 -3
- package/build/dist/api/modules/hookr/launch-options.js +1 -1
- package/build/dist/api/modules/hookr/launch-profile.d.ts +8 -0
- package/build/dist/api/modules/hookr/launch-profile.js +1 -1
- package/build/dist/api/modules/hookr/launch-receipt.js +1 -1
- package/build/dist/api/modules/hookr/launch.d.ts +24 -0
- package/build/dist/api/modules/hookr/launch.js +1 -1
- package/build/dist/api/modules/hookr/liquidity.js +1 -1
- package/build/dist/api/modules/hookr/lp-positions.js +1 -1
- package/build/dist/api/modules/hookr/lp-reads.js +1 -1
- package/build/dist/api/modules/hookr/lp-receipt.js +1 -1
- package/build/dist/api/modules/hookr/lp-state.d.ts +90 -2
- package/build/dist/api/modules/hookr/lp-state.js +1 -1
- package/build/dist/api/modules/hookr/pay-later-actions.d.ts +52 -0
- package/build/dist/api/modules/hookr/pay-later-actions.js +1 -0
- package/build/dist/api/modules/hookr/pins.d.ts +5 -0
- package/build/dist/api/modules/hookr/pins.js +1 -1
- package/build/dist/api/modules/hookr/pm-liquidity.d.ts +215 -0
- package/build/dist/api/modules/hookr/pm-liquidity.js +1 -0
- package/build/dist/api/modules/hookr/public-reads.d.ts +1 -1
- package/build/dist/api/modules/hookr/public-reads.js +1 -1
- package/build/dist/api/modules/hookr/read-utils.js +1 -1
- package/build/dist/api/modules/hookr/relay.js +1 -1
- package/build/dist/api/modules/hookr/revenue.d.ts +4 -1
- package/build/dist/api/modules/hookr/revenue.js +1 -1
- package/build/dist/api/modules/hookr/scan.d.ts +25 -0
- package/build/dist/api/modules/hookr/scan.js +1 -0
- package/build/dist/api/modules/hookr/swap.d.ts +161 -0
- package/build/dist/api/modules/hookr/swap.js +1 -0
- package/build/dist/api/modules/kyberswap/index.js +1 -1
- package/build/dist/api/modules/kyberswap/source-pools.js +1 -1
- package/build/dist/api/modules/layerbank/abi.js +1 -1
- package/build/dist/api/modules/layerbank/actions.js +1 -1
- package/build/dist/api/modules/layerbank/checks.js +1 -1
- package/build/dist/api/modules/layerbank/index.js +1 -1
- package/build/dist/api/modules/layerbank/merkl.js +1 -1
- package/build/dist/api/modules/layerbank/reader.js +1 -1
- package/build/dist/api/modules/layerbank/reserve.js +1 -1
- package/build/dist/api/modules/lighter/index.js +1 -1
- package/build/dist/api/modules/longbow/administration.js +1 -1
- package/build/dist/api/modules/longbow/analytics.js +1 -1
- package/build/dist/api/modules/longbow/fixed.js +1 -1
- package/build/dist/api/modules/longbow/index.js +1 -1
- package/build/dist/api/modules/longbow/nft.js +1 -1
- package/build/dist/api/modules/longbow/rebates.js +1 -1
- package/build/dist/api/modules/longbow/staking.js +1 -1
- package/build/dist/api/modules/meridian/index.js +1 -1
- package/build/dist/api/modules/meridian/markets.js +1 -1
- package/build/dist/api/modules/meridian/rfq.js +1 -1
- package/build/dist/api/modules/merkl/discovery.js +1 -1
- package/build/dist/api/modules/merkl/index.js +1 -1
- package/build/dist/api/modules/merkl/manage.js +1 -1
- package/build/dist/api/modules/merkl/protocol.js +1 -1
- package/build/dist/api/modules/morpho/allocator.js +1 -1
- package/build/dist/api/modules/morpho/bundles.js +1 -1
- package/build/dist/api/modules/morpho/in-kind.js +1 -1
- package/build/dist/api/modules/morpho/index.js +1 -1
- package/build/dist/api/modules/morpho/local-guard.js +1 -1
- package/build/dist/api/modules/morpho/midnight.js +1 -1
- package/build/dist/api/modules/morpho/protocol.js +1 -1
- package/build/dist/api/modules/morpho/vault-management.js +1 -1
- package/build/dist/api/modules/morpho/vault-tools.js +1 -1
- package/build/dist/api/modules/morpho/vault-v2.js +1 -1
- package/build/dist/api/modules/netnet/card-plan.js +1 -1
- package/build/dist/api/modules/netnet/card-read.js +1 -1
- package/build/dist/api/modules/netnet/card-recovery.js +1 -1
- package/build/dist/api/modules/netnet/desk-action.js +1 -1
- package/build/dist/api/modules/netnet/desk-read.js +1 -1
- package/build/dist/api/modules/netnet/financial.js +1 -1
- package/build/dist/api/modules/netnet/index.js +1 -1
- package/build/dist/api/modules/netnet/staking.js +1 -1
- package/build/dist/api/modules/orbio/index.js +1 -1
- package/build/dist/api/modules/orbio/positions.js +1 -1
- package/build/dist/api/modules/pendle/costs.js +1 -1
- package/build/dist/api/modules/pendle/index.js +1 -1
- package/build/dist/api/modules/pendle/markets.js +1 -1
- package/build/dist/api/modules/pendle/positions.js +1 -1
- package/build/dist/api/modules/pendle/pricecheck.js +1 -1
- package/build/dist/api/modules/pendle/reader.js +1 -1
- package/build/dist/api/modules/pendle/redeem.js +1 -1
- package/build/dist/api/modules/pendle/trade.js +1 -1
- package/build/dist/api/modules/pendle/validate.js +1 -1
- package/build/dist/api/modules/pendle/verify.js +1 -1
- package/build/dist/api/modules/pons/claim.js +1 -1
- package/build/dist/api/modules/pons/index.js +1 -1
- package/build/dist/api/modules/pons/launch-status.js +1 -1
- package/build/dist/api/modules/pons/prices.js +1 -1
- package/build/dist/api/modules/pons/reads.js +1 -1
- package/build/dist/api/modules/pons/swap-terms.js +1 -1
- package/build/dist/api/modules/pons/trade.js +1 -1
- package/build/dist/api/modules/poolstrade/index.js +1 -1
- package/build/dist/api/modules/priors/coverage.js +1 -1
- package/build/dist/api/modules/priors/discovery.js +1 -1
- package/build/dist/api/modules/priors/features.js +1 -1
- package/build/dist/api/modules/priors/holdings.js +1 -1
- package/build/dist/api/modules/priors/index.js +1 -1
- package/build/dist/api/modules/priors/integration.js +1 -1
- package/build/dist/api/modules/priors/market.js +1 -1
- package/build/dist/api/modules/priors/pt.js +1 -1
- package/build/dist/api/modules/priors/savings-exit.js +1 -1
- package/build/dist/api/modules/priors/starter-line.js +1 -1
- package/build/dist/api/modules/priors/stock-swap.js +1 -1
- package/build/dist/api/modules/raeto/index.js +1 -1
- package/build/dist/api/modules/relay/bootstrap.js +1 -1
- package/build/dist/api/modules/relay/discovery.js +1 -1
- package/build/dist/api/modules/relay/inbound.js +1 -1
- package/build/dist/api/modules/relay/index.js +1 -1
- package/build/dist/api/modules/relay/outbound-status.js +1 -1
- package/build/dist/api/modules/relay/reads.js +1 -1
- package/build/dist/api/modules/spark/actions.js +1 -1
- package/build/dist/api/modules/spark/details.js +1 -1
- package/build/dist/api/modules/spark/index.js +1 -1
- package/build/dist/api/modules/spark/management.js +1 -1
- package/build/dist/api/modules/steakhouse/analytics.js +1 -1
- package/build/dist/api/modules/steakhouse/erc4626.js +1 -1
- package/build/dist/api/modules/steakhouse/index.js +1 -1
- package/build/dist/api/modules/steakhouse/local-guard.js +1 -1
- package/build/dist/api/modules/steakhouse/management.js +1 -1
- package/build/dist/api/modules/steakhouse/v2-exit.js +1 -1
- package/build/dist/api/modules/tickerspring/basket-routes.js +1 -1
- package/build/dist/api/modules/tickerspring/contract-reads.js +1 -1
- package/build/dist/api/modules/tickerspring/discovery.js +1 -1
- package/build/dist/api/modules/tickerspring/exit-preview.js +1 -1
- package/build/dist/api/modules/tickerspring/guards.js +1 -1
- package/build/dist/api/modules/tickerspring/index.js +1 -1
- package/build/dist/api/modules/tickerspring/journeys.js +1 -1
- package/build/dist/api/modules/tickerspring/ladder.js +1 -1
- package/build/dist/api/modules/tickerspring/maker.js +1 -1
- package/build/dist/api/modules/tickerspring/order-accounting.js +1 -1
- package/build/dist/api/modules/tickerspring/research.js +1 -1
- package/build/dist/api/modules/tickerspring/strategies.js +1 -1
- package/build/dist/api/modules/uniswap/auction-create.js +1 -1
- package/build/dist/api/modules/uniswap/auction.js +1 -1
- package/build/dist/api/modules/uniswap/batch.js +1 -1
- package/build/dist/api/modules/uniswap/common.js +1 -1
- package/build/dist/api/modules/uniswap/fees.js +1 -1
- package/build/dist/api/modules/uniswap/index.js +1 -1
- package/build/dist/api/modules/uniswap/local-guard.js +1 -1
- package/build/dist/api/modules/uniswap/oracle.js +1 -1
- package/build/dist/api/modules/uniswap/pool-math.js +1 -1
- package/build/dist/api/modules/uniswap/pools.js +1 -1
- package/build/dist/api/modules/uniswap/position.js +1 -1
- package/build/dist/api/modules/uniswap/protocol.js +1 -1
- package/build/dist/api/modules/uniswap/quote-guard.js +1 -1
- package/build/dist/api/modules/uniswap/stock-prices.d.ts +25 -0
- package/build/dist/api/modules/uniswap/stock-prices.js +1 -1
- package/build/dist/api/modules/uniswap/stocks.js +1 -1
- package/build/dist/api/modules/uniswap/token-jar.js +1 -1
- package/build/dist/api/modules/uniswap/trade-batch.js +1 -1
- package/build/dist/api/modules/uniswap/trade.js +1 -1
- package/build/dist/api/modules/uniswap/v2.js +1 -1
- package/build/dist/api/modules/uniswap/v3.js +1 -1
- package/build/dist/api/modules/uniswap/v4.js +1 -1
- package/build/dist/api/modules/uniswap/wrap.js +1 -1
- package/build/dist/api/modules/velora/claims.js +1 -1
- package/build/dist/api/modules/velora/delta-reads.js +1 -1
- package/build/dist/api/modules/velora/index.js +1 -1
- package/build/dist/api/modules/wormhole/index.js +1 -1
- package/build/dist/api/modules/wormhole/scan-text.d.ts +1 -1
- package/build/dist/api/positions.js +1 -1
- package/build/dist/api/pricenote.js +1 -1
- package/build/dist/api/prices.d.ts +5 -0
- package/build/dist/api/prices.js +1 -1
- package/build/dist/api/rpc.js +1 -1
- package/build/dist/api/send.js +1 -1
- package/build/dist/api/signing-registry.js +1 -1
- package/build/dist/api/signing.js +1 -1
- package/build/dist/api/simulate.js +1 -1
- package/build/dist/api/swap.d.ts +2 -0
- package/build/dist/api/swap.js +1 -1
- package/build/dist/api/tokens.d.ts +10 -1
- package/build/dist/api/tokens.js +1 -1
- package/build/dist/api/tool-policy.js +1 -1
- package/build/dist/api/universal-router.js +1 -1
- package/build/dist/api/usd-estimate.d.ts +2 -0
- package/build/dist/api/usd-estimate.js +1 -1
- package/build/dist/chunks/{DMDOSHV7.js → 266VIESP.js} +1 -1
- package/build/dist/chunks/{KNBNKG7P.js → 2BKZLF5A.js} +1 -1
- package/build/dist/chunks/{HFVXNKA5.js → 2BM2WX2G.js} +1 -1
- package/build/dist/chunks/{OY5W7ZSL.js → 2H2OZE6X.js} +1 -1
- package/build/dist/chunks/{E76Z2TT4.js → 2QQ5CGQI.js} +1 -1
- package/build/dist/chunks/{4PLLS6CT.js → 2VYA6WIN.js} +1 -1
- package/build/dist/chunks/{LCH6F5HT.js → 342OZP53.js} +1 -1
- package/build/dist/chunks/{FQTO7VJG.js → 3HF6WE4L.js} +1 -1
- package/build/dist/chunks/3M7RMROZ.js +1 -0
- package/build/dist/chunks/3RGED2KO.js +1 -0
- package/build/dist/chunks/{RUSXMQSJ.js → 3XIJCHT7.js} +1 -1
- package/build/dist/chunks/3XY44BP5.js +1 -0
- package/build/dist/chunks/3YNXQ3EZ.js +1 -0
- package/build/dist/chunks/45QP74CE.js +1 -0
- package/build/dist/chunks/{NYHKIXJR.js → 4GAU3JLN.js} +1 -1
- package/build/dist/chunks/{Y2QADJOB.js → 4P6DRKY3.js} +1 -1
- package/build/dist/chunks/{W3DGFMQE.js → 4RTXP2YP.js} +1 -1
- package/build/dist/chunks/{7FYM7FJA.js → 4SXRXNHG.js} +1 -1
- package/build/dist/chunks/{ZTKT3ZQK.js → 53VBLEYS.js} +1 -1
- package/build/dist/chunks/5677LZOV.js +1 -0
- package/build/dist/chunks/{ADIPEGNN.js → 5AO2QPWE.js} +1 -1
- package/build/dist/chunks/{GQITAJVF.js → 5BPFF7NX.js} +1 -1
- package/build/dist/chunks/{PXUML7HJ.js → 5DWQUEBA.js} +1 -1
- package/build/dist/chunks/{WAKZWSHB.js → 5KKAN7XQ.js} +1 -1
- package/build/dist/chunks/{VVAM3EAK.js → 5N6YJFFA.js} +1 -1
- package/build/dist/chunks/{QIB6OMQV.js → 5O67QQIY.js} +1 -1
- package/build/dist/chunks/5PNFV7HH.js +1 -0
- package/build/dist/chunks/5RAZFRO4.js +1 -0
- package/build/dist/chunks/{FAH7FKUT.js → 5UWVXEPD.js} +1 -1
- package/build/dist/chunks/5VKVAUFQ.js +1 -0
- package/build/dist/chunks/5Y457HYC.js +1 -0
- package/build/dist/chunks/64LAWFBE.js +1 -0
- package/build/dist/chunks/{JJGZ7W3V.js → 6AS3TGOX.js} +1 -1
- package/build/dist/chunks/6EWSLHXL.js +1 -0
- package/build/dist/chunks/{6F527FLN.js → 6HNQAYBM.js} +1 -1
- package/build/dist/chunks/{FUP53K6G.js → 6LDC5D2S.js} +1 -1
- package/build/dist/chunks/{YR44GQG4.js → 6QXTL65K.js} +1 -1
- package/build/dist/chunks/6RVAV6BB.js +1 -0
- package/build/dist/chunks/{WSILNJS2.js → 6STUQOFL.js} +1 -1
- package/build/dist/chunks/{OKXKDDBX.js → 6Y2546JA.js} +1 -1
- package/build/dist/chunks/{4Z3IGMU6.js → 7AYP4ATZ.js} +1 -1
- package/build/dist/chunks/{YGW4ODAP.js → 7EPU3XGY.js} +1 -1
- package/build/dist/chunks/7GL547YZ.js +1 -0
- package/build/dist/chunks/7JTXYMNP.js +1 -0
- package/build/dist/chunks/{A3BJSQ23.js → 7VU5VCTL.js} +1 -1
- package/build/dist/chunks/{Z7FGEWO2.js → 7WXAS54T.js} +1 -1
- package/build/dist/chunks/{3D7FXI6G.js → 7X5JVF3F.js} +1 -1
- package/build/dist/chunks/{DRLBTB4E.js → A72ADVYF.js} +1 -1
- package/build/dist/chunks/{ANIF3JMV.js → AG66NM3J.js} +1 -1
- package/build/dist/chunks/{AOX6DKYU.js → AL6UXNGH.js} +1 -1
- package/build/dist/chunks/AODUTN65.js +1 -0
- package/build/dist/chunks/{PQG3ULRT.js → AONO47JX.js} +1 -1
- package/build/dist/chunks/{JTPHZCO3.js → AQJLEG6B.js} +1 -1
- package/build/dist/chunks/AZBTNUXF.js +1 -0
- package/build/dist/chunks/{O56EZB5Y.js → B5BU645H.js} +1 -1
- package/build/dist/chunks/{LQSPWRHN.js → B75SS7H6.js} +1 -1
- package/build/dist/chunks/{GBIBRYOV.js → B7HVPHSS.js} +1 -1
- package/build/dist/chunks/{LT5P6PZW.js → B7WZJHIJ.js} +1 -1
- package/build/dist/chunks/{3A2IKFTV.js → BIFANUTV.js} +1 -1
- package/build/dist/chunks/BM4KHOFB.js +1 -0
- package/build/dist/chunks/{X3YEDVRN.js → BSV65PCA.js} +1 -1
- package/build/dist/chunks/{HDBDBKEA.js → BW755PNH.js} +1 -1
- package/build/dist/chunks/{VXCGMALF.js → BWE5PXRE.js} +1 -1
- package/build/dist/chunks/{7U62MMUQ.js → BY2OWKZB.js} +1 -1
- package/build/dist/chunks/{SRHVSNPX.js → C2H3BWN5.js} +1 -1
- package/build/dist/chunks/{F7MGYRPU.js → CCPG6PRL.js} +1 -1
- package/build/dist/chunks/{ZTX4WT62.js → CFPJDLTZ.js} +1 -1
- package/build/dist/chunks/{OI3N4EW4.js → CG7ABZXH.js} +1 -1
- package/build/dist/chunks/CJMVRV34.js +1 -0
- package/build/dist/chunks/CQPIR6ER.js +1 -0
- package/build/dist/chunks/{FP7DHVK2.js → CR7DPGI6.js} +1 -1
- package/build/dist/chunks/{W5FM2OVB.js → CVVNAFUE.js} +1 -1
- package/build/dist/chunks/{LEHBRAZX.js → CW37EGPL.js} +1 -1
- package/build/dist/chunks/{MI5HZDMH.js → D6JOXK7Q.js} +1 -1
- package/build/dist/chunks/{SGHSCK22.js → DJRS3TR5.js} +1 -1
- package/build/dist/chunks/{IZFED3R2.js → DLNDJZR4.js} +1 -1
- package/build/dist/chunks/{SYERFEJ4.js → DPSFR3ZS.js} +1 -1
- package/build/dist/chunks/{2T6O77QZ.js → DV2HVFTM.js} +1 -1
- package/build/dist/chunks/{NMJVQX5M.js → DWRRIFXS.js} +1 -1
- package/build/dist/chunks/{3ZH5SOC2.js → EFOC337C.js} +1 -1
- package/build/dist/chunks/EHQRAA3R.js +1 -0
- package/build/dist/chunks/{WX7OYCNS.js → EJIP7RBG.js} +1 -1
- package/build/dist/chunks/EPOIAXCV.js +3 -0
- package/build/dist/chunks/EWZFZUVF.js +1 -0
- package/build/dist/chunks/{OB7BFDOV.js → EYE3ZAJB.js} +1 -1
- package/build/dist/chunks/{MQ5F2VOK.js → EZUQMTLE.js} +1 -1
- package/build/dist/chunks/F36IA5RI.js +1 -0
- package/build/dist/chunks/{DD47RZFU.js → F74ARK4H.js} +1 -1
- package/build/dist/chunks/{Q4HSQL65.js → FGGDAAHW.js} +1 -1
- package/build/dist/chunks/FMEO7RX7.js +1 -0
- package/build/dist/chunks/{V6EVQWAL.js → FN6XY6ET.js} +1 -1
- package/build/dist/chunks/G4IX4CYN.js +1 -0
- package/build/dist/chunks/G53U6Y4L.js +1 -0
- package/build/dist/chunks/{XHFAF5PZ.js → GBIL2I2K.js} +1 -1
- package/build/dist/chunks/{RKM62HC5.js → GCFHKJIO.js} +1 -1
- package/build/dist/chunks/{K7HTDKAT.js → GMMTHTCP.js} +1 -1
- package/build/dist/chunks/{O5QTITN6.js → GRHBE4MQ.js} +1 -1
- package/build/dist/chunks/GTJ6LBGB.js +1 -0
- package/build/dist/chunks/GV6Z3MET.js +1 -0
- package/build/dist/chunks/{GK3D7OKG.js → GVCNTGLC.js} +1 -1
- package/build/dist/chunks/GX2RCAHG.js +1 -0
- package/build/dist/chunks/{O3XWE4FO.js → H5KU4DUU.js} +1 -1
- package/build/dist/chunks/H7ZJ7LAB.js +1 -0
- package/build/dist/chunks/{DCGNVMKG.js → HC3QFA5I.js} +1 -1
- package/build/dist/chunks/{RK3PPFRX.js → HEQBTHFS.js} +1 -1
- package/build/dist/chunks/{C76D54YG.js → HGSFRN57.js} +1 -1
- package/build/dist/chunks/HJI7KO6F.js +1 -0
- package/build/dist/chunks/{L6CVMDWQ.js → HNBYPHTA.js} +1 -1
- package/build/dist/chunks/{MSRCJ2BS.js → HPBTSJW7.js} +1 -1
- package/build/dist/chunks/HPO673QQ.js +1 -0
- package/build/dist/chunks/{ZFRTBBIW.js → HRGLFGFL.js} +1 -1
- package/build/dist/chunks/{DGDMRATN.js → ICHT3H3W.js} +1 -1
- package/build/dist/chunks/IJVBCEA2.js +1 -0
- package/build/dist/chunks/{2TX7HP6M.js → IKVRFAUP.js} +1 -1
- package/build/dist/chunks/IM7ZF7XZ.js +1 -0
- package/build/dist/chunks/{I4473OC6.js → IMD33NQS.js} +1 -1
- package/build/dist/chunks/IR7KDBFU.js +1 -0
- package/build/dist/chunks/{X24YTJST.js → IY7FWTAL.js} +1 -1
- package/build/dist/chunks/IYOWMW5B.js +1 -0
- package/build/dist/chunks/J2J73XYU.js +1 -0
- package/build/dist/chunks/JCS24YBB.js +1 -0
- package/build/dist/chunks/JQVTHPUO.js +1 -0
- package/build/dist/chunks/{USZCTSPI.js → JTWJT2O3.js} +1 -1
- package/build/dist/chunks/{2YYKQGJZ.js → K4CYAWNL.js} +1 -1
- package/build/dist/chunks/{7VH6JQ2H.js → K5C6QBOO.js} +1 -1
- package/build/dist/chunks/K5OXLIPK.js +1 -0
- package/build/dist/chunks/{4PB6MSGZ.js → K6GECT3F.js} +1 -1
- package/build/dist/chunks/{HU2JXDLH.js → KB2JWQZ4.js} +1 -1
- package/build/dist/chunks/{EFESPGA2.js → KCZUJ57H.js} +1 -1
- package/build/dist/chunks/{YW4W3LPQ.js → KHLM6NIZ.js} +1 -1
- package/build/dist/chunks/{OIQTZOBN.js → KKGHXNM4.js} +1 -1
- package/build/dist/chunks/{SUNTJ6IU.js → KYANIEPX.js} +1 -1
- package/build/dist/chunks/{MOZBDCVV.js → L3IAEXQR.js} +1 -1
- package/build/dist/chunks/{ZZ6FZGHF.js → L4UFGM7M.js} +1 -1
- package/build/dist/chunks/{DMB64UIN.js → L76P6WIH.js} +1 -1
- package/build/dist/chunks/{QMNUB2GM.js → LBT6WR4U.js} +1 -1
- package/build/dist/chunks/LD3A2KLN.js +1 -0
- package/build/dist/chunks/{WRUTW6CG.js → LFSNAQ7V.js} +1 -1
- package/build/dist/chunks/{5ZVIAGLX.js → LKRAUTYI.js} +1 -1
- package/build/dist/chunks/{23HNDJ76.js → M2SWILNG.js} +1 -1
- package/build/dist/chunks/{IT2JLILU.js → MFKDNAHB.js} +1 -1
- package/build/dist/chunks/MFQTBUSD.js +1 -0
- package/build/dist/chunks/{V4UJMUIB.js → MLN5KTG7.js} +1 -1
- package/build/dist/chunks/{S4JUFCT4.js → MSQNOK3I.js} +1 -1
- package/build/dist/chunks/{FA3GBXQP.js → MXI7LX2F.js} +1 -1
- package/build/dist/chunks/N6YNJGEF.js +1 -0
- package/build/dist/chunks/{DXAPKN7H.js → NLC36QHL.js} +1 -1
- package/build/dist/chunks/NUTTPUYJ.js +1 -0
- package/build/dist/chunks/{O4S6XAYV.js → O7L55XM3.js} +1 -1
- package/build/dist/chunks/{NAO7VWZF.js → OCIEVYPR.js} +1 -1
- package/build/dist/chunks/{4NBXBKOX.js → OD7CY6BY.js} +1 -1
- package/build/dist/chunks/{RUTSEGGD.js → OHZHQSCA.js} +1 -1
- package/build/dist/chunks/{T3QEN3S6.js → OIGTTRN5.js} +1 -1
- package/build/dist/chunks/{5OTQCE2E.js → P6JE2NRA.js} +1 -1
- package/build/dist/chunks/PD5NXIRT.js +1 -0
- package/build/dist/chunks/{TXGZ6NWN.js → PG7HZIZL.js} +1 -1
- package/build/dist/chunks/{WXZ4LAKO.js → PXVF2SHU.js} +1 -1
- package/build/dist/chunks/{UBVE2U6X.js → Q43WPRYU.js} +1 -1
- package/build/dist/chunks/QA6Z2CYP.js +2 -0
- package/build/dist/chunks/QAAKUIWE.js +1 -0
- package/build/dist/chunks/{PQOWIRKQ.js → QAVP3CWL.js} +1 -1
- package/build/dist/chunks/{YXXK6EPI.js → QBHY2QRC.js} +1 -1
- package/build/dist/chunks/{ELHRXA5U.js → QFK335LC.js} +1 -1
- package/build/dist/chunks/{3PHJUFU2.js → QFUSCK5C.js} +1 -1
- package/build/dist/chunks/{IPU656WB.js → QKH7ED6B.js} +1 -1
- package/build/dist/chunks/{AHUCYDBC.js → QKIQ7ZKD.js} +1 -1
- package/build/dist/chunks/{XW3VGWXK.js → QMWHQRYC.js} +1 -1
- package/build/dist/chunks/{N6PHSHBE.js → QP2B7AYX.js} +1 -1
- package/build/dist/chunks/{VHK5AYC2.js → QZ6V6J6W.js} +1 -1
- package/build/dist/chunks/{MDLJFCT4.js → R5Z4HPCA.js} +1 -1
- package/build/dist/chunks/RKJFSDGV.js +1 -0
- package/build/dist/chunks/RKS3M7L5.js +1 -0
- package/build/dist/chunks/{GDOHHXNH.js → RLX6YTNT.js} +1 -1
- package/build/dist/chunks/RYEQIZ2H.js +1 -0
- package/build/dist/chunks/{USEF3QKG.js → S432S6NA.js} +1 -1
- package/build/dist/chunks/S47M3IPR.js +1 -0
- package/build/dist/chunks/S65KXMZ7.js +3 -0
- package/build/dist/chunks/{2OVJ2BTJ.js → SEXKWYUM.js} +1 -1
- package/build/dist/chunks/{2ILYVUFA.js → SRYX65GZ.js} +1 -1
- package/build/dist/chunks/{GNOHIL4Q.js → TMENUIBC.js} +1 -1
- package/build/dist/chunks/{BSX4LFYI.js → TNHU5UBQ.js} +1 -1
- package/build/dist/chunks/{PDPTJMTJ.js → TT2ST3Q3.js} +1 -1
- package/build/dist/chunks/TTBB6EFN.js +1 -0
- package/build/dist/chunks/{Z5YI6KLN.js → TWVDWNTG.js} +1 -1
- package/build/dist/chunks/TZG7HTVM.js +1 -0
- package/build/dist/chunks/{OVM4QIET.js → U4MSIH4G.js} +1 -1
- package/build/dist/chunks/UEOS6SHR.js +1 -0
- package/build/dist/chunks/{EIE2U4OX.js → UGFRBJDQ.js} +1 -1
- package/build/dist/chunks/{HUKDISRE.js → UIVOYAO2.js} +1 -1
- package/build/dist/chunks/{XRDLMTBJ.js → UMY6SP7C.js} +1 -1
- package/build/dist/chunks/UNBRUWSV.js +1 -0
- package/build/dist/chunks/{LGLWEGPY.js → UPX3OWKA.js} +1 -1
- package/build/dist/chunks/{MHONMLF6.js → URTQNYWU.js} +1 -1
- package/build/dist/chunks/{4RCYYN6O.js → V7HTGO23.js} +1 -1
- package/build/dist/chunks/{HZSYMGJ2.js → VS7ZA4OF.js} +1 -1
- package/build/dist/chunks/{BJ2U2VXJ.js → VTWAVH74.js} +1 -1
- package/build/dist/chunks/{5GQJVKVY.js → W5GWK72I.js} +1 -1
- package/build/dist/chunks/{65OITTDL.js → W73SLWBT.js} +1 -1
- package/build/dist/chunks/WRA3ZC6W.js +1 -0
- package/build/dist/chunks/{PRBIC3UK.js → WUONMIA2.js} +1 -1
- package/build/dist/chunks/{XL3W7DAQ.js → X3BB6WME.js} +1 -1
- package/build/dist/chunks/{K3TZYPSV.js → X53QVHBC.js} +1 -1
- package/build/dist/chunks/{LVFI74ST.js → XNJ6NDQQ.js} +1 -1
- package/build/dist/chunks/{GBPB7JIB.js → XSQJOOEY.js} +1 -1
- package/build/dist/chunks/XUDQYSPU.js +1 -0
- package/build/dist/chunks/{VKNKVUAA.js → XWZ5SL5Q.js} +1 -1
- package/build/dist/chunks/{365B4YEV.js → XXLQDQEX.js} +1 -1
- package/build/dist/chunks/{BDLV42SD.js → Y5T36EEU.js} +1 -1
- package/build/dist/chunks/{R73R4KN3.js → YBLJ2MCR.js} +1 -1
- package/build/dist/chunks/{WNWRF4HE.js → YZHJ4BAP.js} +1 -1
- package/build/dist/chunks/ZSGW2ZSO.js +1 -0
- package/build/dist/chunks/{HRAHGYNK.js → ZTNBX4VH.js} +1 -1
- package/package.json +1 -1
- package/build/dist/chunks/2QP6WGKZ.js +0 -1
- package/build/dist/chunks/3AOTYJPX.js +0 -1
- package/build/dist/chunks/4E7FJQLL.js +0 -1
- package/build/dist/chunks/4J245N3F.js +0 -1
- package/build/dist/chunks/4M6XBG6X.js +0 -1
- package/build/dist/chunks/BA66J5YQ.js +0 -1
- package/build/dist/chunks/BIY2F6MO.js +0 -1
- package/build/dist/chunks/CZ66MYKR.js +0 -1
- package/build/dist/chunks/DFM4T6ZE.js +0 -1
- package/build/dist/chunks/DGCJZ3HO.js +0 -1
- package/build/dist/chunks/DHX3Q5RV.js +0 -2
- package/build/dist/chunks/DWQJ7NSX.js +0 -1
- package/build/dist/chunks/EFUACKDK.js +0 -1
- package/build/dist/chunks/EQEMI54U.js +0 -1
- package/build/dist/chunks/GYPMUYB5.js +0 -1
- package/build/dist/chunks/JFC2QCMW.js +0 -1
- package/build/dist/chunks/JW7GLNLB.js +0 -3
- package/build/dist/chunks/MEB727X5.js +0 -1
- package/build/dist/chunks/MIKQWF6Q.js +0 -3
- package/build/dist/chunks/MQK6OP7S.js +0 -1
- package/build/dist/chunks/OSMOBKRQ.js +0 -1
- package/build/dist/chunks/P6MPKIU2.js +0 -1
- package/build/dist/chunks/P7C3TYI4.js +0 -1
- package/build/dist/chunks/RN3WUJIO.js +0 -1
- package/build/dist/chunks/TI727O2H.js +0 -1
- package/build/dist/chunks/UHIJMDD2.js +0 -1
- package/build/dist/chunks/VQJXQLFW.js +0 -1
- package/build/dist/chunks/W32UECOL.js +0 -1
- package/build/dist/chunks/WWNAGOCD.js +0 -1
- package/build/dist/chunks/ZNX3YVF2.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as R,t as g}from"./TI727O2H.js";import{a as w}from"./XSD5NL7J.js";import{isDeepStrictEqual as b}from"node:util";import{isAddress as x}from"viem";var O=2592e3,v=1n<<128n,m=new Set(["order","offer","link","consent"]),y=new Set(["order","offer","consent"]),E=new Set(["order","offer","link"]),I=3600,S=1e11;function l(e){return new w(`Local signing guard: ${e}; nothing was signed.`)}var V=e=>m.has(e.class);function T(e,r){let t=new Map,n=(s,a,o)=>{let u=e[s];if(!u||o>8)throw l("typed-data types changed");for(let c of u){let f=c.type.replace(/(\[[0-9]*\])+$/,""),i=`${a}${c.name}${c.type===f?"":"[]"}`;e[f]?n(f,`${i}.`,o+1):t.set(i,c.type)}};return n(r,"",0),t}function N(e,r){let t=new Set,n=s=>{if(!(t.has(s)||!e[s])){t.add(s);for(let a of e[s])n(a.type.replace(/(\[[0-9]*\])+$/,""))}};return n(r),t}function A(e=[]){let r=new Set(e.map(n=>n.toLowerCase())),t=(n,s)=>{if(!(s>12)){if(typeof n=="string"){x(n,{strict:!1})&&r.add(n.toLowerCase());return}if(n&&typeof n=="object")for(let a of Object.values(n))t(a,s+1)}};return t(R,0),t(g,0),r}function j(e,r=A()){let t=[],n=(i,d)=>t.push(`${i} ${e.id}: ${d}`),s=Object.entries(e.fields),a=i=>s.filter(([,d])=>d.role===i),o=i=>s.filter(([,d])=>d.role==="derived"&&d.yields?.includes(i)).length;["order","cancel","link","offer","consent","auth","relayed"].includes(e.class)||n("R5","unknown signature class; link-accept is a display role only"),e.expiryBinding&&!["signed","program-link","auth-window","cancel-only"].includes(e.expiryBinding)&&n("R5","unknown expiry binding"),(!e.id||!/^[a-z0-9]+(?:[.-][a-z0-9]+)+$/.test(e.id))&&n("ID","id must be dotted lower-case"),(!e.tools.length||new Set(e.tools).size!==e.tools.length)&&n("ID","tools must be a non-empty unique list");let u=e.network==="testnet"?g.testnet.chainId:g.mainnet.chainId;if(e.encoding==="eip712"){let i=e.domain;i?(Object.hasOwn(i,"salt")&&n("R1","domain must not carry a salt"),i.name||n("R1","domain name is missing"),!i.version&&e.class!=="relayed"&&n("R1","domain version is missing"),i.chainId!==u&&n("R1",`domain chain must be ${u}`),i.verifyingContract?r.has(i.verifyingContract.toLowerCase())||n("R1","verifying contract is not a pinned address"):e.class!=="cancel"&&e.class!=="auth"&&n("R1","verifying contract is missing")):n("R1","EIP-712 spec has no domain")}else e.domain&&n("R1","only EIP-712 specs carry a domain");if(e.encoding==="eip191-packed-hash"){let i=a("pinned").map(([,d])=>d.value);i.some(d=>d===u||d===String(u))||n("R1","packed layout must pin the chain id"),i.some(d=>typeof d=="string"&&r.has(d.toLowerCase()))||n("R1","packed layout must pin the verifying contract")}let c=new Map,f=e.class==="relayed"&&!Object.keys(e.types).length;if(e.encoding==="eip712"&&!f){Object.hasOwn(e.types,"EIP712Domain")&&n("R2","types must never carry EIP712Domain");try{c=T(e.types,e.primaryType);let i=N(e.types,e.primaryType);for(let d of Object.keys(e.types))i.has(d)||n("R2",`type ${d} is not reachable from ${e.primaryType}`)}catch{n("R2",`types do not resolve from ${e.primaryType}`)}for(let i of c.keys())Object.hasOwn(e.fields,i)||n("R3",`message path ${i} has no role`);for(let[i]of s)c.has(i)||n("R3",`declared field ${i} is not in the typed struct`)}else e.encoding!=="eip712"&&Object.keys(e.types).length&&n("R2","only EIP-712 specs carry types");for(let[i,d]of s)(!d.meaning||d.meaning.length>160)&&n("R3",`field ${i} needs a plain-English meaning`);(e.class==="order"||e.class==="offer")&&!s.some(([,i])=>i.role==="amount"&&i.side==="out")&&!o("amount-out")&&n("R4",`${e.class} must show the most that can leave`);for(let[i,d]of s){if(d.role==="amount"||d.role==="fee"){let h=d.token;(x(h,{strict:!1})?r.has(h.toLowerCase()):e.fields[h]?.role==="token")||n("R4",`amount ${i} does not name a token field or a pinned token`)}c.get(i)==="bytes"&&d.role!=="pinned"&&d.role!=="derived"&&n("R4",`bytes field ${i} must be pinned or derived`)}if(e.maxLifetimeSeconds>0&&e.maxLifetimeSeconds<=O||n("R5","maxLifetimeSeconds must be within 30 days"),y.has(e.class)){let i=a("expiry").length+o("expiry");i!==1&&n("R5",`${e.class} needs exactly one expiry (found ${i})`),e.expiry&&n("R5","API-only expiry is not a signed expiry"),e.expiryBinding&&e.expiryBinding!=="signed"&&n("R5",`${e.class} requires signed expiry`)}if(e.expiryBinding==="program-link"&&e.class!=="link"&&n("R5","only link can use program-link"),e.class==="link"&&e.expiryBinding!=="program-link"&&a("expiry").length+o("expiry")!==1&&n("R5","link needs signed expiry or program-link binding"),e.expiryBinding==="auth-window"){let i=e.authWindow;(e.class!=="auth"||!i||!c.has(i.field)||!Number.isSafeInteger(i.maxAgeSeconds)||i.maxAgeSeconds<=0||i.maxAgeSeconds>e.maxLifetimeSeconds||!Number.isSafeInteger(i.maxFutureSeconds)||i.maxFutureSeconds<0||i.maxFutureSeconds>e.maxLifetimeSeconds)&&n("R5","auth-window needs a signed timestamp and pinned acceptance window")}else e.authWindow&&n("R5","authWindow requires auth-window binding");return e.expiryBinding==="cancel-only"&&(e.class!=="cancel"||!a("nonce").length&&!o("nonce")&&!e.revoke?.staysExecutableUntilExpiry)&&n("R5","cancel-only needs a single-use nonce or targeted non-revoking hide"),(e.class==="auth"||e.class==="cancel")&&(s.some(([,i])=>i.role==="amount"&&i.side==="out")||o("amount-out"))&&n("R4","auth and cancel cannot grant spending authority"),E.has(e.class)&&!(e.revoke?.onchainTool||e.revoke?.offchainSpec)&&!(e.revoke?.none&&e.maxLifetimeSeconds<=I)&&n("R6",`${e.class} needs a revocation path (only a one-shot approval of at most one hour may declare none)`),e.submit.by==="addon"&&(!/^[a-z0-9-]+(\.[a-z0-9-]+)+$/.test(e.submit.host)||!/^\/[A-Za-z0-9/_.-]*$/.test(e.submit.path))&&n("R9","add-on submission needs a bare HTTPS host and a fixed path"),e.submit.by==="server-continuation"&&!e.submit.reason&&n("R9","server-continuation needs its recorded reason"),e.submit.by==="transaction"&&e.class!=="relayed"&&e.class!=="consent"&&n("R9","only relayed and consent signatures are consumed by a transaction"),(!/^[A-Za-z0-9 .'-]{1,40}$/.test(e.program)||!/^[A-Za-z0-9 .'-]{1,60}$/.test(e.purpose))&&n("R10","program and purpose must be short constant text"),m.has(e.class)&&!e.requireHuman&&!e.humanException&&n("C13",`${e.class} must require a human`),!m.has(e.class)&&e.humanException&&n("C13","only a value class can name a human exception"),e.relayedPaths&&e.class!=="relayed"&&n("ID","only relayed specs accept caller signatures"),e.enabled===!1&&!e.disabledReason&&n("ID","a disabled spec states why"),t}function z(e,r=A()){let t=e.filter(a=>a.enabled!==!1).flatMap(a=>j(a,r)),n=new Set,s=new Set;for(let a of e){n.has(a.id)&&t.push(`ID ${a.id}: duplicate spec id`),n.add(a.id);let o=C(a);s.has(o)&&t.push(`ID ${a.id}: another spec already covers ${o}`),s.add(o)}return t}function C(e){return`${e.network??"mainnet"}:${e.encoding}:${(e.domain?.verifyingContract??"-").toLowerCase()}:${e.primaryType}`}function k(e,r,t,n,s){let a=r.replace(/(\[[0-9]*\])+$/,"");if(a!==r){if(!Array.isArray(t))throw l(`message field ${n||r} is not declared`);for(let i of t)k(e,r.replace(/\[[0-9]*\]$/,""),i,`${n}[]`,s+1);return}let o=e[a];if(!o)return;if(s>8||!t||typeof t!="object"||Array.isArray(t))throw l(`message field ${n||r} is not declared`);let u=Object.keys(t),c=o.map(i=>i.name);if(u.find(i=>!c.includes(i))!==void 0)throw l(`an undeclared message field${n?` under ${n}`:""} is present`);for(let i of o){if(!Object.hasOwn(t,i.name))throw l(`message field ${n?`${n}.`:""}${i.name} is missing`);k(e,i.type,t[i.name],`${n?`${n}.`:""}${i.name}`,s+1)}}function W(e,r){if(e.encoding!=="eip712"||!e.domain)throw l("Oak has no signing contract for this request");if(!r||typeof r!="object"||!r.domain||typeof r.domain!="object")throw l("domain, chain or verifying contract is not the pinned one");let t=Object.fromEntries(Object.entries(e.domain).filter(([,n])=>n!==void 0));if(!b(Object.keys(r.domain).sort(),Object.keys(t).sort())||!b({...r.domain},t))throw l("domain, chain or verifying contract is not the pinned one");if(!r.types||typeof r.types!="object"||Object.hasOwn(r.types,"EIP712Domain")||!b(r.types,e.types)||r.primaryType!==e.primaryType)throw l("typed-data types changed");k(e.types,e.primaryType,r.message,"",0)}function p(e,r){let t=e;for(let n of r.split(".")){if(n.endsWith("[]")||!t||typeof t!="object"||Array.isArray(t))return;t=t[n]}return t}var $=e=>typeof e=="string"?e:typeof e=="number"||typeof e=="bigint"?String(e):void 0;function D(e,r){let t={},n=s=>x(s,{strict:!1})?s:$(p(r,s));for(let[s,a]of Object.entries(e.fields)){let o=$(p(r,s));if(o!==void 0)switch(a.role){case"signer":t.signer=o;break;case"account":t.account=o;break;case"recipient":t.recipient=o;break;case"delegate":t.delegate=o;break;case"counterparty":t.counterparty=o;break;case"token":a.side==="out"?t.tokenOut=o:t.tokenIn=o;break;case"amount":a.side==="out"?(t.amountOut=o,t.tokenOut??=n(a.token)):(t.minAmountIn=o,t.tokenIn??=n(a.token));break;case"fee":(t.fees??=[]).push({token:n(a.token)??a.token,value:o});break;case"expiry":t.expiry=/^[0-9]+$/.test(o)?Number(o):Number.NaN;break;case"nonce":t.nonce=o;break;default:break}}return t}function L(e,r,t){let n=Math.min(e.maxLifetimeSeconds,O),s=y.has(e.class)||e.humanException?60:1;if(!Number.isSafeInteger(t)||t<0||!Number.isFinite(n)||n<=0||r===void 0||!Number.isSafeInteger(r)||r<=0||r>=S||r<t+s||r>t+n)throw l(`expiry is missing, past or beyond ${n>=86400?`${Math.floor(n/86400)} days`:`${Math.ceil(n/60)} minutes`}`)}function U(e,r,t,n){if(e.enabled===!1)throw l("Oak has no signing contract for this request");if(!Number.isSafeInteger(t)||t<0||t>=S)throw l("signing time is unavailable");if(e.expiryBinding==="auth-window"){let o=e.authWindow,u=o&&p(r,o.field),c=typeof u=="number"?u:typeof u=="string"&&/^[0-9]+$/.test(u)?Number(u):NaN;if(e.class!=="auth"||!o||!Number.isSafeInteger(c)||c<=0||c>=S||c<t-o.maxAgeSeconds||c>t+o.maxFutureSeconds)throw l("authentication time is outside the pinned window");return c+o.maxAgeSeconds}if(e.expiryBinding==="cancel-only"){if(e.class!=="cancel")throw l("Oak has no signing contract for this request");return n}if(e.expiryBinding==="program-link")throw l("program link authority is not configured");if(y.has(e.class)&&(e.expiry||e.expiryBinding&&e.expiryBinding!=="signed"))throw l("order expiry must be signed");let s=D(e,r).expiry??n,a=Object.values(e.fields).some(o=>o.role==="expiry"||o.role==="derived"&&o.yields?.includes("expiry"));if(y.has(e.class)&&!a)throw l("order expiry must be signed");return(a||m.has(e.class))&&L(e,s,t),s}function H(e){if(e===void 0||!/^[0-9]{1,78}$/.test(e))throw l("open-ended or out-of-range amount");let r=BigInt(e);if(r<=0n||r>=v)throw l("open-ended or out-of-range amount");return r}function J(e,r){return Object.entries(e.fields).map(([t,n])=>{let s=t.includes("[]")?"(each item, listed below)":p(r,t),a=typeof s=="object"&&s!==null?JSON.stringify(s):String(s);a.length>200&&(a=`${a.slice(0,200)}\u2026`);let o=JSON.stringify(a).replace(/[\u007f-\u009f\u2028\u2029\u202a-\u202e\u2066-\u2069]/g,u=>`\\u${u.charCodeAt(0).toString(16).padStart(4,"0")}`);return`${t} = ${o} - ${n.meaning}`})}export{O as a,v as b,m as c,l as d,V as e,T as f,A as g,j as h,z as i,C as j,W as k,p as l,D as m,L as n,U as o,H as p,J as q};
|
|
1
|
+
import{j as R,t as g}from"./EWZFZUVF.js";import{a as w}from"./XSD5NL7J.js";import{isDeepStrictEqual as b}from"node:util";import{isAddress as x}from"viem";var O=2592e3,v=1n<<128n,m=new Set(["order","offer","link","consent"]),y=new Set(["order","offer","consent"]),E=new Set(["order","offer","link"]),I=3600,S=1e11;function l(e){return new w(`Local signing guard: ${e}; nothing was signed.`)}var V=e=>m.has(e.class);function T(e,r){let t=new Map,n=(s,a,o)=>{let u=e[s];if(!u||o>8)throw l("typed-data types changed");for(let c of u){let f=c.type.replace(/(\[[0-9]*\])+$/,""),i=`${a}${c.name}${c.type===f?"":"[]"}`;e[f]?n(f,`${i}.`,o+1):t.set(i,c.type)}};return n(r,"",0),t}function N(e,r){let t=new Set,n=s=>{if(!(t.has(s)||!e[s])){t.add(s);for(let a of e[s])n(a.type.replace(/(\[[0-9]*\])+$/,""))}};return n(r),t}function A(e=[]){let r=new Set(e.map(n=>n.toLowerCase())),t=(n,s)=>{if(!(s>12)){if(typeof n=="string"){x(n,{strict:!1})&&r.add(n.toLowerCase());return}if(n&&typeof n=="object")for(let a of Object.values(n))t(a,s+1)}};return t(R,0),t(g,0),r}function j(e,r=A()){let t=[],n=(i,d)=>t.push(`${i} ${e.id}: ${d}`),s=Object.entries(e.fields),a=i=>s.filter(([,d])=>d.role===i),o=i=>s.filter(([,d])=>d.role==="derived"&&d.yields?.includes(i)).length;["order","cancel","link","offer","consent","auth","relayed"].includes(e.class)||n("R5","unknown signature class; link-accept is a display role only"),e.expiryBinding&&!["signed","program-link","auth-window","cancel-only"].includes(e.expiryBinding)&&n("R5","unknown expiry binding"),(!e.id||!/^[a-z0-9]+(?:[.-][a-z0-9]+)+$/.test(e.id))&&n("ID","id must be dotted lower-case"),(!e.tools.length||new Set(e.tools).size!==e.tools.length)&&n("ID","tools must be a non-empty unique list");let u=e.network==="testnet"?g.testnet.chainId:g.mainnet.chainId;if(e.encoding==="eip712"){let i=e.domain;i?(Object.hasOwn(i,"salt")&&n("R1","domain must not carry a salt"),i.name||n("R1","domain name is missing"),!i.version&&e.class!=="relayed"&&n("R1","domain version is missing"),i.chainId!==u&&n("R1",`domain chain must be ${u}`),i.verifyingContract?r.has(i.verifyingContract.toLowerCase())||n("R1","verifying contract is not a pinned address"):e.class!=="cancel"&&e.class!=="auth"&&n("R1","verifying contract is missing")):n("R1","EIP-712 spec has no domain")}else e.domain&&n("R1","only EIP-712 specs carry a domain");if(e.encoding==="eip191-packed-hash"){let i=a("pinned").map(([,d])=>d.value);i.some(d=>d===u||d===String(u))||n("R1","packed layout must pin the chain id"),i.some(d=>typeof d=="string"&&r.has(d.toLowerCase()))||n("R1","packed layout must pin the verifying contract")}let c=new Map,f=e.class==="relayed"&&!Object.keys(e.types).length;if(e.encoding==="eip712"&&!f){Object.hasOwn(e.types,"EIP712Domain")&&n("R2","types must never carry EIP712Domain");try{c=T(e.types,e.primaryType);let i=N(e.types,e.primaryType);for(let d of Object.keys(e.types))i.has(d)||n("R2",`type ${d} is not reachable from ${e.primaryType}`)}catch{n("R2",`types do not resolve from ${e.primaryType}`)}for(let i of c.keys())Object.hasOwn(e.fields,i)||n("R3",`message path ${i} has no role`);for(let[i]of s)c.has(i)||n("R3",`declared field ${i} is not in the typed struct`)}else e.encoding!=="eip712"&&Object.keys(e.types).length&&n("R2","only EIP-712 specs carry types");for(let[i,d]of s)(!d.meaning||d.meaning.length>160)&&n("R3",`field ${i} needs a plain-English meaning`);(e.class==="order"||e.class==="offer")&&!s.some(([,i])=>i.role==="amount"&&i.side==="out")&&!o("amount-out")&&n("R4",`${e.class} must show the most that can leave`);for(let[i,d]of s){if(d.role==="amount"||d.role==="fee"){let h=d.token;(x(h,{strict:!1})?r.has(h.toLowerCase()):e.fields[h]?.role==="token")||n("R4",`amount ${i} does not name a token field or a pinned token`)}c.get(i)==="bytes"&&d.role!=="pinned"&&d.role!=="derived"&&n("R4",`bytes field ${i} must be pinned or derived`)}if(e.maxLifetimeSeconds>0&&e.maxLifetimeSeconds<=O||n("R5","maxLifetimeSeconds must be within 30 days"),y.has(e.class)){let i=a("expiry").length+o("expiry");i!==1&&n("R5",`${e.class} needs exactly one expiry (found ${i})`),e.expiry&&n("R5","API-only expiry is not a signed expiry"),e.expiryBinding&&e.expiryBinding!=="signed"&&n("R5",`${e.class} requires signed expiry`)}if(e.expiryBinding==="program-link"&&e.class!=="link"&&n("R5","only link can use program-link"),e.class==="link"&&e.expiryBinding!=="program-link"&&a("expiry").length+o("expiry")!==1&&n("R5","link needs signed expiry or program-link binding"),e.expiryBinding==="auth-window"){let i=e.authWindow;(e.class!=="auth"||!i||!c.has(i.field)||!Number.isSafeInteger(i.maxAgeSeconds)||i.maxAgeSeconds<=0||i.maxAgeSeconds>e.maxLifetimeSeconds||!Number.isSafeInteger(i.maxFutureSeconds)||i.maxFutureSeconds<0||i.maxFutureSeconds>e.maxLifetimeSeconds)&&n("R5","auth-window needs a signed timestamp and pinned acceptance window")}else e.authWindow&&n("R5","authWindow requires auth-window binding");return e.expiryBinding==="cancel-only"&&(e.class!=="cancel"||!a("nonce").length&&!o("nonce")&&!e.revoke?.staysExecutableUntilExpiry)&&n("R5","cancel-only needs a single-use nonce or targeted non-revoking hide"),(e.class==="auth"||e.class==="cancel")&&(s.some(([,i])=>i.role==="amount"&&i.side==="out")||o("amount-out"))&&n("R4","auth and cancel cannot grant spending authority"),E.has(e.class)&&!(e.revoke?.onchainTool||e.revoke?.offchainSpec)&&!(e.revoke?.none&&e.maxLifetimeSeconds<=I)&&n("R6",`${e.class} needs a revocation path (only a one-shot approval of at most one hour may declare none)`),e.submit.by==="addon"&&(!/^[a-z0-9-]+(\.[a-z0-9-]+)+$/.test(e.submit.host)||!/^\/[A-Za-z0-9/_.-]*$/.test(e.submit.path))&&n("R9","add-on submission needs a bare HTTPS host and a fixed path"),e.submit.by==="server-continuation"&&!e.submit.reason&&n("R9","server-continuation needs its recorded reason"),e.submit.by==="transaction"&&e.class!=="relayed"&&e.class!=="consent"&&n("R9","only relayed and consent signatures are consumed by a transaction"),(!/^[A-Za-z0-9 .'-]{1,40}$/.test(e.program)||!/^[A-Za-z0-9 .'-]{1,60}$/.test(e.purpose))&&n("R10","program and purpose must be short constant text"),m.has(e.class)&&!e.requireHuman&&!e.humanException&&n("C13",`${e.class} must require a human`),!m.has(e.class)&&e.humanException&&n("C13","only a value class can name a human exception"),e.relayedPaths&&e.class!=="relayed"&&n("ID","only relayed specs accept caller signatures"),e.enabled===!1&&!e.disabledReason&&n("ID","a disabled spec states why"),t}function z(e,r=A()){let t=e.filter(a=>a.enabled!==!1).flatMap(a=>j(a,r)),n=new Set,s=new Set;for(let a of e){n.has(a.id)&&t.push(`ID ${a.id}: duplicate spec id`),n.add(a.id);let o=C(a);s.has(o)&&t.push(`ID ${a.id}: another spec already covers ${o}`),s.add(o)}return t}function C(e){return`${e.network??"mainnet"}:${e.encoding}:${(e.domain?.verifyingContract??"-").toLowerCase()}:${e.primaryType}`}function k(e,r,t,n,s){let a=r.replace(/(\[[0-9]*\])+$/,"");if(a!==r){if(!Array.isArray(t))throw l(`message field ${n||r} is not declared`);for(let i of t)k(e,r.replace(/\[[0-9]*\]$/,""),i,`${n}[]`,s+1);return}let o=e[a];if(!o)return;if(s>8||!t||typeof t!="object"||Array.isArray(t))throw l(`message field ${n||r} is not declared`);let u=Object.keys(t),c=o.map(i=>i.name);if(u.find(i=>!c.includes(i))!==void 0)throw l(`an undeclared message field${n?` under ${n}`:""} is present`);for(let i of o){if(!Object.hasOwn(t,i.name))throw l(`message field ${n?`${n}.`:""}${i.name} is missing`);k(e,i.type,t[i.name],`${n?`${n}.`:""}${i.name}`,s+1)}}function W(e,r){if(e.encoding!=="eip712"||!e.domain)throw l("Oak has no signing contract for this request");if(!r||typeof r!="object"||!r.domain||typeof r.domain!="object")throw l("domain, chain or verifying contract is not the pinned one");let t=Object.fromEntries(Object.entries(e.domain).filter(([,n])=>n!==void 0));if(!b(Object.keys(r.domain).sort(),Object.keys(t).sort())||!b({...r.domain},t))throw l("domain, chain or verifying contract is not the pinned one");if(!r.types||typeof r.types!="object"||Object.hasOwn(r.types,"EIP712Domain")||!b(r.types,e.types)||r.primaryType!==e.primaryType)throw l("typed-data types changed");k(e.types,e.primaryType,r.message,"",0)}function p(e,r){let t=e;for(let n of r.split(".")){if(n.endsWith("[]")||!t||typeof t!="object"||Array.isArray(t))return;t=t[n]}return t}var $=e=>typeof e=="string"?e:typeof e=="number"||typeof e=="bigint"?String(e):void 0;function D(e,r){let t={},n=s=>x(s,{strict:!1})?s:$(p(r,s));for(let[s,a]of Object.entries(e.fields)){let o=$(p(r,s));if(o!==void 0)switch(a.role){case"signer":t.signer=o;break;case"account":t.account=o;break;case"recipient":t.recipient=o;break;case"delegate":t.delegate=o;break;case"counterparty":t.counterparty=o;break;case"token":a.side==="out"?t.tokenOut=o:t.tokenIn=o;break;case"amount":a.side==="out"?(t.amountOut=o,t.tokenOut??=n(a.token)):(t.minAmountIn=o,t.tokenIn??=n(a.token));break;case"fee":(t.fees??=[]).push({token:n(a.token)??a.token,value:o});break;case"expiry":t.expiry=/^[0-9]+$/.test(o)?Number(o):Number.NaN;break;case"nonce":t.nonce=o;break;default:break}}return t}function L(e,r,t){let n=Math.min(e.maxLifetimeSeconds,O),s=y.has(e.class)||e.humanException?60:1;if(!Number.isSafeInteger(t)||t<0||!Number.isFinite(n)||n<=0||r===void 0||!Number.isSafeInteger(r)||r<=0||r>=S||r<t+s||r>t+n)throw l(`expiry is missing, past or beyond ${n>=86400?`${Math.floor(n/86400)} days`:`${Math.ceil(n/60)} minutes`}`)}function U(e,r,t,n){if(e.enabled===!1)throw l("Oak has no signing contract for this request");if(!Number.isSafeInteger(t)||t<0||t>=S)throw l("signing time is unavailable");if(e.expiryBinding==="auth-window"){let o=e.authWindow,u=o&&p(r,o.field),c=typeof u=="number"?u:typeof u=="string"&&/^[0-9]+$/.test(u)?Number(u):NaN;if(e.class!=="auth"||!o||!Number.isSafeInteger(c)||c<=0||c>=S||c<t-o.maxAgeSeconds||c>t+o.maxFutureSeconds)throw l("authentication time is outside the pinned window");return c+o.maxAgeSeconds}if(e.expiryBinding==="cancel-only"){if(e.class!=="cancel")throw l("Oak has no signing contract for this request");return n}if(e.expiryBinding==="program-link")throw l("program link authority is not configured");if(y.has(e.class)&&(e.expiry||e.expiryBinding&&e.expiryBinding!=="signed"))throw l("order expiry must be signed");let s=D(e,r).expiry??n,a=Object.values(e.fields).some(o=>o.role==="expiry"||o.role==="derived"&&o.yields?.includes("expiry"));if(y.has(e.class)&&!a)throw l("order expiry must be signed");return(a||m.has(e.class))&&L(e,s,t),s}function H(e){if(e===void 0||!/^[0-9]{1,78}$/.test(e))throw l("open-ended or out-of-range amount");let r=BigInt(e);if(r<=0n||r>=v)throw l("open-ended or out-of-range amount");return r}function J(e,r){return Object.entries(e.fields).map(([t,n])=>{let s=t.includes("[]")?"(each item, listed below)":p(r,t),a=typeof s=="object"&&s!==null?JSON.stringify(s):String(s);a.length>200&&(a=`${a.slice(0,200)}\u2026`);let o=JSON.stringify(a).replace(/[\u007f-\u009f\u2028\u2029\u202a-\u202e\u2066-\u2069]/g,u=>`\\u${u.charCodeAt(0).toString(16).padStart(4,"0")}`);return`${t} = ${o} - ${n.meaning}`})}export{O as a,v as b,m as c,l as d,V as e,T as f,A as g,j as h,z as i,C as j,W as k,p as l,D as m,L as n,U as o,H as p,J as q};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as d}from"./XSD5NL7J.js";import{getAddress as n,keccak256 as x}from"viem";var A={version:"hookr-launcher-v1",chainId:4663,blockNumber:"104346779",blockHash:"0x1bdaca726ac3f0b1dd0d861edf9fa3774dc1765fb51771632c7a7ef9751900bc",roles:{launcherV1:"0x70a66ADF39B5c9FfEE4A9F081C182edfbb7DBD0C",rootV1:"0x89c9FB50d1f03192230FFB1c279BB6E7d3Fe6aCc",rulesV1:"0x342bAA22e202954593b04B7eD1663621E0565d46",agentGateV1:"0x3b1aC66a6Fd9e9d8F063d145003cf29eac4Fb0C9",familyRouterV1:"0xbc56F48f873841d26a5a02575263d82f68e12864",familyLockV1:"0x5248AF9139DaDEf0C5296342b7BE441deDf0adC2",launcherLegacy:"0x1cf2748A6670572425eAbf9Ab9e5BC4eb2eB8Ef4",rulesPrevious:"0x8AD0aC66DbeBcc047e8d216666C925E797e5e52e",rulesLegacy:"0x4a71c270b1520F94064268102AebD744b0DE7942",registry:"0x463c82beA1a52F4Cc05ca0741a24F0AD24bA4602",poolManager:"0x8366a39CC670B4001A1121B8F6A443A643e40951",familyLockLegacy:"0xfAFEcE64099C1E791C4B46189c277f00c0c7e00b",HookrLaunchChecks_856736:"0x8567369a70100828611BB6F44ec051B48F10fb59",HookrTokenDeployer_e703f2:"0xE703F2Cd21A8dEE05dbC81b693201D602772B2d8",HookrTokenDeployer_1b23d6:"0x1B23D6d7beBcB61E39317E9F0Bc02AEB91aFCcAe",HookrRegistryAdmin_675ac2:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1",HookrRegistryChecks_b9f5c5:"0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98",agentGateV2:"0xF95e6c8eEdA88b4D8Dfd43A087D153059A5107b0",recaptureExecutor:"0x4B4c16681401454140a9dBca55e5c186BBE8D728",book:"0x0c376cc30b1AC98b8ef80a4F516212D3B99402fA"},contracts:{"0x70a66ADF39B5c9FfEE4A9F081C182edfbb7DBD0C":{role:"launcherV1",address:"0x70a66ADF39B5c9FfEE4A9F081C182edfbb7DBD0C",codeHash:"0xf1a77b5576a56082679dc590f1a02dc4e834e91cc984e4996b8b08d0f11c1714",dependencies:["0x8567369a70100828611BB6F44ec051B48F10fb59","0xE703F2Cd21A8dEE05dbC81b693201D602772B2d8","0x8366a39CC670B4001A1121B8F6A443A643e40951","0x463c82beA1a52F4Cc05ca0741a24F0AD24bA4602"],links:[{start:80,length:20,address:"0x8567369a70100828611BB6F44ec051B48F10fb59"},{start:19566,length:20,address:"0x8567369a70100828611BB6F44ec051B48F10fb59"},{start:4906,length:20,address:"0xE703F2Cd21A8dEE05dbC81b693201D602772B2d8"},{start:14065,length:20,address:"0xE703F2Cd21A8dEE05dbC81b693201D602772B2d8"}],source:"https://sourcify.dev/server/v2/contract/4663/0x70a66ADF39B5c9FfEE4A9F081C182edfbb7DBD0C",match:"exact_match"},"0x89c9FB50d1f03192230FFB1c279BB6E7d3Fe6aCc":{role:"rootV1",address:"0x89c9FB50d1f03192230FFB1c279BB6E7d3Fe6aCc",codeHash:"0xd336de325837e60a74cea11d87b5ebd1cc8961911f611f38de0508d23b6e779f",dependencies:["0x8366a39CC670B4001A1121B8F6A443A643e40951","0x463c82beA1a52F4Cc05ca0741a24F0AD24bA4602","0xC2Bc9a3fe6c4Ce8C2F7EB4655b0869b01D8c93C9","0x445D7891381Aa7F91F5048EdBC6a611ccBDe7865","0x8876789976dEcBfCbBbe364623C63652db8C0904","0x9A8a1006469BA196f8FEfc017a53505C83A060BB"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x89c9FB50d1f03192230FFB1c279BB6E7d3Fe6aCc",match:"exact_match"},"0x342bAA22e202954593b04B7eD1663621E0565d46":{role:"rulesV1",address:"0x342bAA22e202954593b04B7eD1663621E0565d46",codeHash:"0xd9562958e6ecb3bfea31590b1d0201c281365b2becc1924ac4c5419e9cc1c32f",dependencies:["0x8366a39CC670B4001A1121B8F6A443A643e40951","0x463c82beA1a52F4Cc05ca0741a24F0AD24bA4602","0x2242F7FC75606500503075f29ea8cDA684EfB4a9","0x89c9FB50d1f03192230FFB1c279BB6E7d3Fe6aCc","0x97D440593912234b78432A030fb5186BD2A3Bc86","0x8D0583b408e2959FA0450c54F749C1A4Dad3d335","0x0B0f08c381ed6902FAb74b470fe7f8A58E8EA269","0xc42E47679dd06DDcC07acc72ca710f6E60ACC3A9","0xdA360B744F8C816acbb97fF65cC4Cd81e27Df375"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x342bAA22e202954593b04B7eD1663621E0565d46",match:"exact_match"},"0x3b1aC66a6Fd9e9d8F063d145003cf29eac4Fb0C9":{role:"agentGateV1",address:"0x3b1aC66a6Fd9e9d8F063d145003cf29eac4Fb0C9",codeHash:"0x9aa76e84dabf5fbc568f620c5a0ea9817d55ea74a75cb43adfe58847a7db8d7c",dependencies:["0x8004A169FB4a3325136EB29fA0ceB6D2e539a432","0x8004BAa17C55a88189AE136b182e5fdA19dE9b63","0x8366a39CC670B4001A1121B8F6A443A643e40951","0x8Fdfaa25e2E4dDa297F301ea06458f22186D6bE9"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x3b1aC66a6Fd9e9d8F063d145003cf29eac4Fb0C9",match:"exact_match"},"0xbc56F48f873841d26a5a02575263d82f68e12864":{role:"familyRouterV1",address:"0xbc56F48f873841d26a5a02575263d82f68e12864",codeHash:"0x9e5741dabd7ac598ea5f5cc618272189a27b09cdec02b9a5eed77dc95acf0eec",dependencies:["0xC2Bc9a3fe6c4Ce8C2F7EB4655b0869b01D8c93C9","0x70a66ADF39B5c9FfEE4A9F081C182edfbb7DBD0C","0x8366a39CC670B4001A1121B8F6A443A643e40951","0x000000000022D473030F116dDEE9F6B43aC78BA3","0x463c82beA1a52F4Cc05ca0741a24F0AD24bA4602"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0xbc56F48f873841d26a5a02575263d82f68e12864",match:"exact_match"},"0x5248AF9139DaDEf0C5296342b7BE441deDf0adC2":{role:"familyLockV1",address:"0x5248AF9139DaDEf0C5296342b7BE441deDf0adC2",codeHash:"0x488b7321770121eb0edc0f4b393f077d19eb6403416ab392713b0c29009a5dc1",dependencies:["0x70a66ADF39B5c9FfEE4A9F081C182edfbb7DBD0C","0x8366a39CC670B4001A1121B8F6A443A643e40951"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x5248AF9139DaDEf0C5296342b7BE441deDf0adC2",match:"exact_match"},"0x1cf2748A6670572425eAbf9Ab9e5BC4eb2eB8Ef4":{role:"launcherLegacy",address:"0x1cf2748A6670572425eAbf9Ab9e5BC4eb2eB8Ef4",codeHash:"0x96b8c338c38a072ceef8b947ad93d3d7a46d2d7c70189d2b4ee92efb2a5e1d5d",dependencies:["0x8567369a70100828611BB6F44ec051B48F10fb59","0x1B23D6d7beBcB61E39317E9F0Bc02AEB91aFCcAe","0x8366a39CC670B4001A1121B8F6A443A643e40951","0x463c82beA1a52F4Cc05ca0741a24F0AD24bA4602"],links:[{start:80,length:20,address:"0x8567369a70100828611BB6F44ec051B48F10fb59"},{start:19515,length:20,address:"0x8567369a70100828611BB6F44ec051B48F10fb59"},{start:4884,length:20,address:"0x1B23D6d7beBcB61E39317E9F0Bc02AEB91aFCcAe"},{start:14014,length:20,address:"0x1B23D6d7beBcB61E39317E9F0Bc02AEB91aFCcAe"}],source:"https://sourcify.dev/server/v2/contract/4663/0x1cf2748A6670572425eAbf9Ab9e5BC4eb2eB8Ef4",match:"exact_match"},"0x8AD0aC66DbeBcc047e8d216666C925E797e5e52e":{role:"rulesPrevious",address:"0x8AD0aC66DbeBcc047e8d216666C925E797e5e52e",codeHash:"0x26dc86731245621bc765a95ebee7636c4eb726c4e9bc8e8946294d223404a677",dependencies:["0x8366a39CC670B4001A1121B8F6A443A643e40951","0x463c82beA1a52F4Cc05ca0741a24F0AD24bA4602","0x2242F7FC75606500503075f29ea8cDA684EfB4a9","0x89c9FB50d1f03192230FFB1c279BB6E7d3Fe6aCc","0x1172a3cC44ce8E8E3F1f0e58a9A0E9678b7118f8","0x8D0583b408e2959FA0450c54F749C1A4Dad3d335","0xe5FCbB899C95B4c7cd3afFfd1f4EB093138870A2","0xc42E47679dd06DDcC07acc72ca710f6E60ACC3A9","0xFA66c713bb10298B47E0afC43389212F279E8245"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x8AD0aC66DbeBcc047e8d216666C925E797e5e52e",match:"exact_match"},"0x4a71c270b1520F94064268102AebD744b0DE7942":{role:"rulesLegacy",address:"0x4a71c270b1520F94064268102AebD744b0DE7942",codeHash:"0x4b6d50b40981b8082f3ee5a7ebf57e48489f71c94c2a3b94032a1d1a382b515b",dependencies:["0x8366a39CC670B4001A1121B8F6A443A643e40951","0x463c82beA1a52F4Cc05ca0741a24F0AD24bA4602","0x2242F7FC75606500503075f29ea8cDA684EfB4a9","0x89c9FB50d1f03192230FFB1c279BB6E7d3Fe6aCc","0xF83569E564d70daebc35950f66a73f2e2B915583"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x4a71c270b1520F94064268102AebD744b0DE7942",match:"exact_match"},"0x463c82beA1a52F4Cc05ca0741a24F0AD24bA4602":{role:"registry",address:"0x463c82beA1a52F4Cc05ca0741a24F0AD24bA4602",codeHash:"0xc16e7681583d8d9af8e8c54962f7e890b967687dee4cf32dbd676d4d547d2359",dependencies:["0x675ac2102E8c69E2467F64656E3c235AF3901Ac1","0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98","0x8366a39CC670B4001A1121B8F6A443A643e40951"],links:[{start:1195,length:20,address:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1"},{start:1812,length:20,address:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1"},{start:2770,length:20,address:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1"},{start:3016,length:20,address:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1"},{start:4424,length:20,address:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1"},{start:6120,length:20,address:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1"},{start:7306,length:20,address:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1"},{start:9294,length:20,address:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1"},{start:9970,length:20,address:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1"},{start:10351,length:20,address:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1"},{start:12268,length:20,address:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1"},{start:12965,length:20,address:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1"},{start:13521,length:20,address:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1"},{start:15721,length:20,address:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1"},{start:16994,length:20,address:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1"},{start:17547,length:20,address:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1"},{start:18245,length:20,address:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1"},{start:19037,length:20,address:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1"},{start:20001,length:20,address:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1"},{start:2190,length:20,address:"0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98"},{start:4233,length:20,address:"0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98"},{start:5155,length:20,address:"0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98"},{start:5922,length:20,address:"0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98"},{start:13380,length:20,address:"0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98"},{start:13963,length:20,address:"0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98"},{start:16828,length:20,address:"0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98"},{start:17833,length:20,address:"0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98"},{start:18079,length:20,address:"0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98"},{start:19893,length:20,address:"0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98"}],source:"https://sourcify.dev/server/v2/contract/4663/0x463c82beA1a52F4Cc05ca0741a24F0AD24bA4602",match:"exact_match"},"0x8366a39CC670B4001A1121B8F6A443A643e40951":{role:"poolManager",address:"0x8366a39CC670B4001A1121B8F6A443A643e40951",codeHash:"0xbd3881180b547f5fe817545743cfb4343e96b1bc6640dcd70c106b0066e95626",dependencies:[],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x8366a39CC670B4001A1121B8F6A443A643e40951",match:"match"},"0xfAFEcE64099C1E791C4B46189c277f00c0c7e00b":{role:"familyLockLegacy",address:"0xfAFEcE64099C1E791C4B46189c277f00c0c7e00b",codeHash:"0x4204916844297bc548ef02a5d081effd33e31fc4a4fab0b34ced52c17e53e535",dependencies:["0x1cf2748A6670572425eAbf9Ab9e5BC4eb2eB8Ef4","0x8366a39CC670B4001A1121B8F6A443A643e40951"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0xfAFEcE64099C1E791C4B46189c277f00c0c7e00b",match:"exact_match"},"0x8567369a70100828611BB6F44ec051B48F10fb59":{role:"HookrLaunchChecks_856736",address:"0x8567369a70100828611BB6F44ec051B48F10fb59",codeHash:"0xb9f17232100ac1ac05e9b662e916abad854f650156c67585bde7e99237d3cfca",dependencies:[],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x8567369a70100828611BB6F44ec051B48F10fb59",match:"exact_match"},"0xE703F2Cd21A8dEE05dbC81b693201D602772B2d8":{role:"HookrTokenDeployer_e703f2",address:"0xE703F2Cd21A8dEE05dbC81b693201D602772B2d8",codeHash:"0xb54e618fb33b3fb0591e482cb878ef5d7fcc3758576f6b9840eeb6557fc063f8",dependencies:[],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0xE703F2Cd21A8dEE05dbC81b693201D602772B2d8",match:"exact_match"},"0x1B23D6d7beBcB61E39317E9F0Bc02AEB91aFCcAe":{role:"HookrTokenDeployer_1b23d6",address:"0x1B23D6d7beBcB61E39317E9F0Bc02AEB91aFCcAe",codeHash:"0x724642470fbeef5a98a04b009376e10af722b96f932d992b256e412c4ea989b5",dependencies:[],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x1B23D6d7beBcB61E39317E9F0Bc02AEB91aFCcAe",match:"exact_match"},"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1":{role:"HookrRegistryAdmin_675ac2",address:"0x675ac2102E8c69E2467F64656E3c235AF3901Ac1",codeHash:"0x070ba14bedd7b9c3c259998af44032ace80a49dc5d741d604fa1b82fd7737abc",dependencies:["0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98"],links:[{start:215,length:20,address:"0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98"},{start:1054,length:20,address:"0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98"},{start:2745,length:20,address:"0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98"},{start:3987,length:20,address:"0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98"}],source:"https://sourcify.dev/server/v2/contract/4663/0x675ac2102E8c69E2467F64656E3c235AF3901Ac1",match:"exact_match"},"0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98":{role:"HookrRegistryChecks_b9f5c5",address:"0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98",codeHash:"0xbf12974a6e59bc744e8d29bf9308c888e97e562693324dca7e8bdf20e0f81349",dependencies:[],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98",match:"exact_match"},"0xC2Bc9a3fe6c4Ce8C2F7EB4655b0869b01D8c93C9":{role:"immutable_C2Bc9a3f",address:"0xC2Bc9a3fe6c4Ce8C2F7EB4655b0869b01D8c93C9",codeHash:"0x855177b2017e7b73a79cb0c7b3027044beb5e726fbdc0fd2937229e32ecd7e0b",dependencies:["0x8366a39CC670B4001A1121B8F6A443A643e40951","0x463c82beA1a52F4Cc05ca0741a24F0AD24bA4602","0xe7863CC0E2Fb783b44c279aB159bcD812c2ceA1c"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0xC2Bc9a3fe6c4Ce8C2F7EB4655b0869b01D8c93C9",match:"exact_match"},"0x445D7891381Aa7F91F5048EdBC6a611ccBDe7865":{role:"immutable_445D7891",address:"0x445D7891381Aa7F91F5048EdBC6a611ccBDe7865",codeHash:"0x1623e56a309a31e3626b854cd87623d62e39f743e2943d1f36ba13d677cef67a",dependencies:["0x8366a39CC670B4001A1121B8F6A443A643e40951","0x463c82beA1a52F4Cc05ca0741a24F0AD24bA4602"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x445D7891381Aa7F91F5048EdBC6a611ccBDe7865",match:"exact_match"},"0x8876789976dEcBfCbBbe364623C63652db8C0904":{role:"immutable_88767899",address:"0x8876789976dEcBfCbBbe364623C63652db8C0904",codeHash:"0x2ce6aaaf9f4151f5e1cbf774668772f17f532ae11b15e9284fd0a072a8b0fbde",dependencies:["0x7332D11BD10d18A04B119Cd4671a96f3148002c4","0x73991a25C818Bf1f1128dEAaB1492D45638DE0D3","0x58daec3116aae6D93017bAAea7749052E8a04fA7","0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73","0x000000000022D473030F116dDEE9F6B43aC78BA3","0x8bcEaA40B9AcdfAedF85AdF4FF01F5Ad6517937f","0x1f7d7550B1b028f7571E69A784071F0205FD2EfA","0x8366a39CC670B4001A1121B8F6A443A643e40951"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x8876789976dEcBfCbBbe364623C63652db8C0904",match:"match"},"0x9A8a1006469BA196f8FEfc017a53505C83A060BB":{role:"immutable_9A8a1006",address:"0x9A8a1006469BA196f8FEfc017a53505C83A060BB",codeHash:"0x0b71a0db955a7a000d3bd3cd721c74cbbf1870eaaf02c1274542c834f8591f1f",dependencies:["0x8366a39CC670B4001A1121B8F6A443A643e40951","0x463c82beA1a52F4Cc05ca0741a24F0AD24bA4602"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x9A8a1006469BA196f8FEfc017a53505C83A060BB",match:"exact_match"},"0x2242F7FC75606500503075f29ea8cDA684EfB4a9":{role:"immutable_2242F7FC",address:"0x2242F7FC75606500503075f29ea8cDA684EfB4a9",codeHash:"0x95d1784c555685e9ccbc0ba9f6d1e6facea864fd1de77ebbc98862dcf2c13454",dependencies:["0x8366a39CC670B4001A1121B8F6A443A643e40951"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x2242F7FC75606500503075f29ea8cDA684EfB4a9",match:"exact_match"},"0x97D440593912234b78432A030fb5186BD2A3Bc86":{role:"immutable_97D44059",address:"0x97D440593912234b78432A030fb5186BD2A3Bc86",codeHash:"0x1f622db841d81a460cced260dc6cc89810ea0b20d5ecaeaa12e170ba4d110823",dependencies:["0x8366a39CC670B4001A1121B8F6A443A643e40951","0x2242F7FC75606500503075f29ea8cDA684EfB4a9"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x97D440593912234b78432A030fb5186BD2A3Bc86",match:"exact_match"},"0x8D0583b408e2959FA0450c54F749C1A4Dad3d335":{role:"immutable_8D0583b4",address:"0x8D0583b408e2959FA0450c54F749C1A4Dad3d335",codeHash:"0x1825f945ef04d5304707da468929c33dcf125db20d9c0292d98952455a393775",dependencies:["0x8366a39CC670B4001A1121B8F6A443A643e40951","0x2242F7FC75606500503075f29ea8cDA684EfB4a9"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x8D0583b408e2959FA0450c54F749C1A4Dad3d335",match:"exact_match"},"0x0B0f08c381ed6902FAb74b470fe7f8A58E8EA269":{role:"immutable_0B0f08c3",address:"0x0B0f08c381ed6902FAb74b470fe7f8A58E8EA269",codeHash:"0xd48b4c4fb93299f401452de225d70df49a903f4874bccb0b98f44f0951b1b5cb",dependencies:[],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x0B0f08c381ed6902FAb74b470fe7f8A58E8EA269",match:"exact_match"},"0xc42E47679dd06DDcC07acc72ca710f6E60ACC3A9":{role:"immutable_c42E4767",address:"0xc42E47679dd06DDcC07acc72ca710f6E60ACC3A9",codeHash:"0x9f810ec150181c58ed3af00c5b1be7b5d974b5b34450c7d1918d0cf70c5ac2ae",dependencies:[],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0xc42E47679dd06DDcC07acc72ca710f6E60ACC3A9",match:"exact_match"},"0xdA360B744F8C816acbb97fF65cC4Cd81e27Df375":{role:"immutable_dA360B74",address:"0xdA360B744F8C816acbb97fF65cC4Cd81e27Df375",codeHash:"0xbc34e16733f65147eae2f6d5247847c19327ed4d2d40b84549b79ce17e40c450",dependencies:["0x8366a39CC670B4001A1121B8F6A443A643e40951"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0xdA360B744F8C816acbb97fF65cC4Cd81e27Df375",match:"exact_match"},"0x8004A169FB4a3325136EB29fA0ceB6D2e539a432":{role:"immutable_8004A169",address:"0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",codeHash:"0xd0e45b1d89fa9b6cc7e97c1f155d64180e5c232aaccf9900ef9d4fd738c02b41",dependencies:[],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",match:"exact_match"},"0x8004BAa17C55a88189AE136b182e5fdA19dE9b63":{role:"immutable_8004BAa1",address:"0x8004BAa17C55a88189AE136b182e5fdA19dE9b63",codeHash:"0xd0e45b1d89fa9b6cc7e97c1f155d64180e5c232aaccf9900ef9d4fd738c02b41",dependencies:[],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x8004BAa17C55a88189AE136b182e5fdA19dE9b63",match:"exact_match"},"0x8Fdfaa25e2E4dDa297F301ea06458f22186D6bE9":{role:"immutable_8Fdfaa25",address:"0x8Fdfaa25e2E4dDa297F301ea06458f22186D6bE9",codeHash:"0x4e381985ca68b3e5d27b4425fa581c19cf33146d3f887a3cfca96f55528ea46f",dependencies:[],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x8Fdfaa25e2E4dDa297F301ea06458f22186D6bE9",match:null},"0x000000000022D473030F116dDEE9F6B43aC78BA3":{role:"immutable_00000000",address:"0x000000000022D473030F116dDEE9F6B43aC78BA3",codeHash:"0x5208783f52488f7d3493e5e38311ab707c1d75457fe472a19b0b4d57d66a7fca",dependencies:[],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x000000000022D473030F116dDEE9F6B43aC78BA3",match:"match"},"0x1172a3cC44ce8E8E3F1f0e58a9A0E9678b7118f8":{role:"immutable_1172a3cC",address:"0x1172a3cC44ce8E8E3F1f0e58a9A0E9678b7118f8",codeHash:"0xb1d8b1d6a6626ee859cc0c5a2725078fb62245d730015b3405974928fba6e5c1",dependencies:["0x8366a39CC670B4001A1121B8F6A443A643e40951","0x2242F7FC75606500503075f29ea8cDA684EfB4a9"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x1172a3cC44ce8E8E3F1f0e58a9A0E9678b7118f8",match:"exact_match"},"0xe5FCbB899C95B4c7cd3afFfd1f4EB093138870A2":{role:"immutable_e5FCbB89",address:"0xe5FCbB899C95B4c7cd3afFfd1f4EB093138870A2",codeHash:"0x479a933df7325219942f75f36046f731ed7409f96e0c279e9912e2d0ed5ee0ed",dependencies:[],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0xe5FCbB899C95B4c7cd3afFfd1f4EB093138870A2",match:"exact_match"},"0xFA66c713bb10298B47E0afC43389212F279E8245":{role:"immutable_FA66c713",address:"0xFA66c713bb10298B47E0afC43389212F279E8245",codeHash:"0x6731ed800a1eb9d083f640ad8c00f94dc0cb3461c3f5124a21349ad30c8e6e28",dependencies:["0x8366a39CC670B4001A1121B8F6A443A643e40951"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0xFA66c713bb10298B47E0afC43389212F279E8245",match:"exact_match"},"0xF83569E564d70daebc35950f66a73f2e2B915583":{role:"immutable_F83569E5",address:"0xF83569E564d70daebc35950f66a73f2e2B915583",codeHash:"0xb78c68d64388c9c0c4d20faa3d429309a6a025024c3eefc579831bb10de145ed",dependencies:["0x8366a39CC670B4001A1121B8F6A443A643e40951","0x2242F7FC75606500503075f29ea8cDA684EfB4a9","0x89c9FB50d1f03192230FFB1c279BB6E7d3Fe6aCc"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0xF83569E564d70daebc35950f66a73f2e2B915583",match:"exact_match"},"0xe7863CC0E2Fb783b44c279aB159bcD812c2ceA1c":{role:"immutable_e7863CC0",address:"0xe7863CC0E2Fb783b44c279aB159bcD812c2ceA1c",codeHash:"0x3242bd3dea1be9c1ffd17b23475f2d1d11fb5ee9cdbe8328b309b7adb8427043",dependencies:["0x000000000022D473030F116dDEE9F6B43aC78BA3","0x463c82beA1a52F4Cc05ca0741a24F0AD24bA4602","0xC2Bc9a3fe6c4Ce8C2F7EB4655b0869b01D8c93C9"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0xe7863CC0E2Fb783b44c279aB159bcD812c2ceA1c",match:"exact_match"},"0x7332D11BD10d18A04B119Cd4671a96f3148002c4":{role:"immutable_7332D11B",address:"0x7332D11BD10d18A04B119Cd4671a96f3148002c4",codeHash:"0xb16b4aa5c5f14b9d186d48bb074c2d02a96e9e2e3aef74d0815f6d4a9a9f7bdd",dependencies:[],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x7332D11BD10d18A04B119Cd4671a96f3148002c4",match:null},"0x73991a25C818Bf1f1128dEAaB1492D45638DE0D3":{role:"immutable_73991a25",address:"0x73991a25C818Bf1f1128dEAaB1492D45638DE0D3",codeHash:"0x0a493d1af3d0f25fed8efa205244ebee14114267a08647fc38c515c7cd6ead4f",dependencies:["0x6F84dAE9c064ff453E5C8af51EfB819f8f610225","0x1f7d7550B1b028f7571E69A784071F0205FD2EfA","0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x73991a25C818Bf1f1128dEAaB1492D45638DE0D3",match:"match"},"0x58daec3116aae6D93017bAAea7749052E8a04fA7":{role:"immutable_58daec31",address:"0x58daec3116aae6D93017bAAea7749052E8a04fA7",codeHash:"0xc873e135dc9aaec88489cfbad146b4cb49d6a32e0d80326377784b7ba17670b2",dependencies:["0x9639443158E8C5efa35Bd45287bf2EFfd3D8dC06","0x8366a39CC670B4001A1121B8F6A443A643e40951","0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73","0x000000000022D473030F116dDEE9F6B43aC78BA3"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x58daec3116aae6D93017bAAea7749052E8a04fA7",match:"match"},"0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73":{role:"immutable_0Bd7D308",address:"0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73",codeHash:"0x5706be52f64875fee65a2cec0d80e47a23d8793cbe85d214b48445e2d05f5353",dependencies:[],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73",match:"exact_match"},"0x8bcEaA40B9AcdfAedF85AdF4FF01F5Ad6517937f":{role:"immutable_8bcEaA40",address:"0x8bcEaA40B9AcdfAedF85AdF4FF01F5Ad6517937f",codeHash:"0xbab145d02e7005f0d84c6c1639d39b799b0ea16df99ebbdaf5a14d9da820b4e0",dependencies:[],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x8bcEaA40B9AcdfAedF85AdF4FF01F5Ad6517937f",match:"exact_match"},"0x1f7d7550B1b028f7571E69A784071F0205FD2EfA":{role:"immutable_1f7d7550",address:"0x1f7d7550B1b028f7571E69A784071F0205FD2EfA",codeHash:"0xec72b1abd1f2faee020cfea9c646bd8994f9fb389054f6e574f103a895091739",dependencies:[],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x1f7d7550B1b028f7571E69A784071F0205FD2EfA",match:"match"},"0x6F84dAE9c064ff453E5C8af51EfB819f8f610225":{role:"immutable_6F84dAE9",address:"0x6F84dAE9c064ff453E5C8af51EfB819f8f610225",codeHash:"0x6c57ccabb87f0ac1de9a2115c27e517cc87c3c1e3dd3ac407d1a42d19a327c86",dependencies:[],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x6F84dAE9c064ff453E5C8af51EfB819f8f610225",match:null},"0x9639443158E8C5efa35Bd45287bf2EFfd3D8dC06":{role:"immutable_96394431",address:"0x9639443158E8C5efa35Bd45287bf2EFfd3D8dC06",codeHash:"0x09d3b199609b46e8921e47c5d0d98ae083e70d2d3b63a6099dc7e947b2f58b20",dependencies:["0x525b4bd46d3A33F16ac815B4A303b3110fB9d10b"],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x9639443158E8C5efa35Bd45287bf2EFfd3D8dC06",match:"match"},"0x525b4bd46d3A33F16ac815B4A303b3110fB9d10b":{role:"immutable_525b4bd4",address:"0x525b4bd46d3A33F16ac815B4A303b3110fB9d10b",codeHash:"0x7664c06c3ff64366b0c870eb585d9d80aa5730441eccca3025054e0366a20d0b",dependencies:[],links:[],source:"https://sourcify.dev/server/v2/contract/4663/0x525b4bd46d3A33F16ac815B4A303b3110fB9d10b",match:"match"},"0xF95e6c8eEdA88b4D8Dfd43A087D153059A5107b0":{role:"agentGateV2",address:"0xF95e6c8eEdA88b4D8Dfd43A087D153059A5107b0",codeHash:"0xbcbb8b8aa24efd5c532e56ba2dad28fa3b28371d074285e5960f7c2601cb87cc",dependencies:["0x8004A169FB4a3325136EB29fA0ceB6D2e539a432","0x8004BAa17C55a88189AE136b182e5fdA19dE9b63","0x8366a39CC670B4001A1121B8F6A443A643e40951","0x8Fdfaa25e2E4dDa297F301ea06458f22186D6bE9","0x58daec3116aae6D93017bAAea7749052E8a04fA7"],links:[],source:"https://github.com/Hookr-fun/hookr-contracts/blob/dd675a231eee34a9a5d56216cdda5628cbf00e59/hookr-1/agent-gate/src/HookrAgentGate.sol",match:"exact_match",observedBlockNumber:"111518773",observedBlockHash:"0xbe956e938f3349a6bf7280ccf0996ca9ee50e147a5cf51f597e1cb354b97bedb"},"0x4B4c16681401454140a9dBca55e5c186BBE8D728":{role:"recaptureExecutor",address:"0x4B4c16681401454140a9dBca55e5c186BBE8D728",codeHash:"0xa454566f248677718ca1c6ed8df59e23bc6dc4b9f787a1c9bd687912d4ef508f",dependencies:[],links:[],source:"source not public",match:"source not public",observedBlockNumber:"111518773",observedBlockHash:"0xbe956e938f3349a6bf7280ccf0996ca9ee50e147a5cf51f597e1cb354b97bedb"},"0x0c376cc30b1AC98b8ef80a4F516212D3B99402fA":{role:"book",address:"0x0c376cc30b1AC98b8ef80a4F516212D3B99402fA",codeHash:"0xdb4a2658dcaf05a1b3700dec1ce8980727813efb0059fe758951d520e3c6ebe9",dependencies:[],links:[],source:"https://github.com/Hookr-fun/hookr-contracts/blob/dd675a231eee34a9a5d56216cdda5628cbf00e59/hookr-1/hook-blocks/limit-orders/src/HookrLimitOrders.sol",match:"exact_match",observedBlockNumber:"111526876",observedBlockHash:"0xedbbaa80135a7cd20ecbb1f2eb2177003a4670a1f123b29b8cdf836af289f443"}},gateVersions:{identity:"0x9da4ea57e56972d6b59b74df977e55a996eba90167c2c0c7bb2e46873c9acc31",reputation:"0x9da4ea57e56972d6b59b74df977e55a996eba90167c2c0c7bb2e46873c9acc31"},launcherDeployments:{"0x70a66ADF39B5c9FfEE4A9F081C182edfbb7DBD0C":{transactionHash:"0xdf5b507c60f4941edbc4666c624a900701631cac3ef06ab3756c28e5e3f60580",blockNumber:"103300226",transactionIndex:"4",deployer:"0x0c0967485A25F18E70262a2Ee80c7595CC64a5fC"},"0x1cf2748A6670572425eAbf9Ab9e5BC4eb2eB8Ef4":{transactionHash:"0xa48e4cf08e0020fbfb40067a041fcacd3bb0bb4c6dcd3358c10d16021d49a31f",blockNumber:"82270054",transactionIndex:"3",deployer:"0x0c0967485A25F18E70262a2Ee80c7595CC64a5fC"}},gateProfiles:{current:"0xF95e6c8eEdA88b4D8Dfd43A087D153059A5107b0",legacy:"0x3b1aC66a6Fd9e9d8F063d145003cf29eac4Fb0C9",sourceCommit:"dd675a231eee34a9a5d56216cdda5628cbf00e59",observedBlock:{number:"111518773",hash:"0xbe956e938f3349a6bf7280ccf0996ca9ee50e147a5cf51f597e1cb354b97bedb"}}};var o=A.roles,p=A.roles.agentGateV2,k=A.roles.recaptureExecutor,C=0x2accn,i=A.contracts;async function h(c,e,a){let b=n(e.address),s=await c.getCode({address:b,blockNumber:a});if(!s||s==="0x"||x(s)!==e.codeHash)throw new d(`Hookr runtime code is unknown or drifted at ${b}. Refresh the reviewed deployment pins before using this route.`);for(let t of e.links)if(t.length!==20||`0x${s.slice(2+t.start*2,2+(t.start+t.length)*2)}`.toLowerCase()!==t.address.toLowerCase())throw new d("Hookr linked library differs from its reviewed pin.")}function l(c){let e=i[n(c)];if(!e)throw new d("Unknown Hookr deployment. Use a locally reviewed Launcher, Root, core and gate.");return e}async function g(c,e,a,b=new Set){if(e<0n)throw new d("Provide a nonnegative named Hookr block.");if((BigInt(o.rootV1)&0x3fffn)!==C)throw new d("HookrRoot permission mask differs from 0x2acc.");let s=new Map,t=r=>{let f=l(r);if(!s.has(f.address)){s.set(f.address,f);for(let F of f.dependencies)t(F)}};a.forEach(t);let E=[...s.values()].filter(r=>!b.has(r.address));for(let r=0;r<E.length;r+=2)await Promise.all(E.slice(r,r+2).map(async f=>{await h(c,f,e),b.add(f.address)}))}async function y(c,e){if(await c.getChainId()!==4663)throw new d("Hookr reads require Robinhood Chain 4663.");let a=await c.getBlock(e===void 0?{}:{blockNumber:e});if(a.number===null||!a.hash||typeof a.timestamp!="bigint"||e!==void 0&&a.number!==e)throw new d("Hookr named block is unavailable. Retry against an available block.");return{number:a.number,hash:a.hash,timestamp:a.timestamp}}async function H(c,e){if((await c.getBlock({blockNumber:e.number})).hash!==e.hash)throw new d("Hookr named block changed during the read. Retry the complete read.")}function _(c){if(typeof c!="string"||![o.launcherV1,o.launcherLegacy].includes(c))throw new d("Use the checksummed current or previous reviewed Hookr Launcher address.");return n(c)}export{A as a,o as b,p as c,k as d,C as e,i as f,h as g,l as h,g as i,y as j,H as k,_ as l};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as b}from"./G2LAO23N.js";import{a as H,g as _}from"./3RGED2KO.js";import{b as d,c as y}from"./NWNYJ26T.js";import{b as u}from"./EWZFZUVF.js";import{a as f}from"./XSD5NL7J.js";import{getAddress as k,zeroAddress as N}from"viem";var E=["not-a-hook","code-unavailable","review-signals","screened-with-limits"],D=["high","medium","low","info"],K=["inline-assembly","unchecked","delegatecall-pinned","time-dependence","assembly-call-discarded"],A=200,O="Hook check: not checked",z=["hookr_scan"],L="Hookr hookr_scan read is unavailable. Retry later; unavailable data is not an empty result.";function t(n,e){return n!==null&&typeof n=="object"&&!Array.isArray(n)&&Object.hasOwn(n,e)?n[e]:void 0}function I(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)}function C(n){return E.find(e=>e===n)}function p(n,e){return typeof n=="number"&&Number.isInteger(n)&&n>=0&&n<=e}function x(n,e){return typeof n=="string"&&d.test(n)&&n.toLowerCase()===e.toLowerCase()}function T(n,e){let o=()=>{throw new Error("Invalid Hookr scan")};if(!I(n)||!d.test(e))return o();let r=C(t(n,"verdict")),s=t(n,"chainId"),i=t(n,"score"),c=t(n,"findings");if(!r||!x(t(n,"address"),e)||s!==void 0&&s!==u)return o();let m=null;if(i!=null){let a=t(i,"score");if(!p(a,100))return o();m=a}if(!Array.isArray(c)||c.length>A||!c.every(I))return o();let l={high:0,medium:0,low:0,info:0,other:0},w=new Set,S=0;for(let a of c){let R=D.find(h=>h===t(a,"severity"));l[R??"other"]+=1;let g=K.find(h=>h===t(a,"id"));g?w.add(g):S+=1}return{address:k(e.toLowerCase()),verdict:r,score:m,findings:c.length,severities:l,findingIds:[...w],otherFindingIds:S}}function $(n,e){let o=t(n,"address"),r=C(t(n,"verdict")),s=t(n,"score"),i=t(n,"findings");if(!(typeof o!="string"||!d.test(o)||e!==void 0&&!x(o,e))&&!(!r||s!==null&&!p(s,100)||!p(i,A)))return{address:k(o.toLowerCase()),verdict:r,score:s,findings:i}}function V(n,e){let o=typeof e=="string"&&d.test(e)?k(e.toLowerCase()):void 0;if(e!==void 0&&!o)return O;let r=$(n,o),s=o?` for ${o}`:"";if(!r)return o?`Hook check${s}: not checked`:O;let i=r.score===null?"no score":`score ${r.score}/100`;return`Hook check (Hookr scan)${s}: ${r.verdict}, ${i}, ${r.findings} finding${r.findings===1?"":"s"}`}async function F(n,e){if(typeof e!="string"||!d.test(e))throw new f("Provide the hook address for hookr_scan (0x followed by 40 hex digits).");let o=k(e.toLowerCase());if(o===N)throw new f("The zero address means the pool has no hook, so there is nothing to scan.");let r=await _(n,"hookr_scan",{address:o});try{return T(r,o)}catch{throw new f(L)}}function X(n){return{name:"hookr_scan",inputSchema:{type:"object",description:"Read Hookr's automated screen of a Uniswap v4 hook: verdict, 0 to 100 score and finding counts. A screen, not an audit; Oak shows it and never blocks on it.",properties:{address:{...y,description:b.address("Uniswap v4 hook (the hooks field of a pool key)")}},required:["address"],additionalProperties:!1},execute:async e=>{if(Object.keys(e).some(r=>r!=="address")||typeof e.address!="string")throw new f("Provide only the hook address for hookr_scan.");let o=await F(n,e.address);return{chainId:u,source:H,...o,line:V(o),page:`https://hookr.fun/scan?hook=${o.address}&chain=${u}`,note:"Automated screen by Hookr, not an audit and not Oak's own check. Hookr's wording is left out here; read the full report on the page."}}}}export{E as a,D as b,K as c,A as d,O as e,z as f,T as g,$ as h,V as i,F as j,X as k};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as s}from"./
|
|
1
|
+
import{b as s}from"./4GAU3JLN.js";import{a as o,c as t}from"./BWE5PXRE.js";import{getAddress as i}from"viem";var f=new Set(["priors_status",...s,...t.filter(r=>r.read).map(r=>r.name),"priors_ethos_status","priors_request_borrow","priors_request_repay","priors_request_stock","priors_request_backing","priors_pt_quote","priors_pt_position","priors_stock_quote","priors_savings_liquidity","priors_market_origin","priors_market_pins","priors_capabilities"]),p=new Set(["priors_sign_consent",...t.filter(r=>r.consentRoot).map(r=>r.name)]),u=new Set([...p,"priors_starter_line"]),R=new Set([...t.filter(r=>!r.read).map(r=>r.name),"priors_root_offer","priors_autopay_on","priors_autopay_off","priors_pt_buy","priors_pt_sell","priors_pt_redeem","priors_savings_force_withdraw","priors_stock_swap","priors_market_clear_bid_budget","priors_market_revoke_nft","priors_x_link"]),S=["priors_lend","priors_withdraw","priors_borrow","priors_repay","priors_starter_line","priors_close_line","priors_release_bond"];function c(r){let _=t.find(e=>e.name===r);return _?[o[_.contract],..._.approval==="bid"?[o.bidSpender]:[]]:r==="priors_root_offer"?[o.pool]:r==="priors_autopay_on"||r==="priors_autopay_off"?[o.autopay]:r==="priors_savings_force_withdraw"?[o.savings]:r==="priors_stock_swap"?[i("0xCaf681a66D020601342297493863E78C959E5cb2"),i("0x7Cd4E04E433E69e588728c86A3832753B5F846d4")]:r==="priors_pt_buy"||r==="priors_pt_sell"||r==="priors_pt_redeem"?[i("0x888888888889758F76e7103c6CbF23ABbF58F946")]:r==="priors_market_clear_bid_budget"?[o.bidSpender]:r==="priors_market_revoke_nft"?[o.registry,"0x0000000000000000000000000000000000000000"]:r==="priors_x_link"?[o.registry]:[]}export{f as a,p as b,u as c,R as d,S as e,c as f};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as b,b as k,e as w,f as N,g as S}from"./
|
|
1
|
+
import{a as b,b as k,e as w,f as N,g as S}from"./QP2B7AYX.js";import{a as h}from"./66F5ZH34.js";import{c as g,g as E}from"./NWNYJ26T.js";import{b as d}from"./EWZFZUVF.js";import{a as r}from"./XSD5NL7J.js";import{encodeFunctionData as v,erc20Abi as O,getAddress as _,parseAbi as I,zeroAddress as T}from"viem";var x=_("0x2ac03e14cfe755426daaee0a4994184ce81482f8"),n=_("0x7a8f74c2585f84c781f951b7f2ff21337d5b630b"),o=I(["function RESOURCE() view returns (address)","function TOKEN_JAR() view returns (address)","function threshold() view returns (uint256)","function nonce() view returns (uint256)","function release(uint256 nonce,address[] assets,address recipient)"]),M={assets:{description:"One to twenty unique asset addresses to release from the Token Jar; the zero address means native ETH.",type:"array",minItems:1,maxItems:20,items:g},nonce:h("Token Jar release nonce from uniswap_token_jar, as a decimal string."),maxResourceAmount:h('Maximum amount of resource token in base units; use resource token decimals. Example: "1000000" = 1 resource token at 6 decimals.')};function D(a){return{tools:[!1,!0].map(i=>({name:i?"uniswap_token_jar_release":"uniswap_token_jar",inputSchema:{type:"object",additionalProperties:!1,required:i?["assets","nonce","maxResourceAmount"]:["assets"],properties:M},async execute(t,m){if(S(t,i?["assets","nonce","maxResourceAmount"]:["assets"]),!Array.isArray(t.assets)||t.assets.length<1||t.assets.length>20)throw new r("Provide 1 to 20 unique assets to release.");let c=t.assets.map(k);if(new Set(c).size!==c.length)throw new r("Token Jar assets must be unique.");let s=a.clientFor(d),e=await s.getBlockNumber(),[R,C,u,f]=await Promise.all([s.readContract({address:n,abi:o,functionName:"RESOURCE",blockNumber:e}),s.readContract({address:n,abi:o,functionName:"TOKEN_JAR",blockNumber:e}),s.readContract({address:n,abi:o,functionName:"threshold",blockNumber:e}),s.readContract({address:n,abi:o,functionName:"nonce",blockNumber:e})]);if(!E(String(C),x)||R===T)throw new r("Releaser deployment does not match the pinned Token Jar and ERC-20 resource.");let p=await w(a,k(R),e),J=await Promise.all(c.map(async l=>({token:await w(a,l,e),amount:(l===T?await s.getBalance({address:x,blockNumber:e}):await s.readContract({address:l,abi:O,functionName:"balanceOf",args:[x],blockNumber:e})).toString()}))),y={payment:{token:p,amount:String(u)},nonce:String(f),assets:J,blockNumber:e.toString()};if(!i)return{...y,summary:"Resource payment buys the listed jar contents; no profit is promised. Release uses a nonce to refuse competing releases."};let P=b(t.maxResourceAmount,"maxResourceAmount"),A=b(t.nonce,"nonce",256,!0);if(A!==BigInt(f)||BigInt(u)>P)throw new r("Token Jar nonce or resource cost changed. Read uniswap_token_jar and confirm fresh terms.");let j=[a.approval(p.address,n,String(u),d),a.unsignedTx({to:n,data:v({abi:o,functionName:"release",args:[A,c,m]}),value:"0",chainId:d,description:`Pay ${u} base units of ${p.address} to release Token Jar assets to ${m}, nonce ${f}.`})];return{...await N(a,j,m,"Exchange resource tokens for Token Jar assets. Check the full payment, assets and recipient in the preview; gas is additional."),...y}}}))}}export{x as a,n as b,o as c,D as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as M}from"./K6D6SDIG.js";import{a as d}from"./
|
|
1
|
+
import{a as M}from"./K6D6SDIG.js";import{a as d}from"./CFPJDLTZ.js";import{g as h,i as z,l as N,m as _,n as D}from"./NWNYJ26T.js";import{a as i}from"./XSD5NL7J.js";import{isHex as ce,keccak256 as pe}from"viem";var l=e=>N(z(e,"Provide a valid Chop address."),"Provide a nonzero Chop address."),P=e=>_(e,"Chop returned an invalid integer."),ye=e=>D(e,"Provide a positive Chop base-unit integer string within uint256.",{positive:!0});function he(e){if(typeof e!="string"||!ce(e,{strict:!0})||e.length<4||e.length%2)throw new i("Chop contract code is unavailable.");return pe(e)}function u(e){if(e?.aborted)throw new i("Chop read was cancelled.")}var B=(e,t,r,o,n,a,s)=>(u(s),e.readContract({address:t,abi:M,functionName:r,args:o,blockNumber:n,...a?{account:a}:{}}));async function L(e,t,r,o){u(o);let n=await e.multicall({allowFailure:!1,batchSize:0,blockNumber:r,contracts:t.map(a=>({address:a.target,abi:M,functionName:a.fn,args:a.args??[]}))});if(!Array.isArray(n)||n.length!==t.length)throw new i("Chop returned incomplete reads.");return n}async function le(e,t){if(u(t),await e.getChainId()!==d.chainId)throw new i("Chop requires chain 4663.");return u(t),P(await e.getBlockNumber({cacheTime:0}))}function b(e){if(!e||typeof e!="object"||Array.isArray(e))throw new i("Chop returned invalid log metadata.");return e}function R(e){if(typeof e!="number"||!Number.isInteger(e)||e<0||e>255)throw new i("Chop token decimals are invalid.");return e}function O(e){return typeof e=="string"&&/^[A-Za-z0-9.$_-]{1,32}$/.test(e)?e:"token"}var be=()=>new WeakMap;function j(e,t){if(!t)return;let r=t.get(e);return r||(r={code:new Map,implementations:new Map},t.set(e,r)),r}var q=(e,t)=>`${e.toLowerCase()}:${t}`;function F(e,t,r){let o=e?.get(t);if(o)return o;let n=r();return e?.set(t,n),n}async function W(e,t,r,o,n){u(o);let a=await F(j(e,n)?.code,q(t,r),async()=>he(await e.getCode({address:t,blockNumber:r})));return u(o),a}async function E(e,t,r,o,n){if(!h(await W(e,t.address,r,o,n),t.codeHash))throw new i("Chop trust-anchor code changed.")}async function V(e,t,r,o,n,a,s,c){await Promise.all([E(e,o,a,s,c),E(e,{address:t,codeHash:r},a,s,c)]),u(s);let A=await F(j(e,c)?.implementations,q(o.address,a),async()=>l(await B(e,o.address,"implementation",[],a,void 0,s))),x=await W(e,A,a,s,c);return{address:A,codeHash:x,changed:!h(x,n)}}function ge(e,t){let r=b(e);if(!h(l(r.index),t)||r.verified!==!0)throw new i("This is not a verified Chop registry log.")}async function Ae(e,t,r,o,n,a){u(n);let s=l(t),c=o??await le(e,n);await E(e,d.registry,c,n,a);let A=await B(e,d.registry.address,"getIndex",[s],c,void 0,n);if(ge(A,s),r==="enter"){if(b(A).makePublic!==!0)throw new i("This verified Chop log is not public for new deposits.");await B(e,d.registry.address,"validateIndex",[s],c,void 0,n)}let[x,T]=await Promise.all([L(e,["getAllAssets","PAIRED_LP_TOKEN","lpStakingPool","lpRewardsToken","v2Pool","fees","decimals","symbol","totalSupply","config"].map(p=>({target:s,fn:p})),c,n),V(e,s,d.proxy.codeHash,d.beacon,d.implementation.codeHash,c,n,a)]),[v,X,Z,G,J,Q,Y,ee,ne,te]=x;if(!Array.isArray(v)||v.length!==1||P(b(v[0]).weighting)!==10n**18n)throw new i("Only verified single-token Chop logs are supported.");let g=l(b(v[0]).token),w=l(X),m=l(Z),C=l(J);if(!h(l(G),d.chop)||[s,g,w,m,C].some(p=>h(p,d.dormantOak))||new Set([s,g,w,m,C].map(p=>p.toLowerCase())).size!==5)throw new i("Chop log token identities do not match the supported setup.");let oe=b(Q),re=Object.fromEntries(["burn","bond","debond","buy","sell","partner"].map(p=>{let f=oe[p];if(typeof f!="number"||!Number.isInteger(f)||f<0||f>1e4)throw new i("Chop returned invalid fees.");return[p,f]})),K=b(te);if(K.hasTransferTax!==!1||K.blacklistTKNpTKNPoolV2!==!1)throw new i("Chop transfer-tax or blocked-pool logs are unsupported.");let k=await L(e,[{target:g,fn:"decimals"},{target:g,fn:"symbol"},{target:w,fn:"decimals"},{target:w,fn:"symbol"},{target:m,fn:"POOL_REWARDS"},{target:s,fn:"totalAssets",args:[g]}],c,n),y=l(k[4]);if([s,g,w,m,C].some(p=>h(p,y)))throw new i("Chop rewards identity is invalid.");let[ae,se,ie]=await Promise.all([L(e,[{target:m,fn:"INDEX_FUND"},{target:m,fn:"stakingToken"},{target:y,fn:"indexFund"},{target:y,fn:"trackingToken"},{target:y,fn:"rewardsToken"}],c,n),V(e,m,d.staking.codeHash,d.stakingBeacon,d.stakingImplementation.codeHash,c,n,a),V(e,y,d.rewards.codeHash,d.rewardsBeacon,d.rewardsImplementation.codeHash,c,n,a)]);if(ae.some((p,f)=>!h(l(p),[s,C,s,m,d.chop][f])))throw new i("Chop staking or rewards links do not match this log.");let H={address:g,decimals:R(k[0]),symbol:h(g,d.oak)?"OAK":O(k[1]),chainId:4663};if(H.symbol.replace(/^\$/,"").toUpperCase()==="OAK"&&!h(g,d.oak))throw new i("Chop underlying OAK is not the canonical Oak token.");let de={address:w,decimals:R(k[2]),symbol:O(k[3]),chainId:4663},U={address:s,decimals:R(Y),symbol:O(ee),chainId:4663},I=[T.changed?"log implementation":"",se.changed?"staking implementation":"",ie.changed?"rewards implementation":""].filter(Boolean);if(r==="enter"&&I.length)throw new i(`Chop implementation changed (${I.join(", ")}); wraps and farms are refused.`);let S=P(ne),$=P(k[5]);if(S===0n)throw new i("This Chop log has no issued supply.");return{log:U,underlying:H,paired:de,staking:{address:m,symbol:"Chop staked LP",decimals:18,chainId:4663},rewards:y,pool:C,fees:re,totalSupply:S.toString(),managedUnderlying:$.toString(),backingPerLog:{token:H,amount:($*10n**BigInt(U.decimals)/S).toString()},implementation:T.address,implementationHash:T.codeHash,drift:I,measuredAtBlock:c.toString()}}function Ce(e,t,r=!1){if(e.length!==t.length||e.some((o,n)=>!h(o.to,t[n].to)||o.data!==t[n].data||o.value!=="0"||o.chainId!==4663||o.gasLimit!==t[n].gasLimit&&!(r&&o.gasLimit===void 0)))throw new i("Chop transaction or exact approval does not match the requested action.")}function Pe(e,t){let r=new Map;for(let o of e.changes){let n=t.find(c=>h(c.token.address,o.token.address));if(!n||o.token.chainId!==4663||o.token.decimals!==n.token.decimals||typeof o.amount!="string"||!/^-?\d+$/.test(o.amount))throw new i("Chop preview showed an unexpected token movement.");let a=BigInt(o.amount);if(P(a<0n?-a:a),n.min>=0n&&a<0n||n.max!==void 0&&n.max<=0n&&a>0n)throw new i("Chop preview showed a reversed token movement.");let s=n.token.address.toLowerCase();r.set(s,(r.get(s)??0n)+a)}for(let o of t){let n=r.get(o.token.address.toLowerCase())??0n;if(n<o.min||o.max!==void 0&&n>o.max)throw new i("Chop preview receipt does not meet the quoted amount.")}return r}export{l as a,P as b,ye as c,he as d,u as e,B as f,L as g,le as h,be as i,E as j,ge as k,Ae as l,Ce as m,Pe as n};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as u}from"./
|
|
1
|
+
import{b as u}from"./EWZFZUVF.js";import{a as c}from"./XSD5NL7J.js";import{decodeErrorResult as h,encodeFunctionData as k,formatEther as p,keccak256 as w,parseAbi as y}from"viem";var l="0x5aeB8269977Ce12f62D2cD9a1f04E9A7894512ee",m="0x5236857c06be1bf151306dcc5ac134b2a2353760f3d73817da769dee67d7ef24",O=["hoodlock_buyback"],b=y(["function execute() returns(uint256)","error NotReady(uint256 balance,uint256 need,uint64 readyAt)"]);function g(e){let s=new Set;for(let o=0;e&&typeof e=="object"&&o<16&&!s.has(e);o++){s.add(e);let t=e,a=t.raw??t.data;if(typeof a=="string"&&/^0x[0-9a-f]+$/i.test(a))try{let n=h({abi:b,data:a});if(n.errorName==="NotReady"){let[r,i,d]=n.args;return`HoodLock buyback is not ready: ${p(r)} ETH pending in the vault; threshold ${p(i)} ETH${r<i?" not reached":""}. Contract readiness time: ${d} Unix seconds. No wallet funds were spent; retry when the vault is ready.`}}catch{}e=t.cause}}var v=e=>({tools:[{name:"hoodlock_buyback",inputSchema:{type:"object",properties:{},additionalProperties:!1},async execute(s,o){if(Object.keys(s).length)throw new c("HoodLock buyback accepts no amount, recipient or calldata.");let t=e.clientFor(u);if(await t.getChainId()!==u)throw new c("HoodLock buyback requires chain 4663.");let a=await t.getBlockNumber(),n=await t.getCode({address:l,blockNumber:a});if(!n||w(n)!==m)throw new c("The HoodLock buyback vault no longer matches its pinned runtime code.");let r=[e.unsignedTx({to:l,chainId:u,value:"0",data:k({abi:b,functionName:"execute"}),description:"Trigger the HoodLock vault to buy back and burn LOCK using its own ETH. No wallet funds or approvals."})];try{await t.simulateContract({address:l,abi:b,functionName:"execute",account:o,blockNumber:a})}catch(d){let f=g(d);throw new c(f??e.plainError(d))}let i=await e.preview(r,o);return{txs:r,preview:i,summary:"Permissionless HoodLock buyback and burn. The vault enforces its threshold, cooldown, oracle and slippage checks. The caller pays gas and receives no reward. Confirm the local preview before signing."}}}]});export{l as a,m as b,O as c,b as d,g as e,v as f};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{a as N}from"./6HNQAYBM.js";import{a as M}from"./H7ZJ7LAB.js";import{b as _,c as q,d as F,e as O}from"./GCFHKJIO.js";import{a as I}from"./QKH7ED6B.js";import{c as E}from"./IY7FWTAL.js";import{b as P}from"./SPJCSEKP.js";import{a as b}from"./43LI5NKJ.js";import{b as G}from"./IX3GZMTM.js";import{b as r,e as $,j as C,k as y}from"./EWZFZUVF.js";import{a as o}from"./XSD5NL7J.js";import{encodeFunctionData as g,erc20Abi as D,parseAbi as W}from"viem";var i=C[r].vaults.steakhouse.address,R=(1n<<256n)-1n,l=W(["function asset() view returns (address)","function totalAssets() view returns (uint256)","function convertToAssets(uint256 shares) view returns (uint256 assets)","function previewWithdraw(uint256 assets) view returns (uint256 shares)","function deposit(uint256 assets,address receiver) returns (uint256 shares)","function withdraw(uint256 assets,address receiver,address owner) returns (uint256 shares)","function redeem(uint256 shares,address receiver,address owner) returns (uint256 assets)"]);function S(e){if(typeof e!="bigint"||e<0n||e>R)throw new o("The vault returned an invalid base-unit amount.");return e}function k(e){if(typeof e!="string")throw new o("Amount must be an integer string in base units.");let c=G(e);if(c===0n)throw new o("Amount must be positive.");if(c>R)throw new o("Amount exceeds the uint256 range.");return c}function U(e,c,h=!1){if(!e||typeof e!="object"||Array.isArray(e)||Object.keys(e).some(w=>!c||!["amount",...h?["force","maxPenaltyAssets","minAmountOut"]:[]].includes(w)))throw new o("Unexpected Steakhouse argument.")}var L=e=>{async function c(t){try{return await t()}catch(s){throw new o(e.plainError(s))}}async function h(){let t=e.clientFor(r);if(await t.getChainId()!==r)throw new o("Steakhouse requires chain 4663.");let s=await t.readContract({address:i,abi:l,functionName:"asset"});if(typeof s!="string"||s.toLowerCase()!==y.toLowerCase())throw new o("The Steakhouse vault asset does not match USDG on chain 4663.");let[a,n]=await Promise.all([t.readContract({address:y,abi:D,functionName:"decimals"}),t.readContract({address:i,abi:D,functionName:"decimals"})]);if(a!==$||!Number.isInteger(n)||n<0||n>255)throw new o("The vault returned invalid asset or share decimals.");return{client:t,asset:{address:y,symbol:"USDG",decimals:a,chainId:r},shares:{address:i,symbol:"steakUSDG",decimals:n,chainId:r}}}async function w(t,s){return S(await t.readContract({address:i,abi:D,functionName:"balanceOf",args:[s]}))}async function x(t,s,a){let n=await e.preview(t,s);if(n.changes.length===0)throw new o("The Steakhouse simulation returned no token balance changes.");let u=n.changes.map(({token:m,amount:d})=>{let f=d.startsWith("-"),p=e.formatAmount(f?d.slice(1):d,m.decimals);return`${f?"-":""}${p} ${m.symbol} (${m.address}, chain ${m.chainId}, decimals ${m.decimals})`});return{txs:t,summary:`${a} ${n.summary} Changes: ${u.join("; ")}.`}}return{tools:[q(e,"steakhouse_details",i),I(e,"steakhouse_analytics",i),M(e,"steakhouse_manage",i),...N(e,"steakhouse",i),{name:"steakhouse_list",inputSchema:{type:"object",properties:{},additionalProperties:!1},execute:async t=>c(async()=>{U(t,!1);let{client:s,asset:a,shares:n}=await h(),u=S(await s.readContract({address:i,abi:l,functionName:"totalAssets"}));return[{name:"Steakhouse USDG",vault:n,asset:a,totalAssets:{token:a,amount:u.toString()}}]})},{name:"steakhouse_deposit",inputSchema:{...T(!1),description:"Deposit USDG in base units (1 USDG = 1000000) for vault shares. Exit with steakhouse_withdraw; check positions after confirmation."},execute:async(t,s)=>c(async()=>{U(t,!0);let a=k(t.amount);b(s);let{asset:n}=await h(),u=[e.approval(n.address,i,a.toString(),r),e.unsignedTx({to:i,data:g({abi:l,functionName:"deposit",args:[a,s]}),value:"0",chainId:r,description:`Deposit ${e.formatAmount(a.toString(),n.decimals)} USDG into Steakhouse.`})];return x(u,s,"Approve the exact USDG amount, then deposit into Steakhouse.")})},{name:"steakhouse_withdraw",inputSchema:{...T(!0),description:"Withdraw USDG in 6-decimal base units, or amount max to redeem every share for USDG. Check positions after confirmation.",properties:{...T(!0).properties,force:{type:"boolean",description:"Explicitly plan a full Morpho V2 force exit with penalty disclosure."},maxPenaltyAssets:{type:"string",pattern:"^[0-9]+$",description:'Force exit only: most USDG, in base units (6 decimals), you accept losing to the exit penalty. Example: "1000000" = 1 USDG.'},minAmountOut:{type:"string",pattern:"^[0-9]+$",description:'Force exit only: least USDG you must receive, in base units (6 decimals). Example: "1000000" = 1 USDG.'}}},execute:async(t,s)=>c(async()=>{U(t,!0,!0);let a=t.amount==="max"?null:k(t.amount);b(s);let{client:n,asset:u,shares:m}=await h(),d=await w(n,s);if(d===0n)throw new o("The wallet has no Steakhouse shares to withdraw.");if(t.force!==void 0&&typeof t.force!="boolean")throw new o("force must be a boolean.");if(t.force===!0){if(a!==null)throw new o("Force exit currently requires amount max.");let p=E(t.maxPenaltyAssets),j=k(t.minAmountOut),v=await _(e,n,i,s,d,p),A=await e.preview([v.tx],s);return O(A.changes,i,d,j),{txs:[v.tx],preview:A,summary:`${F(v.plan)} ${A.summary}`}}if(t.maxPenaltyAssets!==void 0||t.minAmountOut!==void 0)throw new o("Penalty and output limits require force true.");let f;if(a===null)f=e.unsignedTx({to:i,data:g({abi:l,functionName:"redeem",args:[d,s,s]}),value:"0",chainId:r,description:`Redeem all ${e.formatAmount(d.toString(),m.decimals)} steakUSDG shares.`});else{let p=S(await n.readContract({address:i,abi:l,functionName:"previewWithdraw",args:[a]}));if(p===0n||p>d)throw new o("The withdrawal exceeds the available share balance or has an invalid share quote.");f=e.unsignedTx({to:i,data:g({abi:l,functionName:"withdraw",args:[a,s,s]}),value:"0",chainId:r,description:`Withdraw ${e.formatAmount(a.toString(),u.decimals)} USDG from Steakhouse.`})}return x([f],s,a===null?"Redeem the current full share balance from Steakhouse.":"Withdraw the requested USDG amount from Steakhouse.")})}],positions:t=>c(async()=>{b(t);let{client:s,asset:a,shares:n}=await h(),u=await w(s,t);if(u===0n)return[];let m=S(await s.readContract({address:i,abi:l,functionName:"convertToAssets",args:[u]}));return[{module:"steakhouse",id:`${r}:${i.toLowerCase()}`,chainId:r,assets:[{token:a,amount:m.toString()}],description:`${e.formatAmount(u.toString(),n.decimals)} steakUSDG shares (${i}, chain ${r}, decimals ${n.decimals}); USDG conversion is indicative, not guaranteed exit liquidity.`}]})}};function T(e){return{type:"object",additionalProperties:!1,required:["amount"],properties:{amount:{type:"string",pattern:e?"^(?:[0-9]+|max)$":"^[0-9]+$",description:`Amount of USDG in base units (USDG has 6 decimals)${e?", or max to redeem every share":""}. Example: "1000000" = 1 USDG.`}}}}var te=e=>P("steakhouse",[L(e)]);export{L as a,te as b};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as R}from"./DFM4T6ZE.js";import{d as N}from"./MDLJFCT4.js";import{b as D,d as M,f as C}from"./4ZD5D2UP.js";import{t as E}from"./MQ5F2VOK.js";import{a}from"./XSD5NL7J.js";import{a as P}from"./JXOEJPJ4.js";import{decodeFunctionData as _,erc20Abi as X,formatUnits as $,getAddress as x,isAddress as Q,parseUnits as K,parseAbi as V,zeroAddress as f}from"viem";var be=300,m={permit2:"0x000000000022D473030F116dDEE9F6B43aC78BA3",router:"0x204FAca1764B154221e35c0d20aBb3c525710498",factory:"0xd7e538e98A208fD19e46bc549FF4710C33664e18",limitOrders:"0x3126f62d604a0AA2de8788e3eC21dDd8F2a2f82a",fobo:"0x000DE658153f47f23e92973C8EB1e89762703676",usdg:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168"},T=["eth","fobo","usdg","msft","tsla","spcx","googl","amzn","aapl","nvda","meta"],b=(t,e=0)=>({type:"string",minLength:e,maxLength:t}),w=(t,e="string")=>({type:e,enum:t}),B={type:"string",pattern:"^0x[0-9a-fA-F]{40}$"},v={type:"string",pattern:"^[0-9]+$",description:"Exact input in token base units, as a decimal integer string."},U={type:"integer",minimum:1,maximum:100},L={token:B,amount:v,payWith:w(["pair","eth","usdg","fobo"]),slippageBps:{type:"integer",minimum:1,maximum:5e3}},Z={token:"FOBO coin contract address on chain 4663; obtain it from fobo_browse or fobo_token.",query:"Search FOBO coins and traders by name, ticker or address; omit to browse recent launches.",limit:"Maximum number of results, from 1 to 100.",side:"Trade direction: buy the coin or sell it back to the payment currency.",payWith:"Payment currency: pair uses the coin\u2019s own pair; trades also accept eth, usdg or fobo.",slippageBps:"Maximum loss against quoted output in basis points (50 = 0.5%); default 50.",hash:"Public transaction hash (0x followed by 64 hex digits) to look up on FOBO.",name:"New coin name, 1 to 32 characters.",ticker:"New coin ticker, 2 to 10 letters or digits; normalized to uppercase.",description:"Public description of the new coin, at most 280 characters.",imageUrl:"Optional public HTTPS image URL; omit for no image. Local uploads are unsupported.",links:"Optional public project links stored with the launched coin.",telegram:"Public Telegram URL.",discord:"Public Discord URL.",github:"Public GitHub URL.",website:"Public project website URL.",pair:"Pair currency: eth, fobo, usdg or a supported stock ticker; referral claims use this currency.",devBuyTokens:"Whole tokens in the initial buy, 0 to 50,000,000 (5% of supply); default 0.",vestMonths:"Initial-buy lock in months: 0, 1, 3, 6 or 12; default 0. A lock requires an initial buy.",limitMarketCapUsd:"Target market capitalization in whole USD, as a decimal string; not a per-token price.",expiresIn:"Order lifetime: 1h, 1d, 7d or 30d; default 7d.",maxFeePerFill:"Maximum keeper fee per fill in payment-token base units, as an exact decimal integer string.",orderId:"Positive numeric ID of the local wallet\u2019s limit order to cancel.",kind:"Claim creator fees, referral earnings or vesting tokens.",to:"Optional recipient address for a referral claim; omit for this wallet. Other claims always pay this wallet."},l=(t,e=[])=>({type:"object",additionalProperties:!1,required:e,properties:Object.fromEntries(Object.entries(t).map(([r,s])=>{let o=s;return[r,{...o,description:o.description??Z[r]}]}))}),Y={fobo_browse:l({query:b(64,1),limit:U}),fobo_token:l({token:B},["token"]),fobo_portfolio:l({}),fobo_leaderboard:l({limit:U}),fobo_claims:l({}),fobo_limit_orders:l({token:B}),fobo_quote:l({...L,side:w(["buy","sell"])},["token","side","amount"]),fobo_fee_schedule:l({}),fobo_limit_pay_tokens:l({}),fobo_transaction:l({hash:{type:"string",pattern:"^0x[0-9a-fA-F]{64}$"}},["hash"]),fobo_buy:l(L,["token","amount"]),fobo_sell:l(L,["token","amount"]),fobo_launch:l({name:b(32,1),ticker:{type:"string",pattern:"^\\$?[a-zA-Z0-9]{2,10}$"},description:b(280),imageUrl:{...b(2e3),pattern:"^https://"},links:l({telegram:b(200),discord:b(200),github:b(200),website:b(200)}),pair:w(T),devBuyTokens:{type:"integer",minimum:0,maximum:5e7},vestMonths:w([0,1,3,6,12],"integer"),maxInitialBuyAmount:{...v,description:"Maximum pair-token base units to spend on the initial buy, excluding the live launch fee. Required when devBuyTokens is positive."}},["name","ticker"]),fobo_limit_order:l({token:B,side:w(["buy","sell"]),payWith:b(42,2),amount:v,limitMarketCapUsd:{type:"string",pattern:"^\\d{1,30}(\\.\\d{1,18})?$"},expiresIn:w(["1h","1d","7d","30d"]),maxFeePerFill:v},["token","side","amount","limitMarketCapUsd","maxFeePerFill"]),fobo_cancel_limit_order:l({orderId:{type:"integer",minimum:1,maximum:Number.MAX_SAFE_INTEGER}},["orderId"]),fobo_claim:l({kind:w(["creator","referral","vesting"]),token:B,pair:w(T),to:B},["kind"])},ee={fobo_buy:"buy",fobo_sell:"sell",fobo_launch:"launch",fobo_limit_order:"limitOrder",fobo_cancel_limit_order:"cancel",fobo_claim:"claim"},te={buy:"prepare_trade",sell:"prepare_trade",launch:"prepare_launch",limitOrder:"prepare_limit_order",cancel:"prepare_cancel_limit_order",claim:"prepare_claim"};function g(t){if(!t||typeof t!="object"||Array.isArray(t))throw new a("FOBO returned an invalid answer. Ask for a fresh summary.");return t}function ne(t,e){function r(s,o){let d=s.properties;if(Object.keys(o).some(n=>!Object.hasOwn(d,n)))throw new a("Unexpected FOBO argument. Use the fields declared by the tool.");for(let n of s.required)if(o[n]===void 0)throw new a(`Missing FOBO argument: ${n}.`);for(let[n,i]of Object.entries(o)){let c=d[n];if(c.type==="object"){r(c,g(i));continue}if(c.type==="integer"){if(typeof i!="number"||!Number.isSafeInteger(i)||i<Number(c.minimum??0)||i>Number(c.maximum??Number.MAX_SAFE_INTEGER))throw new a(`Invalid FOBO argument: ${n}.`)}else if(typeof i!="string"||i.length<Number(c.minLength??0)||i.length>Number(c.maxLength??256)||typeof c.pattern=="string"&&!new RegExp(c.pattern).test(i))throw new a(`Invalid FOBO argument: ${n}.`);if(Array.isArray(c.enum)&&!c.enum.includes(i))throw new a(`Invalid FOBO argument: ${n}.`)}}if(r(Y[t],g(e)),t==="fobo_claim"&&(e.kind==="referral"?e.pair===void 0:e.token===void 0))throw new a("Referral claims need pair; creator and vesting claims need token.");if(t==="fobo_claim"&&e.kind!=="referral"&&e.to!==void 0)throw new a("Only referral claims may name another recipient.");if(t==="fobo_launch"){if(Number(e.vestMonths??0)>0&&Number(e.devBuyTokens??0)===0)throw new a("A vesting lock needs an initial buy.");if(Number(e.devBuyTokens??0)>0&&(typeof e.maxInitialBuyAmount!="string"||BigInt(e.maxInitialBuyAmount)===0n))throw new a("An initial buy needs maxInitialBuyAmount in pair-token base units. Ask the person for that spending cap.");if(e.imageUrl!==void 0){let s=new URL(String(e.imageUrl));if(s.protocol!=="https:"||s.username||s.password)throw new a("Use a public https image URL.")}}return structuredClone(e)}function y(t){let e=t.toLowerCase();if(e===f||e==="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee")return{address:f,decimals:18};if(e===m.usdg.toLowerCase())return{address:m.usdg,decimals:6};if(e===m.fobo.toLowerCase())return{address:m.fobo,decimals:18};if(t==="eth")return{address:f,decimals:18};if(t==="usdg")return{address:m.usdg,decimals:6};if(t==="fobo")return{address:m.fobo,decimals:18};let r=R.tokens.find(s=>T.includes(t)&&s.symbol.toLowerCase()===t||s.token.toLowerCase()===e);if(r)return{address:x(r.token),decimals:18};throw new a("FOBO did not identify a supported pair currency. Ask for token details first.")}function A(t,e,r){if(typeof t!="string"||!/^\d{1,78}(\.\d{1,18})?$/.test(t)||(t.split(".")[1]?.length??0)>e)throw new a(`FOBO returned an invalid ${r}. Ask for a fresh quote.`);return K(t,e).toString()}function re(t,e,r,s){if(String(t.payWith).replace(/^\$/,"").toLowerCase()!==s.toLowerCase())throw new a("FOBO quote payment currency differs from the request.");if(t.slippageBps!==r)throw new a("FOBO quote slippage differs from the request.");let o=A(t.expectedOut,e,"quote output"),d=A(t.minOut,e,"quote minimum"),n=BigInt(o)*BigInt(1e4-r)/10000n;if(BigInt(d)<=0n||BigInt(d)>BigInt(o)||BigInt(d)<n)throw new a("FOBO quote minimum exceeds the approved slippage loss.");return{amountOut:o,minimum:d}}function W(t){let e=Object.fromEntries(Object.entries(t.request).filter(([r])=>!r.startsWith("_")&&r!=="maxInitialBuyAmount"));return typeof e.links=="string"&&(e.links=JSON.parse(e.links)),e.amount!==void 0&&(e.amount=$(BigInt(String(e.amount)),Number(t.request._inputDecimals))),e.maxFeePerFill!==void 0&&(e.maxFeePerFill=$(BigInt(String(e.maxFeePerFill)),Number(t.request._payDecimals))),(t.kind==="buy"||t.kind==="sell")&&(e.side=t.kind),t.kind==="claim"&&e.pair!==void 0&&(e.currency=e.pair,delete e.pair),{...e,account:t.wallet}}function S(t,e,r="0x0Af57F62982D03066ef917AcAd87F771c06528Ec"){let[s,o]=BigInt(t)<BigInt(e)?[t,e]:[e,t];return{currency0:s,currency1:o,fee:r===f?500:0,tickSpacing:r===f?10:60,hooks:r}}function j(t,e){let r=t===f?e:t;if(t!==f&&e!==f)throw new a("FOBO base-currency routes must pass through ETH.");if(r.toLowerCase()===m.usdg.toLowerCase())return S(t,e,f);if(r.toLowerCase()===m.fobo.toLowerCase())return S(t,e);throw new a("FOBO has not pinned a route between this pair and ETH. Use the token\u2019s own pair.")}function oe(t,e,r,s){let o=[];return r.toLowerCase()!==e.toLowerCase()&&(r!==f&&o.push(j(r,f)),e!==f&&o.push(j(f,e))),o.push(S(e,t)),s?o.reverse():o}function ie(t,e,r,s){let o=t.request,d=t.terms;if(t.kind==="buy"||t.kind==="sell")return{kind:"trade",currencyIn:o._currencyIn,currencyOut:o._currencyOut,amountIn:BigInt(d.amountIn),minOut:BigInt(d.minOut),now:e,pools:JSON.parse(String(o._pools)),...s?{permit:s}:{}};if(t.kind==="launch"){let i=(r?_({abi:D,data:r.data}).args[0]:void 0)?.devBuyMaxCost??BigInt(d.amountIn??"0");if(i>BigInt(d.amountIn??"0"))throw new a("FOBO launch exceeds the approved initial-buy spending cap. Nothing further was signed.");return{kind:"launch",name:String(o.name),ticker:String(o.ticker).replace(/^\$/,"").toUpperCase(),pair:y(String(o.pair)).address,devBuyTokens:BigInt(d.devBuyTokens??0)*10n**18n,devBuyMaxCost:i,vestMonths:d.vestMonths??0,launchFeeWei:BigInt(d.launchFeeWei),now:e}}if(t.kind==="limitOrder"){if(!r)throw new a("FOBO order is missing its unsigned transaction.");let n=_({abi:M,data:r.data});if(n.functionName!=="place")throw new a("FOBO order must call place.");let i=n.args[5],k={"1h":3600,"1d":86400,"7d":604800,"30d":2592e3}[String(o.expiresIn??"7d")],O=BigInt(t.quotedAt+k);if(i<O-60n||i>BigInt(e+k)+60n)throw new a("FOBO changed the approved order expiry. Nothing further was signed.");return{kind:"limitOrder",side:o.side==="buy"?0:1,token:d.token,payToken:y(String(o.payWith)).address,amount:BigInt(d.amountIn),limitPriceUsdE18:K(String(o.limitMarketCapUsd),18)/1000000000n,expiry:i,maxFeePerFill:BigInt(String(o.maxFeePerFill))}}if(t.kind==="cancel")return{kind:"cancel",orderId:BigInt(String(o.orderId))};if(o.kind==="creator")return{kind:"claim",claimKind:"creator",poolKey:JSON.parse(String(o._poolKey))};if(o.kind==="referral")return{kind:"claim",claimKind:"referral",currency:y(String(o.pair)).address,recipient:o.to??t.wallet};if(o.kind==="vesting"&&r)return{kind:"claim",claimKind:"vesting",lockId:_({abi:C,data:r.data}).args[0],beneficiary:t.wallet};throw new a("FOBO claim does not match a supported claim kind.")}function ae(t){let e={...g(t)};if(e.status==="needs_signature"&&e.transactions===void 0&&(e.transactions=[]),!["ready","needs_approval","needs_signature"].includes(String(e.status))||!Array.isArray(e.transactions)||e.transactions.length>32)throw new a("FOBO returned an unsupported preparation. Nothing further was signed. Ask for a fresh summary.");return e}function se(t,e,r){let s=g(e);if(![4663,"0x1237"].includes(s.chainId)||String(s.from).toLowerCase()!==t.wallet.toLowerCase()||BigInt(String(s.value??"0"))!==0n)throw new a("FOBO approval has the wrong wallet, chain or ETH value. Nothing further was signed.");let o=_({abi:X,data:String(s.data)});if(o.functionName!=="approve")throw new a("FOBO requested something other than an approval.");let d=o.args[0],n=t.kind==="launch"?m.factory:t.kind==="limitOrder"?m.limitOrders:m.permit2;if(d.toLowerCase()!==n.toLowerCase()||String(s.to).toLowerCase()!==String(t.request._currencyIn).toLowerCase()||t.terms.amountIn===void 0)throw new a("FOBO approval does not match the approved token and spender. Nothing further was signed.");return N(e,{kind:"approval",token:x(String(s.to)),spender:d,amount:BigInt(t.terms.amountIn)},t.wallet)}async function de(t,e,r,s,o){if(e.status==="needs_signature"){if(e.transactions.length)throw new a("FOBO attached unexpected transactions to a signature request.");return[]}if(!e.transactions.length||t.kind!=="claim"&&e.transactions.length!==1)throw new a("FOBO returned an unexpected transaction count. Nothing further was signed.");if(e.status==="needs_approval"){if(!["buy","sell","launch","limitOrder"].includes(t.kind))throw new a("This FOBO action must not need an approval.");return e.transactions.map(n=>se(t,n,r))}if(e.transactions.some(n=>String(g(n).data).toLowerCase().startsWith("0x095ea7b3")))throw new a("FOBO attached an approval to a ready action. Ask for a fresh summary.");if(t.kind==="claim"&&t.request.kind==="vesting"){let n=o??E({chainId:4663}).readContract,i=V(["function getLock(uint256 id) view returns ((address token,uint64 start,uint32 duration,address beneficiary,uint256 amount,uint256 claimed))"]);for(let c of e.transactions){let k=_({abi:C,data:c.data}).args[0],O=await n({address:"0x51d217Ecf7c0e4EbF54258444B9617D012Fd7D0a",abi:i,functionName:"getLock",args:[k]});if(O.beneficiary.toLowerCase()!==t.wallet.toLowerCase()||O.token.toLowerCase()!==String(t.request.token).toLowerCase())throw new a("FOBO vesting lock does not belong to this wallet and token. Nothing further was signed.")}}let d=e.transactions.map(n=>N(n,ie(t,r,n,s),t.wallet));if(t.kind==="launch"){let n=BigInt(t.terms.launchFeeWei??"0"),i=t.request.pair==="eth"?n+BigInt(t.terms.amountIn??"0"):n;if(d.some(c=>BigInt(c.value)>i||BigInt(c.value)<n))throw new a("FOBO launch exceeds the approved spending cap or changed its fee. Nothing further was signed.")}if(typeof t.request._prepared=="string"){let n=JSON.parse(t.request._prepared);if(d.length!==n.length||d.some((i,c)=>i.to.toLowerCase()!==n[c].to.toLowerCase()||i.data.toLowerCase()!==n[c].data.toLowerCase()||BigInt(i.value)!==BigInt(n[c].value)))throw new a("FOBO changed the approved terms. Nothing further was signed. Ask for a fresh summary.")}return d}function ce(t){let e="Oak fee: 0 bps on FOBO\u2019s own route.";if(t.kind==="buy"||t.kind==="sell"){let r=t.terms.tokenPoolTaxPercentNow;if(typeof r!="number"||!Number.isFinite(r)||r<0||r>100)throw new a("FOBO quote did not identify its current tax.");return`${e} FOBO's tax right now: ${r}%; included in the quoted output and minimum.`}return t.kind==="launch"?`${e} FOBO launch fee: ${$(BigInt(t.terms.launchFeeWei),18)} ETH (${t.terms.launchFeeWei} wei).`:t.kind==="limitOrder"?`${e} FOBO keeper fee: at most ${t.request.maxFeePerFill} pay-token base units per fill. Pool tax applies when the order fills; the future tax is not known at preparation.`:`${e} No additional FOBO fee for this ${t.kind==="cancel"?"cancellation":"claim"}; network fees are additional.`}async function we(t,e,r,s){let o=Object.entries(ee).find(([,u])=>u===e)?.[0];if(!o||!Q(s,{strict:!1}))throw new a("Provide a valid FOBO action and local wallet.");let d=ne(o,r),n={};for(let[u,p]of Object.entries(d))n[u]=typeof p=="object"?JSON.stringify(p):p;let i={version:1,kind:e,wallet:x(s),chainId:4663,request:n,terms:{},quotedAt:Math.floor(Date.now()/1e3)};if(e==="launch"){n.pair??="eth",n.devBuyTokens??=0,n.vestMonths??=0;let u=g(g(await t.call("get_fee_schedule",{})).launch);if(u.launchesPaused===!0)throw new a("FOBO launches are paused. Nothing was signed.");let p=y(String(n.pair));n._currencyIn=p.address,n._inputDecimals=p.decimals,i.preparation={status:"ready",transactions:[]},i.terms={launchFeeWei:A(u.feeEth,18,"launch fee"),devBuyTokens:Number(n.devBuyTokens),vestMonths:Number(n.vestMonths),amountIn:String(n.maxInitialBuyAmount??"0")}}else if(e==="buy"||e==="sell"||e==="limitOrder"){n.payWith??=e==="limitOrder"?"eth":"pair";let u=String(n.payWith),p=g(await t.call("get_token",{token:n.token}));if(String(p.address).toLowerCase()!==String(n.token).toLowerCase())throw new a("FOBO token metadata does not match the requested token.");let H=y(String(p.pair).replace(/^\$/,"").toLowerCase());u==="pair"&&(u=String(p.pair).replace(/^\$/,"").toLowerCase());let F=y(u);n._payDecimals=F.decimals;let I=e==="limitOrder"?n.side:e;if(n._currencyIn=I==="sell"?String(n.token):F.address,n._currencyOut=I==="sell"?F.address:String(n.token),n._inputDecimals=I==="sell"?18:F.decimals,n._outputDecimals=I==="sell"?F.decimals:18,e!=="limitOrder"&&(n._pools=JSON.stringify(oe(x(String(n.token)),H.address,F.address,I==="sell"))),i.terms={token:x(String(n.token)),payWith:String(n.payWith),amountIn:String(n.amount)},BigInt(String(n.amount))===0n)throw new a("FOBO input amount must be positive.");if(e!=="limitOrder"){n.slippageBps??=50;let{account:J,...z}=W(i),h=g(await t.call("quote_trade",z)),G=A(h.amountIn,Number(n._inputDecimals),"quote input"),{minimum:q}=re(h,Number(n._outputDecimals),Number(n.slippageBps),u);if(G!==n.amount||BigInt(q)===0n||String(h.token).toLowerCase()!==String(n.token).toLowerCase()||h.side!==e)throw new a("FOBO quote does not match the requested trade. Nothing was signed.");if(i.terms.minOut=q,i.terms.slippageBps=Number(n.slippageBps),typeof h.tokenPoolTaxPercentNow!="number"||!Number.isFinite(h.tokenPoolTaxPercentNow)||h.tokenPoolTaxPercentNow<0||h.tokenPoolTaxPercentNow>100)throw new a("FOBO quote did not identify its current tax.");i.terms.tokenPoolTaxPercentNow=h.tokenPoolTaxPercentNow}}if(e==="claim"&&n.kind==="creator"){let u=g(await t.call("get_token",{token:n.token}));if(String(u.address).toLowerCase()!==String(n.token).toLowerCase())throw new a("FOBO claim token metadata does not match.");n._poolKey=JSON.stringify(S(y(String(u.pair).replace(/^\$/,"").toLowerCase()).address,x(String(n.token))))}if(e!=="launch"){let u=ae(await t.call(te[e],W(i))),p=await de(i,u,i.quotedAt);if(i.preparation={status:u.status,transactions:p},e==="cancel"||e==="claim"||e==="limitOrder"){if(u.status==="needs_signature")throw new a("This FOBO action must not need a permit signature.");u.status==="ready"&&(n._prepared=JSON.stringify(p))}}let c=e==="launch"?`Launch ${P(String(n.name))} (${P(String(n.ticker))}), pair ${n.pair}, initial buy ${n.devBuyTokens} tokens, lock ${n.vestMonths} months.`:e==="limitOrder"?`Place a FOBO ${n.side} order for ${n.token}, limit market cap ${n.limitMarketCapUsd} USD, expiry ${n.expiresIn??"7d"}, maximum keeper fee ${n.maxFeePerFill} pay-token base units per fill.`:e==="claim"?`Claim FOBO ${n.kind} earnings${n.token?` for ${n.token}`:` in ${n.pair}`} to ${n.to??s}.`:e==="cancel"?`Cancel FOBO order ${n.orderId} and refund ${s}.`:`${e} on FOBO for ${n.token}.`,k=e==="launch"?`Launch fee ${i.terms.launchFeeWei} wei; initial-buy spending cap ${i.terms.amountIn} pair-token base units.`:`Exact input ${i.terms.amountIn??"0"} base units.`,O=`${c}
|
|
1
|
+
import{a as R}from"./UNBRUWSV.js";import{d as N}from"./R5Z4HPCA.js";import{b as D,d as M,f as C}from"./4ZD5D2UP.js";import{t as E}from"./EZUQMTLE.js";import{a}from"./XSD5NL7J.js";import{a as P}from"./JXOEJPJ4.js";import{decodeFunctionData as _,erc20Abi as X,formatUnits as $,getAddress as x,isAddress as Q,parseUnits as K,parseAbi as V,zeroAddress as f}from"viem";var be=300,m={permit2:"0x000000000022D473030F116dDEE9F6B43aC78BA3",router:"0x204FAca1764B154221e35c0d20aBb3c525710498",factory:"0xd7e538e98A208fD19e46bc549FF4710C33664e18",limitOrders:"0x3126f62d604a0AA2de8788e3eC21dDd8F2a2f82a",fobo:"0x000DE658153f47f23e92973C8EB1e89762703676",usdg:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168"},T=["eth","fobo","usdg","msft","tsla","spcx","googl","amzn","aapl","nvda","meta"],b=(t,e=0)=>({type:"string",minLength:e,maxLength:t}),w=(t,e="string")=>({type:e,enum:t}),B={type:"string",pattern:"^0x[0-9a-fA-F]{40}$"},v={type:"string",pattern:"^[0-9]+$",description:"Exact input in token base units, as a decimal integer string."},U={type:"integer",minimum:1,maximum:100},L={token:B,amount:v,payWith:w(["pair","eth","usdg","fobo"]),slippageBps:{type:"integer",minimum:1,maximum:5e3}},Z={token:"FOBO coin contract address on chain 4663; obtain it from fobo_browse or fobo_token.",query:"Search FOBO coins and traders by name, ticker or address; omit to browse recent launches.",limit:"Maximum number of results, from 1 to 100.",side:"Trade direction: buy the coin or sell it back to the payment currency.",payWith:"Payment currency: pair uses the coin\u2019s own pair; trades also accept eth, usdg or fobo.",slippageBps:"Maximum loss against quoted output in basis points (50 = 0.5%); default 50.",hash:"Public transaction hash (0x followed by 64 hex digits) to look up on FOBO.",name:"New coin name, 1 to 32 characters.",ticker:"New coin ticker, 2 to 10 letters or digits; normalized to uppercase.",description:"Public description of the new coin, at most 280 characters.",imageUrl:"Optional public HTTPS image URL; omit for no image. Local uploads are unsupported.",links:"Optional public project links stored with the launched coin.",telegram:"Public Telegram URL.",discord:"Public Discord URL.",github:"Public GitHub URL.",website:"Public project website URL.",pair:"Pair currency: eth, fobo, usdg or a supported stock ticker; referral claims use this currency.",devBuyTokens:"Whole tokens in the initial buy, 0 to 50,000,000 (5% of supply); default 0.",vestMonths:"Initial-buy lock in months: 0, 1, 3, 6 or 12; default 0. A lock requires an initial buy.",limitMarketCapUsd:"Target market capitalization in whole USD, as a decimal string; not a per-token price.",expiresIn:"Order lifetime: 1h, 1d, 7d or 30d; default 7d.",maxFeePerFill:"Maximum keeper fee per fill in payment-token base units, as an exact decimal integer string.",orderId:"Positive numeric ID of the local wallet\u2019s limit order to cancel.",kind:"Claim creator fees, referral earnings or vesting tokens.",to:"Optional recipient address for a referral claim; omit for this wallet. Other claims always pay this wallet."},l=(t,e=[])=>({type:"object",additionalProperties:!1,required:e,properties:Object.fromEntries(Object.entries(t).map(([r,s])=>{let o=s;return[r,{...o,description:o.description??Z[r]}]}))}),Y={fobo_browse:l({query:b(64,1),limit:U}),fobo_token:l({token:B},["token"]),fobo_portfolio:l({}),fobo_leaderboard:l({limit:U}),fobo_claims:l({}),fobo_limit_orders:l({token:B}),fobo_quote:l({...L,side:w(["buy","sell"])},["token","side","amount"]),fobo_fee_schedule:l({}),fobo_limit_pay_tokens:l({}),fobo_transaction:l({hash:{type:"string",pattern:"^0x[0-9a-fA-F]{64}$"}},["hash"]),fobo_buy:l(L,["token","amount"]),fobo_sell:l(L,["token","amount"]),fobo_launch:l({name:b(32,1),ticker:{type:"string",pattern:"^\\$?[a-zA-Z0-9]{2,10}$"},description:b(280),imageUrl:{...b(2e3),pattern:"^https://"},links:l({telegram:b(200),discord:b(200),github:b(200),website:b(200)}),pair:w(T),devBuyTokens:{type:"integer",minimum:0,maximum:5e7},vestMonths:w([0,1,3,6,12],"integer"),maxInitialBuyAmount:{...v,description:"Maximum pair-token base units to spend on the initial buy, excluding the live launch fee. Required when devBuyTokens is positive."}},["name","ticker"]),fobo_limit_order:l({token:B,side:w(["buy","sell"]),payWith:b(42,2),amount:v,limitMarketCapUsd:{type:"string",pattern:"^\\d{1,30}(\\.\\d{1,18})?$"},expiresIn:w(["1h","1d","7d","30d"]),maxFeePerFill:v},["token","side","amount","limitMarketCapUsd","maxFeePerFill"]),fobo_cancel_limit_order:l({orderId:{type:"integer",minimum:1,maximum:Number.MAX_SAFE_INTEGER}},["orderId"]),fobo_claim:l({kind:w(["creator","referral","vesting"]),token:B,pair:w(T),to:B},["kind"])},ee={fobo_buy:"buy",fobo_sell:"sell",fobo_launch:"launch",fobo_limit_order:"limitOrder",fobo_cancel_limit_order:"cancel",fobo_claim:"claim"},te={buy:"prepare_trade",sell:"prepare_trade",launch:"prepare_launch",limitOrder:"prepare_limit_order",cancel:"prepare_cancel_limit_order",claim:"prepare_claim"};function g(t){if(!t||typeof t!="object"||Array.isArray(t))throw new a("FOBO returned an invalid answer. Ask for a fresh summary.");return t}function ne(t,e){function r(s,o){let d=s.properties;if(Object.keys(o).some(n=>!Object.hasOwn(d,n)))throw new a("Unexpected FOBO argument. Use the fields declared by the tool.");for(let n of s.required)if(o[n]===void 0)throw new a(`Missing FOBO argument: ${n}.`);for(let[n,i]of Object.entries(o)){let c=d[n];if(c.type==="object"){r(c,g(i));continue}if(c.type==="integer"){if(typeof i!="number"||!Number.isSafeInteger(i)||i<Number(c.minimum??0)||i>Number(c.maximum??Number.MAX_SAFE_INTEGER))throw new a(`Invalid FOBO argument: ${n}.`)}else if(typeof i!="string"||i.length<Number(c.minLength??0)||i.length>Number(c.maxLength??256)||typeof c.pattern=="string"&&!new RegExp(c.pattern).test(i))throw new a(`Invalid FOBO argument: ${n}.`);if(Array.isArray(c.enum)&&!c.enum.includes(i))throw new a(`Invalid FOBO argument: ${n}.`)}}if(r(Y[t],g(e)),t==="fobo_claim"&&(e.kind==="referral"?e.pair===void 0:e.token===void 0))throw new a("Referral claims need pair; creator and vesting claims need token.");if(t==="fobo_claim"&&e.kind!=="referral"&&e.to!==void 0)throw new a("Only referral claims may name another recipient.");if(t==="fobo_launch"){if(Number(e.vestMonths??0)>0&&Number(e.devBuyTokens??0)===0)throw new a("A vesting lock needs an initial buy.");if(Number(e.devBuyTokens??0)>0&&(typeof e.maxInitialBuyAmount!="string"||BigInt(e.maxInitialBuyAmount)===0n))throw new a("An initial buy needs maxInitialBuyAmount in pair-token base units. Ask the person for that spending cap.");if(e.imageUrl!==void 0){let s=new URL(String(e.imageUrl));if(s.protocol!=="https:"||s.username||s.password)throw new a("Use a public https image URL.")}}return structuredClone(e)}function y(t){let e=t.toLowerCase();if(e===f||e==="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee")return{address:f,decimals:18};if(e===m.usdg.toLowerCase())return{address:m.usdg,decimals:6};if(e===m.fobo.toLowerCase())return{address:m.fobo,decimals:18};if(t==="eth")return{address:f,decimals:18};if(t==="usdg")return{address:m.usdg,decimals:6};if(t==="fobo")return{address:m.fobo,decimals:18};let r=R.tokens.find(s=>T.includes(t)&&s.symbol.toLowerCase()===t||s.token.toLowerCase()===e);if(r)return{address:x(r.token),decimals:18};throw new a("FOBO did not identify a supported pair currency. Ask for token details first.")}function A(t,e,r){if(typeof t!="string"||!/^\d{1,78}(\.\d{1,18})?$/.test(t)||(t.split(".")[1]?.length??0)>e)throw new a(`FOBO returned an invalid ${r}. Ask for a fresh quote.`);return K(t,e).toString()}function re(t,e,r,s){if(String(t.payWith).replace(/^\$/,"").toLowerCase()!==s.toLowerCase())throw new a("FOBO quote payment currency differs from the request.");if(t.slippageBps!==r)throw new a("FOBO quote slippage differs from the request.");let o=A(t.expectedOut,e,"quote output"),d=A(t.minOut,e,"quote minimum"),n=BigInt(o)*BigInt(1e4-r)/10000n;if(BigInt(d)<=0n||BigInt(d)>BigInt(o)||BigInt(d)<n)throw new a("FOBO quote minimum exceeds the approved slippage loss.");return{amountOut:o,minimum:d}}function W(t){let e=Object.fromEntries(Object.entries(t.request).filter(([r])=>!r.startsWith("_")&&r!=="maxInitialBuyAmount"));return typeof e.links=="string"&&(e.links=JSON.parse(e.links)),e.amount!==void 0&&(e.amount=$(BigInt(String(e.amount)),Number(t.request._inputDecimals))),e.maxFeePerFill!==void 0&&(e.maxFeePerFill=$(BigInt(String(e.maxFeePerFill)),Number(t.request._payDecimals))),(t.kind==="buy"||t.kind==="sell")&&(e.side=t.kind),t.kind==="claim"&&e.pair!==void 0&&(e.currency=e.pair,delete e.pair),{...e,account:t.wallet}}function S(t,e,r="0x0Af57F62982D03066ef917AcAd87F771c06528Ec"){let[s,o]=BigInt(t)<BigInt(e)?[t,e]:[e,t];return{currency0:s,currency1:o,fee:r===f?500:0,tickSpacing:r===f?10:60,hooks:r}}function j(t,e){let r=t===f?e:t;if(t!==f&&e!==f)throw new a("FOBO base-currency routes must pass through ETH.");if(r.toLowerCase()===m.usdg.toLowerCase())return S(t,e,f);if(r.toLowerCase()===m.fobo.toLowerCase())return S(t,e);throw new a("FOBO has not pinned a route between this pair and ETH. Use the token\u2019s own pair.")}function oe(t,e,r,s){let o=[];return r.toLowerCase()!==e.toLowerCase()&&(r!==f&&o.push(j(r,f)),e!==f&&o.push(j(f,e))),o.push(S(e,t)),s?o.reverse():o}function ie(t,e,r,s){let o=t.request,d=t.terms;if(t.kind==="buy"||t.kind==="sell")return{kind:"trade",currencyIn:o._currencyIn,currencyOut:o._currencyOut,amountIn:BigInt(d.amountIn),minOut:BigInt(d.minOut),now:e,pools:JSON.parse(String(o._pools)),...s?{permit:s}:{}};if(t.kind==="launch"){let i=(r?_({abi:D,data:r.data}).args[0]:void 0)?.devBuyMaxCost??BigInt(d.amountIn??"0");if(i>BigInt(d.amountIn??"0"))throw new a("FOBO launch exceeds the approved initial-buy spending cap. Nothing further was signed.");return{kind:"launch",name:String(o.name),ticker:String(o.ticker).replace(/^\$/,"").toUpperCase(),pair:y(String(o.pair)).address,devBuyTokens:BigInt(d.devBuyTokens??0)*10n**18n,devBuyMaxCost:i,vestMonths:d.vestMonths??0,launchFeeWei:BigInt(d.launchFeeWei),now:e}}if(t.kind==="limitOrder"){if(!r)throw new a("FOBO order is missing its unsigned transaction.");let n=_({abi:M,data:r.data});if(n.functionName!=="place")throw new a("FOBO order must call place.");let i=n.args[5],k={"1h":3600,"1d":86400,"7d":604800,"30d":2592e3}[String(o.expiresIn??"7d")],O=BigInt(t.quotedAt+k);if(i<O-60n||i>BigInt(e+k)+60n)throw new a("FOBO changed the approved order expiry. Nothing further was signed.");return{kind:"limitOrder",side:o.side==="buy"?0:1,token:d.token,payToken:y(String(o.payWith)).address,amount:BigInt(d.amountIn),limitPriceUsdE18:K(String(o.limitMarketCapUsd),18)/1000000000n,expiry:i,maxFeePerFill:BigInt(String(o.maxFeePerFill))}}if(t.kind==="cancel")return{kind:"cancel",orderId:BigInt(String(o.orderId))};if(o.kind==="creator")return{kind:"claim",claimKind:"creator",poolKey:JSON.parse(String(o._poolKey))};if(o.kind==="referral")return{kind:"claim",claimKind:"referral",currency:y(String(o.pair)).address,recipient:o.to??t.wallet};if(o.kind==="vesting"&&r)return{kind:"claim",claimKind:"vesting",lockId:_({abi:C,data:r.data}).args[0],beneficiary:t.wallet};throw new a("FOBO claim does not match a supported claim kind.")}function ae(t){let e={...g(t)};if(e.status==="needs_signature"&&e.transactions===void 0&&(e.transactions=[]),!["ready","needs_approval","needs_signature"].includes(String(e.status))||!Array.isArray(e.transactions)||e.transactions.length>32)throw new a("FOBO returned an unsupported preparation. Nothing further was signed. Ask for a fresh summary.");return e}function se(t,e,r){let s=g(e);if(![4663,"0x1237"].includes(s.chainId)||String(s.from).toLowerCase()!==t.wallet.toLowerCase()||BigInt(String(s.value??"0"))!==0n)throw new a("FOBO approval has the wrong wallet, chain or ETH value. Nothing further was signed.");let o=_({abi:X,data:String(s.data)});if(o.functionName!=="approve")throw new a("FOBO requested something other than an approval.");let d=o.args[0],n=t.kind==="launch"?m.factory:t.kind==="limitOrder"?m.limitOrders:m.permit2;if(d.toLowerCase()!==n.toLowerCase()||String(s.to).toLowerCase()!==String(t.request._currencyIn).toLowerCase()||t.terms.amountIn===void 0)throw new a("FOBO approval does not match the approved token and spender. Nothing further was signed.");return N(e,{kind:"approval",token:x(String(s.to)),spender:d,amount:BigInt(t.terms.amountIn)},t.wallet)}async function de(t,e,r,s,o){if(e.status==="needs_signature"){if(e.transactions.length)throw new a("FOBO attached unexpected transactions to a signature request.");return[]}if(!e.transactions.length||t.kind!=="claim"&&e.transactions.length!==1)throw new a("FOBO returned an unexpected transaction count. Nothing further was signed.");if(e.status==="needs_approval"){if(!["buy","sell","launch","limitOrder"].includes(t.kind))throw new a("This FOBO action must not need an approval.");return e.transactions.map(n=>se(t,n,r))}if(e.transactions.some(n=>String(g(n).data).toLowerCase().startsWith("0x095ea7b3")))throw new a("FOBO attached an approval to a ready action. Ask for a fresh summary.");if(t.kind==="claim"&&t.request.kind==="vesting"){let n=o??E({chainId:4663}).readContract,i=V(["function getLock(uint256 id) view returns ((address token,uint64 start,uint32 duration,address beneficiary,uint256 amount,uint256 claimed))"]);for(let c of e.transactions){let k=_({abi:C,data:c.data}).args[0],O=await n({address:"0x51d217Ecf7c0e4EbF54258444B9617D012Fd7D0a",abi:i,functionName:"getLock",args:[k]});if(O.beneficiary.toLowerCase()!==t.wallet.toLowerCase()||O.token.toLowerCase()!==String(t.request.token).toLowerCase())throw new a("FOBO vesting lock does not belong to this wallet and token. Nothing further was signed.")}}let d=e.transactions.map(n=>N(n,ie(t,r,n,s),t.wallet));if(t.kind==="launch"){let n=BigInt(t.terms.launchFeeWei??"0"),i=t.request.pair==="eth"?n+BigInt(t.terms.amountIn??"0"):n;if(d.some(c=>BigInt(c.value)>i||BigInt(c.value)<n))throw new a("FOBO launch exceeds the approved spending cap or changed its fee. Nothing further was signed.")}if(typeof t.request._prepared=="string"){let n=JSON.parse(t.request._prepared);if(d.length!==n.length||d.some((i,c)=>i.to.toLowerCase()!==n[c].to.toLowerCase()||i.data.toLowerCase()!==n[c].data.toLowerCase()||BigInt(i.value)!==BigInt(n[c].value)))throw new a("FOBO changed the approved terms. Nothing further was signed. Ask for a fresh summary.")}return d}function ce(t){let e="Oak fee: 0 bps on FOBO\u2019s own route.";if(t.kind==="buy"||t.kind==="sell"){let r=t.terms.tokenPoolTaxPercentNow;if(typeof r!="number"||!Number.isFinite(r)||r<0||r>100)throw new a("FOBO quote did not identify its current tax.");return`${e} FOBO's tax right now: ${r}%; included in the quoted output and minimum.`}return t.kind==="launch"?`${e} FOBO launch fee: ${$(BigInt(t.terms.launchFeeWei),18)} ETH (${t.terms.launchFeeWei} wei).`:t.kind==="limitOrder"?`${e} FOBO keeper fee: at most ${t.request.maxFeePerFill} pay-token base units per fill. Pool tax applies when the order fills; the future tax is not known at preparation.`:`${e} No additional FOBO fee for this ${t.kind==="cancel"?"cancellation":"claim"}; network fees are additional.`}async function we(t,e,r,s){let o=Object.entries(ee).find(([,u])=>u===e)?.[0];if(!o||!Q(s,{strict:!1}))throw new a("Provide a valid FOBO action and local wallet.");let d=ne(o,r),n={};for(let[u,p]of Object.entries(d))n[u]=typeof p=="object"?JSON.stringify(p):p;let i={version:1,kind:e,wallet:x(s),chainId:4663,request:n,terms:{},quotedAt:Math.floor(Date.now()/1e3)};if(e==="launch"){n.pair??="eth",n.devBuyTokens??=0,n.vestMonths??=0;let u=g(g(await t.call("get_fee_schedule",{})).launch);if(u.launchesPaused===!0)throw new a("FOBO launches are paused. Nothing was signed.");let p=y(String(n.pair));n._currencyIn=p.address,n._inputDecimals=p.decimals,i.preparation={status:"ready",transactions:[]},i.terms={launchFeeWei:A(u.feeEth,18,"launch fee"),devBuyTokens:Number(n.devBuyTokens),vestMonths:Number(n.vestMonths),amountIn:String(n.maxInitialBuyAmount??"0")}}else if(e==="buy"||e==="sell"||e==="limitOrder"){n.payWith??=e==="limitOrder"?"eth":"pair";let u=String(n.payWith),p=g(await t.call("get_token",{token:n.token}));if(String(p.address).toLowerCase()!==String(n.token).toLowerCase())throw new a("FOBO token metadata does not match the requested token.");let H=y(String(p.pair).replace(/^\$/,"").toLowerCase());u==="pair"&&(u=String(p.pair).replace(/^\$/,"").toLowerCase());let F=y(u);n._payDecimals=F.decimals;let I=e==="limitOrder"?n.side:e;if(n._currencyIn=I==="sell"?String(n.token):F.address,n._currencyOut=I==="sell"?F.address:String(n.token),n._inputDecimals=I==="sell"?18:F.decimals,n._outputDecimals=I==="sell"?F.decimals:18,e!=="limitOrder"&&(n._pools=JSON.stringify(oe(x(String(n.token)),H.address,F.address,I==="sell"))),i.terms={token:x(String(n.token)),payWith:String(n.payWith),amountIn:String(n.amount)},BigInt(String(n.amount))===0n)throw new a("FOBO input amount must be positive.");if(e!=="limitOrder"){n.slippageBps??=50;let{account:J,...z}=W(i),h=g(await t.call("quote_trade",z)),G=A(h.amountIn,Number(n._inputDecimals),"quote input"),{minimum:q}=re(h,Number(n._outputDecimals),Number(n.slippageBps),u);if(G!==n.amount||BigInt(q)===0n||String(h.token).toLowerCase()!==String(n.token).toLowerCase()||h.side!==e)throw new a("FOBO quote does not match the requested trade. Nothing was signed.");if(i.terms.minOut=q,i.terms.slippageBps=Number(n.slippageBps),typeof h.tokenPoolTaxPercentNow!="number"||!Number.isFinite(h.tokenPoolTaxPercentNow)||h.tokenPoolTaxPercentNow<0||h.tokenPoolTaxPercentNow>100)throw new a("FOBO quote did not identify its current tax.");i.terms.tokenPoolTaxPercentNow=h.tokenPoolTaxPercentNow}}if(e==="claim"&&n.kind==="creator"){let u=g(await t.call("get_token",{token:n.token}));if(String(u.address).toLowerCase()!==String(n.token).toLowerCase())throw new a("FOBO claim token metadata does not match.");n._poolKey=JSON.stringify(S(y(String(u.pair).replace(/^\$/,"").toLowerCase()).address,x(String(n.token))))}if(e!=="launch"){let u=ae(await t.call(te[e],W(i))),p=await de(i,u,i.quotedAt);if(i.preparation={status:u.status,transactions:p},e==="cancel"||e==="claim"||e==="limitOrder"){if(u.status==="needs_signature")throw new a("This FOBO action must not need a permit signature.");u.status==="ready"&&(n._prepared=JSON.stringify(p))}}let c=e==="launch"?`Launch ${P(String(n.name))} (${P(String(n.ticker))}), pair ${n.pair}, initial buy ${n.devBuyTokens} tokens, lock ${n.vestMonths} months.`:e==="limitOrder"?`Place a FOBO ${n.side} order for ${n.token}, limit market cap ${n.limitMarketCapUsd} USD, expiry ${n.expiresIn??"7d"}, maximum keeper fee ${n.maxFeePerFill} pay-token base units per fill.`:e==="claim"?`Claim FOBO ${n.kind} earnings${n.token?` for ${n.token}`:` in ${n.pair}`} to ${n.to??s}.`:e==="cancel"?`Cancel FOBO order ${n.orderId} and refund ${s}.`:`${e} on FOBO for ${n.token}.`,k=e==="launch"?`Launch fee ${i.terms.launchFeeWei} wei; initial-buy spending cap ${i.terms.amountIn} pair-token base units.`:`Exact input ${i.terms.amountIn??"0"} base units.`,O=`${c}
|
|
2
2
|
Leaves wallet: ${k}
|
|
3
3
|
Comes back: ${i.terms.minOut?`at least ${i.terms.minOut} output base units`:e==="launch"?"the launched token and any initial buy, subject to the stated lock":"the approved order or claim proceeds to the named recipient"}.
|
|
4
4
|
Fees: no Oak swap fee on FOBO's route. ${ce(i)}
|