@hammerock/cca-sdk 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/abis/auction.ts","../src/abis/factory.ts","../src/abis/auctionStateLens.ts","../src/abis/index.ts","../src/q96.ts","../src/auctionParameters.ts","../src/constants.ts","../src/client.ts","../src/discover.ts","../src/erc20.ts","../src/privateKey.ts","../src/read.ts","../src/write.ts"],"names":["parseAbiParameters","encodeAbiParameters","decodeAbiParameters","sepolia","baseSepolia","unichainSepolia","createPublicClient","http","getAbiItem","formatUnits","encodeFunctionData","decodeFunctionResult","maxUint256","balance"],"mappings":"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","file":"index.cjs","sourcesContent":["// GENERATED FILE - DO NOT EDIT.\n// Source: Uniswap/continuous-clearing-auction @ v1.1.0 (a0aabaa45d8677a4944fc04d5dea2c4b499b3d3a)\n// Contract: ContinuousClearingAuction\n// Regenerate with: ./contracts/sync-abis.sh\n\nexport const auctionAbi = [{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_totalSupply\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"_parameters\",\"type\":\"tuple\",\"internalType\":\"struct AuctionParameters\",\"components\":[{\"name\":\"currency\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokensRecipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"fundsRecipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"startBlock\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"endBlock\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"claimBlock\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"tickSpacing\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"validationHook\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"floorPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"requiredCurrencyRaised\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"auctionStepsData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MAX_BID_PRICE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_BLOCK_NUMBER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_TICK_PTR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bids\",\"inputs\":[{\"name\":\"bidId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Bid\",\"components\":[{\"name\":\"startBlock\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"startCumulativeMps\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"exitedBlock\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amountQ96\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokensFilled\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkpoint\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Checkpoint\",\"components\":[{\"name\":\"clearingPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"currencyRaisedAtClearingPriceQ96_X7\",\"type\":\"uint256\",\"internalType\":\"ValueX7\"},{\"name\":\"cumulativeMpsPerPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"cumulativeMps\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"prev\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"next\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"checkpoints\",\"inputs\":[{\"name\":\"blockNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Checkpoint\",\"components\":[{\"name\":\"clearingPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"currencyRaisedAtClearingPriceQ96_X7\",\"type\":\"uint256\",\"internalType\":\"ValueX7\"},{\"name\":\"cumulativeMpsPerPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"cumulativeMps\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"prev\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"next\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimTokens\",\"inputs\":[{\"name\":\"_bidId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"claimTokensBatch\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_bidIds\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"clearingPrice\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currency\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currencyRaised\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currencyRaisedQ96_X7\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"ValueX7\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"endBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"exitBid\",\"inputs\":[{\"name\":\"_bidId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"exitPartiallyFilledBid\",\"inputs\":[{\"name\":\"_bidId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_lastFullyFilledCheckpointBlock\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_outbidBlock\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"floorPrice\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceIterateOverTicks\",\"inputs\":[{\"name\":\"_untilTickPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"fundsRecipient\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isGraduated\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"lastCheckpointedBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestCheckpoint\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Checkpoint\",\"components\":[{\"name\":\"clearingPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"currencyRaisedAtClearingPriceQ96_X7\",\"type\":\"uint256\",\"internalType\":\"ValueX7\"},{\"name\":\"cumulativeMpsPerPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"cumulativeMps\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"prev\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"next\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"lbpInitializationParams\",\"inputs\":[],\"outputs\":[{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"struct LBPInitializationParams\",\"components\":[{\"name\":\"initialPriceX96\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokensSold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"currencyRaised\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"nextActiveTickPrice\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"nextBidId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"onTokensReceived\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pointer\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"step\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct AuctionStep\",\"components\":[{\"name\":\"mps\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"startBlock\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"endBlock\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"submitBid\",\"inputs\":[{\"name\":\"_maxPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_amount\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_hookData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"submitBid\",\"inputs\":[{\"name\":\"_maxPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_amount\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_prevTickPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_hookData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sumCurrencyDemandAboveClearingQ96\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"sweepCurrency\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"sweepCurrencyBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sweepUnsoldTokens\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"sweepUnsoldTokensBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tickSpacing\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ticks\",\"inputs\":[{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Tick\",\"components\":[{\"name\":\"next\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"currencyDemandQ96\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"token\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tokensRecipient\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalCleared\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalClearedQ96_X7\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"ValueX7\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validationHook\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contract IValidationHook\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AuctionStepRecorded\",\"inputs\":[{\"name\":\"startBlock\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"endBlock\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"mps\",\"type\":\"uint24\",\"indexed\":false,\"internalType\":\"uint24\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BidExited\",\"inputs\":[{\"name\":\"bidId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"owner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"tokensFilled\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"currencyRefunded\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BidSubmitted\",\"inputs\":[{\"name\":\"id\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"owner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"price\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"amount\",\"type\":\"uint128\",\"indexed\":false,\"internalType\":\"uint128\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckpointUpdated\",\"inputs\":[{\"name\":\"blockNumber\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"clearingPrice\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"cumulativeMps\",\"type\":\"uint24\",\"indexed\":false,\"internalType\":\"uint24\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ClearingPriceUpdated\",\"inputs\":[{\"name\":\"blockNumber\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"clearingPrice\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CurrencySwept\",\"inputs\":[{\"name\":\"fundsRecipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"currencyAmount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NextActiveTickUpdated\",\"inputs\":[{\"name\":\"price\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TickInitialized\",\"inputs\":[{\"name\":\"price\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokensClaimed\",\"inputs\":[{\"name\":\"bidId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"owner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"tokensFilled\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokensReceived\",\"inputs\":[{\"name\":\"totalSupply\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokensSwept\",\"inputs\":[{\"name\":\"tokensRecipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"tokensAmount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AuctionIsNotFinalized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AuctionIsNotOver\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AuctionIsOver\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AuctionNotStarted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AuctionSoldOut\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BatchClaimDifferentOwner\",\"inputs\":[{\"name\":\"expectedOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"receivedOwner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"BidAlreadyExited\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BidAmountTooSmall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BidIdDoesNotExist\",\"inputs\":[{\"name\":\"bidId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"BidMustBeAboveClearingPrice\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BidNotExited\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BidOwnerCannotBeZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotExitBid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotPartiallyExitBidBeforeEndBlock\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotPartiallyExitBidBeforeGraduation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotSweepCurrency\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotSweepTokens\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotUpdateUninitializedTick\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CheckpointBlockNotIncreasing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimBlockIsBeforeEndBlock\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrencyIsNotNative\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FloorPriceAndTickSpacingGreaterThanMaxBidPrice\",\"inputs\":[{\"name\":\"nextTick\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maxBidPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"FloorPriceAndTickSpacingTooLarge\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FloorPriceIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FloorPriceTooLow\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FundsRecipientIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAuctionDataLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidBidPriceTooHigh\",\"inputs\":[{\"name\":\"maxPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maxBidPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidBidUnableToClear\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEndBlock\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEndBlockGivenStepData\",\"inputs\":[{\"name\":\"actualEndBlock\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"expectedEndBlock\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidLastFullyFilledCheckpointHint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOutbidBlockCheckpointHint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStepDataMps\",\"inputs\":[{\"name\":\"actualMps\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"expectedMps\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidTickPrice\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTokenAmountReceived\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MpsRemainingIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NativeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotClaimable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotGraduated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Reentrancy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StepBlockDeltaCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StepLib__InvalidOffsetNotAtStepBoundary\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StepLib__InvalidOffsetTooLarge\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TickHintMustBeGreaterThanNextActiveTickPrice\",\"inputs\":[{\"name\":\"tickPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nextActiveTickPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"TickNotInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TickPreviousPriceInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TickPriceNotAtBoundary\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TickPriceNotIncreasing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TickSpacingTooSmall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TokenAndCurrencyCannotBeTheSame\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TokenIsAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TokenTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TokensNotReceived\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TokensRecipientIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TotalSupplyIsTooLarge\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TotalSupplyIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidationHookCallFailed\",\"inputs\":[{\"name\":\"reason\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}] as const;\n","// GENERATED FILE - DO NOT EDIT.\n// Source: Uniswap/continuous-clearing-auction @ v1.1.0 (a0aabaa45d8677a4944fc04d5dea2c4b499b3d3a)\n// Contract: ContinuousClearingAuctionFactory\n// Regenerate with: ./contracts/sync-abis.sh\n\nexport const factoryAbi = [{\"type\":\"function\",\"name\":\"getAuctionAddress\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"configData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initializeDistribution\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"configData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"distributionContract\",\"type\":\"address\",\"internalType\":\"contract IDistributionContract\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AuctionCreated\",\"inputs\":[{\"name\":\"auction\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"configData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidTokenAmount\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}] as const;\n","// GENERATED FILE - DO NOT EDIT.\n// Source: Uniswap/continuous-clearing-auction @ v1.1.0 (a0aabaa45d8677a4944fc04d5dea2c4b499b3d3a)\n// Contract: AuctionStateLens\n// Regenerate with: ./contracts/sync-abis.sh\n\nexport const auctionStateLensAbi = [{\"type\":\"function\",\"name\":\"revertWithState\",\"inputs\":[{\"name\":\"auction\",\"type\":\"address\",\"internalType\":\"contract IContinuousClearingAuction\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"state\",\"inputs\":[{\"name\":\"auction\",\"type\":\"address\",\"internalType\":\"contract IContinuousClearingAuction\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct AuctionState\",\"components\":[{\"name\":\"checkpoint\",\"type\":\"tuple\",\"internalType\":\"struct Checkpoint\",\"components\":[{\"name\":\"clearingPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"currencyRaisedAtClearingPriceQ96_X7\",\"type\":\"uint256\",\"internalType\":\"ValueX7\"},{\"name\":\"cumulativeMpsPerPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"cumulativeMps\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"prev\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"next\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"currencyRaised\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"totalCleared\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isGraduated\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"error\",\"name\":\"CheckpointFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRevertReasonLength\",\"inputs\":[]}] as const;\n\n/** Deployed runtime bytecode, for eth_call state-override reads.\n * Lets Beacon run the lens without deploying it. */\nexport const auctionStateLensDeployedBytecode = \"0x608060405234801561000f575f80fd5b5060043610610034575f3560e01c806321a13d371461003857806331e658a51461004d575b5f80fd5b61004b61004636600461048a565b610076565b005b61006061005b36600461048a565b6102c7565b60405161006d91906104bd565b60405180910390f35b8073ffffffffffffffffffffffffffffffffffffffff1663c2c4c5c16040518163ffffffff1660e01b815260040160c0604051808303815f875af19250505080156100fc575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526100f991810190610620565b60015b610132576040517fd027b09000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60405180608001604052808381526020018473ffffffffffffffffffffffffffffffffffffffff1663998ba4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561018d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101b1919061063a565b81526020018473ffffffffffffffffffffffffffffffffffffffff16633e9d91746040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101ff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610223919061063a565b81526020018473ffffffffffffffffffffffffffffffffffffffff16639e5f26026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610271573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102959190610660565b151581525090505f816040516020016102ae91906104bd565b6040516020818303038152906040529050805160208201fd5b60408051610140810182525f6080820181815260a0830182905260c0830182905260e083018290526101008301829052610120830182905282526020820181905291810182905260608101919091526040517f21a13d3700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015230906321a13d37906024015f604051808303815f87803b15801561037a575f80fd5b505af192505050801561038b575060015b6103ce573d8080156103b8576040519150601f19603f3d011682016040523d82523d5f602084013e6103bd565b606091505b506103c7816103d3565b9392505050565b919050565b60408051610140810182525f6080820181815260a0830182905260c0830182905260e083018290526101008301829052610120830182905282526020820181905291810182905260608101919091528151610120146104705760208251111561043e57815160208301fd5b6040517fa75357f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818060200190518101906104849190610679565b92915050565b5f6020828403121561049a575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146103c7575f80fd5b5f61012082019050825180518352602081015160208401526040810151604084015262ffffff606082015116606084015267ffffffffffffffff608082015116608084015267ffffffffffffffff60a08201511660a084015250602083015160c0830152604083015160e0830152606083015161053f61010084018215159052565b5092915050565b60405160c0810167ffffffffffffffff8111828210171561058e577f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405290565b805167ffffffffffffffff811681146103ce575f80fd5b5f60c082840312156105bb575f80fd5b6105c3610546565b825181526020808401519082015260408084015190820152606083015190915062ffffff811681146105f3575f80fd5b606082015261060460808301610594565b608082015261061560a08301610594565b60a082015292915050565b5f60c08284031215610630575f80fd5b6103c783836105ab565b5f6020828403121561064a575f80fd5b5051919050565b805180151581146103ce575f80fd5b5f60208284031215610670575f80fd5b6103c782610651565b5f61012082840312801561068b575f80fd5b506040516080810167ffffffffffffffff811182821017156106d4577f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040526106e184846105ab565b815260c0830151602082015260e083015160408201526107046101008401610651565b6060820152939250505056fea164736f6c634300081a000a\" as const;\n","// GENERATED FILE - DO NOT EDIT.\n// Source: Uniswap/continuous-clearing-auction @ v1.1.0 (a0aabaa45d8677a4944fc04d5dea2c4b499b3d3a)\n// Regenerate with: ./contracts/sync-abis.sh\n\n/** Upstream tag these ABIs were compiled from. */\nexport const UPSTREAM_TAG = \"v1.1.0\";\n/** Exact upstream commit these ABIs were compiled from. */\nexport const UPSTREAM_COMMIT = \"a0aabaa45d8677a4944fc04d5dea2c4b499b3d3a\";\n\nexport { auctionAbi } from \"./auction\";\nexport { factoryAbi } from \"./factory\";\nexport { auctionStateLensAbi, auctionStateLensDeployedBytecode } from \"./auctionStateLens\";\n","/**\r\n * Q96 fixed-point helpers.\r\n *\r\n * CCA encodes prices as Q96: a value multiplied by 2^96. This module is the\r\n * ONLY place in Beacon that converts between Q96 and human-readable numbers.\r\n * The web app, widget, bot and agent all import from here rather than\r\n * reimplementing `/ 2 ** 96` with floating point.\r\n *\r\n * Everything here is exact BigInt arithmetic except {@link q96ToNumber}, which\r\n * is explicitly lossy and documented as such.\r\n */\r\n\r\n/** 2^96 - the Q96 fixed-point scaling factor. */\r\nexport const Q96 = 2n ** 96n;\r\n\r\n/**\r\n * MPS (\"milli-bips\", one thousandth of a basis point) = 1e7.\r\n *\r\n * The auction tracks how much of its supply SCHEDULE has been released as a\r\n * `cumulativeMps` out of `MPS`. Note this tracks the schedule, not sales: an\r\n * auction that ends with no bids still reaches `MPS`.\r\n * Mirrors `ConstantsLib.MPS` upstream.\r\n */\r\nexport const MPS = 10_000_000n;\r\n\r\n/** X7 values are scaled by MPS to avoid intermediate division. Mirrors `ValueX7`. */\r\nexport const X7 = MPS;\r\n\r\nconst DECIMAL_PATTERN = /^-?\\d+(\\.\\d+)?$/;\r\n\r\n/**\r\n * Convert a Q96 value to an exact decimal string.\r\n *\r\n * Exact for the requested precision - the fractional part is computed with\r\n * BigInt division and truncated (never rounded up), so the result never\r\n * overstates a price.\r\n *\r\n * @param valueQ96 The Q96-encoded value.\r\n * @param precision Fractional digits to emit. Defaults to 18.\r\n * @param trimTrailingZeros Drop trailing fractional zeros. Defaults to true.\r\n */\r\nexport function q96ToDecimalString(\r\n valueQ96: bigint,\r\n precision = 18,\r\n trimTrailingZeros = true,\r\n): string {\r\n if (precision < 0 || !Number.isInteger(precision)) {\r\n throw new TypeError(\r\n `q96ToDecimalString: precision must be a non-negative integer, got ${precision}`,\r\n );\r\n }\r\n\r\n const negative = valueQ96 < 0n;\r\n const magnitude = negative ? -valueQ96 : valueQ96;\r\n\r\n const whole = magnitude / Q96;\r\n const remainder = magnitude % Q96;\r\n\r\n if (precision === 0) {\r\n return `${negative && whole !== 0n ? \"-\" : \"\"}${whole}`;\r\n }\r\n\r\n const scale = 10n ** BigInt(precision);\r\n // Truncating division: never rounds a price up.\r\n const fractional = (remainder * scale) / Q96;\r\n\r\n let fractionalDigits = fractional.toString().padStart(precision, \"0\");\r\n if (trimTrailingZeros) {\r\n fractionalDigits = fractionalDigits.replace(/0+$/, \"\");\r\n }\r\n\r\n const sign = negative && (whole !== 0n || fractional !== 0n) ? \"-\" : \"\";\r\n return fractionalDigits.length > 0 ? `${sign}${whole}.${fractionalDigits}` : `${sign}${whole}`;\r\n}\r\n\r\n/**\r\n * Convert a Q96 value to a JavaScript number.\r\n *\r\n * LOSSY. `number` is a float64, so values beyond ~2^53 or with more than ~15\r\n * significant digits lose precision. Use for charts, sorting and display only -\r\n * never for anything that gets sent back on-chain. Use\r\n * {@link q96ToDecimalString} when exactness matters.\r\n */\r\nexport function q96ToNumber(valueQ96: bigint): number {\r\n return Number(q96ToDecimalString(valueQ96, 20, false));\r\n}\r\n\r\n/**\r\n * Convert a decimal value to Q96, exactly.\r\n *\r\n * Accepts a string (preferred - no float rounding) or a number. Fractional\r\n * digits beyond what Q96 can represent are truncated.\r\n *\r\n * @throws TypeError on a malformed or non-finite input.\r\n */\r\nexport function decimalToQ96(decimal: string | number): bigint {\r\n const asString = typeof decimal === \"number\" ? numberToDecimalString(decimal) : decimal.trim();\r\n\r\n if (!DECIMAL_PATTERN.test(asString)) {\r\n throw new TypeError(`decimalToQ96: expected a decimal string, got \"${decimal}\"`);\r\n }\r\n\r\n const negative = asString.startsWith(\"-\");\r\n const unsigned = negative ? asString.slice(1) : asString;\r\n const [wholePart = \"0\", fractionalPart = \"\"] = unsigned.split(\".\");\r\n\r\n const scale = 10n ** BigInt(fractionalPart.length);\r\n const scaledValue =\r\n BigInt(wholePart) * scale + (fractionalPart === \"\" ? 0n : BigInt(fractionalPart));\r\n\r\n const result = (scaledValue * Q96) / scale;\r\n return negative ? -result : result;\r\n}\r\n\r\nfunction numberToDecimalString(value: number): string {\r\n if (!Number.isFinite(value)) {\r\n throw new TypeError(`decimalToQ96: expected a finite number, got ${value}`);\r\n }\r\n // Avoid exponential notation (\"1e-7\"), which the decimal parser rejects.\r\n return value.toLocaleString(\"en-US\", { useGrouping: false, maximumFractionDigits: 20 });\r\n}\r\n\r\n/**\r\n * Format a Q96 value for human display.\r\n *\r\n * Unlike {@link q96ToDecimalString}, which truncates for exactness, this ROUNDS\r\n * half-up at the chosen precision. That matters: 0.0001 is not exactly\r\n * representable in Q96, so a truncating formatter renders it as\r\n * \"0.0000999999999999\" - technically accurate and useless in a UI.\r\n *\r\n * For values below 1 the digit budget starts at the first non-zero digit, so\r\n * very small prices stay readable instead of showing a wall of zeros.\r\n *\r\n * @param significantDigits Digits to keep after the first significant one\r\n * (or fractional digits, for values >= 1). Defaults to 6.\r\n */\r\nexport function formatQ96(valueQ96: bigint, significantDigits = 6): string {\r\n if (valueQ96 === 0n) return \"0\";\r\n\r\n const negative = valueQ96 < 0n;\r\n const magnitude = negative ? -valueQ96 : valueQ96;\r\n const sign = negative ? \"-\" : \"\";\r\n\r\n let precision: number;\r\n if (magnitude / Q96 > 0n) {\r\n precision = significantDigits;\r\n } else {\r\n const fractional = q96ToDecimalString(magnitude, 40, false).split(\".\")[1] ?? \"\";\r\n const firstSignificant = fractional.search(/[1-9]/);\r\n if (firstSignificant === -1) return \"0\";\r\n precision = firstSignificant + significantDigits;\r\n }\r\n\r\n const scale = 10n ** BigInt(precision);\r\n // Round half-up: floor(v * scale / Q96 + 1/2), done in integer arithmetic.\r\n const rounded = (magnitude * scale * 2n + Q96) / (Q96 * 2n);\r\n\r\n const wholePart = rounded / scale;\r\n const fractionalPart = (rounded % scale)\r\n .toString()\r\n .padStart(precision, \"0\")\r\n .replace(/0+$/, \"\");\r\n\r\n return fractionalPart.length > 0 ? `${sign}${wholePart}.${fractionalPart}` : `${sign}${wholePart}`;\r\n}\r\n\r\n/**\r\n * Fraction of the supply schedule released so far, from a checkpoint's\r\n * `cumulativeMps`. Returns a value in [0, 1]. Not the fraction sold.\r\n */\r\nexport function mpsToFraction(cumulativeMps: bigint | number): number {\r\n return Number(BigInt(cumulativeMps)) / Number(MPS);\r\n}\r\n\r\n/** Percentage of the supply schedule released so far, e.g. `\"12.34\"`. */\r\nexport function formatMpsPercent(cumulativeMps: bigint | number, fractionDigits = 2): string {\r\n return (mpsToFraction(cumulativeMps) * 100).toFixed(fractionDigits);\r\n}\r\n\r\n/** Unwrap a ValueX7 (a value pre-multiplied by MPS) back to its base units. */\r\nexport function fromValueX7(valueX7: bigint): bigint {\r\n return valueX7 / X7;\r\n}\r\n\n/**\n * Format a Q96 value compactly, switching to scientific notation when a value\n * is too small to read as a decimal.\n *\n * Real CCA clearing prices on Sepolia are around 5.4e-20. Rendered plainly that\n * is \"0.000000000000000000054212\" - 25 characters of mostly zeros, which\n * destroys a table layout and is genuinely hard to compare at a glance. Below\n * 1e-6 this switches to \"5.4212e-20\".\n *\n * Rounding is inherited from {@link formatQ96}, so the compact and plain\n * renderings of the same value never disagree.\n */\nexport function formatQ96Compact(valueQ96: bigint, significantDigits = 6): string {\n if (valueQ96 === 0n) return \"0\";\n\n const negative = valueQ96 < 0n;\n const magnitude = negative ? -valueQ96 : valueQ96;\n const sign = negative ? \"-\" : \"\";\n\n const plain = formatQ96(magnitude, significantDigits);\n const [integerPart = \"0\", fractionalPart = \"\"] = plain.split(\".\");\n\n // Anything at or above 1 already reads fine.\n if (integerPart !== \"0\") return `${sign}${plain}`;\n\n const firstSignificant = fractionalPart.search(/[1-9]/);\n if (firstSignificant === -1) return \"0\";\n\n // Up to 1e-6 the plain form is still comfortable to read.\n if (firstSignificant < 6) return `${sign}${plain}`;\n\n const digits = fractionalPart.slice(firstSignificant).replace(/0+$/, \"\");\n const exponent = -(firstSignificant + 1);\n const mantissa = digits.length > 1 ? `${digits[0]}.${digits.slice(1)}` : digits;\n\n return `${sign}${mantissa}e${exponent}`;\n}\n","/**\n * Encoding and validating `AuctionParameters`, the blob the factory takes as\n * `configData`.\n *\n * Every rule enforced here is transcribed from the v1.1.0 constructors\n * (`StepStorage`, `TickStorage`, `ContinuousClearingAuction`) rather than\n * guessed, and each check names the revert it prevents. Getting any of them\n * wrong means a deployment that reverts after you have already spent gas\n * minting and transferring a token supply.\n */\nimport { decodeAbiParameters, encodeAbiParameters, parseAbiParameters } from \"viem\";\nimport type { Address, Hex } from \"viem\";\nimport { MPS } from \"./q96\";\n\n/** Mirrors `struct AuctionParameters`. */\nexport interface AuctionParameters {\n /** Currency to raise in. `address(0)` for native ETH. */\n currency: Address;\n /** Receives leftover unsold tokens. */\n tokensRecipient: Address;\n /** Receives the raised funds. */\n fundsRecipient: Address;\n startBlock: bigint;\n endBlock: bigint;\n /** Block from which bidders can claim. Must be >= endBlock. */\n claimBlock: bigint;\n tickSpacing: bigint;\n /** Optional pre-bid hook. `address(0)` for none. */\n validationHook: Address;\n /** Q96-encoded starting price. */\n floorPriceQ96: bigint;\n /** Currency that must be raised for the auction to graduate. */\n requiredCurrencyRaised: bigint;\n /** Packed supply schedule. Build with {@link buildAuctionSteps}. */\n auctionStepsData: Hex;\n}\n\n/** One entry of the supply schedule. */\nexport interface AuctionStep {\n /** Milli-bips of supply released per block during this step. uint24. */\n mps: number;\n /** How many blocks this step lasts. uint40, must be > 0. */\n blockDelta: number;\n}\n\n/** `ConstantsLib.MIN_FLOOR_PRICE` - `type(uint32).max + 1`. */\nexport const MIN_FLOOR_PRICE = 4_294_967_296n;\n/** `ConstantsLib.MIN_TICK_SPACING`. */\nexport const MIN_TICK_SPACING = 2n;\n\nconst UINT24_MAX = 16_777_215;\nconst UINT40_MAX = 1_099_511_627_775;\n\nexport class AuctionParametersError extends Error {}\n\n/**\n * Pack steps into `auctionStepsData`.\n *\n * Each step is one 8-byte word: `uint24 mps | uint40 blockDelta`.\n */\nexport function packAuctionSteps(steps: readonly AuctionStep[]): Hex {\n if (steps.length === 0) {\n throw new AuctionParametersError(\"auctionStepsData cannot be empty (InvalidAuctionDataLength).\");\n }\n\n let packed = \"\";\n for (const step of steps) {\n if (!Number.isInteger(step.mps) || step.mps < 0 || step.mps > UINT24_MAX) {\n throw new AuctionParametersError(`step mps ${step.mps} does not fit uint24.`);\n }\n if (!Number.isInteger(step.blockDelta) || step.blockDelta <= 0) {\n // StepBlockDeltaCannotBeZero()\n throw new AuctionParametersError(`step blockDelta must be > 0, got ${step.blockDelta}.`);\n }\n if (step.blockDelta > UINT40_MAX) {\n throw new AuctionParametersError(`step blockDelta ${step.blockDelta} does not fit uint40.`);\n }\n packed += step.mps.toString(16).padStart(6, \"0\");\n packed += step.blockDelta.toString(16).padStart(10, \"0\");\n }\n\n return `0x${packed}`;\n}\n\n/** Unpack `auctionStepsData` back into steps. */\nexport function unpackAuctionSteps(data: Hex): AuctionStep[] {\n const body = data.slice(2);\n if (body.length === 0 || body.length % 16 !== 0) {\n throw new AuctionParametersError(\n `auctionStepsData must be a whole number of 8-byte steps, got ${body.length / 2} bytes.`,\n );\n }\n\n const steps: AuctionStep[] = [];\n for (let i = 0; i < body.length; i += 16) {\n steps.push({\n mps: Number.parseInt(body.slice(i, i + 6), 16),\n blockDelta: Number.parseInt(body.slice(i + 6, i + 16), 16),\n });\n }\n return steps;\n}\n\n/**\n * Build a schedule that releases the whole supply evenly over `durationBlocks`.\n *\n * The contract requires `sum(mps * blockDelta) == MPS` exactly. `MPS` (1e7)\n * rarely divides evenly by a duration, so this emits a flat step for all but\n * the last block and puts the remainder on the final block, rather than\n * silently rounding and reverting with `InvalidStepDataMps`.\n */\nexport function buildAuctionSteps(durationBlocks: number): AuctionStep[] {\n if (!Number.isInteger(durationBlocks) || durationBlocks < 2) {\n throw new AuctionParametersError(`durationBlocks must be an integer >= 2, got ${durationBlocks}.`);\n }\n\n const total = Number(MPS);\n const perBlock = Math.floor(total / durationBlocks);\n if (perBlock <= 0) {\n throw new AuctionParametersError(\n `durationBlocks ${durationBlocks} is longer than MPS (${total}) allows - each block would release 0.`,\n );\n }\n\n const remainder = total - perBlock * durationBlocks;\n const finalBlockMps = perBlock + remainder;\n\n if (finalBlockMps > UINT24_MAX) {\n throw new AuctionParametersError(`final step mps ${finalBlockMps} does not fit uint24.`);\n }\n\n return durationBlocks === 1\n ? [{ mps: total, blockDelta: 1 }]\n : [\n { mps: perBlock, blockDelta: durationBlocks - 1 },\n { mps: finalBlockMps, blockDelta: 1 },\n ];\n}\n\n/** Total supply released by a schedule, which must equal `MPS`. */\nexport function totalMps(steps: readonly AuctionStep[]): bigint {\n return steps.reduce((sum, step) => sum + BigInt(step.mps) * BigInt(step.blockDelta), 0n);\n}\n\n/** Total blocks a schedule spans. */\nexport function totalBlocks(steps: readonly AuctionStep[]): bigint {\n return steps.reduce((sum, step) => sum + BigInt(step.blockDelta), 0n);\n}\n\n/**\n * Validate parameters against every constructor rule, before spending gas.\n * Throws on the first violation, naming the revert it would have caused.\n */\nexport function validateAuctionParameters(params: AuctionParameters): void {\n // StepStorage: InvalidEndBlock()\n if (params.startBlock >= params.endBlock) {\n throw new AuctionParametersError(\n `startBlock (${params.startBlock}) must be < endBlock (${params.endBlock}) - InvalidEndBlock.`,\n );\n }\n\n // ContinuousClearingAuction: ClaimBlockIsBeforeEndBlock()\n if (params.claimBlock < params.endBlock) {\n throw new AuctionParametersError(\n `claimBlock (${params.claimBlock}) must be >= endBlock (${params.endBlock}) - ClaimBlockIsBeforeEndBlock.`,\n );\n }\n\n // TickStorage: TickSpacingTooSmall()\n if (params.tickSpacing < MIN_TICK_SPACING) {\n throw new AuctionParametersError(\n `tickSpacing (${params.tickSpacing}) must be >= ${MIN_TICK_SPACING} - TickSpacingTooSmall.`,\n );\n }\n\n // TickStorage: FloorPriceIsZero() / FloorPriceTooLow()\n if (params.floorPriceQ96 === 0n) {\n throw new AuctionParametersError(\"floorPrice cannot be zero - FloorPriceIsZero.\");\n }\n if (params.floorPriceQ96 < MIN_FLOOR_PRICE) {\n throw new AuctionParametersError(\n `floorPrice (${params.floorPriceQ96}) must be >= ${MIN_FLOOR_PRICE} - FloorPriceTooLow.`,\n );\n }\n\n // TickStorage._getTick: TickPriceNotAtBoundary()\n if (params.floorPriceQ96 % params.tickSpacing !== 0n) {\n throw new AuctionParametersError(\n `floorPrice (${params.floorPriceQ96}) must be a multiple of tickSpacing (${params.tickSpacing}) - TickPriceNotAtBoundary.`,\n );\n }\n\n // StepStorage._validate\n const steps = unpackAuctionSteps(params.auctionStepsData);\n const mpsSum = totalMps(steps);\n if (mpsSum !== MPS) {\n throw new AuctionParametersError(\n `supply schedule releases ${mpsSum} mps, must be exactly ${MPS} - InvalidStepDataMps.`,\n );\n }\n\n const blockSum = totalBlocks(steps);\n if (params.startBlock + blockSum !== params.endBlock) {\n throw new AuctionParametersError(\n `supply schedule spans ${blockSum} blocks, so it ends at ${params.startBlock + blockSum}, ` +\n `but endBlock is ${params.endBlock} - InvalidEndBlockGivenStepData.`,\n );\n }\n}\n\n/** ABI tuple matching `AuctionParameters`, in declaration order. */\nconst PARAMETERS_TUPLE = parseAbiParameters(\n \"(address currency, address tokensRecipient, address fundsRecipient, uint64 startBlock, uint64 endBlock, uint64 claimBlock, uint256 tickSpacing, address validationHook, uint256 floorPrice, uint128 requiredCurrencyRaised, bytes auctionStepsData)\",\n);\n\n/**\n * ABI-encode parameters into the factory's `configData`.\n * Validates first - the factory decodes this blindly and the auction's\n * constructor is where a bad value surfaces, after the gas is spent.\n */\nexport function encodeAuctionParameters(params: AuctionParameters): Hex {\n validateAuctionParameters(params);\n\n return encodeAbiParameters(PARAMETERS_TUPLE, [\n {\n currency: params.currency,\n tokensRecipient: params.tokensRecipient,\n fundsRecipient: params.fundsRecipient,\n startBlock: params.startBlock,\n endBlock: params.endBlock,\n claimBlock: params.claimBlock,\n tickSpacing: params.tickSpacing,\n validationHook: params.validationHook,\n floorPrice: params.floorPriceQ96,\n requiredCurrencyRaised: params.requiredCurrencyRaised,\n auctionStepsData: params.auctionStepsData,\n },\n ]);\n}\n\n/**\n * Decode a factory `AuctionCreated` event's `configData`.\n * Lets the directory show how any auction was configured.\n */\nexport function decodeAuctionParameters(configData: Hex): AuctionParameters {\n const [decoded] = decodeAbiParameters(PARAMETERS_TUPLE, configData);\n const value = decoded as unknown as {\n currency: Address;\n tokensRecipient: Address;\n fundsRecipient: Address;\n startBlock: bigint;\n endBlock: bigint;\n claimBlock: bigint;\n tickSpacing: bigint;\n validationHook: Address;\n floorPrice: bigint;\n requiredCurrencyRaised: bigint;\n auctionStepsData: Hex;\n };\n\n return {\n currency: value.currency,\n tokensRecipient: value.tokensRecipient,\n fundsRecipient: value.fundsRecipient,\n startBlock: BigInt(value.startBlock),\n endBlock: BigInt(value.endBlock),\n claimBlock: BigInt(value.claimBlock),\n tickSpacing: value.tickSpacing,\n validationHook: value.validationHook,\n floorPriceQ96: value.floorPrice,\n requiredCurrencyRaised: value.requiredCurrencyRaised,\n auctionStepsData: value.auctionStepsData,\n };\n}\n","/**\r\n * Deployment addresses and chain configuration.\r\n *\r\n * Beacon is testnet-only by design. Mainnet chain ids are deliberately absent\r\n * from {@link SUPPORTED_CHAINS} so that every surface - directory, widget, bot\r\n * and agent - fails closed rather than touching real funds.\r\n */\r\nimport { baseSepolia, sepolia, unichainSepolia } from \"viem/chains\";\r\nimport type { Address } from \"viem\";\r\n\r\n/**\r\n * `ContinuousClearingAuctionFactory` v1.1.0.\r\n *\r\n * Deployed through the deterministic CREATE2 deployer (`0x4e59b448...`), so the\r\n * address is identical on every chain Uniswap has launched CCA on.\r\n *\r\n * VERIFIED on Sepolia: the deployed runtime bytecode is byte-for-byte identical\r\n * to a local `forge build` of upstream tag v1.1.0. Re-check with\r\n * `./contracts/sync-abis.sh` and a bytecode diff before trusting a new chain.\r\n */\r\nexport const FACTORY_ADDRESS: Address = \"0xCCccCcCAE7503Cac057829BF2811De42E16e0bD5\";\r\n\r\n/**\r\n * Block each chain's factory was created at - where auction discovery starts\r\n * scanning. Scanning from 0 instead wastes thousands of RPC calls.\r\n */\r\nexport const FACTORY_DEPLOY_BLOCK: Record<number, bigint> = {\r\n [sepolia.id]: 10130119n,\r\n};\r\n\r\n/**\r\n * Testnets Beacon is allowed to talk to.\r\n *\r\n * Only Sepolia is verified end-to-end today; the other two are listed because\r\n * the factory is a cross-chain singleton, but their deploy blocks are unknown\r\n * (discovery will need an explicit `fromBlock`).\r\n */\r\nexport const SUPPORTED_CHAINS = {\r\n [sepolia.id]: sepolia,\r\n [baseSepolia.id]: baseSepolia,\r\n [unichainSepolia.id]: unichainSepolia,\r\n} as const;\r\n\r\nexport type SupportedChainId = keyof typeof SUPPORTED_CHAINS;\r\n\r\n/**\r\n * Approximate seconds per block, used to turn a block countdown into a human\r\n * \"time remaining\". Estimates - block times drift.\r\n */\r\nexport const BLOCK_TIME_SECONDS: Record<number, number> = {\r\n [sepolia.id]: 12,\r\n [baseSepolia.id]: 2,\r\n [unichainSepolia.id]: 1,\r\n};\r\n\r\n/**\r\n * Maximum block span for a single `eth_getLogs` call.\r\n *\r\n * Public Sepolia RPCs reject anything wider with\r\n * `-32701: exceed maximum block range: 50000`, and some clients surface that as\r\n * an empty result rather than an error - which looks exactly like \"no auctions\r\n * exist\". Discovery always chunks.\r\n */\r\nexport const DEFAULT_LOG_CHUNK_SIZE = 50_000n;\r\n\r\n/** `address(0)` - the currency sentinel meaning native ETH. */\r\nexport const NATIVE_CURRENCY: Address = \"0x0000000000000000000000000000000000000000\";\r\n\r\n/**\r\n * Canonical Permit2, deployed at the same address on every chain.\r\n *\r\n * ERC-20 bids do NOT approve the auction. `ContinuousClearingAuction.submitBid`\r\n * pulls the bid currency with `SafeTransferLib.permit2TransferFrom`, which\r\n * calls Permit2's `transferFrom(from,to,uint160,token)`. A bidder therefore\r\n * needs an ERC-20 approval to THIS address, plus a Permit2 allowance naming the\r\n * auction as spender. Matches solady's `SafeTransferLib.PERMIT2`.\r\n */\r\nexport const PERMIT2_ADDRESS: Address = \"0x000000000022D473030F116dDEE9F6B43aC78BA3\";\r\n","/**\r\n * Beacon's client wrapper: a viem public client plus the addresses every read\r\n * needs, with a hard testnet guard.\r\n */\r\nimport { createPublicClient, http } from \"viem\";\r\nimport type { Address, Chain, PublicClient } from \"viem\";\r\nimport {\r\n BLOCK_TIME_SECONDS,\r\n FACTORY_ADDRESS,\r\n FACTORY_DEPLOY_BLOCK,\r\n SUPPORTED_CHAINS,\r\n} from \"./constants\";\r\n\r\nexport interface BeaconClientConfig {\r\n /** JSON-RPC endpoint used for state reads (eth_call, multicall). */\r\n rpcUrl: string;\r\n /**\r\n * Optional separate endpoint for `eth_getLogs`.\r\n *\r\n * State reads and log scanning have different provider requirements, and one\r\n * endpoint is often bad at one of them. Alchemy's free tier serves eth_call\r\n * beautifully but caps eth_getLogs at a 10-block range, which makes a\r\n * historical backfill impossible; public wide-range endpoints allow the range\r\n * but can silently return empty results. Defaults to `rpcUrl`.\r\n */\r\n logsRpcUrl?: string;\r\n /** Chain id. Must be a supported testnet - mainnet is rejected. */\r\n chainId: number;\r\n /** Override the factory address. Defaults to the cross-chain singleton. */\r\n factoryAddress?: Address;\r\n /**\r\n * Address of a deployed `AuctionStateLens`.\r\n *\r\n * Optional. When omitted, reads run the lens via an `eth_call` state\r\n * override instead, so no deployment is required. See `read.ts`.\r\n */\r\n lensAddress?: Address;\r\n /** Override the block the factory was deployed at. */\r\n factoryDeployBlock?: bigint;\r\n}\r\n\r\nexport interface BeaconClient {\r\n publicClient: PublicClient;\r\n /** Client used for `eth_getLogs`. Same as `publicClient` unless overridden. */\r\n logsClient: PublicClient;\r\n chain: Chain;\r\n chainId: number;\r\n factoryAddress: Address;\r\n lensAddress?: Address;\r\n factoryDeployBlock: bigint;\r\n /** Approximate seconds per block, for time-remaining estimates. */\r\n blockTimeSeconds: number;\r\n}\r\n\r\n/**\r\n * Throw unless `chainId` is a testnet Beacon supports.\r\n *\r\n * This is the choke point that keeps every Beacon surface off mainnet. The\r\n * bidding agent layers its own guard on top before it broadcasts anything.\r\n */\r\nexport function assertSupportedChain(chainId: number): Chain {\r\n const chain = SUPPORTED_CHAINS[chainId as keyof typeof SUPPORTED_CHAINS];\r\n if (!chain) {\r\n const supported = Object.values(SUPPORTED_CHAINS)\r\n .map((c) => `${c.name} (${c.id})`)\r\n .join(\", \");\r\n throw new Error(\r\n `Beacon is testnet-only and refuses to run against chain id ${chainId}. Supported: ${supported}.`,\r\n );\r\n }\r\n return chain;\r\n}\r\n\r\n/** Build a Beacon client. Throws immediately on a non-testnet chain id. */\r\nexport function createBeaconClient(config: BeaconClientConfig): BeaconClient {\r\n const chain = assertSupportedChain(config.chainId);\r\n\r\n const publicClient = createPublicClient({\r\n chain,\r\n transport: http(config.rpcUrl),\r\n // Batch eagerly: reads fan out across many auctions in the directory.\r\n batch: { multicall: true },\r\n }) as PublicClient;\r\n\r\n const logsClient =\r\n config.logsRpcUrl && config.logsRpcUrl !== config.rpcUrl\r\n ? (createPublicClient({ chain, transport: http(config.logsRpcUrl) }) as PublicClient)\r\n : publicClient;\r\n\r\n const factoryDeployBlock = config.factoryDeployBlock ?? FACTORY_DEPLOY_BLOCK[config.chainId];\r\n if (factoryDeployBlock === undefined) {\r\n throw new Error(\r\n `No known factory deploy block for chain id ${config.chainId}. ` +\r\n `Pass \\`factoryDeployBlock\\` explicitly so discovery knows where to start scanning.`,\r\n );\r\n }\r\n\r\n return {\r\n publicClient,\r\n logsClient,\r\n chain,\r\n chainId: config.chainId,\r\n factoryAddress: config.factoryAddress ?? FACTORY_ADDRESS,\r\n lensAddress: config.lensAddress,\r\n factoryDeployBlock,\r\n blockTimeSeconds: BLOCK_TIME_SECONDS[config.chainId] ?? 12,\r\n };\r\n}\r\n\r\n/**\r\n * Confirm the RPC is actually serving the chain we were configured for.\r\n *\r\n * Cheap insurance against a copy-pasted RPC URL silently pointing at the wrong\r\n * network - which otherwise shows up as \"no auctions found\".\r\n */\r\nexport async function assertChainMatches(client: BeaconClient): Promise<void> {\r\n const actual = await client.publicClient.getChainId();\r\n if (actual !== client.chainId) {\r\n throw new Error(\r\n `RPC chain id mismatch: configured for ${client.chainId} (${client.chain.name}) ` +\r\n `but the endpoint reports ${actual}. Check BEACON_RPC_URL.`,\r\n );\r\n }\r\n}\r\n","/**\r\n * Auction discovery: finding every CCA auction ever deployed by scanning the\r\n * factory's `AuctionCreated` event.\r\n *\r\n * `eth_getLogs` MUST be chunked. Public Sepolia RPCs reject spans wider than\r\n * 50,000 blocks with `-32701: exceed maximum block range`, and some clients\r\n * report that as an empty result rather than an error, which looks exactly like\r\n * \"this factory has never created an auction\". Everything here chunks, and\r\n * halves the chunk size on failure rather than silently returning a short list.\r\n */\r\nimport { getAbiItem } from \"viem\";\r\nimport type { Address, Log } from \"viem\";\r\nimport { factoryAbi } from \"./abis\";\r\nimport type { BeaconClient } from \"./client\";\r\nimport { DEFAULT_LOG_CHUNK_SIZE } from \"./constants\";\r\nimport type { DiscoveredAuction } from \"./types\";\r\n\r\n/** The factory event that announces every new auction. */\r\nexport const auctionCreatedEvent = getAbiItem({ abi: factoryAbi, name: \"AuctionCreated\" });\r\n\r\nexport interface ScanOptions {\r\n /** First block to scan. Defaults to the factory's deploy block. */\r\n fromBlock?: bigint;\r\n /** Last block to scan. Defaults to the current head. */\r\n toBlock?: bigint;\r\n /** Blocks per `eth_getLogs` request. Defaults to 50,000. */\r\n chunkSize?: bigint;\r\n /**\r\n * Re-query a chunk that came back empty, this many times, before believing it.\r\n *\r\n * Some public RPCs (observed on ethereum-sepolia-rpc.publicnode.com) are load\r\n * balanced across backends with incomplete log indexes and answer an\r\n * identical `eth_getLogs` with either the real logs or an empty array, with no\r\n * error. That silently under-reports auctions. Re-querying an empty chunk\r\n * reduces the chance of believing a false empty, but CANNOT eliminate it -\r\n * the real fix is a reliable RPC endpoint. Defaults to 2.\r\n */\r\n emptyChunkRetries?: number;\r\n /**\r\n * Called when an empty chunk turned out to be a lie on retry. A caller seeing\r\n * these should switch RPC providers rather than trust the scan.\r\n */\r\n onAnomaly?: (anomaly: { fromBlock: bigint; toBlock: bigint; recoveredLogs: number }) => void;\r\n /** Called after each chunk, for progress reporting on long scans. */\r\n onProgress?: (progress: {\r\n fromBlock: bigint;\r\n toBlock: bigint;\r\n scannedTo: bigint;\r\n headBlock: bigint;\r\n found: number;\r\n }) => void;\r\n}\r\n\r\ntype AuctionCreatedLog = Log<bigint, number, false, typeof auctionCreatedEvent>;\r\n\r\nfunction toDiscoveredAuction(log: AuctionCreatedLog): DiscoveredAuction {\r\n const { auction, token, amount, configData } = log.args;\r\n\r\n // Indexed address args are always present on a well-formed log, but viem\r\n // types them optional because a filter could omit them.\r\n if (!auction || !token) {\r\n throw new Error(`Malformed AuctionCreated log in block ${log.blockNumber}: missing auction/token`);\r\n }\r\n\r\n return {\r\n auction,\r\n token,\r\n amount: amount ?? 0n,\r\n configData: configData ?? \"0x\",\r\n blockNumber: log.blockNumber,\r\n transactionHash: log.transactionHash,\r\n logIndex: log.logIndex,\r\n };\r\n}\r\n\r\n/**\r\n * Scan a block range for `AuctionCreated` events, chunked.\r\n *\r\n * Returns auctions in chain order (oldest first). On a chunk failure the chunk\r\n * size is halved and retried, so a stricter-than-expected RPC degrades into a\r\n * slower scan rather than a wrong answer.\r\n */\r\nexport async function scanAuctions(\r\n client: BeaconClient,\r\n options: ScanOptions = {},\r\n): Promise<DiscoveredAuction[]> {\r\n const headBlock = options.toBlock ?? (await client.publicClient.getBlockNumber());\r\n const startBlock = options.fromBlock ?? client.factoryDeployBlock;\r\n const maxChunk = options.chunkSize ?? DEFAULT_LOG_CHUNK_SIZE;\r\n\r\n if (startBlock > headBlock) return [];\r\n\r\n const emptyChunkRetries = options.emptyChunkRetries ?? 2;\r\n const found: DiscoveredAuction[] = [];\r\n let cursor = startBlock;\r\n let chunkSize = maxChunk;\r\n\r\n while (cursor <= headBlock) {\r\n const chunkEnd = min(cursor + chunkSize - 1n, headBlock);\r\n\r\n // Log scanning may use a different provider than state reads.\r\n const fetchChunk = async (from: bigint, to: bigint): Promise<AuctionCreatedLog[]> =>\r\n (await client.logsClient.getLogs({\r\n address: client.factoryAddress,\r\n event: auctionCreatedEvent,\r\n fromBlock: from,\r\n toBlock: to,\r\n })) as AuctionCreatedLog[];\r\n\r\n let logs: AuctionCreatedLog[];\r\n try {\r\n logs = await fetchChunk(cursor, chunkEnd);\r\n\r\n // An empty result from an unreliable endpoint may be a lie. Re-ask.\r\n for (let attempt = 0; logs.length === 0 && attempt < emptyChunkRetries; attempt++) {\r\n const retry = await fetchChunk(cursor, chunkEnd);\r\n if (retry.length > 0) {\r\n options.onAnomaly?.({\r\n fromBlock: cursor,\r\n toBlock: chunkEnd,\r\n recoveredLogs: retry.length,\r\n });\r\n logs = retry;\r\n }\r\n }\r\n } catch (error) {\r\n // Most likely a provider-specific range or response-size cap. Back off and\r\n // retry rather than losing auctions.\r\n if (chunkSize > 1n) {\r\n chunkSize = chunkSize / 2n;\r\n continue;\r\n }\r\n throw new Error(\r\n `eth_getLogs failed for a single block (${cursor}) on ${client.chain.name}: ${\r\n (error as Error).message\r\n }`,\r\n );\r\n }\r\n\r\n for (const log of logs) found.push(toDiscoveredAuction(log));\r\n\r\n options.onProgress?.({\r\n fromBlock: cursor,\r\n toBlock: chunkEnd,\r\n scannedTo: chunkEnd,\r\n headBlock,\r\n found: found.length,\r\n });\r\n\r\n cursor = chunkEnd + 1n;\r\n // Recover toward the configured chunk size after a successful request.\r\n if (chunkSize < maxChunk) chunkSize = min(chunkSize * 2n, maxChunk);\r\n }\r\n\r\n found.sort((a, b) =>\r\n a.blockNumber === b.blockNumber\r\n ? a.logIndex - b.logIndex\r\n : a.blockNumber < b.blockNumber\r\n ? -1\r\n : 1,\r\n );\r\n\r\n return found;\r\n}\r\n\r\n/**\r\n * Watch for auctions created from now on.\r\n *\r\n * Polls rather than subscribing, so it works over plain HTTP RPC with no\r\n * WebSocket endpoint. Returns an unwatch function.\r\n */\r\nexport function watchAuctions(\r\n client: BeaconClient,\r\n onAuction: (auction: DiscoveredAuction) => void,\r\n options: { pollingIntervalMs?: number; onError?: (error: Error) => void } = {},\r\n): () => void {\r\n return client.logsClient.watchEvent({\r\n address: client.factoryAddress,\r\n event: auctionCreatedEvent,\r\n poll: true,\r\n pollingInterval: options.pollingIntervalMs ?? 12_000,\r\n onError: options.onError,\r\n onLogs: (logs) => {\r\n for (const log of logs as AuctionCreatedLog[]) {\r\n try {\r\n onAuction(toDiscoveredAuction(log));\r\n } catch (error) {\r\n options.onError?.(error as Error);\r\n }\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Auctions created for a specific token.\r\n * Uses an indexed-topic filter so the RPC does the work, not the client.\r\n */\r\nexport async function scanAuctionsForToken(\r\n client: BeaconClient,\r\n token: Address,\r\n options: ScanOptions = {},\r\n): Promise<DiscoveredAuction[]> {\r\n const all = await scanAuctions(client, options);\r\n return all.filter((entry) => entry.token.toLowerCase() === token.toLowerCase());\r\n}\r\n\r\nfunction min(a: bigint, b: bigint): bigint {\r\n return a < b ? a : b;\r\n}\r\n","/**\r\n * Minimal ERC-20 metadata reads.\r\n *\r\n * CCA auctions are NOT always denominated in native ETH - the auctions live on\r\n * Sepolia today bid in an ERC-20. Anything that shows an amount to a human has\r\n * to show the real symbol and scale by the real decimals, so this lives in the\r\n * SDK and every surface (bot, widget, directory, agent) uses it.\r\n */\r\nimport { formatUnits } from \"viem\";\r\nimport type { Address } from \"viem\";\r\nimport type { BeaconClient } from \"./client\";\r\nimport { NATIVE_CURRENCY } from \"./constants\";\r\n\r\n/** ERC-20 reads Beacon needs. Hand-written because it is the standard, not a CCA ABI. */\r\nexport const erc20MetadataAbi = [\r\n { type: \"function\", name: \"symbol\", inputs: [], outputs: [{ type: \"string\" }], stateMutability: \"view\" },\r\n { type: \"function\", name: \"name\", inputs: [], outputs: [{ type: \"string\" }], stateMutability: \"view\" },\r\n { type: \"function\", name: \"decimals\", inputs: [], outputs: [{ type: \"uint8\" }], stateMutability: \"view\" },\r\n] as const;\r\n\r\nexport interface TokenMetadata {\r\n address: Address;\r\n symbol: string;\r\n name: string;\r\n decimals: number;\r\n /** True when this is the chain's native currency rather than an ERC-20. */\r\n isNative: boolean;\r\n}\r\n\r\n/**\r\n * Read a currency's symbol, name and decimals.\r\n *\r\n * `address(0)` is the CCA sentinel for native currency, and resolves to the\r\n * chain's own native currency rather than an on-chain call.\r\n *\r\n * Tolerant by design: a token that omits `symbol`/`name` (or returns bytes32\r\n * instead of string) still yields usable metadata rather than throwing, because\r\n * failing to render an alert is worse than rendering a shortened address.\r\n */\r\nexport async function getTokenMetadata(\r\n client: BeaconClient,\r\n address: Address,\r\n): Promise<TokenMetadata> {\r\n if (address === NATIVE_CURRENCY) {\r\n const native = client.chain.nativeCurrency;\r\n return {\r\n address,\r\n symbol: native.symbol,\r\n name: native.name,\r\n decimals: native.decimals,\r\n isNative: true,\r\n };\r\n }\r\n\r\n const contract = { address, abi: erc20MetadataAbi } as const;\r\n const [symbol, name, decimals] = await client.publicClient.multicall({\r\n allowFailure: true,\r\n contracts: [\r\n { ...contract, functionName: \"symbol\" },\r\n { ...contract, functionName: \"name\" },\r\n { ...contract, functionName: \"decimals\" },\r\n ],\r\n });\r\n\r\n return {\r\n address,\r\n symbol: symbol.status === \"success\" ? symbol.result : shortAddress(address),\r\n name: name.status === \"success\" ? name.result : shortAddress(address),\r\n // 18 is the overwhelmingly common default; better than refusing to render.\r\n decimals: decimals.status === \"success\" ? Number(decimals.result) : 18,\r\n isNative: false,\r\n };\r\n}\r\n\r\n/** Read metadata for several currencies at once, de-duplicated by address. */\r\nexport async function getTokenMetadataBatch(\r\n client: BeaconClient,\r\n addresses: readonly Address[],\r\n): Promise<Map<Address, TokenMetadata>> {\r\n const unique = [...new Set(addresses)];\r\n const entries = await Promise.all(\r\n unique.map(async (address) => [address, await getTokenMetadata(client, address)] as const),\r\n );\r\n return new Map(entries);\r\n}\r\n\r\n/**\r\n * Render a raw token amount with its symbol, e.g. `\"1,000 BEACON\"`.\r\n *\r\n * A nonzero amount is NEVER rendered as \"0\". Real CCA test auctions raise\r\n * amounts like 52 wei, and truncating those to \"0 ETH\" makes a live auction\r\n * look dead. When an amount is too small for `maxFractionDigits`, the output\r\n * widens to show four significant digits instead.\r\n *\r\n * @param maxFractionDigits Fractional digits to keep for ordinary amounts.\r\n */\r\nexport function formatTokenAmount(\r\n amount: bigint,\r\n token: Pick<TokenMetadata, \"symbol\" | \"decimals\">,\r\n maxFractionDigits = 4,\r\n): string {\r\n if (amount === 0n) return `0 ${token.symbol}`;\r\n\r\n const negative = amount < 0n;\r\n const whole = formatUnits(negative ? -amount : amount, token.decimals);\r\n const [integerPart = \"0\", fractionalPart = \"\"] = whole.split(\".\");\r\n\r\n const grouped = BigInt(integerPart).toLocaleString(\"en-US\");\r\n let trimmed = fractionalPart.slice(0, maxFractionDigits).replace(/0+$/, \"\");\r\n\r\n // Too small to show at the requested precision: widen rather than say \"0\".\r\n if (integerPart === \"0\" && trimmed.length === 0) {\r\n const firstSignificant = fractionalPart.search(/[1-9]/);\r\n if (firstSignificant !== -1) {\r\n trimmed = fractionalPart.slice(0, firstSignificant + 4).replace(/0+$/, \"\");\r\n }\r\n }\r\n\r\n const sign = negative ? \"-\" : \"\";\r\n return trimmed.length > 0\r\n ? `${sign}${grouped}.${trimmed} ${token.symbol}`\r\n : `${sign}${grouped} ${token.symbol}`;\r\n}\r\n\r\nfunction shortAddress(address: Address): string {\r\n return `${address.slice(0, 6)}...${address.slice(-4)}`;\r\n}\r\n","/**\n * Private-key format normalisation.\n *\n * This module does exactly one thing: turn a key string into the `0x`-prefixed\n * form viem requires, or throw. It never logs, never stores, and never returns\n * anything derived from the key other than the key itself.\n *\n * It exists because wallets and key exporters disagree about the `0x` prefix -\n * Foundry's `cast wallet new` prints one, several UIs do not - and bouncing a\n * user back to edit their `.env` over two characters is a poor trade for the\n * risk of them pasting the key somewhere less safe while they fix it.\n */\n\n/** A 32-byte private key in the form viem expects. */\nexport type PrivateKeyHex = `0x${string}`;\n\nexport class PrivateKeyFormatError extends Error {}\n\n/**\n * Normalise a private key to `0x` + 64 hex characters.\n *\n * Accepts the key with or without the prefix. Every error message here is\n * deliberately written to describe the SHAPE of the problem and never to echo\n * any part of the value.\n *\n * @throws PrivateKeyFormatError when the value is not a 32-byte hex key.\n */\nexport function normalizePrivateKey(raw: string | undefined, envVarName: string): PrivateKeyHex {\n const trimmed = (raw ?? \"\").trim();\n\n if (trimmed.length === 0) {\n throw new PrivateKeyFormatError(`${envVarName} is not set.`);\n }\n\n const body = trimmed.startsWith(\"0x\") || trimmed.startsWith(\"0X\") ? trimmed.slice(2) : trimmed;\n\n if (!/^[0-9a-fA-F]{64}$/.test(body)) {\n throw new PrivateKeyFormatError(\n `${envVarName} is malformed: expected 64 hex characters (optionally 0x-prefixed), ` +\n `got ${body.length} characters. The value itself is not shown.`,\n );\n }\n\n if (/^0{64}$/.test(body)) {\n throw new PrivateKeyFormatError(\n `${envVarName} is all zeros - that is the .env.example placeholder, not a real key.`,\n );\n }\n\n return `0x${body.toLowerCase()}` as PrivateKeyHex;\n}\n\n/** True when a key is present and well-formed, without throwing. */\nexport function isValidPrivateKey(raw: string | undefined): boolean {\n try {\n normalizePrivateKey(raw, \"key\");\n return true;\n } catch {\n return false;\n }\n}\n","/**\r\n * Read wrappers around `AuctionStateLens` and the auction's own view functions.\r\n *\r\n * Two things here are non-obvious, and are the reason this lives in the SDK\r\n * rather than being reimplemented per app:\r\n *\r\n * 1. `AuctionStateLens.state()` is NOT a view function. It calls the\r\n * state-mutating `auction.checkpoint()` and returns its result by reverting\r\n * with ABI-encoded data. It therefore has to be invoked with `eth_call`\r\n * semantics; a plain `readContract` fails.\r\n *\r\n * 2. Uniswap publishes no canonical lens address on any network. Rather than\r\n * forcing every user to deploy one, Beacon can inject the lens bytecode into\r\n * a single `eth_call` via a state override, so reads work against a bare RPC\r\n * with no deployment and no funded wallet. Set `lensAddress` on the client\r\n * to use a real deployed lens instead.\r\n */\r\nimport { decodeFunctionResult, encodeFunctionData } from \"viem\";\r\nimport type { Address } from \"viem\";\r\nimport { auctionAbi, auctionStateLensAbi, auctionStateLensDeployedBytecode } from \"./abis\";\r\nimport type { BeaconClient } from \"./client\";\r\nimport { formatQ96, mpsToFraction } from \"./q96\";\r\nimport type { AuctionInfo, AuctionState, AuctionStatus, AuctionSummary, Checkpoint } from \"./types\";\r\n\r\n/**\r\n * Address the lens bytecode is injected at when no deployed lens is configured.\r\n * Arbitrary and unused on-chain: it only has to be an address nothing else\r\n * occupies for the duration of the call. Must be EIP-55 checksummed - viem\r\n * rejects a mixed-case address whose checksum does not validate.\r\n */\r\nexport const LENS_OVERRIDE_ADDRESS: Address = \"0x00000000000000000000000000000000BEAC0E75\";\r\n\r\n/** Shape `decodeFunctionResult` produces for the lens's `AuctionState` tuple. */\r\ntype RawAuctionState = {\r\n checkpoint: {\r\n clearingPrice: bigint;\r\n currencyRaisedAtClearingPriceQ96_X7: bigint;\r\n cumulativeMpsPerPrice: bigint;\r\n cumulativeMps: number;\r\n prev: bigint;\r\n next: bigint;\r\n };\r\n currencyRaised: bigint;\r\n totalCleared: bigint;\r\n isGraduated: boolean;\r\n};\r\n\r\nfunction toCheckpoint(raw: RawAuctionState[\"checkpoint\"]): Checkpoint {\r\n return {\r\n clearingPriceQ96: raw.clearingPrice,\r\n currencyRaisedAtClearingPriceQ96X7: raw.currencyRaisedAtClearingPriceQ96_X7,\r\n cumulativeMpsPerPrice: raw.cumulativeMpsPerPrice,\r\n cumulativeMps: Number(raw.cumulativeMps),\r\n prevBlock: BigInt(raw.prev),\r\n nextBlock: BigInt(raw.next),\r\n };\r\n}\r\n\r\n/**\r\n * Read an auction's live state through `AuctionStateLens.state()`.\r\n *\r\n * This is the freshest possible view: the lens checkpoints the auction inside\r\n * the simulated call, so the clearing price reflects the current block rather\r\n * than the last block someone happened to bid in.\r\n */\r\nexport async function getAuctionState(client: BeaconClient, auction: Address): Promise<AuctionState> {\r\n const data = encodeFunctionData({\r\n abi: auctionStateLensAbi,\r\n functionName: \"state\",\r\n args: [auction],\r\n });\r\n\r\n const useOverride = client.lensAddress === undefined;\r\n const target = client.lensAddress ?? LENS_OVERRIDE_ADDRESS;\r\n\r\n const { data: returnData } = await client.publicClient.call({\r\n to: target,\r\n data,\r\n ...(useOverride\r\n ? {\r\n stateOverride: [\r\n { address: LENS_OVERRIDE_ADDRESS, code: auctionStateLensDeployedBytecode },\r\n ],\r\n }\r\n : {}),\r\n });\r\n\r\n if (!returnData) {\r\n throw new Error(\r\n `AuctionStateLens.state(${auction}) returned no data. ` +\r\n `Is ${auction} really a ContinuousClearingAuction on ${client.chain.name}?`,\r\n );\r\n }\r\n\r\n const raw = decodeFunctionResult({\r\n abi: auctionStateLensAbi,\r\n functionName: \"state\",\r\n data: returnData,\r\n }) as unknown as RawAuctionState;\r\n\r\n return {\r\n checkpoint: toCheckpoint(raw.checkpoint),\r\n currencyRaised: raw.currencyRaised,\r\n totalCleared: raw.totalCleared,\r\n isGraduated: raw.isGraduated,\r\n };\r\n}\r\n\r\n/**\r\n * Read an auction's static configuration in a single multicall.\r\n * These values never change, so callers can cache them freely.\r\n */\r\nexport async function getAuctionInfo(client: BeaconClient, auction: Address): Promise<AuctionInfo> {\r\n const contract = { address: auction, abi: auctionAbi } as const;\r\n\r\n const [token, currency, totalSupply, startBlock, endBlock, floorPrice, tickSpacing] =\r\n await client.publicClient.multicall({\r\n allowFailure: false,\r\n contracts: [\r\n { ...contract, functionName: \"token\" },\r\n { ...contract, functionName: \"currency\" },\r\n { ...contract, functionName: \"totalSupply\" },\r\n { ...contract, functionName: \"startBlock\" },\r\n { ...contract, functionName: \"endBlock\" },\r\n { ...contract, functionName: \"floorPrice\" },\r\n { ...contract, functionName: \"tickSpacing\" },\r\n ],\r\n });\r\n\r\n return {\r\n auction,\r\n token,\r\n currency,\r\n totalSupply,\r\n startBlock: BigInt(startBlock),\r\n endBlock: BigInt(endBlock),\r\n floorPriceQ96: floorPrice,\r\n tickSpacing,\r\n };\r\n}\r\n\r\n/** The auction's current clearing price, Q96-encoded. A cheap `view` read. */\r\nexport async function getClearingPrice(client: BeaconClient, auction: Address): Promise<bigint> {\r\n return client.publicClient.readContract({\r\n address: auction,\r\n abi: auctionAbi,\r\n functionName: \"clearingPrice\",\r\n });\r\n}\r\n\r\n/** Whether the auction has raised enough to seed the pool. */\r\nexport async function isGraduated(client: BeaconClient, auction: Address): Promise<boolean> {\r\n return client.publicClient.readContract({\r\n address: auction,\r\n abi: auctionAbi,\r\n functionName: \"isGraduated\",\r\n });\r\n}\r\n\r\n/** Derive an auction's lifecycle position from the current block. */\r\nexport function deriveStatus(info: AuctionInfo, blockNumber: bigint): AuctionStatus {\r\n if (blockNumber < info.startBlock) return \"pending\";\r\n if (blockNumber <= info.endBlock) return \"live\";\r\n return \"ended\";\r\n}\r\n\r\n/**\r\n * Everything a UI needs about one auction, with the derived values (status,\r\n * progress, time remaining) computed once here instead of in each app.\r\n */\r\nexport async function getAuctionSummary(\r\n client: BeaconClient,\r\n auction: Address,\r\n options: { info?: AuctionInfo; blockNumber?: bigint } = {},\r\n): Promise<AuctionSummary> {\r\n const [info, state, blockNumber] = await Promise.all([\r\n options.info ?? getAuctionInfo(client, auction),\r\n getAuctionState(client, auction),\r\n options.blockNumber ?? client.publicClient.getBlockNumber(),\r\n ]);\r\n\r\n const status = deriveStatus(info, blockNumber);\r\n const blocksRemaining =\r\n status === \"pending\"\r\n ? info.startBlock - blockNumber\r\n : status === \"live\"\r\n ? info.endBlock - blockNumber\r\n : 0n;\r\n\r\n return {\r\n info,\r\n state,\r\n blockNumber,\r\n status,\r\n clearingPrice: formatQ96(state.checkpoint.clearingPriceQ96),\r\n supplyScheduleProgress: mpsToFraction(state.checkpoint.cumulativeMps),\r\n hasClearedSupply: state.totalCleared > 0n,\r\n blocksRemaining,\r\n secondsRemaining: Number(blocksRemaining) * client.blockTimeSeconds,\r\n };\r\n}\r\n\r\n/** A summary that failed to load, so one bad auction cannot blank a directory page. */\r\nexport interface FailedAuctionSummary {\r\n auction: Address;\r\n error: Error;\r\n}\r\n\r\nexport function isFailedSummary(\r\n result: AuctionSummary | FailedAuctionSummary,\r\n): result is FailedAuctionSummary {\r\n return \"error\" in result;\r\n}\r\n\r\n/**\r\n * Summarise many auctions with bounded concurrency, so a directory page listing\r\n * dozens of auctions does not open dozens of simultaneous RPC calls.\r\n */\r\nexport async function getAuctionSummaries(\r\n client: BeaconClient,\r\n auctions: readonly Address[],\r\n options: { concurrency?: number } = {},\r\n): Promise<(AuctionSummary | FailedAuctionSummary)[]> {\r\n const concurrency = options.concurrency ?? 5;\r\n const blockNumber = await client.publicClient.getBlockNumber();\r\n const results: (AuctionSummary | FailedAuctionSummary)[] = [];\r\n\r\n for (let i = 0; i < auctions.length; i += concurrency) {\r\n const batch = auctions.slice(i, i + concurrency);\r\n const settled = await Promise.all(\r\n batch.map(async (auction) => {\r\n try {\r\n return await getAuctionSummary(client, auction, { blockNumber });\r\n } catch (error) {\r\n return { auction, error: error as Error };\r\n }\r\n }),\r\n );\r\n results.push(...settled);\r\n }\r\n\r\n return results;\r\n}\r\n\n/**\n * The cheap, batchable slice of live state used by directory list views.\n *\n * Every field here is a `view` function on the auction, so a whole page of\n * auctions resolves in one multicall - no lens, no per-auction round trips.\n * Use {@link getAuctionState} when you need the freshest checkpointed state.\n */\nexport interface AuctionListState {\n auction: Address;\n clearingPriceQ96: bigint;\n isGraduated: boolean;\n currencyRaised: bigint;\n totalCleared: bigint;\n}\n\n/** Read {@link AuctionListState} for many auctions in a single multicall. */\nexport async function getAuctionListStates(\n client: BeaconClient,\n auctions: readonly Address[],\n): Promise<Map<Address, AuctionListState>> {\n const result = new Map<Address, AuctionListState>();\n if (auctions.length === 0) return result;\n\n const contracts = auctions.flatMap((auction) => {\n const base = { address: auction, abi: auctionAbi } as const;\n return [\n { ...base, functionName: \"clearingPrice\" },\n { ...base, functionName: \"isGraduated\" },\n { ...base, functionName: \"currencyRaised\" },\n { ...base, functionName: \"totalCleared\" },\n ];\n });\n\n // allowFailure: one broken auction must not blank the whole page.\n const responses = await client.publicClient.multicall({ allowFailure: true, contracts });\n\n auctions.forEach((auction, index) => {\n const [price, graduated, raised, cleared] = responses.slice(index * 4, index * 4 + 4);\n if (price?.status !== \"success\") return;\n result.set(auction, {\n auction,\n clearingPriceQ96: price.result as bigint,\n isGraduated: graduated?.status === \"success\" ? (graduated.result as boolean) : false,\n currencyRaised: raised?.status === \"success\" ? (raised.result as bigint) : 0n,\n totalCleared: cleared?.status === \"success\" ? (cleared.result as bigint) : 0n,\n });\n });\n\n return result;\n}\n","/**\r\n * The write path: building a `submitBid` transaction.\r\n *\r\n * Three things here are easy to get wrong, and all three are verified against\r\n * the v1.1.0 contract source rather than assumed:\r\n *\r\n * 1. ERC-20 bids go through PERMIT2, not a plain `transferFrom`.\r\n * `ContinuousClearingAuction.submitBid` calls\r\n * `SafeTransferLib.permit2TransferFrom(...)` unconditionally for a\r\n * non-native currency, which invokes Permit2's\r\n * `transferFrom(from,to,uint160,token)`. Approving the AUCTION directly does\r\n * nothing - the auction never calls `token.transferFrom`. A bidder needs\r\n * BOTH an ERC-20 approval to Permit2 AND a Permit2 allowance for the\r\n * auction as spender.\r\n *\r\n * 2. Native bids must send `msg.value == amount` exactly, and must send zero\r\n * value for ERC-20 currencies (`if (msg.value != 0) revert\r\n * CurrencyIsNotNative()`).\r\n *\r\n * 3. `prevTickPrice` is a search hint, not a price the bidder pays. The\r\n * four-argument overload is literally\r\n * `submitBid(maxPrice, amount, owner, FLOOR_PRICE, hookData)` - always\r\n * correct, but it walks every tick from the floor.\r\n *\r\n * Nothing here broadcasts. These helpers return request objects for a caller's\r\n * wallet client to send, which keeps signing concerns out of the SDK.\r\n */\r\nimport { encodeFunctionData, maxUint256 } from \"viem\";\r\nimport type { Address, Hex } from \"viem\";\r\nimport { auctionAbi } from \"./abis\";\r\nimport type { BeaconClient } from \"./client\";\r\nimport { NATIVE_CURRENCY, PERMIT2_ADDRESS } from \"./constants\";\r\nimport { erc20MetadataAbi } from \"./erc20\";\r\n\r\n/** ERC-20 approval + balance surface. */\r\nexport const erc20ApprovalAbi = [\r\n ...erc20MetadataAbi,\r\n {\r\n type: \"function\",\r\n name: \"allowance\",\r\n inputs: [\r\n { name: \"owner\", type: \"address\" },\r\n { name: \"spender\", type: \"address\" },\r\n ],\r\n outputs: [{ type: \"uint256\" }],\r\n stateMutability: \"view\",\r\n },\r\n {\r\n type: \"function\",\r\n name: \"approve\",\r\n inputs: [\r\n { name: \"spender\", type: \"address\" },\r\n { name: \"amount\", type: \"uint256\" },\r\n ],\r\n outputs: [{ type: \"bool\" }],\r\n stateMutability: \"nonpayable\",\r\n },\r\n {\r\n type: \"function\",\r\n name: \"balanceOf\",\r\n inputs: [{ name: \"account\", type: \"address\" }],\r\n outputs: [{ type: \"uint256\" }],\r\n stateMutability: \"view\",\r\n },\r\n] as const;\r\n\r\n/** Permit2 AllowanceTransfer, the second half of the ERC-20 approval flow. */\r\nexport const permit2Abi = [\r\n {\r\n type: \"function\",\r\n name: \"allowance\",\r\n inputs: [\r\n { name: \"user\", type: \"address\" },\r\n { name: \"token\", type: \"address\" },\r\n { name: \"spender\", type: \"address\" },\r\n ],\r\n outputs: [\r\n { name: \"amount\", type: \"uint160\" },\r\n { name: \"expiration\", type: \"uint48\" },\r\n { name: \"nonce\", type: \"uint48\" },\r\n ],\r\n stateMutability: \"view\",\r\n },\r\n {\r\n type: \"function\",\r\n name: \"approve\",\r\n inputs: [\r\n { name: \"token\", type: \"address\" },\r\n { name: \"spender\", type: \"address\" },\r\n { name: \"amount\", type: \"uint160\" },\r\n { name: \"expiration\", type: \"uint48\" },\r\n ],\r\n outputs: [],\r\n stateMutability: \"nonpayable\",\r\n },\r\n] as const;\r\n\r\nconst UINT128_MAX = 2n ** 128n - 1n;\r\nconst UINT160_MAX = 2n ** 160n - 1n;\r\nconst UINT48_MAX = 2n ** 48n - 1n;\r\n\r\nexport interface TransactionRequest {\r\n to: Address;\r\n data: Hex;\r\n value: bigint;\r\n}\r\n\r\n/**\r\n * Round a price DOWN to the nearest tick boundary.\r\n *\r\n * `submitBid` reverts with `TickPriceNotAtBoundary()` unless `maxPrice` is an\r\n * exact multiple of the auction's `tickSpacing` - the same rule the constructor\r\n * applies to the floor price, but it also applies to every bid. A price typed\r\n * by a human almost never lands on a boundary, so it has to be snapped.\r\n *\r\n * Rounding DOWN is the only safe direction: it can only lower the ceiling a\r\n * bidder is committing to, never raise it above what they asked for.\r\n */\r\nexport function alignPriceToTickBoundary(priceQ96: bigint, tickSpacing: bigint): bigint {\r\n if (tickSpacing <= 0n) {\r\n throw new RangeError(`alignPriceToTickBoundary: tickSpacing must be positive, got ${tickSpacing}`);\r\n }\r\n return (priceQ96 / tickSpacing) * tickSpacing;\r\n}\r\n\r\n/** True when a price sits exactly on a tick boundary. */\r\nexport function isPriceOnTickBoundary(priceQ96: bigint, tickSpacing: bigint): boolean {\r\n return tickSpacing > 0n && priceQ96 % tickSpacing === 0n;\r\n}\r\n\r\nexport interface SubmitBidParams {\r\n auction: Address;\r\n /** Highest price the bidder will pay, Q96-encoded. Use `decimalToQ96`. */\r\n maxPriceQ96: bigint;\r\n /** Bid size, in the currency's smallest unit. uint128 on-chain. */\r\n amount: bigint;\r\n /** Who owns the resulting bid. */\r\n owner: Address;\r\n /** Extra data for a validation hook, if the auction has one. */\r\n hookData?: Hex;\r\n /** True when the auction's currency is native ETH, so `value` must be sent. */\r\n isNativeCurrency: boolean;\r\n /**\r\n * Search hint: the initialised tick at or below `maxPriceQ96`. Omit to use\r\n * the floor price, which is always correct but costs more gas.\r\n * See {@link getPrevTickHint}.\r\n */\r\n prevTickPriceQ96?: bigint;\r\n /**\r\n * The auction's tick spacing. When given, the price is checked against it so\r\n * a misaligned bid fails here with a clear message instead of on-chain with\r\n * an opaque `TickPriceNotAtBoundary()`.\r\n */\r\n tickSpacing?: bigint;\r\n}\r\n\r\n/**\r\n * Encode a `submitBid` call.\r\n *\r\n * @throws RangeError if the amount does not fit the contract's `uint128`.\r\n */\r\nexport function encodeSubmitBid(params: SubmitBidParams): TransactionRequest {\r\n if (params.amount <= 0n) {\r\n throw new RangeError(`submitBid: amount must be positive, got ${params.amount}`);\r\n }\r\n if (params.amount > UINT128_MAX) {\r\n throw new RangeError(`submitBid: amount ${params.amount} exceeds uint128.`);\r\n }\r\n if (params.maxPriceQ96 <= 0n) {\r\n throw new RangeError(`submitBid: maxPriceQ96 must be positive, got ${params.maxPriceQ96}`);\r\n }\r\n if (params.tickSpacing !== undefined && !isPriceOnTickBoundary(params.maxPriceQ96, params.tickSpacing)) {\r\n throw new RangeError(\r\n `submitBid: maxPriceQ96 ${params.maxPriceQ96} is not a multiple of tickSpacing ` +\r\n `${params.tickSpacing} and would revert with TickPriceNotAtBoundary(). ` +\r\n `Use alignPriceToTickBoundary() first.`,\r\n );\r\n }\r\n\r\n const data =\r\n params.prevTickPriceQ96 === undefined\r\n ? encodeFunctionData({\r\n abi: auctionAbi,\r\n functionName: \"submitBid\",\r\n // Four args selects the no-hint overload, which passes FLOOR_PRICE.\r\n args: [params.maxPriceQ96, params.amount, params.owner, params.hookData ?? \"0x\"],\r\n })\r\n : encodeFunctionData({\r\n abi: auctionAbi,\r\n functionName: \"submitBid\",\r\n args: [\r\n params.maxPriceQ96,\r\n params.amount,\r\n params.owner,\r\n params.prevTickPriceQ96,\r\n params.hookData ?? \"0x\",\r\n ],\r\n });\r\n\r\n return {\r\n to: params.auction,\r\n data,\r\n // ERC-20 bids are pulled via Permit2; any value sent would revert with\r\n // CurrencyIsNotNative().\r\n value: params.isNativeCurrency ? params.amount : 0n,\r\n };\r\n}\r\n\r\n/**\r\n * Look up a `prevTickPrice` hint.\r\n *\r\n * The auction inserts a bid by walking initialised ticks upward from this\r\n * price. `nextActiveTickPrice()` is the next initialised tick above the current\r\n * clearing price, so it is a strictly better starting point than the floor\r\n * whenever the bid sits above it. Anything at or above `maxPrice` would make\r\n * the contract search past the target, so those fall back to the floor.\r\n *\r\n * A wrong hint cannot make a bid execute at a different price - it only affects\r\n * how far the contract searches - but a hint above the target reverts, so this\r\n * is deliberately conservative.\r\n */\r\nexport async function getPrevTickHint(\r\n client: BeaconClient,\r\n auction: Address,\r\n maxPriceQ96: bigint,\r\n): Promise<bigint> {\r\n const [floorPrice, nextActive] = await client.publicClient.multicall({\r\n allowFailure: false,\r\n contracts: [\r\n { address: auction, abi: auctionAbi, functionName: \"floorPrice\" },\r\n { address: auction, abi: auctionAbi, functionName: \"nextActiveTickPrice\" },\r\n ],\r\n });\r\n\r\n if (nextActive > floorPrice && nextActive < maxPriceQ96) return nextActive;\r\n return floorPrice;\r\n}\r\n\r\n/** Approve Permit2 to move the bid currency. Step 1 of 2 for ERC-20 bids. */\r\nexport function encodeApproveErc20ToPermit2(\r\n currency: Address,\r\n amount: bigint = maxUint256,\r\n): TransactionRequest {\r\n return {\r\n to: currency,\r\n data: encodeFunctionData({\r\n abi: erc20ApprovalAbi,\r\n functionName: \"approve\",\r\n args: [PERMIT2_ADDRESS, amount],\r\n }),\r\n value: 0n,\r\n };\r\n}\r\n\r\n/**\r\n * Grant the auction a Permit2 allowance. Step 2 of 2 for ERC-20 bids.\r\n *\r\n * @param expiration Unix seconds. Defaults to 30 days out; Permit2 stores this\r\n * as a uint48, and an expired allowance fails at transfer time.\r\n */\r\nexport function encodeApprovePermit2(\r\n currency: Address,\r\n auction: Address,\r\n amount: bigint = UINT160_MAX,\r\n expiration?: bigint,\r\n): TransactionRequest {\r\n if (amount > UINT160_MAX) {\r\n throw new RangeError(`Permit2 approve: amount ${amount} exceeds uint160.`);\r\n }\r\n const expiry = expiration ?? BigInt(Math.floor(Date.now() / 1000) + 30 * 24 * 60 * 60);\r\n if (expiry > UINT48_MAX) {\r\n throw new RangeError(`Permit2 approve: expiration ${expiry} exceeds uint48.`);\r\n }\r\n\r\n return {\r\n to: PERMIT2_ADDRESS,\r\n data: encodeFunctionData({\r\n abi: permit2Abi,\r\n functionName: \"approve\",\r\n args: [currency, auction, amount, Number(expiry)],\r\n }),\r\n value: 0n,\r\n };\r\n}\r\n\r\nexport interface BidReadiness {\r\n /** Whether the bidder holds enough of the currency. */\r\n hasBalance: boolean;\r\n balance: bigint;\r\n /** ERC-20 allowance granted to Permit2. Unlimited for native currency. */\r\n erc20AllowanceToPermit2: bigint;\r\n /** Permit2 allowance granted to the auction. Unlimited for native currency. */\r\n permit2AllowanceToAuction: bigint;\r\n /** When the Permit2 allowance lapses, as unix seconds. */\r\n permit2Expiration: bigint;\r\n /** True when step 1 (ERC-20 -> Permit2) is still needed. */\r\n needsErc20Approval: boolean;\r\n /** True when step 2 (Permit2 -> auction) is still needed. */\r\n needsPermit2Approval: boolean;\r\n /** Convenience: either approval step is outstanding. */\r\n needsApproval: boolean;\r\n}\r\n\r\n/**\r\n * Check whether a bidder can actually submit a given bid right now.\r\n *\r\n * Native-currency auctions need no approvals at all, so those are reported as\r\n * unlimited rather than pretending an allowance was read.\r\n */\r\nexport async function checkBidReadiness(\r\n client: BeaconClient,\r\n params: { auction: Address; currency: Address; bidder: Address; amount: bigint },\r\n): Promise<BidReadiness> {\r\n if (params.currency === NATIVE_CURRENCY) {\r\n const balance = await client.publicClient.getBalance({ address: params.bidder });\r\n return {\r\n hasBalance: balance >= params.amount,\r\n balance,\r\n erc20AllowanceToPermit2: maxUint256,\r\n permit2AllowanceToAuction: maxUint256,\r\n permit2Expiration: maxUint256,\r\n needsErc20Approval: false,\r\n needsPermit2Approval: false,\r\n needsApproval: false,\r\n };\r\n }\r\n\r\n const [balance, erc20Allowance, permit2Allowance] = await client.publicClient.multicall({\r\n allowFailure: false,\r\n contracts: [\r\n {\r\n address: params.currency,\r\n abi: erc20ApprovalAbi,\r\n functionName: \"balanceOf\",\r\n args: [params.bidder],\r\n },\r\n {\r\n address: params.currency,\r\n abi: erc20ApprovalAbi,\r\n functionName: \"allowance\",\r\n args: [params.bidder, PERMIT2_ADDRESS],\r\n },\r\n {\r\n address: PERMIT2_ADDRESS,\r\n abi: permit2Abi,\r\n functionName: \"allowance\",\r\n args: [params.bidder, params.currency, params.auction],\r\n },\r\n ],\r\n });\r\n\r\n const [permit2Amount, permit2Expiration] = permit2Allowance as readonly [bigint, number, number];\r\n const nowSeconds = BigInt(Math.floor(Date.now() / 1000));\r\n const permit2Expired = BigInt(permit2Expiration) <= nowSeconds;\r\n\r\n const needsErc20Approval = erc20Allowance < params.amount;\r\n const needsPermit2Approval = permit2Amount < params.amount || permit2Expired;\r\n\r\n return {\r\n hasBalance: balance >= params.amount,\r\n balance,\r\n erc20AllowanceToPermit2: erc20Allowance,\r\n permit2AllowanceToAuction: permit2Amount,\r\n permit2Expiration: BigInt(permit2Expiration),\r\n needsErc20Approval,\r\n needsPermit2Approval,\r\n needsApproval: needsErc20Approval || needsPermit2Approval,\r\n };\r\n}\r\n\r\n/**\r\n * Every transaction needed to place this bid, in order.\r\n * One entry for a native bid; up to three for an ERC-20 bid.\r\n */\r\nexport function buildBidTransactions(params: {\r\n auction: Address;\r\n currency: Address;\r\n maxPriceQ96: bigint;\r\n amount: bigint;\r\n owner: Address;\r\n readiness: BidReadiness;\r\n prevTickPriceQ96?: bigint;\r\n hookData?: Hex;\r\n /** When given, the price is snapped down to a boundary before encoding. */\r\n tickSpacing?: bigint;\r\n}): Array<{ label: string; request: TransactionRequest }> {\r\n const isNative = params.currency === NATIVE_CURRENCY;\r\n const steps: Array<{ label: string; request: TransactionRequest }> = [];\r\n\r\n if (!isNative) {\r\n if (params.readiness.needsErc20Approval) {\r\n steps.push({\r\n label: \"Approve Permit2 to move the bid currency\",\r\n request: encodeApproveErc20ToPermit2(params.currency),\r\n });\r\n }\r\n if (params.readiness.needsPermit2Approval) {\r\n steps.push({\r\n label: \"Grant the auction a Permit2 allowance\",\r\n request: encodeApprovePermit2(params.currency, params.auction),\r\n });\r\n }\r\n }\r\n\r\n // A human-entered price almost never lands on a tick boundary, and the\r\n // contract rejects it outright. Snap down before encoding.\r\n const alignedPriceQ96 =\r\n params.tickSpacing === undefined\r\n ? params.maxPriceQ96\r\n : alignPriceToTickBoundary(params.maxPriceQ96, params.tickSpacing);\r\n\r\n steps.push({\r\n label: \"Submit bid\",\r\n request: encodeSubmitBid({\r\n auction: params.auction,\r\n maxPriceQ96: alignedPriceQ96,\r\n amount: params.amount,\r\n owner: params.owner,\r\n isNativeCurrency: isNative,\r\n prevTickPriceQ96: params.prevTickPriceQ96,\r\n hookData: params.hookData,\r\n tickSpacing: params.tickSpacing,\r\n }),\r\n });\r\n\r\n return steps;\r\n}\r\n\r\n/**\r\n * Why a bid cannot be submitted, or `null` when it can.\r\n * Callers use this to disable a bid button with an honest reason.\r\n */\r\nexport function describeBidBlocker(input: {\r\n status: \"pending\" | \"live\" | \"ended\";\r\n amount: bigint;\r\n maxPriceQ96: bigint;\r\n floorPriceQ96: bigint;\r\n tickSpacing?: bigint;\r\n readiness?: BidReadiness;\r\n}): string | null {\r\n if (input.status === \"ended\") return \"This auction has ended - bidding is closed.\";\r\n if (input.status === \"pending\") return \"This auction has not opened yet.\";\r\n if (input.amount <= 0n) return \"Enter a bid amount.\";\r\n if (input.maxPriceQ96 <= 0n) return \"Enter a maximum price.\";\r\n if (input.maxPriceQ96 < input.floorPriceQ96) {\r\n return \"Your maximum price is below the auction's floor price.\";\r\n }\r\n if (input.tickSpacing !== undefined) {\r\n const aligned = alignPriceToTickBoundary(input.maxPriceQ96, input.tickSpacing);\r\n if (aligned < input.floorPriceQ96) {\r\n return \"Your maximum price rounds down below the auction's floor price.\";\r\n }\r\n }\r\n if (input.readiness && !input.readiness.hasBalance) return \"Insufficient balance.\";\r\n return null;\r\n}\r\n"]}