@ubi.fun/sdk 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -0
- package/dist/abi/DividendVault.d.cts +670 -0
- package/dist/abi/DividendVault.d.ts +671 -0
- package/dist/abi/DividendVault.d.ts.map +1 -0
- package/dist/abi/HolderShareFeeCalculator.d.cts +287 -0
- package/dist/abi/HolderShareFeeCalculator.d.ts +288 -0
- package/dist/abi/HolderShareFeeCalculator.d.ts.map +1 -0
- package/dist/abi/IndexerSubscriber.d.cts +221 -0
- package/dist/abi/IndexerSubscriber.d.ts +222 -0
- package/dist/abi/IndexerSubscriber.d.ts.map +1 -0
- package/dist/abi/MemecoinDividends.d.cts +1021 -0
- package/dist/abi/MemecoinDividends.d.ts +1022 -0
- package/dist/abi/MemecoinDividends.d.ts.map +1 -0
- package/dist/abi/index.cjs +6447 -3585
- package/dist/abi/index.cjs.map +1 -1
- package/dist/abi/index.d.cts +4 -0
- package/dist/abi/index.d.ts +4 -0
- package/dist/abi/index.d.ts.map +1 -1
- package/dist/abi/index.js +6444 -3586
- package/dist/abi/index.js.map +1 -1
- package/dist/addresses/index.cjs +17 -0
- package/dist/addresses/index.cjs.map +1 -1
- package/dist/addresses/index.js +14 -1
- package/dist/addresses/index.js.map +1 -1
- package/dist/addresses.d.cts +25 -0
- package/dist/addresses.d.ts +25 -0
- package/dist/addresses.d.ts.map +1 -1
- package/dist/clients/DividendVaultClient.d.cts +32 -0
- package/dist/clients/DividendVaultClient.d.ts +33 -0
- package/dist/clients/DividendVaultClient.d.ts.map +1 -0
- package/dist/clients/FlaunchPositionManagerClient.d.cts +18 -0
- package/dist/clients/FlaunchPositionManagerClient.d.ts +18 -0
- package/dist/clients/FlaunchPositionManagerClient.d.ts.map +1 -1
- package/dist/clients/FlaunchZapClient.d.cts +41 -0
- package/dist/clients/FlaunchZapClient.d.ts +41 -0
- package/dist/clients/FlaunchZapClient.d.ts.map +1 -1
- package/dist/clients/IndexerSubscriberClient.d.cts +46 -0
- package/dist/clients/IndexerSubscriberClient.d.ts +47 -0
- package/dist/clients/IndexerSubscriberClient.d.ts.map +1 -0
- package/dist/clients/MemecoinDividendsClient.d.cts +23 -0
- package/dist/clients/MemecoinDividendsClient.d.ts +24 -0
- package/dist/clients/MemecoinDividendsClient.d.ts.map +1 -0
- package/dist/helpers/index.cjs.map +1 -1
- package/dist/helpers/index.js.map +1 -1
- package/dist/index.cjs +11710 -8366
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11687 -8368
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +1 -1
- package/dist/index.umd.cjs.map +1 -1
- package/dist/sdk/FlaunchSDK.d.cts +47 -1
- package/dist/sdk/FlaunchSDK.d.ts +47 -1
- package/dist/sdk/FlaunchSDK.d.ts.map +1 -1
- package/dist/utils/creatorVaults.d.cts +64 -0
- package/dist/utils/creatorVaults.d.ts +65 -0
- package/dist/utils/creatorVaults.d.ts.map +1 -0
- package/dist/utils/index.cjs +64 -0
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.cts +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +55 -2
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.umd.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.cjs","sources":["../src/addresses.ts","../src/abi/FlaunchPositionManager.ts","../src/utils/slippage.ts","../src/utils/parseSwap.ts","../src/abi/InitialPrice.ts","../src/clients/InitialPriceClient.ts","../src/clients/FlaunchPositionManagerClient.ts","../src/helpers/hex.ts","../src/abi/PoolManager.ts","../src/clients/PoolManagerClient.ts","../src/abi/FairLaunch.ts","../src/clients/FairLaunchClient.ts","../src/abi/BidWall.ts","../src/clients/BidWallClient.ts","../src/abi/FlaunchZap.ts","../src/helpers/ipfs.ts","../src/utils/univ4.ts","../src/utils/swap.ts","../src/clients/FlaunchZapClient.ts","../src/abi/Flaunch.ts","../src/clients/FlaunchClient.ts","../src/abi/Memecoin.ts","../src/clients/MemecoinClient.ts","../src/abi/Quoter.ts","../src/clients/QuoterClient.ts","../src/abi/FeeEscrow.ts","../src/clients/FeeEscrowClient.ts","../src/abi/ReferralEscrow.ts","../src/clients/ReferralEscrowClient.ts","../src/abi/PoolSwap.ts","../src/clients/PoolSwapClient.ts","../src/abi/XHandleClaims.ts","../src/clients/XHandleClaimsClient.ts","../src/abi/UniversalRewardsDistributor.ts","../src/clients/UniversalRewardsDistributorClient.ts","../src/abi/TreasuryManagerFactory.ts","../src/clients/TreasuryManagerFactoryClient.ts","../src/abi/TreasuryManager.ts","../src/clients/TreasuryManagerClient.ts","../src/abi/Multicall.ts","../src/clients/MulticallClient.ts","../src/sdk/FlaunchSDK.ts","../src/helpers/chainIdToChain.ts","../src/sdk/drift.ts","../src/sdk/factory.ts","../src/sdk/calldata.ts","../src/index.ts","../src/abi/AddressFeeSplitManager.ts"],"sourcesContent":["import { Addresses } from \"./types\";\n\n/**\n * ubi.fun deployments on Arc (Circle).\n *\n * Source of truth: deployments/arc-mainnet-5042.json and\n * deployments/arc-testnet-5042002.json in the contracts repo, mirrored by the\n * committed frontend registry. The cash / native asset on Arc is native USDC\n * (6 decimals through its ERC20 interface) at\n * 0x3600000000000000000000000000000000000000: the position manager's\n * \"nativeToken\" slot IS this USDC, and every pool pairs a coin against it.\n * There is no flETH, no WETH wrapping, and no unwrap step on this chain.\n */\nexport const ARC_MAINNET_CHAIN_ID = 5042;\nexport const ARC_TESTNET_CHAIN_ID = 5042002;\n\n/** Arc native USDC (ERC20 interface, 6 decimals). The cash side of every pool. */\nexport const USDC_ADDRESS =\n \"0x3600000000000000000000000000000000000000\" as const;\n\n/**\n * The pool \"native token\": Arc native USDC on both networks. Kept as an\n * Addresses map so client code stays chain-keyed like every other contract.\n */\nexport const NativeTokenAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: USDC_ADDRESS,\n [ARC_TESTNET_CHAIN_ID]: USDC_ADDRESS,\n};\n\nexport const FlaunchZapAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0xe07F7cA66EC795592385018Dd998F0B50b8A2834\",\n [ARC_TESTNET_CHAIN_ID]: \"0x3fd667aaa89519772bb44e984de408bfcd40e285\",\n};\n\n// SDK \"FlaunchPositionManager\" maps to our deployment \"PositionManager\".\nexport const FlaunchPositionManagerAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0xC780c0f4aAc690908854D351b8bFda2812daeFDc\",\n [ARC_TESTNET_CHAIN_ID]: \"0x88af0b76752ff31aa351cea2cc2e43a1b7c32fdc\",\n};\n\nexport const FlaunchAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0x93E5A7565008db9688BA5211Fa552d8b108B9c75\",\n [ARC_TESTNET_CHAIN_ID]: \"0x55a0e1a458f1c13023dbd6b204e2a439c3b44663\",\n};\n\nexport const FairLaunchAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0xdCDADa707264d9e2B0E8c2feC467860C97434Bd4\",\n [ARC_TESTNET_CHAIN_ID]: \"0xd2ea5591fe0b5820b6de33afbc3b468d070038ea\",\n};\n\n// SDK \"BidWall\" maps to our deployment \"BurningBidWall\" (a modified BidWall).\nexport const BidWallAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0xC5DD30802fefab789Cd9b1e835Bd7301a8D23F8A\",\n [ARC_TESTNET_CHAIN_ID]: \"0x04f947e5fc0ac42836f880d45705af7483a2c4c0\",\n};\n\n/** Referrer-aware swap router: the supported way to trade ubi.fun pools. */\nexport const PoolSwapAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0x3A61B6E86fde5Fc657a48819837F346C7E2Fffa7\",\n [ARC_TESTNET_CHAIN_ID]: \"0x396d41eb4d110d64491d01cd186548fdc82b1b4a\",\n};\n\nexport const TreasuryManagerFactoryAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0xE25C132F379DB49C463328eF427E28DBCbD3a2F0\",\n [ARC_TESTNET_CHAIN_ID]: \"0x093c10b780f7cf8fca9aa7dbc83a64cddf55215f\",\n};\n\n// The approved AddressFeeSplitManager IMPLEMENTATION (factory deploys clones).\nexport const AddressFeeSplitManagerAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0xde10818344f5ab75ecfA772887cE5751D6Cb91C7\",\n [ARC_TESTNET_CHAIN_ID]: \"0xA7d182B81aF7B40b6d09Da88A12a4f7ad770e162\",\n};\n\n/** Creator revenue escrow: balances accrue here, claimed as USDC (unwrap=false). */\nexport const FeeEscrowAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0x678f0D1C045e820Ec1d4806749f2629e1035550e\",\n [ARC_TESTNET_CHAIN_ID]: \"0x59b3269aaf9db83bd3029c84d8b5226fa5702f78\",\n};\n\n/** Referrer rewards escrow: 5% of every swap fee routed with your address. */\nexport const ReferralEscrowAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0xf25B9ceAba005CcCb0cefC4e323e6e519F111eB3\",\n [ARC_TESTNET_CHAIN_ID]: \"0x51b6a4759f9c9a681349c857f6fd912cdfeb8fef\",\n};\n\n/** X-handle earnings registry: per-handle CREATE2 escrows + attested claims. */\nexport const XHandleClaimsAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0xfC38298590893c39E46D319aEd9EC3bf6CB17A3E\",\n [ARC_TESTNET_CHAIN_ID]: \"0x6fE2b9e1Da493E4584e742C03e1926a4CD8AC2A1\",\n};\n\n/**\n * Morpho UniversalRewardsDistributor paying the daily USDC holder pool\n * (24% of every swap fee). Claims are Merkle-proofed cumulative amounts.\n */\nexport const UniversalRewardsDistributorAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0x66003091e723778d7D3285BB6c24ff3F0Ddcc7F7\",\n [ARC_TESTNET_CHAIN_ID]: \"0x7a8e9dA46db2be8436c4404476b40F07a31A6d95\",\n};\n\n/** Uniswap v4 PoolManager (canonical deployment on mainnet, ours on testnet). */\nexport const PoolManagerAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0x8366a39CC670B4001A1121B8F6A443A643e40951\",\n [ARC_TESTNET_CHAIN_ID]: \"0x5fb24c800133a0930280788c5eb3468764154309\",\n};\n\nexport const QuoterAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0x4595D3CD7A6D98d83A719934e829db5076fF1d0d\",\n [ARC_TESTNET_CHAIN_ID]: \"0xf517623f178Ba90e5b3299cb121D38F5A0733ac4\",\n};\n\n/** Base URL of the ubi.fun read/upload API serving each network. */\nexport const ApiBaseUrl: { [chainId: number]: string } = {\n [ARC_MAINNET_CHAIN_ID]: \"https://api.ubi.fun\",\n [ARC_TESTNET_CHAIN_ID]: \"https://api-dev.ubi.fun\",\n};\n","// Generated from PositionManager (the ubi.fun v5 fork; SDK keeps the upstream client name).\n// Source artifact: PositionManager.sol/PositionManager.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const FlaunchPositionManagerAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PositionManager.ConstructorParams\",\n \"components\": [\n {\n \"name\": \"nativeToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"poolManager\",\n \"type\": \"address\",\n \"internalType\": \"contract IPoolManager\"\n },\n {\n \"name\": \"feeDistribution\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FeeDistributor.FeeDistribution\",\n \"components\": [\n {\n \"name\": \"swapFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"referrer\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"active\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"initialPrice\",\n \"type\": \"address\",\n \"internalType\": \"contract IInitialPrice\"\n },\n {\n \"name\": \"protocolOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"protocolFeeRecipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"flayGovernance\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"feeEscrow\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"feeExemptions\",\n \"type\": \"address\",\n \"internalType\": \"contract FeeExemptions\"\n },\n {\n \"name\": \"actionManager\",\n \"type\": \"address\",\n \"internalType\": \"contract TreasuryActionManager\"\n },\n {\n \"name\": \"bidWall\",\n \"type\": \"address\",\n \"internalType\": \"contract BidWall\"\n },\n {\n \"name\": \"fairLaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract FairLaunch\"\n }\n ]\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"receive\",\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"BURN_ADDRESS\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_FAIR_LAUNCH_PROTOCOL_ALLOCATION\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_PROTOCOL_ALLOCATION\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"actionManager\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract TreasuryActionManager\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"afterAddLiquidity\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IPoolManager.ModifyLiquidityParams\",\n \"components\": [\n {\n \"name\": \"tickLower\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"tickUpper\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"liquidityDelta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"_delta\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n },\n {\n \"name\": \"_feesAccrued\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n },\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"selector_\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n },\n {\n \"name\": \"\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"afterDonate\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"_amount0\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_amount1\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"selector_\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"afterInitialize\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n },\n {\n \"name\": \"\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"afterRemoveLiquidity\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IPoolManager.ModifyLiquidityParams\",\n \"components\": [\n {\n \"name\": \"tickLower\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"tickUpper\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"liquidityDelta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"_delta\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n },\n {\n \"name\": \"_feesAccrued\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n },\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"selector_\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n },\n {\n \"name\": \"\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"afterSwap\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"_params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IPoolManager.SwapParams\",\n \"components\": [\n {\n \"name\": \"zeroForOne\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"amountSpecified\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ]\n },\n {\n \"name\": \"_delta\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n },\n {\n \"name\": \"_hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"selector_\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n },\n {\n \"name\": \"hookDeltaUnspecified_\",\n \"type\": \"int128\",\n \"internalType\": \"int128\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"beforeAddLiquidity\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IPoolManager.ModifyLiquidityParams\",\n \"components\": [\n {\n \"name\": \"tickLower\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"tickUpper\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"liquidityDelta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"selector_\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"beforeDonate\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"beforeInitialize\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"beforeRemoveLiquidity\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IPoolManager.ModifyLiquidityParams\",\n \"components\": [\n {\n \"name\": \"tickLower\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"tickUpper\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"liquidityDelta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"selector_\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"beforeSwap\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"_params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IPoolManager.SwapParams\",\n \"components\": [\n {\n \"name\": \"zeroForOne\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"amountSpecified\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ]\n },\n {\n \"name\": \"_hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"selector_\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n },\n {\n \"name\": \"beforeSwapDelta_\",\n \"type\": \"int256\",\n \"internalType\": \"BeforeSwapDelta\"\n },\n {\n \"name\": \"\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"bidWall\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract BidWall\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"closeBidWall\",\n \"inputs\": [\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeOwnershipHandover\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"fairLaunch\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract FairLaunch\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"fairLaunchFeeCalculator\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IFeeCalculator\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"feeCalculator\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IFeeCalculator\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"feeEscrow\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract FeeEscrow\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"feeExemptions\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract FeeExemptions\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"feeSplit\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"bidWall_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"creator_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"protocol_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunch\",\n \"inputs\": [\n {\n \"name\": \"_params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PositionManager.FlaunchParams\",\n \"components\": [\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"symbol\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"tokenUri\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"initialTokenFairLaunch\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"fairLaunchDuration\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"premineAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"creatorFeeAllocation\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"flaunchAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"initialPriceParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"feeCalculatorParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"memecoin_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunchContract\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IFlaunch\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunchesAt\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_flaunchTime\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flayGovernance\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getFairLaunchFeeDistribution\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"feeDistribution_\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FeeDistributor.FeeDistribution\",\n \"components\": [\n {\n \"name\": \"swapFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"referrer\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"active\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"creatorAllocation_\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getFeeCalculator\",\n \"inputs\": [\n {\n \"name\": \"_isFairLaunch\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IFeeCalculator\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getFlaunchingFee\",\n \"inputs\": [\n {\n \"name\": \"_initialPriceParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getFlaunchingMarketCap\",\n \"inputs\": [\n {\n \"name\": \"_initialPriceParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getHookPermissions\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct Hooks.Permissions\",\n \"components\": [\n {\n \"name\": \"beforeInitialize\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"afterInitialize\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"beforeAddLiquidity\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"afterAddLiquidity\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"beforeRemoveLiquidity\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"afterRemoveLiquidity\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"beforeSwap\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"afterSwap\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"beforeDonate\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"afterDonate\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"beforeSwapReturnDelta\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"afterSwapReturnDelta\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"afterAddLiquidityReturnDelta\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"afterRemoveLiquidityReturnDelta\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"stateMutability\": \"pure\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getPoolFeeDistribution\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"feeDistribution_\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FeeDistributor.FeeDistribution\",\n \"components\": [\n {\n \"name\": \"swapFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"referrer\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"active\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialPrice\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IInitialPrice\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"maxReferrerAllocation\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"minProtocolAllocation\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nativeToken\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"notifier\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract Notifier\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownershipHandoverExpiresAt\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolFees\",\n \"inputs\": [\n {\n \"name\": \"_poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct InternalSwapPool.ClaimableFees\",\n \"components\": [\n {\n \"name\": \"amount0\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount1\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolKey\",\n \"inputs\": [\n {\n \"name\": \"_token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolManager\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IPoolManager\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"referralEscrow\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract ReferralEscrow\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"requestOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setFairLaunchFeeCalculator\",\n \"inputs\": [\n {\n \"name\": \"_feeCalculator\",\n \"type\": \"address\",\n \"internalType\": \"contract IFeeCalculator\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setFairLaunchFeeDistribution\",\n \"inputs\": [\n {\n \"name\": \"_feeDistribution\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FeeDistributor.FeeDistribution\",\n \"components\": [\n {\n \"name\": \"swapFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"referrer\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"active\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"_creatorAllocation\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setFeeCalculator\",\n \"inputs\": [\n {\n \"name\": \"_feeCalculator\",\n \"type\": \"address\",\n \"internalType\": \"contract IFeeCalculator\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setFeeDistribution\",\n \"inputs\": [\n {\n \"name\": \"_feeDistribution\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FeeDistributor.FeeDistribution\",\n \"components\": [\n {\n \"name\": \"swapFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"referrer\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"active\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setFlaunch\",\n \"inputs\": [\n {\n \"name\": \"_flaunchContract\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setInitialPrice\",\n \"inputs\": [\n {\n \"name\": \"_initialPrice\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setPoolFeeDistribution\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_feeDistribution\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FeeDistributor.FeeDistribution\",\n \"components\": [\n {\n \"name\": \"swapFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"referrer\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"active\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setProtocolFeeDistribution\",\n \"inputs\": [\n {\n \"name\": \"_protocol\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setReferralEscrow\",\n \"inputs\": [\n {\n \"name\": \"_referralEscrow\",\n \"type\": \"address\",\n \"internalType\": \"address payable\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unlockCallback\",\n \"inputs\": [\n {\n \"name\": \"data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"CreatorFeeAllocationUpdated\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_allocation\",\n \"type\": \"uint24\",\n \"indexed\": false,\n \"internalType\": \"uint24\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"FairLaunchBurn\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_unsoldSupply\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"FairLaunchFeeCalculatorUpdated\",\n \"inputs\": [\n {\n \"name\": \"_feeCalculator\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"FairLaunchFeeDistributionUpdated\",\n \"inputs\": [\n {\n \"name\": \"_feeDistribution\",\n \"type\": \"tuple\",\n \"indexed\": false,\n \"internalType\": \"struct FeeDistributor.FeeDistribution\",\n \"components\": [\n {\n \"name\": \"swapFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"referrer\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"active\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"_creatorAllocation\",\n \"type\": \"uint24\",\n \"indexed\": false,\n \"internalType\": \"uint24\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"FeeCalculatorUpdated\",\n \"inputs\": [\n {\n \"name\": \"_feeCalculator\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"FeeDistributionUpdated\",\n \"inputs\": [\n {\n \"name\": \"_feeDistribution\",\n \"type\": \"tuple\",\n \"indexed\": false,\n \"internalType\": \"struct FeeDistributor.FeeDistribution\",\n \"components\": [\n {\n \"name\": \"swapFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"referrer\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"active\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"HookFee\",\n \"inputs\": [\n {\n \"name\": \"id\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"feeAmount0\",\n \"type\": \"uint128\",\n \"indexed\": false,\n \"internalType\": \"uint128\"\n },\n {\n \"name\": \"feeAmount1\",\n \"type\": \"uint128\",\n \"indexed\": false,\n \"internalType\": \"uint128\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"HookSwap\",\n \"inputs\": [\n {\n \"name\": \"id\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount0\",\n \"type\": \"int128\",\n \"indexed\": false,\n \"internalType\": \"int128\"\n },\n {\n \"name\": \"amount1\",\n \"type\": \"int128\",\n \"indexed\": false,\n \"internalType\": \"int128\"\n },\n {\n \"name\": \"hookLPfeeAmount0\",\n \"type\": \"uint128\",\n \"indexed\": false,\n \"internalType\": \"uint128\"\n },\n {\n \"name\": \"hookLPfeeAmount1\",\n \"type\": \"uint128\",\n \"indexed\": false,\n \"internalType\": \"uint128\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"InitialPriceUpdated\",\n \"inputs\": [\n {\n \"name\": \"_initialPrice\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverCanceled\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverRequested\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"oldOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PoolCreated\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_memecoin\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_memecoinTreasury\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_currencyFlipped\",\n \"type\": \"bool\",\n \"indexed\": false,\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"_flaunchFee\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_params\",\n \"type\": \"tuple\",\n \"indexed\": false,\n \"internalType\": \"struct PositionManager.FlaunchParams\",\n \"components\": [\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"symbol\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"tokenUri\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"initialTokenFairLaunch\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"fairLaunchDuration\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"premineAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"creatorFeeAllocation\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"flaunchAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"initialPriceParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"feeCalculatorParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PoolFeeDistributionUpdated\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_feeDistribution\",\n \"type\": \"tuple\",\n \"indexed\": false,\n \"internalType\": \"struct FeeDistributor.FeeDistribution\",\n \"components\": [\n {\n \"name\": \"swapFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"referrer\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"active\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PoolFeesDistributed\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_donateAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_creatorAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_bidWallAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_governanceAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_protocolAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PoolFeesReceived\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_amount0\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_amount1\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PoolFeesSwapped\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"zeroForOne\",\n \"type\": \"bool\",\n \"indexed\": false,\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"_amount0\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_amount1\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PoolPremine\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_premineAmount\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PoolScheduled\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_flaunchesAt\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PoolStateUpdated\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_sqrtPriceX96\",\n \"type\": \"uint160\",\n \"indexed\": false,\n \"internalType\": \"uint160\"\n },\n {\n \"name\": \"_tick\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"_protocolFee\",\n \"type\": \"uint24\",\n \"indexed\": false,\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"_swapFee\",\n \"type\": \"uint24\",\n \"indexed\": false,\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"_liquidity\",\n \"type\": \"uint128\",\n \"indexed\": false,\n \"internalType\": \"uint128\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PoolSwap\",\n \"inputs\": [\n {\n \"name\": \"poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"flAmount0\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"flAmount1\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"flFee0\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"flFee1\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"ispAmount0\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"ispAmount1\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"ispFee0\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"ispFee1\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"uniAmount0\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"uniAmount1\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"uniFee0\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"uniFee1\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ReferralEscrowUpdated\",\n \"inputs\": [\n {\n \"name\": \"_referralEscrow\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ReferrerFeePaid\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_token\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CallerIsNotBidWall\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CallerNotCreator\",\n \"inputs\": [\n {\n \"name\": \"_caller\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"CannotBeInitializedDirectly\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CannotModifyLiquidityDuringFairLaunch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CannotSellTokenDuringFairLaunch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CreatorFeeInvalid\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"HookNotImplemented\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InsufficientFlaunchFee\",\n \"inputs\": [\n {\n \"name\": \"_paid\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_required\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidPool\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"LockFailure\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NewOwnerIsZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoHandoverRequest\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotPoolManager\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotSelf\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ProtocolFeeInvalid\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"RecipientZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ReferrerFeeInvalid\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"SwapFeeInvalid\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TokenNotFlaunched\",\n \"inputs\": [\n {\n \"name\": \"_flaunchesAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"Unauthorized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"UnknownPool\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ]\n }\n] as const;\n","import { parseEther } from \"viem\";\n\n/**\n * Applies a slippage tolerance to an amount.\n *\n * @dev EXACT_OUT adds the slippage, EXACT_IN removes it. `slippage` is a\n * fraction string, e.g. \"0.05\" for 5%.\n */\nexport const getAmountWithSlippage = ({\n amount,\n slippage,\n swapType,\n}: {\n amount: bigint | undefined;\n slippage: string;\n swapType: \"EXACT_IN\" | \"EXACT_OUT\";\n}) => {\n if (amount == null) {\n return 0n;\n }\n\n const absAmount = amount < 0n ? -amount : amount;\n const slippageMultiplier =\n swapType === \"EXACT_IN\"\n ? BigInt(1e18) - parseEther(slippage)\n : BigInt(1e18) + parseEther(slippage);\n\n return (absAmount * slippageMultiplier) / BigInt(1e18);\n};\n","export interface SwapLogArgs {\n flAmount0: bigint;\n flAmount1: bigint;\n flFee0: bigint;\n flFee1: bigint;\n ispAmount0: bigint;\n ispAmount1: bigint;\n ispFee0: bigint;\n ispFee1: bigint;\n uniAmount0: bigint;\n uniAmount1: bigint;\n uniFee0: bigint;\n uniFee1: bigint;\n}\n\nexport interface SwapFees {\n /** True when the fee was taken on the USDC side, false when in the coin. */\n isInUSDC: boolean;\n amount: bigint;\n}\n\nexport interface BuySwapData {\n type: \"BUY\";\n delta: {\n coinsBought: bigint;\n usdcSold: bigint;\n fees: SwapFees;\n };\n}\n\nexport interface SellSwapData {\n type: \"SELL\";\n delta: {\n coinsSold: bigint;\n usdcBought: bigint;\n fees: SwapFees;\n };\n}\n\nexport type ParsedSwapData = BuySwapData | SellSwapData;\n\n/**\n * Parses raw PoolSwap log arguments into structured swap data. The three\n * amount-pair legs (fl = fair launch fill, isp = internal swap pool, uni =\n * Uniswap pool) show how a fill was sourced; this nets them into one delta.\n * @param args - The swap log arguments\n * @param usdcIsCurrencyZero - Whether USDC is currency0 in the pool\n * @returns Parsed swap data with type and delta information\n */\nexport function parseSwapData(\n args: SwapLogArgs,\n usdcIsCurrencyZero: boolean\n): ParsedSwapData {\n const {\n flAmount0,\n flAmount1,\n flFee0,\n flFee1,\n ispAmount0,\n ispAmount1,\n ispFee0,\n ispFee1,\n uniAmount0,\n uniAmount1,\n uniFee0,\n uniFee1,\n } = args;\n\n const currency0Delta = flAmount0 + ispAmount0 + uniAmount0;\n const currency1Delta = flAmount1 + ispAmount1 + uniAmount1;\n const currency0Fees = flFee0 + ispFee0 + uniFee0;\n const currency1Fees = flFee1 + ispFee1 + uniFee1;\n\n let feesIsInUSDC: boolean;\n let swapType: \"BUY\" | \"SELL\";\n\n if (usdcIsCurrencyZero) {\n swapType = currency0Delta < 0 ? \"BUY\" : \"SELL\";\n feesIsInUSDC = currency0Fees < 0;\n } else {\n swapType = currency1Delta < 0 ? \"BUY\" : \"SELL\";\n feesIsInUSDC = currency1Fees < 0;\n }\n\n const absCurrency0Delta =\n currency0Delta < 0 ? -currency0Delta : currency0Delta;\n const absCurrency1Delta =\n currency1Delta < 0 ? -currency1Delta : currency1Delta;\n const absCurrency0Fees = currency0Fees < 0 ? -currency0Fees : currency0Fees;\n const absCurrency1Fees = currency1Fees < 0 ? -currency1Fees : currency1Fees;\n\n const fees: SwapFees = {\n isInUSDC: feesIsInUSDC,\n amount: usdcIsCurrencyZero\n ? feesIsInUSDC\n ? absCurrency0Fees\n : absCurrency1Fees\n : feesIsInUSDC\n ? absCurrency1Fees\n : absCurrency0Fees,\n };\n\n if (swapType === \"BUY\") {\n return {\n type: swapType,\n delta: {\n coinsBought: usdcIsCurrencyZero\n ? absCurrency1Delta - (!fees.isInUSDC ? fees.amount : 0n)\n : absCurrency0Delta - (!fees.isInUSDC ? fees.amount : 0n),\n usdcSold: usdcIsCurrencyZero\n ? absCurrency0Delta - (fees.isInUSDC ? fees.amount : 0n)\n : absCurrency1Delta - (fees.isInUSDC ? fees.amount : 0n),\n fees,\n },\n };\n } else {\n return {\n type: swapType,\n delta: {\n coinsSold: usdcIsCurrencyZero\n ? absCurrency1Delta - (!fees.isInUSDC ? fees.amount : 0n)\n : absCurrency0Delta - (!fees.isInUSDC ? fees.amount : 0n),\n usdcBought: usdcIsCurrencyZero\n ? absCurrency0Delta - (fees.isInUSDC ? fees.amount : 0n)\n : absCurrency1Delta - (fees.isInUSDC ? fees.amount : 0n),\n fees,\n },\n };\n }\n}\n","// Generated from UsdcMarketCappedPrice (the deployed IInitialPrice implementation).\n// Source artifact: UsdcMarketCappedPrice.sol/UsdcMarketCappedPrice.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const InitialPriceAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_protocolOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_flaunchFeeExemption\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MINIMUM_USDC_MARKET_CAP\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"NATIVE_SCALAR\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeOwnershipHandover\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunchFeeExemption\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract FlaunchFeeExemption\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunchFeeThreshold\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getFlaunchingFee\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_initialPriceParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getMarketCap\",\n \"inputs\": [\n {\n \"name\": \"_initialPriceParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"pure\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getSqrtPriceX96\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_flipped\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"_initialPriceParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"sqrtPriceX96_\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownershipHandoverExpiresAt\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"requestOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setFlaunchFeeThreshold\",\n \"inputs\": [\n {\n \"name\": \"_flaunchFeeThreshold\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"FlaunchFeeThresholdUpdated\",\n \"inputs\": [\n {\n \"name\": \"_flaunchFeeThreshold\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverCanceled\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverRequested\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"oldOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"MarketCapTooSmall\",\n \"inputs\": [\n {\n \"name\": \"_usdcMarketCap\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_usdcMarketCapMinimum\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"NewOwnerIsZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoHandoverRequest\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Unauthorized\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type HexString,\n createDrift,\n} from \"@delvtech/drift\";\nimport { InitialPriceAbi } from \"../abi/InitialPrice\";\nimport { zeroAddress } from \"viem\";\n\nexport type InitialPriceABI = typeof InitialPriceAbi;\n\n/**\n * Client for the deployed IInitialPrice implementation (UsdcMarketCappedPrice):\n * turns the launcher's chosen initial market cap (USDC, 6 decimals, abi-encoded\n * as a single uint256) into the pool's starting price and the flaunch fee.\n */\nexport class ReadInitialPrice {\n public readonly contract: ReadContract<InitialPriceABI>;\n\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: InitialPriceAbi,\n address,\n });\n }\n\n /**\n * The flaunch fee for a launch, in the chain's native units (18 decimals on\n * Arc, where msg.value is USDC at 18 decimals). Zero for market caps below\n * the on-chain threshold and for fee-exempt senders.\n * @param params.sender - The address that will send the launch\n * @param params.initialPriceParams - The abi-encoded initial market cap\n */\n getFlaunchingFee(params: { sender: Address; initialPriceParams: HexString }) {\n return this.contract.read(\"getFlaunchingFee\", {\n _sender: params.sender,\n _initialPriceParams: params.initialPriceParams,\n });\n }\n\n /**\n * The starting sqrt price for a launch\n * @param params.usdcIsCurrencyZero - Whether USDC sorts as currency0\n * @param params.initialPriceParams - The abi-encoded initial market cap\n */\n getSqrtPriceX96(params: {\n usdcIsCurrencyZero: boolean;\n initialPriceParams: HexString;\n }) {\n return this.contract.read(\"getSqrtPriceX96\", {\n _flipped: !params.usdcIsCurrencyZero,\n _initialPriceParams: params.initialPriceParams,\n 0: zeroAddress, // unnamed sender param, unused by the implementation\n });\n }\n}\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type EventLog,\n createDrift,\n HexString,\n} from \"@delvtech/drift\";\nimport { type Hex } from \"viem\";\nimport { FlaunchPositionManagerAbi } from \"../abi/FlaunchPositionManager\";\nimport { getAmountWithSlippage } from \"../utils/slippage\";\nimport { parseSwapData, type SwapLogArgs } from \"../utils/parseSwap\";\nimport { ReadInitialPrice } from \"./InitialPriceClient\";\n\nexport type FlaunchPositionManagerABI = typeof FlaunchPositionManagerAbi;\nexport type PoolCreatedLog = EventLog<\n FlaunchPositionManagerABI,\n \"PoolCreated\"\n> & {\n timestamp: number;\n};\nexport type PoolCreatedLogs = PoolCreatedLog[];\n\nexport interface WatchPoolCreatedParams {\n onPoolCreated: ({\n logs,\n isFetchingFromStart,\n }: {\n logs: PoolCreatedLogs;\n isFetchingFromStart: boolean;\n }) => void;\n startBlockNumber?: bigint;\n}\n\nexport type BaseSwapLog = EventLog<FlaunchPositionManagerABI, \"PoolSwap\"> & {\n timestamp: number;\n};\n\nexport type BuySwapLog = BaseSwapLog & {\n type: \"BUY\";\n delta: {\n coinsBought: bigint;\n usdcSold: bigint;\n fees: {\n isInUSDC: boolean;\n amount: bigint;\n };\n };\n};\n\nexport type SellSwapLog = BaseSwapLog & {\n type: \"SELL\";\n delta: {\n coinsSold: bigint;\n usdcBought: bigint;\n fees: {\n isInUSDC: boolean;\n amount: bigint;\n };\n };\n};\n\nexport type PoolSwapLog = BuySwapLog | SellSwapLog | BaseSwapLog;\nexport type PoolSwapLogs = PoolSwapLog[];\n\nexport interface WatchPoolSwapParams<\n TUSDCIsCurrencyZero extends boolean | undefined = undefined\n> {\n onPoolSwap: ({\n logs,\n isFetchingFromStart,\n }: {\n logs: TUSDCIsCurrencyZero extends boolean\n ? (BuySwapLog | SellSwapLog)[]\n : BaseSwapLog[];\n isFetchingFromStart: boolean;\n }) => void;\n usdcIsCurrencyZero?: TUSDCIsCurrencyZero;\n startBlockNumber?: bigint;\n filterByPoolId?: HexString;\n}\n\n/**\n * Client for the PositionManager, the Uniswap v4 hook at the center of the\n * protocol: it creates pools, collects and splits fees, and emits the\n * PoolCreated / PoolSwap events integrators index.\n *\n * Launch coins through the FlaunchZap (see ReadWriteFlaunchZap) and trade\n * through PoolSwap; this client is the read/event surface.\n */\nexport class ReadFlaunchPositionManager {\n public readonly contract: ReadContract<FlaunchPositionManagerABI>;\n drift: Drift;\n public pollPoolCreatedNow?: () => Promise<void>;\n public pollPoolSwapNow?: () => Promise<void>;\n public readonly TOTAL_SUPPLY = 100n * 10n ** 27n; // 100 Billion tokens in wei\n\n constructor(address: Address, drift: Drift = createDrift()) {\n this.drift = drift;\n if (!address) {\n throw new Error(\"Address is required\");\n }\n this.contract = drift.contract({\n abi: FlaunchPositionManagerAbi,\n address,\n });\n }\n\n getFeeCalculator({ forFairLaunch }: { forFairLaunch: boolean }) {\n return this.contract.read(\"getFeeCalculator\", {\n _isFairLaunch: forFairLaunch,\n });\n }\n\n async isValidCoin(coinAddress: Address) {\n const poolKey = await this.contract.read(\"poolKey\", {\n _token: coinAddress,\n });\n\n return poolKey.tickSpacing !== 0;\n }\n\n /**\n * Reads the exact pool key for a coin, as stored by the hook. Prefer this\n * over assembling the key by hand.\n */\n poolKey(coinAddress: Address) {\n return this.contract.read(\"poolKey\", {\n _token: coinAddress,\n });\n }\n\n /**\n * The live fee distribution for a pool (swapFee, referrer, protocol shares\n * in hundredths of a percent)\n */\n getPoolFeeDistribution(poolId: HexString) {\n return this.contract.read(\"getPoolFeeDistribution\", {\n _poolId: poolId,\n });\n }\n\n /**\n * The flaunch fee a launch would owe, in native units (msg.value; USDC at 18\n * decimals on Arc). Reads through the initial price contract so sender fee\n * exemptions apply.\n */\n async getFlaunchingFee(params: {\n sender: Address;\n initialPriceParams: HexString;\n slippagePercent?: number;\n }) {\n const readInitialPrice = new ReadInitialPrice(\n await this.contract.read(\"initialPrice\"),\n this.drift\n );\n const flaunchingFee = await readInitialPrice.getFlaunchingFee(params);\n\n // pad the fee by the slippage percent so a price move between quote and\n // send does not revert the launch (excess is refunded on-chain)\n const flaunchingFeeWithSlippage = getAmountWithSlippage({\n amount: flaunchingFee,\n slippage: ((params.slippagePercent ?? 0) / 100).toFixed(18).toString(),\n swapType: \"EXACT_OUT\",\n });\n return flaunchingFeeWithSlippage;\n }\n\n async watchPoolCreated({\n onPoolCreated,\n startBlockNumber,\n }: WatchPoolCreatedParams) {\n let intervalId: ReturnType<typeof setInterval>;\n\n if (startBlockNumber !== undefined) {\n onPoolCreated({\n logs: [],\n isFetchingFromStart: true,\n });\n }\n\n let lastBlockNumber = startBlockNumber\n ? startBlockNumber - 1n\n : await this.drift.getBlockNumber();\n\n const pollEvents = async () => {\n try {\n const currentBlockNumber = await this.drift.getBlockNumber();\n\n if (currentBlockNumber > lastBlockNumber) {\n const _logs = await this.contract.getEvents(\"PoolCreated\", {\n fromBlock: lastBlockNumber + 1n,\n toBlock: currentBlockNumber,\n });\n\n // Get timestamps for each log\n const logsWithTimestamps = await Promise.all(\n [..._logs].reverse().map(async (log) => {\n const block = await this.drift.getBlock(log.blockNumber);\n return {\n ...log,\n timestamp: Number(block?.timestamp) * 1_000, // convert to ms for js\n };\n })\n );\n\n if (logsWithTimestamps.length > 0) {\n onPoolCreated({\n logs: logsWithTimestamps,\n isFetchingFromStart: false,\n });\n } else {\n onPoolCreated({\n logs: [],\n isFetchingFromStart: false,\n });\n }\n\n lastBlockNumber = currentBlockNumber;\n }\n } catch (error) {\n console.error(\"Error polling events:\", error);\n }\n };\n\n intervalId = setInterval(pollEvents, 5_000);\n\n this.pollPoolCreatedNow = pollEvents;\n\n // Return both cleanup function and immediate poll function\n return {\n cleanup: () => {\n if (intervalId) {\n clearInterval(intervalId);\n }\n // Clear the pollNow function when cleaning up\n this.pollPoolCreatedNow = undefined;\n },\n pollPoolCreatedNow: pollEvents,\n };\n }\n\n /**\n * Parses a transaction hash to extract PoolSwap events and return parsed swap data\n * @param txHash - The transaction hash to parse\n * @param usdcIsCurrencyZero - Whether USDC is currency0 in the pool (optional)\n * @returns Parsed swap log or undefined if no PoolSwap event found\n */\n async parseSwapTx(\n txHash: Hex,\n usdcIsCurrencyZero?: boolean\n ): Promise<PoolSwapLog | undefined> {\n try {\n // Get transaction to get block number\n const tx = await this.drift.getTransaction({ hash: txHash });\n if (!tx) {\n return undefined;\n }\n\n // Get block to get timestamp\n const block = await this.drift.getBlock(tx.blockNumber);\n const timestamp = Number(block?.timestamp) * 1_000; // convert to ms for js\n\n // Get PoolSwap events from the specific transaction\n const swapLogs = await this.contract.getEvents(\"PoolSwap\", {\n fromBlock: tx.blockNumber,\n toBlock: tx.blockNumber,\n });\n\n // Find the first swap log that matches our transaction hash\n const targetLog = swapLogs.find((log) => log.transactionHash === txHash);\n if (!targetLog) {\n return undefined;\n }\n\n // If usdcIsCurrencyZero is not provided, return basic log\n if (usdcIsCurrencyZero === undefined) {\n return {\n ...targetLog,\n timestamp,\n };\n }\n\n // Parse the swap data using the utility function\n const swapData = parseSwapData(\n targetLog.args as SwapLogArgs,\n usdcIsCurrencyZero\n );\n\n return {\n ...targetLog,\n timestamp,\n type: swapData.type,\n delta: swapData.delta,\n };\n } catch (error) {\n console.error(\"Error parsing swap transaction:\", error);\n return undefined;\n }\n }\n\n async watchPoolSwap<T extends boolean | undefined = undefined>({\n onPoolSwap,\n usdcIsCurrencyZero,\n startBlockNumber,\n filterByPoolId,\n }: WatchPoolSwapParams<T>) {\n let intervalId: ReturnType<typeof setInterval>;\n\n if (startBlockNumber !== undefined) {\n onPoolSwap({\n logs: [],\n isFetchingFromStart: true,\n });\n }\n\n let lastBlockNumber = startBlockNumber\n ? startBlockNumber - 1n\n : await this.drift.getBlockNumber();\n\n const pollEvents = async () => {\n try {\n const currentBlockNumber = await this.drift.getBlockNumber();\n\n if (currentBlockNumber > lastBlockNumber) {\n const _logs = await this.contract.getEvents(\"PoolSwap\", {\n fromBlock: lastBlockNumber + 1n,\n toBlock: currentBlockNumber,\n filter: {\n poolId: filterByPoolId,\n },\n });\n\n // Get timestamps for each log\n const logsWithTimestamps = await Promise.all(\n [..._logs].reverse().map(async (log): Promise<PoolSwapLog> => {\n const block = await this.drift.getBlock(log.blockNumber);\n const timestamp = Number(block?.timestamp) * 1_000; // convert to ms for js\n\n if (usdcIsCurrencyZero === undefined) {\n return {\n ...log,\n timestamp,\n };\n }\n\n // parse swap data\n const swapData = parseSwapData(\n log.args as SwapLogArgs,\n usdcIsCurrencyZero\n );\n\n return {\n ...log,\n timestamp,\n type: swapData.type,\n delta: swapData.delta,\n };\n })\n );\n\n if (logsWithTimestamps.length > 0) {\n onPoolSwap({\n logs: logsWithTimestamps as T extends boolean\n ? (BuySwapLog | SellSwapLog)[]\n : BaseSwapLog[],\n isFetchingFromStart: false,\n });\n } else {\n onPoolSwap({\n logs: [],\n isFetchingFromStart: false,\n });\n }\n\n lastBlockNumber = currentBlockNumber;\n }\n } catch (error) {\n console.error(\"Error polling events:\", error);\n }\n };\n\n intervalId = setInterval(pollEvents, 5_000);\n\n this.pollPoolSwapNow = pollEvents;\n\n // Return both cleanup function and immediate poll function\n return {\n cleanup: () => {\n if (intervalId) {\n clearInterval(intervalId);\n }\n // Clear the pollNow function when cleaning up\n this.pollPoolSwapNow = undefined;\n },\n pollPoolSwapNow: pollEvents,\n };\n }\n}\n","import { encodeAbiParameters, Hex, hexToBigInt, pad } from \"viem\";\n\nexport const bytes32ToUint256 = (value: Hex) => {\n return hexToBigInt(value);\n};\n\nexport const uint256ToBytes32 = (value: bigint) => {\n return pad(\n encodeAbiParameters([{ type: \"uint256\", name: \"value\" }], [value]),\n { size: 32, dir: \"right\" }\n );\n};\n","// Generated from Uniswap v4 PoolManager.\n// Source artifact: PoolManager.sol/PoolManager.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const PoolManagerAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"initialOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"allowance\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"approve\",\n \"inputs\": [\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balanceOf\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"balance\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"burn\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"clear\",\n \"inputs\": [\n {\n \"name\": \"currency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"collectProtocolFees\",\n \"inputs\": [\n {\n \"name\": \"recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"currency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amountCollected\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"donate\",\n \"inputs\": [\n {\n \"name\": \"key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"amount0\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount1\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"delta\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"extsload\",\n \"inputs\": [\n {\n \"name\": \"slot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"extsload\",\n \"inputs\": [\n {\n \"name\": \"startSlot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"nSlots\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"extsload\",\n \"inputs\": [\n {\n \"name\": \"slots\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"exttload\",\n \"inputs\": [\n {\n \"name\": \"slots\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"exttload\",\n \"inputs\": [\n {\n \"name\": \"slot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialize\",\n \"inputs\": [\n {\n \"name\": \"key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"sqrtPriceX96\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"tick\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isOperator\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"isOperator\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"mint\",\n \"inputs\": [\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"modifyLiquidity\",\n \"inputs\": [\n {\n \"name\": \"key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IPoolManager.ModifyLiquidityParams\",\n \"components\": [\n {\n \"name\": \"tickLower\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"tickUpper\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"liquidityDelta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"callerDelta\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n },\n {\n \"name\": \"feesAccrued\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"protocolFeeController\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"protocolFeesAccrued\",\n \"inputs\": [\n {\n \"name\": \"currency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setOperator\",\n \"inputs\": [\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"approved\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setProtocolFee\",\n \"inputs\": [\n {\n \"name\": \"key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"newProtocolFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setProtocolFeeController\",\n \"inputs\": [\n {\n \"name\": \"controller\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"settle\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"settleFor\",\n \"inputs\": [\n {\n \"name\": \"recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"supportsInterface\",\n \"inputs\": [\n {\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"swap\",\n \"inputs\": [\n {\n \"name\": \"key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IPoolManager.SwapParams\",\n \"components\": [\n {\n \"name\": \"zeroForOne\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"amountSpecified\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ]\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"swapDelta\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"sync\",\n \"inputs\": [\n {\n \"name\": \"currency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"take\",\n \"inputs\": [\n {\n \"name\": \"currency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transfer\",\n \"inputs\": [\n {\n \"name\": \"receiver\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferFrom\",\n \"inputs\": [\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"receiver\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unlock\",\n \"inputs\": [\n {\n \"name\": \"data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"updateDynamicLPFee\",\n \"inputs\": [\n {\n \"name\": \"key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"newDynamicLPFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"Approval\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Donate\",\n \"inputs\": [\n {\n \"name\": \"id\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount0\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount1\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Initialize\",\n \"inputs\": [\n {\n \"name\": \"id\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"indexed\": false,\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"contract IHooks\"\n },\n {\n \"name\": \"sqrtPriceX96\",\n \"type\": \"uint160\",\n \"indexed\": false,\n \"internalType\": \"uint160\"\n },\n {\n \"name\": \"tick\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ModifyLiquidity\",\n \"inputs\": [\n {\n \"name\": \"id\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"tickLower\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"tickUpper\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"liquidityDelta\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OperatorSet\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"approved\",\n \"type\": \"bool\",\n \"indexed\": false,\n \"internalType\": \"bool\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"user\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ProtocolFeeControllerUpdated\",\n \"inputs\": [\n {\n \"name\": \"protocolFeeController\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ProtocolFeeUpdated\",\n \"inputs\": [\n {\n \"name\": \"id\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"protocolFee\",\n \"type\": \"uint24\",\n \"indexed\": false,\n \"internalType\": \"uint24\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Swap\",\n \"inputs\": [\n {\n \"name\": \"id\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount0\",\n \"type\": \"int128\",\n \"indexed\": false,\n \"internalType\": \"int128\"\n },\n {\n \"name\": \"amount1\",\n \"type\": \"int128\",\n \"indexed\": false,\n \"internalType\": \"int128\"\n },\n {\n \"name\": \"sqrtPriceX96\",\n \"type\": \"uint160\",\n \"indexed\": false,\n \"internalType\": \"uint160\"\n },\n {\n \"name\": \"liquidity\",\n \"type\": \"uint128\",\n \"indexed\": false,\n \"internalType\": \"uint128\"\n },\n {\n \"name\": \"tick\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"indexed\": false,\n \"internalType\": \"uint24\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Transfer\",\n \"inputs\": [\n {\n \"name\": \"caller\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyUnlocked\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CurrenciesOutOfOrderOrEqual\",\n \"inputs\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"CurrencyNotSettled\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"DelegateCallNotAllowed\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidCaller\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ManagerLocked\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"MustClearExactPositiveDelta\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NonzeroNativeValue\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"PoolNotInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ProtocolFeeCurrencySynced\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ProtocolFeeTooLarge\",\n \"inputs\": [\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"SwapAmountCannotBeZero\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TickSpacingTooLarge\",\n \"inputs\": [\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"TickSpacingTooSmall\",\n \"inputs\": [\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"UnauthorizedDynamicLPFeeUpdate\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type HexString,\n createDrift,\n} from \"@delvtech/drift\";\nimport {\n keccak256,\n encodePacked,\n stringToHex,\n pad,\n hexToBigInt,\n sliceHex,\n type Hex,\n} from \"viem\";\nimport { bytes32ToUint256, uint256ToBytes32 } from \"../helpers/hex\";\nimport { PoolManagerAbi } from \"../abi/PoolManager\";\n\nexport type PoolManagerABI = typeof PoolManagerAbi;\n\nexport interface PositionInfoParams {\n poolId: HexString;\n owner: Address;\n tickLower: number;\n tickUpper: number;\n salt: string;\n}\n\n/**\n * Client for the Uniswap v4 PoolManager. Pool state is read straight off the\n * singleton's storage via extsload (StateView is not deployed on Arc), using\n * the same slot derivations as Uniswap's StateLibrary.\n */\nexport class ReadPoolManager {\n public readonly contract: ReadContract<PoolManagerABI>;\n\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: PoolManagerAbi,\n address,\n });\n }\n\n /** The base storage slot of a pool's State struct (_pools is at slot 6). */\n poolStateSlot({ poolId }: { poolId: HexString }) {\n const POOLS_SLOT = uint256ToBytes32(6n);\n\n return keccak256(\n encodePacked([\"bytes32\", \"bytes32\"], [poolId, POOLS_SLOT])\n );\n }\n\n /**\n * Reads a pool's Slot0: current sqrt price, tick, and fee configuration\n * @param poolId - The ID of the pool\n * @returns Promise<{sqrtPriceX96: bigint, tick: number, protocolFee: number, lpFee: number}>\n */\n async poolSlot0({ poolId }: { poolId: HexString }) {\n const stateSlot = this.poolStateSlot({ poolId });\n\n const result = await this.contract.read(\"extsload\", {\n slot: stateSlot,\n });\n\n const data = (Array.isArray(result) ? result[0] : result) as HexString;\n const dataAsBigInt = BigInt(data);\n\n // Slot0 packing (bottom to top): uint160 sqrtPriceX96, int24 tick,\n // uint24 protocolFee, uint24 lpFee.\n const sqrtPriceX96 = dataAsBigInt & ((1n << 160n) - 1n);\n\n const tickRaw = Number((dataAsBigInt >> 160n) & 0xffffffn);\n const tick = tickRaw > 0x7fffff ? tickRaw - 0x1000000 : tickRaw;\n\n const protocolFee = Number((dataAsBigInt >> 184n) & 0xffffffn);\n const lpFee = Number((dataAsBigInt >> 208n) & 0xffffffn);\n\n return { sqrtPriceX96, tick, protocolFee, lpFee };\n }\n\n /**\n * Reads a liquidity position's state\n * @param poolId - The ID of the pool\n * @param owner - The address of the position owner\n * @param tickLower - The lower tick of the position\n * @param tickUpper - The upper tick of the position\n * @param salt - The salt used to identify the position\n * @returns Promise<{liquidity, feeGrowthInside0LastX128, feeGrowthInside1LastX128}>\n */\n async positionInfo({\n poolId,\n owner,\n tickLower,\n tickUpper,\n salt,\n }: PositionInfoParams): Promise<{\n liquidity: bigint;\n feeGrowthInside0LastX128: bigint;\n feeGrowthInside1LastX128: bigint;\n }> {\n const saltBytes32 = pad(stringToHex(salt), { size: 32, dir: \"right\" });\n\n const positionKey = keccak256(\n encodePacked(\n [\"address\", \"int24\", \"int24\", \"bytes32\"],\n [owner, tickLower, tickUpper, saltBytes32]\n )\n );\n\n const stateSlot = this.poolStateSlot({ poolId });\n\n // Pool.State layout: slot0(+0), feeGrowthGlobal0(+1), feeGrowthGlobal1(+2),\n // liquidity(+3), ticks(+4), tickBitmap(+5), positions(+6).\n const POSITIONS_OFFSET = 6n;\n const positionMapping = uint256ToBytes32(\n bytes32ToUint256(stateSlot) + POSITIONS_OFFSET\n );\n\n const positionInfoSlot = keccak256(\n encodePacked([\"bytes32\", \"bytes32\"], [positionKey, positionMapping])\n );\n\n const result = await this.contract.read(\"extsload\", {\n startSlot: positionInfoSlot,\n nSlots: 3n,\n });\n\n // Adapters differ on whether bytes32[] comes back as an array of words or\n // one concatenated hex blob; accept both.\n let words: Hex[];\n if (Array.isArray(result)) {\n words = result as Hex[];\n } else {\n const blob = result as unknown as Hex;\n words = [0, 1, 2].map((i) =>\n sliceHex(blob, i * 32, (i + 1) * 32)\n );\n }\n\n return {\n liquidity: hexToBigInt(words[0]),\n feeGrowthInside0LastX128: hexToBigInt(words[1]),\n feeGrowthInside1LastX128: hexToBigInt(words[2]),\n };\n }\n}\n","// Generated from FairLaunch.\n// Source artifact: FairLaunch.sol/FairLaunch.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const FairLaunchAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_poolManager\",\n \"type\": \"address\",\n \"internalType\": \"contract IPoolManager\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"closePosition\",\n \"inputs\": [\n {\n \"name\": \"_poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"_tokenFees\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_nativeIsZero\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FairLaunch.FairLaunchInfo\",\n \"components\": [\n {\n \"name\": \"startsAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"endsAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"initialTick\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"revenue\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"supply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"closed\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"createPosition\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_initialTick\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"_flaunchesAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_initialTokenFairLaunch\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_fairLaunchDuration\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FairLaunch.FairLaunchInfo\",\n \"components\": [\n {\n \"name\": \"startsAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"endsAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"initialTick\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"revenue\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"supply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"closed\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"fairLaunchInfo\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FairLaunch.FairLaunchInfo\",\n \"components\": [\n {\n \"name\": \"startsAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"endsAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"initialTick\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"revenue\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"supply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"closed\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"fillFromPosition\",\n \"inputs\": [\n {\n \"name\": \"_poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"_amountSpecified\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"_nativeIsZero\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"beforeSwapDelta_\",\n \"type\": \"int256\",\n \"internalType\": \"BeforeSwapDelta\"\n },\n {\n \"name\": \"balanceDelta_\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n },\n {\n \"name\": \"fairLaunchInfo_\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FairLaunch.FairLaunchInfo\",\n \"components\": [\n {\n \"name\": \"startsAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"endsAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"initialTick\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"revenue\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"supply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"closed\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getRoleAdmin\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"grantRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"hasRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"inFairLaunchWindow\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialSupply\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_supply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"modifyRevenue\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_revenue\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolManager\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IPoolManager\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"callerConfirmation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"revokeRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"supportsInterface\",\n \"inputs\": [\n {\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"FairLaunchCreated\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_tokens\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_startsAt\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_endsAt\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"FairLaunchEnded\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_revenue\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_supply\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_endedAt\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleAdminChanged\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleGranted\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleRevoked\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AccessControlBadConfirmation\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"AccessControlUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"neededRole\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"CannotModifyLiquidityDuringFairLaunch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CannotSellTokenDuringFairLaunch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotPositionManager\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type EventLog,\n type ReadWriteContract,\n type ReadWriteAdapter,\n type HexString,\n createDrift,\n} from \"@delvtech/drift\";\nimport { FairLaunchAbi } from \"../abi/FairLaunch\";\n\nexport type FairLaunchABI = typeof FairLaunchAbi;\n\n/**\n * Client for interacting with the FairLaunch V1 contract in read-only mode\n * Provides methods to query fair launch information and status\n */\nexport class ReadFairLaunch {\n public readonly contract: ReadContract<FairLaunchABI>;\n\n /**\n * Creates a new ReadFairLaunch instance\n * @param address - The address of the FairLaunch contract\n * @param drift - Optional drift instance for contract interactions (creates new instance if not provided)\n * @throws Error if address is not provided\n */\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: FairLaunchAbi,\n address,\n });\n }\n\n /**\n * Gets the fair launch duration in seconds for a pool. Per-pool since v5\n * (the launcher chooses it in FlaunchParams.fairLaunchDuration).\n */\n async fairLaunchDuration({ poolId }: { poolId: HexString }) {\n const { startsAt, endsAt } = await this.fairLaunchInfo({ poolId });\n return Number(endsAt - startsAt);\n }\n\n /**\n * Gets information about a fair launch for a specific pool\n * @param poolId - The ID of the pool\n * @returns Promise<{initialTick: number, closed: boolean, endsAt: number}> - Fair launch details\n */\n fairLaunchInfo({ poolId }: { poolId: HexString }) {\n return this.contract.read(\"fairLaunchInfo\", {\n _poolId: poolId,\n });\n }\n\n /**\n * Checks if a fair launch is currently active\n * @param poolId - The ID of the pool\n * @returns Promise<boolean> - True if the fair launch is active (not closed and not expired), false otherwise\n */\n async isFairLaunchActive({ poolId }: { poolId: HexString }) {\n const { closed, endsAt } = await this.fairLaunchInfo({ poolId });\n if (closed) {\n return false;\n }\n\n if (new Date().getTime() / 1000 > endsAt) {\n return false;\n }\n\n return true;\n }\n}\n","// Generated from BurningBidWall (the deployed BidWall variant).\n// Source artifact: BurningBidWall.sol/BurningBidWall.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const BidwallAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_nativeToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_poolManager\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_protocolOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"checkStalePosition\",\n \"inputs\": [\n {\n \"name\": \"_poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"_currentTick\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"_nativeIsZero\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"closeBidWall\",\n \"inputs\": [\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeOwnershipHandover\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"deposit\",\n \"inputs\": [\n {\n \"name\": \"_poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"_ethSwapAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_currentTick\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"_nativeIsZero\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getRoleAdmin\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"grantRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"hasRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isBidWallEnabled\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"lastPoolTransaction\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_timestamp\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nativeToken\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownershipHandoverExpiresAt\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolInfo\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"disabled\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"initialized\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"tickLower\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"tickUpper\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"pendingETHFees\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"cumulativeSwapFees\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolManager\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IPoolManager\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"position\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amount0_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount1_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"pendingEth_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"callerConfirmation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"requestOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"revokeRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setDisabledState\",\n \"inputs\": [\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"_disable\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setStaleTimeWindow\",\n \"inputs\": [\n {\n \"name\": \"_staleTimeWindow\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setSwapFeeThreshold\",\n \"inputs\": [\n {\n \"name\": \"swapFeeThreshold\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"staleTimeWindow\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"supportsInterface\",\n \"inputs\": [\n {\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"BidWallClosed\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_eth\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BidWallDeposit\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_added\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_pending\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BidWallDisabledStateUpdated\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_disabled\",\n \"type\": \"bool\",\n \"indexed\": false,\n \"internalType\": \"bool\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BidWallInitialized\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_eth\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_tickLower\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"_tickUpper\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BidWallRepositioned\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_eth\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_tickLower\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"_tickUpper\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BidWallRewardsTransferred\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokens\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"FixedSwapFeeThresholdUpdated\",\n \"inputs\": [\n {\n \"name\": \"_newSwapFeeThreshold\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverCanceled\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverRequested\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"oldOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleAdminChanged\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleGranted\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleRevoked\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"StaleTimeWindowUpdated\",\n \"inputs\": [\n {\n \"name\": \"_staleTimeWindow\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AccessControlBadConfirmation\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"AccessControlUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"neededRole\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CallerIsNotCreator\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NewOwnerIsZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoHandoverRequest\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotPositionManager\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Unauthorized\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type EventLog,\n type ReadWriteContract,\n type ReadWriteAdapter,\n type HexString,\n createDrift,\n} from \"@delvtech/drift\";\nimport { BidwallAbi } from \"../abi/BidWall\";\n\nexport type BidwallABI = typeof BidwallAbi;\n\n/**\n * Client for interacting with the BidWall V1 contract in read-only mode\n * Provides methods to query bid wall positions and pool information\n */\nexport class ReadBidWall {\n public readonly contract: ReadContract<BidwallABI>;\n\n /**\n * Creates a new ReadBidWall instance\n * @param address - The address of the BidWall contract\n * @param drift - Optional drift instance for contract interactions (creates new instance if not provided)\n * @throws Error if address is not provided\n */\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: BidwallAbi,\n address,\n });\n }\n\n /**\n * Gets information about a bid wall position for a specific pool\n * @param poolId - The ID of the pool\n * @returns Promise<{amount0_: bigint, amount1_: bigint, pendingEth_: bigint}> - Position details including token amounts and pending ETH\n */\n position({ poolId }: { poolId: HexString }) {\n return this.contract.read(\"position\", {\n _poolId: poolId,\n });\n }\n\n /**\n * Gets configuration information about a pool's bid wall\n * @param poolId - The ID of the pool\n * @returns Promise<{tickLower: number, tickUpper: number}> - Pool configuration including tick range\n */\n poolInfo({ poolId }: { poolId: HexString }) {\n return this.contract.read(\"poolInfo\", {\n _poolId: poolId,\n });\n }\n}\n","// Generated from FlaunchZap (one-transaction launch entry point).\n// Source artifact: FlaunchZap.sol/FlaunchZap.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\n// NOTE: the 3-arg flaunch overload is stripped so drift name-keyed calls\n// resolve unambiguously; pass zeroed whitelist/airdrop/manager params instead.\nexport const FlaunchZapAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_positionManager\",\n \"type\": \"address\",\n \"internalType\": \"contract PositionManager\"\n },\n {\n \"name\": \"_flaunchContract\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n },\n {\n \"name\": \"_flETH\",\n \"type\": \"address\",\n \"internalType\": \"contract IFLETH\"\n },\n {\n \"name\": \"_poolSwap\",\n \"type\": \"address\",\n \"internalType\": \"contract PoolSwap\"\n },\n {\n \"name\": \"_treasuryManagerFactory\",\n \"type\": \"address\",\n \"internalType\": \"contract ITreasuryManagerFactory\"\n },\n {\n \"name\": \"_merkleAirdrop\",\n \"type\": \"address\",\n \"internalType\": \"contract IMerkleAirdrop\"\n },\n {\n \"name\": \"_whitelistFairLaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract WhitelistFairLaunch\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"receive\",\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"calculateFee\",\n \"inputs\": [\n {\n \"name\": \"_premineAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_slippage\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_initialPriceParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"ethRequired_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"deployAndInitializeManager\",\n \"inputs\": [\n {\n \"name\": \"_managerImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"_permissions\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"manager_\",\n \"type\": \"address\",\n \"internalType\": \"address payable\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flETH\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IFLETH\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunch\",\n \"inputs\": [\n {\n \"name\": \"_flaunchParams\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PositionManager.FlaunchParams\",\n \"components\": [\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"symbol\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"tokenUri\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"initialTokenFairLaunch\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"fairLaunchDuration\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"premineAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"creatorFeeAllocation\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"flaunchAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"initialPriceParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"feeCalculatorParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"_trustedFeeSigner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_premineSwapHookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"_whitelistParams\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FlaunchZap.WhitelistParams\",\n \"components\": [\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"merkleIPFSHash\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"maxTokens\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"_airdropParams\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FlaunchZap.AirdropParams\",\n \"components\": [\n {\n \"name\": \"airdropIndex\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"airdropAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"airdropEndTime\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"merkleIPFSHash\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ]\n },\n {\n \"name\": \"_treasuryManagerParams\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FlaunchZap.TreasuryManagerParams\",\n \"components\": [\n {\n \"name\": \"manager\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"permissions\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"initializeData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"depositData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"memecoin_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"ethSpent_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deployedManager_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunchContract\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"merkleAirdrop\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IMerkleAirdrop\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolSwap\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract PoolSwap\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"positionManager\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract PositionManager\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"treasuryManagerFactory\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract ITreasuryManagerFactory\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"whitelistFairLaunch\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract WhitelistFairLaunch\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"error\",\n \"name\": \"CreatorCannotBeZero\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InsufficientMemecoinsForAirdrop\",\n \"inputs\": []\n }\n] as const;\n","import axios from \"axios\";\nimport { IPFSParams } from \"../types\";\nimport { ApiBaseUrl } from \"../addresses\";\n\n// List of public IPFS gateways to cycle through\nconst IPFS_GATEWAYS = [\"https://ipfs.io/ipfs/\", \"https://dweb.link/ipfs/\"];\n\n// Counter to track the current gateway index\nlet currentGatewayIndex = 0;\n\nexport const resolveIPFS = (value: string): string => {\n if (value.startsWith(\"ipfs://\")) {\n const cid = value.slice(7);\n // Get the next gateway and increment the counter\n const gateway = IPFS_GATEWAYS[currentGatewayIndex];\n // Update the counter, cycling back to 0 when we reach the end\n currentGatewayIndex = (currentGatewayIndex + 1) % IPFS_GATEWAYS.length;\n return `${gateway}${cid}`;\n }\n return value;\n};\n\n/**\n * Every gateway URL an ipfs:// value can resolve to, so a fetch can fail over\n * when a public gateway rejects the request (they rate limit aggressively).\n * Non-IPFS values resolve to themselves.\n */\nexport const resolveIPFSCandidates = (value: string): string[] => {\n if (value.startsWith(\"ipfs://\")) {\n const cid = value.slice(7);\n return IPFS_GATEWAYS.map((gateway) => `${gateway}${cid}`);\n }\n return [value];\n};\n\n/**\n * Bounds for fetching coin metadata from a resolved tokenURI. The URI is\n * attacker-controlled onchain data, so cap the request rather than handing\n * axios an unbounded one.\n */\nconst METADATA_FETCH_TIMEOUT_MS = 15_000;\nconst METADATA_MAX_REDIRECTS = 3;\nconst METADATA_MAX_BYTES = 5 * 1024 * 1024;\n\n/**\n * Fetches token metadata from a resolved tokenURI over HTTP(S).\n *\n * @remarks\n * Applies a timeout, a redirect cap, and a response-size cap, and rejects\n * non-HTTP(S) protocols. It does NOT defend against SSRF: a coin's tokenURI\n * is arbitrary onchain data, so in a server context it can point at private\n * or link-local addresses. When calling this from a server with untrusted\n * coin addresses, route it through your own vetted fetch or egress policy\n * (see `setIPFSResolver` to swap the resolver, and the README).\n */\nexport const fetchTokenUriMetadata = async (url: string): Promise<any> => {\n if (!/^https?:\\/\\//i.test(url)) {\n throw new Error(`Unsupported tokenURI protocol: ${url.slice(0, 64)}`);\n }\n const response = await axios.get(url, {\n timeout: METADATA_FETCH_TIMEOUT_MS,\n maxRedirects: METADATA_MAX_REDIRECTS,\n maxContentLength: METADATA_MAX_BYTES,\n maxBodyLength: METADATA_MAX_BYTES,\n });\n return response.data;\n};\n\n/**\n * Fetches token metadata trying each candidate URL in order, so an ipfs://\n * tokenURI survives one public gateway refusing the request. Throws the last\n * error when every candidate fails.\n */\nexport const fetchTokenUriMetadataWithFallback = async (\n urls: string[]\n): Promise<any> => {\n let lastError: unknown;\n for (const url of urls) {\n try {\n return await fetchTokenUriMetadata(url);\n } catch (error) {\n lastError = error;\n }\n }\n throw lastError;\n};\n\n/** Decodes a base64 (optionally data-URL) image into bytes + mime type. */\nconst decodeBase64Image = (\n base64Image: string\n): { bytes: Uint8Array; mimeType: string } => {\n const base64Data = base64Image.split(\",\")[1] || base64Image;\n const byteCharacters = atob(base64Data);\n const bytes = new Uint8Array(byteCharacters.length);\n for (let i = 0; i < byteCharacters.length; i++) {\n bytes[i] = byteCharacters.charCodeAt(i);\n }\n\n let mimeType = \"image/png\"; // default\n if (base64Image.startsWith(\"data:\")) {\n mimeType = base64Image.split(\";\")[0].split(\":\")[1];\n }\n\n return { bytes, mimeType };\n};\n\n/**\n * Pins a token image + metadata through the ubi.fun API upload endpoint (the\n * same path the app uses: POST {apiUrl}/upload) and returns the tokenUri.\n * IP rate limited; 5MB image cap.\n */\nexport const uploadToUbiApi = async (params: {\n apiUrl: string;\n name: string;\n symbol: string;\n base64Image: string;\n description: string;\n websiteUrl?: string;\n discordUrl?: string;\n twitterUrl?: string;\n telegramUrl?: string;\n}): Promise<{ tokenUri: string; image: string }> => {\n const { bytes, mimeType } = decodeBase64Image(params.base64Image);\n\n const formData = new FormData();\n formData.append(\n \"image\",\n new Blob([bytes as BlobPart], { type: mimeType }),\n `image.${mimeType.split(\"/\")[1] ?? \"png\"}`\n );\n formData.append(\"name\", params.name);\n formData.append(\"symbol\", params.symbol);\n formData.append(\"description\", params.description);\n if (params.websiteUrl) {\n formData.append(\"website\", params.websiteUrl);\n }\n if (params.discordUrl) {\n formData.append(\"discord\", params.discordUrl);\n }\n if (params.twitterUrl) {\n formData.append(\"twitter\", params.twitterUrl);\n }\n if (params.telegramUrl) {\n formData.append(\"telegram\", params.telegramUrl);\n }\n\n try {\n const response = await axios.post(`${params.apiUrl}/upload`, formData);\n return {\n tokenUri: response.data.tokenUri,\n image: response.data.image,\n };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n throw new Error(\n `Failed to upload token metadata: ${\n error.response?.data?.error || error.message\n }`\n );\n }\n throw error;\n }\n};\n\n/**\n * Pins the token image + metadata through the ubi.fun API and returns the\n * `ipfs://` tokenUri to pass into a flaunch call.\n *\n * To host metadata yourself (any provider, any storage), skip this entirely:\n * upload however you like, then pass the resulting URI straight to\n * `flaunch({ tokenUri })`.\n */\nexport const generateTokenUri = async (\n name: string,\n symbol: string,\n params: IPFSParams & { chainId: number }\n) => {\n const apiUrl = ApiBaseUrl[params.chainId];\n if (!apiUrl) {\n throw new Error(\n `No ubi.fun API for chain ${params.chainId}; pin the metadata yourself and pass flaunch({ tokenUri })`\n );\n }\n\n const { tokenUri } = await uploadToUbiApi({\n apiUrl,\n name,\n symbol,\n base64Image: params.metadata.base64Image,\n description: params.metadata.description,\n websiteUrl: params.metadata.websiteUrl,\n discordUrl: params.metadata.discordUrl,\n twitterUrl: params.metadata.twitterUrl,\n telegramUrl: params.metadata.telegramUrl,\n });\n\n return tokenUri;\n};\n","import { concat, keccak256, pad, toHex } from \"viem\";\nimport { PoolKey } from \"../types\";\n\n// our min/max tick range that is valid for the tick spacing (60)\nexport const TickFinder = {\n MIN_TICK: -887220,\n MAX_TICK: 887220,\n};\n\nexport const Q96 = 2n ** 96n;\nexport const Q192 = 2n ** 192n;\n\nexport const TICK_SPACING = 60;\n\nexport const getPoolId = (poolKey: PoolKey) => {\n // Pack the data in the same order as Solidity struct\n const packed = concat([\n pad(poolKey.currency0, { size: 32 }), // address padded to 32 bytes\n pad(poolKey.currency1, { size: 32 }), // address padded to 32 bytes\n pad(toHex(poolKey.fee), { size: 32 }), // uint24 padded to 32 bytes\n pad(toHex(poolKey.tickSpacing), { size: 32 }), // int24 padded to 32 bytes\n pad(poolKey.hooks, { size: 32 }), // address padded to 32 bytes\n ]);\n\n return keccak256(packed);\n};\n\nexport const orderPoolKey = (poolKey: PoolKey) => {\n // Compare lowercased so checksummed input cannot flip the v4 numeric ordering\n const [currency0, currency1] =\n poolKey.currency0.toLowerCase() < poolKey.currency1.toLowerCase()\n ? [poolKey.currency0, poolKey.currency1]\n : [poolKey.currency1, poolKey.currency0];\n\n return {\n ...poolKey,\n currency0,\n currency1,\n };\n};\n\nexport const getValidTick = ({\n tick,\n tickSpacing,\n roundDown = true,\n}: {\n tick: number;\n tickSpacing: number;\n roundDown?: boolean;\n}) => {\n // If the tick is already valid, exit early\n if (tick % tickSpacing === 0) {\n return tick;\n }\n\n // Division that rounds towards zero (like Solidity)\n let validTick = Math.trunc(tick / tickSpacing) * tickSpacing;\n\n // Handle negative ticks (Solidity behavior)\n if (tick < 0 && tick % tickSpacing !== 0) {\n validTick -= tickSpacing;\n }\n\n // If not rounding down, add TICK_SPACING to get the upper tick\n if (!roundDown) {\n validTick += tickSpacing;\n }\n\n return validTick;\n};\n\n// Rounds up or down to the nearest tick\nexport const getNearestUsableTick = ({\n tick,\n tickSpacing,\n}: {\n tick: number;\n tickSpacing: number;\n}): number => {\n const rounded = Math.round(tick / tickSpacing) * tickSpacing;\n return Math.max(TickFinder.MIN_TICK, Math.min(TickFinder.MAX_TICK, rounded));\n};\n\nconst getAmount0ForLiquidity = (\n sqrtRatioAX96: bigint,\n sqrtRatioBX96: bigint,\n liquidity: bigint\n) => {\n let [sqrtRatioA, sqrtRatioB] = [sqrtRatioAX96, sqrtRatioBX96];\n\n if (sqrtRatioA > sqrtRatioB) {\n [sqrtRatioA, sqrtRatioB] = [sqrtRatioB, sqrtRatioA];\n }\n\n const leftShiftedLiquidity = liquidity << 96n;\n const sqrtDiff = sqrtRatioB - sqrtRatioA;\n const multipliedRes = leftShiftedLiquidity * sqrtDiff;\n const numerator = multipliedRes / sqrtRatioB;\n const amount0 = numerator / sqrtRatioA;\n\n return amount0;\n};\n\nconst getAmount1ForLiquidity = (\n sqrtRatioAX96: bigint,\n sqrtRatioBX96: bigint,\n liquidity: bigint\n) => {\n let [sqrtRatioA, sqrtRatioB] = [sqrtRatioAX96, sqrtRatioBX96];\n\n if (sqrtRatioA > sqrtRatioB) {\n [sqrtRatioA, sqrtRatioB] = [sqrtRatioB, sqrtRatioA];\n }\n\n const sqrtDiff = sqrtRatioB - sqrtRatioA;\n const multipliedRes = liquidity * sqrtDiff;\n\n const amount1 = multipliedRes / 2n ** 96n;\n\n return amount1;\n};\n\nexport const getSqrtPriceX96FromTick = (tick: number): bigint => {\n const absTick = tick < 0 ? BigInt(-tick) : BigInt(tick);\n if (absTick > TickFinder.MAX_TICK) {\n throw new Error(\"Tick out of range\");\n }\n\n let ratio =\n (absTick & 1n) !== 0n\n ? 0xfffcb933bd6fad37aa2d162d1a594001n\n : 0x100000000000000000000000000000000n;\n\n if ((absTick & 2n) !== 0n)\n ratio = (ratio * 0xfff97272373d413259a46990580e213an) >> 128n;\n if ((absTick & 4n) !== 0n)\n ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdccn) >> 128n;\n if ((absTick & 8n) !== 0n)\n ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0n) >> 128n;\n if ((absTick & 16n) !== 0n)\n ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644n) >> 128n;\n if ((absTick & 32n) !== 0n)\n ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0n) >> 128n;\n if ((absTick & 64n) !== 0n)\n ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861n) >> 128n;\n if ((absTick & 128n) !== 0n)\n ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053n) >> 128n;\n if ((absTick & 256n) !== 0n)\n ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4n) >> 128n;\n if ((absTick & 512n) !== 0n)\n ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54n) >> 128n;\n if ((absTick & 1024n) !== 0n)\n ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3n) >> 128n;\n if ((absTick & 2048n) !== 0n)\n ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9n) >> 128n;\n if ((absTick & 4096n) !== 0n)\n ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825n) >> 128n;\n if ((absTick & 8192n) !== 0n)\n ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5n) >> 128n;\n if ((absTick & 16384n) !== 0n)\n ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7n) >> 128n;\n if ((absTick & 32768n) !== 0n)\n ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6n) >> 128n;\n if ((absTick & 65536n) !== 0n)\n ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9n) >> 128n;\n if ((absTick & 131072n) !== 0n)\n ratio = (ratio * 0x5d6af8dedb81196699c329225ee604n) >> 128n;\n if ((absTick & 262144n) !== 0n)\n ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98n) >> 128n;\n if ((absTick & 524288n) !== 0n)\n ratio = (ratio * 0x48a170391f7dc42444e8fa2n) >> 128n;\n\n if (tick > 0) {\n ratio = (2n ** 256n - 1n) / ratio;\n }\n\n // Convert from Q128.128 to Q128.96\n const resultShifted = ratio >> 32n;\n if (ratio % (1n << 32n) === 0n) {\n return resultShifted;\n }\n return resultShifted + 1n;\n};\n\nexport const calculateUnderlyingTokenBalances = (\n liquidity: bigint,\n tickLower: number,\n tickUpper: number,\n tickCurrent: number\n): { amount0: bigint; amount1: bigint } => {\n const sqrtPriceCurrentX96 = getSqrtPriceX96FromTick(tickCurrent);\n const sqrtPriceLowerX96 = getSqrtPriceX96FromTick(tickLower);\n const sqrtPriceUpperX96 = getSqrtPriceX96FromTick(tickUpper);\n\n let amount0 = 0n;\n let amount1 = 0n;\n\n if (sqrtPriceCurrentX96 <= sqrtPriceLowerX96) {\n // Current price is below the position range\n amount0 = getAmount0ForLiquidity(\n sqrtPriceLowerX96,\n sqrtPriceUpperX96,\n liquidity\n );\n } else if (sqrtPriceCurrentX96 < sqrtPriceUpperX96) {\n // Current price is within the position range\n amount0 = getAmount0ForLiquidity(\n sqrtPriceCurrentX96,\n sqrtPriceUpperX96,\n liquidity\n );\n amount1 = getAmount1ForLiquidity(\n sqrtPriceLowerX96,\n sqrtPriceCurrentX96,\n liquidity\n );\n } else {\n // Current price is above the position range\n amount1 = getAmount1ForLiquidity(\n sqrtPriceLowerX96,\n sqrtPriceUpperX96,\n liquidity\n );\n }\n\n return { amount0, amount1 };\n};\n\n// Helper function to convert price ratio to tick with decimal handling\nexport const priceRatioToTick = ({\n priceInput,\n isDirection1Per0,\n decimals0,\n decimals1,\n spacing,\n shouldGetNearestUsableTick = true,\n}: {\n priceInput: string;\n isDirection1Per0: boolean;\n decimals0: number;\n decimals1: number;\n spacing: number;\n shouldGetNearestUsableTick?: boolean;\n}): number => {\n if (!priceInput || isNaN(Number(priceInput))) return 0;\n\n const inputPrice = Number(priceInput);\n\n try {\n // For Uniswap v3/v4, the tick represents price as: price = 1.0001^tick\n // where price = amount1/amount0 in their raw decimal format\n\n let priceRatio: number;\n\n if (isDirection1Per0) {\n // Input is token1 per token0 (e.g., memecoin per USDC)\n // Convert from human-readable to raw: divide by (10^decimals0 / 10^decimals1)\n priceRatio = inputPrice / Math.pow(10, decimals0 - decimals1);\n } else {\n // Input is token0 per token1 (e.g., USDC per memecoin)\n // Invert to get token1 per token0, then convert to raw\n priceRatio = 1 / inputPrice / Math.pow(10, decimals0 - decimals1);\n }\n\n // Calculate tick: tick = log(price) / log(1.0001)\n const tick = Math.log(priceRatio) / Math.log(1.0001);\n\n if (shouldGetNearestUsableTick) {\n return getValidTick({\n tick: Math.round(tick),\n tickSpacing: spacing,\n });\n } else {\n return Math.round(tick);\n }\n } catch (error) {\n console.error(\"Error converting price to tick:\", error);\n // Fallback to basic calculation\n const rawTick = Math.floor(Math.log(inputPrice) / Math.log(1.0001));\n if (shouldGetNearestUsableTick) {\n return getValidTick({\n tick: rawTick,\n tickSpacing: spacing,\n });\n } else {\n return rawTick;\n }\n }\n};\n\n/**\n * Accurate liquidity calculation using proper Uniswap v3/v4 math\n */\nexport const getLiquidityFromAmounts = (params: {\n currentTick: number;\n tickLower: number;\n tickUpper: number;\n amount0: bigint;\n amount1: bigint;\n}) => {\n const sqrtRatioCurrentX96 = getSqrtPriceX96FromTick(params.currentTick);\n let sqrtRatioAX96 = getSqrtPriceX96FromTick(params.tickLower);\n let sqrtRatioBX96 = getSqrtPriceX96FromTick(params.tickUpper);\n\n if (sqrtRatioAX96 > sqrtRatioBX96) {\n [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96];\n }\n\n if (sqrtRatioCurrentX96 <= sqrtRatioAX96) {\n return maxLiquidityForAmount0Precise(\n sqrtRatioAX96,\n sqrtRatioBX96,\n params.amount0\n );\n } else if (sqrtRatioCurrentX96 < sqrtRatioBX96) {\n const liquidity0 = maxLiquidityForAmount0Precise(\n sqrtRatioCurrentX96,\n sqrtRatioBX96,\n params.amount0\n );\n const liquidity1 = maxLiquidityForAmount1(\n sqrtRatioAX96,\n sqrtRatioCurrentX96,\n params.amount1\n );\n return liquidity0 < liquidity1 ? liquidity0 : liquidity1;\n } else {\n return maxLiquidityForAmount1(sqrtRatioAX96, sqrtRatioBX96, params.amount1);\n }\n};\n\n/**\n * Returns a precise maximum amount of liquidity received for a given amount of token 0 by dividing by Q64 instead of Q96 in the intermediate step,\n * and shifting the subtracted ratio left by 32 bits.\n * @param sqrtRatioAX96 The price at the lower boundary\n * @param sqrtRatioBX96 The price at the upper boundary\n * @param amount0 The token0 amount\n * @returns liquidity for amount0, precise\n */\nexport function maxLiquidityForAmount0Precise(\n sqrtRatioAX96: bigint,\n sqrtRatioBX96: bigint,\n amount0: bigint\n): bigint {\n if (sqrtRatioAX96 > sqrtRatioBX96) {\n [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96];\n }\n\n // Handle edge case where sqrt ratios are equal (division by zero)\n if (sqrtRatioAX96 === sqrtRatioBX96) {\n return 0n;\n }\n\n const Q96 = 2n ** 96n;\n const numerator = amount0 * sqrtRatioAX96 * sqrtRatioBX96;\n const denominator = Q96 * (sqrtRatioBX96 - sqrtRatioAX96);\n\n return numerator / denominator;\n}\n\n/**\n * Computes the maximum amount of liquidity received for a given amount of token1\n * @param sqrtRatioAX96 The price at the lower tick boundary\n * @param sqrtRatioBX96 The price at the upper tick boundary\n * @param amount1 The token1 amount\n * @returns liquidity for amount1\n */\nexport function maxLiquidityForAmount1(\n sqrtRatioAX96: bigint,\n sqrtRatioBX96: bigint,\n amount1: bigint\n): bigint {\n if (sqrtRatioAX96 > sqrtRatioBX96) {\n [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96];\n }\n\n // Handle edge case where sqrt ratios are equal (division by zero)\n if (sqrtRatioAX96 === sqrtRatioBX96) {\n return 0n;\n }\n\n const Q96 = 2n ** 96n;\n return (amount1 * Q96) / (sqrtRatioBX96 - sqrtRatioAX96);\n}\n\n/**\n * Calculate the actual amounts needed for a given liquidity\n * This prevents MaximumAmountExceeded errors by ensuring we provide sufficient maximums\n */\nexport const getAmountsForLiquidity = (params: {\n currentTick: number;\n tickLower: number;\n tickUpper: number;\n liquidity: bigint;\n}): { amount0: bigint; amount1: bigint } => {\n // Handle zero liquidity case\n if (params.liquidity === 0n) {\n return { amount0: 0n, amount1: 0n };\n }\n\n const sqrtRatioCurrentX96 = getSqrtPriceX96FromTick(params.currentTick);\n let sqrtRatioAX96 = getSqrtPriceX96FromTick(params.tickLower);\n let sqrtRatioBX96 = getSqrtPriceX96FromTick(params.tickUpper);\n\n if (sqrtRatioAX96 > sqrtRatioBX96) {\n [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96];\n }\n\n let amount0 = 0n;\n let amount1 = 0n;\n\n if (sqrtRatioCurrentX96 <= sqrtRatioAX96) {\n // Current price is below the range, only token0 needed\n amount0 = getAmount0ForLiquidity(\n sqrtRatioAX96,\n sqrtRatioBX96,\n params.liquidity\n );\n } else if (sqrtRatioCurrentX96 < sqrtRatioBX96) {\n // Current price is within the range, need both tokens\n amount0 = getAmount0ForLiquidity(\n sqrtRatioCurrentX96,\n sqrtRatioBX96,\n params.liquidity\n );\n amount1 = getAmount1ForLiquidity(\n sqrtRatioAX96,\n sqrtRatioCurrentX96,\n params.liquidity\n );\n } else {\n // Current price is above the range, only token1 needed\n amount1 = getAmount1ForLiquidity(\n sqrtRatioAX96,\n sqrtRatioBX96,\n params.liquidity\n );\n }\n\n return { amount0, amount1 };\n};\n","import { encodeAbiParameters, isAddress, zeroAddress, type Address } from \"viem\";\nimport { PoolKey } from \"../types\";\nimport { USDC_ADDRESS } from \"../addresses\";\nimport { orderPoolKey, Q192 } from \"./univ4\";\n\n/**\n * Swap-building helpers shared by the quoter and PoolSwap clients. Pool keys,\n * hook data and direction mirror the ubi.fun app and MCP server exactly; the\n * SDK's price bound additionally anchors on the quoted end price so an\n * exact-input trade's own impact does not eat the slippage budget.\n */\n\n/**\n * Encodes the referrer for the hook: 5% of the swap fee accrues on-chain to\n * this address (claimable from the ReferralEscrow). '0x' means no referrer and\n * the share cascades down the fee split instead. The SAME hookData must be\n * used for the quote and the swap for them to match.\n */\nexport function referrerHookData(\n referrer: Address | undefined\n): `0x${string}` {\n return referrer && isAddress(referrer) && referrer !== zeroAddress\n ? encodeAbiParameters([{ type: \"address\" }], [referrer])\n : \"0x\";\n}\n\n/** Builds the v4 pool key for a coin: USDC on the cash side, hook fixed by the protocol. */\nexport function coinPoolKey(\n coinAddress: Address,\n positionManagerAddress: Address\n): PoolKey {\n return orderPoolKey({\n currency0: USDC_ADDRESS,\n currency1: coinAddress,\n fee: 0,\n tickSpacing: 60,\n hooks: positionManagerAddress,\n });\n}\n\n/** True when USDC sorts as currency0 for this coin's pool. */\nexport function usdcIsCurrencyZero(coinAddress: Address): boolean {\n return coinAddress.toLowerCase() > USDC_ADDRESS.toLowerCase();\n}\n\n/**\n * v4 swap direction. Buys spend USDC for the coin: when USDC is currency0\n * that's a zeroForOne swap, otherwise the reverse.\n */\nexport function swapDirection(\n side: \"buy\" | \"sell\",\n coinAddress: Address\n): boolean {\n return side === \"buy\"\n ? usdcIsCurrencyZero(coinAddress)\n : !usdcIsCurrencyZero(coinAddress);\n}\n\n// Uniswap v4 sqrt price bounds (TickMath.MIN_SQRT_PRICE / MAX_SQRT_PRICE, exclusive).\nconst MIN_SQRT_PRICE = 4_295_128_739n + 1n;\nconst MAX_SQRT_PRICE =\n 1_461_446_703_485_210_103_287_273_052_203_988_822_378_723_970_342n - 1n;\n\nfunction bigintSqrt(value: bigint): bigint {\n if (value < 2n) {\n return value;\n }\n let current = value;\n let next = (current + value / current) / 2n;\n while (next < current) {\n current = next;\n next = (current + value / current) / 2n;\n }\n return current;\n}\n\n/**\n * Expected pool sqrt price after an exact-input fill, derived from the quoted\n * amounts through the constant-liquidity identity amountOut/amountIn =\n * sqrtP_start * sqrtP_end (inverted for oneForZero). Hook fees only skew the\n * estimate toward the permissive side, so a slippage margin applied on top of\n * it never lands tighter than the real fill. Falls back to the spot price when\n * a quote leg is zero or the estimate lands on the wrong side of spot.\n */\nexport function expectedEndSqrtPriceX96({\n current,\n zeroForOne,\n amountIn,\n amountOut,\n}: {\n current: bigint;\n zeroForOne: boolean;\n amountIn: bigint;\n amountOut: bigint;\n}): bigint {\n if (current === 0n || amountIn <= 0n || amountOut <= 0n) {\n return current;\n }\n const end = zeroForOne\n ? (amountOut * Q192) / (amountIn * current)\n : (amountIn * Q192) / (amountOut * current);\n if (zeroForOne) {\n return end < current ? end : current;\n }\n return end > current ? end : current;\n}\n\n/**\n * Slippage bound as a sqrt price limit: the pool price may move at most\n * `slippageBps` beyond `current` (pass the expected end price for exact-input\n * swaps, so the trade's own quoted impact is not counted against the budget)\n * before the swap stops filling.\n */\nexport function sqrtPriceLimit({\n current,\n zeroForOne,\n slippageBps,\n}: {\n current: bigint;\n zeroForOne: boolean;\n slippageBps: number;\n}): bigint {\n if (\n !Number.isInteger(slippageBps) ||\n slippageBps < 0 ||\n slippageBps >= 10_000\n ) {\n throw new Error(\n `slippageBps must be an integer in [0, 10000), got ${slippageBps}`\n );\n }\n const factor = BigInt(\n zeroForOne ? 10_000 - slippageBps : 10_000 + slippageBps\n );\n const multiplier = bigintSqrt((factor * 10n ** 18n) / 10_000n);\n const limit = (current * multiplier) / 10n ** 9n;\n return zeroForOne\n ? limit > MIN_SQRT_PRICE\n ? limit\n : MIN_SQRT_PRICE\n : limit < MAX_SQRT_PRICE\n ? limit\n : MAX_SQRT_PRICE;\n}\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type ReadWriteContract,\n type ReadWriteAdapter,\n type HexString,\n createDrift,\n} from \"@delvtech/drift\";\nimport { FlaunchZapAbi } from \"../abi/FlaunchZap\";\nimport { parseUnits, zeroAddress, zeroHash } from \"viem\";\nimport { encodeAbiParameters } from \"viem\";\nimport { generateTokenUri } from \"../helpers/ipfs\";\nimport { referrerHookData } from \"../utils/swap\";\nimport { IPFSParams } from \"../types\";\nimport { AddressFeeSplitManagerAddress } from \"../addresses\";\n\nexport type FlaunchZapABI = typeof FlaunchZapAbi;\n\nexport interface FlaunchParams {\n name: string;\n symbol: string;\n tokenUri: string;\n /** Percent of supply (0-95) sold at the fixed fair launch price first. 0 for no fair launch. */\n fairLaunchPercent: number;\n /** Fair launch window in seconds (0 when fairLaunchPercent is 0). */\n fairLaunchDuration: number;\n /** Initial market cap in whole USD; $10,000 is the on-chain minimum and currently fee-free. */\n initialMarketCapUSD: number;\n /** Receives the Flaunch NFT (the revenue claim) and the creator revenue. */\n creator: Address;\n /** Creator vs floor-bid split of the creator share, 0-100 (the app defaults to 90). */\n creatorFeeAllocationPercent: number;\n /** 0 (or omit) to launch now, or a start timestamp within 30 days. */\n flaunchAt?: bigint;\n /** Coins the creator buys at the launch price in the same transaction. */\n premineAmount?: bigint;\n /** Referrer credited on the premine swap fee (only relevant with premineAmount). */\n premineReferrer?: Address;\n treasuryManagerParams?: {\n manager?: Address;\n /** Permissions contract for a newly deployed manager; zero address = open. */\n permissions?: Address;\n initializeData?: HexString;\n depositData?: HexString;\n };\n /** Restrict the fair launch to a Merkle whitelist (zero root = open launch). */\n whitelistParams?: {\n merkleRoot: HexString;\n merkleIPFSHash: string;\n maxTokens: bigint;\n };\n /** Reserve part of the supply for a launch airdrop (zero values = none). */\n airdropParams?: {\n airdropIndex: bigint;\n airdropAmount: bigint;\n airdropEndTime: bigint;\n merkleRoot: HexString;\n merkleIPFSHash: string;\n };\n}\n\nexport interface FlaunchIPFSParams\n extends Omit<FlaunchParams, \"tokenUri\">,\n IPFSParams {}\n\nexport interface FlaunchWithSplitManagerParams\n extends Omit<FlaunchParams, \"treasuryManagerParams\"> {\n /**\n * Other recipients and their percentages (0-100, fractional allowed, 5\n * decimal places of precision). The creator automatically receives the exact\n * remainder to 100%. A recipient can be an X-handle escrow address\n * (ReadXHandleClaims.escrowAddress) to pay a handle that has not claimed yet.\n */\n splitReceivers: {\n address: Address;\n percent: number;\n }[];\n}\n\nexport interface FlaunchWithSplitManagerIPFSParams\n extends Omit<FlaunchWithSplitManagerParams, \"tokenUri\">,\n IPFSParams {}\n\n/**\n * Base client for interacting with the FlaunchZap contract in read-only mode.\n * The zap is the one-transaction launch entry point: token, Uniswap v4 pool,\n * locked liquidity, fair launch, and the creator revenue stream.\n */\nexport class ReadFlaunchZap {\n drift: Drift;\n chainId: number;\n public readonly contract: ReadContract<FlaunchZapABI>;\n public readonly TOTAL_SUPPLY = 100n * 10n ** 27n; // 100 Billion tokens in wei\n\n constructor(chainId: number, address: Address, drift: Drift = createDrift()) {\n this.chainId = chainId;\n this.drift = drift;\n if (!address) {\n throw new Error(\"Address is required\");\n }\n this.contract = drift.contract({\n abi: FlaunchZapAbi,\n address,\n });\n }\n\n /**\n * The msg.value required to flaunch: covers the premine purchase when there\n * is one, plus the flaunch fee for market caps at or above the on-chain\n * threshold. On Arc msg.value is native USDC at 18 decimals. Always send\n * exactly this; sending less reverts with InsufficientFlaunchFee.\n */\n valueRequiredToFlaunch(params: {\n premineAmount: bigint;\n initialPriceParams: HexString;\n slippagePercent?: number;\n }) {\n const slippagePercent = params.slippagePercent ?? 0;\n if (\n !Number.isFinite(slippagePercent) ||\n slippagePercent < 0 ||\n slippagePercent > 100\n ) {\n throw new Error(\n `slippagePercent must be between 0 and 100, got ${slippagePercent}`\n );\n }\n return this.contract.read(\"calculateFee\", {\n _premineAmount: params.premineAmount ?? 0n,\n _slippage: BigInt(Math.round(slippagePercent * 100)),\n _initialPriceParams: params.initialPriceParams,\n });\n }\n}\n\n/**\n * Extended client for interacting with the FlaunchZap contract with write capabilities\n */\nexport class ReadWriteFlaunchZap extends ReadFlaunchZap {\n declare contract: ReadWriteContract<FlaunchZapABI>;\n\n constructor(\n chainId: number,\n address: Address,\n drift: Drift<ReadWriteAdapter> = createDrift()\n ) {\n super(chainId, address, drift);\n }\n\n /**\n * Flaunches a new token: creates the coin, its pool, locked liquidity, the\n * fair launch (if any), and the creator revenue stream in one transaction\n * @param params - Parameters for the flaunch\n * @returns Transaction response for the flaunch creation\n */\n async flaunch(params: FlaunchParams) {\n if (params.fairLaunchPercent < 0 || params.fairLaunchPercent > 95) {\n throw new Error(\"fairLaunchPercent must be between 0 and 95\");\n }\n if (\n !Number.isFinite(params.creatorFeeAllocationPercent) ||\n params.creatorFeeAllocationPercent < 0 ||\n params.creatorFeeAllocationPercent > 100\n ) {\n throw new Error(\n `creatorFeeAllocationPercent must be between 0 and 100, got ${params.creatorFeeAllocationPercent}`\n );\n }\n if (params.fairLaunchPercent > 0 && params.fairLaunchDuration <= 0) {\n throw new Error(\n \"fairLaunchDuration (seconds) is required when fairLaunchPercent > 0\"\n );\n }\n\n const initialMCapInUSDCWei = parseUnits(\n params.initialMarketCapUSD.toString(),\n 6\n );\n const initialPriceParams = encodeAbiParameters(\n [\n {\n type: \"uint256\",\n },\n ],\n [initialMCapInUSDCWei]\n );\n\n const fairLaunchInBps = BigInt(Math.round(params.fairLaunchPercent * 100));\n const creatorFeeAllocationInBps = Math.round(\n params.creatorFeeAllocationPercent * 100\n );\n\n const value = await this.valueRequiredToFlaunch({\n premineAmount: params.premineAmount ?? 0n,\n initialPriceParams,\n slippagePercent: params.premineAmount ? 5 : 0,\n });\n\n const treasuryManagerParams = {\n manager: params.treasuryManagerParams?.manager ?? zeroAddress,\n permissions: params.treasuryManagerParams?.permissions ?? zeroAddress,\n initializeData: params.treasuryManagerParams?.initializeData ?? \"0x\",\n depositData: params.treasuryManagerParams?.depositData ?? \"0x\",\n };\n\n return this.contract.write(\n \"flaunch\",\n {\n _flaunchParams: {\n name: params.name,\n symbol: params.symbol,\n tokenUri: params.tokenUri,\n initialTokenFairLaunch:\n (this.TOTAL_SUPPLY * fairLaunchInBps) / 10_000n,\n fairLaunchDuration: BigInt(params.fairLaunchDuration),\n premineAmount: params.premineAmount ?? 0n,\n creator: params.creator,\n creatorFeeAllocation: creatorFeeAllocationInBps,\n flaunchAt: params.flaunchAt ?? 0n,\n initialPriceParams,\n feeCalculatorParams: \"0x\",\n },\n _trustedFeeSigner: zeroAddress,\n _premineSwapHookData: referrerHookData(params.premineReferrer),\n _treasuryManagerParams: treasuryManagerParams,\n _whitelistParams: params.whitelistParams ?? {\n merkleRoot: zeroHash,\n merkleIPFSHash: \"\",\n maxTokens: 0n,\n },\n _airdropParams: params.airdropParams ?? {\n airdropIndex: 0n,\n airdropAmount: 0n,\n airdropEndTime: 0n,\n merkleRoot: zeroHash,\n merkleIPFSHash: \"\",\n },\n },\n {\n value,\n }\n );\n }\n\n /**\n * Flaunches a new token, first pinning the image + metadata through the\n * ubi.fun API to produce the tokenUri. To host the metadata yourself, pin\n * it however you like and call `flaunch({ tokenUri })` instead.\n */\n async flaunchIPFS(params: FlaunchIPFSParams) {\n const tokenUri = await generateTokenUri(params.name, params.symbol, {\n chainId: this.chainId,\n metadata: params.metadata,\n });\n\n return this.flaunch({\n ...params,\n tokenUri,\n });\n }\n\n /**\n * Flaunches a new token that splits the creator revenue between the creator\n * and a list of recipients through the approved AddressFeeSplitManager.\n * Shares are fixed at launch (5-decimal precision); the revenue NFT is\n * deposited into the manager escrow rather than staying in the creator's\n * wallet.\n *\n * Same layout the app uses: creatorShare/ownerShare are 0 and every payee is\n * a recipient row (the manager requires recipient shares to total exactly\n * 100%); the creator's row is the exact remainder after the listed\n * receivers, so rounding can never brick the launch.\n * @returns Transaction response for the flaunch creation\n */\n async flaunchWithSplitManager(params: FlaunchWithSplitManagerParams) {\n const VALID_SHARE_TOTAL = 100_00000n; // 100% at 5 decimals\n const toShare = (percent: number) => BigInt(Math.round(percent * 100000));\n\n const receiverShares = params.splitReceivers.map((receiver) => {\n if (\n !Number.isFinite(receiver.percent) ||\n receiver.percent <= 0 ||\n receiver.percent >= 100\n ) {\n throw new Error(\n `splitReceiver percent must be in (0, 100), got ${receiver.percent} for ${receiver.address}`\n );\n }\n return {\n recipient: receiver.address,\n share: toShare(receiver.percent),\n };\n });\n\n const totalReceiverShares = receiverShares.reduce(\n (acc, curr) => acc + curr.share,\n 0n\n );\n\n if (totalReceiverShares >= VALID_SHARE_TOTAL) {\n throw new Error(\n \"splitReceivers total 100% or more; the creator must keep a share\"\n );\n }\n\n const recipientShares = [\n // The creator receives the exact remainder to 100%.\n {\n recipient: params.creator,\n share: VALID_SHARE_TOTAL - totalReceiverShares,\n },\n ...receiverShares,\n ];\n\n const initializeData = encodeAbiParameters(\n [\n {\n type: \"tuple\",\n name: \"params\",\n components: [\n { type: \"uint256\", name: \"creatorShare\" },\n { type: \"uint256\", name: \"ownerShare\" },\n {\n type: \"tuple[]\",\n name: \"recipientShares\",\n components: [\n { type: \"address\", name: \"recipient\" },\n { type: \"uint256\", name: \"share\" },\n ],\n },\n ],\n },\n ],\n [\n {\n creatorShare: 0n,\n ownerShare: 0n,\n recipientShares,\n },\n ]\n );\n\n return this.flaunch({\n ...params,\n treasuryManagerParams: {\n manager: AddressFeeSplitManagerAddress[this.chainId],\n initializeData,\n depositData: \"0x\",\n },\n });\n }\n\n /**\n * Flaunches a new token that splits the creator fees to the creator and a\n * list of recipients, pinning the token metadata through the ubi.fun API\n * first. To host the metadata yourself, pin it however you like and call\n * `flaunchWithSplitManager({ tokenUri })` instead.\n * @returns Promise resolving to the transaction response for the flaunch creation\n */\n async flaunchIPFSWithSplitManager(params: FlaunchWithSplitManagerIPFSParams) {\n const tokenUri = await generateTokenUri(params.name, params.symbol, {\n chainId: this.chainId,\n metadata: params.metadata,\n });\n\n return this.flaunchWithSplitManager({\n ...params,\n tokenUri,\n });\n }\n}\n","// Generated from Flaunch (ERC721 revenue stream).\n// Source artifact: Flaunch.sol/Flaunch.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const FlaunchAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_memecoinImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_baseURI\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_CREATOR_ALLOCATION\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_FAIR_LAUNCH_TOKENS\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_SCHEDULE_DURATION\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"approve\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balanceOf\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"baseURI\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"burn\",\n \"inputs\": [\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeOwnershipHandover\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunch\",\n \"inputs\": [\n {\n \"name\": \"_params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PositionManager.FlaunchParams\",\n \"components\": [\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"symbol\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"tokenUri\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"initialTokenFairLaunch\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"fairLaunchDuration\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"premineAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"creatorFeeAllocation\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"flaunchAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"initialPriceParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"feeCalculatorParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"memecoin_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"memecoinTreasury_\",\n \"type\": \"address\",\n \"internalType\": \"address payable\"\n },\n {\n \"name\": \"tokenId_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getApproved\",\n \"inputs\": [\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialize\",\n \"inputs\": [\n {\n \"name\": \"_positionManager\",\n \"type\": \"address\",\n \"internalType\": \"contract PositionManager\"\n },\n {\n \"name\": \"_memecoinTreasuryImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isApprovedForAll\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"memecoin\",\n \"inputs\": [\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"memecoinImplementation\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"memecoinTreasury\",\n \"inputs\": [\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address payable\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"memecoinTreasuryImplementation\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"name\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nextTokenId\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownerOf\",\n \"inputs\": [\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownershipHandoverExpiresAt\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolId\",\n \"inputs\": [\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"positionManager\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract PositionManager\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"requestOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"safeTransferFrom\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"safeTransferFrom\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setApprovalForAll\",\n \"inputs\": [\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"isApproved\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setBaseURI\",\n \"inputs\": [\n {\n \"name\": \"_baseURI\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setMemecoinImplementation\",\n \"inputs\": [\n {\n \"name\": \"_memecoinImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setMemecoinMetadata\",\n \"inputs\": [\n {\n \"name\": \"_memecoin\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"name_\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"symbol_\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setMemecoinTreasuryImplementation\",\n \"inputs\": [\n {\n \"name\": \"_memecoinTreasuryImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"supportsInterface\",\n \"inputs\": [\n {\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"symbol\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenId\",\n \"inputs\": [\n {\n \"name\": \"_memecoin\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenURI\",\n \"inputs\": [\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferFrom\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"Approval\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ApprovalForAll\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"isApproved\",\n \"type\": \"bool\",\n \"indexed\": false,\n \"internalType\": \"bool\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BaseURIUpdated\",\n \"inputs\": [\n {\n \"name\": \"_newBaseURI\",\n \"type\": \"string\",\n \"indexed\": false,\n \"internalType\": \"string\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Initialized\",\n \"inputs\": [\n {\n \"name\": \"version\",\n \"type\": \"uint64\",\n \"indexed\": false,\n \"internalType\": \"uint64\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"MemecoinImplementationUpdated\",\n \"inputs\": [\n {\n \"name\": \"_newImplementation\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"MemecoinTreasuryImplementationUpdated\",\n \"inputs\": [\n {\n \"name\": \"_newImplementation\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverCanceled\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverRequested\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"oldOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Transfer\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AccountBalanceOverflow\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"BalanceQueryForZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CallerIsNotPositionManager\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CreatorFeeAllocationInvalid\",\n \"inputs\": [\n {\n \"name\": \"_allocation\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"_maxAllocation\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidFlaunchSchedule\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidInitialSupply\",\n \"inputs\": [\n {\n \"name\": \"_initialSupply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidInitialization\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NewOwnerIsZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoHandoverRequest\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotInitializing\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotOwnerNorApproved\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"PremineExceedsInitialAmount\",\n \"inputs\": [\n {\n \"name\": \"_buyAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_initialSupply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"TokenAlreadyExists\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TokenDoesNotExist\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TransferFromIncorrectOwner\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TransferToNonERC721ReceiverImplementer\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TransferToZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Unauthorized\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type EventLog,\n type ReadWriteContract,\n type ReadWriteAdapter,\n type HexString,\n createDrift,\n} from \"@delvtech/drift\";\nimport { FlaunchAbi } from \"../abi/Flaunch\";\n\nexport type FlaunchABI = typeof FlaunchAbi;\n\n/**\n * Client for interacting with the Flaunch V1 contract in read-only mode\n * Provides methods to query token IDs and metadata URIs\n */\nexport class ReadFlaunch {\n public readonly contract: ReadContract<FlaunchABI>;\n\n /**\n * Creates a new ReadFlaunch instance\n * @param address - The address of the Flaunch contract\n * @param drift - Optional drift instance for contract interactions (creates new instance if not provided)\n * @throws Error if address is not provided\n */\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: FlaunchAbi,\n address,\n });\n }\n\n /**\n * Gets the token ID associated with a memecoin\n * @param coinAddress - The address of the memecoin\n * @returns Promise<bigint> - The token ID\n */\n tokenId(coinAddress: Address) {\n return this.contract.read(\"tokenId\", {\n _memecoin: coinAddress,\n });\n }\n\n /**\n * Gets the metadata URI for a token\n * @param tokenId - The ID of the token\n * @returns Promise<string> - The token's metadata URI\n */\n tokenURI(tokenId: bigint) {\n return this.contract.read(\"tokenURI\", {\n _tokenId: tokenId,\n });\n }\n\n /**\n * Gets the memecoin address for a given token ID\n * @param tokenId - The ID of the token\n * @returns Promise<Address> - The address of the memecoin\n */\n memecoin(tokenId: bigint) {\n return this.contract.read(\"memecoin\", {\n _tokenId: tokenId,\n });\n }\n}\n","// Generated from Memecoin (ERC20).\n// Source artifact: Memecoin.sol/Memecoin.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const MemecoinAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"CLOCK_MODE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"DOMAIN_SEPARATOR\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"allowance\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"approve\",\n \"inputs\": [\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balanceOf\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"burn\",\n \"inputs\": [\n {\n \"name\": \"value\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"burnFrom\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"value\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"checkpoints\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"pos\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct ERC20VotesUpgradeable.Checkpoint\",\n \"components\": [\n {\n \"name\": \"fromBlock\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"votes\",\n \"type\": \"uint224\",\n \"internalType\": \"uint224\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"clock\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint48\",\n \"internalType\": \"uint48\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"creator\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"creator_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"decimals\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"decreaseAllowance\",\n \"inputs\": [\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"subtractedValue\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"delegate\",\n \"inputs\": [\n {\n \"name\": \"delegatee\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"delegateBySig\",\n \"inputs\": [\n {\n \"name\": \"delegatee\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"expiry\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"v\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"r\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"delegates\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"eip712Domain\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"fields\",\n \"type\": \"bytes1\",\n \"internalType\": \"bytes1\"\n },\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"version\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"chainId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"verifyingContract\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"extensions\",\n \"type\": \"uint256[]\",\n \"internalType\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunch\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getPastTotalSupply\",\n \"inputs\": [\n {\n \"name\": \"timepoint\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getPastVotes\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"timepoint\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getVotes\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"increaseAllowance\",\n \"inputs\": [\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"addedValue\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialize\",\n \"inputs\": [\n {\n \"name\": \"name_\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"symbol_\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"tokenUri_\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"mint\",\n \"inputs\": [\n {\n \"name\": \"_to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"name\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nonces\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"numCheckpoints\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"permit\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"value\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"v\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"r\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setMetadata\",\n \"inputs\": [\n {\n \"name\": \"name_\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"symbol_\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"supportsInterface\",\n \"inputs\": [\n {\n \"name\": \"_interfaceId\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"symbol\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenURI\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"totalSupply\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transfer\",\n \"inputs\": [\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferFrom\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"treasury\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address payable\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"version\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"Approval\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"value\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"DelegateChanged\",\n \"inputs\": [\n {\n \"name\": \"delegator\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"fromDelegate\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"toDelegate\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"DelegateVotesChanged\",\n \"inputs\": [\n {\n \"name\": \"delegate\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"previousBalance\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"newBalance\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"EIP712DomainChanged\",\n \"inputs\": [],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Initialized\",\n \"inputs\": [\n {\n \"name\": \"version\",\n \"type\": \"uint8\",\n \"indexed\": false,\n \"internalType\": \"uint8\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"MetadataUpdated\",\n \"inputs\": [\n {\n \"name\": \"_name\",\n \"type\": \"string\",\n \"indexed\": false,\n \"internalType\": \"string\"\n },\n {\n \"name\": \"_symbol\",\n \"type\": \"string\",\n \"indexed\": false,\n \"internalType\": \"string\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Transfer\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"value\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"CallerNotFlaunch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"MintAddressIsZero\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Permit2AllowanceIsFixedAtInfinity\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type EventLog,\n type ReadWriteContract,\n type ReadWriteAdapter,\n type HexString,\n createDrift,\n} from \"@delvtech/drift\";\nimport { MemecoinAbi } from \"../abi/Memecoin\";\n\nexport type MemecoinABI = typeof MemecoinAbi;\n\n/**\n * Client for interacting with Memecoin (ERC20) contracts in read-only mode\n * Provides methods to query basic token information and balances\n */\nexport class ReadMemecoin {\n public readonly contract: ReadContract<MemecoinABI>;\n\n /**\n * Creates a new ReadMemecoin instance\n * @param address - The address of the Memecoin contract\n * @param drift - Optional drift instance for contract interactions (creates new instance if not provided)\n * @throws Error if address is not provided\n */\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: MemecoinAbi,\n address,\n });\n }\n\n /**\n * Gets the name of the token\n * @returns Promise<string> - The name of the token\n */\n name() {\n return this.contract.read(\"name\", {});\n }\n\n /**\n * Gets the symbol of the token\n * @returns Promise<string> - The symbol of the token\n */\n symbol() {\n return this.contract.read(\"symbol\");\n }\n\n /**\n * Gets the token URI containing metadata\n * @returns Promise<string> - The token URI\n */\n tokenURI() {\n return this.contract.read(\"tokenURI\");\n }\n\n /**\n * Gets the decimals of the token\n * @returns Promise<number> - The decimals of the token\n */\n decimals() {\n return this.contract.read(\"decimals\");\n }\n\n /**\n * Gets the total supply of the token\n * @returns Promise<bigint> - The total supply\n */\n totalSupply() {\n return this.contract.read(\"totalSupply\");\n }\n\n /**\n * Gets the token balance of a specific user\n * @param user - The address of the user to check\n * @returns Promise<bigint> - The token balance\n */\n balanceOf(user: Address) {\n return this.contract.read(\"balanceOf\", {\n account: user,\n });\n }\n\n /**\n * Gets the allowance of an ERC20 token to a spender\n * @param owner - The address of the owner to check\n * @param spender - The address of the spender to check\n * @returns Promise<bigint> - The allowance of the coin to the spender\n */\n allowance(owner: Address, spender: Address) {\n return this.contract.read(\"allowance\", {\n owner,\n spender,\n });\n }\n}\n\nexport class ReadWriteMemecoin extends ReadMemecoin {\n declare contract: ReadWriteContract<MemecoinABI>;\n\n constructor(address: Address, drift: Drift = createDrift()) {\n super(address, drift);\n }\n\n /**\n * Approves an amount of the token to be spent by another address\n * @param spender - The address of the spender to approve\n * @param amount - The amount of the token to approve\n * @returns Promise<void> - The transaction receipt\n */\n approve(spender: Address, amount: bigint) {\n return this.contract.write(\"approve\", {\n spender,\n amount,\n });\n }\n}\n","// Generated from Uniswap V4Quoter.\n// Source artifact: V4Quoter.sol/V4Quoter.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const QuoterAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_poolManager\",\n \"type\": \"address\",\n \"internalType\": \"contract IPoolManager\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"_quoteExactInput\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IV4Quoter.QuoteExactParams\",\n \"components\": [\n {\n \"name\": \"exactCurrency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"path\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct PathKey[]\",\n \"components\": [\n {\n \"name\": \"intermediateCurrency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"exactAmount\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"_quoteExactInputSingle\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IV4Quoter.QuoteExactSingleParams\",\n \"components\": [\n {\n \"name\": \"poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"zeroForOne\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"exactAmount\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"_quoteExactOutput\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IV4Quoter.QuoteExactParams\",\n \"components\": [\n {\n \"name\": \"exactCurrency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"path\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct PathKey[]\",\n \"components\": [\n {\n \"name\": \"intermediateCurrency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"exactAmount\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"_quoteExactOutputSingle\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IV4Quoter.QuoteExactSingleParams\",\n \"components\": [\n {\n \"name\": \"poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"zeroForOne\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"exactAmount\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolManager\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IPoolManager\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"quoteExactInput\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IV4Quoter.QuoteExactParams\",\n \"components\": [\n {\n \"name\": \"exactCurrency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"path\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct PathKey[]\",\n \"components\": [\n {\n \"name\": \"intermediateCurrency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"exactAmount\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amountOut\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"quoteExactInputSingle\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IV4Quoter.QuoteExactSingleParams\",\n \"components\": [\n {\n \"name\": \"poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"zeroForOne\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"exactAmount\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amountOut\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"quoteExactOutput\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IV4Quoter.QuoteExactParams\",\n \"components\": [\n {\n \"name\": \"exactCurrency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"path\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct PathKey[]\",\n \"components\": [\n {\n \"name\": \"intermediateCurrency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"exactAmount\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amountIn\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"quoteExactOutputSingle\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IV4Quoter.QuoteExactSingleParams\",\n \"components\": [\n {\n \"name\": \"poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"zeroForOne\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"exactAmount\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amountIn\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unlockCallback\",\n \"inputs\": [\n {\n \"name\": \"data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"error\",\n \"name\": \"NotEnoughLiquidity\",\n \"inputs\": [\n {\n \"name\": \"poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"NotPoolManager\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotSelf\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"QuoteSwap\",\n \"inputs\": [\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"UnexpectedCallSuccess\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"UnexpectedRevertBytes\",\n \"inputs\": [\n {\n \"name\": \"revertData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n createDrift,\n} from \"@delvtech/drift\";\nimport { QuoterAbi } from \"../abi/Quoter\";\nimport { coinPoolKey, referrerHookData, swapDirection } from \"../utils/swap\";\n\nexport type QuoterABI = typeof QuoterAbi;\n\n/**\n * Client for the Uniswap V4Quoter. Every ubi.fun pool is a single hop between\n * the coin and USDC (6 decimals) with the PositionManager as the hook, so all\n * quotes are quoteExactInputSingle / quoteExactOutputSingle calls.\n *\n * Pass the SAME referrer you will swap with: the hook data changes how the fee\n * is assigned, and a quote without it will not match execution.\n */\nexport class ReadQuoter {\n chainId: number;\n public readonly contract: ReadContract<QuoterABI>;\n\n constructor(chainId: number, address: Address, drift: Drift = createDrift()) {\n this.chainId = chainId;\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: QuoterAbi,\n address,\n });\n }\n\n /**\n * Quote for buying a coin with an exact amount of USDC\n * @param coinAddress - The coin to buy\n * @param amountIn - Exact USDC to spend (6 decimals)\n * @param positionManagerAddress - The PositionManager (pool hook)\n * @param referrer - Optional referrer address, must match the swap's referrer\n * @returns Promise<bigint> - Expected coins out (18 decimals)\n */\n async getBuyQuoteExactInput({\n coinAddress,\n amountIn,\n positionManagerAddress,\n referrer,\n }: {\n coinAddress: Address;\n amountIn: bigint;\n positionManagerAddress: Address;\n referrer?: Address;\n }) {\n const res = await this.contract.simulateWrite(\"quoteExactInputSingle\", {\n params: {\n poolKey: coinPoolKey(coinAddress, positionManagerAddress),\n zeroForOne: swapDirection(\"buy\", coinAddress),\n exactAmount: amountIn,\n hookData: referrerHookData(referrer),\n },\n });\n\n return res.amountOut;\n }\n\n /**\n * Quote for selling an exact amount of a coin for USDC\n * @param coinAddress - The coin to sell\n * @param amountIn - Exact coins to sell (18 decimals)\n * @param positionManagerAddress - The PositionManager (pool hook)\n * @param referrer - Optional referrer address, must match the swap's referrer\n * @returns Promise<bigint> - Expected USDC out (6 decimals)\n */\n async getSellQuoteExactInput({\n coinAddress,\n amountIn,\n positionManagerAddress,\n referrer,\n }: {\n coinAddress: Address;\n amountIn: bigint;\n positionManagerAddress: Address;\n referrer?: Address;\n }) {\n const res = await this.contract.simulateWrite(\"quoteExactInputSingle\", {\n params: {\n poolKey: coinPoolKey(coinAddress, positionManagerAddress),\n zeroForOne: swapDirection(\"sell\", coinAddress),\n exactAmount: amountIn,\n hookData: referrerHookData(referrer),\n },\n });\n\n return res.amountOut;\n }\n\n /**\n * Quote for buying an exact amount of a coin, answering the USDC required\n * @param coinAddress - The coin to buy\n * @param coinOut - Exact coins to receive (18 decimals)\n * @param positionManagerAddress - The PositionManager (pool hook)\n * @param referrer - Optional referrer address, must match the swap's referrer\n * @returns Promise<bigint> - Required USDC in (6 decimals)\n */\n async getBuyQuoteExactOutput({\n coinAddress,\n coinOut,\n positionManagerAddress,\n referrer,\n }: {\n coinAddress: Address;\n coinOut: bigint;\n positionManagerAddress: Address;\n referrer?: Address;\n }) {\n const res = await this.contract.simulateWrite(\"quoteExactOutputSingle\", {\n params: {\n poolKey: coinPoolKey(coinAddress, positionManagerAddress),\n zeroForOne: swapDirection(\"buy\", coinAddress),\n exactAmount: coinOut,\n hookData: referrerHookData(referrer),\n },\n });\n\n return res.amountIn;\n }\n}\n","// Generated from FeeEscrow.\n// Source artifact: FeeEscrow.sol/FeeEscrow.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const FeeEscrowAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_nativeToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_indexer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"receive\",\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"allocateFees\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balances\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeOwnershipHandover\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"indexer\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IndexerSubscriber\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nativeToken\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownershipHandoverExpiresAt\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"requestOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setIndexer\",\n \"inputs\": [\n {\n \"name\": \"_indexer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"totalFeesAllocated\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdrawFees\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_unwrap\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"Deposit\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_payee\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_token\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverCanceled\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverRequested\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"oldOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Withdrawal\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_token\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidRecipient\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NewOwnerIsZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoHandoverRequest\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"PoolIdNotIndexed\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"RecipientZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Unauthorized\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type ReadWriteContract,\n type ReadWriteAdapter,\n createDrift,\n} from \"@delvtech/drift\";\nimport { FeeEscrowAbi } from \"../abi/FeeEscrow\";\n\nexport type FeeEscrowABI = typeof FeeEscrowAbi;\n\n/**\n * Client for interacting with the FeeEscrow contract in read-only mode\n * Provides methods to query fee balances and withdraw fees\n */\nexport class ReadFeeEscrow {\n public readonly contract: ReadContract<FeeEscrowABI>;\n\n /**\n * Creates a new ReadFeeEscrow instance\n * @param address - The address of the FeeEscrow contract\n * @param drift - Optional drift instance for contract interactions (creates new instance if not provided)\n * @throws Error if address is not provided\n */\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: FeeEscrowAbi,\n address,\n });\n }\n\n /**\n * Gets the claimable balance of fees for a creator\n * @param creator - The address of the creator to check\n * @returns Promise<bigint> - The claimable balance of fees\n */\n balances(creator: Address) {\n return this.contract.read(\"balances\", {\n _recipient: creator,\n });\n }\n}\n\n/**\n * Extended client for interacting with the FeeEscrow contract with write capabilities\n * Provides methods to withdraw fees\n */\nexport class ReadWriteFeeEscrow extends ReadFeeEscrow {\n declare contract: ReadWriteContract<FeeEscrowABI>;\n\n constructor(\n address: Address,\n drift: Drift<ReadWriteAdapter> = createDrift()\n ) {\n super(address, drift);\n }\n\n /**\n * Withdraws the caller's accrued fees to a recipient as USDC.\n * @dev MUST be unwrap=false on Arc: unwrap=true calls a WETH-style\n * withdraw() that does not exist on the native USDC interface and the whole\n * claim would revert. The ERC20 IS the dollar.\n * @param recipient - The address to receive the fees\n * @returns Transaction response\n */\n withdrawFees(recipient: Address) {\n return this.contract.write(\"withdrawFees\", {\n _recipient: recipient,\n _unwrap: false,\n });\n }\n}\n","// Generated from ReferralEscrow.\n// Source artifact: ReferralEscrow.sol/ReferralEscrow.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const ReferralEscrowAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_nativeToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_protocolOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_unwrapNativeClaims\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"receive\",\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"allocations\",\n \"inputs\": [\n {\n \"name\": \"_user\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"assignTokens\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_user\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claimTokens\",\n \"inputs\": [\n {\n \"name\": \"_tokens\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address payable\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeOwnershipHandover\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getRoleAdmin\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"grantRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"hasRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nativeToken\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownershipHandoverExpiresAt\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolSwap\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract PoolSwap\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"callerConfirmation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"requestOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"revokeRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setPoolSwap\",\n \"inputs\": [\n {\n \"name\": \"_poolSwap\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"supportsInterface\",\n \"inputs\": [\n {\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unwrapNativeClaims\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverCanceled\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverRequested\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"oldOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleAdminChanged\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleGranted\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleRevoked\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TokensAssigned\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_user\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TokensClaimed\",\n \"inputs\": [\n {\n \"name\": \"_user\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AccessControlBadConfirmation\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"AccessControlUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"neededRole\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"MismatchedTokensAndLimits\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NewOwnerIsZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoHandoverRequest\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotPositionManager\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Unauthorized\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type ReadWriteContract,\n type ReadWriteAdapter,\n createDrift,\n} from \"@delvtech/drift\";\nimport { ReferralEscrowAbi } from \"../abi/ReferralEscrow\";\n\nexport type ReferralEscrowABI = typeof ReferralEscrowAbi;\n\n/**\n * Client for interacting with the ReferralEscrow contract in read-only mode\n * Provides methods to query token allocations\n */\nexport class ReadReferralEscrow {\n public readonly contract: ReadContract<ReferralEscrowABI>;\n\n /**\n * Creates a new ReadReferralEscrow instance\n * @param address - The address of the ReferralEscrow contract\n * @param drift - Optional drift instance for contract interactions (creates new instance if not provided)\n * @throws Error if address is not provided\n */\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: ReferralEscrowAbi,\n address,\n });\n }\n\n /**\n * Gets the token allocation for a specific user and token\n * @param user - The address of the user to check\n * @param token - The address of the token\n * @returns Promise<bigint> - The allocated token amount\n */\n allocations(user: Address, token: Address) {\n return this.contract.read(\"allocations\", {\n _user: user,\n _token: token,\n });\n }\n}\n\n/**\n * Extended client for interacting with the ReferralEscrow contract with write capabilities\n * Provides methods to claim tokens\n */\nexport class ReadWriteReferralEscrow extends ReadReferralEscrow {\n declare contract: ReadWriteContract<ReferralEscrowABI>;\n\n constructor(\n address: Address,\n drift: Drift<ReadWriteAdapter> = createDrift()\n ) {\n super(address, drift);\n }\n\n /**\n * Claims tokens for a recipient\n * @param tokens - Array of token addresses to claim\n * @param recipient - The address to receive the claimed tokens\n * @returns Promise<void>\n */\n claimTokens(tokens: Address[], recipient: Address) {\n return this.contract.write(\"claimTokens\", {\n _tokens: tokens,\n _recipient: recipient,\n });\n }\n}\n","// Generated from PoolSwap (referrer-aware swap router).\n// Source artifact: PoolSwap.sol/PoolSwap.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\n// NOTE: the 2-arg and hookData swap overloads are stripped so drift name-keyed\n// calls resolve unambiguously; the SDK always swaps with an explicit referrer.\nexport const PoolSwapAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_manager\",\n \"type\": \"address\",\n \"internalType\": \"contract IPoolManager\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"manager\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IPoolManager\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"swap\",\n \"inputs\": [\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"_params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IPoolManager.SwapParams\",\n \"components\": [\n {\n \"name\": \"zeroForOne\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"amountSpecified\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ]\n },\n {\n \"name\": \"_referrer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"delta_\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n }\n ],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unlockCallback\",\n \"inputs\": [\n {\n \"name\": \"rawData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n }\n] as const;\n","import {\n type ReadContract,\n type ReadWriteContract,\n type ReadWriteAdapter,\n type Address,\n type Drift,\n createDrift,\n} from \"@delvtech/drift\";\nimport { zeroAddress } from \"viem\";\nimport { PoolSwapAbi } from \"../abi/PoolSwap\";\nimport { PoolKey } from \"../types\";\n\nexport type PoolSwapABI = typeof PoolSwapAbi;\n\n/**\n * Client for the PoolSwap contract, the supported way to trade ubi.fun pools:\n * unlike a generic v4 router it forwards a referrer to the hook, which assigns\n * that address 5% of the swap fee in the ReferralEscrow.\n *\n * Approve the input token to PoolSwap before swapping: USDC for buys, the coin\n * for sells. Amounts are USDC 6 decimals on the cash side and 18 decimals on\n * the coin side.\n */\nexport class ReadPoolSwap {\n public readonly contract: ReadContract<PoolSwapABI>;\n\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: PoolSwapAbi,\n address,\n });\n }\n}\n\nexport class ReadWritePoolSwap extends ReadPoolSwap {\n declare contract: ReadWriteContract<PoolSwapABI>;\n\n constructor(\n address: Address,\n drift: Drift<ReadWriteAdapter> = createDrift()\n ) {\n super(address, drift);\n }\n\n /**\n * Executes a swap against a ubi.fun pool\n * @param params.poolKey - The pool key (read it back with PositionManager.poolKey)\n * @param params.zeroForOne - v4 direction against the pool key ordering\n * @param params.amountSpecified - Negative for exact-in, positive for exact-out\n * @param params.sqrtPriceLimitX96 - Slippage bound on the pool price\n * @param params.referrer - Optional referrer credited with 5% of the swap fee\n * @returns Transaction response\n */\n swap(params: {\n poolKey: PoolKey;\n zeroForOne: boolean;\n amountSpecified: bigint;\n sqrtPriceLimitX96: bigint;\n referrer?: Address;\n }) {\n return this.contract.write(\"swap\", {\n _key: params.poolKey,\n _params: {\n zeroForOne: params.zeroForOne,\n amountSpecified: params.amountSpecified,\n sqrtPriceLimitX96: params.sqrtPriceLimitX96,\n },\n _referrer: params.referrer ?? zeroAddress,\n });\n }\n}\n","// Generated from XHandleClaims (X-handle earnings escrow registry).\n// Source artifact: XHandleClaims.sol/XHandleClaims.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const XHandleClaimsAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_usdc\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_signer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_protocolOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"bind\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"_wallet\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"bindNonce\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_nonce\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claim\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"_manager\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amount_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeOwnershipHandover\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"escrowAddress\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"escrowOf\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_escrow\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownershipHandoverExpiresAt\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"requestOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setSigner\",\n \"inputs\": [\n {\n \"name\": \"_signer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"signer\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"sweep\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"_token\",\n \"type\": \"address\",\n \"internalType\": \"contract IERC20\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amount_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"usdc\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IERC20\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"walletOf\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_wallet\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"EscrowDeployed\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"_escrow\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"HandleBound\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"_wallet\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_nonce\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"HandleClaimed\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"_wallet\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverCanceled\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverRequested\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"oldOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"SignerUpdated\",\n \"inputs\": [\n {\n \"name\": \"_signer\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"DeadlineExpired\",\n \"inputs\": [\n {\n \"name\": \"_deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ECDSAInvalidSignature\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ECDSAInvalidSignatureLength\",\n \"inputs\": [\n {\n \"name\": \"length\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ECDSAInvalidSignatureS\",\n \"inputs\": [\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"HandleNotBound\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidSignature\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NewOwnerIsZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoHandoverRequest\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Unauthorized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ZeroAddress\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type ReadWriteContract,\n type ReadWriteAdapter,\n type Address,\n type Drift,\n createDrift,\n} from \"@delvtech/drift\";\nimport { keccak256, stringToBytes, type Hex } from \"viem\";\nimport { XHandleClaimsAbi } from \"../abi/XHandleClaims\";\n\nexport type XHandleClaimsABI = typeof XHandleClaimsAbi;\n\n/** Allowed X handle shape, with or without the leading @. */\nexport const HANDLE_RE = /^@?[A-Za-z0-9_]{1,15}$/;\n\n/** Lowercase, no leading @. The canonical form links and hashes use. */\nexport function normalizeHandle(handle: string): string {\n return handle.trim().replace(/^@/, \"\").toLowerCase();\n}\n\n/**\n * keccak256 of the normalized handle: the on-chain key of the XHandleClaims\n * registry. Must match the app and backend (it does; same normalization).\n * Throws on anything outside HANDLE_RE: the OAuth backend only attests real X\n * usernames, so an escrow derived from an invalid handle could never be bound\n * and any revenue routed to it would be stuck forever.\n */\nexport function handleHashOf(handle: string): Hex {\n const trimmed = handle.trim();\n if (!HANDLE_RE.test(trimmed)) {\n throw new Error(\n `Invalid X handle \"${handle}\": expected 1-15 letters, digits or ` +\n `underscores, with an optional leading @`\n );\n }\n return keccak256(stringToBytes(normalizeHandle(trimmed)));\n}\n\n/**\n * Client for the XHandleClaims registry: launches can route earnings-split\n * shares to an X handle instead of an address. Each handle maps to a\n * deterministic CREATE2 escrow (predictable before deployment, so it can be a\n * split recipient at launch). The handle's owner proves control through the\n * ubi.fun X OAuth flow, which returns an attestation signature for `bind`;\n * after binding, `claim` pulls the escrowed USDC to the bound wallet.\n */\nexport class ReadXHandleClaims {\n public readonly contract: ReadContract<XHandleClaimsABI>;\n\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: XHandleClaimsAbi,\n address,\n });\n }\n\n /**\n * The deterministic escrow address for a handle, valid before the escrow is\n * deployed. Use this as a split recipient at launch time.\n */\n escrowAddress(handle: string) {\n return this.contract.read(\"escrowAddress\", {\n _handleHash: handleHashOf(handle),\n });\n }\n\n /** The wallet a handle is bound to (zero address if unbound). */\n boundWallet(handle: string) {\n return this.contract.read(\"walletOf\", {\n _handleHash: handleHashOf(handle),\n });\n }\n\n /** The current bind nonce for a handle (increments on each re-bind). */\n bindNonce(handle: string) {\n return this.contract.read(\"bindNonce\", {\n _handleHash: handleHashOf(handle),\n });\n }\n}\n\nexport class ReadWriteXHandleClaims extends ReadXHandleClaims {\n declare contract: ReadWriteContract<XHandleClaimsABI>;\n\n constructor(\n address: Address,\n drift: Drift<ReadWriteAdapter> = createDrift()\n ) {\n super(address, drift);\n }\n\n /**\n * Binds a handle to a wallet using the attestation from the ubi.fun X OAuth\n * flow (GET /auth/x/start on the API starts it; the callback returns this\n * signature). Anyone can submit the bind once signed.\n */\n bind(params: {\n handle: string;\n wallet: Address;\n deadline: bigint;\n signature: Hex;\n }) {\n return this.contract.write(\"bind\", {\n _handleHash: handleHashOf(params.handle),\n _wallet: params.wallet,\n _deadline: params.deadline,\n _signature: params.signature,\n });\n }\n\n /**\n * Claims a bound handle's share out of a launch's split manager and forwards\n * it to the bound wallet as USDC.\n * @param handle - The X handle\n * @param manager - The AddressFeeSplitManager instance holding the share\n */\n claim(handle: string, manager: Address) {\n return this.contract.write(\"claim\", {\n _handleHash: handleHashOf(handle),\n _manager: manager,\n });\n }\n\n /**\n * Sweeps a token balance sitting directly on the handle's escrow (e.g. USDC\n * sent to it outside a split manager) to the bound wallet.\n */\n sweep(handle: string, token: Address) {\n return this.contract.write(\"sweep\", {\n _handleHash: handleHashOf(handle),\n _token: token,\n });\n }\n}\n","// Generated from Morpho UniversalRewardsDistributor (daily USDC holder pool).\n// Source artifact: IUniversalRewardsDistributor.sol/IUniversalRewardsDistributor.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const UniversalRewardsDistributorAbi = [\n {\n \"type\": \"function\",\n \"name\": \"acceptRoot\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claim\",\n \"inputs\": [\n {\n \"name\": \"_account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_reward\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_claimable\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_proof\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claimed\",\n \"inputs\": [\n {\n \"name\": \"_account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_reward\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ipfsHash\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isUpdater\",\n \"inputs\": [\n {\n \"name\": \"_updater\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pendingRoot\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"root\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"ipfsHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"validAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"revokePendingRoot\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"root\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setOwner\",\n \"inputs\": [\n {\n \"name\": \"_newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setRoot\",\n \"inputs\": [\n {\n \"name\": \"_newRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"_newIpfsHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setRootUpdater\",\n \"inputs\": [\n {\n \"name\": \"_updater\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_active\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setTimelock\",\n \"inputs\": [\n {\n \"name\": \"_newTimelock\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"submitRoot\",\n \"inputs\": [\n {\n \"name\": \"_newRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"_newIpfsHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"timelock\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n }\n] as const;\n","import {\n type ReadContract,\n type ReadWriteContract,\n type ReadWriteAdapter,\n type Address,\n type Drift,\n createDrift,\n} from \"@delvtech/drift\";\nimport { type Hex } from \"viem\";\nimport { UniversalRewardsDistributorAbi } from \"../abi/UniversalRewardsDistributor\";\n\nexport type UniversalRewardsDistributorABI =\n typeof UniversalRewardsDistributorAbi;\n\n/**\n * Client for Morpho's UniversalRewardsDistributor, which pays the daily USDC\n * holder pool (24% of every swap fee). Entitlements are cumulative amounts in\n * a Merkle root the keeper submits after each daily epoch; a root becomes\n * claimable after the on-chain timelock. Fetch an address's cumulative amount\n * and proof from the ubi.fun API (GET {apiUrl}/ubi/:address), then `claim`\n * pays out the difference between the cumulative amount and what was already\n * claimed.\n */\nexport class ReadUniversalRewardsDistributor {\n public readonly contract: ReadContract<UniversalRewardsDistributorABI>;\n\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: UniversalRewardsDistributorAbi,\n address,\n });\n }\n\n /** The active Merkle root claims are verified against. */\n root() {\n return this.contract.read(\"root\");\n }\n\n /** A submitted root still inside the timelock, if any. */\n pendingRoot() {\n return this.contract.read(\"pendingRoot\");\n }\n\n /** The cumulative amount `account` has already claimed of `reward`. */\n claimed(account: Address, reward: Address) {\n return this.contract.read(\"claimed\", {\n _account: account,\n _reward: reward,\n });\n }\n}\n\nexport class ReadWriteUniversalRewardsDistributor extends ReadUniversalRewardsDistributor {\n declare contract: ReadWriteContract<UniversalRewardsDistributorABI>;\n\n constructor(\n address: Address,\n drift: Drift<ReadWriteAdapter> = createDrift()\n ) {\n super(address, drift);\n }\n\n /**\n * Claims the outstanding balance for an account. Anyone can submit; the\n * payout always goes to `account`.\n * @param params.account - The holder being claimed for\n * @param params.reward - The reward token (USDC on Arc)\n * @param params.claimable - The CUMULATIVE entitlement from the API ledger\n * @param params.proof - The Merkle proof from the API ledger\n */\n claim(params: {\n account: Address;\n reward: Address;\n claimable: bigint;\n proof: Hex[];\n }) {\n return this.contract.write(\"claim\", {\n _account: params.account,\n _reward: params.reward,\n _claimable: params.claimable,\n _proof: params.proof,\n });\n }\n}\n","// Generated from TreasuryManagerFactory.\n// Source artifact: TreasuryManagerFactory.sol/TreasuryManagerFactory.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const TreasuryManagerFactoryAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_protocolOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_feeEscrow\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"approveManager\",\n \"inputs\": [\n {\n \"name\": \"_managerImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"approvedManagerImplementation\",\n \"inputs\": [\n {\n \"name\": \"_managerImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_approved\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeOwnershipHandover\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"deployAndInitializeManager\",\n \"inputs\": [\n {\n \"name\": \"_managerImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"manager_\",\n \"type\": \"address\",\n \"internalType\": \"address payable\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"deployManager\",\n \"inputs\": [\n {\n \"name\": \"_managerImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"manager_\",\n \"type\": \"address\",\n \"internalType\": \"address payable\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"feeEscrow\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IFeeEscrow\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getRoleAdmin\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"grantRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"hasRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"managerImplementation\",\n \"inputs\": [\n {\n \"name\": \"_manager\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_managerImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownershipHandoverExpiresAt\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"callerConfirmation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"requestOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"revokeRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"supportsInterface\",\n \"inputs\": [\n {\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unapproveManager\",\n \"inputs\": [\n {\n \"name\": \"_managerImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"ManagerDeployed\",\n \"inputs\": [\n {\n \"name\": \"_manager\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_managerImplementation\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ManagerImplementationApproved\",\n \"inputs\": [\n {\n \"name\": \"_managerImplementation\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ManagerImplementationUnapproved\",\n \"inputs\": [\n {\n \"name\": \"_managerImplementation\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverCanceled\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverRequested\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"oldOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleAdminChanged\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleGranted\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleRevoked\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AccessControlBadConfirmation\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"AccessControlUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"neededRole\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NewOwnerIsZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoHandoverRequest\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Unauthorized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"UnknownManagerImplemention\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type EventLog,\n type ReadWriteContract,\n type ReadWriteAdapter,\n type HexString,\n createDrift,\n} from \"@delvtech/drift\";\nimport {\n createPublicClient,\n type PublicClient,\n encodeAbiParameters,\n http,\n parseEventLogs,\n} from \"viem\";\nimport { TreasuryManagerFactoryAbi } from \"../abi/TreasuryManagerFactory\";\nimport { chainIdToChain } from \"../helpers/chainIdToChain\";\n\nexport type TreasuryManagerFactoryABI = typeof TreasuryManagerFactoryAbi;\n\nexport class ReadTreasuryManagerFactory {\n chainId: number;\n public readonly contract: ReadContract<TreasuryManagerFactoryABI>;\n public readonly publicClient: PublicClient | undefined;\n\n constructor(\n chainId: number,\n address: Address,\n drift: Drift = createDrift(),\n publicClient?: PublicClient\n ) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n this.contract = drift.contract({\n abi: TreasuryManagerFactoryAbi,\n address,\n });\n this.chainId = chainId;\n this.publicClient = publicClient;\n }\n\n async getManagerDeployedAddressFromTx(hash: HexString) {\n // Wait for transaction receipt\n if (!this.publicClient) {\n throw new Error(\"Public client is required\");\n }\n\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash });\n\n // Parse the ManagerDeployed event from receipt logs\n const parsedLogs = parseEventLogs({\n abi: TreasuryManagerFactoryAbi,\n eventName: \"ManagerDeployed\",\n logs: receipt.logs,\n });\n\n // Find the event from our transaction\n const event = parsedLogs.find(\n (log) => log.address.toLowerCase() === this.contract.address.toLowerCase()\n );\n if (!event) {\n throw new Error(\"ManagerDeployed event not found in transaction logs\");\n }\n\n return event.args._manager as Address;\n }\n}\n\nexport class ReadWriteTreasuryManagerFactory extends ReadTreasuryManagerFactory {\n declare contract: ReadWriteContract<TreasuryManagerFactoryABI>;\n\n constructor(\n chainId: number,\n address: Address,\n drift: Drift = createDrift(),\n publicClient?: PublicClient\n ) {\n super(chainId, address, drift, publicClient);\n }\n}\n","// Generated from TreasuryManager (abstract base of AddressFeeSplitManager).\n// Source artifact: TreasuryManager.sol/TreasuryManager.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const TreasuryManagerAbi = [\n {\n \"type\": \"receive\",\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balances\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amount_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claim\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"amount_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"deposit\",\n \"inputs\": [\n {\n \"name\": \"_flaunchToken\",\n \"type\": \"tuple\",\n \"internalType\": \"struct ITreasuryManager.FlaunchToken\",\n \"components\": [\n {\n \"name\": \"flaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"_creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"feeEscrowRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IFeeEscrowRegistry\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialize\",\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialized\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isValidCreator\",\n \"inputs\": [\n {\n \"name\": \"_creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"managerOwner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"permissions\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IManagerPermissions\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"rescue\",\n \"inputs\": [\n {\n \"name\": \"_flaunchToken\",\n \"type\": \"tuple\",\n \"internalType\": \"struct ITreasuryManager.FlaunchToken\",\n \"components\": [\n {\n \"name\": \"flaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setPermissions\",\n \"inputs\": [\n {\n \"name\": \"_permissions\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenTimelock\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_unlockedAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferManagerOwnership\",\n \"inputs\": [\n {\n \"name\": \"_newManagerOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"treasuryManagerFactory\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract TreasuryManagerFactory\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"ManagerOwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"_previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PermissionsUpdated\",\n \"inputs\": [\n {\n \"name\": \"_permissions\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TreasuryEscrowed\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_owner\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TreasuryReclaimed\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TreasuryTimelocked\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_unlockedAt\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"FlaunchContractNotValid\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidCreator\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotManagerOwner\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TokenTimelocked\",\n \"inputs\": [\n {\n \"name\": \"_unlockedAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"UnknownFlaunchToken\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type ReadWriteContract,\n type ReadWriteAdapter,\n createDrift,\n} from \"@delvtech/drift\";\nimport { TreasuryManagerAbi } from \"../abi/TreasuryManager\";\n\nexport type TreasuryManagerABI = typeof TreasuryManagerAbi;\n\nexport type FlaunchToken = {\n flaunch: Address;\n tokenId: bigint;\n};\n\n/**\n * Client for interacting with the TreasuryManager contract in read-only mode\n * Provides methods to query permissions and manager owner\n */\nexport class ReadTreasuryManager {\n public readonly contract: ReadContract<TreasuryManagerABI>;\n\n /**\n * Creates a new ReadTreasuryManager instance\n * @param address - The address of the TreasuryManager contract\n * @param drift - Optional drift instance for contract interactions (creates new instance if not provided)\n * @throws Error if address is not provided\n */\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: TreasuryManagerAbi,\n address,\n });\n }\n\n /**\n * Gets the permissions contract address\n * @returns Promise<Address> - The address of the permissions contract\n */\n permissions() {\n return this.contract.read(\"permissions\");\n }\n\n /**\n * Gets the manager owner address\n * @returns Promise<Address> - The address of the manager owner\n */\n managerOwner() {\n return this.contract.read(\"managerOwner\");\n }\n\n /**\n * Gets a recipient's claimable USDC balance inside this manager (e.g. a\n * split recipient's accrued share)\n * @param recipient - The address to check\n * @returns Promise<bigint> - The claimable balance (USDC, 6 decimals)\n */\n balances(recipient: Address) {\n return this.contract.read(\"balances\", {\n _recipient: recipient,\n });\n }\n}\n\n/**\n * Extended client for interacting with the TreasuryManager contract with write capabilities\n * Provides methods to deposit tokens, set permissions, and transfer ownership\n */\nexport class ReadWriteTreasuryManager extends ReadTreasuryManager {\n declare contract: ReadWriteContract<TreasuryManagerABI>;\n\n constructor(\n address: Address,\n drift: Drift<ReadWriteAdapter> = createDrift()\n ) {\n super(address, drift);\n }\n\n /**\n * Deposits a flaunch token to the treasury\n * @param flaunchToken - The flaunch token to deposit\n * @param creator - The address of the creator\n * @param data - Additional data for the deposit\n * @returns Promise<void>\n */\n deposit(flaunchToken: FlaunchToken, creator: Address, data: `0x${string}`) {\n return this.contract.write(\"deposit\", {\n _flaunchToken: flaunchToken,\n _creator: creator,\n _data: data,\n });\n }\n\n /**\n * Sets the permissions contract address\n * @param permissions - The address of the new permissions contract\n * @returns Promise<void>\n */\n setPermissions(permissions: Address) {\n return this.contract.write(\"setPermissions\", {\n _permissions: permissions,\n });\n }\n\n /**\n * Transfers the manager ownership to a new address\n * @param newManagerOwner - The address of the new manager owner\n * @returns Promise<void>\n */\n transferManagerOwnership(newManagerOwner: Address) {\n return this.contract.write(\"transferManagerOwnership\", {\n _newManagerOwner: newManagerOwner,\n });\n }\n\n /**\n * Claims the caller's accrued share from this manager, paid out as USDC\n * @returns Transaction response\n */\n claim() {\n return this.contract.write(\"claim\");\n }\n}\n","export const MulticallAbi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes[]\",\n name: \"returnData\",\n type: \"bytes[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"allowFailure\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call3[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate3\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"allowFailure\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call3Value[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate3Value\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"blockAndAggregate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"blockHash\",\n type: \"bytes32\",\n },\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBasefee\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"basefee\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n ],\n name: \"getBlockHash\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"blockHash\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBlockNumber\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getChainId\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"chainid\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockCoinbase\",\n outputs: [\n {\n internalType: \"address\",\n name: \"coinbase\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockDifficulty\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"difficulty\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockGasLimit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"gaslimit\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockTimestamp\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"timestamp\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"addr\",\n type: \"address\",\n },\n ],\n name: \"getEthBalance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"balance\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastBlockHash\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"blockHash\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"requireSuccess\",\n type: \"bool\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"tryAggregate\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"requireSuccess\",\n type: \"bool\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"tryBlockAndAggregate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"blockHash\",\n type: \"bytes32\",\n },\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type EventLog,\n type ReadWriteContract,\n type ReadWriteAdapter,\n type HexString,\n createDrift,\n} from \"@delvtech/drift\";\nimport { MulticallAbi } from \"../abi/Multicall\";\n\nexport type MulticallABI = typeof MulticallAbi;\n\nexport class ReadMulticall {\n // same address across all chains\n public readonly address: Address =\n \"0xcA11bde05977b3631167028862bE2a173976CA11\";\n\n public readonly contract: ReadContract<MulticallABI>;\n\n constructor(drift: Drift) {\n this.contract = drift.contract({\n abi: MulticallAbi,\n address: this.address,\n });\n }\n\n aggregate3(calls: { target: Address; callData: HexString }[]) {\n return this.contract.simulateWrite(\"aggregate3\", {\n calls: calls.map((call) => ({\n target: call.target,\n allowFailure: true,\n callData: call.callData,\n })),\n });\n }\n}\n","import {\n createDrift,\n Drift,\n ReadWriteAdapter,\n type Address,\n} from \"@delvtech/drift\";\nimport {\n type PublicClient,\n Hex,\n encodeAbiParameters,\n parseUnits,\n erc721Abi,\n formatUnits,\n decodeEventLog,\n} from \"viem\";\nimport axios from \"axios\";\nimport {\n FlaunchPositionManagerAddress,\n PoolManagerAddress,\n NativeTokenAddress,\n USDC_ADDRESS,\n FairLaunchAddress,\n FlaunchZapAddress,\n FlaunchAddress,\n BidWallAddress,\n QuoterAddress,\n PoolSwapAddress,\n TreasuryManagerFactoryAddress,\n FeeEscrowAddress,\n ReferralEscrowAddress,\n XHandleClaimsAddress,\n UniversalRewardsDistributorAddress,\n ApiBaseUrl,\n} from \"../addresses\";\nimport {\n ReadFlaunchPositionManager,\n WatchPoolCreatedParams,\n WatchPoolSwapParams as WatchPoolSwapParamsPositionManager,\n BuySwapLog,\n SellSwapLog,\n BaseSwapLog,\n} from \"../clients/FlaunchPositionManagerClient\";\nimport {\n ReadPoolManager,\n PositionInfoParams,\n} from \"../clients/PoolManagerClient\";\nimport { ReadFairLaunch } from \"../clients/FairLaunchClient\";\nimport { ReadBidWall } from \"../clients/BidWallClient\";\nimport {\n ReadFlaunchZap,\n ReadWriteFlaunchZap,\n FlaunchParams,\n FlaunchIPFSParams,\n FlaunchWithSplitManagerParams,\n FlaunchWithSplitManagerIPFSParams,\n} from \"../clients/FlaunchZapClient\";\nimport { ReadFlaunch } from \"../clients/FlaunchClient\";\nimport { ReadMemecoin, ReadWriteMemecoin } from \"../clients/MemecoinClient\";\nimport { ReadQuoter } from \"../clients/QuoterClient\";\nimport { ReadFeeEscrow, ReadWriteFeeEscrow } from \"../clients/FeeEscrowClient\";\nimport {\n ReadReferralEscrow,\n ReadWriteReferralEscrow,\n} from \"../clients/ReferralEscrowClient\";\nimport { ReadWritePoolSwap } from \"../clients/PoolSwapClient\";\nimport {\n ReadXHandleClaims,\n ReadWriteXHandleClaims,\n} from \"../clients/XHandleClaimsClient\";\nimport {\n ReadUniversalRewardsDistributor,\n ReadWriteUniversalRewardsDistributor,\n} from \"../clients/UniversalRewardsDistributorClient\";\nimport { ReadWriteTreasuryManagerFactory } from \"../clients/TreasuryManagerFactoryClient\";\nimport {\n ReadTreasuryManager,\n ReadWriteTreasuryManager,\n} from \"../clients/TreasuryManagerClient\";\nimport { FlaunchPositionManagerAbi } from \"../abi/FlaunchPositionManager\";\nimport { CoinMetadata, PoolCreatedEventData } from \"../types\";\nimport {\n getPoolId,\n getValidTick,\n calculateUnderlyingTokenBalances,\n TickFinder,\n TICK_SPACING,\n} from \"../utils/univ4\";\nimport {\n coinPoolKey,\n usdcIsCurrencyZero,\n swapDirection,\n sqrtPriceLimit,\n expectedEndSqrtPriceX96,\n} from \"../utils/swap\";\nimport {\n resolveIPFS as defaultResolveIPFS,\n resolveIPFSCandidates,\n fetchTokenUriMetadataWithFallback,\n} from \"../helpers/ipfs\";\nimport { ReadMulticall } from \"../clients/MulticallClient\";\nimport { MemecoinAbi } from \"../abi\";\n\n// Re-export PoolCreatedEventData so it's available as part of the SDK module\nexport type { PoolCreatedEventData } from \"../types\";\n\ntype WatchPoolSwapParams = Omit<\n WatchPoolSwapParamsPositionManager<boolean>,\n \"usdcIsCurrencyZero\"\n> & {\n filterByCoin?: Address;\n};\n\n/** USDC (the cash side) has 6 decimals; every coin has 18. */\nconst USDC_DECIMALS = 6;\nconst COIN_DECIMALS = 18;\n\n/** An address's daily holder pool entitlement as served by the ubi.fun API. */\nexport interface UbiEntitlement {\n account?: string;\n /** CUMULATIVE lifetime entitlement in USDC wei (6 decimals). */\n cumulativeWei?: string;\n proof?: Hex[];\n status?: string;\n /** The ledger root this entitlement belongs to. */\n root?: string;\n [key: string]: unknown;\n}\n\n/**\n * Base class for interacting with the ubi.fun protocol in read-only mode\n */\nexport class ReadFlaunchSDK {\n public readonly drift: Drift;\n public readonly chainId: number;\n public readonly publicClient: PublicClient | undefined;\n public readonly TICK_SPACING = TICK_SPACING;\n public readonly readPositionManager: ReadFlaunchPositionManager;\n public readonly readFeeEscrow: ReadFeeEscrow;\n public readonly readReferralEscrow: ReadReferralEscrow;\n public readonly readFlaunchZap: ReadFlaunchZap;\n public readonly readPoolManager: ReadPoolManager;\n public readonly readFairLaunch: ReadFairLaunch;\n public readonly readBidWall: ReadBidWall;\n public readonly readFlaunch: ReadFlaunch;\n public readonly readQuoter: ReadQuoter;\n public readonly readXHandleClaims: ReadXHandleClaims;\n public readonly readUbiPool: ReadUniversalRewardsDistributor;\n\n public resolveIPFS: (value: string) => string;\n\n constructor(\n chainId: number,\n drift: Drift = createDrift(),\n publicClient?: PublicClient\n ) {\n this.chainId = chainId;\n this.drift = drift;\n this.publicClient = publicClient;\n this.resolveIPFS = defaultResolveIPFS;\n this.readPositionManager = new ReadFlaunchPositionManager(\n FlaunchPositionManagerAddress[this.chainId],\n drift\n );\n this.readFeeEscrow = new ReadFeeEscrow(\n FeeEscrowAddress[this.chainId],\n drift\n );\n this.readReferralEscrow = new ReadReferralEscrow(\n ReferralEscrowAddress[this.chainId],\n drift\n );\n this.readFlaunchZap = new ReadFlaunchZap(\n this.chainId,\n FlaunchZapAddress[this.chainId],\n drift\n );\n this.readPoolManager = new ReadPoolManager(\n PoolManagerAddress[this.chainId],\n drift\n );\n this.readFairLaunch = new ReadFairLaunch(\n FairLaunchAddress[this.chainId],\n drift\n );\n this.readBidWall = new ReadBidWall(BidWallAddress[this.chainId], drift);\n this.readFlaunch = new ReadFlaunch(FlaunchAddress[this.chainId], drift);\n this.readQuoter = new ReadQuoter(\n this.chainId,\n QuoterAddress[this.chainId],\n drift\n );\n this.readXHandleClaims = new ReadXHandleClaims(\n XHandleClaimsAddress[this.chainId],\n drift\n );\n this.readUbiPool = new ReadUniversalRewardsDistributor(\n UniversalRewardsDistributorAddress[this.chainId],\n drift\n );\n }\n\n /**\n * Checks if a given coin address is a valid ubi.fun coin\n * @param coinAddress - The address of the coin to check\n * @returns Promise<boolean> - True if the coin is valid, false otherwise\n */\n isValidCoin(coinAddress: Address) {\n return this.readPositionManager.isValidCoin(coinAddress);\n }\n\n getPositionManagerAddress() {\n return this.readPositionManager.contract.address;\n }\n\n getFlaunchAddress() {\n return this.readFlaunch.contract.address;\n }\n\n getFairLaunchAddress() {\n return this.readFairLaunch.contract.address;\n }\n\n getBidWallAddress() {\n return this.readBidWall.contract.address;\n }\n\n /**\n * Gets the Flaunch NFT token ID for a memecoin (the NFT IS the revenue claim)\n * @param coinAddress - The address of the memecoin\n * @returns Promise<{ flaunchAddress: Address; tokenId: bigint }>\n */\n async getFlaunchTokenIdForMemecoin(\n coinAddress: Address\n ): Promise<{ flaunchAddress: Address; tokenId: bigint }> {\n const tokenId = await this.readFlaunch.tokenId(coinAddress);\n\n return {\n flaunchAddress: this.getFlaunchAddress(),\n tokenId,\n };\n }\n\n /**\n * URLs to try for a tokenURI, in order. With the default resolver an\n * ipfs:// URI fans out to every known public gateway; a custom resolver\n * from `setIPFSResolver` stays authoritative and yields exactly one URL.\n */\n private tokenUriCandidates(tokenURI: string): string[] {\n return this.resolveIPFS === defaultResolveIPFS\n ? resolveIPFSCandidates(tokenURI)\n : [this.resolveIPFS(tokenURI)];\n }\n\n /**\n * Retrieves metadata for a given coin\n * @param coinAddress - The address of the coin\n * @returns Promise<CoinMetadata & { symbol: string }> - The coin's metadata including name, symbol, description, and social links\n */\n async getCoinMetadata(\n coinAddress: Address\n ): Promise<CoinMetadata & { symbol: string }> {\n const memecoin = new ReadMemecoin(coinAddress, this.drift);\n const name = await memecoin.name();\n const symbol = await memecoin.symbol();\n const tokenURI = await memecoin.tokenURI();\n\n // get metadata from tokenURI\n const metadata = await fetchTokenUriMetadataWithFallback(\n this.tokenUriCandidates(tokenURI)\n );\n\n return {\n name,\n symbol,\n description: metadata.description ?? \"\",\n image: metadata.image ? this.resolveIPFS(metadata.image) : \"\",\n external_link: metadata.websiteUrl ?? metadata.website ?? \"\",\n collaborators: metadata.collaborators ?? [],\n discordUrl: metadata.discordUrl ?? \"\",\n twitterUrl: metadata.twitterUrl ?? metadata.twitter ?? \"\",\n telegramUrl: metadata.telegramUrl ?? metadata.telegram ?? \"\",\n };\n }\n\n /**\n * Retrieves metadata for a given coin using its token ID\n * @param flaunch - The address of the Flaunch contract\n * @param tokenId - The token ID of the coin\n * @returns The coin's metadata including name, symbol, description, and social links\n */\n async getCoinMetadataFromTokenId(\n flaunch: Address,\n tokenId: bigint\n ): Promise<CoinMetadata & { symbol: string }> {\n const _flaunch = new ReadFlaunch(flaunch, this.drift);\n const coinAddress = await _flaunch.memecoin(tokenId);\n return this.getCoinMetadata(coinAddress);\n }\n\n /**\n * Retrieves metadata for multiple coins using their token IDs\n * @param params - An array of objects containing flaunch contract address and token ID\n * @param batchSize - Optional, the number of ipfs requests to process in each batch\n * @param batchDelay - Optional, the delay in milliseconds between batches\n * @returns An array of objects containing coin address, name, symbol, description, and social links\n */\n async getCoinMetadataFromTokenIds(\n params: {\n flaunch: Address;\n tokenId: bigint;\n }[],\n batchSize: number = 9,\n batchDelay: number = 500\n ): Promise<\n {\n coinAddress: Address;\n name: string;\n symbol: string;\n description: any;\n image: string;\n external_link: any;\n collaborators: any;\n discordUrl: any;\n twitterUrl: any;\n telegramUrl: any;\n }[]\n > {\n if (!Number.isInteger(batchSize) || batchSize < 1) {\n throw new Error(`batchSize must be a positive integer, got ${batchSize}`);\n }\n if (!Number.isFinite(batchDelay) || batchDelay < 0) {\n throw new Error(`batchDelay must be >= 0, got ${batchDelay}`);\n }\n\n const multicall = new ReadMulticall(this.drift);\n\n // get coin addresses via multicall\n const coinAddresses_calldata = params.map((p) =>\n this.readFlaunch.contract.encodeFunctionData(\"memecoin\", {\n _tokenId: p.tokenId,\n })\n );\n const coinAddresses_result = await multicall.aggregate3(\n coinAddresses_calldata.map((calldata, i) => ({\n target: params[i].flaunch,\n callData: calldata,\n }))\n );\n const coinAddresses = coinAddresses_result.map((r) =>\n this.readFlaunch.contract.decodeFunctionReturn(\"memecoin\", r.returnData)\n );\n\n /// get coin metadata for each coin address via multicall\n const coinMetadata_calldata: Hex[] = [];\n // name, symbol, tokenURI for each coin\n coinAddresses.forEach(() => {\n coinMetadata_calldata.push(\n this.drift.adapter.encodeFunctionData({\n abi: MemecoinAbi,\n fn: \"name\",\n })\n );\n coinMetadata_calldata.push(\n this.drift.adapter.encodeFunctionData({\n abi: MemecoinAbi,\n fn: \"symbol\",\n })\n );\n coinMetadata_calldata.push(\n this.drift.adapter.encodeFunctionData({\n abi: MemecoinAbi,\n fn: \"tokenURI\",\n })\n );\n });\n const coinMetadata_result = await multicall.aggregate3(\n coinMetadata_calldata.map((calldata, i) => ({\n target: coinAddresses[Math.floor(i / 3)],\n callData: calldata,\n }))\n );\n\n // First decode all the results\n const results = [];\n for (let i = 0; i < coinAddresses.length; i++) {\n const name = this.drift.adapter.decodeFunctionReturn({\n abi: MemecoinAbi,\n fn: \"name\",\n data: coinMetadata_result[i * 3].returnData,\n });\n const symbol = this.drift.adapter.decodeFunctionReturn({\n abi: MemecoinAbi,\n fn: \"symbol\",\n data: coinMetadata_result[i * 3 + 1].returnData,\n });\n const tokenURI = this.drift.adapter.decodeFunctionReturn({\n abi: MemecoinAbi,\n fn: \"tokenURI\",\n data: coinMetadata_result[i * 3 + 2].returnData,\n });\n\n results.push({ name, symbol, tokenURI, coinAddress: coinAddresses[i] });\n }\n\n // Process IPFS requests in batches to avoid rate limiting\n const processedResults = [];\n for (let i = 0; i < results.length; i += batchSize) {\n const batch = results.slice(i, i + batchSize);\n const batchResults = await Promise.all(\n batch.map(async ({ name, symbol, tokenURI, coinAddress }) => {\n const metadata = await fetchTokenUriMetadataWithFallback(\n this.tokenUriCandidates(tokenURI)\n );\n\n return {\n coinAddress,\n name,\n symbol,\n description: metadata.description ?? \"\",\n image: metadata.image ? this.resolveIPFS(metadata.image) : \"\",\n external_link: metadata.websiteUrl ?? metadata.website ?? \"\",\n collaborators: metadata.collaborators ?? [],\n discordUrl: metadata.discordUrl ?? \"\",\n twitterUrl: metadata.twitterUrl ?? metadata.twitter ?? \"\",\n telegramUrl: metadata.telegramUrl ?? metadata.telegram ?? \"\",\n };\n })\n );\n processedResults.push(...batchResults);\n\n // Add a small delay between batches to avoid rate limiting\n if (i + batchSize < results.length) {\n await new Promise((resolve) => setTimeout(resolve, batchDelay));\n }\n }\n\n return processedResults;\n }\n\n /**\n * Watches for pool creation events\n * @param params - Parameters for watching pool creation\n * @returns Subscription to pool creation events\n */\n watchPoolCreated(params: WatchPoolCreatedParams) {\n return this.readPositionManager.watchPoolCreated(params);\n }\n\n /**\n * Parses a transaction to extract PoolCreated event data\n * @param txHash - The transaction hash to parse\n * @returns PoolCreated event parameters or null if not found\n */\n async getPoolCreatedFromTx(\n txHash: Hex\n ): Promise<PoolCreatedEventData | null> {\n if (!this.publicClient) {\n throw new Error(\"Public client is required to fetch transaction data\");\n }\n\n // Get transaction receipt\n const receipt = await this.publicClient.getTransactionReceipt({\n hash: txHash,\n });\n\n if (!receipt) {\n throw new Error(`Transaction not found: ${txHash}`);\n }\n\n // Find PoolCreated event in logs by trying to decode each log\n for (const log of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: FlaunchPositionManagerAbi,\n data: log.data,\n topics: log.topics,\n });\n\n if (decodedLog.eventName === \"PoolCreated\") {\n return {\n poolId: decodedLog.args._poolId as Hex,\n memecoin: decodedLog.args._memecoin as Address,\n memecoinTreasury: decodedLog.args._memecoinTreasury as Address,\n tokenId: decodedLog.args._tokenId as bigint,\n currencyFlipped: decodedLog.args._currencyFlipped as boolean,\n flaunchFee: decodedLog.args._flaunchFee as bigint,\n params: decodedLog.args._params as any,\n };\n }\n } catch (error) {\n // Not a PoolCreated event or decoding failed, continue to next log\n continue;\n }\n }\n\n return null;\n }\n\n /**\n * Watches for pool swap events\n * @param params - Parameters for watching pool swaps including optional coin filter\n * @returns Subscription to pool swap events\n */\n async watchPoolSwap(params: WatchPoolSwapParams) {\n return this.readPositionManager.watchPoolSwap<boolean>({\n ...params,\n filterByPoolId: params.filterByCoin\n ? await this.poolId(params.filterByCoin)\n : undefined,\n usdcIsCurrencyZero: params.filterByCoin\n ? this.usdcIsCurrencyZero(params.filterByCoin)\n : undefined,\n });\n }\n\n /**\n * Gets information about a liquidity position (read via PoolManager extsload)\n * @param params - Parameters for querying position info\n * @returns Position information\n */\n positionInfo(params: PositionInfoParams) {\n return this.readPoolManager.positionInfo(params);\n }\n\n /**\n * Gets the current tick for a given coin's pool\n * @param coinAddress - The address of the coin\n * @returns Promise<number> - The current tick of the pool\n */\n async currentTick(coinAddress: Address) {\n const poolId = await this.poolId(coinAddress);\n\n const poolState = await this.readPoolManager.poolSlot0({ poolId });\n return poolState.tick;\n }\n\n /**\n * Gets the current sqrt price for a given coin's pool\n * @param coinAddress - The address of the coin\n * @returns Promise<bigint> - sqrtPriceX96, zero if the pool has no price yet\n */\n async currentSqrtPriceX96(coinAddress: Address) {\n const poolId = await this.poolId(coinAddress);\n\n const poolState = await this.readPoolManager.poolSlot0({ poolId });\n return poolState.sqrtPriceX96;\n }\n\n /**\n * Calculates the coin price in USDC based on the current tick. The pool\n * pairs an 18-decimal coin against 6-decimal USDC, so the raw tick price is\n * scaled by 1e12 to get a human dollar price.\n * @param coinAddress - The address of the coin\n * @returns Promise<string> - The price of one coin in USDC (18 decimal string)\n */\n async coinPriceInUSDC(coinAddress: Address) {\n const isUSDCZero = this.usdcIsCurrencyZero(coinAddress);\n const currentTick = await this.currentTick(coinAddress);\n\n // raw price = currency1 per currency0 in wei terms\n const price = Math.pow(1.0001, currentTick);\n\n const usdcRawPerCoinRaw = isUSDCZero ? 1 / price : price;\n const usdcPerCoin =\n usdcRawPerCoinRaw * Math.pow(10, COIN_DECIMALS - USDC_DECIMALS);\n\n return usdcPerCoin.toFixed(18);\n }\n\n /**\n * Calculates the coin's market cap in USDC (price x the fixed 100 Billion supply)\n * @param coinAddress - The address of the coin\n * @returns Promise<string> - The market cap in USDC with 2 decimal precision\n */\n async coinMarketCapInUSDC(coinAddress: Address) {\n const totalSupply = 100_000_000_000; // 100 Billion tokens\n const priceInUSDC = await this.coinPriceInUSDC(coinAddress);\n return (parseFloat(priceInUSDC) * totalSupply).toFixed(2);\n }\n\n async fairLaunchInfo(coinAddress: Address) {\n const poolId = await this.poolId(coinAddress);\n return this.readFairLaunch.fairLaunchInfo({ poolId });\n }\n\n /**\n * Checks if a fair launch is currently active for a given coin\n * @param coinAddress - The address of the coin\n * @returns Promise<boolean> - True if fair launch is active, false otherwise\n */\n async isFairLaunchActive(coinAddress: Address) {\n const poolId = await this.poolId(coinAddress);\n return this.readFairLaunch.isFairLaunchActive({ poolId });\n }\n\n /** The fair launch window length in seconds for a coin (chosen at launch). */\n async fairLaunchDuration(coinAddress: Address) {\n const poolId = await this.poolId(coinAddress);\n return this.readFairLaunch.fairLaunchDuration({ poolId });\n }\n\n /**\n * Gets the initial tick for a fair launch\n * @param coinAddress - The address of the coin\n * @returns Promise<number> - The initial tick value\n */\n async initialTick(coinAddress: Address) {\n const poolId = await this.poolId(coinAddress);\n\n const fairLaunchInfo = await this.readFairLaunch.fairLaunchInfo({\n poolId,\n });\n return fairLaunchInfo.initialTick;\n }\n\n /**\n * Gets the USDC-only position in a fair launch (the side selling at the\n * fixed fair launch price)\n * @param coinAddress - The address of the coin\n * @returns Promise<{usdcAmount, coinAmount, tickLower, tickUpper}>\n */\n async fairLaunchUSDCOnlyPosition(coinAddress: Address) {\n const poolId = await this.poolId(coinAddress);\n const initialTick = await this.initialTick(coinAddress);\n const currentTick = await this.currentTick(coinAddress);\n const isUSDCZero = this.usdcIsCurrencyZero(coinAddress);\n\n let tickLower: number;\n let tickUpper: number;\n\n if (isUSDCZero) {\n tickLower = getValidTick({\n tick: initialTick + 1,\n roundDown: false,\n tickSpacing: this.TICK_SPACING,\n });\n tickUpper = tickLower + this.TICK_SPACING;\n } else {\n tickUpper = getValidTick({\n tick: initialTick - 1,\n roundDown: true,\n tickSpacing: this.TICK_SPACING,\n });\n tickLower = tickUpper - this.TICK_SPACING;\n }\n\n const { liquidity } = await this.readPoolManager.positionInfo({\n poolId,\n owner: this.getFairLaunchAddress(),\n tickLower,\n tickUpper,\n salt: \"\",\n });\n\n const { amount0, amount1 } = calculateUnderlyingTokenBalances(\n liquidity,\n tickLower,\n tickUpper,\n currentTick\n );\n\n const [usdcAmount, coinAmount] = isUSDCZero\n ? [amount0, amount1]\n : [amount1, amount0];\n\n return {\n usdcAmount,\n coinAmount,\n tickLower,\n tickUpper,\n };\n }\n\n /**\n * Gets the coin-only position in a fair launch\n * @param coinAddress - The address of the coin\n * @returns Promise<{usdcAmount, coinAmount, tickLower, tickUpper}>\n */\n async fairLaunchCoinOnlyPosition(coinAddress: Address) {\n const poolId = await this.poolId(coinAddress);\n const initialTick = await this.initialTick(coinAddress);\n const currentTick = await this.currentTick(coinAddress);\n const isUSDCZero = this.usdcIsCurrencyZero(coinAddress);\n\n let tickLower: number;\n let tickUpper: number;\n\n if (isUSDCZero) {\n tickLower = TickFinder.MIN_TICK;\n tickUpper = getValidTick({\n tick: initialTick - 1,\n roundDown: true,\n tickSpacing: this.TICK_SPACING,\n });\n } else {\n tickLower = getValidTick({\n tick: initialTick + 1,\n roundDown: false,\n tickSpacing: this.TICK_SPACING,\n });\n tickUpper = TickFinder.MAX_TICK;\n }\n\n const { liquidity } = await this.readPoolManager.positionInfo({\n poolId,\n owner: this.getFairLaunchAddress(),\n tickLower,\n tickUpper,\n salt: \"\",\n });\n\n const { amount0, amount1 } = calculateUnderlyingTokenBalances(\n liquidity,\n tickLower,\n tickUpper,\n currentTick\n );\n\n const [usdcAmount, coinAmount] = isUSDCZero\n ? [amount0, amount1]\n : [amount1, amount0];\n\n return {\n usdcAmount,\n coinAmount,\n tickLower,\n tickUpper,\n };\n }\n\n /**\n * Gets the bid wall (progressive floor) position for a coin\n * @param coinAddress - The address of the coin\n * @returns Promise<{usdcAmount, coinAmount, pendingUsdc, tickLower, tickUpper}>\n */\n async bidWallPosition(coinAddress: Address) {\n const poolId = await this.poolId(coinAddress);\n const isUSDCZero = this.usdcIsCurrencyZero(coinAddress);\n\n const {\n amount0_: amount0,\n amount1_: amount1,\n pendingEth_: pendingUsdc,\n } = await this.readBidWall.position({ poolId });\n const { tickLower, tickUpper } = await this.readBidWall.poolInfo({\n poolId,\n });\n\n const [usdcAmount, coinAmount] = isUSDCZero\n ? [amount0, amount1]\n : [amount1, amount0];\n\n return {\n usdcAmount,\n coinAmount,\n pendingUsdc,\n tickLower,\n tickUpper,\n };\n }\n\n /**\n * Gets the USDC balance the creator (or split manager) can claim from the\n * FeeEscrow\n * @param creator - The address to check\n * @returns Promise<bigint> - The claimable balance (USDC, 6 decimals)\n */\n creatorRevenue(creator: Address) {\n return this.readFeeEscrow.balances(creator);\n }\n\n /**\n * Gets the referral escrow balance of a recipient for a given token.\n * Referral rewards accrue in the OUTPUT token of each swap: buys accrue the\n * coin, sells accrue USDC.\n * @param recipient - The address of the recipient to check\n * @param token - The token to check (a coin address or USDC)\n * @returns Promise<bigint> - The balance of the recipient\n */\n referralBalance(recipient: Address, token: Address) {\n return this.readReferralEscrow.allocations(recipient, token);\n }\n\n /**\n * Gets a recipient's claimable share inside an earnings-split manager\n * @param managerAddress - The AddressFeeSplitManager instance\n * @param recipient - The recipient to check\n * @returns Promise<bigint> - The claimable balance (USDC, 6 decimals)\n */\n splitBalance(managerAddress: Address, recipient: Address) {\n const readTreasuryManager = new ReadTreasuryManager(\n managerAddress,\n this.drift\n );\n return readTreasuryManager.balances(recipient);\n }\n\n async treasuryManagerInfo(treasuryManagerAddress: Address) {\n const readTreasuryManager = new ReadTreasuryManager(\n treasuryManagerAddress,\n this.drift\n );\n\n const [managerOwner, permissions] = await Promise.all([\n readTreasuryManager.managerOwner(),\n readTreasuryManager.permissions(),\n ]);\n\n return {\n managerOwner,\n permissions,\n };\n }\n\n /**\n * Fetches an address's daily holder pool entitlement from the ubi.fun API.\n * The returned cumulativeWei/proof pair is what the on-chain claim takes.\n * @param account - The holder address\n */\n async getUbiEntitlement(account: Address): Promise<UbiEntitlement> {\n const apiUrl = ApiBaseUrl[this.chainId];\n if (!apiUrl) {\n throw new Error(`No ubi.fun API for chain ${this.chainId}`);\n }\n const response = await axios.get(\n `${apiUrl}/ubi/${account.toLowerCase()}`\n );\n return response.data as UbiEntitlement;\n }\n\n /**\n * An address's claimable holder pool balance right now: the API entitlement\n * minus what was already claimed on-chain. Returns zero while the\n * entitlement's ledger root is still pending the URD timelock (a claim\n * against it would revert).\n * @param account - The holder address\n */\n async claimableUbi(account: Address): Promise<{\n claimable: bigint;\n entitlement: UbiEntitlement;\n }> {\n const entitlement = await this.getUbiEntitlement(account);\n if (!entitlement.cumulativeWei || !entitlement.proof) {\n return { claimable: 0n, entitlement };\n }\n\n if (entitlement.root) {\n const onChainRoot = await this.readUbiPool.root();\n if (entitlement.root.toLowerCase() !== onChainRoot.toLowerCase()) {\n // Root still inside the URD timelock; retry once it activates.\n return { claimable: 0n, entitlement };\n }\n }\n\n const cumulative = BigInt(entitlement.cumulativeWei);\n const claimed = await this.readUbiPool.claimed(account, USDC_ADDRESS);\n return {\n claimable: cumulative > claimed ? cumulative - claimed : 0n,\n entitlement,\n };\n }\n\n /**\n * Gets the pool ID for a given coin\n * @param coinAddress - The address of the coin\n * @returns Promise<string> - The pool ID\n */\n async poolId(coinAddress: Address) {\n return getPoolId(\n coinPoolKey(coinAddress, this.getPositionManagerAddress())\n );\n }\n\n /**\n * Gets the flaunching fee for a given initial price, in native units\n * (msg.value; USDC at 18 decimals on Arc). Zero at the $10k minimum market\n * cap.\n * @param params.sender - The address of the sender\n * @param params.initialMarketCapUSD - The initial market cap in USD\n * @param params.slippagePercent - The slippage percent\n * @returns Promise<bigint> - The flaunching fee\n */\n getFlaunchingFee(params: {\n sender: Address;\n initialMarketCapUSD: number;\n slippagePercent?: number;\n }) {\n const initialMCapInUSDCWei = parseUnits(\n params.initialMarketCapUSD.toString(),\n 6\n );\n const initialPriceParams = encodeAbiParameters(\n [\n {\n type: \"uint256\",\n },\n ],\n [initialMCapInUSDCWei]\n );\n\n return this.readPositionManager.getFlaunchingFee({\n sender: params.sender,\n initialPriceParams,\n slippagePercent: params.slippagePercent,\n });\n }\n\n /**\n * Calculates the msg.value required to flaunch a token: the premine cost (if\n * any) plus the flaunching fee. Native units (USDC at 18 decimals on Arc).\n * @param params.premineAmount - The amount of coins to be premined\n * @param params.initialMarketCapUSD - The initial market cap in USD\n * @param params.slippagePercent - The slippage percent\n * @returns Promise<bigint> - The value required to flaunch\n */\n valueRequiredToFlaunch(params: {\n premineAmount: bigint;\n initialMarketCapUSD: number;\n slippagePercent?: number;\n }) {\n const initialMCapInUSDCWei = parseUnits(\n params.initialMarketCapUSD.toString(),\n 6\n );\n const initialPriceParams = encodeAbiParameters(\n [\n {\n type: \"uint256\",\n },\n ],\n [initialMCapInUSDCWei]\n );\n\n return this.readFlaunchZap.valueRequiredToFlaunch({\n premineAmount: params.premineAmount,\n initialPriceParams,\n slippagePercent: params.slippagePercent,\n });\n }\n\n /**\n * Gets a quote for selling an exact amount of a coin for USDC\n * @param coinAddress - The address of the coin to sell\n * @param amountIn - The exact amount of coins to sell (18 decimals)\n * @param referrer - Optional referrer; must match the referrer used to swap\n * @returns Promise<bigint> - The expected USDC out (6 decimals)\n */\n getSellQuoteExactInput({\n coinAddress,\n amountIn,\n referrer,\n }: {\n coinAddress: Address;\n amountIn: bigint;\n referrer?: Address;\n }) {\n return this.readQuoter.getSellQuoteExactInput({\n coinAddress,\n amountIn,\n positionManagerAddress: this.getPositionManagerAddress(),\n referrer,\n });\n }\n\n /**\n * Gets a quote for buying a coin with an exact amount of USDC\n * @param coinAddress - The address of the coin to buy\n * @param amountIn - The exact amount of USDC to spend (6 decimals)\n * @param referrer - Optional referrer; must match the referrer used to swap\n * @returns Promise<bigint> - The expected coins out (18 decimals)\n */\n getBuyQuoteExactInput({\n coinAddress,\n amountIn,\n referrer,\n }: {\n coinAddress: Address;\n amountIn: bigint;\n referrer?: Address;\n }) {\n return this.readQuoter.getBuyQuoteExactInput({\n coinAddress,\n amountIn,\n positionManagerAddress: this.getPositionManagerAddress(),\n referrer,\n });\n }\n\n /**\n * Gets a quote for buying an exact amount of a coin, answering the USDC in\n * @param coinAddress - The address of the coin to buy\n * @param amountOut - The exact amount of coins to receive (18 decimals)\n * @param referrer - Optional referrer; must match the referrer used to swap\n * @returns Promise<bigint> - The required USDC in (6 decimals)\n */\n getBuyQuoteExactOutput({\n coinAddress,\n amountOut,\n referrer,\n }: {\n coinAddress: Address;\n amountOut: bigint;\n referrer?: Address;\n }) {\n return this.readQuoter.getBuyQuoteExactOutput({\n coinAddress,\n coinOut: amountOut,\n positionManagerAddress: this.getPositionManagerAddress(),\n referrer,\n });\n }\n\n /**\n * Determines if USDC is currency0 in the coin's pool\n * @param coinAddress - The address of the coin\n * @returns boolean - True if USDC is currency0, false otherwise\n */\n usdcIsCurrencyZero(coinAddress: Address) {\n return usdcIsCurrencyZero(coinAddress);\n }\n\n /**\n * Sets a custom IPFS resolver function\n * @dev this is used to resolve IPFS hash to a gateway URL\n * eg: input: Qabc, output: https://ipfs.io/ipfs/Qabc\n * @param resolverFn - Custom function to resolve IPFS URIs\n */\n setIPFSResolver(resolverFn: (ipfsHash: string) => string): void {\n this.resolveIPFS = resolverFn;\n }\n\n /**\n * Parses a transaction hash to extract PoolSwap events and return parsed swap data\n * @param params.txHash - The transaction hash to parse\n * @param params.usdcIsCurrencyZero - Whether USDC is currency0 in the pool (optional;\n * when provided, returns typed BUY/SELL data)\n * @returns Parsed swap log or undefined if no PoolSwap event found\n */\n async parseSwapTx<T extends boolean | undefined = undefined>(params: {\n txHash: Hex;\n usdcIsCurrencyZero?: T;\n }): Promise<\n T extends boolean\n ? BuySwapLog | SellSwapLog | undefined\n : BaseSwapLog | undefined\n > {\n return this.readPositionManager.parseSwapTx(\n params.txHash,\n params.usdcIsCurrencyZero\n ) as any;\n }\n\n async getCoinInfo(coinAddress: Address): Promise<{\n totalSupply: bigint;\n decimals: number;\n formattedTotalSupplyInDecimals: number;\n }> {\n const memecoin = new ReadMemecoin(coinAddress, this.drift);\n const [totalSupply, decimals] = await Promise.all([\n memecoin.totalSupply(),\n memecoin.decimals(),\n ]);\n const formattedTotalSupplyInDecimals = parseFloat(\n formatUnits(totalSupply, decimals)\n );\n return { totalSupply, decimals, formattedTotalSupplyInDecimals };\n }\n\n isFlaunchTokenApprovedForAll(owner: Address, operator: Address) {\n return this.drift.read({\n abi: erc721Abi,\n address: this.getFlaunchAddress(),\n fn: \"isApprovedForAll\",\n args: { owner, operator },\n });\n }\n}\n\nexport class ReadWriteFlaunchSDK extends ReadFlaunchSDK {\n declare drift: Drift<ReadWriteAdapter>;\n public readonly readWriteFeeEscrow: ReadWriteFeeEscrow;\n public readonly readWriteReferralEscrow: ReadWriteReferralEscrow;\n public readonly readWriteFlaunchZap: ReadWriteFlaunchZap;\n public readonly readWritePoolSwap: ReadWritePoolSwap;\n public readonly readWriteXHandleClaims: ReadWriteXHandleClaims;\n public readonly readWriteUbiPool: ReadWriteUniversalRewardsDistributor;\n public readonly readWriteTreasuryManagerFactory: ReadWriteTreasuryManagerFactory;\n\n constructor(\n chainId: number,\n drift: Drift<ReadWriteAdapter> = createDrift(),\n publicClient?: PublicClient\n ) {\n super(chainId, drift, publicClient);\n this.readWriteFeeEscrow = new ReadWriteFeeEscrow(\n FeeEscrowAddress[this.chainId],\n drift\n );\n this.readWriteReferralEscrow = new ReadWriteReferralEscrow(\n ReferralEscrowAddress[this.chainId],\n drift\n );\n this.readWriteFlaunchZap = new ReadWriteFlaunchZap(\n this.chainId,\n FlaunchZapAddress[this.chainId],\n drift\n );\n this.readWritePoolSwap = new ReadWritePoolSwap(\n PoolSwapAddress[this.chainId],\n drift\n );\n this.readWriteXHandleClaims = new ReadWriteXHandleClaims(\n XHandleClaimsAddress[this.chainId],\n drift\n );\n this.readWriteUbiPool = new ReadWriteUniversalRewardsDistributor(\n UniversalRewardsDistributorAddress[this.chainId],\n drift\n );\n this.readWriteTreasuryManagerFactory = new ReadWriteTreasuryManagerFactory(\n this.chainId,\n TreasuryManagerFactoryAddress[this.chainId],\n drift,\n this.publicClient\n );\n }\n\n /**\n * Launches a new coin through the FlaunchZap\n * @param params - Parameters for the launch\n * @returns Transaction response\n */\n flaunch(params: FlaunchParams) {\n return this.readWriteFlaunchZap.flaunch(params);\n }\n\n /**\n * Launches a new coin, pinning the image + metadata first to produce the tokenUri\n * @param params - Parameters for the launch with IPFS data\n * @returns Transaction response\n */\n flaunchIPFS(params: FlaunchIPFSParams) {\n return this.readWriteFlaunchZap.flaunchIPFS(params);\n }\n\n flaunchWithSplitManager(params: FlaunchWithSplitManagerParams) {\n return this.readWriteFlaunchZap.flaunchWithSplitManager(params);\n }\n\n /**\n * Launches a new coin that splits the creator revenue between the creator and a\n * list of recipients, storing the token metadata on IPFS\n * @param params - Parameters including all IPFS metadata\n * @returns Transaction response\n */\n flaunchIPFSWithSplitManager(params: FlaunchWithSplitManagerIPFSParams) {\n return this.readWriteFlaunchZap.flaunchIPFSWithSplitManager(params);\n }\n\n /** ubi.fun-branded alias of {@link flaunch}. */\n createUBI(params: FlaunchParams) {\n return this.flaunch(params);\n }\n\n /** ubi.fun-branded alias of {@link flaunchIPFS}. */\n createUBIIPFS(params: FlaunchIPFSParams) {\n return this.flaunchIPFS(params);\n }\n\n /** ubi.fun-branded alias of {@link flaunchWithSplitManager}. */\n createUBIWithSplitManager(params: FlaunchWithSplitManagerParams) {\n return this.flaunchWithSplitManager(params);\n }\n\n /** ubi.fun-branded alias of {@link flaunchIPFSWithSplitManager}. */\n createUBIIPFSWithSplitManager(params: FlaunchWithSplitManagerIPFSParams) {\n return this.flaunchIPFSWithSplitManager(params);\n }\n\n async coinBalance(coinAddress: Address) {\n const user = await this.drift.getSignerAddress();\n const memecoin = new ReadMemecoin(coinAddress, this.drift);\n await memecoin.contract.cache.clear();\n return memecoin.balanceOf(user);\n }\n\n /** The connected wallet's USDC (6 decimals) balance. */\n async usdcBalance() {\n const user = await this.drift.getSignerAddress();\n const usdc = new ReadMemecoin(USDC_ADDRESS, this.drift);\n await usdc.contract.cache.clear();\n return usdc.balanceOf(user);\n }\n\n /**\n * The connected wallet's allowance of `token` to PoolSwap. Pass USDC_ADDRESS\n * before a buy, the coin address before a sell.\n */\n async swapAllowance(token: Address) {\n const owner = await this.drift.getSignerAddress();\n const erc20 = new ReadMemecoin(token, this.drift);\n await erc20.contract.cache.clear();\n return erc20.allowance(owner, this.readWritePoolSwap.contract.address);\n }\n\n /**\n * Approves `amount` of `token` to PoolSwap. Pass USDC_ADDRESS before a buy,\n * the coin address before a sell.\n * @returns Transaction response\n */\n approveSwapInput(token: Address, amount: bigint) {\n const erc20 = new ReadWriteMemecoin(token, this.drift);\n return erc20.approve(this.readWritePoolSwap.contract.address, amount);\n }\n\n /**\n * Buys a coin with USDC through PoolSwap. Requires a prior USDC approval to\n * PoolSwap (see approveSwapInput); throws before sending if the allowance is\n * short.\n * @param params.coinAddress - The coin to buy\n * @param params.amountIn - Exact USDC to spend (6 decimals)\n * @param params.slippagePercent - Max price movement beyond the quoted fill, default 5 (%)\n * @param params.referrer - Optional referrer credited with 5% of the swap fee\n * @returns Transaction response\n */\n async buyCoin(params: {\n coinAddress: Address;\n amountIn: bigint;\n slippagePercent?: number;\n referrer?: Address;\n }) {\n return this.executeSwap({\n coinAddress: params.coinAddress,\n side: \"buy\",\n amountIn: params.amountIn,\n slippagePercent: params.slippagePercent,\n referrer: params.referrer,\n });\n }\n\n /**\n * Sells a coin for USDC through PoolSwap. Requires a prior coin approval to\n * PoolSwap (see approveSwapInput); throws before sending if the allowance is\n * short.\n * @param params.coinAddress - The coin to sell\n * @param params.amountIn - Exact coins to sell (18 decimals)\n * @param params.slippagePercent - Max price movement beyond the quoted fill, default 5 (%)\n * @param params.referrer - Optional referrer credited with 5% of the swap fee\n * @returns Transaction response\n */\n async sellCoin(params: {\n coinAddress: Address;\n amountIn: bigint;\n slippagePercent?: number;\n referrer?: Address;\n }) {\n return this.executeSwap({\n coinAddress: params.coinAddress,\n side: \"sell\",\n amountIn: params.amountIn,\n slippagePercent: params.slippagePercent,\n referrer: params.referrer,\n });\n }\n\n private async executeSwap(params: {\n coinAddress: Address;\n side: \"buy\" | \"sell\";\n amountIn: bigint;\n slippagePercent?: number;\n referrer?: Address;\n }) {\n const inputToken =\n params.side === \"buy\" ? USDC_ADDRESS : params.coinAddress;\n\n const allowance = await this.swapAllowance(inputToken);\n if (allowance < params.amountIn) {\n throw new Error(\n `Insufficient ${params.side === \"buy\" ? \"USDC\" : \"coin\"} allowance to PoolSwap: ` +\n `have ${allowance}, need ${params.amountIn}. Call approveSwapInput first.`\n );\n }\n\n const sqrtPriceX96 = await this.currentSqrtPriceX96(params.coinAddress);\n if (sqrtPriceX96 === 0n) {\n throw new Error(\n \"Pool has no observed price yet; try again after the first swap\"\n );\n }\n\n const quotedAmountOut =\n params.side === \"buy\"\n ? await this.getBuyQuoteExactInput({\n coinAddress: params.coinAddress,\n amountIn: params.amountIn,\n referrer: params.referrer,\n })\n : await this.getSellQuoteExactInput({\n coinAddress: params.coinAddress,\n amountIn: params.amountIn,\n referrer: params.referrer,\n });\n\n const zeroForOne = swapDirection(params.side, params.coinAddress);\n\n return this.readWritePoolSwap.swap({\n poolKey: coinPoolKey(\n params.coinAddress,\n this.getPositionManagerAddress()\n ),\n zeroForOne,\n // Exact-in is negative amountSpecified in v4 semantics.\n amountSpecified: -params.amountIn,\n // Anchor the bound on the quoted end price, not spot: a large trade's\n // own impact must not consume the slippage budget, or PoolSwap would\n // stop at the limit and settle a partial fill.\n sqrtPriceLimitX96: sqrtPriceLimit({\n current: expectedEndSqrtPriceX96({\n current: sqrtPriceX96,\n zeroForOne,\n amountIn: params.amountIn,\n amountOut: quotedAmountOut,\n }),\n zeroForOne,\n slippageBps: Math.round((params.slippagePercent ?? 5) * 100),\n }),\n referrer: params.referrer,\n });\n }\n\n /**\n * Withdraws the connected creator's accrued revenue from the FeeEscrow as\n * USDC\n * @param recipient - Optional recipient; defaults to the connected wallet\n * @returns Transaction response\n */\n async withdrawCreatorRevenue(params?: { recipient?: Address }) {\n const recipient =\n params?.recipient ?? (await this.drift.getSignerAddress());\n return this.readWriteFeeEscrow.withdrawFees(recipient);\n }\n\n /**\n * Claims the referral balance for a given recipient\n * @param tokens - The tokens to claim (coin addresses and/or USDC)\n * @param recipient - The address to receive the claimed tokens\n * @returns Transaction response\n */\n claimReferralBalance(tokens: Address[], recipient: Address) {\n return this.readWriteReferralEscrow.claimTokens(tokens, recipient);\n }\n\n /**\n * Claims the connected wallet's share from an earnings-split manager (paid\n * as USDC)\n * @param managerAddress - The AddressFeeSplitManager instance\n * @returns Transaction response\n */\n claimSplitEarnings(managerAddress: Address) {\n const readWriteTreasuryManager = new ReadWriteTreasuryManager(\n managerAddress,\n this.drift\n );\n return readWriteTreasuryManager.claim();\n }\n\n /**\n * Claims an address's outstanding daily holder pool balance from the\n * UniversalRewardsDistributor. Fetches the entitlement + proof from the\n * ubi.fun API; throws if nothing is claimable (including while the ledger\n * root is timelocked).\n * @param account - Optional holder; defaults to the connected wallet\n * @returns Transaction response\n */\n async claimUbi(account?: Address) {\n const holder = account ?? (await this.drift.getSignerAddress());\n const { claimable, entitlement } = await this.claimableUbi(holder);\n if (claimable === 0n || !entitlement.cumulativeWei || !entitlement.proof) {\n throw new Error(\"Nothing claimable for this address right now\");\n }\n\n return this.readWriteUbiPool.claim({\n account: holder,\n reward: USDC_ADDRESS,\n claimable: BigInt(entitlement.cumulativeWei),\n proof: entitlement.proof,\n });\n }\n\n treasuryManagerSetPermissions(\n treasuryManagerAddress: Address,\n permissionsAddress: Address\n ) {\n const readWriteTreasuryManager = new ReadWriteTreasuryManager(\n treasuryManagerAddress,\n this.drift\n );\n return readWriteTreasuryManager.setPermissions(permissionsAddress);\n }\n\n /**\n * Transfers the ownership of a treasury manager to a new address\n * @param treasuryManagerAddress - The address of the treasury manager\n * @param newManagerOwner - The address of the new manager owner\n * @returns Transaction response\n */\n treasuryManagerTransferOwnership(\n treasuryManagerAddress: Address,\n newManagerOwner: Address\n ) {\n const readWriteTreasuryManager = new ReadWriteTreasuryManager(\n treasuryManagerAddress,\n this.drift\n );\n return readWriteTreasuryManager.transferManagerOwnership(newManagerOwner);\n }\n\n /**\n * Sets approval for all Flaunch NFTs to an operator\n * @param operator - The operator address to approve/revoke\n * @param approved - Whether to approve or revoke approval\n * @returns Transaction response\n */\n setFlaunchTokenApprovalForAll(operator: Address, approved: boolean) {\n return this.drift.write({\n abi: erc721Abi,\n address: this.getFlaunchAddress(),\n fn: \"setApprovalForAll\",\n args: { operator, approved },\n });\n }\n\n /**\n * Adds an existing Flaunch NFT to a treasury manager. NFT approval must be\n * given prior to calling this function.\n * @param treasuryManagerAddress - The address of the treasury manager\n * @param tokenId - The token ID to deposit\n * @param creator - Optional creator address. If not provided, uses the connected wallet address\n * @param data - Optional additional data for the deposit (defaults to empty bytes)\n * @returns Transaction response\n */\n async addToTreasuryManager(\n treasuryManagerAddress: Address,\n tokenId: bigint,\n creator?: Address,\n data: `0x${string}` = \"0x\"\n ) {\n const readWriteTreasuryManager = new ReadWriteTreasuryManager(\n treasuryManagerAddress,\n this.drift\n );\n\n const flaunchToken = {\n flaunch: this.getFlaunchAddress(),\n tokenId,\n };\n\n const creatorAddress = creator ?? (await this.drift.getSignerAddress());\n\n return readWriteTreasuryManager.deposit(flaunchToken, creatorAddress, data);\n }\n}\n","import { Chain, defineChain } from \"viem\";\nimport { ARC_MAINNET_CHAIN_ID, ARC_TESTNET_CHAIN_ID } from \"../addresses\";\n\n/**\n * Arc (Circle) chain definitions for viem. Gas is paid in USDC: msg.value is\n * 18-decimal native USDC while the ERC20 interface at 0x3600... is the same\n * asset at 6 decimals.\n *\n * Arc mainnet is in its private phase: provider endpoints (including this\n * default) reject public traffic until Circle opens access, so pass your own\n * transport url. Once the network opens, public RPCs will be plentiful.\n */\nexport const arc = defineChain({\n id: ARC_MAINNET_CHAIN_ID,\n name: \"Arc\",\n nativeCurrency: {\n name: \"USD Coin\",\n symbol: \"USDC\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.blockdaemon.mainnet.arc.io\"],\n },\n },\n blockExplorers: {\n default: {\n name: \"Arc Explorer\",\n url: \"https://explorer.arc.io\",\n },\n },\n});\n\nexport const arcTestnet = defineChain({\n id: ARC_TESTNET_CHAIN_ID,\n name: \"Arc Testnet\",\n testnet: true,\n nativeCurrency: {\n name: \"USD Coin\",\n symbol: \"USDC\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://arc-testnet.drpc.org\", \"https://rpc.testnet.arc.network\"],\n },\n },\n blockExplorers: {\n default: {\n name: \"Arcscan\",\n url: \"https://testnet.arcscan.app\",\n },\n },\n});\n\nexport const chainIdToChain: {\n [key: number]: Chain;\n} = {\n [arc.id]: arc,\n [arcTestnet.id]: arcTestnet,\n};\n","import {\n createDrift as createDriftOriginal,\n Drift,\n ReadWriteAdapter,\n} from \"@delvtech/drift\";\nimport { viemAdapter } from \"@delvtech/drift-viem\";\nimport type { PublicClient, WalletClient } from \"viem\";\n\nexport type CreateDriftParams = {\n publicClient: PublicClient;\n walletClient?: WalletClient;\n};\n\n/**\n * Creates a read-only Drift instance with only public client\n * @param params - Parameters with only publicClient\n * @returns Drift instance for read-only operations\n * @throws Error if publicClient.chain is not configured\n */\nexport function createDrift(\n params: Omit<CreateDriftParams, \"walletClient\">\n): Drift;\n/**\n * Creates a read-write Drift instance with both public and wallet clients\n * @param params - Parameters with both publicClient and walletClient\n * @returns Drift instance for read and write operations\n * @throws Error if publicClient.chain is not configured\n */\nexport function createDrift(\n params: Required<CreateDriftParams>\n): Drift<ReadWriteAdapter>;\n\n/**\n * Creates a Drift instance with the provided clients\n * @param params - Parameters for creating the Drift instance\n * @returns Drift instance configured with the appropriate clients\n * @throws Error if publicClient.chain is not configured\n */\nexport function createDrift(\n params: CreateDriftParams\n): Drift | Drift<ReadWriteAdapter> {\n const { publicClient, walletClient } = params;\n\n if (!publicClient.chain) {\n throw new Error(\"publicClient must be configured with a chain\");\n }\n\n return walletClient\n ? createDriftOriginal({\n adapter: viemAdapter({ publicClient, walletClient }),\n })\n : createDriftOriginal({\n adapter: viemAdapter({ publicClient }),\n });\n}\n","import { createDrift } from \"./drift\";\nimport { viemAdapter } from \"@delvtech/drift-viem\";\nimport type { PublicClient, WalletClient } from \"viem\";\nimport { ReadFlaunchSDK, ReadWriteFlaunchSDK } from \"./FlaunchSDK\";\n\nexport type CreateFlaunchParams = {\n publicClient: PublicClient;\n walletClient?: WalletClient;\n};\n\n/**\n * Creates a read-only Flaunch SDK instance with only public client\n * @param params - Parameters with only publicClient\n * @returns ReadFlaunchSDK for read-only operations\n * @throws Error if publicClient.chain is not configured\n */\nexport function createFlaunch(\n params: Omit<CreateFlaunchParams, \"walletClient\">\n): ReadFlaunchSDK;\n/**\n * Creates a read-write Flaunch SDK instance with both public and wallet clients\n * @param params - Parameters with both publicClient and walletClient\n * @returns ReadWriteFlaunchSDK for read and write operations\n * @throws Error if publicClient.chain is not configured\n */\nexport function createFlaunch(\n params: Required<CreateFlaunchParams>\n): ReadWriteFlaunchSDK;\n\n/**\n * Creates a Flaunch SDK instance with the provided clients\n * @param params - Parameters for creating the SDK\n * @returns ReadFlaunchSDK if only publicClient is provided, ReadWriteFlaunchSDK if walletClient is also provided\n * @throws Error if publicClient.chain is not configured\n */\nexport function createFlaunch(params: CreateFlaunchParams) {\n const { publicClient, walletClient } = params;\n\n if (!publicClient.chain) {\n throw new Error(\"publicClient must be configured with a chain\");\n }\n\n const chainId = publicClient.chain.id;\n\n // Return appropriate SDK type based on whether walletClient is provided\n return walletClient\n ? new ReadWriteFlaunchSDK(\n chainId,\n createDrift({ publicClient, walletClient }),\n publicClient\n )\n : new ReadFlaunchSDK(chainId, createDrift({ publicClient }), publicClient);\n}\n","import {\n createWalletClient,\n http,\n encodeFunctionData,\n decodeFunctionData,\n parseAbi,\n type PublicClient,\n type WalletClient,\n type Address,\n type Hex,\n} from \"viem\";\nimport { createDrift } from \"./drift\";\nimport { ReadFlaunchSDK, ReadWriteFlaunchSDK } from \"./FlaunchSDK\";\n\n// ABI for encoding the call data\nexport const encodedCallAbi = parseAbi([\n \"function call(address to, uint256 value, bytes data)\",\n]);\n\nexport interface CallData {\n to: Address;\n value: bigint;\n data: Hex;\n}\n\nexport type CreateFlaunchCalldataParams = {\n publicClient: PublicClient;\n walletAddress?: Address;\n};\n\n/**\n * Creates a custom wallet client that returns encoded calldata instead of broadcasting transactions\n */\nexport function createCallDataWalletClient(\n publicClient: PublicClient,\n walletAddress: Address\n): WalletClient {\n if (!publicClient.chain) {\n throw new Error(\"publicClient must be configured with a chain\");\n }\n\n // Create a base wallet client with the chain configuration\n const baseWalletClient = createWalletClient({\n chain: publicClient.chain,\n transport: http(),\n });\n\n // Override the wallet client methods to return encoded calldata\n const callDataWalletClient = baseWalletClient.extend((client) => ({\n // Override the account-related methods to return the provided walletAddress\n get account() {\n return {\n address: walletAddress,\n type: \"json-rpc\" as const,\n } as any;\n },\n\n async getAddresses() {\n return [walletAddress];\n },\n\n async requestAddresses() {\n return [walletAddress];\n },\n\n // Override writeContract to return encoded calldata instead of broadcasting\n async writeContract(args: any) {\n const to = args.address as Address;\n const value = (args.value ?? 0n) as bigint;\n\n // Encode the function call data\n const calldata = encodeFunctionData({\n abi: args.abi,\n functionName: args.functionName,\n args: args.args,\n }) as Hex;\n\n // Encode the call using the standard call format\n const encodedCall = encodeFunctionData({\n abi: encodedCallAbi,\n functionName: \"call\",\n args: [to, value, calldata],\n }) as Hex;\n\n return encodedCall;\n },\n\n // Override sendTransaction to return encoded calldata instead of broadcasting\n async sendTransaction(args: any) {\n const to = args.to as Address;\n const value = (args.value ?? 0n) as bigint;\n const data = (args.data ?? \"0x\") as Hex;\n\n // Encode the call using the standard call format\n const encodedCall = encodeFunctionData({\n abi: encodedCallAbi,\n functionName: \"call\",\n args: [to, value, data],\n }) as Hex;\n\n return encodedCall;\n },\n\n // Override signTransaction to return encoded calldata (for consistency)\n async signTransaction(args: any) {\n const to = args.to as Address;\n const value = (args.value ?? 0n) as bigint;\n const data = (args.data ?? \"0x\") as Hex;\n\n const encodedCall = encodeFunctionData({\n abi: encodedCallAbi,\n functionName: \"call\",\n args: [to, value, data],\n }) as Hex;\n\n return encodedCall;\n },\n }));\n\n return callDataWalletClient;\n}\n\n/**\n * Creates a read-only Flaunch SDK instance with only public client\n * @param params - Parameters with only publicClient\n * @returns ReadFlaunchSDK for read-only operations\n * @throws Error if publicClient.chain is not configured\n */\nexport function createFlaunchCalldata(\n params: Omit<CreateFlaunchCalldataParams, \"walletAddress\">\n): ReadFlaunchSDK;\n/**\n * Creates a read-write Flaunch SDK instance that returns encoded calldata instead of broadcasting transactions\n * @param params - Parameters containing publicClient and walletAddress\n * @returns ReadWriteFlaunchSDK instance configured for calldata generation\n * @throws Error if publicClient.chain is not configured\n */\nexport function createFlaunchCalldata(\n params: Required<CreateFlaunchCalldataParams>\n): ReadWriteFlaunchSDK;\n\n/**\n * Creates a Flaunch SDK instance that returns encoded calldata instead of broadcasting transactions\n * @param params - Parameters containing publicClient and optionally walletAddress\n * @returns ReadFlaunchSDK if only publicClient is provided, ReadWriteFlaunchSDK if walletAddress is also provided\n * @throws Error if publicClient.chain is not configured\n */\nexport function createFlaunchCalldata(params: CreateFlaunchCalldataParams) {\n const { publicClient, walletAddress } = params;\n\n if (!publicClient.chain) {\n throw new Error(\"publicClient must be configured with a chain\");\n }\n\n const chainId = publicClient.chain.id;\n\n // Return appropriate SDK type based on whether walletAddress is provided\n if (walletAddress) {\n // Create custom wallet client that returns calldata\n const callDataWalletClient = createCallDataWalletClient(\n publicClient,\n walletAddress\n );\n\n // Create Drift with the custom wallet client\n const drift = createDrift({\n publicClient,\n walletClient: callDataWalletClient,\n });\n\n return new ReadWriteFlaunchSDK(chainId, drift);\n } else {\n // Create read-only SDK with only public client\n const drift = createDrift({ publicClient });\n return new ReadFlaunchSDK(chainId, drift);\n }\n}\n\n/**\n * Decodes the result from SDK methods into transaction object\n * @param encodedCall - The result returned by SDK methods\n * @returns Call data containing to, value, and data\n */\nexport function decodeCallData(encodedCall: Hex): CallData {\n const decodedCall = decodeFunctionData({\n abi: encodedCallAbi,\n data: encodedCall,\n });\n\n return {\n to: decodedCall.args[0] as Address,\n value: decodedCall.args[1] as bigint,\n data: decodedCall.args[2] as Hex,\n };\n}\n\n/**\n * Convenience function to call an SDK method and automatically parse the result as transaction object\n * @param sdkMethod - A function that returns a Promise<Hex> (encoded calldata)\n * @returns Promise<CallData> with decoded transaction parameters\n */\nexport async function parseCall<T extends (...args: any[]) => Promise<Hex>>(\n sdkMethod: T\n): Promise<CallData> {\n const encodedCall = await sdkMethod();\n return decodeCallData(encodedCall);\n}\n\n/**\n * Type helper for SDK methods that return encoded calldata\n */\nexport type CallDataMethod<T extends any[] = any[]> = (\n ...args: T\n) => Promise<Hex>;\n\n/**\n * Type helper for the result of a calldata operation\n */\nexport type CallDataResult = Promise<CallData>;\n","import { ReadFlaunchSDK, ReadWriteFlaunchSDK } from \"./sdk/FlaunchSDK\";\n\nexport * from \"./abi\";\nexport * from \"./addresses\";\nexport * from \"./helpers\";\nexport * from \"./utils/univ4\";\nexport * from \"./utils/parseSwap\";\nexport * from \"./utils/slippage\";\nexport * from \"./utils/swap\";\nexport * from \"./types\";\n\nexport type {\n BuySwapLog,\n SellSwapLog,\n BaseSwapLog,\n PoolCreatedLogs,\n PoolSwapLog,\n} from \"./clients/FlaunchPositionManagerClient\";\n\nexport {\n handleHashOf,\n normalizeHandle,\n HANDLE_RE,\n} from \"./clients/XHandleClaimsClient\";\n\nexport type { UbiEntitlement } from \"./sdk/FlaunchSDK\";\n\nexport { ReadFlaunchSDK, ReadWriteFlaunchSDK };\nexport { createFlaunch } from \"./sdk/factory\";\nexport type { CreateFlaunchParams } from \"./sdk/factory\";\nexport { createDrift } from \"./sdk/drift\";\n\n// Calldata generation exports\nexport {\n createFlaunchCalldata,\n decodeCallData,\n parseCall,\n createCallDataWalletClient,\n encodedCallAbi,\n} from \"./sdk/calldata\";\nexport type {\n CreateFlaunchCalldataParams,\n CallData,\n CallDataMethod,\n CallDataResult,\n} from \"./sdk/calldata\";\n\nexport const FlaunchSDK = {\n ReadFlaunchSDK,\n ReadWriteFlaunchSDK,\n};\n\n// ubi.fun-branded aliases. Internals keep the upstream Flaunch names so they\n// match the deployed contract ABIs and stay diffable against flaunch-sdk.\nexport {\n ReadFlaunchSDK as ReadUbiSDK,\n ReadWriteFlaunchSDK as ReadWriteUbiSDK,\n};\nexport { createFlaunch as createUbiSDK } from \"./sdk/factory\";\nexport type { CreateFlaunchParams as CreateUbiSDKParams } from \"./sdk/factory\";\nexport { createFlaunchCalldata as createUBICalldata } from \"./sdk/calldata\";\nexport type { CreateFlaunchCalldataParams as CreateUBICalldataParams } from \"./sdk/calldata\";\n\nexport const UbiSDK = {\n ReadUbiSDK: ReadFlaunchSDK,\n ReadWriteUbiSDK: ReadWriteFlaunchSDK,\n};\n","// Generated from AddressFeeSplitManager (approved earnings-split implementation).\n// Source artifact: AddressFeeSplitManager.sol/AddressFeeSplitManager.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const AddressFeeSplitManagerAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_treasuryManagerFactory\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_feeEscrowRegistry\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"receive\",\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_CREATOR_SHARE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_OWNER_SHARE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"VALID_SHARE_TOTAL\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"amountClaimed\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_claimed\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balances\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"balance_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claim\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claimableOwnerFees\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"creator\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"creatorFees\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"creatorShare\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"creatorTotalClaimed\",\n \"inputs\": [\n {\n \"name\": \"_creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_claimed\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"deposit\",\n \"inputs\": [\n {\n \"name\": \"_flaunchToken\",\n \"type\": \"tuple\",\n \"internalType\": \"struct ITreasuryManager.FlaunchToken\",\n \"components\": [\n {\n \"name\": \"flaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"_creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"feeEscrowRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IFeeEscrowRegistry\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunchTokenInternalIds\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_internalId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getCreatorFee\",\n \"inputs\": [\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"creatorFee_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getOwnerFee\",\n \"inputs\": [\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"ownerFee_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getPoolId\",\n \"inputs\": [\n {\n \"name\": \"_flaunchToken\",\n \"type\": \"tuple\",\n \"internalType\": \"struct ITreasuryManager.FlaunchToken\",\n \"components\": [\n {\n \"name\": \"flaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"poolId_\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialize\",\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialized\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"internalIds\",\n \"inputs\": [\n {\n \"name\": \"_internalId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"flaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isValidCreator\",\n \"inputs\": [\n {\n \"name\": \"_creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isValidRecipient\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"managerFees\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"managerOwner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nextInternalId\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownerFees\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownerShare\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pendingCreatorFees\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"balance_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pendingOwnerFees\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"permissions\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IManagerPermissions\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"recipientShare\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"rescue\",\n \"inputs\": [\n {\n \"name\": \"_flaunchToken\",\n \"type\": \"tuple\",\n \"internalType\": \"struct ITreasuryManager.FlaunchToken\",\n \"components\": [\n {\n \"name\": \"flaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setCreator\",\n \"inputs\": [\n {\n \"name\": \"_flaunchToken\",\n \"type\": \"tuple\",\n \"internalType\": \"struct ITreasuryManager.FlaunchToken\",\n \"components\": [\n {\n \"name\": \"flaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"_creator\",\n \"type\": \"address\",\n \"internalType\": \"address payable\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setPermissions\",\n \"inputs\": [\n {\n \"name\": \"_permissions\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"splitFees\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenPoolId\",\n \"inputs\": [\n {\n \"name\": \"_internalId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenTimelock\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_unlockedAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenTotalClaimed\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_claimed\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokens\",\n \"inputs\": [\n {\n \"name\": \"_creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"flaunchTokens_\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct ITreasuryManager.FlaunchToken[]\",\n \"components\": [\n {\n \"name\": \"flaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferManagerOwnership\",\n \"inputs\": [\n {\n \"name\": \"_newManagerOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferRecipientShare\",\n \"inputs\": [\n {\n \"name\": \"_newRecipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"treasuryManagerFactory\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract TreasuryManagerFactory\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"CreatorShareInitialized\",\n \"inputs\": [\n {\n \"name\": \"_creatorShare\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"CreatorUpdated\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_creator\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ETHReceivedFromUnknownSource\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ManagerInitialized\",\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_params\",\n \"type\": \"tuple\",\n \"indexed\": false,\n \"internalType\": \"struct AddressFeeSplitManager.InitializeParams\",\n \"components\": [\n {\n \"name\": \"creatorShare\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"ownerShare\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"recipientShares\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct AddressFeeSplitManager.RecipientShare[]\",\n \"components\": [\n {\n \"name\": \"recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"share\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ]\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ManagerOwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"_previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnerShareInitialized\",\n \"inputs\": [\n {\n \"name\": \"_ownerShare\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PermissionsUpdated\",\n \"inputs\": [\n {\n \"name\": \"_permissions\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RecipientAdded\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_share\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RecipientShareTransferred\",\n \"inputs\": [\n {\n \"name\": \"_oldRecipient\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_newRecipient\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_share\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RevenueClaimed\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amountClaimed\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TreasuryEscrowed\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_owner\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TreasuryReclaimed\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TreasuryTimelocked\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_unlockedAt\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CreatorShareAlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"FlaunchContractNotValid\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InsufficientSharesToTransfer\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidClaimer\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidCreator\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidCreatorAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidCreatorShare\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidOwnerShare\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidRecipient\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidRecipientShareTotal\",\n \"inputs\": [\n {\n \"name\": \"_share\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_validShare\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidShareTotal\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidShareTransferRecipient\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotManagerOwner\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnerShareAlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Reentrancy\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TokenTimelocked\",\n \"inputs\": [\n {\n \"name\": \"_unlockedAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"UnableToSendRevenue\",\n \"inputs\": [\n {\n \"name\": \"_reason\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"UnknownFlaunchToken\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"UnknownPoolId\",\n \"inputs\": []\n }\n] as const;\n"],"names":["ARC_MAINNET_CHAIN_ID","ARC_TESTNET_CHAIN_ID","USDC_ADDRESS","NativeTokenAddress","FlaunchZapAddress","FlaunchPositionManagerAddress","FlaunchAddress","FairLaunchAddress","BidWallAddress","PoolSwapAddress","TreasuryManagerFactoryAddress","AddressFeeSplitManagerAddress","FeeEscrowAddress","ReferralEscrowAddress","XHandleClaimsAddress","UniversalRewardsDistributorAddress","PoolManagerAddress","QuoterAddress","ApiBaseUrl","FlaunchPositionManagerAbi","type","inputs","name","internalType","components","stateMutability","outputs","indexed","anonymous","getAmountWithSlippage","amount","slippage","swapType","BigInt","parseEther","parseSwapData","args","usdcIsCurrencyZero","flAmount0","flAmount1","flFee0","flFee1","ispAmount0","ispAmount1","ispFee0","ispFee1","uniAmount0","uniAmount1","uniFee0","uniFee1","currency0Delta","currency1Delta","currency0Fees","currency1Fees","feesIsInUSDC","absCurrency0Delta","absCurrency1Delta","absCurrency0Fees","absCurrency1Fees","fees","isInUSDC","delta","coinsBought","usdcSold","coinsSold","usdcBought","InitialPriceAbi","ReadInitialPrice","constructor","address","drift","createDrift","Error","this","contract","abi","getFlaunchingFee","params","read","_sender","sender","_initialPriceParams","initialPriceParams","getSqrtPriceX96","_flipped","zeroAddress","ReadFlaunchPositionManager","TOTAL_SUPPLY","getFeeCalculator","forFairLaunch","_isFairLaunch","isValidCoin","coinAddress","_token","tickSpacing","poolKey","getPoolFeeDistribution","poolId","_poolId","readInitialPrice","flaunchingFee","slippagePercent","toFixed","toString","watchPoolCreated","onPoolCreated","startBlockNumber","intervalId","logs","isFetchingFromStart","lastBlockNumber","getBlockNumber","pollEvents","async","currentBlockNumber","_logs","getEvents","fromBlock","toBlock","logsWithTimestamps","Promise","all","reverse","map","log","block","getBlock","blockNumber","timestamp","Number","length","error","console","setInterval","pollPoolCreatedNow","cleanup","clearInterval","parseSwapTx","txHash","tx","getTransaction","hash","targetLog","find","transactionHash","swapData","watchPoolSwap","onPoolSwap","filterByPoolId","filter","pollPoolSwapNow","bytes32ToUint256","value","hexToBigInt","uint256ToBytes32","pad","encodeAbiParameters","size","dir","PoolManagerAbi","ReadPoolManager","poolStateSlot","POOLS_SLOT","keccak256","encodePacked","poolSlot0","stateSlot","result","slot","data","Array","isArray","dataAsBigInt","sqrtPriceX96","tickRaw","tick","protocolFee","lpFee","positionInfo","owner","tickLower","tickUpper","salt","saltBytes32","stringToHex","positionKey","positionMapping","positionInfoSlot","startSlot","nSlots","words","blob","i","sliceHex","liquidity","feeGrowthInside0LastX128","feeGrowthInside1LastX128","FairLaunchAbi","ReadFairLaunch","fairLaunchDuration","startsAt","endsAt","fairLaunchInfo","isFairLaunchActive","closed","Date","getTime","BidwallAbi","ReadBidWall","position","poolInfo","FlaunchZapAbi","IPFS_GATEWAYS","currentGatewayIndex","resolveIPFS","startsWith","cid","slice","gateway","resolveIPFSCandidates","METADATA_MAX_BYTES","fetchTokenUriMetadata","url","test","axios","get","timeout","maxRedirects","maxContentLength","maxBodyLength","fetchTokenUriMetadataWithFallback","urls","lastError","uploadToUbiApi","bytes","mimeType","base64Image","base64Data","split","byteCharacters","atob","Uint8Array","charCodeAt","decodeBase64Image","formData","FormData","append","Blob","symbol","description","websiteUrl","discordUrl","twitterUrl","telegramUrl","response","post","apiUrl","tokenUri","image","isAxiosError","message","generateTokenUri","chainId","metadata","TickFinder","MIN_TICK","MAX_TICK","Q192","getPoolId","packed","concat","currency0","currency1","toHex","fee","hooks","orderPoolKey","toLowerCase","getValidTick","roundDown","validTick","Math","trunc","getAmount0ForLiquidity","sqrtRatioAX96","sqrtRatioBX96","sqrtRatioA","sqrtRatioB","getAmount1ForLiquidity","getSqrtPriceX96FromTick","absTick","ratio","resultShifted","calculateUnderlyingTokenBalances","tickCurrent","sqrtPriceCurrentX96","sqrtPriceLowerX96","sqrtPriceUpperX96","amount0","amount1","maxLiquidityForAmount0Precise","maxLiquidityForAmount1","referrerHookData","referrer","isAddress","coinPoolKey","positionManagerAddress","swapDirection","side","MIN_SQRT_PRICE","MAX_SQRT_PRICE","expectedEndSqrtPriceX96","current","zeroForOne","amountIn","amountOut","end","sqrtPriceLimit","slippageBps","isInteger","multiplier","next","bigintSqrt","limit","ReadFlaunchZap","valueRequiredToFlaunch","isFinite","_premineAmount","premineAmount","_slippage","round","ReadWriteFlaunchZap","super","flaunch","fairLaunchPercent","creatorFeeAllocationPercent","initialMCapInUSDCWei","parseUnits","initialMarketCapUSD","fairLaunchInBps","creatorFeeAllocationInBps","treasuryManagerParams","manager","permissions","initializeData","depositData","write","_flaunchParams","initialTokenFairLaunch","creator","creatorFeeAllocation","flaunchAt","feeCalculatorParams","_trustedFeeSigner","_premineSwapHookData","premineReferrer","_treasuryManagerParams","_whitelistParams","whitelistParams","merkleRoot","zeroHash","merkleIPFSHash","maxTokens","_airdropParams","airdropParams","airdropIndex","airdropAmount","airdropEndTime","flaunchIPFS","flaunchWithSplitManager","VALID_SHARE_TOTAL","receiverShares","splitReceivers","receiver","percent","recipient","share","totalReceiverShares","reduce","acc","curr","recipientShares","creatorShare","ownerShare","flaunchIPFSWithSplitManager","FlaunchAbi","ReadFlaunch","tokenId","_memecoin","tokenURI","_tokenId","memecoin","MemecoinAbi","ReadMemecoin","decimals","totalSupply","balanceOf","user","account","allowance","spender","ReadWriteMemecoin","approve","QuoterAbi","ReadQuoter","getBuyQuoteExactInput","simulateWrite","exactAmount","hookData","getSellQuoteExactInput","getBuyQuoteExactOutput","coinOut","FeeEscrowAbi","ReadFeeEscrow","balances","_recipient","ReadWriteFeeEscrow","withdrawFees","_unwrap","ReferralEscrowAbi","ReadReferralEscrow","allocations","token","_user","ReadWriteReferralEscrow","claimTokens","tokens","_tokens","PoolSwapAbi","ReadPoolSwap","ReadWritePoolSwap","swap","_key","_params","amountSpecified","sqrtPriceLimitX96","_referrer","XHandleClaimsAbi","HANDLE_RE","normalizeHandle","handle","trim","replace","handleHashOf","trimmed","stringToBytes","ReadXHandleClaims","escrowAddress","_handleHash","boundWallet","bindNonce","ReadWriteXHandleClaims","bind","_wallet","wallet","_deadline","deadline","_signature","signature","claim","_manager","sweep","UniversalRewardsDistributorAbi","ReadUniversalRewardsDistributor","root","pendingRoot","claimed","reward","_account","_reward","ReadWriteUniversalRewardsDistributor","_claimable","claimable","_proof","proof","TreasuryManagerFactoryAbi","ReadTreasuryManagerFactory","publicClient","getManagerDeployedAddressFromTx","receipt","waitForTransactionReceipt","event","parseEventLogs","eventName","ReadWriteTreasuryManagerFactory","TreasuryManagerAbi","ReadTreasuryManager","managerOwner","ReadWriteTreasuryManager","deposit","flaunchToken","_flaunchToken","_creator","_data","setPermissions","_permissions","transferManagerOwnership","newManagerOwner","_newManagerOwner","MulticallAbi","ReadMulticall","aggregate3","calls","call","target","allowFailure","callData","ReadFlaunchSDK","TICK_SPACING","defaultResolveIPFS","readPositionManager","readFeeEscrow","readReferralEscrow","readFlaunchZap","readPoolManager","readFairLaunch","readBidWall","readFlaunch","readQuoter","readXHandleClaims","readUbiPool","getPositionManagerAddress","getFlaunchAddress","getFairLaunchAddress","getBidWallAddress","getFlaunchTokenIdForMemecoin","flaunchAddress","tokenUriCandidates","getCoinMetadata","external_link","website","collaborators","twitter","telegram","getCoinMetadataFromTokenId","_flaunch","getCoinMetadataFromTokenIds","batchSize","batchDelay","multicall","coinAddresses_calldata","p","encodeFunctionData","coinAddresses","calldata","r","decodeFunctionReturn","returnData","coinMetadata_calldata","forEach","push","adapter","fn","coinMetadata_result","floor","results","processedResults","batch","batchResults","resolve","setTimeout","getPoolCreatedFromTx","getTransactionReceipt","decodedLog","decodeEventLog","topics","memecoinTreasury","_memecoinTreasury","currencyFlipped","_currencyFlipped","flaunchFee","_flaunchFee","filterByCoin","currentTick","currentSqrtPriceX96","coinPriceInUSDC","isUSDCZero","price","pow","COIN_DECIMALS","coinMarketCapInUSDC","priceInUSDC","parseFloat","initialTick","fairLaunchUSDCOnlyPosition","usdcAmount","coinAmount","fairLaunchCoinOnlyPosition","bidWallPosition","amount0_","amount1_","pendingEth_","pendingUsdc","creatorRevenue","referralBalance","splitBalance","managerAddress","treasuryManagerInfo","treasuryManagerAddress","readTreasuryManager","getUbiEntitlement","claimableUbi","entitlement","cumulativeWei","onChainRoot","cumulative","setIPFSResolver","resolverFn","getCoinInfo","formattedTotalSupplyInDecimals","formatUnits","isFlaunchTokenApprovedForAll","operator","erc721Abi","ReadWriteFlaunchSDK","readWriteFeeEscrow","readWriteReferralEscrow","readWriteFlaunchZap","readWritePoolSwap","readWriteXHandleClaims","readWriteUbiPool","readWriteTreasuryManagerFactory","createUBI","createUBIIPFS","createUBIWithSplitManager","createUBIIPFSWithSplitManager","coinBalance","getSignerAddress","cache","clear","usdcBalance","usdc","swapAllowance","erc20","approveSwapInput","buyCoin","executeSwap","sellCoin","inputToken","quotedAmountOut","withdrawCreatorRevenue","claimReferralBalance","claimSplitEarnings","claimUbi","holder","treasuryManagerSetPermissions","permissionsAddress","treasuryManagerTransferOwnership","setFlaunchTokenApprovalForAll","approved","addToTreasuryManager","readWriteTreasuryManager","creatorAddress","arc","defineChain","id","nativeCurrency","rpcUrls","default","http","blockExplorers","arcTestnet","testnet","chainIdToChain","walletClient","chain","createDriftOriginal","viemAdapter","createFlaunch","encodedCallAbi","parseAbi","createCallDataWalletClient","walletAddress","createWalletClient","transport","extend","client","writeContract","to","functionName","sendTransaction","signTransaction","createFlaunchCalldata","decodeCallData","encodedCall","decodedCall","decodeFunctionData","FlaunchSDK","UbiSDK","ReadUbiSDK","ReadWriteUbiSDK","sqrtRatioCurrentX96","liquidity0","liquidity1","rounded","max","min","sdkMethod","priceInput","isDirection1Per0","decimals0","decimals1","spacing","shouldGetNearestUsableTick","isNaN","inputPrice","priceRatio","rawTick"],"mappings":"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CACED,aAAc,UACdD,KAAM,SACNF,KAAM,WAER,CACEG,aAAc,OACdD,KAAM,eACNF,KAAM,QAER,CACEG,aAAc,QACdD,KAAM,WACNF,KAAM,UAGVG,aAAc,4BACdD,KAAM,QACNF,KAAM,YAGVE,KAAM,aACNI,QAAS,CACP,CACEF,WAAY,CACV,CACED,aAAc,OACdD,KAAM,UACNF,KAAM,QAER,CACEG,aAAc,QACdD,KAAM,aACNF,KAAM,UAGVG,aAAc,6BACdD,KAAM,aACNF,KAAM,YAGVK,gBAAiB,UACjBL,KAAM,YAER,CACEC,OAAQ,CACN,CACEG,WAAY,CACV,CACED,aAAc,UACdD,KAAM,SACNF,KAAM,WAER,CACEG,aAAc,OACdD,KAAM,eACNF,KAAM,QAER,CACEG,aAAc,UACdD,KAAM,QACNF,KAAM,WAER,CACEG,aAAc,QACdD,KAAM,WACNF,KAAM,UAGVG,aAAc,iCACdD,KAAM,QACNF,KAAM,YAGVE,KAAM,kBACNI,QAAS,CACP,CACEF,WAAY,CACV,CACED,aAAc,OACdD,KAAM,UACNF,KAAM,QAER,CACEG,aAAc,QACdD,KAAM,aACNF,KAAM,UAGVG,aAAc,6BACdD,KAAM,aACNF,KAAM,YAGVK,gBAAiB,UACjBL,KAAM,YAER,CACEC,OAAQ,CACN,CACEG,WAAY,CACV,CACED,aAAc,UACdD,KAAM,SACNF,KAAM,WAER,CACEG,aAAc,QACdD,KAAM,WACNF,KAAM,UAGVG,aAAc,2BACdD,KAAM,QACNF,KAAM,YAGVE,KAAM,oBACNI,QAAS,CACP,CACEH,aAAc,UACdD,KAAM,cACNF,KAAM,WAER,CACEG,aAAc,UACdD,KAAM,YACNF,KAAM,WAER,CACEI,WAAY,CACV,CACED,aAAc,OACdD,KAAM,UACNF,KAAM,QAER,CACEG,aAAc,QACdD,KAAM,aACNF,KAAM,UAGVG,aAAc,6BACdD,KAAM,aACNF,KAAM,YAGVK,gBAAiB,UACjBL,KAAM,YAER,CACEC,OAAQ,GACRC,KAAM,aACNI,QAAS,CACP,CACEH,aAAc,UACdD,KAAM,UACNF,KAAM,YAGVK,gBAAiB,OACjBL,KAAM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"}
|
|
1
|
+
{"version":3,"file":"index.umd.cjs","sources":["../src/addresses.ts","../src/abi/IndexerSubscriber.ts","../src/clients/IndexerSubscriberClient.ts","../src/abi/FlaunchPositionManager.ts","../src/utils/slippage.ts","../src/utils/parseSwap.ts","../src/abi/InitialPrice.ts","../src/clients/InitialPriceClient.ts","../src/clients/FlaunchPositionManagerClient.ts","../src/helpers/hex.ts","../src/abi/PoolManager.ts","../src/clients/PoolManagerClient.ts","../src/abi/FairLaunch.ts","../src/clients/FairLaunchClient.ts","../src/abi/BidWall.ts","../src/clients/BidWallClient.ts","../src/abi/FlaunchZap.ts","../src/abi/TreasuryManagerFactory.ts","../src/helpers/ipfs.ts","../src/utils/univ4.ts","../src/utils/swap.ts","../src/utils/creatorVaults.ts","../src/clients/FlaunchZapClient.ts","../src/abi/DividendVault.ts","../src/clients/DividendVaultClient.ts","../src/abi/MemecoinDividends.ts","../src/clients/MemecoinDividendsClient.ts","../src/abi/Flaunch.ts","../src/clients/FlaunchClient.ts","../src/abi/Memecoin.ts","../src/clients/MemecoinClient.ts","../src/abi/Quoter.ts","../src/clients/QuoterClient.ts","../src/abi/FeeEscrow.ts","../src/clients/FeeEscrowClient.ts","../src/abi/ReferralEscrow.ts","../src/clients/ReferralEscrowClient.ts","../src/abi/PoolSwap.ts","../src/clients/PoolSwapClient.ts","../src/abi/XHandleClaims.ts","../src/clients/XHandleClaimsClient.ts","../src/abi/UniversalRewardsDistributor.ts","../src/clients/UniversalRewardsDistributorClient.ts","../src/clients/TreasuryManagerFactoryClient.ts","../src/abi/TreasuryManager.ts","../src/clients/TreasuryManagerClient.ts","../src/abi/Multicall.ts","../src/clients/MulticallClient.ts","../src/sdk/FlaunchSDK.ts","../src/helpers/chainIdToChain.ts","../src/sdk/drift.ts","../src/sdk/factory.ts","../src/sdk/calldata.ts","../src/index.ts","../src/abi/AddressFeeSplitManager.ts","../src/abi/HolderShareFeeCalculator.ts"],"sourcesContent":["import { Addresses } from \"./types\";\n\n/**\n * ubi.fun deployments on Arc (Circle).\n *\n * Source of truth: deployments/arc-mainnet-5042.json and\n * deployments/arc-testnet-5042002.json in the contracts repo, mirrored by the\n * committed frontend registry. The cash / native asset on Arc is native USDC\n * (6 decimals through its ERC20 interface) at\n * 0x3600000000000000000000000000000000000000: the position manager's\n * \"nativeToken\" slot IS this USDC, and every pool pairs a coin against it.\n * There is no flETH, no WETH wrapping, and no unwrap step on this chain.\n */\nexport const ARC_MAINNET_CHAIN_ID = 5042;\nexport const ARC_TESTNET_CHAIN_ID = 5042002;\n\n/** Arc native USDC (ERC20 interface, 6 decimals). The cash side of every pool. */\nexport const USDC_ADDRESS =\n \"0x3600000000000000000000000000000000000000\" as const;\n\n/**\n * The pool \"native token\": Arc native USDC on both networks. Kept as an\n * Addresses map so client code stays chain-keyed like every other contract.\n */\nexport const NativeTokenAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: USDC_ADDRESS,\n [ARC_TESTNET_CHAIN_ID]: USDC_ADDRESS,\n};\n\nexport const FlaunchZapAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0xe07F7cA66EC795592385018Dd998F0B50b8A2834\",\n [ARC_TESTNET_CHAIN_ID]: \"0x3fd667aaa89519772bb44e984de408bfcd40e285\",\n};\n\n// SDK \"FlaunchPositionManager\" maps to our deployment \"PositionManager\".\nexport const FlaunchPositionManagerAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0xC780c0f4aAc690908854D351b8bFda2812daeFDc\",\n [ARC_TESTNET_CHAIN_ID]: \"0x88af0b76752ff31aa351cea2cc2e43a1b7c32fdc\",\n};\n\nexport const FlaunchAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0x93E5A7565008db9688BA5211Fa552d8b108B9c75\",\n [ARC_TESTNET_CHAIN_ID]: \"0x55a0e1a458f1c13023dbd6b204e2a439c3b44663\",\n};\n\nexport const FairLaunchAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0xdCDADa707264d9e2B0E8c2feC467860C97434Bd4\",\n [ARC_TESTNET_CHAIN_ID]: \"0xd2ea5591fe0b5820b6de33afbc3b468d070038ea\",\n};\n\n// SDK \"BidWall\" maps to our deployment \"BurningBidWall\" (a modified BidWall).\nexport const BidWallAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0xC5DD30802fefab789Cd9b1e835Bd7301a8D23F8A\",\n [ARC_TESTNET_CHAIN_ID]: \"0x04f947e5fc0ac42836f880d45705af7483a2c4c0\",\n};\n\n/** Referrer-aware swap router: the supported way to trade ubi.fun pools. */\nexport const PoolSwapAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0x3A61B6E86fde5Fc657a48819837F346C7E2Fffa7\",\n [ARC_TESTNET_CHAIN_ID]: \"0x396d41eb4d110d64491d01cd186548fdc82b1b4a\",\n};\n\nexport const TreasuryManagerFactoryAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0xE25C132F379DB49C463328eF427E28DBCbD3a2F0\",\n [ARC_TESTNET_CHAIN_ID]: \"0x093c10b780f7cf8fca9aa7dbc83a64cddf55215f\",\n};\n\n// The approved AddressFeeSplitManager IMPLEMENTATION (factory deploys clones).\nexport const AddressFeeSplitManagerAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0xde10818344f5ab75ecfA772887cE5751D6Cb91C7\",\n [ARC_TESTNET_CHAIN_ID]: \"0xA7d182B81aF7B40b6d09Da88A12a4f7ad770e162\",\n};\n\n/**\n * Creator vaults (docs/CREATOR-VAULTS.md in the contracts repo): the approved DividendVault\n * IMPLEMENTATION every new launch clones, and the HolderShareFeeCalculator. Empty until the\n * contracts are deployed; once the calculator is the PositionManager's fee calculator, every\n * launch must attach a vault (`flaunchWithVault`).\n */\nexport const DividendVaultAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0xA9E566b548D5D0203e4d00bc3dFdB4BC38883514\",\n};\nexport const HolderShareFeeCalculatorAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0xe5737916951Fe20235Bddef5a65af5d18406f92E\",\n};\n\n/** Creator revenue escrow: balances accrue here, claimed as USDC (unwrap=false). */\nexport const FeeEscrowAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0x678f0D1C045e820Ec1d4806749f2629e1035550e\",\n [ARC_TESTNET_CHAIN_ID]: \"0x59b3269aaf9db83bd3029c84d8b5226fa5702f78\",\n};\n\n/** Referrer rewards escrow: 5% of every swap fee routed with your address. */\nexport const ReferralEscrowAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0xf25B9ceAba005CcCb0cefC4e323e6e519F111eB3\",\n [ARC_TESTNET_CHAIN_ID]: \"0x51b6a4759f9c9a681349c857f6fd912cdfeb8fef\",\n};\n\n/** X-handle earnings registry: per-handle CREATE2 escrows + attested claims. */\nexport const XHandleClaimsAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0xfC38298590893c39E46D319aEd9EC3bf6CB17A3E\",\n [ARC_TESTNET_CHAIN_ID]: \"0x6fE2b9e1Da493E4584e742C03e1926a4CD8AC2A1\",\n};\n\n/**\n * Morpho UniversalRewardsDistributor paying the daily USDC holder pool\n * (24% of every swap fee). Claims are Merkle-proofed cumulative amounts.\n */\nexport const UniversalRewardsDistributorAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0x66003091e723778d7D3285BB6c24ff3F0Ddcc7F7\",\n [ARC_TESTNET_CHAIN_ID]: \"0x7a8e9dA46db2be8436c4404476b40F07a31A6d95\",\n};\n\n/** Uniswap v4 PoolManager (canonical deployment on mainnet, ours on testnet). */\nexport const PoolManagerAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0x8366a39CC670B4001A1121B8F6A443A643e40951\",\n [ARC_TESTNET_CHAIN_ID]: \"0x5fb24c800133a0930280788c5eb3468764154309\",\n};\n\nexport const QuoterAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0x4595D3CD7A6D98d83A719934e829db5076fF1d0d\",\n [ARC_TESTNET_CHAIN_ID]: \"0xf517623f178Ba90e5b3299cb121D38F5A0733ac4\",\n};\n\n/**\n * Uniswap v4 StateView (canonical periphery view over PoolManager storage).\n *\n * MAINNET ONLY. Arc testnet runs our own PoolManager instance, and no StateView\n * was deployed against it, so there is no testnet entry. The SDK does not\n * depend on StateView on either network: `ReadPoolManager` reads slot0,\n * liquidity, positions and tick data straight from PoolManager storage with\n * `extsload`, using the same slot derivations as Uniswap's StateLibrary. Use\n * that path if you need one code path across both chains.\n */\nexport const StateViewAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0xf3334192d15450cdd385c8b70e03f9a6bd9e673b\",\n};\n\n/**\n * IndexerSubscriber: on-chain reverse index PoolId -> (flaunch, memecoin,\n * memecoinTreasury, tokenId). Attached to the PositionManager's Notifier, so it\n * is populated at pool initialisation. See contracts/IndexerSubscriber.sol.\n */\nexport const IndexerSubscriberAddress: Addresses = {\n [ARC_MAINNET_CHAIN_ID]: \"0x2c68B21C9f8b899a662A71dd188C1c919D578a9F\",\n [ARC_TESTNET_CHAIN_ID]: \"0xe6d8164d67c60ff860e1a0d90636f5f65b665be7\",\n};\n\n/** Base URL of the ubi.fun read/upload API serving each network. */\nexport const ApiBaseUrl: { [chainId: number]: string } = {\n [ARC_MAINNET_CHAIN_ID]: \"https://api.ubi.fun\",\n [ARC_TESTNET_CHAIN_ID]: \"https://api-dev.ubi.fun\",\n};\n","// Generated from IndexerSubscriber (src/contracts/subscribers/Indexer.sol).\n// Source artifact: Indexer.sol/IndexerSubscriber.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const IndexerSubscriberAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"addIndex\",\n \"inputs\": [\n {\n \"name\": \"_params\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IndexerSubscriber.AddIndexParams[]\",\n \"components\": [\n {\n \"name\": \"flaunch\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"tokenIds\",\n \"type\": \"uint256[]\",\n \"internalType\": \"uint256[]\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeOwnershipHandover\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"notify\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_key\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownershipHandoverExpiresAt\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolIndex\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"flaunch_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"memecoin_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"memecoinTreasury_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"tokenId_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"requestOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setNotifierFlaunch\",\n \"inputs\": [\n {\n \"name\": \"_notifier\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"subscribe\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"pure\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverCanceled\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverRequested\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"oldOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidTokenId\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"NewOwnerIsZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoHandoverRequest\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Unauthorized\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type HexString,\n createDrift,\n} from \"@delvtech/drift\";\nimport { IndexerSubscriberAbi } from \"../abi/IndexerSubscriber\";\n\nexport type IndexerSubscriberABI = typeof IndexerSubscriberAbi;\n\n/**\n * Read-only client for the IndexerSubscriber: the on-chain reverse index from\n * a Uniswap v4 PoolId to the coin that owns the pool.\n *\n * The protocol's own lookups are one-directional (coin address to PoolKey via\n * `PositionManager.poolKey`). This subscriber listens to the PositionManager's\n * Notifier on `afterInitialize` and stores the inverse, so an indexer that only\n * has a PoolId (from a PoolManager `Initialize` or `Swap` log) can resolve the\n * coin, its treasury, and its Flaunch tokenId without replaying our events.\n */\nexport class ReadIndexerSubscriber {\n public readonly contract: ReadContract<IndexerSubscriberABI>;\n\n /**\n * @param address - The IndexerSubscriber address for the chain\n * @param drift - Optional drift instance (creates a new one if not provided)\n * @throws Error if address is not provided\n */\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: IndexerSubscriberAbi,\n address,\n });\n }\n\n /**\n * Resolves a PoolId to the coin behind it.\n *\n * Returns zero addresses for a PoolId that was never initialised through our\n * PositionManager hook (a foreign v4 pool, or a pool created before the\n * subscriber was attached and not back-filled with `addIndex`).\n *\n * `tokenId_` is 0 when the creator has burned the Flaunch NFT: the pool is\n * still live, but creator fees route to the treasury from then on.\n */\n poolIndex({ poolId }: { poolId: HexString }) {\n return this.contract.read(\"poolIndex\", {\n _poolId: poolId,\n });\n }\n\n /**\n * True when the PoolId belongs to a coin launched through this deployment.\n */\n async isUbiPool({ poolId }: { poolId: HexString }): Promise<boolean> {\n const { memecoin_ } = await this.poolIndex({ poolId });\n return memecoin_ !== \"0x0000000000000000000000000000000000000000\";\n }\n}\n","// Generated from PositionManager (the ubi.fun v5 fork; SDK keeps the upstream client name).\n// Source artifact: PositionManager.sol/PositionManager.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const FlaunchPositionManagerAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PositionManager.ConstructorParams\",\n \"components\": [\n {\n \"name\": \"nativeToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"poolManager\",\n \"type\": \"address\",\n \"internalType\": \"contract IPoolManager\"\n },\n {\n \"name\": \"feeDistribution\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FeeDistributor.FeeDistribution\",\n \"components\": [\n {\n \"name\": \"swapFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"referrer\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"active\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"initialPrice\",\n \"type\": \"address\",\n \"internalType\": \"contract IInitialPrice\"\n },\n {\n \"name\": \"protocolOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"protocolFeeRecipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"flayGovernance\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"feeEscrow\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"feeExemptions\",\n \"type\": \"address\",\n \"internalType\": \"contract FeeExemptions\"\n },\n {\n \"name\": \"actionManager\",\n \"type\": \"address\",\n \"internalType\": \"contract TreasuryActionManager\"\n },\n {\n \"name\": \"bidWall\",\n \"type\": \"address\",\n \"internalType\": \"contract BidWall\"\n },\n {\n \"name\": \"fairLaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract FairLaunch\"\n }\n ]\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"receive\",\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"BURN_ADDRESS\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_FAIR_LAUNCH_PROTOCOL_ALLOCATION\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_PROTOCOL_ALLOCATION\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"actionManager\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract TreasuryActionManager\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"afterAddLiquidity\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IPoolManager.ModifyLiquidityParams\",\n \"components\": [\n {\n \"name\": \"tickLower\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"tickUpper\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"liquidityDelta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"_delta\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n },\n {\n \"name\": \"_feesAccrued\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n },\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"selector_\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n },\n {\n \"name\": \"\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"afterDonate\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"_amount0\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_amount1\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"selector_\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"afterInitialize\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n },\n {\n \"name\": \"\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"afterRemoveLiquidity\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IPoolManager.ModifyLiquidityParams\",\n \"components\": [\n {\n \"name\": \"tickLower\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"tickUpper\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"liquidityDelta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"_delta\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n },\n {\n \"name\": \"_feesAccrued\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n },\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"selector_\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n },\n {\n \"name\": \"\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"afterSwap\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"_params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IPoolManager.SwapParams\",\n \"components\": [\n {\n \"name\": \"zeroForOne\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"amountSpecified\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ]\n },\n {\n \"name\": \"_delta\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n },\n {\n \"name\": \"_hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"selector_\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n },\n {\n \"name\": \"hookDeltaUnspecified_\",\n \"type\": \"int128\",\n \"internalType\": \"int128\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"beforeAddLiquidity\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IPoolManager.ModifyLiquidityParams\",\n \"components\": [\n {\n \"name\": \"tickLower\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"tickUpper\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"liquidityDelta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"selector_\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"beforeDonate\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"beforeInitialize\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"beforeRemoveLiquidity\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IPoolManager.ModifyLiquidityParams\",\n \"components\": [\n {\n \"name\": \"tickLower\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"tickUpper\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"liquidityDelta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"selector_\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"beforeSwap\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"_params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IPoolManager.SwapParams\",\n \"components\": [\n {\n \"name\": \"zeroForOne\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"amountSpecified\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ]\n },\n {\n \"name\": \"_hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"selector_\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n },\n {\n \"name\": \"beforeSwapDelta_\",\n \"type\": \"int256\",\n \"internalType\": \"BeforeSwapDelta\"\n },\n {\n \"name\": \"\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"bidWall\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract BidWall\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"closeBidWall\",\n \"inputs\": [\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeOwnershipHandover\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"fairLaunch\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract FairLaunch\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"fairLaunchFeeCalculator\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IFeeCalculator\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"feeCalculator\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IFeeCalculator\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"feeEscrow\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract FeeEscrow\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"feeExemptions\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract FeeExemptions\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"feeSplit\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"bidWall_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"creator_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"protocol_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunch\",\n \"inputs\": [\n {\n \"name\": \"_params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PositionManager.FlaunchParams\",\n \"components\": [\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"symbol\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"tokenUri\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"initialTokenFairLaunch\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"fairLaunchDuration\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"premineAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"creatorFeeAllocation\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"flaunchAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"initialPriceParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"feeCalculatorParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"memecoin_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunchContract\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IFlaunch\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunchesAt\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_flaunchTime\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flayGovernance\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getFairLaunchFeeDistribution\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"feeDistribution_\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FeeDistributor.FeeDistribution\",\n \"components\": [\n {\n \"name\": \"swapFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"referrer\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"active\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"creatorAllocation_\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getFeeCalculator\",\n \"inputs\": [\n {\n \"name\": \"_isFairLaunch\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IFeeCalculator\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getFlaunchingFee\",\n \"inputs\": [\n {\n \"name\": \"_initialPriceParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getFlaunchingMarketCap\",\n \"inputs\": [\n {\n \"name\": \"_initialPriceParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getHookPermissions\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct Hooks.Permissions\",\n \"components\": [\n {\n \"name\": \"beforeInitialize\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"afterInitialize\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"beforeAddLiquidity\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"afterAddLiquidity\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"beforeRemoveLiquidity\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"afterRemoveLiquidity\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"beforeSwap\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"afterSwap\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"beforeDonate\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"afterDonate\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"beforeSwapReturnDelta\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"afterSwapReturnDelta\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"afterAddLiquidityReturnDelta\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"afterRemoveLiquidityReturnDelta\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"stateMutability\": \"pure\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getPoolFeeDistribution\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"feeDistribution_\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FeeDistributor.FeeDistribution\",\n \"components\": [\n {\n \"name\": \"swapFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"referrer\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"active\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialPrice\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IInitialPrice\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"maxReferrerAllocation\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"minProtocolAllocation\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nativeToken\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"notifier\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract Notifier\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownershipHandoverExpiresAt\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolFees\",\n \"inputs\": [\n {\n \"name\": \"_poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct InternalSwapPool.ClaimableFees\",\n \"components\": [\n {\n \"name\": \"amount0\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount1\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolKey\",\n \"inputs\": [\n {\n \"name\": \"_token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolManager\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IPoolManager\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"referralEscrow\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract ReferralEscrow\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"requestOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setFairLaunchFeeCalculator\",\n \"inputs\": [\n {\n \"name\": \"_feeCalculator\",\n \"type\": \"address\",\n \"internalType\": \"contract IFeeCalculator\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setFairLaunchFeeDistribution\",\n \"inputs\": [\n {\n \"name\": \"_feeDistribution\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FeeDistributor.FeeDistribution\",\n \"components\": [\n {\n \"name\": \"swapFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"referrer\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"active\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"_creatorAllocation\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setFeeCalculator\",\n \"inputs\": [\n {\n \"name\": \"_feeCalculator\",\n \"type\": \"address\",\n \"internalType\": \"contract IFeeCalculator\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setFeeDistribution\",\n \"inputs\": [\n {\n \"name\": \"_feeDistribution\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FeeDistributor.FeeDistribution\",\n \"components\": [\n {\n \"name\": \"swapFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"referrer\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"active\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setFlaunch\",\n \"inputs\": [\n {\n \"name\": \"_flaunchContract\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setInitialPrice\",\n \"inputs\": [\n {\n \"name\": \"_initialPrice\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setPoolFeeDistribution\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_feeDistribution\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FeeDistributor.FeeDistribution\",\n \"components\": [\n {\n \"name\": \"swapFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"referrer\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"active\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setProtocolFeeDistribution\",\n \"inputs\": [\n {\n \"name\": \"_protocol\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setReferralEscrow\",\n \"inputs\": [\n {\n \"name\": \"_referralEscrow\",\n \"type\": \"address\",\n \"internalType\": \"address payable\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unlockCallback\",\n \"inputs\": [\n {\n \"name\": \"data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"CreatorFeeAllocationUpdated\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_allocation\",\n \"type\": \"uint24\",\n \"indexed\": false,\n \"internalType\": \"uint24\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"FairLaunchBurn\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_unsoldSupply\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"FairLaunchFeeCalculatorUpdated\",\n \"inputs\": [\n {\n \"name\": \"_feeCalculator\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"FairLaunchFeeDistributionUpdated\",\n \"inputs\": [\n {\n \"name\": \"_feeDistribution\",\n \"type\": \"tuple\",\n \"indexed\": false,\n \"internalType\": \"struct FeeDistributor.FeeDistribution\",\n \"components\": [\n {\n \"name\": \"swapFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"referrer\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"active\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"_creatorAllocation\",\n \"type\": \"uint24\",\n \"indexed\": false,\n \"internalType\": \"uint24\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"FeeCalculatorUpdated\",\n \"inputs\": [\n {\n \"name\": \"_feeCalculator\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"FeeDistributionUpdated\",\n \"inputs\": [\n {\n \"name\": \"_feeDistribution\",\n \"type\": \"tuple\",\n \"indexed\": false,\n \"internalType\": \"struct FeeDistributor.FeeDistribution\",\n \"components\": [\n {\n \"name\": \"swapFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"referrer\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"active\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"HookFee\",\n \"inputs\": [\n {\n \"name\": \"id\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"feeAmount0\",\n \"type\": \"uint128\",\n \"indexed\": false,\n \"internalType\": \"uint128\"\n },\n {\n \"name\": \"feeAmount1\",\n \"type\": \"uint128\",\n \"indexed\": false,\n \"internalType\": \"uint128\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"HookSwap\",\n \"inputs\": [\n {\n \"name\": \"id\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount0\",\n \"type\": \"int128\",\n \"indexed\": false,\n \"internalType\": \"int128\"\n },\n {\n \"name\": \"amount1\",\n \"type\": \"int128\",\n \"indexed\": false,\n \"internalType\": \"int128\"\n },\n {\n \"name\": \"hookLPfeeAmount0\",\n \"type\": \"uint128\",\n \"indexed\": false,\n \"internalType\": \"uint128\"\n },\n {\n \"name\": \"hookLPfeeAmount1\",\n \"type\": \"uint128\",\n \"indexed\": false,\n \"internalType\": \"uint128\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"InitialPriceUpdated\",\n \"inputs\": [\n {\n \"name\": \"_initialPrice\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverCanceled\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverRequested\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"oldOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PoolCreated\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_memecoin\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_memecoinTreasury\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_currencyFlipped\",\n \"type\": \"bool\",\n \"indexed\": false,\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"_flaunchFee\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_params\",\n \"type\": \"tuple\",\n \"indexed\": false,\n \"internalType\": \"struct PositionManager.FlaunchParams\",\n \"components\": [\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"symbol\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"tokenUri\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"initialTokenFairLaunch\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"fairLaunchDuration\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"premineAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"creatorFeeAllocation\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"flaunchAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"initialPriceParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"feeCalculatorParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PoolFeeDistributionUpdated\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_feeDistribution\",\n \"type\": \"tuple\",\n \"indexed\": false,\n \"internalType\": \"struct FeeDistributor.FeeDistribution\",\n \"components\": [\n {\n \"name\": \"swapFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"referrer\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"active\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PoolFeesDistributed\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_donateAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_creatorAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_bidWallAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_governanceAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_protocolAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PoolFeesReceived\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_amount0\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_amount1\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PoolFeesSwapped\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"zeroForOne\",\n \"type\": \"bool\",\n \"indexed\": false,\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"_amount0\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_amount1\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PoolPremine\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_premineAmount\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PoolScheduled\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_flaunchesAt\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PoolStateUpdated\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_sqrtPriceX96\",\n \"type\": \"uint160\",\n \"indexed\": false,\n \"internalType\": \"uint160\"\n },\n {\n \"name\": \"_tick\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"_protocolFee\",\n \"type\": \"uint24\",\n \"indexed\": false,\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"_swapFee\",\n \"type\": \"uint24\",\n \"indexed\": false,\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"_liquidity\",\n \"type\": \"uint128\",\n \"indexed\": false,\n \"internalType\": \"uint128\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PoolSwap\",\n \"inputs\": [\n {\n \"name\": \"poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"flAmount0\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"flAmount1\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"flFee0\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"flFee1\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"ispAmount0\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"ispAmount1\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"ispFee0\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"ispFee1\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"uniAmount0\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"uniAmount1\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"uniFee0\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"uniFee1\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ReferralEscrowUpdated\",\n \"inputs\": [\n {\n \"name\": \"_referralEscrow\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ReferrerFeePaid\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_token\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CallerIsNotBidWall\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CallerNotCreator\",\n \"inputs\": [\n {\n \"name\": \"_caller\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"CannotBeInitializedDirectly\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CannotModifyLiquidityDuringFairLaunch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CannotSellTokenDuringFairLaunch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CreatorFeeInvalid\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"HookNotImplemented\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InsufficientFlaunchFee\",\n \"inputs\": [\n {\n \"name\": \"_paid\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_required\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidPool\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"LockFailure\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NewOwnerIsZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoHandoverRequest\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotPoolManager\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotSelf\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ProtocolFeeInvalid\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"RecipientZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ReferrerFeeInvalid\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"SwapFeeInvalid\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TokenNotFlaunched\",\n \"inputs\": [\n {\n \"name\": \"_flaunchesAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"Unauthorized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"UnknownPool\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ]\n }\n] as const;\n","import { parseEther } from \"viem\";\n\n/**\n * Applies a slippage tolerance to an amount.\n *\n * @dev EXACT_OUT adds the slippage, EXACT_IN removes it. `slippage` is a\n * fraction string, e.g. \"0.05\" for 5%.\n */\nexport const getAmountWithSlippage = ({\n amount,\n slippage,\n swapType,\n}: {\n amount: bigint | undefined;\n slippage: string;\n swapType: \"EXACT_IN\" | \"EXACT_OUT\";\n}) => {\n if (amount == null) {\n return 0n;\n }\n\n const absAmount = amount < 0n ? -amount : amount;\n const slippageMultiplier =\n swapType === \"EXACT_IN\"\n ? BigInt(1e18) - parseEther(slippage)\n : BigInt(1e18) + parseEther(slippage);\n\n return (absAmount * slippageMultiplier) / BigInt(1e18);\n};\n","export interface SwapLogArgs {\n flAmount0: bigint;\n flAmount1: bigint;\n flFee0: bigint;\n flFee1: bigint;\n ispAmount0: bigint;\n ispAmount1: bigint;\n ispFee0: bigint;\n ispFee1: bigint;\n uniAmount0: bigint;\n uniAmount1: bigint;\n uniFee0: bigint;\n uniFee1: bigint;\n}\n\nexport interface SwapFees {\n /** True when the fee was taken on the USDC side, false when in the coin. */\n isInUSDC: boolean;\n amount: bigint;\n}\n\nexport interface BuySwapData {\n type: \"BUY\";\n delta: {\n coinsBought: bigint;\n usdcSold: bigint;\n fees: SwapFees;\n };\n}\n\nexport interface SellSwapData {\n type: \"SELL\";\n delta: {\n coinsSold: bigint;\n usdcBought: bigint;\n fees: SwapFees;\n };\n}\n\nexport type ParsedSwapData = BuySwapData | SellSwapData;\n\n/**\n * Parses raw PoolSwap log arguments into structured swap data. The three\n * amount-pair legs (fl = fair launch fill, isp = internal swap pool, uni =\n * Uniswap pool) show how a fill was sourced; this nets them into one delta.\n * @param args - The swap log arguments\n * @param usdcIsCurrencyZero - Whether USDC is currency0 in the pool\n * @returns Parsed swap data with type and delta information\n */\nexport function parseSwapData(\n args: SwapLogArgs,\n usdcIsCurrencyZero: boolean\n): ParsedSwapData {\n const {\n flAmount0,\n flAmount1,\n flFee0,\n flFee1,\n ispAmount0,\n ispAmount1,\n ispFee0,\n ispFee1,\n uniAmount0,\n uniAmount1,\n uniFee0,\n uniFee1,\n } = args;\n\n const currency0Delta = flAmount0 + ispAmount0 + uniAmount0;\n const currency1Delta = flAmount1 + ispAmount1 + uniAmount1;\n const currency0Fees = flFee0 + ispFee0 + uniFee0;\n const currency1Fees = flFee1 + ispFee1 + uniFee1;\n\n let feesIsInUSDC: boolean;\n let swapType: \"BUY\" | \"SELL\";\n\n if (usdcIsCurrencyZero) {\n swapType = currency0Delta < 0 ? \"BUY\" : \"SELL\";\n feesIsInUSDC = currency0Fees < 0;\n } else {\n swapType = currency1Delta < 0 ? \"BUY\" : \"SELL\";\n feesIsInUSDC = currency1Fees < 0;\n }\n\n const absCurrency0Delta =\n currency0Delta < 0 ? -currency0Delta : currency0Delta;\n const absCurrency1Delta =\n currency1Delta < 0 ? -currency1Delta : currency1Delta;\n const absCurrency0Fees = currency0Fees < 0 ? -currency0Fees : currency0Fees;\n const absCurrency1Fees = currency1Fees < 0 ? -currency1Fees : currency1Fees;\n\n const fees: SwapFees = {\n isInUSDC: feesIsInUSDC,\n amount: usdcIsCurrencyZero\n ? feesIsInUSDC\n ? absCurrency0Fees\n : absCurrency1Fees\n : feesIsInUSDC\n ? absCurrency1Fees\n : absCurrency0Fees,\n };\n\n if (swapType === \"BUY\") {\n return {\n type: swapType,\n delta: {\n coinsBought: usdcIsCurrencyZero\n ? absCurrency1Delta - (!fees.isInUSDC ? fees.amount : 0n)\n : absCurrency0Delta - (!fees.isInUSDC ? fees.amount : 0n),\n usdcSold: usdcIsCurrencyZero\n ? absCurrency0Delta - (fees.isInUSDC ? fees.amount : 0n)\n : absCurrency1Delta - (fees.isInUSDC ? fees.amount : 0n),\n fees,\n },\n };\n } else {\n return {\n type: swapType,\n delta: {\n coinsSold: usdcIsCurrencyZero\n ? absCurrency1Delta - (!fees.isInUSDC ? fees.amount : 0n)\n : absCurrency0Delta - (!fees.isInUSDC ? fees.amount : 0n),\n usdcBought: usdcIsCurrencyZero\n ? absCurrency0Delta - (fees.isInUSDC ? fees.amount : 0n)\n : absCurrency1Delta - (fees.isInUSDC ? fees.amount : 0n),\n fees,\n },\n };\n }\n}\n","// Generated from UsdcMarketCappedPrice (the deployed IInitialPrice implementation).\n// Source artifact: UsdcMarketCappedPrice.sol/UsdcMarketCappedPrice.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const InitialPriceAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_protocolOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_flaunchFeeExemption\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MINIMUM_USDC_MARKET_CAP\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"NATIVE_SCALAR\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeOwnershipHandover\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunchFeeExemption\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract FlaunchFeeExemption\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunchFeeThreshold\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getFlaunchingFee\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_initialPriceParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getMarketCap\",\n \"inputs\": [\n {\n \"name\": \"_initialPriceParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"pure\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getSqrtPriceX96\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_flipped\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"_initialPriceParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"sqrtPriceX96_\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownershipHandoverExpiresAt\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"requestOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setFlaunchFeeThreshold\",\n \"inputs\": [\n {\n \"name\": \"_flaunchFeeThreshold\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"FlaunchFeeThresholdUpdated\",\n \"inputs\": [\n {\n \"name\": \"_flaunchFeeThreshold\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverCanceled\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverRequested\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"oldOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"MarketCapTooSmall\",\n \"inputs\": [\n {\n \"name\": \"_usdcMarketCap\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_usdcMarketCapMinimum\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"NewOwnerIsZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoHandoverRequest\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Unauthorized\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type HexString,\n createDrift,\n} from \"@delvtech/drift\";\nimport { InitialPriceAbi } from \"../abi/InitialPrice\";\nimport { zeroAddress } from \"viem\";\n\nexport type InitialPriceABI = typeof InitialPriceAbi;\n\n/**\n * Client for the deployed IInitialPrice implementation (UsdcMarketCappedPrice):\n * turns the launcher's chosen initial market cap (USDC, 6 decimals, abi-encoded\n * as a single uint256) into the pool's starting price and the flaunch fee.\n */\nexport class ReadInitialPrice {\n public readonly contract: ReadContract<InitialPriceABI>;\n\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: InitialPriceAbi,\n address,\n });\n }\n\n /**\n * The flaunch fee for a launch, in the chain's native units (18 decimals on\n * Arc, where msg.value is USDC at 18 decimals). Zero for market caps below\n * the on-chain threshold and for fee-exempt senders.\n * @param params.sender - The address that will send the launch\n * @param params.initialPriceParams - The abi-encoded initial market cap\n */\n getFlaunchingFee(params: { sender: Address; initialPriceParams: HexString }) {\n return this.contract.read(\"getFlaunchingFee\", {\n _sender: params.sender,\n _initialPriceParams: params.initialPriceParams,\n });\n }\n\n /**\n * The starting sqrt price for a launch\n * @param params.usdcIsCurrencyZero - Whether USDC sorts as currency0\n * @param params.initialPriceParams - The abi-encoded initial market cap\n */\n getSqrtPriceX96(params: {\n usdcIsCurrencyZero: boolean;\n initialPriceParams: HexString;\n }) {\n return this.contract.read(\"getSqrtPriceX96\", {\n _flipped: !params.usdcIsCurrencyZero,\n _initialPriceParams: params.initialPriceParams,\n 0: zeroAddress, // unnamed sender param, unused by the implementation\n });\n }\n}\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type EventLog,\n createDrift,\n HexString,\n} from \"@delvtech/drift\";\nimport { type Hex } from \"viem\";\nimport { FlaunchPositionManagerAbi } from \"../abi/FlaunchPositionManager\";\nimport { getAmountWithSlippage } from \"../utils/slippage\";\nimport { parseSwapData, type SwapLogArgs } from \"../utils/parseSwap\";\nimport { ReadInitialPrice } from \"./InitialPriceClient\";\n\nexport type FlaunchPositionManagerABI = typeof FlaunchPositionManagerAbi;\nexport type PoolCreatedLog = EventLog<\n FlaunchPositionManagerABI,\n \"PoolCreated\"\n> & {\n timestamp: number;\n};\nexport type PoolCreatedLogs = PoolCreatedLog[];\n\nexport interface WatchPoolCreatedParams {\n onPoolCreated: ({\n logs,\n isFetchingFromStart,\n }: {\n logs: PoolCreatedLogs;\n isFetchingFromStart: boolean;\n }) => void;\n startBlockNumber?: bigint;\n}\n\nexport type BaseSwapLog = EventLog<FlaunchPositionManagerABI, \"PoolSwap\"> & {\n timestamp: number;\n};\n\nexport type BuySwapLog = BaseSwapLog & {\n type: \"BUY\";\n delta: {\n coinsBought: bigint;\n usdcSold: bigint;\n fees: {\n isInUSDC: boolean;\n amount: bigint;\n };\n };\n};\n\nexport type SellSwapLog = BaseSwapLog & {\n type: \"SELL\";\n delta: {\n coinsSold: bigint;\n usdcBought: bigint;\n fees: {\n isInUSDC: boolean;\n amount: bigint;\n };\n };\n};\n\nexport type PoolSwapLog = BuySwapLog | SellSwapLog | BaseSwapLog;\nexport type PoolSwapLogs = PoolSwapLog[];\n\nexport interface WatchPoolSwapParams<\n TUSDCIsCurrencyZero extends boolean | undefined = undefined\n> {\n onPoolSwap: ({\n logs,\n isFetchingFromStart,\n }: {\n logs: TUSDCIsCurrencyZero extends boolean\n ? (BuySwapLog | SellSwapLog)[]\n : BaseSwapLog[];\n isFetchingFromStart: boolean;\n }) => void;\n usdcIsCurrencyZero?: TUSDCIsCurrencyZero;\n startBlockNumber?: bigint;\n filterByPoolId?: HexString;\n}\n\n/**\n * Client for the PositionManager, the Uniswap v4 hook at the center of the\n * protocol: it creates pools, collects and splits fees, and emits the\n * PoolCreated / PoolSwap events integrators index.\n *\n * Launch coins through the FlaunchZap (see ReadWriteFlaunchZap) and trade\n * through PoolSwap; this client is the read/event surface.\n */\nexport class ReadFlaunchPositionManager {\n public readonly contract: ReadContract<FlaunchPositionManagerABI>;\n drift: Drift;\n public pollPoolCreatedNow?: () => Promise<void>;\n public pollPoolSwapNow?: () => Promise<void>;\n public readonly TOTAL_SUPPLY = 100n * 10n ** 27n; // 100 Billion tokens in wei\n\n constructor(address: Address, drift: Drift = createDrift()) {\n this.drift = drift;\n if (!address) {\n throw new Error(\"Address is required\");\n }\n this.contract = drift.contract({\n abi: FlaunchPositionManagerAbi,\n address,\n });\n }\n\n getFeeCalculator({ forFairLaunch }: { forFairLaunch: boolean }) {\n return this.contract.read(\"getFeeCalculator\", {\n _isFairLaunch: forFairLaunch,\n });\n }\n\n async isValidCoin(coinAddress: Address) {\n const poolKey = await this.contract.read(\"poolKey\", {\n _token: coinAddress,\n });\n\n return poolKey.tickSpacing !== 0;\n }\n\n /**\n * Reads the exact pool key for a coin, as stored by the hook. Prefer this\n * over assembling the key by hand.\n */\n poolKey(coinAddress: Address) {\n return this.contract.read(\"poolKey\", {\n _token: coinAddress,\n });\n }\n\n /**\n * Internal Swap Pool inventory for a pool: swap fees the hook is holding\n * that have not yet been distributed. `amount0` is always the USDC side,\n * `amount1` the coin side, regardless of currency ordering in the PoolKey.\n * Coin-side fees are sold to the next buyer before the v4 pool is touched,\n * so this inventory is real liquidity that active v4 positions do not show.\n * See contracts/README.md for the full reserve accounting.\n */\n poolFees(poolKey: {\n currency0: Address;\n currency1: Address;\n fee: number;\n tickSpacing: number;\n hooks: Address;\n }) {\n return this.contract.read(\"poolFees\", {\n _poolKey: poolKey,\n });\n }\n\n /**\n * The live fee distribution for a pool (swapFee, referrer, protocol shares\n * in hundredths of a percent)\n */\n getPoolFeeDistribution(poolId: HexString) {\n return this.contract.read(\"getPoolFeeDistribution\", {\n _poolId: poolId,\n });\n }\n\n /**\n * The flaunch fee a launch would owe, in native units (msg.value; USDC at 18\n * decimals on Arc). Reads through the initial price contract so sender fee\n * exemptions apply.\n */\n async getFlaunchingFee(params: {\n sender: Address;\n initialPriceParams: HexString;\n slippagePercent?: number;\n }) {\n const readInitialPrice = new ReadInitialPrice(\n await this.contract.read(\"initialPrice\"),\n this.drift\n );\n const flaunchingFee = await readInitialPrice.getFlaunchingFee(params);\n\n // pad the fee by the slippage percent so a price move between quote and\n // send does not revert the launch (excess is refunded on-chain)\n const flaunchingFeeWithSlippage = getAmountWithSlippage({\n amount: flaunchingFee,\n slippage: ((params.slippagePercent ?? 0) / 100).toFixed(18).toString(),\n swapType: \"EXACT_OUT\",\n });\n return flaunchingFeeWithSlippage;\n }\n\n async watchPoolCreated({\n onPoolCreated,\n startBlockNumber,\n }: WatchPoolCreatedParams) {\n let intervalId: ReturnType<typeof setInterval>;\n\n if (startBlockNumber !== undefined) {\n onPoolCreated({\n logs: [],\n isFetchingFromStart: true,\n });\n }\n\n let lastBlockNumber = startBlockNumber\n ? startBlockNumber - 1n\n : await this.drift.getBlockNumber();\n\n const pollEvents = async () => {\n try {\n const currentBlockNumber = await this.drift.getBlockNumber();\n\n if (currentBlockNumber > lastBlockNumber) {\n const _logs = await this.contract.getEvents(\"PoolCreated\", {\n fromBlock: lastBlockNumber + 1n,\n toBlock: currentBlockNumber,\n });\n\n // Get timestamps for each log\n const logsWithTimestamps = await Promise.all(\n [..._logs].reverse().map(async (log) => {\n const block = await this.drift.getBlock(log.blockNumber);\n return {\n ...log,\n timestamp: Number(block?.timestamp) * 1_000, // convert to ms for js\n };\n })\n );\n\n if (logsWithTimestamps.length > 0) {\n onPoolCreated({\n logs: logsWithTimestamps,\n isFetchingFromStart: false,\n });\n } else {\n onPoolCreated({\n logs: [],\n isFetchingFromStart: false,\n });\n }\n\n lastBlockNumber = currentBlockNumber;\n }\n } catch (error) {\n console.error(\"Error polling events:\", error);\n }\n };\n\n intervalId = setInterval(pollEvents, 5_000);\n\n this.pollPoolCreatedNow = pollEvents;\n\n // Return both cleanup function and immediate poll function\n return {\n cleanup: () => {\n if (intervalId) {\n clearInterval(intervalId);\n }\n // Clear the pollNow function when cleaning up\n this.pollPoolCreatedNow = undefined;\n },\n pollPoolCreatedNow: pollEvents,\n };\n }\n\n /**\n * Parses a transaction hash to extract PoolSwap events and return parsed swap data\n * @param txHash - The transaction hash to parse\n * @param usdcIsCurrencyZero - Whether USDC is currency0 in the pool (optional)\n * @returns Parsed swap log or undefined if no PoolSwap event found\n */\n async parseSwapTx(\n txHash: Hex,\n usdcIsCurrencyZero?: boolean\n ): Promise<PoolSwapLog | undefined> {\n try {\n // Get transaction to get block number\n const tx = await this.drift.getTransaction({ hash: txHash });\n if (!tx) {\n return undefined;\n }\n\n // Get block to get timestamp\n const block = await this.drift.getBlock(tx.blockNumber);\n const timestamp = Number(block?.timestamp) * 1_000; // convert to ms for js\n\n // Get PoolSwap events from the specific transaction\n const swapLogs = await this.contract.getEvents(\"PoolSwap\", {\n fromBlock: tx.blockNumber,\n toBlock: tx.blockNumber,\n });\n\n // Find the first swap log that matches our transaction hash\n const targetLog = swapLogs.find((log) => log.transactionHash === txHash);\n if (!targetLog) {\n return undefined;\n }\n\n // If usdcIsCurrencyZero is not provided, return basic log\n if (usdcIsCurrencyZero === undefined) {\n return {\n ...targetLog,\n timestamp,\n };\n }\n\n // Parse the swap data using the utility function\n const swapData = parseSwapData(\n targetLog.args as SwapLogArgs,\n usdcIsCurrencyZero\n );\n\n return {\n ...targetLog,\n timestamp,\n type: swapData.type,\n delta: swapData.delta,\n };\n } catch (error) {\n console.error(\"Error parsing swap transaction:\", error);\n return undefined;\n }\n }\n\n async watchPoolSwap<T extends boolean | undefined = undefined>({\n onPoolSwap,\n usdcIsCurrencyZero,\n startBlockNumber,\n filterByPoolId,\n }: WatchPoolSwapParams<T>) {\n let intervalId: ReturnType<typeof setInterval>;\n\n if (startBlockNumber !== undefined) {\n onPoolSwap({\n logs: [],\n isFetchingFromStart: true,\n });\n }\n\n let lastBlockNumber = startBlockNumber\n ? startBlockNumber - 1n\n : await this.drift.getBlockNumber();\n\n const pollEvents = async () => {\n try {\n const currentBlockNumber = await this.drift.getBlockNumber();\n\n if (currentBlockNumber > lastBlockNumber) {\n const _logs = await this.contract.getEvents(\"PoolSwap\", {\n fromBlock: lastBlockNumber + 1n,\n toBlock: currentBlockNumber,\n filter: {\n poolId: filterByPoolId,\n },\n });\n\n // Get timestamps for each log\n const logsWithTimestamps = await Promise.all(\n [..._logs].reverse().map(async (log): Promise<PoolSwapLog> => {\n const block = await this.drift.getBlock(log.blockNumber);\n const timestamp = Number(block?.timestamp) * 1_000; // convert to ms for js\n\n if (usdcIsCurrencyZero === undefined) {\n return {\n ...log,\n timestamp,\n };\n }\n\n // parse swap data\n const swapData = parseSwapData(\n log.args as SwapLogArgs,\n usdcIsCurrencyZero\n );\n\n return {\n ...log,\n timestamp,\n type: swapData.type,\n delta: swapData.delta,\n };\n })\n );\n\n if (logsWithTimestamps.length > 0) {\n onPoolSwap({\n logs: logsWithTimestamps as T extends boolean\n ? (BuySwapLog | SellSwapLog)[]\n : BaseSwapLog[],\n isFetchingFromStart: false,\n });\n } else {\n onPoolSwap({\n logs: [],\n isFetchingFromStart: false,\n });\n }\n\n lastBlockNumber = currentBlockNumber;\n }\n } catch (error) {\n console.error(\"Error polling events:\", error);\n }\n };\n\n intervalId = setInterval(pollEvents, 5_000);\n\n this.pollPoolSwapNow = pollEvents;\n\n // Return both cleanup function and immediate poll function\n return {\n cleanup: () => {\n if (intervalId) {\n clearInterval(intervalId);\n }\n // Clear the pollNow function when cleaning up\n this.pollPoolSwapNow = undefined;\n },\n pollPoolSwapNow: pollEvents,\n };\n }\n}\n","import { encodeAbiParameters, Hex, hexToBigInt, pad } from \"viem\";\n\nexport const bytes32ToUint256 = (value: Hex) => {\n return hexToBigInt(value);\n};\n\nexport const uint256ToBytes32 = (value: bigint) => {\n return pad(\n encodeAbiParameters([{ type: \"uint256\", name: \"value\" }], [value]),\n { size: 32, dir: \"right\" }\n );\n};\n","// Generated from Uniswap v4 PoolManager.\n// Source artifact: PoolManager.sol/PoolManager.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const PoolManagerAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"initialOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"allowance\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"approve\",\n \"inputs\": [\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balanceOf\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"balance\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"burn\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"clear\",\n \"inputs\": [\n {\n \"name\": \"currency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"collectProtocolFees\",\n \"inputs\": [\n {\n \"name\": \"recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"currency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amountCollected\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"donate\",\n \"inputs\": [\n {\n \"name\": \"key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"amount0\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount1\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"delta\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"extsload\",\n \"inputs\": [\n {\n \"name\": \"slot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"extsload\",\n \"inputs\": [\n {\n \"name\": \"startSlot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"nSlots\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"extsload\",\n \"inputs\": [\n {\n \"name\": \"slots\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"exttload\",\n \"inputs\": [\n {\n \"name\": \"slots\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"exttload\",\n \"inputs\": [\n {\n \"name\": \"slot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialize\",\n \"inputs\": [\n {\n \"name\": \"key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"sqrtPriceX96\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"tick\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isOperator\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"isOperator\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"mint\",\n \"inputs\": [\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"modifyLiquidity\",\n \"inputs\": [\n {\n \"name\": \"key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IPoolManager.ModifyLiquidityParams\",\n \"components\": [\n {\n \"name\": \"tickLower\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"tickUpper\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"liquidityDelta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"callerDelta\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n },\n {\n \"name\": \"feesAccrued\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"protocolFeeController\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"protocolFeesAccrued\",\n \"inputs\": [\n {\n \"name\": \"currency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setOperator\",\n \"inputs\": [\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"approved\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setProtocolFee\",\n \"inputs\": [\n {\n \"name\": \"key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"newProtocolFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setProtocolFeeController\",\n \"inputs\": [\n {\n \"name\": \"controller\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"settle\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"settleFor\",\n \"inputs\": [\n {\n \"name\": \"recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"supportsInterface\",\n \"inputs\": [\n {\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"swap\",\n \"inputs\": [\n {\n \"name\": \"key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IPoolManager.SwapParams\",\n \"components\": [\n {\n \"name\": \"zeroForOne\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"amountSpecified\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ]\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"swapDelta\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"sync\",\n \"inputs\": [\n {\n \"name\": \"currency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"take\",\n \"inputs\": [\n {\n \"name\": \"currency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transfer\",\n \"inputs\": [\n {\n \"name\": \"receiver\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferFrom\",\n \"inputs\": [\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"receiver\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unlock\",\n \"inputs\": [\n {\n \"name\": \"data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"updateDynamicLPFee\",\n \"inputs\": [\n {\n \"name\": \"key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"newDynamicLPFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"Approval\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Donate\",\n \"inputs\": [\n {\n \"name\": \"id\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount0\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount1\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Initialize\",\n \"inputs\": [\n {\n \"name\": \"id\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"indexed\": false,\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"contract IHooks\"\n },\n {\n \"name\": \"sqrtPriceX96\",\n \"type\": \"uint160\",\n \"indexed\": false,\n \"internalType\": \"uint160\"\n },\n {\n \"name\": \"tick\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ModifyLiquidity\",\n \"inputs\": [\n {\n \"name\": \"id\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"tickLower\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"tickUpper\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"liquidityDelta\",\n \"type\": \"int256\",\n \"indexed\": false,\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OperatorSet\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"approved\",\n \"type\": \"bool\",\n \"indexed\": false,\n \"internalType\": \"bool\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"user\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ProtocolFeeControllerUpdated\",\n \"inputs\": [\n {\n \"name\": \"protocolFeeController\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ProtocolFeeUpdated\",\n \"inputs\": [\n {\n \"name\": \"id\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"protocolFee\",\n \"type\": \"uint24\",\n \"indexed\": false,\n \"internalType\": \"uint24\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Swap\",\n \"inputs\": [\n {\n \"name\": \"id\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount0\",\n \"type\": \"int128\",\n \"indexed\": false,\n \"internalType\": \"int128\"\n },\n {\n \"name\": \"amount1\",\n \"type\": \"int128\",\n \"indexed\": false,\n \"internalType\": \"int128\"\n },\n {\n \"name\": \"sqrtPriceX96\",\n \"type\": \"uint160\",\n \"indexed\": false,\n \"internalType\": \"uint160\"\n },\n {\n \"name\": \"liquidity\",\n \"type\": \"uint128\",\n \"indexed\": false,\n \"internalType\": \"uint128\"\n },\n {\n \"name\": \"tick\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"indexed\": false,\n \"internalType\": \"uint24\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Transfer\",\n \"inputs\": [\n {\n \"name\": \"caller\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyUnlocked\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CurrenciesOutOfOrderOrEqual\",\n \"inputs\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"CurrencyNotSettled\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"DelegateCallNotAllowed\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidCaller\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ManagerLocked\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"MustClearExactPositiveDelta\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NonzeroNativeValue\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"PoolNotInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ProtocolFeeCurrencySynced\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ProtocolFeeTooLarge\",\n \"inputs\": [\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"SwapAmountCannotBeZero\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TickSpacingTooLarge\",\n \"inputs\": [\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"TickSpacingTooSmall\",\n \"inputs\": [\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"UnauthorizedDynamicLPFeeUpdate\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type HexString,\n createDrift,\n} from \"@delvtech/drift\";\nimport {\n keccak256,\n encodePacked,\n stringToHex,\n pad,\n hexToBigInt,\n sliceHex,\n type Hex,\n} from \"viem\";\nimport { bytes32ToUint256, uint256ToBytes32 } from \"../helpers/hex\";\nimport { PoolManagerAbi } from \"../abi/PoolManager\";\n\nexport type PoolManagerABI = typeof PoolManagerAbi;\n\nexport interface PositionInfoParams {\n poolId: HexString;\n owner: Address;\n tickLower: number;\n tickUpper: number;\n salt: string;\n}\n\n/**\n * Client for the Uniswap v4 PoolManager. Pool state is read straight off the\n * singleton's storage via extsload (StateView is not deployed on Arc), using\n * the same slot derivations as Uniswap's StateLibrary.\n */\nexport class ReadPoolManager {\n public readonly contract: ReadContract<PoolManagerABI>;\n\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: PoolManagerAbi,\n address,\n });\n }\n\n /** The base storage slot of a pool's State struct (_pools is at slot 6). */\n poolStateSlot({ poolId }: { poolId: HexString }) {\n const POOLS_SLOT = uint256ToBytes32(6n);\n\n return keccak256(\n encodePacked([\"bytes32\", \"bytes32\"], [poolId, POOLS_SLOT])\n );\n }\n\n /**\n * Reads a pool's Slot0: current sqrt price, tick, and fee configuration\n * @param poolId - The ID of the pool\n * @returns Promise<{sqrtPriceX96: bigint, tick: number, protocolFee: number, lpFee: number}>\n */\n async poolSlot0({ poolId }: { poolId: HexString }) {\n const stateSlot = this.poolStateSlot({ poolId });\n\n const result = await this.contract.read(\"extsload\", {\n slot: stateSlot,\n });\n\n const data = (Array.isArray(result) ? result[0] : result) as HexString;\n const dataAsBigInt = BigInt(data);\n\n // Slot0 packing (bottom to top): uint160 sqrtPriceX96, int24 tick,\n // uint24 protocolFee, uint24 lpFee.\n const sqrtPriceX96 = dataAsBigInt & ((1n << 160n) - 1n);\n\n const tickRaw = Number((dataAsBigInt >> 160n) & 0xffffffn);\n const tick = tickRaw > 0x7fffff ? tickRaw - 0x1000000 : tickRaw;\n\n const protocolFee = Number((dataAsBigInt >> 184n) & 0xffffffn);\n const lpFee = Number((dataAsBigInt >> 208n) & 0xffffffn);\n\n return { sqrtPriceX96, tick, protocolFee, lpFee };\n }\n\n /**\n * Reads a liquidity position's state\n * @param poolId - The ID of the pool\n * @param owner - The address of the position owner\n * @param tickLower - The lower tick of the position\n * @param tickUpper - The upper tick of the position\n * @param salt - The salt used to identify the position\n * @returns Promise<{liquidity, feeGrowthInside0LastX128, feeGrowthInside1LastX128}>\n */\n async positionInfo({\n poolId,\n owner,\n tickLower,\n tickUpper,\n salt,\n }: PositionInfoParams): Promise<{\n liquidity: bigint;\n feeGrowthInside0LastX128: bigint;\n feeGrowthInside1LastX128: bigint;\n }> {\n const saltBytes32 = pad(stringToHex(salt), { size: 32, dir: \"right\" });\n\n const positionKey = keccak256(\n encodePacked(\n [\"address\", \"int24\", \"int24\", \"bytes32\"],\n [owner, tickLower, tickUpper, saltBytes32]\n )\n );\n\n const stateSlot = this.poolStateSlot({ poolId });\n\n // Pool.State layout: slot0(+0), feeGrowthGlobal0(+1), feeGrowthGlobal1(+2),\n // liquidity(+3), ticks(+4), tickBitmap(+5), positions(+6).\n const POSITIONS_OFFSET = 6n;\n const positionMapping = uint256ToBytes32(\n bytes32ToUint256(stateSlot) + POSITIONS_OFFSET\n );\n\n const positionInfoSlot = keccak256(\n encodePacked([\"bytes32\", \"bytes32\"], [positionKey, positionMapping])\n );\n\n const result = await this.contract.read(\"extsload\", {\n startSlot: positionInfoSlot,\n nSlots: 3n,\n });\n\n // Adapters differ on whether bytes32[] comes back as an array of words or\n // one concatenated hex blob; accept both.\n let words: Hex[];\n if (Array.isArray(result)) {\n words = result as Hex[];\n } else {\n const blob = result as unknown as Hex;\n words = [0, 1, 2].map((i) =>\n sliceHex(blob, i * 32, (i + 1) * 32)\n );\n }\n\n return {\n liquidity: hexToBigInt(words[0]),\n feeGrowthInside0LastX128: hexToBigInt(words[1]),\n feeGrowthInside1LastX128: hexToBigInt(words[2]),\n };\n }\n}\n","// Generated from FairLaunch.\n// Source artifact: FairLaunch.sol/FairLaunch.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const FairLaunchAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_poolManager\",\n \"type\": \"address\",\n \"internalType\": \"contract IPoolManager\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"closePosition\",\n \"inputs\": [\n {\n \"name\": \"_poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"_tokenFees\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_nativeIsZero\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FairLaunch.FairLaunchInfo\",\n \"components\": [\n {\n \"name\": \"startsAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"endsAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"initialTick\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"revenue\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"supply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"closed\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"createPosition\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_initialTick\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"_flaunchesAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_initialTokenFairLaunch\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_fairLaunchDuration\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FairLaunch.FairLaunchInfo\",\n \"components\": [\n {\n \"name\": \"startsAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"endsAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"initialTick\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"revenue\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"supply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"closed\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"fairLaunchInfo\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FairLaunch.FairLaunchInfo\",\n \"components\": [\n {\n \"name\": \"startsAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"endsAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"initialTick\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"revenue\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"supply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"closed\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"fillFromPosition\",\n \"inputs\": [\n {\n \"name\": \"_poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"_amountSpecified\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"_nativeIsZero\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"beforeSwapDelta_\",\n \"type\": \"int256\",\n \"internalType\": \"BeforeSwapDelta\"\n },\n {\n \"name\": \"balanceDelta_\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n },\n {\n \"name\": \"fairLaunchInfo_\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FairLaunch.FairLaunchInfo\",\n \"components\": [\n {\n \"name\": \"startsAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"endsAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"initialTick\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"revenue\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"supply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"closed\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getRoleAdmin\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"grantRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"hasRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"inFairLaunchWindow\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialSupply\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_supply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"modifyRevenue\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_revenue\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolManager\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IPoolManager\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"callerConfirmation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"revokeRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"supportsInterface\",\n \"inputs\": [\n {\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"FairLaunchCreated\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_tokens\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_startsAt\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_endsAt\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"FairLaunchEnded\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_revenue\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_supply\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_endedAt\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleAdminChanged\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleGranted\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleRevoked\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AccessControlBadConfirmation\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"AccessControlUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"neededRole\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"CannotModifyLiquidityDuringFairLaunch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CannotSellTokenDuringFairLaunch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotPositionManager\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type EventLog,\n type ReadWriteContract,\n type ReadWriteAdapter,\n type HexString,\n createDrift,\n} from \"@delvtech/drift\";\nimport { FairLaunchAbi } from \"../abi/FairLaunch\";\n\nexport type FairLaunchABI = typeof FairLaunchAbi;\n\n/**\n * Client for interacting with the FairLaunch V1 contract in read-only mode\n * Provides methods to query fair launch information and status\n */\nexport class ReadFairLaunch {\n public readonly contract: ReadContract<FairLaunchABI>;\n\n /**\n * Creates a new ReadFairLaunch instance\n * @param address - The address of the FairLaunch contract\n * @param drift - Optional drift instance for contract interactions (creates new instance if not provided)\n * @throws Error if address is not provided\n */\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: FairLaunchAbi,\n address,\n });\n }\n\n /**\n * Gets the fair launch duration in seconds for a pool. Per-pool since v5\n * (the launcher chooses it in FlaunchParams.fairLaunchDuration).\n */\n async fairLaunchDuration({ poolId }: { poolId: HexString }) {\n const { startsAt, endsAt } = await this.fairLaunchInfo({ poolId });\n return Number(endsAt - startsAt);\n }\n\n /**\n * Gets information about a fair launch for a specific pool\n * @param poolId - The ID of the pool\n * @returns Promise<{initialTick: number, closed: boolean, endsAt: number}> - Fair launch details\n */\n fairLaunchInfo({ poolId }: { poolId: HexString }) {\n return this.contract.read(\"fairLaunchInfo\", {\n _poolId: poolId,\n });\n }\n\n /**\n * Checks if a fair launch is currently active\n * @param poolId - The ID of the pool\n * @returns Promise<boolean> - True if the fair launch is active (not closed and not expired), false otherwise\n */\n async isFairLaunchActive({ poolId }: { poolId: HexString }) {\n const { closed, endsAt } = await this.fairLaunchInfo({ poolId });\n if (closed) {\n return false;\n }\n\n if (new Date().getTime() / 1000 > endsAt) {\n return false;\n }\n\n return true;\n }\n}\n","// Generated from BurningBidWall (the deployed BidWall variant).\n// Source artifact: BurningBidWall.sol/BurningBidWall.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const BidwallAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_nativeToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_poolManager\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_protocolOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"checkStalePosition\",\n \"inputs\": [\n {\n \"name\": \"_poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"_currentTick\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"_nativeIsZero\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"closeBidWall\",\n \"inputs\": [\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeOwnershipHandover\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"deposit\",\n \"inputs\": [\n {\n \"name\": \"_poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"_ethSwapAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_currentTick\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"_nativeIsZero\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getRoleAdmin\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"grantRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"hasRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isBidWallEnabled\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"lastPoolTransaction\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_timestamp\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nativeToken\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownershipHandoverExpiresAt\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolInfo\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"disabled\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"initialized\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"tickLower\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"tickUpper\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"pendingETHFees\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"cumulativeSwapFees\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolManager\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IPoolManager\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"position\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amount0_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount1_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"pendingEth_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"callerConfirmation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"requestOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"revokeRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setDisabledState\",\n \"inputs\": [\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"_disable\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setStaleTimeWindow\",\n \"inputs\": [\n {\n \"name\": \"_staleTimeWindow\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setSwapFeeThreshold\",\n \"inputs\": [\n {\n \"name\": \"swapFeeThreshold\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"staleTimeWindow\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"supportsInterface\",\n \"inputs\": [\n {\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"BidWallClosed\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_eth\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BidWallDeposit\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_added\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_pending\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BidWallDisabledStateUpdated\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_disabled\",\n \"type\": \"bool\",\n \"indexed\": false,\n \"internalType\": \"bool\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BidWallInitialized\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_eth\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_tickLower\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"_tickUpper\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BidWallRepositioned\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_eth\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_tickLower\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"_tickUpper\",\n \"type\": \"int24\",\n \"indexed\": false,\n \"internalType\": \"int24\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BidWallRewardsTransferred\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokens\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"FixedSwapFeeThresholdUpdated\",\n \"inputs\": [\n {\n \"name\": \"_newSwapFeeThreshold\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverCanceled\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverRequested\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"oldOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleAdminChanged\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleGranted\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleRevoked\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"StaleTimeWindowUpdated\",\n \"inputs\": [\n {\n \"name\": \"_staleTimeWindow\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AccessControlBadConfirmation\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"AccessControlUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"neededRole\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CallerIsNotCreator\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NewOwnerIsZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoHandoverRequest\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotPositionManager\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Unauthorized\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type EventLog,\n type ReadWriteContract,\n type ReadWriteAdapter,\n type HexString,\n createDrift,\n} from \"@delvtech/drift\";\nimport { BidwallAbi } from \"../abi/BidWall\";\n\nexport type BidwallABI = typeof BidwallAbi;\n\n/**\n * Client for interacting with the BidWall V1 contract in read-only mode\n * Provides methods to query bid wall positions and pool information\n */\nexport class ReadBidWall {\n public readonly contract: ReadContract<BidwallABI>;\n\n /**\n * Creates a new ReadBidWall instance\n * @param address - The address of the BidWall contract\n * @param drift - Optional drift instance for contract interactions (creates new instance if not provided)\n * @throws Error if address is not provided\n */\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: BidwallAbi,\n address,\n });\n }\n\n /**\n * Gets information about a bid wall position for a specific pool\n * @param poolId - The ID of the pool\n * @returns Promise<{amount0_: bigint, amount1_: bigint, pendingEth_: bigint}> - Position details including token amounts and pending ETH\n */\n position({ poolId }: { poolId: HexString }) {\n return this.contract.read(\"position\", {\n _poolId: poolId,\n });\n }\n\n /**\n * Gets configuration information about a pool's bid wall\n * @param poolId - The ID of the pool\n * @returns Promise<{tickLower: number, tickUpper: number}> - Pool configuration including tick range\n */\n poolInfo({ poolId }: { poolId: HexString }) {\n return this.contract.read(\"poolInfo\", {\n _poolId: poolId,\n });\n }\n}\n","// Generated from FlaunchZap (one-transaction launch entry point).\n// Source artifact: FlaunchZap.sol/FlaunchZap.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\n// NOTE: the 3-arg flaunch overload is stripped so drift name-keyed calls\n// resolve unambiguously; pass zeroed whitelist/airdrop/manager params instead.\nexport const FlaunchZapAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_positionManager\",\n \"type\": \"address\",\n \"internalType\": \"contract PositionManager\"\n },\n {\n \"name\": \"_flaunchContract\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n },\n {\n \"name\": \"_flETH\",\n \"type\": \"address\",\n \"internalType\": \"contract IFLETH\"\n },\n {\n \"name\": \"_poolSwap\",\n \"type\": \"address\",\n \"internalType\": \"contract PoolSwap\"\n },\n {\n \"name\": \"_treasuryManagerFactory\",\n \"type\": \"address\",\n \"internalType\": \"contract ITreasuryManagerFactory\"\n },\n {\n \"name\": \"_merkleAirdrop\",\n \"type\": \"address\",\n \"internalType\": \"contract IMerkleAirdrop\"\n },\n {\n \"name\": \"_whitelistFairLaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract WhitelistFairLaunch\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"receive\",\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"calculateFee\",\n \"inputs\": [\n {\n \"name\": \"_premineAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_slippage\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_initialPriceParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"ethRequired_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"deployAndInitializeManager\",\n \"inputs\": [\n {\n \"name\": \"_managerImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"_permissions\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"manager_\",\n \"type\": \"address\",\n \"internalType\": \"address payable\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flETH\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IFLETH\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunch\",\n \"inputs\": [\n {\n \"name\": \"_flaunchParams\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PositionManager.FlaunchParams\",\n \"components\": [\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"symbol\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"tokenUri\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"initialTokenFairLaunch\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"fairLaunchDuration\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"premineAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"creatorFeeAllocation\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"flaunchAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"initialPriceParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"feeCalculatorParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"_trustedFeeSigner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_premineSwapHookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"_whitelistParams\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FlaunchZap.WhitelistParams\",\n \"components\": [\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"merkleIPFSHash\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"maxTokens\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"_airdropParams\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FlaunchZap.AirdropParams\",\n \"components\": [\n {\n \"name\": \"airdropIndex\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"airdropAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"airdropEndTime\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"merkleRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"merkleIPFSHash\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ]\n },\n {\n \"name\": \"_treasuryManagerParams\",\n \"type\": \"tuple\",\n \"internalType\": \"struct FlaunchZap.TreasuryManagerParams\",\n \"components\": [\n {\n \"name\": \"manager\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"permissions\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"initializeData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"depositData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"memecoin_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"ethSpent_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deployedManager_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunchContract\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"merkleAirdrop\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IMerkleAirdrop\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolSwap\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract PoolSwap\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"positionManager\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract PositionManager\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"treasuryManagerFactory\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract ITreasuryManagerFactory\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"whitelistFairLaunch\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract WhitelistFairLaunch\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"error\",\n \"name\": \"CreatorCannotBeZero\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InsufficientMemecoinsForAirdrop\",\n \"inputs\": []\n }\n] as const;\n","// Generated from TreasuryManagerFactory.\n// Source artifact: TreasuryManagerFactory.sol/TreasuryManagerFactory.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const TreasuryManagerFactoryAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_protocolOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_feeEscrow\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"approveManager\",\n \"inputs\": [\n {\n \"name\": \"_managerImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"approvedManagerImplementation\",\n \"inputs\": [\n {\n \"name\": \"_managerImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_approved\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeOwnershipHandover\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"deployAndInitializeManager\",\n \"inputs\": [\n {\n \"name\": \"_managerImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"manager_\",\n \"type\": \"address\",\n \"internalType\": \"address payable\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"deployManager\",\n \"inputs\": [\n {\n \"name\": \"_managerImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"manager_\",\n \"type\": \"address\",\n \"internalType\": \"address payable\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"feeEscrow\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IFeeEscrow\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getRoleAdmin\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"grantRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"hasRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"managerImplementation\",\n \"inputs\": [\n {\n \"name\": \"_manager\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_managerImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownershipHandoverExpiresAt\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"callerConfirmation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"requestOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"revokeRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"supportsInterface\",\n \"inputs\": [\n {\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unapproveManager\",\n \"inputs\": [\n {\n \"name\": \"_managerImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"ManagerDeployed\",\n \"inputs\": [\n {\n \"name\": \"_manager\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_managerImplementation\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ManagerImplementationApproved\",\n \"inputs\": [\n {\n \"name\": \"_managerImplementation\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ManagerImplementationUnapproved\",\n \"inputs\": [\n {\n \"name\": \"_managerImplementation\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverCanceled\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverRequested\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"oldOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleAdminChanged\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleGranted\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleRevoked\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AccessControlBadConfirmation\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"AccessControlUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"neededRole\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NewOwnerIsZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoHandoverRequest\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Unauthorized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"UnknownManagerImplemention\",\n \"inputs\": []\n }\n] as const;\n","import axios from \"axios\";\nimport { IPFSParams } from \"../types\";\nimport { ApiBaseUrl } from \"../addresses\";\n\n// List of public IPFS gateways to cycle through\nconst IPFS_GATEWAYS = [\"https://ipfs.io/ipfs/\", \"https://dweb.link/ipfs/\"];\n\n// Counter to track the current gateway index\nlet currentGatewayIndex = 0;\n\nexport const resolveIPFS = (value: string): string => {\n if (value.startsWith(\"ipfs://\")) {\n const cid = value.slice(7);\n // Get the next gateway and increment the counter\n const gateway = IPFS_GATEWAYS[currentGatewayIndex];\n // Update the counter, cycling back to 0 when we reach the end\n currentGatewayIndex = (currentGatewayIndex + 1) % IPFS_GATEWAYS.length;\n return `${gateway}${cid}`;\n }\n return value;\n};\n\n/**\n * Every gateway URL an ipfs:// value can resolve to, so a fetch can fail over\n * when a public gateway rejects the request (they rate limit aggressively).\n * Non-IPFS values resolve to themselves.\n */\nexport const resolveIPFSCandidates = (value: string): string[] => {\n if (value.startsWith(\"ipfs://\")) {\n const cid = value.slice(7);\n return IPFS_GATEWAYS.map((gateway) => `${gateway}${cid}`);\n }\n return [value];\n};\n\n/**\n * Bounds for fetching coin metadata from a resolved tokenURI. The URI is\n * attacker-controlled onchain data, so cap the request rather than handing\n * axios an unbounded one.\n */\nconst METADATA_FETCH_TIMEOUT_MS = 15_000;\nconst METADATA_MAX_REDIRECTS = 3;\nconst METADATA_MAX_BYTES = 5 * 1024 * 1024;\n\n/**\n * Fetches token metadata from a resolved tokenURI over HTTP(S).\n *\n * @remarks\n * Applies a timeout, a redirect cap, and a response-size cap, and rejects\n * non-HTTP(S) protocols. It does NOT defend against SSRF: a coin's tokenURI\n * is arbitrary onchain data, so in a server context it can point at private\n * or link-local addresses. When calling this from a server with untrusted\n * coin addresses, route it through your own vetted fetch or egress policy\n * (see `setIPFSResolver` to swap the resolver, and the README).\n */\nexport const fetchTokenUriMetadata = async (url: string): Promise<any> => {\n if (!/^https?:\\/\\//i.test(url)) {\n throw new Error(`Unsupported tokenURI protocol: ${url.slice(0, 64)}`);\n }\n const response = await axios.get(url, {\n timeout: METADATA_FETCH_TIMEOUT_MS,\n maxRedirects: METADATA_MAX_REDIRECTS,\n maxContentLength: METADATA_MAX_BYTES,\n maxBodyLength: METADATA_MAX_BYTES,\n });\n return response.data;\n};\n\n/**\n * Fetches token metadata trying each candidate URL in order, so an ipfs://\n * tokenURI survives one public gateway refusing the request. Throws the last\n * error when every candidate fails.\n */\nexport const fetchTokenUriMetadataWithFallback = async (\n urls: string[]\n): Promise<any> => {\n let lastError: unknown;\n for (const url of urls) {\n try {\n return await fetchTokenUriMetadata(url);\n } catch (error) {\n lastError = error;\n }\n }\n throw lastError;\n};\n\n/** Decodes a base64 (optionally data-URL) image into bytes + mime type. */\nconst decodeBase64Image = (\n base64Image: string\n): { bytes: Uint8Array; mimeType: string } => {\n const base64Data = base64Image.split(\",\")[1] || base64Image;\n const byteCharacters = atob(base64Data);\n const bytes = new Uint8Array(byteCharacters.length);\n for (let i = 0; i < byteCharacters.length; i++) {\n bytes[i] = byteCharacters.charCodeAt(i);\n }\n\n let mimeType = \"image/png\"; // default\n if (base64Image.startsWith(\"data:\")) {\n mimeType = base64Image.split(\";\")[0].split(\":\")[1];\n }\n\n return { bytes, mimeType };\n};\n\n/**\n * Pins a token image + metadata through the ubi.fun API upload endpoint (the\n * same path the app uses: POST {apiUrl}/upload) and returns the tokenUri.\n * IP rate limited; 5MB image cap.\n */\nexport const uploadToUbiApi = async (params: {\n apiUrl: string;\n name: string;\n symbol: string;\n base64Image: string;\n description: string;\n websiteUrl?: string;\n discordUrl?: string;\n twitterUrl?: string;\n telegramUrl?: string;\n}): Promise<{ tokenUri: string; image: string }> => {\n const { bytes, mimeType } = decodeBase64Image(params.base64Image);\n\n const formData = new FormData();\n formData.append(\n \"image\",\n new Blob([bytes as BlobPart], { type: mimeType }),\n `image.${mimeType.split(\"/\")[1] ?? \"png\"}`\n );\n formData.append(\"name\", params.name);\n formData.append(\"symbol\", params.symbol);\n formData.append(\"description\", params.description);\n if (params.websiteUrl) {\n formData.append(\"website\", params.websiteUrl);\n }\n if (params.discordUrl) {\n formData.append(\"discord\", params.discordUrl);\n }\n if (params.twitterUrl) {\n formData.append(\"twitter\", params.twitterUrl);\n }\n if (params.telegramUrl) {\n formData.append(\"telegram\", params.telegramUrl);\n }\n\n try {\n const response = await axios.post(`${params.apiUrl}/upload`, formData);\n return {\n tokenUri: response.data.tokenUri,\n image: response.data.image,\n };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n throw new Error(\n `Failed to upload token metadata: ${\n error.response?.data?.error || error.message\n }`\n );\n }\n throw error;\n }\n};\n\n/**\n * Pins the token image + metadata through the ubi.fun API and returns the\n * `ipfs://` tokenUri to pass into a flaunch call.\n *\n * To host metadata yourself (any provider, any storage), skip this entirely:\n * upload however you like, then pass the resulting URI straight to\n * `flaunch({ tokenUri })`.\n */\nexport const generateTokenUri = async (\n name: string,\n symbol: string,\n params: IPFSParams & { chainId: number }\n) => {\n const apiUrl = ApiBaseUrl[params.chainId];\n if (!apiUrl) {\n throw new Error(\n `No ubi.fun API for chain ${params.chainId}; pin the metadata yourself and pass flaunch({ tokenUri })`\n );\n }\n\n const { tokenUri } = await uploadToUbiApi({\n apiUrl,\n name,\n symbol,\n base64Image: params.metadata.base64Image,\n description: params.metadata.description,\n websiteUrl: params.metadata.websiteUrl,\n discordUrl: params.metadata.discordUrl,\n twitterUrl: params.metadata.twitterUrl,\n telegramUrl: params.metadata.telegramUrl,\n });\n\n return tokenUri;\n};\n","import { concat, keccak256, pad, toHex } from \"viem\";\nimport { PoolKey } from \"../types\";\n\n// our min/max tick range that is valid for the tick spacing (60)\nexport const TickFinder = {\n MIN_TICK: -887220,\n MAX_TICK: 887220,\n};\n\nexport const Q96 = 2n ** 96n;\nexport const Q192 = 2n ** 192n;\n\nexport const TICK_SPACING = 60;\n\nexport const getPoolId = (poolKey: PoolKey) => {\n // Pack the data in the same order as Solidity struct\n const packed = concat([\n pad(poolKey.currency0, { size: 32 }), // address padded to 32 bytes\n pad(poolKey.currency1, { size: 32 }), // address padded to 32 bytes\n pad(toHex(poolKey.fee), { size: 32 }), // uint24 padded to 32 bytes\n pad(toHex(poolKey.tickSpacing), { size: 32 }), // int24 padded to 32 bytes\n pad(poolKey.hooks, { size: 32 }), // address padded to 32 bytes\n ]);\n\n return keccak256(packed);\n};\n\nexport const orderPoolKey = (poolKey: PoolKey) => {\n // Compare lowercased so checksummed input cannot flip the v4 numeric ordering\n const [currency0, currency1] =\n poolKey.currency0.toLowerCase() < poolKey.currency1.toLowerCase()\n ? [poolKey.currency0, poolKey.currency1]\n : [poolKey.currency1, poolKey.currency0];\n\n return {\n ...poolKey,\n currency0,\n currency1,\n };\n};\n\nexport const getValidTick = ({\n tick,\n tickSpacing,\n roundDown = true,\n}: {\n tick: number;\n tickSpacing: number;\n roundDown?: boolean;\n}) => {\n // If the tick is already valid, exit early\n if (tick % tickSpacing === 0) {\n return tick;\n }\n\n // Division that rounds towards zero (like Solidity)\n let validTick = Math.trunc(tick / tickSpacing) * tickSpacing;\n\n // Handle negative ticks (Solidity behavior)\n if (tick < 0 && tick % tickSpacing !== 0) {\n validTick -= tickSpacing;\n }\n\n // If not rounding down, add TICK_SPACING to get the upper tick\n if (!roundDown) {\n validTick += tickSpacing;\n }\n\n return validTick;\n};\n\n// Rounds up or down to the nearest tick\nexport const getNearestUsableTick = ({\n tick,\n tickSpacing,\n}: {\n tick: number;\n tickSpacing: number;\n}): number => {\n const rounded = Math.round(tick / tickSpacing) * tickSpacing;\n return Math.max(TickFinder.MIN_TICK, Math.min(TickFinder.MAX_TICK, rounded));\n};\n\nconst getAmount0ForLiquidity = (\n sqrtRatioAX96: bigint,\n sqrtRatioBX96: bigint,\n liquidity: bigint\n) => {\n let [sqrtRatioA, sqrtRatioB] = [sqrtRatioAX96, sqrtRatioBX96];\n\n if (sqrtRatioA > sqrtRatioB) {\n [sqrtRatioA, sqrtRatioB] = [sqrtRatioB, sqrtRatioA];\n }\n\n const leftShiftedLiquidity = liquidity << 96n;\n const sqrtDiff = sqrtRatioB - sqrtRatioA;\n const multipliedRes = leftShiftedLiquidity * sqrtDiff;\n const numerator = multipliedRes / sqrtRatioB;\n const amount0 = numerator / sqrtRatioA;\n\n return amount0;\n};\n\nconst getAmount1ForLiquidity = (\n sqrtRatioAX96: bigint,\n sqrtRatioBX96: bigint,\n liquidity: bigint\n) => {\n let [sqrtRatioA, sqrtRatioB] = [sqrtRatioAX96, sqrtRatioBX96];\n\n if (sqrtRatioA > sqrtRatioB) {\n [sqrtRatioA, sqrtRatioB] = [sqrtRatioB, sqrtRatioA];\n }\n\n const sqrtDiff = sqrtRatioB - sqrtRatioA;\n const multipliedRes = liquidity * sqrtDiff;\n\n const amount1 = multipliedRes / 2n ** 96n;\n\n return amount1;\n};\n\nexport const getSqrtPriceX96FromTick = (tick: number): bigint => {\n const absTick = tick < 0 ? BigInt(-tick) : BigInt(tick);\n if (absTick > TickFinder.MAX_TICK) {\n throw new Error(\"Tick out of range\");\n }\n\n let ratio =\n (absTick & 1n) !== 0n\n ? 0xfffcb933bd6fad37aa2d162d1a594001n\n : 0x100000000000000000000000000000000n;\n\n if ((absTick & 2n) !== 0n)\n ratio = (ratio * 0xfff97272373d413259a46990580e213an) >> 128n;\n if ((absTick & 4n) !== 0n)\n ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdccn) >> 128n;\n if ((absTick & 8n) !== 0n)\n ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0n) >> 128n;\n if ((absTick & 16n) !== 0n)\n ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644n) >> 128n;\n if ((absTick & 32n) !== 0n)\n ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0n) >> 128n;\n if ((absTick & 64n) !== 0n)\n ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861n) >> 128n;\n if ((absTick & 128n) !== 0n)\n ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053n) >> 128n;\n if ((absTick & 256n) !== 0n)\n ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4n) >> 128n;\n if ((absTick & 512n) !== 0n)\n ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54n) >> 128n;\n if ((absTick & 1024n) !== 0n)\n ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3n) >> 128n;\n if ((absTick & 2048n) !== 0n)\n ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9n) >> 128n;\n if ((absTick & 4096n) !== 0n)\n ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825n) >> 128n;\n if ((absTick & 8192n) !== 0n)\n ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5n) >> 128n;\n if ((absTick & 16384n) !== 0n)\n ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7n) >> 128n;\n if ((absTick & 32768n) !== 0n)\n ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6n) >> 128n;\n if ((absTick & 65536n) !== 0n)\n ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9n) >> 128n;\n if ((absTick & 131072n) !== 0n)\n ratio = (ratio * 0x5d6af8dedb81196699c329225ee604n) >> 128n;\n if ((absTick & 262144n) !== 0n)\n ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98n) >> 128n;\n if ((absTick & 524288n) !== 0n)\n ratio = (ratio * 0x48a170391f7dc42444e8fa2n) >> 128n;\n\n if (tick > 0) {\n ratio = (2n ** 256n - 1n) / ratio;\n }\n\n // Convert from Q128.128 to Q128.96\n const resultShifted = ratio >> 32n;\n if (ratio % (1n << 32n) === 0n) {\n return resultShifted;\n }\n return resultShifted + 1n;\n};\n\nexport const calculateUnderlyingTokenBalances = (\n liquidity: bigint,\n tickLower: number,\n tickUpper: number,\n tickCurrent: number\n): { amount0: bigint; amount1: bigint } => {\n const sqrtPriceCurrentX96 = getSqrtPriceX96FromTick(tickCurrent);\n const sqrtPriceLowerX96 = getSqrtPriceX96FromTick(tickLower);\n const sqrtPriceUpperX96 = getSqrtPriceX96FromTick(tickUpper);\n\n let amount0 = 0n;\n let amount1 = 0n;\n\n if (sqrtPriceCurrentX96 <= sqrtPriceLowerX96) {\n // Current price is below the position range\n amount0 = getAmount0ForLiquidity(\n sqrtPriceLowerX96,\n sqrtPriceUpperX96,\n liquidity\n );\n } else if (sqrtPriceCurrentX96 < sqrtPriceUpperX96) {\n // Current price is within the position range\n amount0 = getAmount0ForLiquidity(\n sqrtPriceCurrentX96,\n sqrtPriceUpperX96,\n liquidity\n );\n amount1 = getAmount1ForLiquidity(\n sqrtPriceLowerX96,\n sqrtPriceCurrentX96,\n liquidity\n );\n } else {\n // Current price is above the position range\n amount1 = getAmount1ForLiquidity(\n sqrtPriceLowerX96,\n sqrtPriceUpperX96,\n liquidity\n );\n }\n\n return { amount0, amount1 };\n};\n\n// Helper function to convert price ratio to tick with decimal handling\nexport const priceRatioToTick = ({\n priceInput,\n isDirection1Per0,\n decimals0,\n decimals1,\n spacing,\n shouldGetNearestUsableTick = true,\n}: {\n priceInput: string;\n isDirection1Per0: boolean;\n decimals0: number;\n decimals1: number;\n spacing: number;\n shouldGetNearestUsableTick?: boolean;\n}): number => {\n if (!priceInput || isNaN(Number(priceInput))) return 0;\n\n const inputPrice = Number(priceInput);\n\n try {\n // For Uniswap v3/v4, the tick represents price as: price = 1.0001^tick\n // where price = amount1/amount0 in their raw decimal format\n\n let priceRatio: number;\n\n if (isDirection1Per0) {\n // Input is token1 per token0 (e.g., memecoin per USDC)\n // Convert from human-readable to raw: divide by (10^decimals0 / 10^decimals1)\n priceRatio = inputPrice / Math.pow(10, decimals0 - decimals1);\n } else {\n // Input is token0 per token1 (e.g., USDC per memecoin)\n // Invert to get token1 per token0, then convert to raw\n priceRatio = 1 / inputPrice / Math.pow(10, decimals0 - decimals1);\n }\n\n // Calculate tick: tick = log(price) / log(1.0001)\n const tick = Math.log(priceRatio) / Math.log(1.0001);\n\n if (shouldGetNearestUsableTick) {\n return getValidTick({\n tick: Math.round(tick),\n tickSpacing: spacing,\n });\n } else {\n return Math.round(tick);\n }\n } catch (error) {\n console.error(\"Error converting price to tick:\", error);\n // Fallback to basic calculation\n const rawTick = Math.floor(Math.log(inputPrice) / Math.log(1.0001));\n if (shouldGetNearestUsableTick) {\n return getValidTick({\n tick: rawTick,\n tickSpacing: spacing,\n });\n } else {\n return rawTick;\n }\n }\n};\n\n/**\n * Accurate liquidity calculation using proper Uniswap v3/v4 math\n */\nexport const getLiquidityFromAmounts = (params: {\n currentTick: number;\n tickLower: number;\n tickUpper: number;\n amount0: bigint;\n amount1: bigint;\n}) => {\n const sqrtRatioCurrentX96 = getSqrtPriceX96FromTick(params.currentTick);\n let sqrtRatioAX96 = getSqrtPriceX96FromTick(params.tickLower);\n let sqrtRatioBX96 = getSqrtPriceX96FromTick(params.tickUpper);\n\n if (sqrtRatioAX96 > sqrtRatioBX96) {\n [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96];\n }\n\n if (sqrtRatioCurrentX96 <= sqrtRatioAX96) {\n return maxLiquidityForAmount0Precise(\n sqrtRatioAX96,\n sqrtRatioBX96,\n params.amount0\n );\n } else if (sqrtRatioCurrentX96 < sqrtRatioBX96) {\n const liquidity0 = maxLiquidityForAmount0Precise(\n sqrtRatioCurrentX96,\n sqrtRatioBX96,\n params.amount0\n );\n const liquidity1 = maxLiquidityForAmount1(\n sqrtRatioAX96,\n sqrtRatioCurrentX96,\n params.amount1\n );\n return liquidity0 < liquidity1 ? liquidity0 : liquidity1;\n } else {\n return maxLiquidityForAmount1(sqrtRatioAX96, sqrtRatioBX96, params.amount1);\n }\n};\n\n/**\n * Returns a precise maximum amount of liquidity received for a given amount of token 0 by dividing by Q64 instead of Q96 in the intermediate step,\n * and shifting the subtracted ratio left by 32 bits.\n * @param sqrtRatioAX96 The price at the lower boundary\n * @param sqrtRatioBX96 The price at the upper boundary\n * @param amount0 The token0 amount\n * @returns liquidity for amount0, precise\n */\nexport function maxLiquidityForAmount0Precise(\n sqrtRatioAX96: bigint,\n sqrtRatioBX96: bigint,\n amount0: bigint\n): bigint {\n if (sqrtRatioAX96 > sqrtRatioBX96) {\n [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96];\n }\n\n // Handle edge case where sqrt ratios are equal (division by zero)\n if (sqrtRatioAX96 === sqrtRatioBX96) {\n return 0n;\n }\n\n const Q96 = 2n ** 96n;\n const numerator = amount0 * sqrtRatioAX96 * sqrtRatioBX96;\n const denominator = Q96 * (sqrtRatioBX96 - sqrtRatioAX96);\n\n return numerator / denominator;\n}\n\n/**\n * Computes the maximum amount of liquidity received for a given amount of token1\n * @param sqrtRatioAX96 The price at the lower tick boundary\n * @param sqrtRatioBX96 The price at the upper tick boundary\n * @param amount1 The token1 amount\n * @returns liquidity for amount1\n */\nexport function maxLiquidityForAmount1(\n sqrtRatioAX96: bigint,\n sqrtRatioBX96: bigint,\n amount1: bigint\n): bigint {\n if (sqrtRatioAX96 > sqrtRatioBX96) {\n [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96];\n }\n\n // Handle edge case where sqrt ratios are equal (division by zero)\n if (sqrtRatioAX96 === sqrtRatioBX96) {\n return 0n;\n }\n\n const Q96 = 2n ** 96n;\n return (amount1 * Q96) / (sqrtRatioBX96 - sqrtRatioAX96);\n}\n\n/**\n * Calculate the actual amounts needed for a given liquidity\n * This prevents MaximumAmountExceeded errors by ensuring we provide sufficient maximums\n */\nexport const getAmountsForLiquidity = (params: {\n currentTick: number;\n tickLower: number;\n tickUpper: number;\n liquidity: bigint;\n}): { amount0: bigint; amount1: bigint } => {\n // Handle zero liquidity case\n if (params.liquidity === 0n) {\n return { amount0: 0n, amount1: 0n };\n }\n\n const sqrtRatioCurrentX96 = getSqrtPriceX96FromTick(params.currentTick);\n let sqrtRatioAX96 = getSqrtPriceX96FromTick(params.tickLower);\n let sqrtRatioBX96 = getSqrtPriceX96FromTick(params.tickUpper);\n\n if (sqrtRatioAX96 > sqrtRatioBX96) {\n [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96];\n }\n\n let amount0 = 0n;\n let amount1 = 0n;\n\n if (sqrtRatioCurrentX96 <= sqrtRatioAX96) {\n // Current price is below the range, only token0 needed\n amount0 = getAmount0ForLiquidity(\n sqrtRatioAX96,\n sqrtRatioBX96,\n params.liquidity\n );\n } else if (sqrtRatioCurrentX96 < sqrtRatioBX96) {\n // Current price is within the range, need both tokens\n amount0 = getAmount0ForLiquidity(\n sqrtRatioCurrentX96,\n sqrtRatioBX96,\n params.liquidity\n );\n amount1 = getAmount1ForLiquidity(\n sqrtRatioAX96,\n sqrtRatioCurrentX96,\n params.liquidity\n );\n } else {\n // Current price is above the range, only token1 needed\n amount1 = getAmount1ForLiquidity(\n sqrtRatioAX96,\n sqrtRatioBX96,\n params.liquidity\n );\n }\n\n return { amount0, amount1 };\n};\n","import { encodeAbiParameters, isAddress, zeroAddress, type Address } from \"viem\";\nimport { PoolKey } from \"../types\";\nimport { USDC_ADDRESS } from \"../addresses\";\nimport { orderPoolKey, Q192 } from \"./univ4\";\n\n/**\n * Swap-building helpers shared by the quoter and PoolSwap clients. Pool keys,\n * hook data and direction mirror the ubi.fun app and MCP server exactly; the\n * SDK's price bound additionally anchors on the quoted end price so an\n * exact-input trade's own impact does not eat the slippage budget.\n */\n\n/**\n * Encodes the referrer for the hook: 5% of the swap fee accrues on-chain to\n * this address (claimable from the ReferralEscrow). '0x' means no referrer and\n * the share cascades down the fee split instead. The SAME hookData must be\n * used for the quote and the swap for them to match.\n */\nexport function referrerHookData(\n referrer: Address | undefined\n): `0x${string}` {\n return referrer && isAddress(referrer) && referrer !== zeroAddress\n ? encodeAbiParameters([{ type: \"address\" }], [referrer])\n : \"0x\";\n}\n\n/** Builds the v4 pool key for a coin: USDC on the cash side, hook fixed by the protocol. */\nexport function coinPoolKey(\n coinAddress: Address,\n positionManagerAddress: Address\n): PoolKey {\n return orderPoolKey({\n currency0: USDC_ADDRESS,\n currency1: coinAddress,\n fee: 0,\n tickSpacing: 60,\n hooks: positionManagerAddress,\n });\n}\n\n/** True when USDC sorts as currency0 for this coin's pool. */\nexport function usdcIsCurrencyZero(coinAddress: Address): boolean {\n return coinAddress.toLowerCase() > USDC_ADDRESS.toLowerCase();\n}\n\n/**\n * v4 swap direction. Buys spend USDC for the coin: when USDC is currency0\n * that's a zeroForOne swap, otherwise the reverse.\n */\nexport function swapDirection(\n side: \"buy\" | \"sell\",\n coinAddress: Address\n): boolean {\n return side === \"buy\"\n ? usdcIsCurrencyZero(coinAddress)\n : !usdcIsCurrencyZero(coinAddress);\n}\n\n// Uniswap v4 sqrt price bounds (TickMath.MIN_SQRT_PRICE / MAX_SQRT_PRICE, exclusive).\nconst MIN_SQRT_PRICE = 4_295_128_739n + 1n;\nconst MAX_SQRT_PRICE =\n 1_461_446_703_485_210_103_287_273_052_203_988_822_378_723_970_342n - 1n;\n\nfunction bigintSqrt(value: bigint): bigint {\n if (value < 2n) {\n return value;\n }\n let current = value;\n let next = (current + value / current) / 2n;\n while (next < current) {\n current = next;\n next = (current + value / current) / 2n;\n }\n return current;\n}\n\n/**\n * Expected pool sqrt price after an exact-input fill, derived from the quoted\n * amounts through the constant-liquidity identity amountOut/amountIn =\n * sqrtP_start * sqrtP_end (inverted for oneForZero). Hook fees only skew the\n * estimate toward the permissive side, so a slippage margin applied on top of\n * it never lands tighter than the real fill. Falls back to the spot price when\n * a quote leg is zero or the estimate lands on the wrong side of spot.\n */\nexport function expectedEndSqrtPriceX96({\n current,\n zeroForOne,\n amountIn,\n amountOut,\n}: {\n current: bigint;\n zeroForOne: boolean;\n amountIn: bigint;\n amountOut: bigint;\n}): bigint {\n if (current === 0n || amountIn <= 0n || amountOut <= 0n) {\n return current;\n }\n const end = zeroForOne\n ? (amountOut * Q192) / (amountIn * current)\n : (amountIn * Q192) / (amountOut * current);\n if (zeroForOne) {\n return end < current ? end : current;\n }\n return end > current ? end : current;\n}\n\n/**\n * Slippage bound as a sqrt price limit: the pool price may move at most\n * `slippageBps` beyond `current` (pass the expected end price for exact-input\n * swaps, so the trade's own quoted impact is not counted against the budget)\n * before the swap stops filling.\n */\nexport function sqrtPriceLimit({\n current,\n zeroForOne,\n slippageBps,\n}: {\n current: bigint;\n zeroForOne: boolean;\n slippageBps: number;\n}): bigint {\n if (\n !Number.isInteger(slippageBps) ||\n slippageBps < 0 ||\n slippageBps >= 10_000\n ) {\n throw new Error(\n `slippageBps must be an integer in [0, 10000), got ${slippageBps}`\n );\n }\n const factor = BigInt(\n zeroForOne ? 10_000 - slippageBps : 10_000 + slippageBps\n );\n const multiplier = bigintSqrt((factor * 10n ** 18n) / 10_000n);\n const limit = (current * multiplier) / 10n ** 9n;\n return zeroForOne\n ? limit > MIN_SQRT_PRICE\n ? limit\n : MIN_SQRT_PRICE\n : limit < MAX_SQRT_PRICE\n ? limit\n : MAX_SQRT_PRICE;\n}\n","import { encodeAbiParameters, isAddressEqual, type Address, type Hex } from \"viem\";\n\n/**\n * Creator vault rules, mirrored from the contracts (and the ubi.fun app):\n * HolderShareFeeCalculator fees are FeeDistributor units (100_00 = 100%),\n * DividendVault shares are SHARE_DENOMINATOR units (100_00 = 100%).\n */\nexport const VAULT_MIN_FEE = 150;\nexport const VAULT_MAX_FEE = 500;\nexport const VAULT_MIN_HOLDER_SHARE = 16_67;\nexport const VAULT_SHARE_DENOMINATOR = 100_00;\n/** The calculator only registers launches whose creator side is 90% or more. */\nexport const VAULT_MIN_CREATOR_ALLOCATION_PERCENT = 90;\n/** DividendVault.MAX_RECIPIENTS is 5, and the creator always takes one of them. */\nexport const VAULT_MAX_SPLIT_RECEIVERS = 4;\n\n/**\n * `feeCalculatorParams` for a launch WITHOUT a vault: a fee of 0. With no fee\n * calculator set the PositionManager never reads them; the vault calculator\n * refuses them (`FeeOutOfRange(0)`), so a launch without a vault that lands\n * after activation reverts instead of creating a token that can never trade.\n */\nexport const NO_VAULT_FEE_CALCULATOR_PARAMS: Hex = encodeAbiParameters(\n [{ type: \"uint256\" }],\n [0n]\n);\n\n/** `feeCalculatorParams` registering a vault launch at `fee` (FeeDistributor units). */\nexport function vaultFeeCalculatorParams(fee: number): Hex {\n return encodeAbiParameters([{ type: \"uint256\" }], [BigInt(fee)]);\n}\n\n/** Basis points of a percent with at most two decimals, at least 1; throws otherwise. */\nexport function percentToVaultBps(percent: number, label: string): number {\n const bps = Math.round(percent * 100);\n if (!Number.isFinite(percent) || bps < 1 || Math.abs(bps - percent * 100) > 1e-6) {\n throw new Error(\n `${label} must be a positive percent with at most 2 decimals, got ${percent}`\n );\n }\n return bps;\n}\n\n/**\n * DividendVault initialize data: `abi.encode(holderShare, recipients, shares)`.\n * Receivers come first and the creator last with the remainder (the vault pays\n * rounding dust to the last recipient), so shares always sum to exactly 100_00.\n */\nexport function encodeVaultInitializeData(params: {\n holderShare: number;\n receivers: { address: Address; bps: number }[];\n creator: Address;\n}): Hex {\n const total = params.receivers.reduce((sum, receiver) => sum + receiver.bps, 0);\n if (total >= VAULT_SHARE_DENOMINATOR) {\n throw new Error(\"splitReceivers total 100% or more; the creator must keep a share\");\n }\n return encodeAbiParameters(\n [{ type: \"uint256\" }, { type: \"address[]\" }, { type: \"uint256[]\" }],\n [\n BigInt(params.holderShare),\n [...params.receivers.map((receiver) => receiver.address), params.creator],\n [\n ...params.receivers.map((receiver) => BigInt(receiver.bps)),\n BigInt(VAULT_SHARE_DENOMINATOR - total),\n ],\n ]\n );\n}\n\n/** What a launch must look like under the calculators set on-chain right now. */\nexport interface LaunchCalculatorState {\n /** The vault calculator is live: every launch must attach its DividendVault. */\n vault: boolean;\n /** `feeCalculatorParams` for a launch without a vault in this state. */\n noVaultParams: Hex;\n}\n\n/**\n * Classifies the PositionManager's two calculator slots. The vault flow is live\n * when this SDK knows the vault and calculator and that calculator is the one\n * set. A launch without a vault sends the no-vault marker while no calculator\n * is set or when the SDK cannot place what is set (fail closed), and empty\n * params only beside a calculator that is certainly not the vault one.\n */\nexport function launchCalculatorState(params: {\n standard: Address;\n fairLaunch: Address;\n vaultCalculator?: Address;\n vaultImplementation?: Address;\n /**\n * TreasuryManagerFactory approval of the vault implementation: the zap only\n * clones an approved one, and would hand the creator NFT to an unapproved\n * implementation itself (no clone, a token that can never trade).\n */\n vaultApproved?: boolean;\n}): LaunchCalculatorState {\n const zero = \"0x0000000000000000000000000000000000000000\";\n const { standard, fairLaunch, vaultCalculator, vaultImplementation, vaultApproved } = params;\n const isZero = (address: Address) => isAddressEqual(address, zero);\n const isOurs = (address: Address) =>\n vaultCalculator !== undefined && isAddressEqual(address, vaultCalculator);\n if (\n vaultImplementation &&\n vaultApproved === true &&\n isOurs(standard) &&\n (isZero(fairLaunch) || isOurs(fairLaunch))\n ) {\n return { vault: true, noVaultParams: NO_VAULT_FEE_CALCULATOR_PARAMS };\n }\n if (\n vaultCalculator &&\n !(isZero(standard) && isZero(fairLaunch)) &&\n !isOurs(standard) &&\n !isOurs(fairLaunch)\n ) {\n return { vault: false, noVaultParams: \"0x\" };\n }\n return { vault: false, noVaultParams: NO_VAULT_FEE_CALCULATOR_PARAMS };\n}\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type ReadWriteContract,\n type ReadWriteAdapter,\n type HexString,\n createDrift,\n} from \"@delvtech/drift\";\nimport { FlaunchZapAbi } from \"../abi/FlaunchZap\";\nimport { FlaunchPositionManagerAbi } from \"../abi/FlaunchPositionManager\";\nimport { TreasuryManagerFactoryAbi } from \"../abi/TreasuryManagerFactory\";\nimport { isAddressEqual, parseUnits, zeroAddress, zeroHash } from \"viem\";\nimport { encodeAbiParameters } from \"viem\";\nimport { generateTokenUri } from \"../helpers/ipfs\";\nimport { referrerHookData } from \"../utils/swap\";\nimport {\n encodeVaultInitializeData,\n launchCalculatorState,\n type LaunchCalculatorState,\n NO_VAULT_FEE_CALCULATOR_PARAMS,\n percentToVaultBps,\n VAULT_MAX_FEE,\n VAULT_MAX_SPLIT_RECEIVERS,\n VAULT_MIN_CREATOR_ALLOCATION_PERCENT,\n VAULT_MIN_FEE,\n VAULT_MIN_HOLDER_SHARE,\n VAULT_SHARE_DENOMINATOR,\n vaultFeeCalculatorParams,\n} from \"../utils/creatorVaults\";\nimport { IPFSParams } from \"../types\";\nimport {\n AddressFeeSplitManagerAddress,\n DividendVaultAddress,\n FlaunchPositionManagerAddress,\n HolderShareFeeCalculatorAddress,\n TreasuryManagerFactoryAddress,\n} from \"../addresses\";\n\nexport type FlaunchZapABI = typeof FlaunchZapAbi;\n\nexport interface FlaunchParams {\n name: string;\n symbol: string;\n tokenUri: string;\n /** Percent of supply (0-95) sold at the fixed fair launch price first. 0 for no fair launch. */\n fairLaunchPercent: number;\n /** Fair launch window in seconds (0 when fairLaunchPercent is 0). */\n fairLaunchDuration: number;\n /** Initial market cap in whole USD; $10,000 is the on-chain minimum and currently fee-free. */\n initialMarketCapUSD: number;\n /** Receives the Flaunch NFT (the revenue claim) and the creator revenue. */\n creator: Address;\n /** Creator vs floor-bid split of the creator share, 0-100 (the app defaults to 90). */\n creatorFeeAllocationPercent: number;\n /** 0 (or omit) to launch now, or a start timestamp within 30 days. */\n flaunchAt?: bigint;\n /** Coins the creator buys at the launch price in the same transaction. */\n premineAmount?: bigint;\n /** Referrer credited on the premine swap fee (only relevant with premineAmount). */\n premineReferrer?: Address;\n treasuryManagerParams?: {\n manager?: Address;\n /** Permissions contract for a newly deployed manager; zero address = open. */\n permissions?: Address;\n initializeData?: HexString;\n depositData?: HexString;\n };\n /** Restrict the fair launch to a Merkle whitelist (zero root = open launch). */\n whitelistParams?: {\n merkleRoot: HexString;\n merkleIPFSHash: string;\n maxTokens: bigint;\n };\n /** Reserve part of the supply for a launch airdrop (zero values = none). */\n airdropParams?: {\n airdropIndex: bigint;\n airdropAmount: bigint;\n airdropEndTime: bigint;\n merkleRoot: HexString;\n merkleIPFSHash: string;\n };\n}\n\nexport interface FlaunchIPFSParams\n extends Omit<FlaunchParams, \"tokenUri\">,\n IPFSParams {}\n\nexport interface FlaunchWithSplitManagerParams\n extends Omit<FlaunchParams, \"treasuryManagerParams\"> {\n /**\n * Other recipients and their percentages (0-100, fractional allowed, 5\n * decimal places of precision). The creator automatically receives the exact\n * remainder to 100%. A recipient can be an X-handle escrow address\n * (ReadXHandleClaims.escrowAddress) to pay a handle that has not claimed yet.\n */\n splitReceivers: {\n address: Address;\n percent: number;\n }[];\n}\n\nexport interface FlaunchWithSplitManagerIPFSParams\n extends Omit<FlaunchWithSplitManagerParams, \"tokenUri\">,\n IPFSParams {}\n\nexport interface FlaunchWithVaultParams\n extends Omit<FlaunchParams, \"treasuryManagerParams\"> {\n /** Trading fee in percent, 1.5 to 5 with at most 2 decimals (default 1.5). Permanent. */\n feePercent?: number;\n /**\n * Share of the creator's earnings paid to the token's holders in USDC, in\n * percent: 16.67 to 100 with at most 2 decimals (default 16.67). Permanent.\n */\n holderSharePercent?: number;\n /**\n * Other recipients of what the creator keeps after holder dividends, in\n * percent (at most 2 decimals, at most 4 receivers). The creator receives\n * the exact remainder. A receiver can be an X-handle escrow address.\n */\n splitReceivers?: {\n address: Address;\n percent: number;\n }[];\n}\n\nexport interface FlaunchWithVaultIPFSParams\n extends Omit<FlaunchWithVaultParams, \"tokenUri\">,\n IPFSParams {}\n\n/**\n * Base client for interacting with the FlaunchZap contract in read-only mode.\n * The zap is the one-transaction launch entry point: token, Uniswap v4 pool,\n * locked liquidity, fair launch, and the creator revenue stream.\n */\nexport class ReadFlaunchZap {\n drift: Drift;\n chainId: number;\n public readonly contract: ReadContract<FlaunchZapABI>;\n public readonly TOTAL_SUPPLY = 100n * 10n ** 27n; // 100 Billion tokens in wei\n\n constructor(chainId: number, address: Address, drift: Drift = createDrift()) {\n this.chainId = chainId;\n this.drift = drift;\n if (!address) {\n throw new Error(\"Address is required\");\n }\n this.contract = drift.contract({\n abi: FlaunchZapAbi,\n address,\n });\n }\n\n /**\n * The msg.value required to flaunch: covers the premine purchase when there\n * is one, plus the flaunch fee for market caps at or above the on-chain\n * threshold. On Arc msg.value is native USDC at 18 decimals. Always send\n * exactly this; sending less reverts with InsufficientFlaunchFee.\n */\n valueRequiredToFlaunch(params: {\n premineAmount: bigint;\n initialPriceParams: HexString;\n slippagePercent?: number;\n }) {\n const slippagePercent = params.slippagePercent ?? 0;\n if (\n !Number.isFinite(slippagePercent) ||\n slippagePercent < 0 ||\n slippagePercent > 100\n ) {\n throw new Error(\n `slippagePercent must be between 0 and 100, got ${slippagePercent}`\n );\n }\n return this.contract.read(\"calculateFee\", {\n _premineAmount: params.premineAmount ?? 0n,\n _slippage: BigInt(Math.round(slippagePercent * 100)),\n _initialPriceParams: params.initialPriceParams,\n });\n }\n\n /**\n * Reads the PositionManager's fee calculators: whether creator vaults are\n * live (every launch must attach a vault) and which `feeCalculatorParams`\n * a launch without a vault sends.\n */\n async readLaunchCalculatorState(): Promise<LaunchCalculatorState> {\n const positionManager = FlaunchPositionManagerAddress[this.chainId];\n if (!positionManager) {\n return { vault: false, noVaultParams: NO_VAULT_FEE_CALCULATOR_PARAMS };\n }\n const contract = this.drift.contract({\n abi: FlaunchPositionManagerAbi,\n address: positionManager,\n });\n const vaultImplementation = DividendVaultAddress[this.chainId];\n const factory = TreasuryManagerFactoryAddress[this.chainId];\n const approval =\n vaultImplementation && factory\n ? {\n abi: TreasuryManagerFactoryAbi,\n address: factory,\n fn: \"approvedManagerImplementation\" as const,\n args: { _managerImplementation: vaultImplementation },\n }\n : undefined;\n // Safety reads, never served from the read cache: a stale answer here could launch a\n // token without a vault, or hand the creator NFT to an unapproved implementation\n await Promise.all([\n contract.cache.invalidateRead(\"feeCalculator\"),\n contract.cache.invalidateRead(\"fairLaunchFeeCalculator\"),\n approval ? this.drift.cache.invalidateRead(approval) : Promise.resolve(),\n ]);\n const [standard, fairLaunch, vaultApproved] = await Promise.all([\n contract.read(\"feeCalculator\"),\n contract.read(\"fairLaunchFeeCalculator\"),\n approval ? this.drift.read(approval) : Promise.resolve(false),\n ]);\n return launchCalculatorState({\n standard,\n fairLaunch,\n vaultCalculator: HolderShareFeeCalculatorAddress[this.chainId],\n vaultImplementation,\n vaultApproved,\n });\n }\n}\n\n/**\n * Extended client for interacting with the FlaunchZap contract with write capabilities\n */\nexport class ReadWriteFlaunchZap extends ReadFlaunchZap {\n declare contract: ReadWriteContract<FlaunchZapABI>;\n\n constructor(\n chainId: number,\n address: Address,\n drift: Drift<ReadWriteAdapter> = createDrift()\n ) {\n super(chainId, address, drift);\n }\n\n /**\n * Flaunches a new token: creates the coin, its pool, locked liquidity, the\n * fair launch (if any), and the creator revenue stream in one transaction\n * @param params - Parameters for the flaunch\n * @returns Transaction response for the flaunch creation\n */\n async flaunch(params: FlaunchParams) {\n const vaultImplementation = DividendVaultAddress[this.chainId];\n const manager = params.treasuryManagerParams?.manager;\n const state = await this.readLaunchCalculatorState();\n if (\n vaultImplementation &&\n manager &&\n isAddressEqual(manager, vaultImplementation)\n ) {\n // A hand-built vault launch registers at the minimum fee, and only while\n // vaults are live with the implementation approved (see flaunchWithVault)\n if (!state.vault) {\n throw new Error(\n \"Creator vaults are not live on this chain: a vault launch now would lose its fee or its vault\"\n );\n }\n return this.writeFlaunch(params, \"0x\");\n }\n if (state.vault) {\n throw new Error(\n \"Creator vaults are live on this chain: launch with flaunchWithVault. A launch without a vault could never trade.\"\n );\n }\n return this.writeFlaunch(params, state.noVaultParams);\n }\n\n /**\n * Flaunches a token whose creator NFT goes into a DividendVault: holders of\n * the token earn `holderSharePercent` of the creator's earnings in USDC,\n * and the trading fee is `feePercent`. Both are permanent, as is the split.\n * The creator side of the fee must stay at 90% or more (buyback 0-10%).\n * @returns Transaction response for the flaunch creation\n */\n async flaunchWithVault(params: FlaunchWithVaultParams) {\n const vaultImplementation = DividendVaultAddress[this.chainId];\n if (!vaultImplementation) {\n throw new Error(\"Creator vaults are not deployed on this chain\");\n }\n const fee = percentToVaultBps(params.feePercent ?? 1.5, \"feePercent\");\n if (fee < VAULT_MIN_FEE || fee > VAULT_MAX_FEE) {\n throw new Error(\n `feePercent must be between ${VAULT_MIN_FEE / 100} and ${VAULT_MAX_FEE / 100}, got ${params.feePercent}`\n );\n }\n const holderShare = percentToVaultBps(\n params.holderSharePercent ?? 16.67,\n \"holderSharePercent\"\n );\n if (holderShare < VAULT_MIN_HOLDER_SHARE || holderShare > VAULT_SHARE_DENOMINATOR) {\n throw new Error(\n `holderSharePercent must be between ${VAULT_MIN_HOLDER_SHARE / 100} and 100, got ${params.holderSharePercent}`\n );\n }\n if (params.creatorFeeAllocationPercent < VAULT_MIN_CREATOR_ALLOCATION_PERCENT) {\n throw new Error(\n `creatorFeeAllocationPercent must be at least ${VAULT_MIN_CREATOR_ALLOCATION_PERCENT} with a creator vault (buyback 0-10%), got ${params.creatorFeeAllocationPercent}`\n );\n }\n const receivers = params.splitReceivers ?? [];\n if (receivers.length > VAULT_MAX_SPLIT_RECEIVERS) {\n throw new Error(\n `At most ${VAULT_MAX_SPLIT_RECEIVERS} splitReceivers besides the creator`\n );\n }\n const seen = [params.creator];\n for (const receiver of receivers) {\n if (\n isAddressEqual(receiver.address, zeroAddress) ||\n seen.some((address) => isAddressEqual(address, receiver.address))\n ) {\n throw new Error(\n `splitReceivers must be distinct, non-zero and not the creator: ${receiver.address}`\n );\n }\n seen.push(receiver.address);\n }\n // Before activation the fee would be ignored for good (the pool never registers), and an\n // unapproved implementation would receive the NFT itself: launch only while vaults are live\n const state = await this.readLaunchCalculatorState();\n if (!state.vault) {\n throw new Error(\n \"Creator vaults are not live on this chain yet: a vault launch now would lose its fee or its vault\"\n );\n }\n const initializeData = encodeVaultInitializeData({\n holderShare,\n receivers: receivers.map((receiver) => ({\n address: receiver.address,\n bps: percentToVaultBps(receiver.percent, \"splitReceiver percent\"),\n })),\n creator: params.creator,\n });\n\n return this.writeFlaunch(\n {\n ...params,\n treasuryManagerParams: {\n manager: vaultImplementation,\n initializeData,\n depositData: \"0x\",\n },\n },\n vaultFeeCalculatorParams(fee)\n );\n }\n\n /**\n * Flaunches a vault token, pinning the token metadata through the ubi.fun\n * API first. To host the metadata yourself, call `flaunchWithVault({ tokenUri })`.\n */\n async flaunchIPFSWithVault(params: FlaunchWithVaultIPFSParams) {\n const tokenUri = await generateTokenUri(params.name, params.symbol, {\n chainId: this.chainId,\n metadata: params.metadata,\n });\n\n return this.flaunchWithVault({\n ...params,\n tokenUri,\n });\n }\n\n private async writeFlaunch(params: FlaunchParams, feeCalculatorParams: HexString) {\n if (params.fairLaunchPercent < 0 || params.fairLaunchPercent > 95) {\n throw new Error(\"fairLaunchPercent must be between 0 and 95\");\n }\n if (\n !Number.isFinite(params.creatorFeeAllocationPercent) ||\n params.creatorFeeAllocationPercent < 0 ||\n params.creatorFeeAllocationPercent > 100\n ) {\n throw new Error(\n `creatorFeeAllocationPercent must be between 0 and 100, got ${params.creatorFeeAllocationPercent}`\n );\n }\n if (params.fairLaunchPercent > 0 && params.fairLaunchDuration <= 0) {\n throw new Error(\n \"fairLaunchDuration (seconds) is required when fairLaunchPercent > 0\"\n );\n }\n\n const initialMCapInUSDCWei = parseUnits(\n params.initialMarketCapUSD.toString(),\n 6\n );\n const initialPriceParams = encodeAbiParameters(\n [\n {\n type: \"uint256\",\n },\n ],\n [initialMCapInUSDCWei]\n );\n\n const fairLaunchInBps = BigInt(Math.round(params.fairLaunchPercent * 100));\n const creatorFeeAllocationInBps = Math.round(\n params.creatorFeeAllocationPercent * 100\n );\n\n const value = await this.valueRequiredToFlaunch({\n premineAmount: params.premineAmount ?? 0n,\n initialPriceParams,\n slippagePercent: params.premineAmount ? 5 : 0,\n });\n\n const treasuryManagerParams = {\n manager: params.treasuryManagerParams?.manager ?? zeroAddress,\n permissions: params.treasuryManagerParams?.permissions ?? zeroAddress,\n initializeData: params.treasuryManagerParams?.initializeData ?? \"0x\",\n depositData: params.treasuryManagerParams?.depositData ?? \"0x\",\n };\n\n return this.contract.write(\n \"flaunch\",\n {\n _flaunchParams: {\n name: params.name,\n symbol: params.symbol,\n tokenUri: params.tokenUri,\n initialTokenFairLaunch:\n (this.TOTAL_SUPPLY * fairLaunchInBps) / 10_000n,\n fairLaunchDuration: BigInt(params.fairLaunchDuration),\n premineAmount: params.premineAmount ?? 0n,\n creator: params.creator,\n creatorFeeAllocation: creatorFeeAllocationInBps,\n flaunchAt: params.flaunchAt ?? 0n,\n initialPriceParams,\n feeCalculatorParams,\n },\n _trustedFeeSigner: zeroAddress,\n _premineSwapHookData: referrerHookData(params.premineReferrer),\n _treasuryManagerParams: treasuryManagerParams,\n _whitelistParams: params.whitelistParams ?? {\n merkleRoot: zeroHash,\n merkleIPFSHash: \"\",\n maxTokens: 0n,\n },\n _airdropParams: params.airdropParams ?? {\n airdropIndex: 0n,\n airdropAmount: 0n,\n airdropEndTime: 0n,\n merkleRoot: zeroHash,\n merkleIPFSHash: \"\",\n },\n },\n {\n value,\n }\n );\n }\n\n /**\n * Flaunches a new token, first pinning the image + metadata through the\n * ubi.fun API to produce the tokenUri. To host the metadata yourself, pin\n * it however you like and call `flaunch({ tokenUri })` instead.\n */\n async flaunchIPFS(params: FlaunchIPFSParams) {\n const tokenUri = await generateTokenUri(params.name, params.symbol, {\n chainId: this.chainId,\n metadata: params.metadata,\n });\n\n return this.flaunch({\n ...params,\n tokenUri,\n });\n }\n\n /**\n * Flaunches a new token that splits the creator revenue between the creator\n * and a list of recipients through the approved AddressFeeSplitManager.\n * Shares are fixed at launch (5-decimal precision); the revenue NFT is\n * deposited into the manager escrow rather than staying in the creator's\n * wallet.\n *\n * Same layout the app uses: creatorShare/ownerShare are 0 and every payee is\n * a recipient row (the manager requires recipient shares to total exactly\n * 100%); the creator's row is the exact remainder after the listed\n * receivers, so rounding can never brick the launch.\n * @returns Transaction response for the flaunch creation\n */\n async flaunchWithSplitManager(params: FlaunchWithSplitManagerParams) {\n const VALID_SHARE_TOTAL = 100_00000n; // 100% at 5 decimals\n const toShare = (percent: number) => BigInt(Math.round(percent * 100000));\n\n const receiverShares = params.splitReceivers.map((receiver) => {\n if (\n !Number.isFinite(receiver.percent) ||\n receiver.percent <= 0 ||\n receiver.percent >= 100\n ) {\n throw new Error(\n `splitReceiver percent must be in (0, 100), got ${receiver.percent} for ${receiver.address}`\n );\n }\n return {\n recipient: receiver.address,\n share: toShare(receiver.percent),\n };\n });\n\n const totalReceiverShares = receiverShares.reduce(\n (acc, curr) => acc + curr.share,\n 0n\n );\n\n if (totalReceiverShares >= VALID_SHARE_TOTAL) {\n throw new Error(\n \"splitReceivers total 100% or more; the creator must keep a share\"\n );\n }\n\n const recipientShares = [\n // The creator receives the exact remainder to 100%.\n {\n recipient: params.creator,\n share: VALID_SHARE_TOTAL - totalReceiverShares,\n },\n ...receiverShares,\n ];\n\n const initializeData = encodeAbiParameters(\n [\n {\n type: \"tuple\",\n name: \"params\",\n components: [\n { type: \"uint256\", name: \"creatorShare\" },\n { type: \"uint256\", name: \"ownerShare\" },\n {\n type: \"tuple[]\",\n name: \"recipientShares\",\n components: [\n { type: \"address\", name: \"recipient\" },\n { type: \"uint256\", name: \"share\" },\n ],\n },\n ],\n },\n ],\n [\n {\n creatorShare: 0n,\n ownerShare: 0n,\n recipientShares,\n },\n ]\n );\n\n return this.flaunch({\n ...params,\n treasuryManagerParams: {\n manager: AddressFeeSplitManagerAddress[this.chainId],\n initializeData,\n depositData: \"0x\",\n },\n });\n }\n\n /**\n * Flaunches a new token that splits the creator fees to the creator and a\n * list of recipients, pinning the token metadata through the ubi.fun API\n * first. To host the metadata yourself, pin it however you like and call\n * `flaunchWithSplitManager({ tokenUri })` instead.\n * @returns Promise resolving to the transaction response for the flaunch creation\n */\n async flaunchIPFSWithSplitManager(params: FlaunchWithSplitManagerIPFSParams) {\n const tokenUri = await generateTokenUri(params.name, params.symbol, {\n chainId: this.chainId,\n metadata: params.metadata,\n });\n\n return this.flaunchWithSplitManager({\n ...params,\n tokenUri,\n });\n }\n}\n","// Generated from DividendVault.\n// Source artifact: DividendVault.sol/DividendVault.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const DividendVaultAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_treasuryManagerFactory\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_feeEscrowRegistry\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_buyBackAction\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_burnTokensAction\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"receive\",\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_RECIPIENTS\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MIN_HOLDER_SHARE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"SHARE_DENOMINATOR\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balances\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"burnTokensAction\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"buyBackAction\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"buyBackAndBurn\",\n \"inputs\": [\n {\n \"name\": \"_sqrtPriceLimitX96\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"spent_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"burned_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cashToken\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claim\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"amount_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"creatorClaimed\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"creatorCredited\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"deposit\",\n \"inputs\": [\n {\n \"name\": \"_flaunchToken\",\n \"type\": \"tuple\",\n \"internalType\": \"struct ITreasuryManager.FlaunchToken\",\n \"components\": [\n {\n \"name\": \"flaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"_creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"feeEscrowRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IFeeEscrowRegistry\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"harvest\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"received_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"holderShare\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialize\",\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialized\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isValidCreator\",\n \"inputs\": [\n {\n \"name\": \"_creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"managerOwner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"memecoin\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"permissions\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IManagerPermissions\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"recipientShare\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_share\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"recipients\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounce\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounced\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"rescue\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct ITreasuryManager.FlaunchToken\",\n \"components\": [\n {\n \"name\": \"flaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"pure\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setPermissions\",\n \"inputs\": [\n {\n \"name\": \"_permissions\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenId\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenTimelock\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_unlockedAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"totalCreatorClaimed\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"totalReceived\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"totalToCreators\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"totalToHolders\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferManagerOwnership\",\n \"inputs\": [\n {\n \"name\": \"_newManagerOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"treasuryManagerFactory\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract TreasuryManagerFactory\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"CreatorClaimed\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Harvested\",\n \"inputs\": [\n {\n \"name\": \"_received\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_toHolders\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_toCreators\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ManagerOwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"_previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PermissionsUpdated\",\n \"inputs\": [\n {\n \"name\": \"_permissions\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Renounced\",\n \"inputs\": [],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TreasuryBoughtBackAndBurned\",\n \"inputs\": [\n {\n \"name\": \"_spent\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_burned\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TreasuryEscrowed\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_owner\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TreasuryReclaimed\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TreasuryTimelocked\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_unlockedAt\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyHoldsToken\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"BidWallDisabled\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"FlaunchContractNotValid\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"HolderShareTooLow\",\n \"inputs\": [\n {\n \"name\": \"_holderShare\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidAction\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidCreator\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidRecipient\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidRecipientShares\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NftLocked\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoTokenHeld\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotManagerOwner\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Reentrancy\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TokenTimelocked\",\n \"inputs\": [\n {\n \"name\": \"_unlockedAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"UnknownFlaunchToken\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"UnsupportedToken\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type ReadWriteContract,\n type ReadWriteAdapter,\n createDrift,\n} from \"@delvtech/drift\";\nimport { DividendVaultAbi } from \"../abi/DividendVault\";\n\nexport type DividendVaultABI = typeof DividendVaultAbi;\n\n/**\n * Read client for a creator vault (DividendVault clone): it holds one token's\n * creator NFT forever and splits the creator side of its fees between the\n * token's holders and the creator recipients.\n */\nexport class ReadDividendVault {\n public readonly contract: ReadContract<DividendVaultABI>;\n\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n this.contract = drift.contract({ abi: DividendVaultAbi, address });\n }\n\n // Every read is fresh: an empty or uninitialized clone reports zero for memecoin and\n // holderShare until its first deposit, and renounced, managerOwner and balances change with\n // transactions.\n\n /** The token whose creator NFT this vault holds. */\n async memecoin() {\n await this.contract.cache.invalidateRead(\"memecoin\");\n return this.contract.read(\"memecoin\");\n }\n\n /** Holder share of what the vault receives, in 100_00 = 100% units. */\n async holderShare() {\n await this.contract.cache.invalidateRead(\"holderShare\");\n return this.contract.read(\"holderShare\");\n }\n\n /** Whether the whole creator side goes to holders for good. */\n async renounced() {\n await this.contract.cache.invalidateRead(\"renounced\");\n return this.contract.read(\"renounced\");\n }\n\n async managerOwner() {\n await this.contract.cache.invalidateRead(\"managerOwner\");\n return this.contract.read(\"managerOwner\");\n }\n\n /** USDC a creator recipient can claim now (after the latest harvest). */\n async balances(recipient: Address) {\n await this.contract.cache.invalidateRead(\"balances\", { _recipient: recipient });\n return this.contract.read(\"balances\", { _recipient: recipient });\n }\n}\n\n/** Write client for a creator vault. */\nexport class ReadWriteDividendVault extends ReadDividendVault {\n declare contract: ReadWriteContract<DividendVaultABI>;\n\n constructor(address: Address, drift: Drift<ReadWriteAdapter> = createDrift()) {\n super(address, drift);\n }\n\n /** Moves the vault's fees in and splits them (holders' part drips over 24 hours). Anyone can call. */\n harvest() {\n return this.contract.write(\"harvest\", {});\n }\n\n /** Pays the caller's creator credit. */\n claim() {\n return this.contract.write(\"claim\", {});\n }\n\n /** Manager owner only: every creator fee goes to holders from now on. Cannot be undone. */\n renounce() {\n return this.contract.write(\"renounce\", {});\n }\n}\n","// Generated from MemecoinDividends.\n// Source artifact: MemecoinDividends.sol/MemecoinDividends.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const MemecoinDividendsAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"dividendToken_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"positionManager_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"poolManager_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"fairLaunch_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"bidWall_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"referralEscrow_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"feeEscrow_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"merkleAirdrop_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"snapshotAirdrop_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"CLOCK_MODE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"DOMAIN_SEPARATOR\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"DRIP_DURATION\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_BATCH\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MIN_ELIGIBLE_SUPPLY\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"accumulativeDividendOf\",\n \"inputs\": [\n {\n \"name\": \"_holder\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"allowance\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"approve\",\n \"inputs\": [\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balanceOf\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"burn\",\n \"inputs\": [\n {\n \"name\": \"value\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"burnFrom\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"value\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"checkpoints\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"pos\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct ERC20VotesUpgradeable.Checkpoint\",\n \"components\": [\n {\n \"name\": \"fromBlock\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"votes\",\n \"type\": \"uint224\",\n \"internalType\": \"uint224\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"clock\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint48\",\n \"internalType\": \"uint48\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"creator\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"creator_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"decimals\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"decreaseAllowance\",\n \"inputs\": [\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"subtractedValue\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"delegate\",\n \"inputs\": [\n {\n \"name\": \"delegatee\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"delegateBySig\",\n \"inputs\": [\n {\n \"name\": \"delegatee\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"expiry\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"v\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"r\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"delegates\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"distributeDividends\",\n \"inputs\": [\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"distributeUnaccounted\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"dividendToken\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"dividendsDripping\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"drip\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"remaining\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n },\n {\n \"name\": \"end\",\n \"type\": \"uint64\",\n \"internalType\": \"uint64\"\n },\n {\n \"name\": \"last\",\n \"type\": \"uint64\",\n \"internalType\": \"uint64\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"earnsDividends\",\n \"inputs\": [\n {\n \"name\": \"_account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"eip712Domain\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"fields\",\n \"type\": \"bytes1\",\n \"internalType\": \"bytes1\"\n },\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"version\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"chainId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"verifyingContract\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"extensions\",\n \"type\": \"uint256[]\",\n \"internalType\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"eligibleSupply\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunch\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getPastTotalSupply\",\n \"inputs\": [\n {\n \"name\": \"timepoint\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getPastVotes\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"timepoint\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getVotes\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"heldDividends\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"increaseAllowance\",\n \"inputs\": [\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"addedValue\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialize\",\n \"inputs\": [\n {\n \"name\": \"name_\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"symbol_\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"tokenUri_\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"magnifiedDividendPerShare\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"memecoinTreasury\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"mint\",\n \"inputs\": [\n {\n \"name\": \"_to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"name\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nonces\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"numCheckpoints\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"permit\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"value\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"v\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"r\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setMetadata\",\n \"inputs\": [\n {\n \"name\": \"name_\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"symbol_\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"supportsInterface\",\n \"inputs\": [\n {\n \"name\": \"_interfaceId\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"symbol\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenURI\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"totalDividendsDistributed\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"totalDividendsWithdrawn\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"totalSupply\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transfer\",\n \"inputs\": [\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferFrom\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"treasury\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address payable\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unaccountedDividends\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"version\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdrawDividend\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdrawDividendFor\",\n \"inputs\": [\n {\n \"name\": \"_holder\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amount_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdrawDividendsFor\",\n \"inputs\": [\n {\n \"name\": \"_holders\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"paid_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdrawableDividendOf\",\n \"inputs\": [\n {\n \"name\": \"_holder\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdrawnDividends\",\n \"inputs\": [\n {\n \"name\": \"_holder\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"Approval\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"value\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"DelegateChanged\",\n \"inputs\": [\n {\n \"name\": \"delegator\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"fromDelegate\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"toDelegate\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"DelegateVotesChanged\",\n \"inputs\": [\n {\n \"name\": \"delegate\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"previousBalance\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"newBalance\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"DividendWithdrawn\",\n \"inputs\": [\n {\n \"name\": \"_holder\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"DividendsDistributed\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"DividendsHeld\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"EIP712DomainChanged\",\n \"inputs\": [],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Initialized\",\n \"inputs\": [\n {\n \"name\": \"version\",\n \"type\": \"uint8\",\n \"indexed\": false,\n \"internalType\": \"uint8\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"MetadataUpdated\",\n \"inputs\": [\n {\n \"name\": \"_name\",\n \"type\": \"string\",\n \"indexed\": false,\n \"internalType\": \"string\"\n },\n {\n \"name\": \"_symbol\",\n \"type\": \"string\",\n \"indexed\": false,\n \"internalType\": \"string\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Transfer\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"value\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"BatchTooLarge\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CallerNotFlaunch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"MintAddressIsZero\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Permit2AllowanceIsFixedAtInfinity\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"PoolManagerUnlocked\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Reentrancy\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type ReadWriteContract,\n type ReadWriteAdapter,\n createDrift,\n} from \"@delvtech/drift\";\nimport { MemecoinDividendsAbi } from \"../abi/MemecoinDividends\";\n\nexport type MemecoinDividendsABI = typeof MemecoinDividendsAbi;\n\n/** Read client for the holder dividends of a creator vault token (6-decimal USDC amounts). */\nexport class ReadMemecoinDividends {\n public readonly contract: ReadContract<MemecoinDividendsABI>;\n\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n this.contract = drift.contract({ abi: MemecoinDividendsAbi, address });\n }\n\n // These figures change every block (drip) and with every withdrawal, so they are read fresh\n // rather than from the read cache.\n\n /** USDC the holder can withdraw now. */\n async withdrawableDividendOf(holder: Address) {\n await this.contract.cache.invalidateRead(\"withdrawableDividendOf\", { _holder: holder });\n return this.contract.read(\"withdrawableDividendOf\", { _holder: holder });\n }\n\n /** USDC still dripping out over the current 24-hour window. */\n async dividendsDripping() {\n await this.contract.cache.invalidateRead(\"dividendsDripping\");\n return this.contract.read(\"dividendsDripping\");\n }\n\n /** USDC committed to holders so far, still dripping included. */\n async totalDividendsDistributed() {\n await this.contract.cache.invalidateRead(\"totalDividendsDistributed\");\n return this.contract.read(\"totalDividendsDistributed\");\n }\n}\n\n/** Write client for the holder dividends of a creator vault token. */\nexport class ReadWriteMemecoinDividends extends ReadMemecoinDividends {\n declare contract: ReadWriteContract<MemecoinDividendsABI>;\n\n constructor(address: Address, drift: Drift<ReadWriteAdapter> = createDrift()) {\n super(address, drift);\n }\n\n /** Withdraws the caller's dividends. */\n withdrawDividend() {\n return this.contract.write(\"withdrawDividend\", {});\n }\n\n /** Pays a holder their dividends (anyone can call; the USDC always goes to the holder). */\n withdrawDividendFor(holder: Address) {\n return this.contract.write(\"withdrawDividendFor\", { _holder: holder });\n }\n}\n","// Generated from Flaunch (ERC721 revenue stream).\n// Source artifact: Flaunch.sol/Flaunch.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const FlaunchAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_memecoinImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_baseURI\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_CREATOR_ALLOCATION\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_FAIR_LAUNCH_TOKENS\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_SCHEDULE_DURATION\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"approve\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balanceOf\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"baseURI\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"burn\",\n \"inputs\": [\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeOwnershipHandover\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunch\",\n \"inputs\": [\n {\n \"name\": \"_params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PositionManager.FlaunchParams\",\n \"components\": [\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"symbol\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"tokenUri\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"initialTokenFairLaunch\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"fairLaunchDuration\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"premineAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"creatorFeeAllocation\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"flaunchAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"initialPriceParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"feeCalculatorParams\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"memecoin_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"memecoinTreasury_\",\n \"type\": \"address\",\n \"internalType\": \"address payable\"\n },\n {\n \"name\": \"tokenId_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getApproved\",\n \"inputs\": [\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialize\",\n \"inputs\": [\n {\n \"name\": \"_positionManager\",\n \"type\": \"address\",\n \"internalType\": \"contract PositionManager\"\n },\n {\n \"name\": \"_memecoinTreasuryImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isApprovedForAll\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"memecoin\",\n \"inputs\": [\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"memecoinImplementation\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"memecoinTreasury\",\n \"inputs\": [\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address payable\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"memecoinTreasuryImplementation\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"name\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nextTokenId\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownerOf\",\n \"inputs\": [\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownershipHandoverExpiresAt\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolId\",\n \"inputs\": [\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"positionManager\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract PositionManager\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"requestOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"safeTransferFrom\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"safeTransferFrom\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setApprovalForAll\",\n \"inputs\": [\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"isApproved\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setBaseURI\",\n \"inputs\": [\n {\n \"name\": \"_baseURI\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setMemecoinImplementation\",\n \"inputs\": [\n {\n \"name\": \"_memecoinImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setMemecoinMetadata\",\n \"inputs\": [\n {\n \"name\": \"_memecoin\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"name_\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"symbol_\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setMemecoinTreasuryImplementation\",\n \"inputs\": [\n {\n \"name\": \"_memecoinTreasuryImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"supportsInterface\",\n \"inputs\": [\n {\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"symbol\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenId\",\n \"inputs\": [\n {\n \"name\": \"_memecoin\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenURI\",\n \"inputs\": [\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferFrom\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"Approval\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ApprovalForAll\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"isApproved\",\n \"type\": \"bool\",\n \"indexed\": false,\n \"internalType\": \"bool\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BaseURIUpdated\",\n \"inputs\": [\n {\n \"name\": \"_newBaseURI\",\n \"type\": \"string\",\n \"indexed\": false,\n \"internalType\": \"string\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Initialized\",\n \"inputs\": [\n {\n \"name\": \"version\",\n \"type\": \"uint64\",\n \"indexed\": false,\n \"internalType\": \"uint64\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"MemecoinImplementationUpdated\",\n \"inputs\": [\n {\n \"name\": \"_newImplementation\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"MemecoinTreasuryImplementationUpdated\",\n \"inputs\": [\n {\n \"name\": \"_newImplementation\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverCanceled\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverRequested\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"oldOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Transfer\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"id\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AccountBalanceOverflow\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"BalanceQueryForZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CallerIsNotPositionManager\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CreatorFeeAllocationInvalid\",\n \"inputs\": [\n {\n \"name\": \"_allocation\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"_maxAllocation\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidFlaunchSchedule\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidInitialSupply\",\n \"inputs\": [\n {\n \"name\": \"_initialSupply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidInitialization\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NewOwnerIsZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoHandoverRequest\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotInitializing\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotOwnerNorApproved\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"PremineExceedsInitialAmount\",\n \"inputs\": [\n {\n \"name\": \"_buyAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_initialSupply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"TokenAlreadyExists\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TokenDoesNotExist\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TransferFromIncorrectOwner\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TransferToNonERC721ReceiverImplementer\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TransferToZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Unauthorized\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type EventLog,\n type ReadWriteContract,\n type ReadWriteAdapter,\n type HexString,\n createDrift,\n} from \"@delvtech/drift\";\nimport { FlaunchAbi } from \"../abi/Flaunch\";\n\nexport type FlaunchABI = typeof FlaunchAbi;\n\n/**\n * Client for interacting with the Flaunch V1 contract in read-only mode\n * Provides methods to query token IDs and metadata URIs\n */\nexport class ReadFlaunch {\n public readonly contract: ReadContract<FlaunchABI>;\n\n /**\n * Creates a new ReadFlaunch instance\n * @param address - The address of the Flaunch contract\n * @param drift - Optional drift instance for contract interactions (creates new instance if not provided)\n * @throws Error if address is not provided\n */\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: FlaunchAbi,\n address,\n });\n }\n\n /**\n * Gets the token ID associated with a memecoin\n * @param coinAddress - The address of the memecoin\n * @returns Promise<bigint> - The token ID\n */\n tokenId(coinAddress: Address) {\n return this.contract.read(\"tokenId\", {\n _memecoin: coinAddress,\n });\n }\n\n /**\n * Gets the metadata URI for a token\n * @param tokenId - The ID of the token\n * @returns Promise<string> - The token's metadata URI\n */\n tokenURI(tokenId: bigint) {\n return this.contract.read(\"tokenURI\", {\n _tokenId: tokenId,\n });\n }\n\n /**\n * Gets the memecoin address for a given token ID\n * @param tokenId - The ID of the token\n * @returns Promise<Address> - The address of the memecoin\n */\n memecoin(tokenId: bigint) {\n return this.contract.read(\"memecoin\", {\n _tokenId: tokenId,\n });\n }\n}\n","// Generated from Memecoin (ERC20).\n// Source artifact: Memecoin.sol/Memecoin.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const MemecoinAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"CLOCK_MODE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"DOMAIN_SEPARATOR\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"allowance\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"approve\",\n \"inputs\": [\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balanceOf\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"burn\",\n \"inputs\": [\n {\n \"name\": \"value\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"burnFrom\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"value\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"checkpoints\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"pos\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct ERC20VotesUpgradeable.Checkpoint\",\n \"components\": [\n {\n \"name\": \"fromBlock\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"votes\",\n \"type\": \"uint224\",\n \"internalType\": \"uint224\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"clock\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint48\",\n \"internalType\": \"uint48\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"creator\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"creator_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"decimals\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"decreaseAllowance\",\n \"inputs\": [\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"subtractedValue\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"delegate\",\n \"inputs\": [\n {\n \"name\": \"delegatee\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"delegateBySig\",\n \"inputs\": [\n {\n \"name\": \"delegatee\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"expiry\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"v\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"r\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"delegates\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"eip712Domain\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"fields\",\n \"type\": \"bytes1\",\n \"internalType\": \"bytes1\"\n },\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"version\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"chainId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"verifyingContract\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"extensions\",\n \"type\": \"uint256[]\",\n \"internalType\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunch\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getPastTotalSupply\",\n \"inputs\": [\n {\n \"name\": \"timepoint\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getPastVotes\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"timepoint\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getVotes\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"increaseAllowance\",\n \"inputs\": [\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"addedValue\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialize\",\n \"inputs\": [\n {\n \"name\": \"name_\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"symbol_\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"tokenUri_\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"mint\",\n \"inputs\": [\n {\n \"name\": \"_to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"name\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nonces\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"numCheckpoints\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"permit\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"value\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"v\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"r\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setMetadata\",\n \"inputs\": [\n {\n \"name\": \"name_\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"symbol_\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"supportsInterface\",\n \"inputs\": [\n {\n \"name\": \"_interfaceId\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"symbol\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenURI\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"totalSupply\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transfer\",\n \"inputs\": [\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferFrom\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"treasury\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address payable\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"version\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"Approval\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"value\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"DelegateChanged\",\n \"inputs\": [\n {\n \"name\": \"delegator\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"fromDelegate\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"toDelegate\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"DelegateVotesChanged\",\n \"inputs\": [\n {\n \"name\": \"delegate\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"previousBalance\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"newBalance\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"EIP712DomainChanged\",\n \"inputs\": [],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Initialized\",\n \"inputs\": [\n {\n \"name\": \"version\",\n \"type\": \"uint8\",\n \"indexed\": false,\n \"internalType\": \"uint8\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"MetadataUpdated\",\n \"inputs\": [\n {\n \"name\": \"_name\",\n \"type\": \"string\",\n \"indexed\": false,\n \"internalType\": \"string\"\n },\n {\n \"name\": \"_symbol\",\n \"type\": \"string\",\n \"indexed\": false,\n \"internalType\": \"string\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Transfer\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"value\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"CallerNotFlaunch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"MintAddressIsZero\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Permit2AllowanceIsFixedAtInfinity\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type EventLog,\n type ReadWriteContract,\n type ReadWriteAdapter,\n type HexString,\n createDrift,\n} from \"@delvtech/drift\";\nimport { MemecoinAbi } from \"../abi/Memecoin\";\n\nexport type MemecoinABI = typeof MemecoinAbi;\n\n/**\n * Client for interacting with Memecoin (ERC20) contracts in read-only mode\n * Provides methods to query basic token information and balances\n */\nexport class ReadMemecoin {\n public readonly contract: ReadContract<MemecoinABI>;\n\n /**\n * Creates a new ReadMemecoin instance\n * @param address - The address of the Memecoin contract\n * @param drift - Optional drift instance for contract interactions (creates new instance if not provided)\n * @throws Error if address is not provided\n */\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: MemecoinAbi,\n address,\n });\n }\n\n /**\n * Gets the name of the token\n * @returns Promise<string> - The name of the token\n */\n name() {\n return this.contract.read(\"name\", {});\n }\n\n /**\n * Gets the symbol of the token\n * @returns Promise<string> - The symbol of the token\n */\n symbol() {\n return this.contract.read(\"symbol\");\n }\n\n /**\n * Gets the token URI containing metadata\n * @returns Promise<string> - The token URI\n */\n tokenURI() {\n return this.contract.read(\"tokenURI\");\n }\n\n /**\n * Gets the decimals of the token\n * @returns Promise<number> - The decimals of the token\n */\n decimals() {\n return this.contract.read(\"decimals\");\n }\n\n /**\n * Gets the total supply of the token\n * @returns Promise<bigint> - The total supply\n */\n totalSupply() {\n return this.contract.read(\"totalSupply\");\n }\n\n /**\n * Gets the token balance of a specific user\n * @param user - The address of the user to check\n * @returns Promise<bigint> - The token balance\n */\n balanceOf(user: Address) {\n return this.contract.read(\"balanceOf\", {\n account: user,\n });\n }\n\n /**\n * Gets the allowance of an ERC20 token to a spender\n * @param owner - The address of the owner to check\n * @param spender - The address of the spender to check\n * @returns Promise<bigint> - The allowance of the coin to the spender\n */\n allowance(owner: Address, spender: Address) {\n return this.contract.read(\"allowance\", {\n owner,\n spender,\n });\n }\n}\n\nexport class ReadWriteMemecoin extends ReadMemecoin {\n declare contract: ReadWriteContract<MemecoinABI>;\n\n constructor(address: Address, drift: Drift = createDrift()) {\n super(address, drift);\n }\n\n /**\n * Approves an amount of the token to be spent by another address\n * @param spender - The address of the spender to approve\n * @param amount - The amount of the token to approve\n * @returns Promise<void> - The transaction receipt\n */\n approve(spender: Address, amount: bigint) {\n return this.contract.write(\"approve\", {\n spender,\n amount,\n });\n }\n}\n","// Generated from Uniswap V4Quoter.\n// Source artifact: V4Quoter.sol/V4Quoter.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const QuoterAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_poolManager\",\n \"type\": \"address\",\n \"internalType\": \"contract IPoolManager\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"_quoteExactInput\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IV4Quoter.QuoteExactParams\",\n \"components\": [\n {\n \"name\": \"exactCurrency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"path\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct PathKey[]\",\n \"components\": [\n {\n \"name\": \"intermediateCurrency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"exactAmount\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"_quoteExactInputSingle\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IV4Quoter.QuoteExactSingleParams\",\n \"components\": [\n {\n \"name\": \"poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"zeroForOne\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"exactAmount\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"_quoteExactOutput\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IV4Quoter.QuoteExactParams\",\n \"components\": [\n {\n \"name\": \"exactCurrency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"path\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct PathKey[]\",\n \"components\": [\n {\n \"name\": \"intermediateCurrency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"exactAmount\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"_quoteExactOutputSingle\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IV4Quoter.QuoteExactSingleParams\",\n \"components\": [\n {\n \"name\": \"poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"zeroForOne\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"exactAmount\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolManager\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IPoolManager\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"quoteExactInput\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IV4Quoter.QuoteExactParams\",\n \"components\": [\n {\n \"name\": \"exactCurrency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"path\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct PathKey[]\",\n \"components\": [\n {\n \"name\": \"intermediateCurrency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"exactAmount\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amountOut\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"quoteExactInputSingle\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IV4Quoter.QuoteExactSingleParams\",\n \"components\": [\n {\n \"name\": \"poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"zeroForOne\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"exactAmount\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amountOut\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"quoteExactOutput\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IV4Quoter.QuoteExactParams\",\n \"components\": [\n {\n \"name\": \"exactCurrency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"path\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct PathKey[]\",\n \"components\": [\n {\n \"name\": \"intermediateCurrency\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"exactAmount\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amountIn\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"quoteExactOutputSingle\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IV4Quoter.QuoteExactSingleParams\",\n \"components\": [\n {\n \"name\": \"poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"zeroForOne\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"exactAmount\",\n \"type\": \"uint128\",\n \"internalType\": \"uint128\"\n },\n {\n \"name\": \"hookData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amountIn\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"gasEstimate\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unlockCallback\",\n \"inputs\": [\n {\n \"name\": \"data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"error\",\n \"name\": \"NotEnoughLiquidity\",\n \"inputs\": [\n {\n \"name\": \"poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"NotPoolManager\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotSelf\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"QuoteSwap\",\n \"inputs\": [\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"UnexpectedCallSuccess\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"UnexpectedRevertBytes\",\n \"inputs\": [\n {\n \"name\": \"revertData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n createDrift,\n} from \"@delvtech/drift\";\nimport { QuoterAbi } from \"../abi/Quoter\";\nimport { coinPoolKey, referrerHookData, swapDirection } from \"../utils/swap\";\n\nexport type QuoterABI = typeof QuoterAbi;\n\n/**\n * Client for the Uniswap V4Quoter. Every ubi.fun pool is a single hop between\n * the coin and USDC (6 decimals) with the PositionManager as the hook, so all\n * quotes are quoteExactInputSingle / quoteExactOutputSingle calls.\n *\n * Pass the SAME referrer you will swap with: the hook data changes how the fee\n * is assigned, and a quote without it will not match execution.\n */\nexport class ReadQuoter {\n chainId: number;\n public readonly contract: ReadContract<QuoterABI>;\n\n constructor(chainId: number, address: Address, drift: Drift = createDrift()) {\n this.chainId = chainId;\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: QuoterAbi,\n address,\n });\n }\n\n /**\n * Quote for buying a coin with an exact amount of USDC\n * @param coinAddress - The coin to buy\n * @param amountIn - Exact USDC to spend (6 decimals)\n * @param positionManagerAddress - The PositionManager (pool hook)\n * @param referrer - Optional referrer address, must match the swap's referrer\n * @returns Promise<bigint> - Expected coins out (18 decimals)\n */\n async getBuyQuoteExactInput({\n coinAddress,\n amountIn,\n positionManagerAddress,\n referrer,\n }: {\n coinAddress: Address;\n amountIn: bigint;\n positionManagerAddress: Address;\n referrer?: Address;\n }) {\n const res = await this.contract.simulateWrite(\"quoteExactInputSingle\", {\n params: {\n poolKey: coinPoolKey(coinAddress, positionManagerAddress),\n zeroForOne: swapDirection(\"buy\", coinAddress),\n exactAmount: amountIn,\n hookData: referrerHookData(referrer),\n },\n });\n\n return res.amountOut;\n }\n\n /**\n * Quote for selling an exact amount of a coin for USDC\n * @param coinAddress - The coin to sell\n * @param amountIn - Exact coins to sell (18 decimals)\n * @param positionManagerAddress - The PositionManager (pool hook)\n * @param referrer - Optional referrer address, must match the swap's referrer\n * @returns Promise<bigint> - Expected USDC out (6 decimals)\n */\n async getSellQuoteExactInput({\n coinAddress,\n amountIn,\n positionManagerAddress,\n referrer,\n }: {\n coinAddress: Address;\n amountIn: bigint;\n positionManagerAddress: Address;\n referrer?: Address;\n }) {\n const res = await this.contract.simulateWrite(\"quoteExactInputSingle\", {\n params: {\n poolKey: coinPoolKey(coinAddress, positionManagerAddress),\n zeroForOne: swapDirection(\"sell\", coinAddress),\n exactAmount: amountIn,\n hookData: referrerHookData(referrer),\n },\n });\n\n return res.amountOut;\n }\n\n /**\n * Quote for buying an exact amount of a coin, answering the USDC required\n * @param coinAddress - The coin to buy\n * @param coinOut - Exact coins to receive (18 decimals)\n * @param positionManagerAddress - The PositionManager (pool hook)\n * @param referrer - Optional referrer address, must match the swap's referrer\n * @returns Promise<bigint> - Required USDC in (6 decimals)\n */\n async getBuyQuoteExactOutput({\n coinAddress,\n coinOut,\n positionManagerAddress,\n referrer,\n }: {\n coinAddress: Address;\n coinOut: bigint;\n positionManagerAddress: Address;\n referrer?: Address;\n }) {\n const res = await this.contract.simulateWrite(\"quoteExactOutputSingle\", {\n params: {\n poolKey: coinPoolKey(coinAddress, positionManagerAddress),\n zeroForOne: swapDirection(\"buy\", coinAddress),\n exactAmount: coinOut,\n hookData: referrerHookData(referrer),\n },\n });\n\n return res.amountIn;\n }\n}\n","// Generated from FeeEscrow.\n// Source artifact: FeeEscrow.sol/FeeEscrow.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const FeeEscrowAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_nativeToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_indexer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"receive\",\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"allocateFees\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balances\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeOwnershipHandover\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"indexer\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IndexerSubscriber\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nativeToken\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownershipHandoverExpiresAt\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"requestOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setIndexer\",\n \"inputs\": [\n {\n \"name\": \"_indexer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"totalFeesAllocated\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdrawFees\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_unwrap\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"Deposit\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_payee\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_token\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverCanceled\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverRequested\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"oldOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Withdrawal\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_token\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidRecipient\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NewOwnerIsZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoHandoverRequest\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"PoolIdNotIndexed\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"RecipientZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Unauthorized\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type ReadWriteContract,\n type ReadWriteAdapter,\n createDrift,\n} from \"@delvtech/drift\";\nimport { FeeEscrowAbi } from \"../abi/FeeEscrow\";\n\nexport type FeeEscrowABI = typeof FeeEscrowAbi;\n\n/**\n * Client for interacting with the FeeEscrow contract in read-only mode\n * Provides methods to query fee balances and withdraw fees\n */\nexport class ReadFeeEscrow {\n public readonly contract: ReadContract<FeeEscrowABI>;\n\n /**\n * Creates a new ReadFeeEscrow instance\n * @param address - The address of the FeeEscrow contract\n * @param drift - Optional drift instance for contract interactions (creates new instance if not provided)\n * @throws Error if address is not provided\n */\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: FeeEscrowAbi,\n address,\n });\n }\n\n /**\n * Gets the claimable balance of fees for a creator\n * @param creator - The address of the creator to check\n * @returns Promise<bigint> - The claimable balance of fees\n */\n balances(creator: Address) {\n return this.contract.read(\"balances\", {\n _recipient: creator,\n });\n }\n}\n\n/**\n * Extended client for interacting with the FeeEscrow contract with write capabilities\n * Provides methods to withdraw fees\n */\nexport class ReadWriteFeeEscrow extends ReadFeeEscrow {\n declare contract: ReadWriteContract<FeeEscrowABI>;\n\n constructor(\n address: Address,\n drift: Drift<ReadWriteAdapter> = createDrift()\n ) {\n super(address, drift);\n }\n\n /**\n * Withdraws the caller's accrued fees to a recipient as USDC.\n * @dev MUST be unwrap=false on Arc: unwrap=true calls a WETH-style\n * withdraw() that does not exist on the native USDC interface and the whole\n * claim would revert. The ERC20 IS the dollar.\n * @param recipient - The address to receive the fees\n * @returns Transaction response\n */\n withdrawFees(recipient: Address) {\n return this.contract.write(\"withdrawFees\", {\n _recipient: recipient,\n _unwrap: false,\n });\n }\n}\n","// Generated from ReferralEscrow.\n// Source artifact: ReferralEscrow.sol/ReferralEscrow.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const ReferralEscrowAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_nativeToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_protocolOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_unwrapNativeClaims\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"receive\",\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"allocations\",\n \"inputs\": [\n {\n \"name\": \"_user\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"assignTokens\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_user\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claimTokens\",\n \"inputs\": [\n {\n \"name\": \"_tokens\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address payable\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeOwnershipHandover\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getRoleAdmin\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"grantRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"hasRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nativeToken\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownershipHandoverExpiresAt\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolSwap\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract PoolSwap\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"callerConfirmation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"requestOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"revokeRole\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setPoolSwap\",\n \"inputs\": [\n {\n \"name\": \"_poolSwap\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"supportsInterface\",\n \"inputs\": [\n {\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\",\n \"internalType\": \"bytes4\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unwrapNativeClaims\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverCanceled\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverRequested\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"oldOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleAdminChanged\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleGranted\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RoleRevoked\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TokensAssigned\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_user\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TokensClaimed\",\n \"inputs\": [\n {\n \"name\": \"_user\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AccessControlBadConfirmation\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"AccessControlUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"neededRole\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"MismatchedTokensAndLimits\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NewOwnerIsZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoHandoverRequest\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotPositionManager\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Unauthorized\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type ReadWriteContract,\n type ReadWriteAdapter,\n createDrift,\n} from \"@delvtech/drift\";\nimport { ReferralEscrowAbi } from \"../abi/ReferralEscrow\";\n\nexport type ReferralEscrowABI = typeof ReferralEscrowAbi;\n\n/**\n * Client for interacting with the ReferralEscrow contract in read-only mode\n * Provides methods to query token allocations\n */\nexport class ReadReferralEscrow {\n public readonly contract: ReadContract<ReferralEscrowABI>;\n\n /**\n * Creates a new ReadReferralEscrow instance\n * @param address - The address of the ReferralEscrow contract\n * @param drift - Optional drift instance for contract interactions (creates new instance if not provided)\n * @throws Error if address is not provided\n */\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: ReferralEscrowAbi,\n address,\n });\n }\n\n /**\n * Gets the token allocation for a specific user and token\n * @param user - The address of the user to check\n * @param token - The address of the token\n * @returns Promise<bigint> - The allocated token amount\n */\n allocations(user: Address, token: Address) {\n return this.contract.read(\"allocations\", {\n _user: user,\n _token: token,\n });\n }\n}\n\n/**\n * Extended client for interacting with the ReferralEscrow contract with write capabilities\n * Provides methods to claim tokens\n */\nexport class ReadWriteReferralEscrow extends ReadReferralEscrow {\n declare contract: ReadWriteContract<ReferralEscrowABI>;\n\n constructor(\n address: Address,\n drift: Drift<ReadWriteAdapter> = createDrift()\n ) {\n super(address, drift);\n }\n\n /**\n * Claims tokens for a recipient\n * @param tokens - Array of token addresses to claim\n * @param recipient - The address to receive the claimed tokens\n * @returns Promise<void>\n */\n claimTokens(tokens: Address[], recipient: Address) {\n return this.contract.write(\"claimTokens\", {\n _tokens: tokens,\n _recipient: recipient,\n });\n }\n}\n","// Generated from PoolSwap (referrer-aware swap router).\n// Source artifact: PoolSwap.sol/PoolSwap.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\n// NOTE: the 2-arg and hookData swap overloads are stripped so drift name-keyed\n// calls resolve unambiguously; the SDK always swaps with an explicit referrer.\nexport const PoolSwapAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_manager\",\n \"type\": \"address\",\n \"internalType\": \"contract IPoolManager\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"manager\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IPoolManager\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"swap\",\n \"inputs\": [\n {\n \"name\": \"_key\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"_params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IPoolManager.SwapParams\",\n \"components\": [\n {\n \"name\": \"zeroForOne\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"amountSpecified\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ]\n },\n {\n \"name\": \"_referrer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"delta_\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n }\n ],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unlockCallback\",\n \"inputs\": [\n {\n \"name\": \"rawData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n }\n] as const;\n","import {\n type ReadContract,\n type ReadWriteContract,\n type ReadWriteAdapter,\n type Address,\n type Drift,\n createDrift,\n} from \"@delvtech/drift\";\nimport { zeroAddress } from \"viem\";\nimport { PoolSwapAbi } from \"../abi/PoolSwap\";\nimport { PoolKey } from \"../types\";\n\nexport type PoolSwapABI = typeof PoolSwapAbi;\n\n/**\n * Client for the PoolSwap contract, the supported way to trade ubi.fun pools:\n * unlike a generic v4 router it forwards a referrer to the hook, which assigns\n * that address 5% of the swap fee in the ReferralEscrow.\n *\n * Approve the input token to PoolSwap before swapping: USDC for buys, the coin\n * for sells. Amounts are USDC 6 decimals on the cash side and 18 decimals on\n * the coin side.\n */\nexport class ReadPoolSwap {\n public readonly contract: ReadContract<PoolSwapABI>;\n\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: PoolSwapAbi,\n address,\n });\n }\n}\n\nexport class ReadWritePoolSwap extends ReadPoolSwap {\n declare contract: ReadWriteContract<PoolSwapABI>;\n\n constructor(\n address: Address,\n drift: Drift<ReadWriteAdapter> = createDrift()\n ) {\n super(address, drift);\n }\n\n /**\n * Executes a swap against a ubi.fun pool\n * @param params.poolKey - The pool key (read it back with PositionManager.poolKey)\n * @param params.zeroForOne - v4 direction against the pool key ordering\n * @param params.amountSpecified - Negative for exact-in, positive for exact-out\n * @param params.sqrtPriceLimitX96 - Slippage bound on the pool price\n * @param params.referrer - Optional referrer credited with 5% of the swap fee\n * @returns Transaction response\n */\n swap(params: {\n poolKey: PoolKey;\n zeroForOne: boolean;\n amountSpecified: bigint;\n sqrtPriceLimitX96: bigint;\n referrer?: Address;\n }) {\n return this.contract.write(\"swap\", {\n _key: params.poolKey,\n _params: {\n zeroForOne: params.zeroForOne,\n amountSpecified: params.amountSpecified,\n sqrtPriceLimitX96: params.sqrtPriceLimitX96,\n },\n _referrer: params.referrer ?? zeroAddress,\n });\n }\n}\n","// Generated from XHandleClaims (X-handle earnings escrow registry).\n// Source artifact: XHandleClaims.sol/XHandleClaims.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const XHandleClaimsAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_usdc\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_signer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_protocolOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"bind\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"_wallet\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"bindNonce\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_nonce\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claim\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"_manager\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amount_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeOwnershipHandover\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"escrowAddress\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"escrowOf\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_escrow\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownershipHandoverExpiresAt\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"result\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"requestOwnershipHandover\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setSigner\",\n \"inputs\": [\n {\n \"name\": \"_signer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"signer\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"sweep\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"_token\",\n \"type\": \"address\",\n \"internalType\": \"contract IERC20\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amount_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"usdc\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IERC20\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"walletOf\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_wallet\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"EscrowDeployed\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"_escrow\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"HandleBound\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"_wallet\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_nonce\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"HandleClaimed\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"_wallet\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverCanceled\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipHandoverRequested\",\n \"inputs\": [\n {\n \"name\": \"pendingOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"oldOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"SignerUpdated\",\n \"inputs\": [\n {\n \"name\": \"_signer\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"DeadlineExpired\",\n \"inputs\": [\n {\n \"name\": \"_deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ECDSAInvalidSignature\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ECDSAInvalidSignatureLength\",\n \"inputs\": [\n {\n \"name\": \"length\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ECDSAInvalidSignatureS\",\n \"inputs\": [\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"HandleNotBound\",\n \"inputs\": [\n {\n \"name\": \"_handleHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidSignature\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NewOwnerIsZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoHandoverRequest\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Unauthorized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ZeroAddress\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type ReadWriteContract,\n type ReadWriteAdapter,\n type Address,\n type Drift,\n createDrift,\n} from \"@delvtech/drift\";\nimport { keccak256, stringToBytes, type Hex } from \"viem\";\nimport { XHandleClaimsAbi } from \"../abi/XHandleClaims\";\n\nexport type XHandleClaimsABI = typeof XHandleClaimsAbi;\n\n/** Allowed X handle shape, with or without the leading @. */\nexport const HANDLE_RE = /^@?[A-Za-z0-9_]{1,15}$/;\n\n/** Lowercase, no leading @. The canonical form links and hashes use. */\nexport function normalizeHandle(handle: string): string {\n return handle.trim().replace(/^@/, \"\").toLowerCase();\n}\n\n/**\n * keccak256 of the normalized handle: the on-chain key of the XHandleClaims\n * registry. Must match the app and backend (it does; same normalization).\n * Throws on anything outside HANDLE_RE: the OAuth backend only attests real X\n * usernames, so an escrow derived from an invalid handle could never be bound\n * and any revenue routed to it would be stuck forever.\n */\nexport function handleHashOf(handle: string): Hex {\n const trimmed = handle.trim();\n if (!HANDLE_RE.test(trimmed)) {\n throw new Error(\n `Invalid X handle \"${handle}\": expected 1-15 letters, digits or ` +\n `underscores, with an optional leading @`\n );\n }\n return keccak256(stringToBytes(normalizeHandle(trimmed)));\n}\n\n/**\n * Client for the XHandleClaims registry: launches can route earnings-split\n * shares to an X handle instead of an address. Each handle maps to a\n * deterministic CREATE2 escrow (predictable before deployment, so it can be a\n * split recipient at launch). The handle's owner proves control through the\n * ubi.fun X OAuth flow, which returns an attestation signature for `bind`;\n * after binding, `claim` pulls the escrowed USDC to the bound wallet.\n */\nexport class ReadXHandleClaims {\n public readonly contract: ReadContract<XHandleClaimsABI>;\n\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: XHandleClaimsAbi,\n address,\n });\n }\n\n /**\n * The deterministic escrow address for a handle, valid before the escrow is\n * deployed. Use this as a split recipient at launch time.\n */\n escrowAddress(handle: string) {\n return this.contract.read(\"escrowAddress\", {\n _handleHash: handleHashOf(handle),\n });\n }\n\n /** The wallet a handle is bound to (zero address if unbound). */\n boundWallet(handle: string) {\n return this.contract.read(\"walletOf\", {\n _handleHash: handleHashOf(handle),\n });\n }\n\n /** The current bind nonce for a handle (increments on each re-bind). */\n bindNonce(handle: string) {\n return this.contract.read(\"bindNonce\", {\n _handleHash: handleHashOf(handle),\n });\n }\n}\n\nexport class ReadWriteXHandleClaims extends ReadXHandleClaims {\n declare contract: ReadWriteContract<XHandleClaimsABI>;\n\n constructor(\n address: Address,\n drift: Drift<ReadWriteAdapter> = createDrift()\n ) {\n super(address, drift);\n }\n\n /**\n * Binds a handle to a wallet using the attestation from the ubi.fun X OAuth\n * flow (GET /auth/x/start on the API starts it; the callback returns this\n * signature). Anyone can submit the bind once signed.\n */\n bind(params: {\n handle: string;\n wallet: Address;\n deadline: bigint;\n signature: Hex;\n }) {\n return this.contract.write(\"bind\", {\n _handleHash: handleHashOf(params.handle),\n _wallet: params.wallet,\n _deadline: params.deadline,\n _signature: params.signature,\n });\n }\n\n /**\n * Claims a bound handle's share out of a launch's split manager and forwards\n * it to the bound wallet as USDC.\n * @param handle - The X handle\n * @param manager - The AddressFeeSplitManager instance holding the share\n */\n claim(handle: string, manager: Address) {\n return this.contract.write(\"claim\", {\n _handleHash: handleHashOf(handle),\n _manager: manager,\n });\n }\n\n /**\n * Sweeps a token balance sitting directly on the handle's escrow (e.g. USDC\n * sent to it outside a split manager) to the bound wallet.\n */\n sweep(handle: string, token: Address) {\n return this.contract.write(\"sweep\", {\n _handleHash: handleHashOf(handle),\n _token: token,\n });\n }\n}\n","// Generated from Morpho UniversalRewardsDistributor (daily USDC holder pool).\n// Source artifact: IUniversalRewardsDistributor.sol/IUniversalRewardsDistributor.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const UniversalRewardsDistributorAbi = [\n {\n \"type\": \"function\",\n \"name\": \"acceptRoot\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claim\",\n \"inputs\": [\n {\n \"name\": \"_account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_reward\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_claimable\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_proof\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claimed\",\n \"inputs\": [\n {\n \"name\": \"_account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_reward\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ipfsHash\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isUpdater\",\n \"inputs\": [\n {\n \"name\": \"_updater\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pendingRoot\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"root\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"ipfsHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"validAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"revokePendingRoot\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"root\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setOwner\",\n \"inputs\": [\n {\n \"name\": \"_newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setRoot\",\n \"inputs\": [\n {\n \"name\": \"_newRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"_newIpfsHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setRootUpdater\",\n \"inputs\": [\n {\n \"name\": \"_updater\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_active\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setTimelock\",\n \"inputs\": [\n {\n \"name\": \"_newTimelock\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"submitRoot\",\n \"inputs\": [\n {\n \"name\": \"_newRoot\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"_newIpfsHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"timelock\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n }\n] as const;\n","import {\n type ReadContract,\n type ReadWriteContract,\n type ReadWriteAdapter,\n type Address,\n type Drift,\n createDrift,\n} from \"@delvtech/drift\";\nimport { type Hex } from \"viem\";\nimport { UniversalRewardsDistributorAbi } from \"../abi/UniversalRewardsDistributor\";\n\nexport type UniversalRewardsDistributorABI =\n typeof UniversalRewardsDistributorAbi;\n\n/**\n * Client for Morpho's UniversalRewardsDistributor, which pays the daily USDC\n * holder pool (24% of every swap fee). Entitlements are cumulative amounts in\n * a Merkle root the keeper submits after each daily epoch; a root becomes\n * claimable after the on-chain timelock. Fetch an address's cumulative amount\n * and proof from the ubi.fun API (GET {apiUrl}/ubi/:address), then `claim`\n * pays out the difference between the cumulative amount and what was already\n * claimed.\n */\nexport class ReadUniversalRewardsDistributor {\n public readonly contract: ReadContract<UniversalRewardsDistributorABI>;\n\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: UniversalRewardsDistributorAbi,\n address,\n });\n }\n\n /** The active Merkle root claims are verified against. */\n root() {\n return this.contract.read(\"root\");\n }\n\n /** A submitted root still inside the timelock, if any. */\n pendingRoot() {\n return this.contract.read(\"pendingRoot\");\n }\n\n /** The cumulative amount `account` has already claimed of `reward`. */\n claimed(account: Address, reward: Address) {\n return this.contract.read(\"claimed\", {\n _account: account,\n _reward: reward,\n });\n }\n}\n\nexport class ReadWriteUniversalRewardsDistributor extends ReadUniversalRewardsDistributor {\n declare contract: ReadWriteContract<UniversalRewardsDistributorABI>;\n\n constructor(\n address: Address,\n drift: Drift<ReadWriteAdapter> = createDrift()\n ) {\n super(address, drift);\n }\n\n /**\n * Claims the outstanding balance for an account. Anyone can submit; the\n * payout always goes to `account`.\n * @param params.account - The holder being claimed for\n * @param params.reward - The reward token (USDC on Arc)\n * @param params.claimable - The CUMULATIVE entitlement from the API ledger\n * @param params.proof - The Merkle proof from the API ledger\n */\n claim(params: {\n account: Address;\n reward: Address;\n claimable: bigint;\n proof: Hex[];\n }) {\n return this.contract.write(\"claim\", {\n _account: params.account,\n _reward: params.reward,\n _claimable: params.claimable,\n _proof: params.proof,\n });\n }\n}\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type EventLog,\n type ReadWriteContract,\n type ReadWriteAdapter,\n type HexString,\n createDrift,\n} from \"@delvtech/drift\";\nimport {\n createPublicClient,\n type PublicClient,\n encodeAbiParameters,\n http,\n parseEventLogs,\n} from \"viem\";\nimport { TreasuryManagerFactoryAbi } from \"../abi/TreasuryManagerFactory\";\nimport { chainIdToChain } from \"../helpers/chainIdToChain\";\n\nexport type TreasuryManagerFactoryABI = typeof TreasuryManagerFactoryAbi;\n\nexport class ReadTreasuryManagerFactory {\n chainId: number;\n public readonly contract: ReadContract<TreasuryManagerFactoryABI>;\n public readonly publicClient: PublicClient | undefined;\n\n constructor(\n chainId: number,\n address: Address,\n drift: Drift = createDrift(),\n publicClient?: PublicClient\n ) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n this.contract = drift.contract({\n abi: TreasuryManagerFactoryAbi,\n address,\n });\n this.chainId = chainId;\n this.publicClient = publicClient;\n }\n\n async getManagerDeployedAddressFromTx(hash: HexString) {\n // Wait for transaction receipt\n if (!this.publicClient) {\n throw new Error(\"Public client is required\");\n }\n\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash });\n\n // Parse the ManagerDeployed event from receipt logs\n const parsedLogs = parseEventLogs({\n abi: TreasuryManagerFactoryAbi,\n eventName: \"ManagerDeployed\",\n logs: receipt.logs,\n });\n\n // Find the event from our transaction\n const event = parsedLogs.find(\n (log) => log.address.toLowerCase() === this.contract.address.toLowerCase()\n );\n if (!event) {\n throw new Error(\"ManagerDeployed event not found in transaction logs\");\n }\n\n return event.args._manager as Address;\n }\n}\n\nexport class ReadWriteTreasuryManagerFactory extends ReadTreasuryManagerFactory {\n declare contract: ReadWriteContract<TreasuryManagerFactoryABI>;\n\n constructor(\n chainId: number,\n address: Address,\n drift: Drift = createDrift(),\n publicClient?: PublicClient\n ) {\n super(chainId, address, drift, publicClient);\n }\n}\n","// Generated from TreasuryManager (abstract base of AddressFeeSplitManager).\n// Source artifact: TreasuryManager.sol/TreasuryManager.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const TreasuryManagerAbi = [\n {\n \"type\": \"receive\",\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balances\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amount_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claim\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"amount_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"deposit\",\n \"inputs\": [\n {\n \"name\": \"_flaunchToken\",\n \"type\": \"tuple\",\n \"internalType\": \"struct ITreasuryManager.FlaunchToken\",\n \"components\": [\n {\n \"name\": \"flaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"_creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"feeEscrowRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IFeeEscrowRegistry\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialize\",\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialized\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isValidCreator\",\n \"inputs\": [\n {\n \"name\": \"_creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"managerOwner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"permissions\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IManagerPermissions\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"rescue\",\n \"inputs\": [\n {\n \"name\": \"_flaunchToken\",\n \"type\": \"tuple\",\n \"internalType\": \"struct ITreasuryManager.FlaunchToken\",\n \"components\": [\n {\n \"name\": \"flaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setPermissions\",\n \"inputs\": [\n {\n \"name\": \"_permissions\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenTimelock\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_unlockedAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferManagerOwnership\",\n \"inputs\": [\n {\n \"name\": \"_newManagerOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"treasuryManagerFactory\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract TreasuryManagerFactory\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"ManagerOwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"_previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PermissionsUpdated\",\n \"inputs\": [\n {\n \"name\": \"_permissions\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TreasuryEscrowed\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_owner\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TreasuryReclaimed\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TreasuryTimelocked\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_unlockedAt\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"FlaunchContractNotValid\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidCreator\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotManagerOwner\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TokenTimelocked\",\n \"inputs\": [\n {\n \"name\": \"_unlockedAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"UnknownFlaunchToken\",\n \"inputs\": []\n }\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type ReadWriteContract,\n type ReadWriteAdapter,\n createDrift,\n} from \"@delvtech/drift\";\nimport { TreasuryManagerAbi } from \"../abi/TreasuryManager\";\n\nexport type TreasuryManagerABI = typeof TreasuryManagerAbi;\n\nexport type FlaunchToken = {\n flaunch: Address;\n tokenId: bigint;\n};\n\n/**\n * Client for interacting with the TreasuryManager contract in read-only mode\n * Provides methods to query permissions and manager owner\n */\nexport class ReadTreasuryManager {\n public readonly contract: ReadContract<TreasuryManagerABI>;\n\n /**\n * Creates a new ReadTreasuryManager instance\n * @param address - The address of the TreasuryManager contract\n * @param drift - Optional drift instance for contract interactions (creates new instance if not provided)\n * @throws Error if address is not provided\n */\n constructor(address: Address, drift: Drift = createDrift()) {\n if (!address) {\n throw new Error(\"Address is required\");\n }\n\n this.contract = drift.contract({\n abi: TreasuryManagerAbi,\n address,\n });\n }\n\n /**\n * Gets the permissions contract address\n * @returns Promise<Address> - The address of the permissions contract\n */\n permissions() {\n return this.contract.read(\"permissions\");\n }\n\n /**\n * Gets the manager owner address\n * @returns Promise<Address> - The address of the manager owner\n */\n managerOwner() {\n return this.contract.read(\"managerOwner\");\n }\n\n /**\n * Gets a recipient's claimable USDC balance inside this manager (e.g. a\n * split recipient's accrued share)\n * @param recipient - The address to check\n * @returns Promise<bigint> - The claimable balance (USDC, 6 decimals)\n */\n balances(recipient: Address) {\n return this.contract.read(\"balances\", {\n _recipient: recipient,\n });\n }\n}\n\n/**\n * Extended client for interacting with the TreasuryManager contract with write capabilities\n * Provides methods to deposit tokens, set permissions, and transfer ownership\n */\nexport class ReadWriteTreasuryManager extends ReadTreasuryManager {\n declare contract: ReadWriteContract<TreasuryManagerABI>;\n\n constructor(\n address: Address,\n drift: Drift<ReadWriteAdapter> = createDrift()\n ) {\n super(address, drift);\n }\n\n /**\n * Deposits a flaunch token to the treasury\n * @param flaunchToken - The flaunch token to deposit\n * @param creator - The address of the creator\n * @param data - Additional data for the deposit\n * @returns Promise<void>\n */\n deposit(flaunchToken: FlaunchToken, creator: Address, data: `0x${string}`) {\n return this.contract.write(\"deposit\", {\n _flaunchToken: flaunchToken,\n _creator: creator,\n _data: data,\n });\n }\n\n /**\n * Sets the permissions contract address\n * @param permissions - The address of the new permissions contract\n * @returns Promise<void>\n */\n setPermissions(permissions: Address) {\n return this.contract.write(\"setPermissions\", {\n _permissions: permissions,\n });\n }\n\n /**\n * Transfers the manager ownership to a new address\n * @param newManagerOwner - The address of the new manager owner\n * @returns Promise<void>\n */\n transferManagerOwnership(newManagerOwner: Address) {\n return this.contract.write(\"transferManagerOwnership\", {\n _newManagerOwner: newManagerOwner,\n });\n }\n\n /**\n * Claims the caller's accrued share from this manager, paid out as USDC\n * @returns Transaction response\n */\n claim() {\n return this.contract.write(\"claim\");\n }\n}\n","export const MulticallAbi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes[]\",\n name: \"returnData\",\n type: \"bytes[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"allowFailure\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call3[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate3\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"allowFailure\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call3Value[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate3Value\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"blockAndAggregate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"blockHash\",\n type: \"bytes32\",\n },\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBasefee\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"basefee\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n ],\n name: \"getBlockHash\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"blockHash\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBlockNumber\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getChainId\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"chainid\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockCoinbase\",\n outputs: [\n {\n internalType: \"address\",\n name: \"coinbase\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockDifficulty\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"difficulty\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockGasLimit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"gaslimit\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockTimestamp\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"timestamp\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"addr\",\n type: \"address\",\n },\n ],\n name: \"getEthBalance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"balance\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastBlockHash\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"blockHash\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"requireSuccess\",\n type: \"bool\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"tryAggregate\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"requireSuccess\",\n type: \"bool\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"tryBlockAndAggregate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"blockHash\",\n type: \"bytes32\",\n },\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n] as const;\n","import {\n type ReadContract,\n type Address,\n type Drift,\n type EventLog,\n type ReadWriteContract,\n type ReadWriteAdapter,\n type HexString,\n createDrift,\n} from \"@delvtech/drift\";\nimport { MulticallAbi } from \"../abi/Multicall\";\n\nexport type MulticallABI = typeof MulticallAbi;\n\nexport class ReadMulticall {\n // same address across all chains\n public readonly address: Address =\n \"0xcA11bde05977b3631167028862bE2a173976CA11\";\n\n public readonly contract: ReadContract<MulticallABI>;\n\n constructor(drift: Drift) {\n this.contract = drift.contract({\n abi: MulticallAbi,\n address: this.address,\n });\n }\n\n aggregate3(calls: { target: Address; callData: HexString }[]) {\n return this.contract.simulateWrite(\"aggregate3\", {\n calls: calls.map((call) => ({\n target: call.target,\n allowFailure: true,\n callData: call.callData,\n })),\n });\n }\n}\n","import {\n createDrift,\n Drift,\n ReadWriteAdapter,\n type Address,\n} from \"@delvtech/drift\";\nimport {\n type PublicClient,\n Hex,\n encodeAbiParameters,\n parseUnits,\n erc721Abi,\n formatUnits,\n decodeEventLog,\n isAddressEqual,\n zeroAddress,\n} from \"viem\";\nimport axios from \"axios\";\nimport {\n FlaunchPositionManagerAddress,\n PoolManagerAddress,\n NativeTokenAddress,\n USDC_ADDRESS,\n FairLaunchAddress,\n FlaunchZapAddress,\n FlaunchAddress,\n BidWallAddress,\n QuoterAddress,\n PoolSwapAddress,\n TreasuryManagerFactoryAddress,\n FeeEscrowAddress,\n ReferralEscrowAddress,\n XHandleClaimsAddress,\n UniversalRewardsDistributorAddress,\n IndexerSubscriberAddress,\n ApiBaseUrl,\n DividendVaultAddress,\n} from \"../addresses\";\nimport { ReadIndexerSubscriber } from \"../clients/IndexerSubscriberClient\";\nimport {\n ReadFlaunchPositionManager,\n WatchPoolCreatedParams,\n WatchPoolSwapParams as WatchPoolSwapParamsPositionManager,\n BuySwapLog,\n SellSwapLog,\n BaseSwapLog,\n} from \"../clients/FlaunchPositionManagerClient\";\nimport {\n ReadPoolManager,\n PositionInfoParams,\n} from \"../clients/PoolManagerClient\";\nimport { ReadFairLaunch } from \"../clients/FairLaunchClient\";\nimport { ReadBidWall } from \"../clients/BidWallClient\";\nimport {\n ReadFlaunchZap,\n ReadWriteFlaunchZap,\n FlaunchParams,\n FlaunchIPFSParams,\n FlaunchWithSplitManagerParams,\n FlaunchWithSplitManagerIPFSParams,\n FlaunchWithVaultParams,\n FlaunchWithVaultIPFSParams,\n} from \"../clients/FlaunchZapClient\";\nimport { ReadDividendVault, ReadWriteDividendVault } from \"../clients/DividendVaultClient\";\nimport {\n ReadMemecoinDividends,\n ReadWriteMemecoinDividends,\n} from \"../clients/MemecoinDividendsClient\";\nimport { TreasuryManagerFactoryAbi } from \"../abi/TreasuryManagerFactory\";\nimport { ReadFlaunch } from \"../clients/FlaunchClient\";\nimport { ReadMemecoin, ReadWriteMemecoin } from \"../clients/MemecoinClient\";\nimport { ReadQuoter } from \"../clients/QuoterClient\";\nimport { ReadFeeEscrow, ReadWriteFeeEscrow } from \"../clients/FeeEscrowClient\";\nimport {\n ReadReferralEscrow,\n ReadWriteReferralEscrow,\n} from \"../clients/ReferralEscrowClient\";\nimport { ReadWritePoolSwap } from \"../clients/PoolSwapClient\";\nimport {\n ReadXHandleClaims,\n ReadWriteXHandleClaims,\n} from \"../clients/XHandleClaimsClient\";\nimport {\n ReadUniversalRewardsDistributor,\n ReadWriteUniversalRewardsDistributor,\n} from \"../clients/UniversalRewardsDistributorClient\";\nimport { ReadWriteTreasuryManagerFactory } from \"../clients/TreasuryManagerFactoryClient\";\nimport {\n ReadTreasuryManager,\n ReadWriteTreasuryManager,\n} from \"../clients/TreasuryManagerClient\";\nimport { FlaunchPositionManagerAbi } from \"../abi/FlaunchPositionManager\";\nimport { CoinMetadata, PoolCreatedEventData } from \"../types\";\nimport {\n getPoolId,\n getValidTick,\n calculateUnderlyingTokenBalances,\n TickFinder,\n TICK_SPACING,\n} from \"../utils/univ4\";\nimport {\n coinPoolKey,\n usdcIsCurrencyZero,\n swapDirection,\n sqrtPriceLimit,\n expectedEndSqrtPriceX96,\n} from \"../utils/swap\";\nimport {\n resolveIPFS as defaultResolveIPFS,\n resolveIPFSCandidates,\n fetchTokenUriMetadataWithFallback,\n} from \"../helpers/ipfs\";\nimport { ReadMulticall } from \"../clients/MulticallClient\";\nimport { MemecoinAbi } from \"../abi\";\n\n// Re-export PoolCreatedEventData so it's available as part of the SDK module\nexport type { PoolCreatedEventData } from \"../types\";\n\ntype WatchPoolSwapParams = Omit<\n WatchPoolSwapParamsPositionManager<boolean>,\n \"usdcIsCurrencyZero\"\n> & {\n filterByCoin?: Address;\n};\n\n/** USDC (the cash side) has 6 decimals; every coin has 18. */\nconst USDC_DECIMALS = 6;\nconst COIN_DECIMALS = 18;\n\n/** An address's daily holder pool entitlement as served by the ubi.fun API. */\nexport interface UbiEntitlement {\n account?: string;\n /** CUMULATIVE lifetime entitlement in USDC wei (6 decimals). */\n cumulativeWei?: string;\n proof?: Hex[];\n status?: string;\n /** The ledger root this entitlement belongs to. */\n root?: string;\n [key: string]: unknown;\n}\n\n/**\n * Base class for interacting with the ubi.fun protocol in read-only mode\n */\nexport class ReadFlaunchSDK {\n public readonly drift: Drift;\n public readonly chainId: number;\n public readonly publicClient: PublicClient | undefined;\n public readonly TICK_SPACING = TICK_SPACING;\n public readonly readPositionManager: ReadFlaunchPositionManager;\n public readonly readFeeEscrow: ReadFeeEscrow;\n public readonly readReferralEscrow: ReadReferralEscrow;\n public readonly readFlaunchZap: ReadFlaunchZap;\n public readonly readPoolManager: ReadPoolManager;\n public readonly readFairLaunch: ReadFairLaunch;\n public readonly readBidWall: ReadBidWall;\n public readonly readFlaunch: ReadFlaunch;\n public readonly readQuoter: ReadQuoter;\n public readonly readXHandleClaims: ReadXHandleClaims;\n public readonly readUbiPool: ReadUniversalRewardsDistributor;\n public readonly readIndexerSubscriber: ReadIndexerSubscriber;\n\n public resolveIPFS: (value: string) => string;\n\n constructor(\n chainId: number,\n drift: Drift = createDrift(),\n publicClient?: PublicClient\n ) {\n this.chainId = chainId;\n this.drift = drift;\n this.publicClient = publicClient;\n this.resolveIPFS = defaultResolveIPFS;\n this.readPositionManager = new ReadFlaunchPositionManager(\n FlaunchPositionManagerAddress[this.chainId],\n drift\n );\n this.readFeeEscrow = new ReadFeeEscrow(\n FeeEscrowAddress[this.chainId],\n drift\n );\n this.readReferralEscrow = new ReadReferralEscrow(\n ReferralEscrowAddress[this.chainId],\n drift\n );\n this.readFlaunchZap = new ReadFlaunchZap(\n this.chainId,\n FlaunchZapAddress[this.chainId],\n drift\n );\n this.readPoolManager = new ReadPoolManager(\n PoolManagerAddress[this.chainId],\n drift\n );\n this.readFairLaunch = new ReadFairLaunch(\n FairLaunchAddress[this.chainId],\n drift\n );\n this.readBidWall = new ReadBidWall(BidWallAddress[this.chainId], drift);\n this.readFlaunch = new ReadFlaunch(FlaunchAddress[this.chainId], drift);\n this.readQuoter = new ReadQuoter(\n this.chainId,\n QuoterAddress[this.chainId],\n drift\n );\n this.readXHandleClaims = new ReadXHandleClaims(\n XHandleClaimsAddress[this.chainId],\n drift\n );\n this.readUbiPool = new ReadUniversalRewardsDistributor(\n UniversalRewardsDistributorAddress[this.chainId],\n drift\n );\n this.readIndexerSubscriber = new ReadIndexerSubscriber(\n IndexerSubscriberAddress[this.chainId],\n drift\n );\n }\n\n /**\n * Checks if a given coin address is a valid ubi.fun coin\n * @param coinAddress - The address of the coin to check\n * @returns Promise<boolean> - True if the coin is valid, false otherwise\n */\n isValidCoin(coinAddress: Address) {\n return this.readPositionManager.isValidCoin(coinAddress);\n }\n\n getPositionManagerAddress() {\n return this.readPositionManager.contract.address;\n }\n\n getFlaunchAddress() {\n return this.readFlaunch.contract.address;\n }\n\n getFairLaunchAddress() {\n return this.readFairLaunch.contract.address;\n }\n\n getBidWallAddress() {\n return this.readBidWall.contract.address;\n }\n\n /**\n * Gets the Flaunch NFT token ID for a memecoin (the NFT IS the revenue claim)\n * @param coinAddress - The address of the memecoin\n * @returns Promise<{ flaunchAddress: Address; tokenId: bigint }>\n */\n async getFlaunchTokenIdForMemecoin(\n coinAddress: Address\n ): Promise<{ flaunchAddress: Address; tokenId: bigint }> {\n const tokenId = await this.readFlaunch.tokenId(coinAddress);\n\n return {\n flaunchAddress: this.getFlaunchAddress(),\n tokenId,\n };\n }\n\n /**\n * URLs to try for a tokenURI, in order. With the default resolver an\n * ipfs:// URI fans out to every known public gateway; a custom resolver\n * from `setIPFSResolver` stays authoritative and yields exactly one URL.\n */\n private tokenUriCandidates(tokenURI: string): string[] {\n return this.resolveIPFS === defaultResolveIPFS\n ? resolveIPFSCandidates(tokenURI)\n : [this.resolveIPFS(tokenURI)];\n }\n\n /**\n * Retrieves metadata for a given coin\n * @param coinAddress - The address of the coin\n * @returns Promise<CoinMetadata & { symbol: string }> - The coin's metadata including name, symbol, description, and social links\n */\n async getCoinMetadata(\n coinAddress: Address\n ): Promise<CoinMetadata & { symbol: string }> {\n const memecoin = new ReadMemecoin(coinAddress, this.drift);\n const name = await memecoin.name();\n const symbol = await memecoin.symbol();\n const tokenURI = await memecoin.tokenURI();\n\n // get metadata from tokenURI\n const metadata = await fetchTokenUriMetadataWithFallback(\n this.tokenUriCandidates(tokenURI)\n );\n\n return {\n name,\n symbol,\n description: metadata.description ?? \"\",\n image: metadata.image ? this.resolveIPFS(metadata.image) : \"\",\n external_link: metadata.websiteUrl ?? metadata.website ?? \"\",\n collaborators: metadata.collaborators ?? [],\n discordUrl: metadata.discordUrl ?? \"\",\n twitterUrl: metadata.twitterUrl ?? metadata.twitter ?? \"\",\n telegramUrl: metadata.telegramUrl ?? metadata.telegram ?? \"\",\n };\n }\n\n /**\n * Retrieves metadata for a given coin using its token ID\n * @param flaunch - The address of the Flaunch contract\n * @param tokenId - The token ID of the coin\n * @returns The coin's metadata including name, symbol, description, and social links\n */\n async getCoinMetadataFromTokenId(\n flaunch: Address,\n tokenId: bigint\n ): Promise<CoinMetadata & { symbol: string }> {\n const _flaunch = new ReadFlaunch(flaunch, this.drift);\n const coinAddress = await _flaunch.memecoin(tokenId);\n return this.getCoinMetadata(coinAddress);\n }\n\n /**\n * Retrieves metadata for multiple coins using their token IDs\n * @param params - An array of objects containing flaunch contract address and token ID\n * @param batchSize - Optional, the number of ipfs requests to process in each batch\n * @param batchDelay - Optional, the delay in milliseconds between batches\n * @returns An array of objects containing coin address, name, symbol, description, and social links\n */\n async getCoinMetadataFromTokenIds(\n params: {\n flaunch: Address;\n tokenId: bigint;\n }[],\n batchSize: number = 9,\n batchDelay: number = 500\n ): Promise<\n {\n coinAddress: Address;\n name: string;\n symbol: string;\n description: any;\n image: string;\n external_link: any;\n collaborators: any;\n discordUrl: any;\n twitterUrl: any;\n telegramUrl: any;\n }[]\n > {\n if (!Number.isInteger(batchSize) || batchSize < 1) {\n throw new Error(`batchSize must be a positive integer, got ${batchSize}`);\n }\n if (!Number.isFinite(batchDelay) || batchDelay < 0) {\n throw new Error(`batchDelay must be >= 0, got ${batchDelay}`);\n }\n\n const multicall = new ReadMulticall(this.drift);\n\n // get coin addresses via multicall\n const coinAddresses_calldata = params.map((p) =>\n this.readFlaunch.contract.encodeFunctionData(\"memecoin\", {\n _tokenId: p.tokenId,\n })\n );\n const coinAddresses_result = await multicall.aggregate3(\n coinAddresses_calldata.map((calldata, i) => ({\n target: params[i].flaunch,\n callData: calldata,\n }))\n );\n const coinAddresses = coinAddresses_result.map((r) =>\n this.readFlaunch.contract.decodeFunctionReturn(\"memecoin\", r.returnData)\n );\n\n /// get coin metadata for each coin address via multicall\n const coinMetadata_calldata: Hex[] = [];\n // name, symbol, tokenURI for each coin\n coinAddresses.forEach(() => {\n coinMetadata_calldata.push(\n this.drift.adapter.encodeFunctionData({\n abi: MemecoinAbi,\n fn: \"name\",\n })\n );\n coinMetadata_calldata.push(\n this.drift.adapter.encodeFunctionData({\n abi: MemecoinAbi,\n fn: \"symbol\",\n })\n );\n coinMetadata_calldata.push(\n this.drift.adapter.encodeFunctionData({\n abi: MemecoinAbi,\n fn: \"tokenURI\",\n })\n );\n });\n const coinMetadata_result = await multicall.aggregate3(\n coinMetadata_calldata.map((calldata, i) => ({\n target: coinAddresses[Math.floor(i / 3)],\n callData: calldata,\n }))\n );\n\n // First decode all the results\n const results = [];\n for (let i = 0; i < coinAddresses.length; i++) {\n const name = this.drift.adapter.decodeFunctionReturn({\n abi: MemecoinAbi,\n fn: \"name\",\n data: coinMetadata_result[i * 3].returnData,\n });\n const symbol = this.drift.adapter.decodeFunctionReturn({\n abi: MemecoinAbi,\n fn: \"symbol\",\n data: coinMetadata_result[i * 3 + 1].returnData,\n });\n const tokenURI = this.drift.adapter.decodeFunctionReturn({\n abi: MemecoinAbi,\n fn: \"tokenURI\",\n data: coinMetadata_result[i * 3 + 2].returnData,\n });\n\n results.push({ name, symbol, tokenURI, coinAddress: coinAddresses[i] });\n }\n\n // Process IPFS requests in batches to avoid rate limiting\n const processedResults = [];\n for (let i = 0; i < results.length; i += batchSize) {\n const batch = results.slice(i, i + batchSize);\n const batchResults = await Promise.all(\n batch.map(async ({ name, symbol, tokenURI, coinAddress }) => {\n const metadata = await fetchTokenUriMetadataWithFallback(\n this.tokenUriCandidates(tokenURI)\n );\n\n return {\n coinAddress,\n name,\n symbol,\n description: metadata.description ?? \"\",\n image: metadata.image ? this.resolveIPFS(metadata.image) : \"\",\n external_link: metadata.websiteUrl ?? metadata.website ?? \"\",\n collaborators: metadata.collaborators ?? [],\n discordUrl: metadata.discordUrl ?? \"\",\n twitterUrl: metadata.twitterUrl ?? metadata.twitter ?? \"\",\n telegramUrl: metadata.telegramUrl ?? metadata.telegram ?? \"\",\n };\n })\n );\n processedResults.push(...batchResults);\n\n // Add a small delay between batches to avoid rate limiting\n if (i + batchSize < results.length) {\n await new Promise((resolve) => setTimeout(resolve, batchDelay));\n }\n }\n\n return processedResults;\n }\n\n /**\n * Watches for pool creation events\n * @param params - Parameters for watching pool creation\n * @returns Subscription to pool creation events\n */\n watchPoolCreated(params: WatchPoolCreatedParams) {\n return this.readPositionManager.watchPoolCreated(params);\n }\n\n /**\n * Parses a transaction to extract PoolCreated event data\n * @param txHash - The transaction hash to parse\n * @returns PoolCreated event parameters or null if not found\n */\n async getPoolCreatedFromTx(\n txHash: Hex\n ): Promise<PoolCreatedEventData | null> {\n if (!this.publicClient) {\n throw new Error(\"Public client is required to fetch transaction data\");\n }\n\n // Get transaction receipt\n const receipt = await this.publicClient.getTransactionReceipt({\n hash: txHash,\n });\n\n if (!receipt) {\n throw new Error(`Transaction not found: ${txHash}`);\n }\n\n // Find PoolCreated event in logs by trying to decode each log\n for (const log of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: FlaunchPositionManagerAbi,\n data: log.data,\n topics: log.topics,\n });\n\n if (decodedLog.eventName === \"PoolCreated\") {\n return {\n poolId: decodedLog.args._poolId as Hex,\n memecoin: decodedLog.args._memecoin as Address,\n memecoinTreasury: decodedLog.args._memecoinTreasury as Address,\n tokenId: decodedLog.args._tokenId as bigint,\n currencyFlipped: decodedLog.args._currencyFlipped as boolean,\n flaunchFee: decodedLog.args._flaunchFee as bigint,\n params: decodedLog.args._params as any,\n };\n }\n } catch (error) {\n // Not a PoolCreated event or decoding failed, continue to next log\n continue;\n }\n }\n\n return null;\n }\n\n /**\n * Watches for pool swap events\n * @param params - Parameters for watching pool swaps including optional coin filter\n * @returns Subscription to pool swap events\n */\n async watchPoolSwap(params: WatchPoolSwapParams) {\n return this.readPositionManager.watchPoolSwap<boolean>({\n ...params,\n filterByPoolId: params.filterByCoin\n ? await this.poolId(params.filterByCoin)\n : undefined,\n usdcIsCurrencyZero: params.filterByCoin\n ? this.usdcIsCurrencyZero(params.filterByCoin)\n : undefined,\n });\n }\n\n /**\n * Gets information about a liquidity position (read via PoolManager extsload)\n * @param params - Parameters for querying position info\n * @returns Position information\n */\n positionInfo(params: PositionInfoParams) {\n return this.readPoolManager.positionInfo(params);\n }\n\n /**\n * Gets the current tick for a given coin's pool\n * @param coinAddress - The address of the coin\n * @returns Promise<number> - The current tick of the pool\n */\n async currentTick(coinAddress: Address) {\n const poolId = await this.poolId(coinAddress);\n\n const poolState = await this.readPoolManager.poolSlot0({ poolId });\n return poolState.tick;\n }\n\n /**\n * Gets the current sqrt price for a given coin's pool\n * @param coinAddress - The address of the coin\n * @returns Promise<bigint> - sqrtPriceX96, zero if the pool has no price yet\n */\n async currentSqrtPriceX96(coinAddress: Address) {\n const poolId = await this.poolId(coinAddress);\n\n const poolState = await this.readPoolManager.poolSlot0({ poolId });\n return poolState.sqrtPriceX96;\n }\n\n /**\n * Calculates the coin price in USDC based on the current tick. The pool\n * pairs an 18-decimal coin against 6-decimal USDC, so the raw tick price is\n * scaled by 1e12 to get a human dollar price.\n * @param coinAddress - The address of the coin\n * @returns Promise<string> - The price of one coin in USDC (18 decimal string)\n */\n async coinPriceInUSDC(coinAddress: Address) {\n const isUSDCZero = this.usdcIsCurrencyZero(coinAddress);\n const currentTick = await this.currentTick(coinAddress);\n\n // raw price = currency1 per currency0 in wei terms\n const price = Math.pow(1.0001, currentTick);\n\n const usdcRawPerCoinRaw = isUSDCZero ? 1 / price : price;\n const usdcPerCoin =\n usdcRawPerCoinRaw * Math.pow(10, COIN_DECIMALS - USDC_DECIMALS);\n\n return usdcPerCoin.toFixed(18);\n }\n\n /**\n * Calculates the coin's market cap in USDC (price x the fixed 100 Billion supply)\n * @param coinAddress - The address of the coin\n * @returns Promise<string> - The market cap in USDC with 2 decimal precision\n */\n async coinMarketCapInUSDC(coinAddress: Address) {\n const totalSupply = 100_000_000_000; // 100 Billion tokens\n const priceInUSDC = await this.coinPriceInUSDC(coinAddress);\n return (parseFloat(priceInUSDC) * totalSupply).toFixed(2);\n }\n\n async fairLaunchInfo(coinAddress: Address) {\n const poolId = await this.poolId(coinAddress);\n return this.readFairLaunch.fairLaunchInfo({ poolId });\n }\n\n /**\n * Checks if a fair launch is currently active for a given coin\n * @param coinAddress - The address of the coin\n * @returns Promise<boolean> - True if fair launch is active, false otherwise\n */\n async isFairLaunchActive(coinAddress: Address) {\n const poolId = await this.poolId(coinAddress);\n return this.readFairLaunch.isFairLaunchActive({ poolId });\n }\n\n /** The fair launch window length in seconds for a coin (chosen at launch). */\n async fairLaunchDuration(coinAddress: Address) {\n const poolId = await this.poolId(coinAddress);\n return this.readFairLaunch.fairLaunchDuration({ poolId });\n }\n\n /**\n * Gets the initial tick for a fair launch\n * @param coinAddress - The address of the coin\n * @returns Promise<number> - The initial tick value\n */\n async initialTick(coinAddress: Address) {\n const poolId = await this.poolId(coinAddress);\n\n const fairLaunchInfo = await this.readFairLaunch.fairLaunchInfo({\n poolId,\n });\n return fairLaunchInfo.initialTick;\n }\n\n /**\n * Gets the USDC-only position in a fair launch (the side selling at the\n * fixed fair launch price)\n * @param coinAddress - The address of the coin\n * @returns Promise<{usdcAmount, coinAmount, tickLower, tickUpper}>\n */\n async fairLaunchUSDCOnlyPosition(coinAddress: Address) {\n const poolId = await this.poolId(coinAddress);\n const initialTick = await this.initialTick(coinAddress);\n const currentTick = await this.currentTick(coinAddress);\n const isUSDCZero = this.usdcIsCurrencyZero(coinAddress);\n\n let tickLower: number;\n let tickUpper: number;\n\n if (isUSDCZero) {\n tickLower = getValidTick({\n tick: initialTick + 1,\n roundDown: false,\n tickSpacing: this.TICK_SPACING,\n });\n tickUpper = tickLower + this.TICK_SPACING;\n } else {\n tickUpper = getValidTick({\n tick: initialTick - 1,\n roundDown: true,\n tickSpacing: this.TICK_SPACING,\n });\n tickLower = tickUpper - this.TICK_SPACING;\n }\n\n const { liquidity } = await this.readPoolManager.positionInfo({\n poolId,\n owner: this.getFairLaunchAddress(),\n tickLower,\n tickUpper,\n salt: \"\",\n });\n\n const { amount0, amount1 } = calculateUnderlyingTokenBalances(\n liquidity,\n tickLower,\n tickUpper,\n currentTick\n );\n\n const [usdcAmount, coinAmount] = isUSDCZero\n ? [amount0, amount1]\n : [amount1, amount0];\n\n return {\n usdcAmount,\n coinAmount,\n tickLower,\n tickUpper,\n };\n }\n\n /**\n * Gets the coin-only position in a fair launch\n * @param coinAddress - The address of the coin\n * @returns Promise<{usdcAmount, coinAmount, tickLower, tickUpper}>\n */\n async fairLaunchCoinOnlyPosition(coinAddress: Address) {\n const poolId = await this.poolId(coinAddress);\n const initialTick = await this.initialTick(coinAddress);\n const currentTick = await this.currentTick(coinAddress);\n const isUSDCZero = this.usdcIsCurrencyZero(coinAddress);\n\n let tickLower: number;\n let tickUpper: number;\n\n if (isUSDCZero) {\n tickLower = TickFinder.MIN_TICK;\n tickUpper = getValidTick({\n tick: initialTick - 1,\n roundDown: true,\n tickSpacing: this.TICK_SPACING,\n });\n } else {\n tickLower = getValidTick({\n tick: initialTick + 1,\n roundDown: false,\n tickSpacing: this.TICK_SPACING,\n });\n tickUpper = TickFinder.MAX_TICK;\n }\n\n const { liquidity } = await this.readPoolManager.positionInfo({\n poolId,\n owner: this.getFairLaunchAddress(),\n tickLower,\n tickUpper,\n salt: \"\",\n });\n\n const { amount0, amount1 } = calculateUnderlyingTokenBalances(\n liquidity,\n tickLower,\n tickUpper,\n currentTick\n );\n\n const [usdcAmount, coinAmount] = isUSDCZero\n ? [amount0, amount1]\n : [amount1, amount0];\n\n return {\n usdcAmount,\n coinAmount,\n tickLower,\n tickUpper,\n };\n }\n\n /**\n * Gets the bid wall (progressive floor) position for a coin\n * @param coinAddress - The address of the coin\n * @returns Promise<{usdcAmount, coinAmount, pendingUsdc, tickLower, tickUpper}>\n */\n async bidWallPosition(coinAddress: Address) {\n const poolId = await this.poolId(coinAddress);\n const isUSDCZero = this.usdcIsCurrencyZero(coinAddress);\n\n const {\n amount0_: amount0,\n amount1_: amount1,\n pendingEth_: pendingUsdc,\n } = await this.readBidWall.position({ poolId });\n const { tickLower, tickUpper } = await this.readBidWall.poolInfo({\n poolId,\n });\n\n const [usdcAmount, coinAmount] = isUSDCZero\n ? [amount0, amount1]\n : [amount1, amount0];\n\n return {\n usdcAmount,\n coinAmount,\n pendingUsdc,\n tickLower,\n tickUpper,\n };\n }\n\n /**\n * Gets the USDC balance the creator (or split manager) can claim from the\n * FeeEscrow\n * @param creator - The address to check\n * @returns Promise<bigint> - The claimable balance (USDC, 6 decimals)\n */\n creatorRevenue(creator: Address) {\n return this.readFeeEscrow.balances(creator);\n }\n\n /**\n * Gets the referral escrow balance of a recipient for a given token.\n * Referral rewards accrue in the OUTPUT token of each swap: buys accrue the\n * coin, sells accrue USDC.\n * @param recipient - The address of the recipient to check\n * @param token - The token to check (a coin address or USDC)\n * @returns Promise<bigint> - The balance of the recipient\n */\n referralBalance(recipient: Address, token: Address) {\n return this.readReferralEscrow.allocations(recipient, token);\n }\n\n /**\n * Gets a recipient's claimable share inside an earnings-split manager\n * @param managerAddress - The AddressFeeSplitManager instance\n * @param recipient - The recipient to check\n * @returns Promise<bigint> - The claimable balance (USDC, 6 decimals)\n */\n splitBalance(managerAddress: Address, recipient: Address) {\n const readTreasuryManager = new ReadTreasuryManager(\n managerAddress,\n this.drift\n );\n return readTreasuryManager.balances(recipient);\n }\n\n async treasuryManagerInfo(treasuryManagerAddress: Address) {\n const readTreasuryManager = new ReadTreasuryManager(\n treasuryManagerAddress,\n this.drift\n );\n\n const [managerOwner, permissions] = await Promise.all([\n readTreasuryManager.managerOwner(),\n readTreasuryManager.permissions(),\n ]);\n\n return {\n managerOwner,\n permissions,\n };\n }\n\n /**\n * Fetches an address's daily holder pool entitlement from the ubi.fun API.\n * The returned cumulativeWei/proof pair is what the on-chain claim takes.\n * @param account - The holder address\n */\n async getUbiEntitlement(account: Address): Promise<UbiEntitlement> {\n const apiUrl = ApiBaseUrl[this.chainId];\n if (!apiUrl) {\n throw new Error(`No ubi.fun API for chain ${this.chainId}`);\n }\n const response = await axios.get(\n `${apiUrl}/ubi/${account.toLowerCase()}`\n );\n return response.data as UbiEntitlement;\n }\n\n /**\n * An address's claimable holder pool balance right now: the API entitlement\n * minus what was already claimed on-chain. Returns zero while the\n * entitlement's ledger root is still pending the URD timelock (a claim\n * against it would revert).\n * @param account - The holder address\n */\n async claimableUbi(account: Address): Promise<{\n claimable: bigint;\n entitlement: UbiEntitlement;\n }> {\n const entitlement = await this.getUbiEntitlement(account);\n if (!entitlement.cumulativeWei || !entitlement.proof) {\n return { claimable: 0n, entitlement };\n }\n\n if (entitlement.root) {\n const onChainRoot = await this.readUbiPool.root();\n if (entitlement.root.toLowerCase() !== onChainRoot.toLowerCase()) {\n // Root still inside the URD timelock; retry once it activates.\n return { claimable: 0n, entitlement };\n }\n }\n\n const cumulative = BigInt(entitlement.cumulativeWei);\n const claimed = await this.readUbiPool.claimed(account, USDC_ADDRESS);\n return {\n claimable: cumulative > claimed ? cumulative - claimed : 0n,\n entitlement,\n };\n }\n\n /**\n * Gets the pool ID for a given coin\n * @param coinAddress - The address of the coin\n * @returns Promise<string> - The pool ID\n */\n async poolId(coinAddress: Address) {\n return getPoolId(\n coinPoolKey(coinAddress, this.getPositionManagerAddress())\n );\n }\n\n /**\n * Gets the flaunching fee for a given initial price, in native units\n * (msg.value; USDC at 18 decimals on Arc). Zero at the $10k minimum market\n * cap.\n * @param params.sender - The address of the sender\n * @param params.initialMarketCapUSD - The initial market cap in USD\n * @param params.slippagePercent - The slippage percent\n * @returns Promise<bigint> - The flaunching fee\n */\n getFlaunchingFee(params: {\n sender: Address;\n initialMarketCapUSD: number;\n slippagePercent?: number;\n }) {\n const initialMCapInUSDCWei = parseUnits(\n params.initialMarketCapUSD.toString(),\n 6\n );\n const initialPriceParams = encodeAbiParameters(\n [\n {\n type: \"uint256\",\n },\n ],\n [initialMCapInUSDCWei]\n );\n\n return this.readPositionManager.getFlaunchingFee({\n sender: params.sender,\n initialPriceParams,\n slippagePercent: params.slippagePercent,\n });\n }\n\n /**\n * Calculates the msg.value required to flaunch a token: the premine cost (if\n * any) plus the flaunching fee. Native units (USDC at 18 decimals on Arc).\n * @param params.premineAmount - The amount of coins to be premined\n * @param params.initialMarketCapUSD - The initial market cap in USD\n * @param params.slippagePercent - The slippage percent\n * @returns Promise<bigint> - The value required to flaunch\n */\n valueRequiredToFlaunch(params: {\n premineAmount: bigint;\n initialMarketCapUSD: number;\n slippagePercent?: number;\n }) {\n const initialMCapInUSDCWei = parseUnits(\n params.initialMarketCapUSD.toString(),\n 6\n );\n const initialPriceParams = encodeAbiParameters(\n [\n {\n type: \"uint256\",\n },\n ],\n [initialMCapInUSDCWei]\n );\n\n return this.readFlaunchZap.valueRequiredToFlaunch({\n premineAmount: params.premineAmount,\n initialPriceParams,\n slippagePercent: params.slippagePercent,\n });\n }\n\n /**\n * Gets a quote for selling an exact amount of a coin for USDC\n * @param coinAddress - The address of the coin to sell\n * @param amountIn - The exact amount of coins to sell (18 decimals)\n * @param referrer - Optional referrer; must match the referrer used to swap\n * @returns Promise<bigint> - The expected USDC out (6 decimals)\n */\n getSellQuoteExactInput({\n coinAddress,\n amountIn,\n referrer,\n }: {\n coinAddress: Address;\n amountIn: bigint;\n referrer?: Address;\n }) {\n return this.readQuoter.getSellQuoteExactInput({\n coinAddress,\n amountIn,\n positionManagerAddress: this.getPositionManagerAddress(),\n referrer,\n });\n }\n\n /**\n * Gets a quote for buying a coin with an exact amount of USDC\n * @param coinAddress - The address of the coin to buy\n * @param amountIn - The exact amount of USDC to spend (6 decimals)\n * @param referrer - Optional referrer; must match the referrer used to swap\n * @returns Promise<bigint> - The expected coins out (18 decimals)\n */\n getBuyQuoteExactInput({\n coinAddress,\n amountIn,\n referrer,\n }: {\n coinAddress: Address;\n amountIn: bigint;\n referrer?: Address;\n }) {\n return this.readQuoter.getBuyQuoteExactInput({\n coinAddress,\n amountIn,\n positionManagerAddress: this.getPositionManagerAddress(),\n referrer,\n });\n }\n\n /**\n * Gets a quote for buying an exact amount of a coin, answering the USDC in\n * @param coinAddress - The address of the coin to buy\n * @param amountOut - The exact amount of coins to receive (18 decimals)\n * @param referrer - Optional referrer; must match the referrer used to swap\n * @returns Promise<bigint> - The required USDC in (6 decimals)\n */\n getBuyQuoteExactOutput({\n coinAddress,\n amountOut,\n referrer,\n }: {\n coinAddress: Address;\n amountOut: bigint;\n referrer?: Address;\n }) {\n return this.readQuoter.getBuyQuoteExactOutput({\n coinAddress,\n coinOut: amountOut,\n positionManagerAddress: this.getPositionManagerAddress(),\n referrer,\n });\n }\n\n /**\n * Determines if USDC is currency0 in the coin's pool\n * @param coinAddress - The address of the coin\n * @returns boolean - True if USDC is currency0, false otherwise\n */\n usdcIsCurrencyZero(coinAddress: Address) {\n return usdcIsCurrencyZero(coinAddress);\n }\n\n /**\n * Sets a custom IPFS resolver function\n * @dev this is used to resolve IPFS hash to a gateway URL\n * eg: input: Qabc, output: https://ipfs.io/ipfs/Qabc\n * @param resolverFn - Custom function to resolve IPFS URIs\n */\n setIPFSResolver(resolverFn: (ipfsHash: string) => string): void {\n this.resolveIPFS = resolverFn;\n }\n\n /**\n * Parses a transaction hash to extract PoolSwap events and return parsed swap data\n * @param params.txHash - The transaction hash to parse\n * @param params.usdcIsCurrencyZero - Whether USDC is currency0 in the pool (optional;\n * when provided, returns typed BUY/SELL data)\n * @returns Parsed swap log or undefined if no PoolSwap event found\n */\n async parseSwapTx<T extends boolean | undefined = undefined>(params: {\n txHash: Hex;\n usdcIsCurrencyZero?: T;\n }): Promise<\n T extends boolean\n ? BuySwapLog | SellSwapLog | undefined\n : BaseSwapLog | undefined\n > {\n return this.readPositionManager.parseSwapTx(\n params.txHash,\n params.usdcIsCurrencyZero\n ) as any;\n }\n\n async getCoinInfo(coinAddress: Address): Promise<{\n totalSupply: bigint;\n decimals: number;\n formattedTotalSupplyInDecimals: number;\n }> {\n const memecoin = new ReadMemecoin(coinAddress, this.drift);\n const [totalSupply, decimals] = await Promise.all([\n memecoin.totalSupply(),\n memecoin.decimals(),\n ]);\n const formattedTotalSupplyInDecimals = parseFloat(\n formatUnits(totalSupply, decimals)\n );\n return { totalSupply, decimals, formattedTotalSupplyInDecimals };\n }\n\n isFlaunchTokenApprovedForAll(owner: Address, operator: Address) {\n return this.drift.read({\n abi: erc721Abi,\n address: this.getFlaunchAddress(),\n fn: \"isApprovedForAll\",\n args: { owner, operator },\n });\n }\n\n /**\n * The coin's creator vault, when it has one: its creator NFT sits in a\n * clone of the approved DividendVault (factory record) that holds this very\n * coin. Undefined for coins without one and on chains without creator vaults.\n * @param coinAddress - The coin address\n */\n async getCreatorVault(coinAddress: Address): Promise<\n | {\n vault: Address;\n /** Share of the creator's earnings paid to holders, in percent. */\n holderSharePercent: number;\n renounced: boolean;\n managerOwner: Address;\n }\n | undefined\n > {\n const implementation = DividendVaultAddress[this.chainId];\n const factory = TreasuryManagerFactoryAddress[this.chainId];\n if (!implementation || !factory) {\n return undefined;\n }\n // The creator NFT can move (until it sits in a vault), so this read is fresh\n const creatorRead = { abi: MemecoinAbi, address: coinAddress, fn: \"creator\" as const };\n await this.drift.cache.invalidateRead(creatorRead);\n const creator = await this.drift.read(creatorRead);\n if (isAddressEqual(creator, zeroAddress)) {\n return undefined;\n }\n const deployedFrom = await this.drift.read({\n abi: TreasuryManagerFactoryAbi,\n address: factory,\n fn: \"managerImplementation\",\n args: { _manager: creator },\n });\n if (!isAddressEqual(deployedFrom, implementation)) {\n return undefined;\n }\n const vault = new ReadDividendVault(creator, this.drift);\n const [memecoin, holderShare, renounced, managerOwner] = await Promise.all([\n vault.memecoin(),\n vault.holderShare(),\n vault.renounced(),\n vault.managerOwner(),\n ]);\n if (!isAddressEqual(memecoin, coinAddress)) {\n return undefined;\n }\n return {\n vault: creator,\n holderSharePercent: Number(holderShare) / 100,\n renounced,\n managerOwner,\n };\n }\n\n /**\n * A holder's dividends on a creator vault coin, in 6-decimal USDC.\n * @param coinAddress - The coin address\n * @param holder - The holder\n */\n async dividendsOf(coinAddress: Address, holder: Address) {\n const dividends = new ReadMemecoinDividends(coinAddress, this.drift);\n const [withdrawable, dripping, distributed] = await Promise.all([\n dividends.withdrawableDividendOf(holder),\n dividends.dividendsDripping(),\n dividends.totalDividendsDistributed(),\n ]);\n return { withdrawable, dripping, distributed };\n }\n}\n\nexport class ReadWriteFlaunchSDK extends ReadFlaunchSDK {\n declare drift: Drift<ReadWriteAdapter>;\n public readonly readWriteFeeEscrow: ReadWriteFeeEscrow;\n public readonly readWriteReferralEscrow: ReadWriteReferralEscrow;\n public readonly readWriteFlaunchZap: ReadWriteFlaunchZap;\n public readonly readWritePoolSwap: ReadWritePoolSwap;\n public readonly readWriteXHandleClaims: ReadWriteXHandleClaims;\n public readonly readWriteUbiPool: ReadWriteUniversalRewardsDistributor;\n public readonly readWriteTreasuryManagerFactory: ReadWriteTreasuryManagerFactory;\n\n constructor(\n chainId: number,\n drift: Drift<ReadWriteAdapter> = createDrift(),\n publicClient?: PublicClient\n ) {\n super(chainId, drift, publicClient);\n this.readWriteFeeEscrow = new ReadWriteFeeEscrow(\n FeeEscrowAddress[this.chainId],\n drift\n );\n this.readWriteReferralEscrow = new ReadWriteReferralEscrow(\n ReferralEscrowAddress[this.chainId],\n drift\n );\n this.readWriteFlaunchZap = new ReadWriteFlaunchZap(\n this.chainId,\n FlaunchZapAddress[this.chainId],\n drift\n );\n this.readWritePoolSwap = new ReadWritePoolSwap(\n PoolSwapAddress[this.chainId],\n drift\n );\n this.readWriteXHandleClaims = new ReadWriteXHandleClaims(\n XHandleClaimsAddress[this.chainId],\n drift\n );\n this.readWriteUbiPool = new ReadWriteUniversalRewardsDistributor(\n UniversalRewardsDistributorAddress[this.chainId],\n drift\n );\n this.readWriteTreasuryManagerFactory = new ReadWriteTreasuryManagerFactory(\n this.chainId,\n TreasuryManagerFactoryAddress[this.chainId],\n drift,\n this.publicClient\n );\n }\n\n /**\n * Launches a new coin through the FlaunchZap\n * @param params - Parameters for the launch\n * @returns Transaction response\n */\n flaunch(params: FlaunchParams) {\n return this.readWriteFlaunchZap.flaunch(params);\n }\n\n /**\n * Launches a new coin, pinning the image + metadata first to produce the tokenUri\n * @param params - Parameters for the launch with IPFS data\n * @returns Transaction response\n */\n flaunchIPFS(params: FlaunchIPFSParams) {\n return this.readWriteFlaunchZap.flaunchIPFS(params);\n }\n\n flaunchWithSplitManager(params: FlaunchWithSplitManagerParams) {\n return this.readWriteFlaunchZap.flaunchWithSplitManager(params);\n }\n\n /**\n * Launches a new coin that splits the creator revenue between the creator and a\n * list of recipients, storing the token metadata on IPFS\n * @param params - Parameters including all IPFS metadata\n * @returns Transaction response\n */\n flaunchIPFSWithSplitManager(params: FlaunchWithSplitManagerIPFSParams) {\n return this.readWriteFlaunchZap.flaunchIPFSWithSplitManager(params);\n }\n\n /**\n * Launches a coin whose creator NFT goes into a creator vault: holders earn\n * a share of the creator's earnings in USDC and the trading fee is chosen\n * (1.5-5%). Required for every launch once creator vaults are live.\n * @param params - Parameters for the launch\n * @returns Transaction response\n */\n flaunchWithVault(params: FlaunchWithVaultParams) {\n return this.readWriteFlaunchZap.flaunchWithVault(params);\n }\n\n /** {@link flaunchWithVault}, pinning the token metadata first. */\n flaunchIPFSWithVault(params: FlaunchWithVaultIPFSParams) {\n return this.readWriteFlaunchZap.flaunchIPFSWithVault(params);\n }\n\n /** ubi.fun-branded alias of {@link flaunchWithVault}. */\n createUBIWithVault(params: FlaunchWithVaultParams) {\n return this.flaunchWithVault(params);\n }\n\n /** ubi.fun-branded alias of {@link flaunchIPFSWithVault}. */\n createUBIIPFSWithVault(params: FlaunchWithVaultIPFSParams) {\n return this.flaunchIPFSWithVault(params);\n }\n\n /** Withdraws the connected wallet's dividends from a creator vault coin. */\n withdrawDividends(coinAddress: Address) {\n return new ReadWriteMemecoinDividends(coinAddress, this.drift).withdrawDividend();\n }\n\n /** Harvests a creator vault coin's fees into its vault (anyone can). */\n async harvestCreatorVault(coinAddress: Address) {\n const vault = await this.requireCreatorVault(coinAddress);\n return new ReadWriteDividendVault(vault, this.drift).harvest();\n }\n\n /** Claims the connected wallet's creator credit from a creator vault coin. */\n async claimCreatorVault(coinAddress: Address) {\n const vault = await this.requireCreatorVault(coinAddress);\n return new ReadWriteDividendVault(vault, this.drift).claim();\n }\n\n private async requireCreatorVault(coinAddress: Address): Promise<Address> {\n const info = await this.getCreatorVault(coinAddress);\n if (!info) {\n throw new Error(`${coinAddress} has no creator vault`);\n }\n return info.vault;\n }\n\n /** ubi.fun-branded alias of {@link flaunch}. */\n createUBI(params: FlaunchParams) {\n return this.flaunch(params);\n }\n\n /** ubi.fun-branded alias of {@link flaunchIPFS}. */\n createUBIIPFS(params: FlaunchIPFSParams) {\n return this.flaunchIPFS(params);\n }\n\n /** ubi.fun-branded alias of {@link flaunchWithSplitManager}. */\n createUBIWithSplitManager(params: FlaunchWithSplitManagerParams) {\n return this.flaunchWithSplitManager(params);\n }\n\n /** ubi.fun-branded alias of {@link flaunchIPFSWithSplitManager}. */\n createUBIIPFSWithSplitManager(params: FlaunchWithSplitManagerIPFSParams) {\n return this.flaunchIPFSWithSplitManager(params);\n }\n\n async coinBalance(coinAddress: Address) {\n const user = await this.drift.getSignerAddress();\n const memecoin = new ReadMemecoin(coinAddress, this.drift);\n await memecoin.contract.cache.clear();\n return memecoin.balanceOf(user);\n }\n\n /** The connected wallet's USDC (6 decimals) balance. */\n async usdcBalance() {\n const user = await this.drift.getSignerAddress();\n const usdc = new ReadMemecoin(USDC_ADDRESS, this.drift);\n await usdc.contract.cache.clear();\n return usdc.balanceOf(user);\n }\n\n /**\n * The connected wallet's allowance of `token` to PoolSwap. Pass USDC_ADDRESS\n * before a buy, the coin address before a sell.\n */\n async swapAllowance(token: Address) {\n const owner = await this.drift.getSignerAddress();\n const erc20 = new ReadMemecoin(token, this.drift);\n await erc20.contract.cache.clear();\n return erc20.allowance(owner, this.readWritePoolSwap.contract.address);\n }\n\n /**\n * Approves `amount` of `token` to PoolSwap. Pass USDC_ADDRESS before a buy,\n * the coin address before a sell.\n * @returns Transaction response\n */\n approveSwapInput(token: Address, amount: bigint) {\n const erc20 = new ReadWriteMemecoin(token, this.drift);\n return erc20.approve(this.readWritePoolSwap.contract.address, amount);\n }\n\n /**\n * Buys a coin with USDC through PoolSwap. Requires a prior USDC approval to\n * PoolSwap (see approveSwapInput); throws before sending if the allowance is\n * short.\n * @param params.coinAddress - The coin to buy\n * @param params.amountIn - Exact USDC to spend (6 decimals)\n * @param params.slippagePercent - Max price movement beyond the quoted fill, default 5 (%)\n * @param params.referrer - Optional referrer credited with 5% of the swap fee\n * @returns Transaction response\n */\n async buyCoin(params: {\n coinAddress: Address;\n amountIn: bigint;\n slippagePercent?: number;\n referrer?: Address;\n }) {\n return this.executeSwap({\n coinAddress: params.coinAddress,\n side: \"buy\",\n amountIn: params.amountIn,\n slippagePercent: params.slippagePercent,\n referrer: params.referrer,\n });\n }\n\n /**\n * Sells a coin for USDC through PoolSwap. Requires a prior coin approval to\n * PoolSwap (see approveSwapInput); throws before sending if the allowance is\n * short.\n * @param params.coinAddress - The coin to sell\n * @param params.amountIn - Exact coins to sell (18 decimals)\n * @param params.slippagePercent - Max price movement beyond the quoted fill, default 5 (%)\n * @param params.referrer - Optional referrer credited with 5% of the swap fee\n * @returns Transaction response\n */\n async sellCoin(params: {\n coinAddress: Address;\n amountIn: bigint;\n slippagePercent?: number;\n referrer?: Address;\n }) {\n return this.executeSwap({\n coinAddress: params.coinAddress,\n side: \"sell\",\n amountIn: params.amountIn,\n slippagePercent: params.slippagePercent,\n referrer: params.referrer,\n });\n }\n\n private async executeSwap(params: {\n coinAddress: Address;\n side: \"buy\" | \"sell\";\n amountIn: bigint;\n slippagePercent?: number;\n referrer?: Address;\n }) {\n const inputToken =\n params.side === \"buy\" ? USDC_ADDRESS : params.coinAddress;\n\n const allowance = await this.swapAllowance(inputToken);\n if (allowance < params.amountIn) {\n throw new Error(\n `Insufficient ${params.side === \"buy\" ? \"USDC\" : \"coin\"} allowance to PoolSwap: ` +\n `have ${allowance}, need ${params.amountIn}. Call approveSwapInput first.`\n );\n }\n\n const sqrtPriceX96 = await this.currentSqrtPriceX96(params.coinAddress);\n if (sqrtPriceX96 === 0n) {\n throw new Error(\n \"Pool has no observed price yet; try again after the first swap\"\n );\n }\n\n const quotedAmountOut =\n params.side === \"buy\"\n ? await this.getBuyQuoteExactInput({\n coinAddress: params.coinAddress,\n amountIn: params.amountIn,\n referrer: params.referrer,\n })\n : await this.getSellQuoteExactInput({\n coinAddress: params.coinAddress,\n amountIn: params.amountIn,\n referrer: params.referrer,\n });\n\n const zeroForOne = swapDirection(params.side, params.coinAddress);\n\n return this.readWritePoolSwap.swap({\n poolKey: coinPoolKey(\n params.coinAddress,\n this.getPositionManagerAddress()\n ),\n zeroForOne,\n // Exact-in is negative amountSpecified in v4 semantics.\n amountSpecified: -params.amountIn,\n // Anchor the bound on the quoted end price, not spot: a large trade's\n // own impact must not consume the slippage budget, or PoolSwap would\n // stop at the limit and settle a partial fill.\n sqrtPriceLimitX96: sqrtPriceLimit({\n current: expectedEndSqrtPriceX96({\n current: sqrtPriceX96,\n zeroForOne,\n amountIn: params.amountIn,\n amountOut: quotedAmountOut,\n }),\n zeroForOne,\n slippageBps: Math.round((params.slippagePercent ?? 5) * 100),\n }),\n referrer: params.referrer,\n });\n }\n\n /**\n * Withdraws the connected creator's accrued revenue from the FeeEscrow as\n * USDC\n * @param recipient - Optional recipient; defaults to the connected wallet\n * @returns Transaction response\n */\n async withdrawCreatorRevenue(params?: { recipient?: Address }) {\n const recipient =\n params?.recipient ?? (await this.drift.getSignerAddress());\n return this.readWriteFeeEscrow.withdrawFees(recipient);\n }\n\n /**\n * Claims the referral balance for a given recipient\n * @param tokens - The tokens to claim (coin addresses and/or USDC)\n * @param recipient - The address to receive the claimed tokens\n * @returns Transaction response\n */\n claimReferralBalance(tokens: Address[], recipient: Address) {\n return this.readWriteReferralEscrow.claimTokens(tokens, recipient);\n }\n\n /**\n * Claims the connected wallet's share from an earnings-split manager (paid\n * as USDC)\n * @param managerAddress - The AddressFeeSplitManager instance\n * @returns Transaction response\n */\n claimSplitEarnings(managerAddress: Address) {\n const readWriteTreasuryManager = new ReadWriteTreasuryManager(\n managerAddress,\n this.drift\n );\n return readWriteTreasuryManager.claim();\n }\n\n /**\n * Claims an address's outstanding daily holder pool balance from the\n * UniversalRewardsDistributor. Fetches the entitlement + proof from the\n * ubi.fun API; throws if nothing is claimable (including while the ledger\n * root is timelocked).\n * @param account - Optional holder; defaults to the connected wallet\n * @returns Transaction response\n */\n async claimUbi(account?: Address) {\n const holder = account ?? (await this.drift.getSignerAddress());\n const { claimable, entitlement } = await this.claimableUbi(holder);\n if (claimable === 0n || !entitlement.cumulativeWei || !entitlement.proof) {\n throw new Error(\"Nothing claimable for this address right now\");\n }\n\n return this.readWriteUbiPool.claim({\n account: holder,\n reward: USDC_ADDRESS,\n claimable: BigInt(entitlement.cumulativeWei),\n proof: entitlement.proof,\n });\n }\n\n treasuryManagerSetPermissions(\n treasuryManagerAddress: Address,\n permissionsAddress: Address\n ) {\n const readWriteTreasuryManager = new ReadWriteTreasuryManager(\n treasuryManagerAddress,\n this.drift\n );\n return readWriteTreasuryManager.setPermissions(permissionsAddress);\n }\n\n /**\n * Transfers the ownership of a treasury manager to a new address\n * @param treasuryManagerAddress - The address of the treasury manager\n * @param newManagerOwner - The address of the new manager owner\n * @returns Transaction response\n */\n treasuryManagerTransferOwnership(\n treasuryManagerAddress: Address,\n newManagerOwner: Address\n ) {\n const readWriteTreasuryManager = new ReadWriteTreasuryManager(\n treasuryManagerAddress,\n this.drift\n );\n return readWriteTreasuryManager.transferManagerOwnership(newManagerOwner);\n }\n\n /**\n * Sets approval for all Flaunch NFTs to an operator\n * @param operator - The operator address to approve/revoke\n * @param approved - Whether to approve or revoke approval\n * @returns Transaction response\n */\n setFlaunchTokenApprovalForAll(operator: Address, approved: boolean) {\n return this.drift.write({\n abi: erc721Abi,\n address: this.getFlaunchAddress(),\n fn: \"setApprovalForAll\",\n args: { operator, approved },\n });\n }\n\n /**\n * Adds an existing Flaunch NFT to a treasury manager. NFT approval must be\n * given prior to calling this function.\n * @param treasuryManagerAddress - The address of the treasury manager\n * @param tokenId - The token ID to deposit\n * @param creator - Optional creator address. If not provided, uses the connected wallet address\n * @param data - Optional additional data for the deposit (defaults to empty bytes)\n * @returns Transaction response\n */\n async addToTreasuryManager(\n treasuryManagerAddress: Address,\n tokenId: bigint,\n creator?: Address,\n data: `0x${string}` = \"0x\"\n ) {\n const readWriteTreasuryManager = new ReadWriteTreasuryManager(\n treasuryManagerAddress,\n this.drift\n );\n\n const flaunchToken = {\n flaunch: this.getFlaunchAddress(),\n tokenId,\n };\n\n const creatorAddress = creator ?? (await this.drift.getSignerAddress());\n\n return readWriteTreasuryManager.deposit(flaunchToken, creatorAddress, data);\n }\n}\n","import { Chain, defineChain } from \"viem\";\nimport { ARC_MAINNET_CHAIN_ID, ARC_TESTNET_CHAIN_ID } from \"../addresses\";\n\n/**\n * Arc (Circle) chain definitions for viem. Gas is paid in USDC: msg.value is\n * 18-decimal native USDC while the ERC20 interface at 0x3600... is the same\n * asset at 6 decimals.\n *\n * Arc mainnet is in its private phase: provider endpoints (including this\n * default) reject public traffic until Circle opens access, so pass your own\n * transport url. Once the network opens, public RPCs will be plentiful.\n */\nexport const arc = defineChain({\n id: ARC_MAINNET_CHAIN_ID,\n name: \"Arc\",\n nativeCurrency: {\n name: \"USD Coin\",\n symbol: \"USDC\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.blockdaemon.mainnet.arc.io\"],\n },\n },\n blockExplorers: {\n default: {\n name: \"Arc Explorer\",\n url: \"https://explorer.arc.io\",\n },\n },\n});\n\nexport const arcTestnet = defineChain({\n id: ARC_TESTNET_CHAIN_ID,\n name: \"Arc Testnet\",\n testnet: true,\n nativeCurrency: {\n name: \"USD Coin\",\n symbol: \"USDC\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://arc-testnet.drpc.org\", \"https://rpc.testnet.arc.network\"],\n },\n },\n blockExplorers: {\n default: {\n name: \"Arcscan\",\n url: \"https://testnet.arcscan.app\",\n },\n },\n});\n\nexport const chainIdToChain: {\n [key: number]: Chain;\n} = {\n [arc.id]: arc,\n [arcTestnet.id]: arcTestnet,\n};\n","import {\n createDrift as createDriftOriginal,\n Drift,\n ReadWriteAdapter,\n} from \"@delvtech/drift\";\nimport { viemAdapter } from \"@delvtech/drift-viem\";\nimport type { PublicClient, WalletClient } from \"viem\";\n\nexport type CreateDriftParams = {\n publicClient: PublicClient;\n walletClient?: WalletClient;\n};\n\n/**\n * Creates a read-only Drift instance with only public client\n * @param params - Parameters with only publicClient\n * @returns Drift instance for read-only operations\n * @throws Error if publicClient.chain is not configured\n */\nexport function createDrift(\n params: Omit<CreateDriftParams, \"walletClient\">\n): Drift;\n/**\n * Creates a read-write Drift instance with both public and wallet clients\n * @param params - Parameters with both publicClient and walletClient\n * @returns Drift instance for read and write operations\n * @throws Error if publicClient.chain is not configured\n */\nexport function createDrift(\n params: Required<CreateDriftParams>\n): Drift<ReadWriteAdapter>;\n\n/**\n * Creates a Drift instance with the provided clients\n * @param params - Parameters for creating the Drift instance\n * @returns Drift instance configured with the appropriate clients\n * @throws Error if publicClient.chain is not configured\n */\nexport function createDrift(\n params: CreateDriftParams\n): Drift | Drift<ReadWriteAdapter> {\n const { publicClient, walletClient } = params;\n\n if (!publicClient.chain) {\n throw new Error(\"publicClient must be configured with a chain\");\n }\n\n return walletClient\n ? createDriftOriginal({\n adapter: viemAdapter({ publicClient, walletClient }),\n })\n : createDriftOriginal({\n adapter: viemAdapter({ publicClient }),\n });\n}\n","import { createDrift } from \"./drift\";\nimport { viemAdapter } from \"@delvtech/drift-viem\";\nimport type { PublicClient, WalletClient } from \"viem\";\nimport { ReadFlaunchSDK, ReadWriteFlaunchSDK } from \"./FlaunchSDK\";\n\nexport type CreateFlaunchParams = {\n publicClient: PublicClient;\n walletClient?: WalletClient;\n};\n\n/**\n * Creates a read-only Flaunch SDK instance with only public client\n * @param params - Parameters with only publicClient\n * @returns ReadFlaunchSDK for read-only operations\n * @throws Error if publicClient.chain is not configured\n */\nexport function createFlaunch(\n params: Omit<CreateFlaunchParams, \"walletClient\">\n): ReadFlaunchSDK;\n/**\n * Creates a read-write Flaunch SDK instance with both public and wallet clients\n * @param params - Parameters with both publicClient and walletClient\n * @returns ReadWriteFlaunchSDK for read and write operations\n * @throws Error if publicClient.chain is not configured\n */\nexport function createFlaunch(\n params: Required<CreateFlaunchParams>\n): ReadWriteFlaunchSDK;\n\n/**\n * Creates a Flaunch SDK instance with the provided clients\n * @param params - Parameters for creating the SDK\n * @returns ReadFlaunchSDK if only publicClient is provided, ReadWriteFlaunchSDK if walletClient is also provided\n * @throws Error if publicClient.chain is not configured\n */\nexport function createFlaunch(params: CreateFlaunchParams) {\n const { publicClient, walletClient } = params;\n\n if (!publicClient.chain) {\n throw new Error(\"publicClient must be configured with a chain\");\n }\n\n const chainId = publicClient.chain.id;\n\n // Return appropriate SDK type based on whether walletClient is provided\n return walletClient\n ? new ReadWriteFlaunchSDK(\n chainId,\n createDrift({ publicClient, walletClient }),\n publicClient\n )\n : new ReadFlaunchSDK(chainId, createDrift({ publicClient }), publicClient);\n}\n","import {\n createWalletClient,\n http,\n encodeFunctionData,\n decodeFunctionData,\n parseAbi,\n type PublicClient,\n type WalletClient,\n type Address,\n type Hex,\n} from \"viem\";\nimport { createDrift } from \"./drift\";\nimport { ReadFlaunchSDK, ReadWriteFlaunchSDK } from \"./FlaunchSDK\";\n\n// ABI for encoding the call data\nexport const encodedCallAbi = parseAbi([\n \"function call(address to, uint256 value, bytes data)\",\n]);\n\nexport interface CallData {\n to: Address;\n value: bigint;\n data: Hex;\n}\n\nexport type CreateFlaunchCalldataParams = {\n publicClient: PublicClient;\n walletAddress?: Address;\n};\n\n/**\n * Creates a custom wallet client that returns encoded calldata instead of broadcasting transactions\n */\nexport function createCallDataWalletClient(\n publicClient: PublicClient,\n walletAddress: Address\n): WalletClient {\n if (!publicClient.chain) {\n throw new Error(\"publicClient must be configured with a chain\");\n }\n\n // Create a base wallet client with the chain configuration\n const baseWalletClient = createWalletClient({\n chain: publicClient.chain,\n transport: http(),\n });\n\n // Override the wallet client methods to return encoded calldata\n const callDataWalletClient = baseWalletClient.extend((client) => ({\n // Override the account-related methods to return the provided walletAddress\n get account() {\n return {\n address: walletAddress,\n type: \"json-rpc\" as const,\n } as any;\n },\n\n async getAddresses() {\n return [walletAddress];\n },\n\n async requestAddresses() {\n return [walletAddress];\n },\n\n // Override writeContract to return encoded calldata instead of broadcasting\n async writeContract(args: any) {\n const to = args.address as Address;\n const value = (args.value ?? 0n) as bigint;\n\n // Encode the function call data\n const calldata = encodeFunctionData({\n abi: args.abi,\n functionName: args.functionName,\n args: args.args,\n }) as Hex;\n\n // Encode the call using the standard call format\n const encodedCall = encodeFunctionData({\n abi: encodedCallAbi,\n functionName: \"call\",\n args: [to, value, calldata],\n }) as Hex;\n\n return encodedCall;\n },\n\n // Override sendTransaction to return encoded calldata instead of broadcasting\n async sendTransaction(args: any) {\n const to = args.to as Address;\n const value = (args.value ?? 0n) as bigint;\n const data = (args.data ?? \"0x\") as Hex;\n\n // Encode the call using the standard call format\n const encodedCall = encodeFunctionData({\n abi: encodedCallAbi,\n functionName: \"call\",\n args: [to, value, data],\n }) as Hex;\n\n return encodedCall;\n },\n\n // Override signTransaction to return encoded calldata (for consistency)\n async signTransaction(args: any) {\n const to = args.to as Address;\n const value = (args.value ?? 0n) as bigint;\n const data = (args.data ?? \"0x\") as Hex;\n\n const encodedCall = encodeFunctionData({\n abi: encodedCallAbi,\n functionName: \"call\",\n args: [to, value, data],\n }) as Hex;\n\n return encodedCall;\n },\n }));\n\n return callDataWalletClient;\n}\n\n/**\n * Creates a read-only Flaunch SDK instance with only public client\n * @param params - Parameters with only publicClient\n * @returns ReadFlaunchSDK for read-only operations\n * @throws Error if publicClient.chain is not configured\n */\nexport function createFlaunchCalldata(\n params: Omit<CreateFlaunchCalldataParams, \"walletAddress\">\n): ReadFlaunchSDK;\n/**\n * Creates a read-write Flaunch SDK instance that returns encoded calldata instead of broadcasting transactions\n * @param params - Parameters containing publicClient and walletAddress\n * @returns ReadWriteFlaunchSDK instance configured for calldata generation\n * @throws Error if publicClient.chain is not configured\n */\nexport function createFlaunchCalldata(\n params: Required<CreateFlaunchCalldataParams>\n): ReadWriteFlaunchSDK;\n\n/**\n * Creates a Flaunch SDK instance that returns encoded calldata instead of broadcasting transactions\n * @param params - Parameters containing publicClient and optionally walletAddress\n * @returns ReadFlaunchSDK if only publicClient is provided, ReadWriteFlaunchSDK if walletAddress is also provided\n * @throws Error if publicClient.chain is not configured\n */\nexport function createFlaunchCalldata(params: CreateFlaunchCalldataParams) {\n const { publicClient, walletAddress } = params;\n\n if (!publicClient.chain) {\n throw new Error(\"publicClient must be configured with a chain\");\n }\n\n const chainId = publicClient.chain.id;\n\n // Return appropriate SDK type based on whether walletAddress is provided\n if (walletAddress) {\n // Create custom wallet client that returns calldata\n const callDataWalletClient = createCallDataWalletClient(\n publicClient,\n walletAddress\n );\n\n // Create Drift with the custom wallet client\n const drift = createDrift({\n publicClient,\n walletClient: callDataWalletClient,\n });\n\n return new ReadWriteFlaunchSDK(chainId, drift);\n } else {\n // Create read-only SDK with only public client\n const drift = createDrift({ publicClient });\n return new ReadFlaunchSDK(chainId, drift);\n }\n}\n\n/**\n * Decodes the result from SDK methods into transaction object\n * @param encodedCall - The result returned by SDK methods\n * @returns Call data containing to, value, and data\n */\nexport function decodeCallData(encodedCall: Hex): CallData {\n const decodedCall = decodeFunctionData({\n abi: encodedCallAbi,\n data: encodedCall,\n });\n\n return {\n to: decodedCall.args[0] as Address,\n value: decodedCall.args[1] as bigint,\n data: decodedCall.args[2] as Hex,\n };\n}\n\n/**\n * Convenience function to call an SDK method and automatically parse the result as transaction object\n * @param sdkMethod - A function that returns a Promise<Hex> (encoded calldata)\n * @returns Promise<CallData> with decoded transaction parameters\n */\nexport async function parseCall<T extends (...args: any[]) => Promise<Hex>>(\n sdkMethod: T\n): Promise<CallData> {\n const encodedCall = await sdkMethod();\n return decodeCallData(encodedCall);\n}\n\n/**\n * Type helper for SDK methods that return encoded calldata\n */\nexport type CallDataMethod<T extends any[] = any[]> = (\n ...args: T\n) => Promise<Hex>;\n\n/**\n * Type helper for the result of a calldata operation\n */\nexport type CallDataResult = Promise<CallData>;\n","import { ReadFlaunchSDK, ReadWriteFlaunchSDK } from \"./sdk/FlaunchSDK\";\n\nexport * from \"./abi\";\nexport * from \"./addresses\";\nexport * from \"./helpers\";\nexport * from \"./utils/univ4\";\nexport * from \"./utils/parseSwap\";\nexport * from \"./utils/slippage\";\nexport * from \"./utils/swap\";\nexport * from \"./utils/creatorVaults\";\nexport * from \"./types\";\n\nexport type {\n BuySwapLog,\n SellSwapLog,\n BaseSwapLog,\n PoolCreatedLogs,\n PoolSwapLog,\n} from \"./clients/FlaunchPositionManagerClient\";\n\nexport {\n handleHashOf,\n normalizeHandle,\n HANDLE_RE,\n} from \"./clients/XHandleClaimsClient\";\n\nexport { ReadIndexerSubscriber } from \"./clients/IndexerSubscriberClient\";\nexport { ReadDividendVault, ReadWriteDividendVault } from \"./clients/DividendVaultClient\";\nexport {\n ReadMemecoinDividends,\n ReadWriteMemecoinDividends,\n} from \"./clients/MemecoinDividendsClient\";\nexport type { FlaunchWithVaultParams, FlaunchWithVaultIPFSParams } from \"./clients/FlaunchZapClient\";\nexport { ReadPoolManager } from \"./clients/PoolManagerClient\";\n\nexport type { UbiEntitlement } from \"./sdk/FlaunchSDK\";\n\nexport { ReadFlaunchSDK, ReadWriteFlaunchSDK };\nexport { createFlaunch } from \"./sdk/factory\";\nexport type { CreateFlaunchParams } from \"./sdk/factory\";\nexport { createDrift } from \"./sdk/drift\";\n\n// Calldata generation exports\nexport {\n createFlaunchCalldata,\n decodeCallData,\n parseCall,\n createCallDataWalletClient,\n encodedCallAbi,\n} from \"./sdk/calldata\";\nexport type {\n CreateFlaunchCalldataParams,\n CallData,\n CallDataMethod,\n CallDataResult,\n} from \"./sdk/calldata\";\n\nexport const FlaunchSDK = {\n ReadFlaunchSDK,\n ReadWriteFlaunchSDK,\n};\n\n// ubi.fun-branded aliases. Internals keep the upstream Flaunch names so they\n// match the deployed contract ABIs and stay diffable against flaunch-sdk.\nexport {\n ReadFlaunchSDK as ReadUbiSDK,\n ReadWriteFlaunchSDK as ReadWriteUbiSDK,\n};\nexport { createFlaunch as createUbiSDK } from \"./sdk/factory\";\nexport type { CreateFlaunchParams as CreateUbiSDKParams } from \"./sdk/factory\";\nexport { createFlaunchCalldata as createUBICalldata } from \"./sdk/calldata\";\nexport type { CreateFlaunchCalldataParams as CreateUBICalldataParams } from \"./sdk/calldata\";\n\nexport const UbiSDK = {\n ReadUbiSDK: ReadFlaunchSDK,\n ReadWriteUbiSDK: ReadWriteFlaunchSDK,\n};\n","// Generated from AddressFeeSplitManager (approved earnings-split implementation).\n// Source artifact: AddressFeeSplitManager.sol/AddressFeeSplitManager.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const AddressFeeSplitManagerAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_treasuryManagerFactory\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_feeEscrowRegistry\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"receive\",\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_CREATOR_SHARE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_OWNER_SHARE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"VALID_SHARE_TOTAL\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"amountClaimed\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_claimed\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balances\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"balance_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claim\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claimableOwnerFees\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"creator\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"creatorFees\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"creatorShare\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"creatorTotalClaimed\",\n \"inputs\": [\n {\n \"name\": \"_creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_claimed\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"deposit\",\n \"inputs\": [\n {\n \"name\": \"_flaunchToken\",\n \"type\": \"tuple\",\n \"internalType\": \"struct ITreasuryManager.FlaunchToken\",\n \"components\": [\n {\n \"name\": \"flaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"_creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"feeEscrowRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IFeeEscrowRegistry\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunchTokenInternalIds\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_internalId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getCreatorFee\",\n \"inputs\": [\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"creatorFee_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getOwnerFee\",\n \"inputs\": [\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"ownerFee_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getPoolId\",\n \"inputs\": [\n {\n \"name\": \"_flaunchToken\",\n \"type\": \"tuple\",\n \"internalType\": \"struct ITreasuryManager.FlaunchToken\",\n \"components\": [\n {\n \"name\": \"flaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"poolId_\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialize\",\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialized\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"internalIds\",\n \"inputs\": [\n {\n \"name\": \"_internalId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"flaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isValidCreator\",\n \"inputs\": [\n {\n \"name\": \"_creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isValidRecipient\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"managerFees\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"managerOwner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nextInternalId\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownerFees\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownerShare\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pendingCreatorFees\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"balance_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pendingOwnerFees\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"permissions\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IManagerPermissions\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"recipientShare\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"rescue\",\n \"inputs\": [\n {\n \"name\": \"_flaunchToken\",\n \"type\": \"tuple\",\n \"internalType\": \"struct ITreasuryManager.FlaunchToken\",\n \"components\": [\n {\n \"name\": \"flaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setCreator\",\n \"inputs\": [\n {\n \"name\": \"_flaunchToken\",\n \"type\": \"tuple\",\n \"internalType\": \"struct ITreasuryManager.FlaunchToken\",\n \"components\": [\n {\n \"name\": \"flaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"_creator\",\n \"type\": \"address\",\n \"internalType\": \"address payable\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setPermissions\",\n \"inputs\": [\n {\n \"name\": \"_permissions\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"splitFees\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenPoolId\",\n \"inputs\": [\n {\n \"name\": \"_internalId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenTimelock\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_unlockedAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenTotalClaimed\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"_claimed\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokens\",\n \"inputs\": [\n {\n \"name\": \"_creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"flaunchTokens_\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct ITreasuryManager.FlaunchToken[]\",\n \"components\": [\n {\n \"name\": \"flaunch\",\n \"type\": \"address\",\n \"internalType\": \"contract Flaunch\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferManagerOwnership\",\n \"inputs\": [\n {\n \"name\": \"_newManagerOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferRecipientShare\",\n \"inputs\": [\n {\n \"name\": \"_newRecipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"treasuryManagerFactory\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract TreasuryManagerFactory\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"CreatorShareInitialized\",\n \"inputs\": [\n {\n \"name\": \"_creatorShare\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"CreatorUpdated\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_creator\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ETHReceivedFromUnknownSource\",\n \"inputs\": [\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ManagerInitialized\",\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_params\",\n \"type\": \"tuple\",\n \"indexed\": false,\n \"internalType\": \"struct AddressFeeSplitManager.InitializeParams\",\n \"components\": [\n {\n \"name\": \"creatorShare\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"ownerShare\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"recipientShares\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct AddressFeeSplitManager.RecipientShare[]\",\n \"components\": [\n {\n \"name\": \"recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"share\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ]\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ManagerOwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"_previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnerShareInitialized\",\n \"inputs\": [\n {\n \"name\": \"_ownerShare\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PermissionsUpdated\",\n \"inputs\": [\n {\n \"name\": \"_permissions\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RecipientAdded\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_share\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RecipientShareTransferred\",\n \"inputs\": [\n {\n \"name\": \"_oldRecipient\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_newRecipient\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_share\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RevenueClaimed\",\n \"inputs\": [\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_amountClaimed\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TreasuryEscrowed\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_owner\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TreasuryReclaimed\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_sender\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_recipient\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TreasuryTimelocked\",\n \"inputs\": [\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_unlockedAt\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CreatorShareAlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"FlaunchContractNotValid\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InsufficientSharesToTransfer\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidClaimer\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidCreator\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidCreatorAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidCreatorShare\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidOwnerShare\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidRecipient\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidRecipientShareTotal\",\n \"inputs\": [\n {\n \"name\": \"_share\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_validShare\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidShareTotal\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidShareTransferRecipient\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotManagerOwner\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnerShareAlreadyInitialized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"Reentrancy\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TokenTimelocked\",\n \"inputs\": [\n {\n \"name\": \"_unlockedAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"UnableToSendRevenue\",\n \"inputs\": [\n {\n \"name\": \"_reason\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"UnknownFlaunchToken\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"UnknownPoolId\",\n \"inputs\": []\n }\n] as const;\n","// Generated from HolderShareFeeCalculator.\n// Source artifact: HolderShareFeeCalculator.sol/HolderShareFeeCalculator.json (FOUNDRY_PROFILE=arc forge build). Do not hand-edit;\n// regenerate from the contracts repo when the deployed bytecode changes.\nexport const HolderShareFeeCalculatorAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_positionManager\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_flaunch\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_managerFactory\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_dividendVaultImplementation\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_FEE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MIN_CREATOR_ALLOCATION\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MIN_FEE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"determineSwapFee\",\n \"inputs\": [\n {\n \"name\": \"_poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IPoolManager.SwapParams\",\n \"components\": [\n {\n \"name\": \"zeroForOne\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"amountSpecified\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ]\n },\n {\n \"name\": \"_baseFee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"dividendVaultImplementation\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"flaunch\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IFlaunchLookup\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"managerFactory\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IManagerImplementationLookup\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolConfig\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"fee_\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tokenId_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"memecoin_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"positionManager\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setFlaunchParams\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_params\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"trackSwap\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_poolKey\",\n \"type\": \"tuple\",\n \"internalType\": \"struct PoolKey\",\n \"components\": [\n {\n \"name\": \"currency0\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"currency1\",\n \"type\": \"address\",\n \"internalType\": \"Currency\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n },\n {\n \"name\": \"tickSpacing\",\n \"type\": \"int24\",\n \"internalType\": \"int24\"\n },\n {\n \"name\": \"hooks\",\n \"type\": \"address\",\n \"internalType\": \"contract IHooks\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IPoolManager.SwapParams\",\n \"components\": [\n {\n \"name\": \"zeroForOne\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"amountSpecified\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"sqrtPriceLimitX96\",\n \"type\": \"uint160\",\n \"internalType\": \"uint160\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"int256\",\n \"internalType\": \"BalanceDelta\"\n },\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"PoolRegistered\",\n \"inputs\": [\n {\n \"name\": \"_poolId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"PoolId\"\n },\n {\n \"name\": \"_tokenId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_fee\",\n \"type\": \"uint24\",\n \"indexed\": false,\n \"internalType\": \"uint24\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"CreatorAllocationTooLow\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CreatorNotInDividendVault\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"FeeOutOfRange\",\n \"inputs\": [\n {\n \"name\": \"_fee\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"NotPositionManager\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"PoolMismatch\",\n \"inputs\": []\n }\n] as const;\n"],"names":["ARC_MAINNET_CHAIN_ID","ARC_TESTNET_CHAIN_ID","USDC_ADDRESS","NativeTokenAddress","FlaunchZapAddress","FlaunchPositionManagerAddress","FlaunchAddress","FairLaunchAddress","BidWallAddress","PoolSwapAddress","TreasuryManagerFactoryAddress","AddressFeeSplitManagerAddress","DividendVaultAddress","HolderShareFeeCalculatorAddress","FeeEscrowAddress","ReferralEscrowAddress","XHandleClaimsAddress","UniversalRewardsDistributorAddress","PoolManagerAddress","QuoterAddress","StateViewAddress","IndexerSubscriberAddress","ApiBaseUrl","IndexerSubscriberAbi","type","inputs","stateMutability","name","internalType","components","outputs","indexed","anonymous","ReadIndexerSubscriber","constructor","address","drift","createDrift","Error","this","contract","abi","poolIndex","poolId","read","_poolId","isUbiPool","memecoin_","FlaunchPositionManagerAbi","getAmountWithSlippage","amount","slippage","swapType","BigInt","parseEther","parseSwapData","args","usdcIsCurrencyZero","flAmount0","flAmount1","flFee0","flFee1","ispAmount0","ispAmount1","ispFee0","ispFee1","uniAmount0","uniAmount1","uniFee0","uniFee1","currency0Delta","currency1Delta","currency0Fees","currency1Fees","feesIsInUSDC","absCurrency0Delta","absCurrency1Delta","absCurrency0Fees","absCurrency1Fees","fees","isInUSDC","delta","coinsBought","usdcSold","coinsSold","usdcBought","InitialPriceAbi","ReadInitialPrice","getFlaunchingFee","params","_sender","sender","_initialPriceParams","initialPriceParams","getSqrtPriceX96","_flipped","zeroAddress","ReadFlaunchPositionManager","TOTAL_SUPPLY","getFeeCalculator","forFairLaunch","_isFairLaunch","isValidCoin","coinAddress","_token","tickSpacing","poolKey","poolFees","_poolKey","getPoolFeeDistribution","readInitialPrice","flaunchingFee","slippagePercent","toFixed","toString","watchPoolCreated","onPoolCreated","startBlockNumber","intervalId","logs","isFetchingFromStart","lastBlockNumber","getBlockNumber","pollEvents","async","currentBlockNumber","_logs","getEvents","fromBlock","toBlock","logsWithTimestamps","Promise","all","reverse","map","log","block","getBlock","blockNumber","timestamp","Number","length","error","console","setInterval","pollPoolCreatedNow","cleanup","clearInterval","parseSwapTx","txHash","tx","getTransaction","hash","targetLog","find","transactionHash","swapData","watchPoolSwap","onPoolSwap","filterByPoolId","filter","pollPoolSwapNow","bytes32ToUint256","value","hexToBigInt","uint256ToBytes32","pad","encodeAbiParameters","size","dir","PoolManagerAbi","ReadPoolManager","poolStateSlot","POOLS_SLOT","keccak256","encodePacked","poolSlot0","stateSlot","result","slot","data","Array","isArray","dataAsBigInt","sqrtPriceX96","tickRaw","tick","protocolFee","lpFee","positionInfo","owner","tickLower","tickUpper","salt","saltBytes32","stringToHex","positionKey","positionMapping","positionInfoSlot","startSlot","nSlots","words","blob","i","sliceHex","liquidity","feeGrowthInside0LastX128","feeGrowthInside1LastX128","FairLaunchAbi","ReadFairLaunch","fairLaunchDuration","startsAt","endsAt","fairLaunchInfo","isFairLaunchActive","closed","Date","getTime","BidwallAbi","ReadBidWall","position","poolInfo","FlaunchZapAbi","TreasuryManagerFactoryAbi","IPFS_GATEWAYS","currentGatewayIndex","resolveIPFS","startsWith","cid","slice","gateway","resolveIPFSCandidates","METADATA_MAX_BYTES","fetchTokenUriMetadata","url","test","axios","get","timeout","maxRedirects","maxContentLength","maxBodyLength","fetchTokenUriMetadataWithFallback","urls","lastError","uploadToUbiApi","bytes","mimeType","base64Image","base64Data","split","byteCharacters","atob","Uint8Array","charCodeAt","decodeBase64Image","formData","FormData","append","Blob","symbol","description","websiteUrl","discordUrl","twitterUrl","telegramUrl","response","post","apiUrl","tokenUri","image","isAxiosError","message","generateTokenUri","chainId","metadata","TickFinder","MIN_TICK","MAX_TICK","Q192","getPoolId","packed","concat","currency0","currency1","toHex","fee","hooks","orderPoolKey","toLowerCase","getValidTick","roundDown","validTick","Math","trunc","getAmount0ForLiquidity","sqrtRatioAX96","sqrtRatioBX96","sqrtRatioA","sqrtRatioB","getAmount1ForLiquidity","getSqrtPriceX96FromTick","absTick","ratio","resultShifted","calculateUnderlyingTokenBalances","tickCurrent","sqrtPriceCurrentX96","sqrtPriceLowerX96","sqrtPriceUpperX96","amount0","amount1","maxLiquidityForAmount0Precise","maxLiquidityForAmount1","referrerHookData","referrer","isAddress","coinPoolKey","positionManagerAddress","swapDirection","side","MIN_SQRT_PRICE","MAX_SQRT_PRICE","expectedEndSqrtPriceX96","current","zeroForOne","amountIn","amountOut","end","sqrtPriceLimit","slippageBps","isInteger","multiplier","next","bigintSqrt","limit","VAULT_MIN_HOLDER_SHARE","VAULT_SHARE_DENOMINATOR","NO_VAULT_FEE_CALCULATOR_PARAMS","vaultFeeCalculatorParams","percentToVaultBps","percent","label","bps","round","isFinite","abs","encodeVaultInitializeData","total","receivers","reduce","sum","receiver","holderShare","creator","launchCalculatorState","standard","fairLaunch","vaultCalculator","vaultImplementation","vaultApproved","isZero","isAddressEqual","isOurs","vault","noVaultParams","ReadFlaunchZap","valueRequiredToFlaunch","_premineAmount","premineAmount","_slippage","readLaunchCalculatorState","positionManager","factory","approval","fn","_managerImplementation","cache","invalidateRead","resolve","ReadWriteFlaunchZap","super","flaunch","manager","treasuryManagerParams","state","writeFlaunch","flaunchWithVault","feePercent","holderSharePercent","creatorFeeAllocationPercent","splitReceivers","seen","some","push","initializeData","depositData","flaunchIPFSWithVault","feeCalculatorParams","fairLaunchPercent","initialMCapInUSDCWei","parseUnits","initialMarketCapUSD","fairLaunchInBps","creatorFeeAllocationInBps","permissions","write","_flaunchParams","initialTokenFairLaunch","creatorFeeAllocation","flaunchAt","_trustedFeeSigner","_premineSwapHookData","premineReferrer","_treasuryManagerParams","_whitelistParams","whitelistParams","merkleRoot","zeroHash","merkleIPFSHash","maxTokens","_airdropParams","airdropParams","airdropIndex","airdropAmount","airdropEndTime","flaunchIPFS","flaunchWithSplitManager","VALID_SHARE_TOTAL","receiverShares","recipient","share","totalReceiverShares","acc","curr","recipientShares","creatorShare","ownerShare","flaunchIPFSWithSplitManager","DividendVaultAbi","ReadDividendVault","memecoin","renounced","managerOwner","balances","_recipient","ReadWriteDividendVault","harvest","claim","renounce","MemecoinDividendsAbi","ReadMemecoinDividends","withdrawableDividendOf","holder","_holder","dividendsDripping","totalDividendsDistributed","ReadWriteMemecoinDividends","withdrawDividend","withdrawDividendFor","FlaunchAbi","ReadFlaunch","tokenId","_memecoin","tokenURI","_tokenId","MemecoinAbi","ReadMemecoin","decimals","totalSupply","balanceOf","user","account","allowance","spender","ReadWriteMemecoin","approve","QuoterAbi","ReadQuoter","getBuyQuoteExactInput","simulateWrite","exactAmount","hookData","getSellQuoteExactInput","getBuyQuoteExactOutput","coinOut","FeeEscrowAbi","ReadFeeEscrow","ReadWriteFeeEscrow","withdrawFees","_unwrap","ReferralEscrowAbi","ReadReferralEscrow","allocations","token","_user","ReadWriteReferralEscrow","claimTokens","tokens","_tokens","PoolSwapAbi","ReadPoolSwap","ReadWritePoolSwap","swap","_key","_params","amountSpecified","sqrtPriceLimitX96","_referrer","XHandleClaimsAbi","HANDLE_RE","normalizeHandle","handle","trim","replace","handleHashOf","trimmed","stringToBytes","ReadXHandleClaims","escrowAddress","_handleHash","boundWallet","bindNonce","ReadWriteXHandleClaims","bind","_wallet","wallet","_deadline","deadline","_signature","signature","_manager","sweep","UniversalRewardsDistributorAbi","ReadUniversalRewardsDistributor","root","pendingRoot","claimed","reward","_account","_reward","ReadWriteUniversalRewardsDistributor","_claimable","claimable","_proof","proof","ReadTreasuryManagerFactory","publicClient","getManagerDeployedAddressFromTx","receipt","waitForTransactionReceipt","event","parseEventLogs","eventName","ReadWriteTreasuryManagerFactory","TreasuryManagerAbi","ReadTreasuryManager","ReadWriteTreasuryManager","deposit","flaunchToken","_flaunchToken","_creator","_data","setPermissions","_permissions","transferManagerOwnership","newManagerOwner","_newManagerOwner","MulticallAbi","ReadMulticall","aggregate3","calls","call","target","allowFailure","callData","ReadFlaunchSDK","TICK_SPACING","defaultResolveIPFS","readPositionManager","readFeeEscrow","readReferralEscrow","readFlaunchZap","readPoolManager","readFairLaunch","readBidWall","readFlaunch","readQuoter","readXHandleClaims","readUbiPool","readIndexerSubscriber","getPositionManagerAddress","getFlaunchAddress","getFairLaunchAddress","getBidWallAddress","getFlaunchTokenIdForMemecoin","flaunchAddress","tokenUriCandidates","getCoinMetadata","external_link","website","collaborators","twitter","telegram","getCoinMetadataFromTokenId","_flaunch","getCoinMetadataFromTokenIds","batchSize","batchDelay","multicall","coinAddresses_calldata","p","encodeFunctionData","coinAddresses","calldata","r","decodeFunctionReturn","returnData","coinMetadata_calldata","forEach","adapter","coinMetadata_result","floor","results","processedResults","batch","batchResults","setTimeout","getPoolCreatedFromTx","getTransactionReceipt","decodedLog","decodeEventLog","topics","memecoinTreasury","_memecoinTreasury","currencyFlipped","_currencyFlipped","flaunchFee","_flaunchFee","filterByCoin","currentTick","currentSqrtPriceX96","coinPriceInUSDC","isUSDCZero","price","pow","COIN_DECIMALS","coinMarketCapInUSDC","priceInUSDC","parseFloat","initialTick","fairLaunchUSDCOnlyPosition","usdcAmount","coinAmount","fairLaunchCoinOnlyPosition","bidWallPosition","amount0_","amount1_","pendingEth_","pendingUsdc","creatorRevenue","referralBalance","splitBalance","managerAddress","treasuryManagerInfo","treasuryManagerAddress","readTreasuryManager","getUbiEntitlement","claimableUbi","entitlement","cumulativeWei","onChainRoot","cumulative","setIPFSResolver","resolverFn","getCoinInfo","formattedTotalSupplyInDecimals","formatUnits","isFlaunchTokenApprovedForAll","operator","erc721Abi","getCreatorVault","implementation","creatorRead","deployedFrom","dividendsOf","dividends","withdrawable","dripping","distributed","ReadWriteFlaunchSDK","readWriteFeeEscrow","readWriteReferralEscrow","readWriteFlaunchZap","readWritePoolSwap","readWriteXHandleClaims","readWriteUbiPool","readWriteTreasuryManagerFactory","createUBIWithVault","createUBIIPFSWithVault","withdrawDividends","harvestCreatorVault","requireCreatorVault","claimCreatorVault","info","createUBI","createUBIIPFS","createUBIWithSplitManager","createUBIIPFSWithSplitManager","coinBalance","getSignerAddress","clear","usdcBalance","usdc","swapAllowance","erc20","approveSwapInput","buyCoin","executeSwap","sellCoin","inputToken","quotedAmountOut","withdrawCreatorRevenue","claimReferralBalance","claimSplitEarnings","claimUbi","treasuryManagerSetPermissions","permissionsAddress","treasuryManagerTransferOwnership","setFlaunchTokenApprovalForAll","approved","addToTreasuryManager","readWriteTreasuryManager","creatorAddress","arc","defineChain","id","nativeCurrency","rpcUrls","default","http","blockExplorers","arcTestnet","testnet","chainIdToChain","walletClient","chain","createDriftOriginal","viemAdapter","createFlaunch","encodedCallAbi","parseAbi","createCallDataWalletClient","walletAddress","createWalletClient","transport","extend","client","writeContract","to","functionName","sendTransaction","signTransaction","createFlaunchCalldata","decodeCallData","encodedCall","decodedCall","decodeFunctionData","FlaunchSDK","UbiSDK","ReadUbiSDK","ReadWriteUbiSDK","sqrtRatioCurrentX96","liquidity0","liquidity1","rounded","max","min","sdkMethod","priceInput","isDirection1Per0","decimals0","decimals1","spacing","shouldGetNearestUsableTick","isNaN","inputPrice","priceRatio","rawTick"],"mappings":"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"}
|