levr-sdk 0.4.0 → 0.5.0-alpha.2
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/dist/esm/packages/clanker-sdk/src/abi/uniswap/UniswapV3Factory.js +136 -0
- package/dist/esm/packages/clanker-sdk/src/abi/uniswap/UniswapV3Factory.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/uniswap/UniswapV3NonfungiblePositionManager.js +603 -0
- package/dist/esm/packages/clanker-sdk/src/abi/uniswap/UniswapV3NonfungiblePositionManager.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v0/Clanker.js +312 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v0/Clanker.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v1/Clanker.js +323 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v1/Clanker.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v2/Clanker.js +315 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v2/Clanker.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v2/LpLockerv2.js +321 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v2/LpLockerv2.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v3/Clanker.js +323 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v3/Clanker.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v3/ClankerToken.js +548 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v3/ClankerToken.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v3.1/Clanker.js +689 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v3.1/Clanker.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v3.1/ClankerToken.js +1794 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v3.1/ClankerToken.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v3.1/ClankerVault.js +234 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v3.1/ClankerVault.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v3.1/LpLockerv2.js +571 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v3.1/LpLockerv2.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/Clanker.js +437 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/Clanker.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerAirdrop.js +198 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerAirdrop.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerAirdropV2.js +290 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerAirdropV2.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerFeeLocker.js +160 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerFeeLocker.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerHook.js +1476 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerHook.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerHookDynamicFee.js +758 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerHookDynamicFee.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerHookStaticFee.js +636 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerHookStaticFee.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerLocker.js +459 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerLocker.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerMevBlockDelay.js +84 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerMevBlockDelay.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerSniperAuction.js +342 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerSniperAuction.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerSniperUtil.js +80 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerSniperUtil.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerToken.js +554 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerToken.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerUniV4EthDevBuy.js +170 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerUniV4EthDevBuy.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerUniv3EthDevBuy.js +172 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerUniv3EthDevBuy.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerVault.js +221 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerVault.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4.1/ClankerHookDynamicFee.js +829 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4.1/ClankerHookDynamicFee.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4.1/ClankerHookStaticFee.js +717 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4.1/ClankerHookStaticFee.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4.1/ClankerMevSniperAuction.js +415 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4.1/ClankerMevSniperAuction.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4.1/ClankerPool.js +11 -0
- package/dist/esm/packages/clanker-sdk/src/abi/v4.1/ClankerPool.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/config/clankerTokenV3.js +272 -0
- package/dist/esm/packages/clanker-sdk/src/config/clankerTokenV3.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/config/clankerTokenV4.js +508 -0
- package/dist/esm/packages/clanker-sdk/src/config/clankerTokenV4.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/config/clankerTokens.js +2 -0
- package/dist/esm/packages/clanker-sdk/src/config/clankerTokens.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/constants.js +95 -0
- package/dist/esm/packages/clanker-sdk/src/constants.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/deployment/deploy.js +53 -0
- package/dist/esm/packages/clanker-sdk/src/deployment/deploy.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/extensions/DevBuyExtension.js +89 -0
- package/dist/esm/packages/clanker-sdk/src/extensions/DevBuyExtension.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/extensions/IClankerExtension.js +2 -0
- package/dist/esm/packages/clanker-sdk/src/extensions/IClankerExtension.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/extensions/VaultExtension.js +26 -0
- package/dist/esm/packages/clanker-sdk/src/extensions/VaultExtension.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/extensions/index.js +4 -0
- package/dist/esm/packages/clanker-sdk/src/extensions/index.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/index.js +6 -0
- package/dist/esm/packages/clanker-sdk/src/index.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/services/vanityAddress.js +40 -0
- package/dist/esm/packages/clanker-sdk/src/services/vanityAddress.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/utils/clanker-contracts.js +2 -0
- package/dist/esm/packages/clanker-sdk/src/utils/clanker-contracts.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/utils/clankers.js +212 -0
- package/dist/esm/packages/clanker-sdk/src/utils/clankers.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/utils/errors.js +80 -0
- package/dist/esm/packages/clanker-sdk/src/utils/errors.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/utils/market-cap.js +19 -0
- package/dist/esm/packages/clanker-sdk/src/utils/market-cap.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/utils/merkleTree.js +37 -0
- package/dist/esm/packages/clanker-sdk/src/utils/merkleTree.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/utils/meta.js +9 -0
- package/dist/esm/packages/clanker-sdk/src/utils/meta.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/utils/write-clanker-contracts.js +70 -0
- package/dist/esm/packages/clanker-sdk/src/utils/write-clanker-contracts.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/utils/zod-onchain.js +39 -0
- package/dist/esm/packages/clanker-sdk/src/utils/zod-onchain.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/v3/index.js +151 -0
- package/dist/esm/packages/clanker-sdk/src/v3/index.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/v4/extensions/airdrop.js +144 -0
- package/dist/esm/packages/clanker-sdk/src/v4/extensions/airdrop.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/v4/extensions/index.js +2 -0
- package/dist/esm/packages/clanker-sdk/src/v4/extensions/index.js.map +1 -0
- package/dist/esm/packages/clanker-sdk/src/v4/index.js +383 -0
- package/dist/esm/packages/clanker-sdk/src/v4/index.js.map +1 -0
- package/dist/esm/{abis → src/abis}/ClankerAirdropV2.js +1 -0
- package/dist/esm/src/abis/ClankerAirdropV2.js.map +1 -0
- package/dist/esm/{abis → src/abis}/ClankerVault.js +1 -0
- package/dist/esm/src/abis/ClankerVault.js.map +1 -0
- package/dist/esm/{abis → src/abis}/IClankerAirdrop.js +1 -0
- package/dist/esm/src/abis/IClankerAirdrop.js.map +1 -0
- package/dist/esm/{abis → src/abis}/IClankerFeeLocker.js +1 -0
- package/dist/esm/src/abis/IClankerFeeLocker.js.map +1 -0
- package/dist/esm/{abis → src/abis}/IClankerHookDynamicFee.js +1 -0
- package/dist/esm/src/abis/IClankerHookDynamicFee.js.map +1 -0
- package/dist/esm/{abis → src/abis}/IClankerHookStaticFee.js +1 -0
- package/dist/esm/src/abis/IClankerHookStaticFee.js.map +1 -0
- package/dist/esm/{abis → src/abis}/IClankerLPLocker.js +1 -0
- package/dist/esm/src/abis/IClankerLPLocker.js.map +1 -0
- package/dist/esm/{abis → src/abis}/IClankerLpLockerFeeConversion.js +1 -0
- package/dist/esm/src/abis/IClankerLpLockerFeeConversion.js.map +1 -0
- package/dist/esm/{abis → src/abis}/IClankerLpLockerMultiple.js +1 -0
- package/dist/esm/src/abis/IClankerLpLockerMultiple.js.map +1 -0
- package/dist/esm/{abis → src/abis}/IClankerToken.js +1 -0
- package/dist/esm/src/abis/IClankerToken.js.map +1 -0
- package/dist/esm/{abis → src/abis}/LevrDeployer_v1.js +1 -0
- package/dist/esm/src/abis/LevrDeployer_v1.js.map +1 -0
- package/dist/esm/{abis → src/abis}/LevrFactory_v1.js +1 -0
- package/dist/esm/src/abis/LevrFactory_v1.js.map +1 -0
- package/dist/esm/{abis → src/abis}/LevrFeeSplitterFactory_v1.js +1 -0
- package/dist/esm/src/abis/LevrFeeSplitterFactory_v1.js.map +1 -0
- package/dist/esm/{abis → src/abis}/LevrFeeSplitter_v1.js +1 -0
- package/dist/esm/src/abis/LevrFeeSplitter_v1.js.map +1 -0
- package/dist/esm/{abis → src/abis}/LevrForwarder_v1.js +1 -0
- package/dist/esm/src/abis/LevrForwarder_v1.js.map +1 -0
- package/dist/esm/{abis → src/abis}/LevrGovernor_v1.js +1 -0
- package/dist/esm/src/abis/LevrGovernor_v1.js.map +1 -0
- package/dist/esm/{abis → src/abis}/LevrStakedToken_v1.js +1 -0
- package/dist/esm/src/abis/LevrStakedToken_v1.js.map +1 -0
- package/dist/esm/{abis → src/abis}/LevrStaking_v1.js +1 -0
- package/dist/esm/src/abis/LevrStaking_v1.js.map +1 -0
- package/dist/esm/{abis → src/abis}/LevrTreasury_v1.js +1 -0
- package/dist/esm/src/abis/LevrTreasury_v1.js.map +1 -0
- package/dist/esm/{abis → src/abis}/Permit2.js +1 -0
- package/dist/esm/src/abis/Permit2.js.map +1 -0
- package/dist/esm/{abis → src/abis}/StateView.js +1 -0
- package/dist/esm/src/abis/StateView.js.map +1 -0
- package/dist/esm/src/abis/V3Pool.js +36 -0
- package/dist/esm/src/abis/V3Pool.js.map +1 -0
- package/dist/esm/{abis → src/abis}/V3QuoterV2.js +1 -0
- package/dist/esm/src/abis/V3QuoterV2.js.map +1 -0
- package/dist/esm/{abis → src/abis}/V4Quoter.js +1 -0
- package/dist/esm/src/abis/V4Quoter.js.map +1 -0
- package/dist/esm/{abis → src/abis}/WETH9.js +1 -0
- package/dist/esm/src/abis/WETH9.js.map +1 -0
- package/dist/esm/{abis → src/abis}/index.js +3 -1
- package/dist/esm/src/abis/index.js.map +1 -0
- package/dist/esm/src/airdrop.js.map +1 -0
- package/dist/esm/{balance.js → src/balance.js} +3 -3
- package/dist/esm/src/balance.js.map +1 -0
- package/dist/esm/{build-calldatas-v4.js → src/build-calldatas-v4.js} +2 -9
- package/dist/esm/src/build-calldatas-v4.js.map +1 -0
- package/dist/esm/{build-clanker-v4.js → src/build-clanker-v4.js} +113 -10
- package/dist/esm/src/build-clanker-v4.js.map +1 -0
- package/dist/esm/{client → src/client}/hook/index.js +6 -5
- package/dist/esm/src/client/hook/index.js.map +1 -0
- package/dist/esm/src/client/hook/use-airdrop.js.map +1 -0
- package/dist/esm/{client → src/client}/hook/use-clanker.js +1 -1
- package/dist/esm/src/client/hook/use-clanker.js.map +1 -0
- package/dist/esm/src/client/hook/use-configure-splits.js.map +1 -0
- package/dist/esm/src/client/hook/use-deploy.js.map +1 -0
- package/dist/esm/{client → src/client}/hook/use-factory.js +5 -11
- package/dist/esm/src/client/hook/use-factory.js.map +1 -0
- package/dist/esm/src/client/hook/use-fee-receivers.js.map +1 -0
- package/dist/esm/src/client/hook/use-governance.js.map +1 -0
- package/dist/esm/src/client/hook/use-metrics.js +63 -0
- package/dist/esm/src/client/hook/use-metrics.js.map +1 -0
- package/dist/esm/src/client/hook/use-prepare.js.map +1 -0
- package/dist/esm/src/client/hook/use-project.js +133 -0
- package/dist/esm/src/client/hook/use-project.js.map +1 -0
- package/dist/esm/{client → src/client}/hook/use-proposal.js +6 -5
- package/dist/esm/src/client/hook/use-proposal.js.map +1 -0
- package/dist/esm/src/client/hook/use-register.js.map +1 -0
- package/dist/esm/{client → src/client}/hook/use-stake.js +4 -10
- package/dist/esm/src/client/hook/use-stake.js.map +1 -0
- package/dist/esm/src/client/hook/use-subscription.js +98 -0
- package/dist/esm/src/client/hook/use-subscription.js.map +1 -0
- package/dist/esm/{client → src/client}/hook/use-swap.js +5 -4
- package/dist/esm/src/client/hook/use-swap.js.map +1 -0
- package/dist/esm/src/client/hook/use-user.js.map +1 -0
- package/dist/esm/src/client/hook/use-vault.js.map +1 -0
- package/dist/esm/src/client/index.js.map +1 -0
- package/dist/esm/{client → src/client}/levr-provider.js +4 -24
- package/dist/esm/src/client/levr-provider.js.map +1 -0
- package/dist/esm/{client → src/client}/query-keys.js +15 -5
- package/dist/esm/src/client/query-keys.js.map +1 -0
- package/dist/esm/src/constants/chain.js +248 -0
- package/dist/esm/src/constants/chain.js.map +1 -0
- package/dist/esm/{constants → src/constants}/clanker.js +15 -10
- package/dist/esm/src/constants/clanker.js.map +1 -0
- package/dist/esm/src/constants/config.js.map +1 -0
- package/dist/esm/src/constants/index.js +24 -0
- package/dist/esm/src/constants/index.js.map +1 -0
- package/dist/esm/{constants → src/constants}/levr.js +8 -1
- package/dist/esm/src/constants/levr.js.map +1 -0
- package/dist/esm/{constants → src/constants}/uniswap.js +38 -1
- package/dist/esm/src/constants/uniswap.js.map +1 -0
- package/dist/esm/src/deploy-v4.js.map +1 -0
- package/dist/esm/src/factory.js +40 -0
- package/dist/esm/src/factory.js.map +1 -0
- package/dist/esm/{fee-receivers.js → src/fee-receivers.js} +5 -5
- package/dist/esm/src/fee-receivers.js.map +1 -0
- package/dist/esm/src/fee-splitter.js.map +1 -0
- package/dist/esm/src/governance.js.map +1 -0
- package/dist/esm/src/graphql/client.js +62 -0
- package/dist/esm/src/graphql/client.js.map +1 -0
- package/dist/esm/src/graphql/constants.js +2 -0
- package/dist/esm/src/graphql/constants.js.map +1 -0
- package/dist/esm/src/graphql/fields/factory.js +24 -0
- package/dist/esm/src/graphql/fields/factory.js.map +1 -0
- package/dist/esm/src/graphql/fields/index.js +5 -0
- package/dist/esm/src/graphql/fields/index.js.map +1 -0
- package/dist/esm/src/graphql/fields/metrics.js +28 -0
- package/dist/esm/src/graphql/fields/metrics.js.map +1 -0
- package/dist/esm/src/graphql/fields/project.js +108 -0
- package/dist/esm/src/graphql/fields/project.js.map +1 -0
- package/dist/esm/src/graphql/fields/proposal.js +97 -0
- package/dist/esm/src/graphql/fields/proposal.js.map +1 -0
- package/dist/esm/src/graphql/gen/index.js +25 -0
- package/dist/esm/src/graphql/gen/index.js.map +1 -0
- package/dist/esm/src/graphql/gen/runtime/batcher.js +207 -0
- package/dist/esm/src/graphql/gen/runtime/batcher.js.map +1 -0
- package/dist/esm/src/graphql/gen/runtime/createClient.js +25 -0
- package/dist/esm/src/graphql/gen/runtime/createClient.js.map +1 -0
- package/dist/esm/src/graphql/gen/runtime/error.js +18 -0
- package/dist/esm/src/graphql/gen/runtime/error.js.map +1 -0
- package/dist/esm/src/graphql/gen/runtime/fetcher.js +68 -0
- package/dist/esm/src/graphql/gen/runtime/fetcher.js.map +1 -0
- package/dist/esm/src/graphql/gen/runtime/generateGraphqlOperation.js +126 -0
- package/dist/esm/src/graphql/gen/runtime/generateGraphqlOperation.js.map +1 -0
- package/dist/esm/src/graphql/gen/runtime/index.js +10 -0
- package/dist/esm/src/graphql/gen/runtime/index.js.map +1 -0
- package/dist/esm/src/graphql/gen/runtime/linkTypeMap.js +92 -0
- package/dist/esm/src/graphql/gen/runtime/linkTypeMap.js.map +1 -0
- package/dist/esm/src/graphql/gen/runtime/typeSelection.js +4 -0
- package/dist/esm/src/graphql/gen/runtime/typeSelection.js.map +1 -0
- package/dist/esm/src/graphql/gen/runtime/types.js +3 -0
- package/dist/esm/src/graphql/gen/runtime/types.js.map +1 -0
- package/dist/esm/src/graphql/gen/schema.js +527 -0
- package/dist/esm/src/graphql/gen/schema.js.map +1 -0
- package/dist/esm/src/graphql/gen/types.js +4298 -0
- package/dist/esm/src/graphql/gen/types.js.map +1 -0
- package/dist/esm/src/graphql/index.js +18 -0
- package/dist/esm/src/graphql/index.js.map +1 -0
- package/dist/esm/src/graphql/subscription-manager.js +101 -0
- package/dist/esm/src/graphql/subscription-manager.js.map +1 -0
- package/dist/esm/{index.js → src/index.js} +0 -1
- package/dist/esm/src/index.js.map +1 -0
- package/dist/esm/src/ipfs-merkle-tree.js.map +1 -0
- package/dist/esm/src/pool-key.js.map +1 -0
- package/dist/esm/{project.js → src/project.js} +303 -336
- package/dist/esm/src/project.js.map +1 -0
- package/dist/esm/src/proposal.js +181 -0
- package/dist/esm/src/proposal.js.map +1 -0
- package/dist/esm/src/quote/index.js.map +1 -0
- package/dist/esm/src/quote/v3.js.map +1 -0
- package/dist/esm/src/quote/v4.js.map +1 -0
- package/dist/esm/src/schema/base.schema.js.map +1 -0
- package/dist/esm/{schema → src/schema}/clanker.schema.js +26 -2
- package/dist/esm/src/schema/clanker.schema.js.map +1 -0
- package/dist/esm/src/schema/index.js.map +1 -0
- package/dist/esm/{schema → src/schema}/levr.schema.js +16 -2
- package/dist/esm/src/schema/levr.schema.js.map +1 -0
- package/dist/esm/{stake.js → src/stake.js} +19 -21
- package/dist/esm/src/stake.js.map +1 -0
- package/dist/esm/{swap-v4.js → src/swap-v4.js} +2 -13
- package/dist/esm/src/swap-v4.js.map +1 -0
- package/dist/esm/{types.js.map → src/types.js.map} +1 -1
- package/dist/esm/src/usd-price.js +274 -0
- package/dist/esm/src/usd-price.js.map +1 -0
- package/dist/esm/{user.js → src/user.js} +26 -21
- package/dist/esm/src/user.js.map +1 -0
- package/dist/esm/{util.js → src/util.js} +43 -25
- package/dist/esm/src/util.js.map +1 -0
- package/dist/esm/src/vault.js.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/uniswap/UniswapV3Factory.d.ts +185 -0
- package/dist/types/packages/clanker-sdk/src/abi/uniswap/UniswapV3Factory.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/uniswap/UniswapV3NonfungiblePositionManager.d.ts +949 -0
- package/dist/types/packages/clanker-sdk/src/abi/uniswap/UniswapV3NonfungiblePositionManager.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v0/Clanker.d.ts +402 -0
- package/dist/types/packages/clanker-sdk/src/abi/v0/Clanker.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v1/Clanker.d.ts +491 -0
- package/dist/types/packages/clanker-sdk/src/abi/v1/Clanker.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v2/Clanker.d.ts +463 -0
- package/dist/types/packages/clanker-sdk/src/abi/v2/Clanker.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v2/LpLockerv2.d.ts +428 -0
- package/dist/types/packages/clanker-sdk/src/abi/v2/LpLockerv2.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v3/Clanker.d.ts +499 -0
- package/dist/types/packages/clanker-sdk/src/abi/v3/Clanker.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v3/ClankerToken.d.ts +846 -0
- package/dist/types/packages/clanker-sdk/src/abi/v3/ClankerToken.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v3.1/Clanker.d.ts +846 -0
- package/dist/types/packages/clanker-sdk/src/abi/v3.1/Clanker.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v3.1/ClankerToken.d.ts +2654 -0
- package/dist/types/packages/clanker-sdk/src/abi/v3.1/ClankerToken.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v3.1/ClankerVault.d.ts +289 -0
- package/dist/types/packages/clanker-sdk/src/abi/v3.1/ClankerVault.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v3.1/LpLockerv2.d.ts +670 -0
- package/dist/types/packages/clanker-sdk/src/abi/v3.1/LpLockerv2.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/Clanker.d.ts +819 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/Clanker.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerAirdrop.d.ts +413 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerAirdrop.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerAirdropV2.d.ts +573 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerAirdropV2.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerFeeLocker.d.ts +290 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerFeeLocker.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerHook.d.ts +1143 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerHook.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerHookDynamicFee.d.ts +1430 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerHookDynamicFee.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerHookStaticFee.d.ts +1219 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerHookStaticFee.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerLocker.d.ts +845 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerLocker.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerMevBlockDelay.d.ts +151 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerMevBlockDelay.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerSniperAuction.d.ts +572 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerSniperAuction.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerSniperUtil.d.ts +167 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerSniperUtil.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerToken.d.ts +981 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerToken.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerUniV4EthDevBuy.d.ts +325 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerUniV4EthDevBuy.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerUniv3EthDevBuy.d.ts +326 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerUniv3EthDevBuy.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerVault.d.ts +414 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerVault.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4.1/ClankerHookDynamicFee.d.ts +92 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4.1/ClankerHookDynamicFee.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4.1/ClankerHookStaticFee.d.ts +88 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4.1/ClankerHookStaticFee.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4.1/ClankerMevSniperAuction.d.ts +69 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4.1/ClankerMevSniperAuction.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4.1/ClankerPool.d.ts +9 -0
- package/dist/types/packages/clanker-sdk/src/abi/v4.1/ClankerPool.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/config/clankerTokenV3.d.ts +64 -0
- package/dist/types/packages/clanker-sdk/src/config/clankerTokenV3.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/config/clankerTokenV4.d.ts +136 -0
- package/dist/types/packages/clanker-sdk/src/config/clankerTokenV4.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/config/clankerTokens.d.ts +12 -0
- package/dist/types/packages/clanker-sdk/src/config/clankerTokens.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/constants.d.ts +29 -0
- package/dist/types/packages/clanker-sdk/src/constants.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/deployment/deploy.d.ts +21 -0
- package/dist/types/packages/clanker-sdk/src/deployment/deploy.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/extensions/DevBuyExtension.d.ts +52 -0
- package/dist/types/packages/clanker-sdk/src/extensions/DevBuyExtension.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/extensions/IClankerExtension.d.ts +36 -0
- package/dist/types/packages/clanker-sdk/src/extensions/IClankerExtension.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/extensions/VaultExtension.d.ts +17 -0
- package/dist/types/packages/clanker-sdk/src/extensions/VaultExtension.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/extensions/index.d.ts +4 -0
- package/dist/types/packages/clanker-sdk/src/extensions/index.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/index.d.ts +8 -0
- package/dist/types/packages/clanker-sdk/src/index.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/services/vanityAddress.d.ts +15 -0
- package/dist/types/packages/clanker-sdk/src/services/vanityAddress.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/utils/clanker-contracts.d.ts +16 -0
- package/dist/types/packages/clanker-sdk/src/utils/clanker-contracts.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/utils/clankers.d.ts +9506 -0
- package/dist/types/packages/clanker-sdk/src/utils/clankers.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/utils/errors.d.ts +16 -0
- package/dist/types/packages/clanker-sdk/src/utils/errors.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/utils/market-cap.d.ts +12 -0
- package/dist/types/packages/clanker-sdk/src/utils/market-cap.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/utils/merkleTree.d.ts +19 -0
- package/dist/types/packages/clanker-sdk/src/utils/merkleTree.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/utils/meta.d.ts +7 -0
- package/dist/types/packages/clanker-sdk/src/utils/meta.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/utils/write-clanker-contracts.d.ts +57 -0
- package/dist/types/packages/clanker-sdk/src/utils/write-clanker-contracts.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/utils/zod-onchain.d.ts +29 -0
- package/dist/types/packages/clanker-sdk/src/utils/zod-onchain.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/v3/index.d.ts +3167 -0
- package/dist/types/packages/clanker-sdk/src/v3/index.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/v4/extensions/airdrop.d.ts +108 -0
- package/dist/types/packages/clanker-sdk/src/v4/extensions/airdrop.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/v4/extensions/index.d.ts +2 -0
- package/dist/types/packages/clanker-sdk/src/v4/extensions/index.d.ts.map +1 -0
- package/dist/types/packages/clanker-sdk/src/v4/index.d.ts +3781 -0
- package/dist/types/packages/clanker-sdk/src/v4/index.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/ClankerAirdropV2.d.ts +1 -0
- package/dist/types/src/abis/ClankerAirdropV2.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/ClankerVault.d.ts +1 -0
- package/dist/types/src/abis/ClankerVault.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/IClankerAirdrop.d.ts +1 -0
- package/dist/types/src/abis/IClankerAirdrop.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/IClankerFeeLocker.d.ts +1 -0
- package/dist/types/src/abis/IClankerFeeLocker.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/IClankerHookDynamicFee.d.ts +1 -0
- package/dist/types/src/abis/IClankerHookDynamicFee.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/IClankerHookStaticFee.d.ts +1 -0
- package/dist/types/src/abis/IClankerHookStaticFee.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/IClankerLPLocker.d.ts +1 -0
- package/dist/types/src/abis/IClankerLPLocker.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/IClankerLpLockerFeeConversion.d.ts +1 -0
- package/dist/types/src/abis/IClankerLpLockerFeeConversion.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/IClankerLpLockerMultiple.d.ts +1 -0
- package/dist/types/src/abis/IClankerLpLockerMultiple.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/IClankerToken.d.ts +1 -0
- package/dist/types/src/abis/IClankerToken.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/LevrDeployer_v1.d.ts +1 -0
- package/dist/types/src/abis/LevrDeployer_v1.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/LevrFactory_v1.d.ts +1 -0
- package/dist/types/src/abis/LevrFactory_v1.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/LevrFeeSplitterFactory_v1.d.ts +1 -0
- package/dist/types/src/abis/LevrFeeSplitterFactory_v1.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/LevrFeeSplitter_v1.d.ts +1 -0
- package/dist/types/src/abis/LevrFeeSplitter_v1.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/LevrForwarder_v1.d.ts +1 -0
- package/dist/types/src/abis/LevrForwarder_v1.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/LevrGovernor_v1.d.ts +1 -0
- package/dist/types/src/abis/LevrGovernor_v1.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/LevrStakedToken_v1.d.ts +1 -0
- package/dist/types/src/abis/LevrStakedToken_v1.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/LevrStaking_v1.d.ts +1 -0
- package/dist/types/src/abis/LevrStaking_v1.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/LevrTreasury_v1.d.ts +1 -0
- package/dist/types/src/abis/LevrTreasury_v1.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/Permit2.d.ts +1 -0
- package/dist/types/src/abis/Permit2.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/StateView.d.ts +1 -0
- package/dist/types/src/abis/StateView.d.ts.map +1 -0
- package/dist/types/src/abis/V3Pool.d.ts +50 -0
- package/dist/types/src/abis/V3Pool.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/V3QuoterV2.d.ts +1 -0
- package/dist/types/src/abis/V3QuoterV2.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/V4Quoter.d.ts +1 -0
- package/dist/types/src/abis/V4Quoter.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/WETH9.d.ts +1 -0
- package/dist/types/src/abis/WETH9.d.ts.map +1 -0
- package/dist/types/{abis → src/abis}/index.d.ts +3 -1
- package/dist/types/src/abis/index.d.ts.map +1 -0
- package/dist/types/src/airdrop.d.ts.map +1 -0
- package/dist/types/src/balance.d.ts.map +1 -0
- package/dist/types/{build-calldatas-v4.d.ts → src/build-calldatas-v4.d.ts} +0 -1
- package/dist/types/src/build-calldatas-v4.d.ts.map +1 -0
- package/dist/types/src/build-clanker-v4.d.ts.map +1 -0
- package/dist/types/{client → src/client}/hook/index.d.ts +6 -5
- package/dist/types/src/client/hook/index.d.ts.map +1 -0
- package/dist/types/src/client/hook/use-airdrop.d.ts.map +1 -0
- package/dist/types/src/client/hook/use-clanker.d.ts.map +1 -0
- package/dist/types/src/client/hook/use-configure-splits.d.ts.map +1 -0
- package/dist/types/{client → src/client}/hook/use-deploy.d.ts +2 -1
- package/dist/types/src/client/hook/use-deploy.d.ts.map +1 -0
- package/dist/types/{client → src/client}/hook/use-factory.d.ts +2 -2
- package/dist/types/src/client/hook/use-factory.d.ts.map +1 -0
- package/dist/types/src/client/hook/use-fee-receivers.d.ts.map +1 -0
- package/dist/types/src/client/hook/use-governance.d.ts.map +1 -0
- package/dist/types/src/client/hook/use-metrics.d.ts +16 -0
- package/dist/types/src/client/hook/use-metrics.d.ts.map +1 -0
- package/dist/types/src/client/hook/use-prepare.d.ts.map +1 -0
- package/dist/types/{client → src/client}/hook/use-project.d.ts +22 -6
- package/dist/types/src/client/hook/use-project.d.ts.map +1 -0
- package/dist/types/{client → src/client}/hook/use-proposal.d.ts +2 -2
- package/dist/types/src/client/hook/use-proposal.d.ts.map +1 -0
- package/dist/types/src/client/hook/use-register.d.ts.map +1 -0
- package/dist/types/src/client/hook/use-stake.d.ts.map +1 -0
- package/dist/types/src/client/hook/use-subscription.d.ts +33 -0
- package/dist/types/src/client/hook/use-subscription.d.ts.map +1 -0
- package/dist/types/src/client/hook/use-swap.d.ts.map +1 -0
- package/dist/types/src/client/hook/use-user.d.ts.map +1 -0
- package/dist/types/src/client/hook/use-vault.d.ts.map +1 -0
- package/dist/types/src/client/index.d.ts.map +1 -0
- package/dist/types/{client → src/client}/levr-provider.d.ts +1 -15
- package/dist/types/src/client/levr-provider.d.ts.map +1 -0
- package/dist/types/{client → src/client}/query-keys.d.ts +8 -5
- package/dist/types/src/client/query-keys.d.ts.map +1 -0
- package/dist/types/src/constants/chain.d.ts +117 -0
- package/dist/types/src/constants/chain.d.ts.map +1 -0
- package/dist/types/{constants → src/constants}/clanker.d.ts +1 -1
- package/dist/types/src/constants/clanker.d.ts.map +1 -0
- package/dist/types/src/constants/config.d.ts.map +1 -0
- package/dist/types/{constants → src/constants}/index.d.ts +1 -17
- package/dist/types/src/constants/index.d.ts.map +1 -0
- package/dist/types/{constants → src/constants}/levr.d.ts +5 -0
- package/dist/types/src/constants/levr.d.ts.map +1 -0
- package/dist/types/{constants → src/constants}/uniswap.d.ts +13 -0
- package/dist/types/src/constants/uniswap.d.ts.map +1 -0
- package/dist/types/src/deploy-v4.d.ts.map +1 -0
- package/dist/types/src/factory.d.ts +21 -0
- package/dist/types/src/factory.d.ts.map +1 -0
- package/dist/types/{fee-receivers.d.ts → src/fee-receivers.d.ts} +3 -3
- package/dist/types/src/fee-receivers.d.ts.map +1 -0
- package/dist/types/src/fee-splitter.d.ts.map +1 -0
- package/dist/types/src/governance.d.ts.map +1 -0
- package/dist/types/src/graphql/client.d.ts +12 -0
- package/dist/types/src/graphql/client.d.ts.map +1 -0
- package/dist/types/src/graphql/constants.d.ts +2 -0
- package/dist/types/src/graphql/constants.d.ts.map +1 -0
- package/dist/types/src/graphql/fields/factory.d.ts +22 -0
- package/dist/types/src/graphql/fields/factory.d.ts.map +1 -0
- package/dist/types/src/graphql/fields/index.d.ts +5 -0
- package/dist/types/src/graphql/fields/index.d.ts.map +1 -0
- package/dist/types/src/graphql/fields/metrics.d.ts +36 -0
- package/dist/types/src/graphql/fields/metrics.d.ts.map +1 -0
- package/dist/types/src/graphql/fields/project.d.ts +249 -0
- package/dist/types/src/graphql/fields/project.d.ts.map +1 -0
- package/dist/types/src/graphql/fields/proposal.d.ts +195 -0
- package/dist/types/src/graphql/fields/proposal.d.ts.map +1 -0
- package/dist/types/src/graphql/gen/index.d.ts +23 -0
- package/dist/types/src/graphql/gen/index.d.ts.map +1 -0
- package/dist/types/src/graphql/gen/runtime/batcher.d.ts +106 -0
- package/dist/types/src/graphql/gen/runtime/batcher.d.ts.map +1 -0
- package/dist/types/src/graphql/gen/runtime/createClient.d.ts +18 -0
- package/dist/types/src/graphql/gen/runtime/createClient.d.ts.map +1 -0
- package/dist/types/src/graphql/gen/runtime/error.d.ts +19 -0
- package/dist/types/src/graphql/gen/runtime/error.d.ts.map +1 -0
- package/dist/types/src/graphql/gen/runtime/fetcher.d.ts +11 -0
- package/dist/types/src/graphql/gen/runtime/fetcher.d.ts.map +1 -0
- package/dist/types/src/graphql/gen/runtime/generateGraphqlOperation.d.ts +31 -0
- package/dist/types/src/graphql/gen/runtime/generateGraphqlOperation.d.ts.map +1 -0
- package/dist/types/src/graphql/gen/runtime/index.d.ts +12 -0
- package/dist/types/src/graphql/gen/runtime/index.d.ts.map +1 -0
- package/dist/types/src/graphql/gen/runtime/linkTypeMap.d.ts +10 -0
- package/dist/types/src/graphql/gen/runtime/linkTypeMap.d.ts.map +1 -0
- package/dist/types/src/graphql/gen/runtime/typeSelection.d.ts +29 -0
- package/dist/types/src/graphql/gen/runtime/typeSelection.d.ts.map +1 -0
- package/dist/types/src/graphql/gen/runtime/types.d.ts +53 -0
- package/dist/types/src/graphql/gen/runtime/types.d.ts.map +1 -0
- package/dist/types/src/graphql/gen/schema.d.ts +6056 -0
- package/dist/types/src/graphql/gen/schema.d.ts.map +1 -0
- package/dist/types/src/graphql/gen/types.d.ts +3867 -0
- package/dist/types/src/graphql/gen/types.d.ts.map +1 -0
- package/dist/types/src/graphql/index.d.ts +19 -0
- package/dist/types/src/graphql/index.d.ts.map +1 -0
- package/dist/types/src/graphql/subscription-manager.d.ts +64 -0
- package/dist/types/src/graphql/subscription-manager.d.ts.map +1 -0
- package/dist/types/{index.d.ts → src/index.d.ts} +0 -1
- package/dist/types/src/index.d.ts.map +1 -0
- package/dist/types/src/ipfs-merkle-tree.d.ts.map +1 -0
- package/dist/types/src/pool-key.d.ts.map +1 -0
- package/dist/types/{project.d.ts → src/project.d.ts} +26 -18
- package/dist/types/src/project.d.ts.map +1 -0
- package/dist/types/src/proposal.d.ts +34 -0
- package/dist/types/src/proposal.d.ts.map +1 -0
- package/dist/types/src/quote/index.d.ts.map +1 -0
- package/dist/types/src/quote/v3.d.ts.map +1 -0
- package/dist/types/src/quote/v4.d.ts.map +1 -0
- package/dist/types/src/schema/base.schema.d.ts.map +1 -0
- package/dist/types/{schema → src/schema}/clanker.schema.d.ts +16 -4
- package/dist/types/src/schema/clanker.schema.d.ts.map +1 -0
- package/dist/types/src/schema/index.d.ts.map +1 -0
- package/dist/types/{schema → src/schema}/levr.schema.d.ts +2 -1
- package/dist/types/src/schema/levr.schema.d.ts.map +1 -0
- package/dist/types/{stake.d.ts → src/stake.d.ts} +8 -1
- package/dist/types/src/stake.d.ts.map +1 -0
- package/dist/types/src/swap-v4.d.ts.map +1 -0
- package/dist/types/{types.d.ts → src/types.d.ts} +1 -1
- package/dist/types/src/types.d.ts.map +1 -0
- package/dist/types/src/usd-price.d.ts +189 -0
- package/dist/types/src/usd-price.d.ts.map +1 -0
- package/dist/types/{user.d.ts → src/user.d.ts} +5 -5
- package/dist/types/src/user.d.ts.map +1 -0
- package/dist/types/{util.d.ts → src/util.d.ts} +7 -0
- package/dist/types/src/util.d.ts.map +1 -0
- package/dist/types/src/vault.d.ts.map +1 -0
- package/package.json +16 -4
- package/dist/esm/airdrop.js.map +0 -1
- package/dist/esm/balance.js.map +0 -1
- package/dist/esm/build-calldatas-v4.js.map +0 -1
- package/dist/esm/build-clanker-v4.js.map +0 -1
- package/dist/esm/client/hook/index.js.map +0 -1
- package/dist/esm/client/hook/use-airdrop.js.map +0 -1
- package/dist/esm/client/hook/use-clanker.js.map +0 -1
- package/dist/esm/client/hook/use-configure-splits.js.map +0 -1
- package/dist/esm/client/hook/use-deploy.js.map +0 -1
- package/dist/esm/client/hook/use-factory.js.map +0 -1
- package/dist/esm/client/hook/use-fee-receivers.js.map +0 -1
- package/dist/esm/client/hook/use-governance.js.map +0 -1
- package/dist/esm/client/hook/use-pool.js +0 -26
- package/dist/esm/client/hook/use-pool.js.map +0 -1
- package/dist/esm/client/hook/use-prepare.js.map +0 -1
- package/dist/esm/client/hook/use-project.js +0 -72
- package/dist/esm/client/hook/use-project.js.map +0 -1
- package/dist/esm/client/hook/use-proposal.js.map +0 -1
- package/dist/esm/client/hook/use-register.js.map +0 -1
- package/dist/esm/client/hook/use-stake.js.map +0 -1
- package/dist/esm/client/hook/use-swap.js.map +0 -1
- package/dist/esm/client/hook/use-user.js.map +0 -1
- package/dist/esm/client/hook/use-vault.js.map +0 -1
- package/dist/esm/client/index.js.map +0 -1
- package/dist/esm/client/levr-provider.js.map +0 -1
- package/dist/esm/client/query-keys.js.map +0 -1
- package/dist/esm/constants/clanker.js.map +0 -1
- package/dist/esm/constants/config.js.map +0 -1
- package/dist/esm/constants/index.js +0 -52
- package/dist/esm/constants/index.js.map +0 -1
- package/dist/esm/constants/levr.js.map +0 -1
- package/dist/esm/constants/uniswap.js.map +0 -1
- package/dist/esm/deploy-v4.js.map +0 -1
- package/dist/esm/factory.js +0 -171
- package/dist/esm/factory.js.map +0 -1
- package/dist/esm/fee-receivers.js.map +0 -1
- package/dist/esm/fee-splitter.js.map +0 -1
- package/dist/esm/governance.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/ipfs-merkle-tree.js.map +0 -1
- package/dist/esm/pool-key.js.map +0 -1
- package/dist/esm/pool.js +0 -70
- package/dist/esm/pool.js.map +0 -1
- package/dist/esm/project.js.map +0 -1
- package/dist/esm/proposal.js +0 -157
- package/dist/esm/proposal.js.map +0 -1
- package/dist/esm/quote/index.js.map +0 -1
- package/dist/esm/quote/v3.js.map +0 -1
- package/dist/esm/quote/v4.js.map +0 -1
- package/dist/esm/schema/base.schema.js.map +0 -1
- package/dist/esm/schema/clanker.schema.js.map +0 -1
- package/dist/esm/schema/index.js.map +0 -1
- package/dist/esm/schema/levr.schema.js.map +0 -1
- package/dist/esm/stake.js.map +0 -1
- package/dist/esm/swap-v4.js.map +0 -1
- package/dist/esm/usd-price.js +0 -166
- package/dist/esm/usd-price.js.map +0 -1
- package/dist/esm/user.js.map +0 -1
- package/dist/esm/util.js.map +0 -1
- package/dist/esm/vault.js.map +0 -1
- package/dist/types/airdrop.d.ts.map +0 -1
- package/dist/types/balance.d.ts.map +0 -1
- package/dist/types/build-calldatas-v4.d.ts.map +0 -1
- package/dist/types/build-clanker-v4.d.ts.map +0 -1
- package/dist/types/client/hook/index.d.ts.map +0 -1
- package/dist/types/client/hook/use-airdrop.d.ts.map +0 -1
- package/dist/types/client/hook/use-clanker.d.ts.map +0 -1
- package/dist/types/client/hook/use-configure-splits.d.ts.map +0 -1
- package/dist/types/client/hook/use-deploy.d.ts.map +0 -1
- package/dist/types/client/hook/use-factory.d.ts.map +0 -1
- package/dist/types/client/hook/use-fee-receivers.d.ts.map +0 -1
- package/dist/types/client/hook/use-governance.d.ts.map +0 -1
- package/dist/types/client/hook/use-pool.d.ts +0 -12
- package/dist/types/client/hook/use-pool.d.ts.map +0 -1
- package/dist/types/client/hook/use-prepare.d.ts.map +0 -1
- package/dist/types/client/hook/use-project.d.ts.map +0 -1
- package/dist/types/client/hook/use-proposal.d.ts.map +0 -1
- package/dist/types/client/hook/use-register.d.ts.map +0 -1
- package/dist/types/client/hook/use-stake.d.ts.map +0 -1
- package/dist/types/client/hook/use-swap.d.ts.map +0 -1
- package/dist/types/client/hook/use-user.d.ts.map +0 -1
- package/dist/types/client/hook/use-vault.d.ts.map +0 -1
- package/dist/types/client/index.d.ts.map +0 -1
- package/dist/types/client/levr-provider.d.ts.map +0 -1
- package/dist/types/client/query-keys.d.ts.map +0 -1
- package/dist/types/constants/clanker.d.ts.map +0 -1
- package/dist/types/constants/config.d.ts.map +0 -1
- package/dist/types/constants/index.d.ts.map +0 -1
- package/dist/types/constants/levr.d.ts.map +0 -1
- package/dist/types/constants/uniswap.d.ts.map +0 -1
- package/dist/types/deploy-v4.d.ts.map +0 -1
- package/dist/types/factory.d.ts +0 -38
- package/dist/types/factory.d.ts.map +0 -1
- package/dist/types/fee-receivers.d.ts.map +0 -1
- package/dist/types/fee-splitter.d.ts.map +0 -1
- package/dist/types/governance.d.ts.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/ipfs-merkle-tree.d.ts.map +0 -1
- package/dist/types/pool-key.d.ts.map +0 -1
- package/dist/types/pool.d.ts +0 -590
- package/dist/types/pool.d.ts.map +0 -1
- package/dist/types/project.d.ts.map +0 -1
- package/dist/types/proposal.d.ts +0 -1493
- package/dist/types/proposal.d.ts.map +0 -1
- package/dist/types/quote/index.d.ts.map +0 -1
- package/dist/types/quote/v3.d.ts.map +0 -1
- package/dist/types/quote/v4.d.ts.map +0 -1
- package/dist/types/schema/base.schema.d.ts.map +0 -1
- package/dist/types/schema/clanker.schema.d.ts.map +0 -1
- package/dist/types/schema/index.d.ts.map +0 -1
- package/dist/types/schema/levr.schema.d.ts.map +0 -1
- package/dist/types/stake.d.ts.map +0 -1
- package/dist/types/swap-v4.d.ts.map +0 -1
- package/dist/types/types.d.ts.map +0 -1
- package/dist/types/usd-price.d.ts +0 -146
- package/dist/types/usd-price.d.ts.map +0 -1
- package/dist/types/user.d.ts.map +0 -1
- package/dist/types/util.d.ts.map +0 -1
- package/dist/types/vault.d.ts.map +0 -1
- /package/dist/esm/{airdrop.js → src/airdrop.js} +0 -0
- /package/dist/esm/{client → src/client}/hook/use-airdrop.js +0 -0
- /package/dist/esm/{client → src/client}/hook/use-configure-splits.js +0 -0
- /package/dist/esm/{client → src/client}/hook/use-deploy.js +0 -0
- /package/dist/esm/{client → src/client}/hook/use-fee-receivers.js +0 -0
- /package/dist/esm/{client → src/client}/hook/use-governance.js +0 -0
- /package/dist/esm/{client → src/client}/hook/use-prepare.js +0 -0
- /package/dist/esm/{client → src/client}/hook/use-register.js +0 -0
- /package/dist/esm/{client → src/client}/hook/use-user.js +0 -0
- /package/dist/esm/{client → src/client}/hook/use-vault.js +0 -0
- /package/dist/esm/{client → src/client}/index.js +0 -0
- /package/dist/esm/{constants → src/constants}/config.js +0 -0
- /package/dist/esm/{deploy-v4.js → src/deploy-v4.js} +0 -0
- /package/dist/esm/{fee-splitter.js → src/fee-splitter.js} +0 -0
- /package/dist/esm/{governance.js → src/governance.js} +0 -0
- /package/dist/esm/{ipfs-merkle-tree.js → src/ipfs-merkle-tree.js} +0 -0
- /package/dist/esm/{pool-key.js → src/pool-key.js} +0 -0
- /package/dist/esm/{quote → src/quote}/index.js +0 -0
- /package/dist/esm/{quote → src/quote}/v3.js +0 -0
- /package/dist/esm/{quote → src/quote}/v4.js +0 -0
- /package/dist/esm/{schema → src/schema}/base.schema.js +0 -0
- /package/dist/esm/{schema → src/schema}/index.js +0 -0
- /package/dist/esm/{types.js → src/types.js} +0 -0
- /package/dist/esm/{vault.js → src/vault.js} +0 -0
- /package/dist/types/{airdrop.d.ts → src/airdrop.d.ts} +0 -0
- /package/dist/types/{balance.d.ts → src/balance.d.ts} +0 -0
- /package/dist/types/{build-clanker-v4.d.ts → src/build-clanker-v4.d.ts} +0 -0
- /package/dist/types/{client → src/client}/hook/use-airdrop.d.ts +0 -0
- /package/dist/types/{client → src/client}/hook/use-clanker.d.ts +0 -0
- /package/dist/types/{client → src/client}/hook/use-configure-splits.d.ts +0 -0
- /package/dist/types/{client → src/client}/hook/use-fee-receivers.d.ts +0 -0
- /package/dist/types/{client → src/client}/hook/use-governance.d.ts +0 -0
- /package/dist/types/{client → src/client}/hook/use-prepare.d.ts +0 -0
- /package/dist/types/{client → src/client}/hook/use-register.d.ts +0 -0
- /package/dist/types/{client → src/client}/hook/use-stake.d.ts +0 -0
- /package/dist/types/{client → src/client}/hook/use-swap.d.ts +0 -0
- /package/dist/types/{client → src/client}/hook/use-user.d.ts +0 -0
- /package/dist/types/{client → src/client}/hook/use-vault.d.ts +0 -0
- /package/dist/types/{client → src/client}/index.d.ts +0 -0
- /package/dist/types/{constants → src/constants}/config.d.ts +0 -0
- /package/dist/types/{deploy-v4.d.ts → src/deploy-v4.d.ts} +0 -0
- /package/dist/types/{fee-splitter.d.ts → src/fee-splitter.d.ts} +0 -0
- /package/dist/types/{governance.d.ts → src/governance.d.ts} +0 -0
- /package/dist/types/{ipfs-merkle-tree.d.ts → src/ipfs-merkle-tree.d.ts} +0 -0
- /package/dist/types/{pool-key.d.ts → src/pool-key.d.ts} +0 -0
- /package/dist/types/{quote → src/quote}/index.d.ts +0 -0
- /package/dist/types/{quote → src/quote}/v3.d.ts +0 -0
- /package/dist/types/{quote → src/quote}/v4.d.ts +0 -0
- /package/dist/types/{schema → src/schema}/base.schema.d.ts +0 -0
- /package/dist/types/{schema → src/schema}/index.d.ts +0 -0
- /package/dist/types/{swap-v4.d.ts → src/swap-v4.d.ts} +0 -0
- /package/dist/types/{vault.d.ts → src/vault.d.ts} +0 -0
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { erc20Abi, zeroAddress } from "viem";
|
|
2
|
-
import { IClankerFeeLocker, IClankerLpLockerFeeConversion,
|
|
2
|
+
import { IClankerFeeLocker, IClankerLpLockerFeeConversion, LevrFactory_v1, LevrStaking_v1, } from "./abis/index.js";
|
|
3
3
|
import { formatBalanceWithUsd } from "./balance.js";
|
|
4
4
|
import { GET_FACTORY_ADDRESS, GET_FEE_LOCKER_ADDRESS, GET_LP_LOCKER_ADDRESS, WETH, } from "./constants/index.js";
|
|
5
5
|
import { getFeeReceiverContracts, getFeeSplitterDynamicContracts, getFeeSplitterStaticContracts, parseFeeReceivers, parseFeeSplitterDynamic, parseFeeSplitterStatic, } from "./fee-receivers.js";
|
|
6
6
|
import { getFeeSplitter } from "./fee-splitter.js";
|
|
7
|
-
import {
|
|
7
|
+
import { query } from "./graphql/index.js";
|
|
8
|
+
import { getLevrProjectByIdFields } from "./graphql/fields/project.js";
|
|
9
|
+
import { getPairedTokenUsdPrice, getUsdPrice } from "./usd-price.js";
|
|
10
|
+
import { isWETH } from "./util.js";
|
|
8
11
|
async function fetchFeePreferences({ publicClient, chainId, clankerToken, slotCount, }) {
|
|
9
12
|
if (!slotCount)
|
|
10
13
|
return undefined;
|
|
@@ -35,52 +38,71 @@ async function fetchFeePreferences({ publicClient, chainId, clankerToken, slotCo
|
|
|
35
38
|
}
|
|
36
39
|
}
|
|
37
40
|
// ---
|
|
38
|
-
//
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
{
|
|
57
|
-
address:
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
41
|
+
// Paired Token Resolution
|
|
42
|
+
/**
|
|
43
|
+
* Resolves paired token info from pool key and indexed data.
|
|
44
|
+
* Handles WETH/WBNB detection and fallback symbol resolution.
|
|
45
|
+
*/
|
|
46
|
+
function resolvePairedToken(poolKey, clankerToken, clankerSymbol, v4Pool, chainId) {
|
|
47
|
+
// Get paired token address from pool key (case-insensitive)
|
|
48
|
+
const isCurrency0Clanker = poolKey.currency0.toLowerCase() === clankerToken.toLowerCase();
|
|
49
|
+
const pairedTokenAddress = isCurrency0Clanker ? poolKey.currency1 : poolKey.currency0;
|
|
50
|
+
// Check if paired token is native (WETH/WBNB)
|
|
51
|
+
const wethInfo = WETH(chainId);
|
|
52
|
+
const isNativeByAddress = isWETH(pairedTokenAddress, chainId);
|
|
53
|
+
// Find paired token from indexed v4Pool data
|
|
54
|
+
const indexedPairedToken = findIndexedPairedToken(v4Pool, pairedTokenAddress);
|
|
55
|
+
// Also check if native by symbol (fallback when address doesn't match)
|
|
56
|
+
const isNativeBySymbol = wethInfo && indexedPairedToken?.symbol === wethInfo.symbol;
|
|
57
|
+
// Return native token info if WETH/WBNB
|
|
58
|
+
if ((isNativeByAddress || isNativeBySymbol) && wethInfo) {
|
|
59
|
+
return {
|
|
60
|
+
address: wethInfo.address,
|
|
61
|
+
symbol: wethInfo.symbol,
|
|
62
|
+
decimals: wethInfo.decimals,
|
|
63
|
+
isNative: true,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
// Return non-native paired token info
|
|
67
|
+
const symbol = resolveSymbol(indexedPairedToken?.symbol);
|
|
68
|
+
return {
|
|
69
|
+
address: pairedTokenAddress,
|
|
70
|
+
symbol,
|
|
71
|
+
decimals: indexedPairedToken?.decimals ?? 18,
|
|
72
|
+
isNative: false,
|
|
73
|
+
};
|
|
67
74
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
75
|
+
/**
|
|
76
|
+
* Finds the paired token from indexed v4Pool data by address matching.
|
|
77
|
+
*/
|
|
78
|
+
function findIndexedPairedToken(v4Pool, pairedTokenAddress) {
|
|
79
|
+
if (!v4Pool)
|
|
80
|
+
return null;
|
|
81
|
+
const { token0, token1 } = v4Pool;
|
|
82
|
+
const targetAddress = pairedTokenAddress.toLowerCase();
|
|
83
|
+
// Match by address
|
|
84
|
+
if (token0?.address?.toLowerCase() === targetAddress)
|
|
85
|
+
return token0;
|
|
86
|
+
if (token1?.address?.toLowerCase() === targetAddress)
|
|
87
|
+
return token1;
|
|
88
|
+
return null;
|
|
82
89
|
}
|
|
83
|
-
|
|
90
|
+
/**
|
|
91
|
+
* Resolves symbol for paired token.
|
|
92
|
+
* Returns the symbol if available, otherwise falls back to 'PAIRED'.
|
|
93
|
+
*
|
|
94
|
+
* Note: We no longer check against clankerSymbol because tokens can legitimately
|
|
95
|
+
* have the same symbol (e.g., a clanker named "U" paired with U stablecoin).
|
|
96
|
+
* Address matching in findIndexedPairedToken ensures we get the correct token.
|
|
97
|
+
*/
|
|
98
|
+
function resolveSymbol(symbol) {
|
|
99
|
+
if (symbol)
|
|
100
|
+
return symbol;
|
|
101
|
+
return "PAIRED";
|
|
102
|
+
}
|
|
103
|
+
// ---
|
|
104
|
+
// Contract Getters
|
|
105
|
+
function getTreasuryContracts(clankerToken, treasury, staking, pairedTokenAddress) {
|
|
84
106
|
const contracts = [
|
|
85
107
|
{
|
|
86
108
|
address: clankerToken,
|
|
@@ -101,9 +123,9 @@ function getTreasuryContracts(clankerToken, treasury, staking, wethAddress) {
|
|
|
101
123
|
args: [clankerToken],
|
|
102
124
|
},
|
|
103
125
|
];
|
|
104
|
-
if (
|
|
126
|
+
if (pairedTokenAddress) {
|
|
105
127
|
contracts.push({
|
|
106
|
-
address:
|
|
128
|
+
address: pairedTokenAddress,
|
|
107
129
|
abi: erc20Abi,
|
|
108
130
|
functionName: "balanceOf",
|
|
109
131
|
args: [staking],
|
|
@@ -111,28 +133,7 @@ function getTreasuryContracts(clankerToken, treasury, staking, wethAddress) {
|
|
|
111
133
|
}
|
|
112
134
|
return contracts;
|
|
113
135
|
}
|
|
114
|
-
function
|
|
115
|
-
return [
|
|
116
|
-
{
|
|
117
|
-
address: governor,
|
|
118
|
-
abi: LevrGovernor_v1,
|
|
119
|
-
functionName: "currentCycleId",
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
address: governor,
|
|
123
|
-
abi: LevrGovernor_v1,
|
|
124
|
-
functionName: "activeProposalCount",
|
|
125
|
-
args: [0], // boost type
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
address: governor,
|
|
129
|
-
abi: LevrGovernor_v1,
|
|
130
|
-
functionName: "activeProposalCount",
|
|
131
|
-
args: [1], // transfer type
|
|
132
|
-
},
|
|
133
|
-
];
|
|
134
|
-
}
|
|
135
|
-
function getStakingContracts(staking, clankerToken, wethAddress) {
|
|
136
|
+
function getStakingContracts(staking, clankerToken, pairedTokenAddress) {
|
|
136
137
|
const baseContracts = [
|
|
137
138
|
{
|
|
138
139
|
address: staking,
|
|
@@ -163,31 +164,31 @@ function getStakingContracts(staking, clankerToken, wethAddress) {
|
|
|
163
164
|
args: [clankerToken],
|
|
164
165
|
},
|
|
165
166
|
];
|
|
166
|
-
const
|
|
167
|
+
const pairedContracts = pairedTokenAddress
|
|
167
168
|
? [
|
|
168
169
|
{
|
|
169
170
|
address: staking,
|
|
170
171
|
abi: LevrStaking_v1,
|
|
171
172
|
functionName: "outstandingRewards",
|
|
172
|
-
args: [
|
|
173
|
+
args: [pairedTokenAddress],
|
|
173
174
|
},
|
|
174
175
|
{
|
|
175
176
|
address: staking,
|
|
176
177
|
abi: LevrStaking_v1,
|
|
177
178
|
functionName: "rewardRatePerSecond",
|
|
178
|
-
args: [
|
|
179
|
+
args: [pairedTokenAddress],
|
|
179
180
|
},
|
|
180
181
|
{
|
|
181
182
|
address: staking,
|
|
182
183
|
abi: LevrStaking_v1,
|
|
183
184
|
functionName: "getTokenStreamInfo",
|
|
184
|
-
args: [
|
|
185
|
+
args: [pairedTokenAddress],
|
|
185
186
|
},
|
|
186
187
|
]
|
|
187
188
|
: [];
|
|
188
|
-
return [...baseContracts, ...
|
|
189
|
+
return [...baseContracts, ...pairedContracts];
|
|
189
190
|
}
|
|
190
|
-
function getPendingFeesContracts(feeLockerAddress, feeRecipient, clankerToken,
|
|
191
|
+
function getPendingFeesContracts(feeLockerAddress, feeRecipient, clankerToken, pairedTokenAddress) {
|
|
191
192
|
const baseContracts = [
|
|
192
193
|
{
|
|
193
194
|
address: feeLockerAddress,
|
|
@@ -196,64 +197,26 @@ function getPendingFeesContracts(feeLockerAddress, feeRecipient, clankerToken, w
|
|
|
196
197
|
args: [feeRecipient, clankerToken],
|
|
197
198
|
},
|
|
198
199
|
];
|
|
199
|
-
const
|
|
200
|
+
const pairedContracts = pairedTokenAddress
|
|
200
201
|
? [
|
|
201
202
|
{
|
|
202
203
|
address: feeLockerAddress,
|
|
203
204
|
abi: IClankerFeeLocker,
|
|
204
205
|
functionName: "availableFees",
|
|
205
|
-
args: [feeRecipient,
|
|
206
|
+
args: [feeRecipient, pairedTokenAddress],
|
|
206
207
|
},
|
|
207
208
|
]
|
|
208
209
|
: [];
|
|
209
|
-
return [...baseContracts, ...
|
|
210
|
+
return [...baseContracts, ...pairedContracts];
|
|
210
211
|
}
|
|
211
212
|
// ---
|
|
212
213
|
// Parsers
|
|
213
|
-
function
|
|
214
|
-
const [
|
|
215
|
-
// Extract allData fields: [originalAdmin, admin, image, metadata, context]
|
|
216
|
-
const [originalAdmin, admin, image, metadata, context] = allData.result;
|
|
217
|
-
// Parse metadata JSON
|
|
218
|
-
let parsedMetadata = null;
|
|
219
|
-
if (metadata && typeof metadata === "string") {
|
|
220
|
-
try {
|
|
221
|
-
parsedMetadata = JSON.parse(metadata);
|
|
222
|
-
}
|
|
223
|
-
catch {
|
|
224
|
-
// If parsing fails, leave as null
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
return {
|
|
228
|
-
address: clankerToken,
|
|
229
|
-
decimals: decimals.result,
|
|
230
|
-
name: name.result,
|
|
231
|
-
symbol: symbol.result,
|
|
232
|
-
totalSupply: totalSupply.result,
|
|
233
|
-
metadata: parsedMetadata,
|
|
234
|
-
imageUrl: image || undefined,
|
|
235
|
-
originalAdmin,
|
|
236
|
-
admin,
|
|
237
|
-
context,
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
function parseFactoryData(results) {
|
|
241
|
-
const [projectContracts, forwarder] = results;
|
|
242
|
-
const { treasury, governor, staking, stakedToken } = projectContracts.result;
|
|
243
|
-
return {
|
|
244
|
-
treasury,
|
|
245
|
-
governor,
|
|
246
|
-
staking,
|
|
247
|
-
stakedToken,
|
|
248
|
-
forwarder: forwarder.result,
|
|
249
|
-
};
|
|
250
|
-
}
|
|
251
|
-
function parseTreasuryStats(results, tokenDecimals, totalSupply, tokenUsdPrice, wethUsdPrice) {
|
|
252
|
-
const [treasuryBalance, stakingBalance, escrowBalance, stakingWethBalance] = results;
|
|
214
|
+
function parseTreasuryStats(results, tokenDecimals, totalSupply, tokenUsdPrice, pairedTokenUsdPrice, pairedTokenDecimals = 18) {
|
|
215
|
+
const [treasuryBalance, stakingBalance, escrowBalance, stakingPairedBalance] = results;
|
|
253
216
|
const treasuryBalanceRaw = treasuryBalance.result;
|
|
254
217
|
const stakingBalanceRaw = stakingBalance.result;
|
|
255
218
|
const escrowBalanceRaw = escrowBalance.result;
|
|
256
|
-
const
|
|
219
|
+
const stakingPairedBalanceRaw = stakingPairedBalance ? stakingPairedBalance.result : null;
|
|
257
220
|
// Total allocated = treasury + staking balances (protocol-controlled tokens)
|
|
258
221
|
const totalAllocatedRaw = treasuryBalanceRaw + stakingBalanceRaw;
|
|
259
222
|
// Utilization = (total allocated / total supply) * 100
|
|
@@ -265,22 +228,12 @@ function parseTreasuryStats(results, tokenDecimals, totalSupply, tokenUsdPrice,
|
|
|
265
228
|
utilization,
|
|
266
229
|
stakingContractBalance: formatBalanceWithUsd(stakingBalanceRaw, tokenDecimals, tokenUsdPrice),
|
|
267
230
|
escrowBalance: formatBalanceWithUsd(escrowBalanceRaw, tokenDecimals, tokenUsdPrice),
|
|
268
|
-
|
|
269
|
-
? formatBalanceWithUsd(
|
|
231
|
+
stakingContractPairedBalance: stakingPairedBalanceRaw
|
|
232
|
+
? formatBalanceWithUsd(stakingPairedBalanceRaw, pairedTokenDecimals, pairedTokenUsdPrice ?? null)
|
|
270
233
|
: undefined,
|
|
271
234
|
};
|
|
272
235
|
}
|
|
273
|
-
function
|
|
274
|
-
const [currentCycleId, boostCount, transferCount] = results;
|
|
275
|
-
return {
|
|
276
|
-
currentCycleId: currentCycleId.result === 0n ? 1n : currentCycleId.result,
|
|
277
|
-
activeProposalCount: {
|
|
278
|
-
boost: boostCount.result,
|
|
279
|
-
transfer: transferCount.result,
|
|
280
|
-
},
|
|
281
|
-
};
|
|
282
|
-
}
|
|
283
|
-
function parseStakingStats(results, pendingFeesResults, tokenDecimals, tokenUsdPrice, wethUsdPrice, blockTimestamp, pricing, feeSplitterPending) {
|
|
236
|
+
function parseStakingStats(results, pendingFeesResults, tokenDecimals, tokenUsdPrice, pairedTokenUsdPrice, pairedTokenDecimals = 18, blockTimestamp, pricing, feeSplitterPending) {
|
|
284
237
|
const totalStakedRaw = results[0].result;
|
|
285
238
|
const aprBpsRaw = results[1].result;
|
|
286
239
|
const outstandingRewardsTokenAvailable = results[2].result; // Now returns only available
|
|
@@ -289,73 +242,74 @@ function parseStakingStats(results, pendingFeesResults, tokenDecimals, tokenUsdP
|
|
|
289
242
|
const streamInfoRaw = results[4].result;
|
|
290
243
|
const tokenStreamStartRaw = streamInfoRaw[0];
|
|
291
244
|
const tokenStreamEndRaw = streamInfoRaw[1];
|
|
292
|
-
// Check if
|
|
293
|
-
const
|
|
294
|
-
const
|
|
295
|
-
const
|
|
245
|
+
// Check if pairedToken data is present
|
|
246
|
+
const hasPairedTokenData = results.length > 5;
|
|
247
|
+
const outstandingRewardsPairedAvailable = hasPairedTokenData && results[5] ? results[5].result : null;
|
|
248
|
+
const pairedTokenRewardRateRaw = hasPairedTokenData && results[6] ? results[6].result : null;
|
|
296
249
|
// Check if token stream is currently active
|
|
297
250
|
const isTokenStreamActive = tokenStreamStartRaw <= blockTimestamp && blockTimestamp <= tokenStreamEndRaw;
|
|
298
|
-
// Check if
|
|
299
|
-
let
|
|
300
|
-
let
|
|
301
|
-
let
|
|
302
|
-
if (
|
|
303
|
-
const
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
251
|
+
// Check if pairedToken stream is active (if available) and get longest active stream window
|
|
252
|
+
let isPairedTokenStreamActive = false;
|
|
253
|
+
let pairedTokenStreamStartRaw = 0n;
|
|
254
|
+
let pairedTokenStreamEndRaw = 0n;
|
|
255
|
+
if (hasPairedTokenData && results[7]) {
|
|
256
|
+
const pairedTokenStreamInfoRaw = results[7].result;
|
|
257
|
+
pairedTokenStreamStartRaw = pairedTokenStreamInfoRaw[0];
|
|
258
|
+
pairedTokenStreamEndRaw = pairedTokenStreamInfoRaw[1];
|
|
259
|
+
isPairedTokenStreamActive =
|
|
260
|
+
pairedTokenStreamStartRaw <= blockTimestamp && blockTimestamp <= pairedTokenStreamEndRaw;
|
|
307
261
|
}
|
|
308
|
-
// Stream is active if either token or
|
|
309
|
-
const isStreamActive = isTokenStreamActive ||
|
|
262
|
+
// Stream is active if either token or pairedToken reward stream is active
|
|
263
|
+
const isStreamActive = isTokenStreamActive || isPairedTokenStreamActive;
|
|
310
264
|
// Determine which stream window to display
|
|
311
265
|
let displayStreamStartRaw = tokenStreamStartRaw;
|
|
312
266
|
let displayStreamEndRaw = tokenStreamEndRaw;
|
|
313
267
|
const tokenStreamDuration = tokenStreamEndRaw > tokenStreamStartRaw ? tokenStreamEndRaw - tokenStreamStartRaw : 0n;
|
|
314
|
-
const
|
|
315
|
-
?
|
|
268
|
+
const pairedTokenStreamDuration = pairedTokenStreamStartRaw > 0n && pairedTokenStreamEndRaw > pairedTokenStreamStartRaw
|
|
269
|
+
? pairedTokenStreamEndRaw - pairedTokenStreamStartRaw
|
|
316
270
|
: 0n;
|
|
317
|
-
if (isTokenStreamActive &&
|
|
271
|
+
if (isTokenStreamActive && isPairedTokenStreamActive) {
|
|
318
272
|
// When both streams are active, display the one that ends last
|
|
319
273
|
displayStreamStartRaw =
|
|
320
|
-
|
|
274
|
+
pairedTokenStreamEndRaw > tokenStreamEndRaw ? pairedTokenStreamStartRaw : tokenStreamStartRaw;
|
|
321
275
|
displayStreamEndRaw =
|
|
322
|
-
|
|
276
|
+
pairedTokenStreamEndRaw > tokenStreamEndRaw ? pairedTokenStreamEndRaw : tokenStreamEndRaw;
|
|
323
277
|
}
|
|
324
278
|
else if (isTokenStreamActive) {
|
|
325
279
|
displayStreamStartRaw = tokenStreamStartRaw;
|
|
326
280
|
displayStreamEndRaw = tokenStreamEndRaw;
|
|
327
281
|
}
|
|
328
|
-
else if (
|
|
329
|
-
displayStreamStartRaw =
|
|
330
|
-
displayStreamEndRaw =
|
|
282
|
+
else if (isPairedTokenStreamActive) {
|
|
283
|
+
displayStreamStartRaw = pairedTokenStreamStartRaw;
|
|
284
|
+
displayStreamEndRaw = pairedTokenStreamEndRaw;
|
|
331
285
|
}
|
|
332
|
-
else if (
|
|
286
|
+
else if (pairedTokenStreamDuration > tokenStreamDuration) {
|
|
333
287
|
// No active streams: keep prior behaviour of showing the longer window
|
|
334
|
-
displayStreamStartRaw =
|
|
335
|
-
displayStreamEndRaw =
|
|
288
|
+
displayStreamStartRaw = pairedTokenStreamStartRaw;
|
|
289
|
+
displayStreamEndRaw = pairedTokenStreamEndRaw;
|
|
336
290
|
}
|
|
337
291
|
// Get pending fees from ClankerFeeLocker (staking recipient)
|
|
338
292
|
const stakingPendingToken = pendingFeesResults?.[0]?.result ?? 0n;
|
|
339
|
-
const
|
|
340
|
-
// Calculate
|
|
341
|
-
let
|
|
342
|
-
if (
|
|
343
|
-
|
|
293
|
+
const stakingPendingPaired = pendingFeesResults?.[1]?.result ?? 0n;
|
|
294
|
+
// Calculate pairedToken APR if available
|
|
295
|
+
let pairedTokenApr = null;
|
|
296
|
+
if (pairedTokenRewardRateRaw !== null &&
|
|
297
|
+
pairedTokenRewardRateRaw !== undefined &&
|
|
344
298
|
pricing &&
|
|
345
299
|
totalStakedRaw > 0n) {
|
|
346
|
-
const
|
|
300
|
+
const pairedTokenUsd = parseFloat(pricing.pairedTokenUsd);
|
|
347
301
|
const tokenUsd = parseFloat(pricing.tokenUsd);
|
|
348
302
|
if (tokenUsd > 0) {
|
|
349
|
-
const
|
|
303
|
+
const pairedTokenPriceInTokens = pairedTokenUsd / tokenUsd;
|
|
350
304
|
const secondsPerYear = BigInt(365 * 24 * 60 * 60);
|
|
351
|
-
const
|
|
305
|
+
const annualPairedRewards = pairedTokenRewardRateRaw * secondsPerYear;
|
|
352
306
|
const priceScaleFactor = BigInt(1000000000000000000);
|
|
353
|
-
const
|
|
354
|
-
const annualRewardsInUnderlying = (
|
|
355
|
-
const
|
|
356
|
-
|
|
357
|
-
raw:
|
|
358
|
-
percentage: Number(
|
|
307
|
+
const pairedTokenPriceScaled = BigInt(Math.floor(pairedTokenPriceInTokens * Number(priceScaleFactor)));
|
|
308
|
+
const annualRewardsInUnderlying = (annualPairedRewards * pairedTokenPriceScaled) / priceScaleFactor;
|
|
309
|
+
const aprBpsPairedToken = totalStakedRaw > 0n ? (annualRewardsInUnderlying * 10000n) / totalStakedRaw : 0n;
|
|
310
|
+
pairedTokenApr = {
|
|
311
|
+
raw: aprBpsPairedToken,
|
|
312
|
+
percentage: Number(aprBpsPairedToken) / 100,
|
|
359
313
|
};
|
|
360
314
|
}
|
|
361
315
|
}
|
|
@@ -368,7 +322,7 @@ function parseStakingStats(results, pendingFeesResults, tokenDecimals, tokenUsdP
|
|
|
368
322
|
// When fee splitter is NOT active: stakingPendingToken = staking's pending from ClankerFeeLocker
|
|
369
323
|
// Note: feeSplitterPending is now local balance only (not from ClankerFeeLocker), so we don't add it
|
|
370
324
|
const tokenPendingTotal = stakingPendingToken; // Already queried for correct recipient
|
|
371
|
-
const
|
|
325
|
+
const pairedTokenPendingTotal = stakingPendingPaired; // Already queried for correct recipient
|
|
372
326
|
return {
|
|
373
327
|
totalStaked: formatBalanceWithUsd(totalStakedRaw, tokenDecimals, tokenUsdPrice),
|
|
374
328
|
apr: {
|
|
@@ -376,24 +330,24 @@ function parseStakingStats(results, pendingFeesResults, tokenDecimals, tokenUsdP
|
|
|
376
330
|
raw: aprBpsRaw,
|
|
377
331
|
percentage: Number(aprBpsRaw) / 100,
|
|
378
332
|
},
|
|
379
|
-
|
|
333
|
+
pairedToken: pairedTokenApr,
|
|
380
334
|
},
|
|
381
335
|
outstandingRewards: {
|
|
382
336
|
staking: {
|
|
383
337
|
available: formatBalanceWithUsd(outstandingRewardsTokenAvailable, tokenDecimals, tokenUsdPrice),
|
|
384
338
|
pending: formatBalanceWithUsd(tokenPendingTotal, tokenDecimals, tokenUsdPrice),
|
|
385
339
|
},
|
|
386
|
-
|
|
340
|
+
pairedToken: outstandingRewardsPairedAvailable !== null
|
|
387
341
|
? {
|
|
388
|
-
available: formatBalanceWithUsd(
|
|
389
|
-
pending: formatBalanceWithUsd(
|
|
342
|
+
available: formatBalanceWithUsd(outstandingRewardsPairedAvailable, pairedTokenDecimals, pairedTokenUsdPrice),
|
|
343
|
+
pending: formatBalanceWithUsd(pairedTokenPendingTotal, pairedTokenDecimals, pairedTokenUsdPrice),
|
|
390
344
|
}
|
|
391
345
|
: null,
|
|
392
346
|
},
|
|
393
347
|
rewardRates: {
|
|
394
348
|
token: formatBalanceWithUsd(tokenRewardRateRaw, tokenDecimals, tokenUsdPrice),
|
|
395
|
-
|
|
396
|
-
? formatBalanceWithUsd(
|
|
349
|
+
pairedToken: pairedTokenRewardRateRaw !== null && pairedTokenRewardRateRaw !== undefined
|
|
350
|
+
? formatBalanceWithUsd(pairedTokenRewardRateRaw, pairedTokenDecimals, pairedTokenUsdPrice)
|
|
397
351
|
: null,
|
|
398
352
|
},
|
|
399
353
|
streamParams: {
|
|
@@ -404,80 +358,32 @@ function parseStakingStats(results, pendingFeesResults, tokenDecimals, tokenUsdP
|
|
|
404
358
|
},
|
|
405
359
|
};
|
|
406
360
|
}
|
|
361
|
+
// ============================================================================
|
|
362
|
+
// Indexed Project Data
|
|
363
|
+
// ============================================================================
|
|
407
364
|
/**
|
|
408
|
-
*
|
|
365
|
+
* Fetch project data from the indexer
|
|
366
|
+
* Returns null if the project is not found in the indexer
|
|
409
367
|
*/
|
|
410
|
-
export async function
|
|
411
|
-
|
|
412
|
-
|
|
368
|
+
export async function getIndexedProject(chainId, clankerToken) {
|
|
369
|
+
try {
|
|
370
|
+
const fields = getLevrProjectByIdFields(chainId, clankerToken);
|
|
371
|
+
const result = await query(fields);
|
|
372
|
+
// Cast to our explicit type since the generated types can be complex
|
|
373
|
+
return result.LevrProject_by_pk ?? null;
|
|
413
374
|
}
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
throw new Error("Chain ID not found on public client");
|
|
417
|
-
const factoryAddress = GET_FACTORY_ADDRESS(chainId);
|
|
418
|
-
if (!factoryAddress)
|
|
419
|
-
throw new Error("Factory address not found");
|
|
420
|
-
// Get projects from factory using paginated view function
|
|
421
|
-
const [projectsData, total] = await publicClient.readContract({
|
|
422
|
-
address: factoryAddress,
|
|
423
|
-
abi: LevrFactory_v1,
|
|
424
|
-
functionName: "getProjects",
|
|
425
|
-
args: [BigInt(offset), BigInt(limit)],
|
|
426
|
-
});
|
|
427
|
-
if (projectsData.length === 0) {
|
|
428
|
-
return {
|
|
429
|
-
projects: [],
|
|
430
|
-
total: Number(total),
|
|
431
|
-
};
|
|
375
|
+
catch {
|
|
376
|
+
return null;
|
|
432
377
|
}
|
|
433
|
-
// Track contracts and their mapping per project for correct result parsing
|
|
434
|
-
const contractsPerProject = [];
|
|
435
|
-
// Build contract calls for all projects (token data + treasury balances)
|
|
436
|
-
const contracts = projectsData.flatMap((projectInfo) => {
|
|
437
|
-
const tokenContracts = getTokenContracts(projectInfo.clankerToken);
|
|
438
|
-
const treasuryContracts = getTreasuryContracts(projectInfo.clankerToken, projectInfo.project.treasury, projectInfo.project.staking, undefined);
|
|
439
|
-
contractsPerProject.push({
|
|
440
|
-
tokenCount: tokenContracts.length,
|
|
441
|
-
treasuryCount: treasuryContracts.length,
|
|
442
|
-
});
|
|
443
|
-
return [...tokenContracts, ...treasuryContracts];
|
|
444
|
-
});
|
|
445
|
-
const results = await publicClient.multicall({ contracts });
|
|
446
|
-
// Parse results into Project objects
|
|
447
|
-
const projects = [];
|
|
448
|
-
let currentOffset = 0;
|
|
449
|
-
for (let i = 0; i < projectsData.length; i++) {
|
|
450
|
-
const projectInfo = projectsData[i];
|
|
451
|
-
const tokenCount = contractsPerProject[i].tokenCount;
|
|
452
|
-
const treasuryCount = contractsPerProject[i].treasuryCount;
|
|
453
|
-
// Extract results for this project
|
|
454
|
-
const tokenResults = results.slice(currentOffset, currentOffset + tokenCount);
|
|
455
|
-
currentOffset += tokenCount;
|
|
456
|
-
const treasuryResults = results.slice(currentOffset, currentOffset + treasuryCount);
|
|
457
|
-
currentOffset += treasuryCount;
|
|
458
|
-
// Parse using our type-safe parsers
|
|
459
|
-
const tokenData = parseTokenData(tokenResults, projectInfo.clankerToken);
|
|
460
|
-
const treasuryStats = parseTreasuryStats(treasuryResults, tokenData.decimals, tokenData.totalSupply, null // No pricing for list view
|
|
461
|
-
);
|
|
462
|
-
projects.push({
|
|
463
|
-
chainId,
|
|
464
|
-
treasury: projectInfo.project.treasury,
|
|
465
|
-
governor: projectInfo.project.governor,
|
|
466
|
-
staking: projectInfo.project.staking,
|
|
467
|
-
stakedToken: projectInfo.project.stakedToken,
|
|
468
|
-
factory: factoryAddress,
|
|
469
|
-
token: tokenData,
|
|
470
|
-
treasuryStats,
|
|
471
|
-
});
|
|
472
|
-
}
|
|
473
|
-
return {
|
|
474
|
-
projects,
|
|
475
|
-
total: Number(total),
|
|
476
|
-
};
|
|
477
378
|
}
|
|
379
|
+
// ============================================================================
|
|
380
|
+
// Static Project Functions
|
|
381
|
+
// ============================================================================
|
|
478
382
|
/**
|
|
479
383
|
* Get static project data that doesn't change frequently
|
|
480
384
|
* This includes contract addresses, token metadata, pool info, and fee receivers
|
|
385
|
+
*
|
|
386
|
+
* Uses indexed data for token and project data, only fetches via RPC what's not indexed
|
|
481
387
|
*/
|
|
482
388
|
export async function getStaticProject({ publicClient, clankerToken, userAddress, }) {
|
|
483
389
|
if (Object.values({ publicClient, clankerToken }).some((value) => !value)) {
|
|
@@ -489,39 +395,86 @@ export async function getStaticProject({ publicClient, clankerToken, userAddress
|
|
|
489
395
|
const factoryAddress = GET_FACTORY_ADDRESS(chainId);
|
|
490
396
|
if (!factoryAddress)
|
|
491
397
|
throw new Error("Factory address not found");
|
|
492
|
-
//
|
|
493
|
-
const feeSplitterAddress = await
|
|
494
|
-
|
|
495
|
-
clankerToken,
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
398
|
+
// Fetch indexed data and fee splitter in parallel
|
|
399
|
+
const [indexedProject, feeSplitterAddress] = await Promise.all([
|
|
400
|
+
getIndexedProject(chainId, clankerToken),
|
|
401
|
+
getFeeSplitter({ publicClient, clankerToken, chainId }),
|
|
402
|
+
]);
|
|
403
|
+
if (!indexedProject)
|
|
404
|
+
return null;
|
|
405
|
+
// Parse token data from indexed project
|
|
406
|
+
const indexedToken = indexedProject.clankerToken;
|
|
407
|
+
if (!indexedToken)
|
|
408
|
+
return null;
|
|
409
|
+
let parsedMetadata = null;
|
|
410
|
+
if (indexedToken.metadata && typeof indexedToken.metadata === "string") {
|
|
411
|
+
try {
|
|
412
|
+
parsedMetadata = JSON.parse(indexedToken.metadata);
|
|
413
|
+
}
|
|
414
|
+
catch {
|
|
415
|
+
// If parsing fails, leave as null
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
const tokenData = {
|
|
419
|
+
address: clankerToken,
|
|
420
|
+
decimals: indexedToken.decimals ?? 18,
|
|
421
|
+
name: indexedToken.name ?? "",
|
|
422
|
+
symbol: indexedToken.symbol ?? "",
|
|
423
|
+
totalSupply: indexedToken.totalSupply ? BigInt(indexedToken.totalSupply) : 0n,
|
|
424
|
+
metadata: parsedMetadata,
|
|
425
|
+
imageUrl: indexedToken.imageUrl ?? undefined,
|
|
426
|
+
originalAdmin: (indexedToken.originalAdmin ?? zeroAddress),
|
|
427
|
+
admin: (indexedToken.admin ?? zeroAddress),
|
|
428
|
+
context: indexedToken.context ?? "",
|
|
429
|
+
};
|
|
430
|
+
// Parse factory data from indexed project
|
|
431
|
+
const { treasury_id, governor_id, staking_id, stakedToken_id } = indexedProject;
|
|
432
|
+
const indexedFactory = treasury_id && governor_id && staking_id && stakedToken_id
|
|
433
|
+
? {
|
|
434
|
+
treasury: treasury_id,
|
|
435
|
+
governor: governor_id,
|
|
436
|
+
staking: staking_id,
|
|
437
|
+
stakedToken: stakedToken_id,
|
|
438
|
+
forwarder: zeroAddress,
|
|
439
|
+
}
|
|
440
|
+
: null;
|
|
441
|
+
// Only fetch what's not in the indexer: forwarder, fee receivers, fee splitter
|
|
499
442
|
const contracts = [
|
|
500
|
-
|
|
501
|
-
|
|
443
|
+
// Forwarder is not indexed
|
|
444
|
+
{
|
|
445
|
+
address: factoryAddress,
|
|
446
|
+
abi: LevrFactory_v1,
|
|
447
|
+
functionName: "trustedForwarder",
|
|
448
|
+
},
|
|
449
|
+
// Fee receivers from LP locker (not indexed)
|
|
502
450
|
...getFeeReceiverContracts(clankerToken, chainId),
|
|
451
|
+
// Fee splitter static data if available
|
|
503
452
|
...(feeSplitterAddress ? getFeeSplitterStaticContracts(clankerToken, feeSplitterAddress) : []),
|
|
504
453
|
];
|
|
505
454
|
const multicallResults = await publicClient.multicall({ contracts });
|
|
506
|
-
//
|
|
507
|
-
const tokenCount = 5;
|
|
508
|
-
const factoryCount = 2;
|
|
509
|
-
const tokenRewardsCount = 1;
|
|
510
|
-
const feeSplitterStaticCount = feeSplitterAddress ? 3 : 0;
|
|
455
|
+
// Parse results
|
|
511
456
|
let idx = 0;
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
457
|
+
// Forwarder
|
|
458
|
+
const forwarderResult = multicallResults[idx];
|
|
459
|
+
idx += 1;
|
|
460
|
+
const factoryData = indexedFactory
|
|
461
|
+
? { ...indexedFactory, forwarder: forwarderResult.result ?? zeroAddress }
|
|
462
|
+
: {
|
|
463
|
+
treasury: zeroAddress,
|
|
464
|
+
governor: zeroAddress,
|
|
465
|
+
staking: zeroAddress,
|
|
466
|
+
stakedToken: zeroAddress,
|
|
467
|
+
forwarder: forwarderResult.result ?? zeroAddress,
|
|
468
|
+
};
|
|
469
|
+
// Fee receivers (tokenRewards)
|
|
516
470
|
const tokenRewardsResult = multicallResults[idx];
|
|
517
|
-
idx +=
|
|
471
|
+
idx += 1;
|
|
472
|
+
// Fee splitter static
|
|
473
|
+
const feeSplitterStaticCount = feeSplitterAddress ? 3 : 0;
|
|
518
474
|
const feeSplitterStaticResults = feeSplitterAddress
|
|
519
475
|
? multicallResults.slice(idx, idx + feeSplitterStaticCount)
|
|
520
476
|
: null;
|
|
521
477
|
idx += feeSplitterStaticCount;
|
|
522
|
-
// Parse results using individual parsers
|
|
523
|
-
const tokenData = parseTokenData(tokenResults, clankerToken);
|
|
524
|
-
const factoryData = parseFactoryData(factoryResults);
|
|
525
478
|
// Check if project exists
|
|
526
479
|
const { treasury, governor, staking, stakedToken } = factoryData;
|
|
527
480
|
const isRegistered = [treasury, governor, staking, stakedToken].every((a) => a !== zeroAddress);
|
|
@@ -531,10 +484,13 @@ export async function getStaticProject({ publicClient, clankerToken, userAddress
|
|
|
531
484
|
if (tokenRewardsResult.status === "success") {
|
|
532
485
|
const tokenRewards = tokenRewardsResult.result;
|
|
533
486
|
const poolKey = tokenRewards.poolKey;
|
|
487
|
+
// Resolve paired token info from pool key and indexed data
|
|
488
|
+
const pairedToken = resolvePairedToken(poolKey, clankerToken, indexedToken.symbol, indexedToken.v4Pool, chainId);
|
|
534
489
|
poolInfo = {
|
|
535
490
|
poolKey,
|
|
536
491
|
feeDisplay: poolKey.fee === 8388608 ? "Dynamic" : `${(poolKey.fee / 10000).toFixed(2)}%`,
|
|
537
492
|
numPositions: tokenRewards.numPositions,
|
|
493
|
+
pairedToken,
|
|
538
494
|
};
|
|
539
495
|
const rewardSlotCount = tokenRewards.rewardRecipients?.length ??
|
|
540
496
|
tokenRewards.rewardAdmins?.length ??
|
|
@@ -592,81 +548,55 @@ export async function getStaticProject({ publicClient, clankerToken, userAddress
|
|
|
592
548
|
/**
|
|
593
549
|
* Get project data for a clanker token
|
|
594
550
|
* Requires staticProject data to avoid refetching static information
|
|
595
|
-
* Fetches dynamic data including treasury,
|
|
551
|
+
* Fetches dynamic data including treasury, staking stats, and pricing
|
|
552
|
+
*
|
|
553
|
+
* Governance stats are fetched from the indexer (no RPC calls needed)
|
|
596
554
|
*/
|
|
597
|
-
export async function getProject({ publicClient, staticProject,
|
|
555
|
+
export async function getProject({ publicClient, staticProject, }) {
|
|
598
556
|
if (Object.values({ publicClient, staticProject }).some((value) => !value)) {
|
|
599
557
|
throw new Error("Invalid project params");
|
|
600
558
|
}
|
|
601
559
|
const chainId = publicClient.chain?.id;
|
|
602
560
|
if (!chainId)
|
|
603
561
|
throw new Error("Chain ID not found on public client");
|
|
604
|
-
|
|
562
|
+
// Get paired token info from static project if available
|
|
563
|
+
const pairedTokenInfo = staticProject.pool?.pairedToken;
|
|
564
|
+
const pairedTokenAddress = pairedTokenInfo?.address;
|
|
605
565
|
const clankerToken = staticProject.token.address;
|
|
606
|
-
// Use fee splitter from staticProject (already fetched in getStaticProject)
|
|
607
566
|
const feeSplitterAddress = staticProject.feeSplitter?.address;
|
|
608
|
-
const rewardTokens =
|
|
609
|
-
// Fetch pricing data if oracle client is provided and pool exists
|
|
610
|
-
let pricing;
|
|
611
|
-
if (oraclePublicClient && staticProject.pool) {
|
|
612
|
-
try {
|
|
613
|
-
const [wethUsdData, tokenUsdData] = await Promise.all([
|
|
614
|
-
getWethUsdPrice({ publicClient: oraclePublicClient }),
|
|
615
|
-
getUsdPrice({
|
|
616
|
-
oraclePublicClient,
|
|
617
|
-
quotePublicClient: publicClient,
|
|
618
|
-
tokenAddress: clankerToken,
|
|
619
|
-
tokenDecimals: staticProject.token.decimals,
|
|
620
|
-
quoteFee: staticProject.pool.poolKey.fee,
|
|
621
|
-
quoteTickSpacing: staticProject.pool.poolKey.tickSpacing,
|
|
622
|
-
quoteHooks: staticProject.pool.poolKey.hooks,
|
|
623
|
-
}),
|
|
624
|
-
]);
|
|
625
|
-
pricing = {
|
|
626
|
-
wethUsd: wethUsdData.priceUsd,
|
|
627
|
-
tokenUsd: tokenUsdData.priceUsd,
|
|
628
|
-
};
|
|
629
|
-
}
|
|
630
|
-
catch (error) {
|
|
631
|
-
// If pricing fails, continue without it (graceful degradation)
|
|
632
|
-
console.warn("Failed to fetch USD pricing:", error);
|
|
633
|
-
}
|
|
634
|
-
}
|
|
635
|
-
// Get current block timestamp for accurate stream status
|
|
636
|
-
const block = await publicClient.getBlock();
|
|
637
|
-
const blockTimestamp = block.timestamp;
|
|
638
|
-
// Get fee locker address to query pending fees
|
|
639
|
-
const feeLockerAddress = GET_FEE_LOCKER_ADDRESS(chainId);
|
|
567
|
+
const rewardTokens = pairedTokenAddress ? [clankerToken, pairedTokenAddress] : [clankerToken];
|
|
640
568
|
// Determine fee recipient for pending fees query
|
|
641
|
-
|
|
642
|
-
// If fee splitter is NOT active, query pending for staking (direct recipient)
|
|
569
|
+
const feeLockerAddress = GET_FEE_LOCKER_ADDRESS(chainId);
|
|
643
570
|
const stakingFeeRecipient = feeSplitterAddress && staticProject.feeSplitter?.isActive
|
|
644
|
-
? feeSplitterAddress
|
|
645
|
-
: staticProject.staking;
|
|
646
|
-
//
|
|
571
|
+
? feeSplitterAddress
|
|
572
|
+
: staticProject.staking;
|
|
573
|
+
// Build contract calls (governance is fetched from indexer, not RPC)
|
|
647
574
|
const contracts = [
|
|
648
|
-
...getTreasuryContracts(clankerToken, staticProject.treasury, staticProject.staking,
|
|
649
|
-
...
|
|
650
|
-
...getStakingContracts(staticProject.staking, clankerToken, wethAddress),
|
|
575
|
+
...getTreasuryContracts(clankerToken, staticProject.treasury, staticProject.staking, pairedTokenAddress),
|
|
576
|
+
...getStakingContracts(staticProject.staking, clankerToken, pairedTokenAddress),
|
|
651
577
|
...(feeLockerAddress
|
|
652
|
-
? getPendingFeesContracts(feeLockerAddress, stakingFeeRecipient, clankerToken,
|
|
578
|
+
? getPendingFeesContracts(feeLockerAddress, stakingFeeRecipient, clankerToken, pairedTokenAddress)
|
|
653
579
|
: []),
|
|
654
580
|
...(feeSplitterAddress && staticProject.feeSplitter?.isActive
|
|
655
581
|
? getFeeSplitterDynamicContracts(clankerToken, feeSplitterAddress, rewardTokens)
|
|
656
582
|
: []),
|
|
657
583
|
];
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
584
|
+
// Fetch all data in parallel: indexed governance, pricing, block, and RPC multicall
|
|
585
|
+
const [indexedProject, pricing, block, results] = await Promise.all([
|
|
586
|
+
getIndexedProject(chainId, clankerToken),
|
|
587
|
+
fetchPricing(publicClient, staticProject),
|
|
588
|
+
publicClient.getBlock(),
|
|
589
|
+
publicClient.multicall({ contracts }),
|
|
590
|
+
]);
|
|
591
|
+
const blockTimestamp = block.timestamp;
|
|
592
|
+
// Calculate slice indices for multicall results
|
|
593
|
+
const treasuryCount = pairedTokenAddress ? 4 : 3;
|
|
594
|
+
const stakingCount = pairedTokenAddress ? 8 : 5;
|
|
595
|
+
const pendingFeesCount = feeLockerAddress ? (pairedTokenAddress ? 2 : 1) : 0;
|
|
664
596
|
const feeSplitterDynamicCount = feeSplitterAddress && staticProject.feeSplitter?.isActive ? rewardTokens.length : 0;
|
|
665
597
|
let idx = 0;
|
|
666
598
|
const treasuryResults = results.slice(idx, idx + treasuryCount);
|
|
667
599
|
idx += treasuryCount;
|
|
668
|
-
const governanceResults = results.slice(idx, idx + governanceCount);
|
|
669
|
-
idx += governanceCount;
|
|
670
600
|
const stakingResults = results.slice(idx, idx + stakingCount);
|
|
671
601
|
idx += stakingCount;
|
|
672
602
|
const pendingFeesResults = pendingFeesCount > 0
|
|
@@ -674,31 +604,35 @@ export async function getProject({ publicClient, staticProject, oraclePublicClie
|
|
|
674
604
|
: null;
|
|
675
605
|
idx += pendingFeesCount;
|
|
676
606
|
const feeSplitterDynamicResults = feeSplitterDynamicCount > 0 ? results.slice(idx, idx + feeSplitterDynamicCount) : null;
|
|
677
|
-
// Calculate USD values for stats
|
|
607
|
+
// Calculate USD values for stats
|
|
678
608
|
const tokenUsdPrice = pricing ? parseFloat(pricing.tokenUsd) : null;
|
|
679
|
-
const
|
|
680
|
-
// Parse fee splitter dynamic data
|
|
609
|
+
const pairedTokenUsdPrice = pricing ? parseFloat(pricing.pairedTokenUsd) : null;
|
|
610
|
+
// Parse fee splitter dynamic data
|
|
681
611
|
let feeSplitter = staticProject.feeSplitter;
|
|
682
612
|
let feeSplitterPendingFees;
|
|
683
613
|
if (feeSplitterDynamicResults && staticProject.feeSplitter) {
|
|
684
|
-
const feeSplitterDynamic = parseFeeSplitterDynamic(feeSplitterDynamicResults,
|
|
685
|
-
feeSplitter = {
|
|
686
|
-
...staticProject.feeSplitter,
|
|
687
|
-
...feeSplitterDynamic,
|
|
688
|
-
};
|
|
689
|
-
// Extract pending fees to add to outstanding rewards
|
|
690
|
-
// When using fee splitter, fees in LP locker should show as "pending" in outstanding rewards
|
|
614
|
+
const feeSplitterDynamic = parseFeeSplitterDynamic(feeSplitterDynamicResults, pairedTokenAddress);
|
|
615
|
+
feeSplitter = { ...staticProject.feeSplitter, ...feeSplitterDynamic };
|
|
691
616
|
if (staticProject.feeSplitter.isActive && feeSplitterDynamic.pendingFees) {
|
|
692
617
|
feeSplitterPendingFees = {
|
|
693
618
|
token: feeSplitterDynamic.pendingFees.token,
|
|
694
|
-
|
|
619
|
+
pairedToken: feeSplitterDynamic.pendingFees.pairedToken ?? null,
|
|
695
620
|
};
|
|
696
621
|
}
|
|
697
622
|
}
|
|
698
|
-
// Parse
|
|
699
|
-
const treasuryStats = parseTreasuryStats(treasuryResults, staticProject.token.decimals, staticProject.token.totalSupply, tokenUsdPrice,
|
|
700
|
-
const stakingStats = parseStakingStats(stakingResults, pendingFeesResults, staticProject.token.decimals, tokenUsdPrice,
|
|
701
|
-
|
|
623
|
+
// Parse stats
|
|
624
|
+
const treasuryStats = parseTreasuryStats(treasuryResults, staticProject.token.decimals, staticProject.token.totalSupply, tokenUsdPrice, pairedTokenUsdPrice, pairedTokenInfo?.decimals ?? 18);
|
|
625
|
+
const stakingStats = parseStakingStats(stakingResults, pendingFeesResults, staticProject.token.decimals, tokenUsdPrice, pairedTokenUsdPrice, pairedTokenInfo?.decimals ?? 18, blockTimestamp, pricing, feeSplitterPendingFees);
|
|
626
|
+
// Use indexed governance data (no RPC calls needed)
|
|
627
|
+
const governanceStats = indexedProject
|
|
628
|
+
? {
|
|
629
|
+
currentCycleId: BigInt(indexedProject.currentCycleId ?? "1"),
|
|
630
|
+
activeProposalCount: {
|
|
631
|
+
boost: BigInt(indexedProject.activeBoostProposals ?? "0"),
|
|
632
|
+
transfer: BigInt(indexedProject.activeTransferProposals ?? "0"),
|
|
633
|
+
},
|
|
634
|
+
}
|
|
635
|
+
: { currentCycleId: 1n, activeProposalCount: { boost: 0n, transfer: 0n } };
|
|
702
636
|
return {
|
|
703
637
|
chainId,
|
|
704
638
|
...staticProject,
|
|
@@ -710,4 +644,37 @@ export async function getProject({ publicClient, staticProject, oraclePublicClie
|
|
|
710
644
|
blockTimestamp,
|
|
711
645
|
};
|
|
712
646
|
}
|
|
647
|
+
// ============================================================================
|
|
648
|
+
// Internal Helpers
|
|
649
|
+
// ============================================================================
|
|
650
|
+
async function fetchPricing(publicClient, staticProject) {
|
|
651
|
+
if (!staticProject.pool)
|
|
652
|
+
return undefined;
|
|
653
|
+
try {
|
|
654
|
+
const pairedToken = staticProject.pool.pairedToken;
|
|
655
|
+
const tokenUsdData = await getUsdPrice({
|
|
656
|
+
publicClient,
|
|
657
|
+
tokenAddress: staticProject.token.address,
|
|
658
|
+
tokenDecimals: staticProject.token.decimals,
|
|
659
|
+
pairedTokenAddress: pairedToken.address,
|
|
660
|
+
pairedTokenDecimals: pairedToken.decimals,
|
|
661
|
+
quoteFee: staticProject.pool.poolKey.fee,
|
|
662
|
+
quoteTickSpacing: staticProject.pool.poolKey.tickSpacing,
|
|
663
|
+
quoteHooks: staticProject.pool.poolKey.hooks,
|
|
664
|
+
});
|
|
665
|
+
// Get paired token USD price (WETH/WBNB = oracle, stablecoins = $1.00)
|
|
666
|
+
const pairedTokenUsdPrice = await getPairedTokenUsdPrice({
|
|
667
|
+
publicClient,
|
|
668
|
+
pairedTokenAddress: pairedToken.address,
|
|
669
|
+
});
|
|
670
|
+
return {
|
|
671
|
+
tokenUsd: tokenUsdData.priceUsd,
|
|
672
|
+
pairedTokenUsd: pairedTokenUsdPrice,
|
|
673
|
+
};
|
|
674
|
+
}
|
|
675
|
+
catch (error) {
|
|
676
|
+
console.warn("Failed to fetch USD pricing:", error);
|
|
677
|
+
return undefined;
|
|
678
|
+
}
|
|
679
|
+
}
|
|
713
680
|
//# sourceMappingURL=project.js.map
|