{"assessments":[],"deployments":[],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"9d894c12-ed5a-4804-864f-bc7fdc21fab0","kind":"skill:build-contract-project","nodes":[{"acceptedSubmissionHash":"0d1ee449741c5192f6ea147f3ea3a63d43c706cad1fd584e7aa63ab23f4f17ec","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"6b8d2c2ebd3301cff2be8edb1e1cc6ba65c858c02fe7247be81722b969842265","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"6b8d2c2ebd3301cff2be8edb1e1cc6ba65c858c02fe7247be81722b969842265","skillId":"build-contract-project","state":"accepted"}],"objective":"X: https://x.com/imdplace\nGoblin Gold v3.4: fix every high, medium and low finding of audit 1f9510eb (commit 170070d). Keep the design. Add each auditor proof as a test that now passes.\n\n1. HIGH odds escalation (BagGacha.sol:640): never move odds of an empty tier upward. An empty tier's odds may only move down to the nearest lower non-empty tier; if none exists (weights[0] == 0 and no lower non-empty tier), those odds are not redistributed upward: treat the regular lane as empty for that request (Genesis-only spin, or NothingToDraw when Genesis is unavailable). A tier's effective odds never exceed its own odds plus the odds of higher empty tiers. OddsEscalation test passes (odds[2] <= 700).\n2. MEDIUM dust tick (V3Depth.sol:74): inside the fixed band walk up to 8 initialized ticks per direction using IUniswapV3Pool.ticks(t).liquidityNet, carry L' = L +/- liquidityNet across each crossing and use min(L, L') for the next segment; start each search strictly beyond a tick whose price equals sqrtPrice (treat it as crossed, as the v3 swap loop does). DustTick tests pass (one dust tick keeps >= 50% of depth; parked-at-tick depth > 0).\n3. MEDIUM POLManager wiring (GoldHook.sol:370): add mintEscrow() and poolManager() to IHookPOL; bindCheck and bindGacha also require pol.mintEscrow() == NFT and pol.poolManager() == address(poolManager). Mirror both in CheckLaunch.s.sol; extend testBindCheckChecksEveryWireWithoutWaitingForReview. MintEscrowWire test now expects GachaMismatch.\n4. LOW band scaling (V3Depth.sol:36): additionally require the unscaled WETH released inside the band to be at least 1 ETH and bound the payout cap by a fixed multiple of that released amount; state in README and the Curator policy string that the gate is liquidity-equivalent plus a 1 ETH in-band capital floor.\n5. LOW Genesis liveness: document in README and runbook that startTime must be at least 4 h after the first post-seed swap and that a keeper makes a dust GOLD swap at least every 50 minutes; add the keeper step.\n6. LOW CheckLaunch funding: revert only when balanceOf(vault) < genesisSupply, log any surplus.\n7. LOW CheckLaunch VRF and constructor words: call gacha.spinPrice() and require fee > 0 and total > fee; compare address(gacha.vrf()) with the chain wrapper passed as a script argument; check gacha.curator() and gacha.startTime() against script arguments.\n8. Re-pin GACHA_RUNTIME_CODE_HASH under the launch profile (FOUNDRY_VIA_IR=false FOUNDRY_BYTECODE_HASH=none). All tests and v4 fork tests pass under that profile; every runtime under 24,576 bytes; getHookPermissions still matches REQUIRED_FLAGS. Report every new creation and runtime hash.","parentJobId":"9b55be30-3224-4781-b1c7-159127fc178c","planHash":"e8218a62f2d3f07c1486aa2620df38813102b7c5201c53d551430b08ed4b0ed6","previousHash":"5afc70b2a479ee3258f4776d78ebde1cdb534d9b65fae4d918c678ba86f84b07","projectId":"9bf411ca-2719-4cab-b2a3-badcf83ed8d4","publication":{"commit":"b88ff52bcde4baa0fb6434a285fd07091792030e","deliveredAt":"2026-10-14T11:05:55.103Z","repoUrl":"https://github.com/identity-md-launches/launch-1545-goblin-gold"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[],"site":null,"snapshotHash":"00b437810857505edf8706940e9eecd2891fd7e46c26da55a7fc7b1ee34f06aa","state":"completed","submissions":[{"artifacts":[],"attempt":2,"bundleHash":"554f536e58ccbdf63c46d33637f03ddbd5a1d91451c93eec1a46904fc4433cbd","device":"943650541094145e","findings":[],"hash":"0d1ee449741c5192f6ea147f3ea3a63d43c706cad1fd584e7aa63ab23f4f17ec","nodeId":"38354c43-3c18-4c69-8331-5806a5ba94b4","outcome":"completed","summary":"Implemented all seven audit fixes and added 28 regression tests.\n\n- Build, tests, and formatting pass in both profiles.\n- 226 local tests pass per profile; all 3 mainnet fork tests pass.\n- BagGacha hash re-pinned; all launch runtimes are below 24,576 bytes.\n- Protected files and NFT source remain unchanged.\n\n[Report and all hashes](/home/imd2/.identitymd/work/9d894c12-ed5a-4804-864f-bc7fdc21fab0/38354c43-3c18-4c69-8331-5806a5ba94b4/report.md) · [Launch and keeper runbook](/home/imd2/.identitymd/work/9d894c12-ed5a-4804-864f-bc7fdc21fab0/38354c43-3c18-4c69-8331-5806a5ba94b4/docs/runbook.md)","treeHash":"c8047dc6d71740a878bfd73cb9ecc2496df99ff2","usage":{"cachedInputTokens":8256384,"inputTokens":199523,"model":"gpt-6-astra","outputTokens":57975,"runtime":"codex","turns":13,"wallClockMs":1810820}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"f84fad79f165f267","findings":[],"hash":"e559ae06440b9df9ae8432b3d4e250fde87cc43cdd0ad52b59cda5980a359946","nodeId":"38354c43-3c18-4c69-8331-5806a5ba94b4","outcome":"failed","summary":"workspace routing discovery timed out","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":"gpt-6-astra","outputTokens":0,"runtime":"codex","turns":10,"wallClockMs":2016876}}],"verification":[{"checks":[{"durationMs":366549,"exitCode":0,"name":"build","output":"Compiling 160 files with Solc 0.8.26\nSolc 0.8.26 finished in 366.36s\nCompiler run successful!\n","passed":true},{"durationMs":16350,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/fork/MainnetFork.t.sol:MainnetForkTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 420.92µs (0.00ns CPU time)\n\nRan 2 tests for test/TickMath.t.sol:TickMathTest\n[PASS] testKnownValues() (gas: 4315)\n[PASS] testOutOfRangeReverts() (gas: 3855)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 172.40µs (64.67µs CPU time)\n\nRan 1 test for test/fork/MainnetV4Fork.t.sol:MainnetV4ForkTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 242.72µs (0.00ns CPU time)\n\nRan 4 tests for test/OracleConsumerConformance.t.sol:OracleConsumerConformanceTest\n[PASS] test_acceptsAFreshSignatureFromTheVectorKey() (gas: 1290993)\n[PASS] test_acceptsTheProtocolSignature() (gas: 75772)\n[PASS] test_callbackSelectorIsCanonical() (gas: 3894)\n[PASS] test_digestMatchesTheProtocol() (gas: 13545)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 2.01ms (1.25ms CPU time)\n\nRan 2 tests for test/BagGachaV2.t.sol:EarlyGachaTest\n[PASS] testDayOneRevenueBeforeSelloutAndMintRemainsRefundable() (gas: 1233705)\n[PASS] testPreReleaseRefundCannotRecycleFreeSpinCoupons() (gas: 332820)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 3.70ms (749.25µs CPU time)\n\nRan 1 test for test/audit930ea061/PolFloorInverted.t.sol:PolFloorInvertedTest\n[PASS] testThirtyMinutePumpLowersThePolFloorAndTheBurnBuysAtThePumpedPrice() (gas: 1509683)\nLogs:\n  floor used by POLManager (GOLD per 0.1 ETH): 88645491483832526\n  floor at the 4-hour TWAP               : 88645491483832526\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 6.54ms (2.83ms CPU time)\n\nRan 10 tests for test/audit1f9510eb/LaunchPreflight.t.sol:LaunchPreflightTest\n[PASS] testConstructorWrapperWithoutPriceFunctionRejected() (gas: 163609)\n[PASS] testExactFundingPasses() (gas: 324455)\n[PASS] testMintEscrowWireNowRejectsGachaMismatch() (gas: 617003)\n[PASS] testOneWeiDonationPassesAndRemainsInVault() (gas: 384471)\nLogs:\n  GenesisVault surplus GOLD (base units) 1\n\n[PASS] testPriceRevertFailsBeforeNaming() (gas: 86046)\n[PASS] testUnderfundingFailsBeforeNaming() (gas: 149810)\n[PASS] testVaultCuratorMismatchRejected() (gas: 82222)\n[PASS] testWrongExpectedWrapperCuratorAndStartAreRejected() (gas: 190207)\n[PASS] testWrongPoolManagerWireRejectedBeforeAndAfterReview() (gas: 621150)\n[PASS] testZeroFeeAndNonPositiveSpinPriceRejected() (gas: 213111)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 16.61ms (13.70ms CPU time)\n\nRan 1 test for test/audit930ea061/GenesisAndBinding.t.sol:SameTransactionGenesisGateTest\n[PASS] testTwoBuysCannotOpenThinGenesisGateInTheSameTransaction() (gas: 1393146)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 6.88ms (2.35ms CPU time)\n\nRan 2 tests for test/audit1f9510eb/GenesisDark.t.sol:GenesisDarkTest\n[PASS] testGenesisOpensFourHoursAfterFirstPostSeedSwapWithFiftyMinuteKeeper() (gas: 2401814)\n[PASS] testKeeperRestoresSeasonedLaneAfterStaleness() (gas: 2844955)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 11.42ms (7.56ms CPU time)\n\nRan 2 tests for test/audit930ea061/GenesisAndBinding.t.sol:GenesisSpotDepthTest\n[PASS] testAddLiquidityCallbackChecksCallerPoolAndFullRange() (gas: 84790)\n[PASS] testFourHourPumpCapAndRegularGenesisExclusion() (gas: 2473232)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 23.10ms (12.83ms CPU time)\n\nRan 8 tests for test/Audit85083c05.t.sol:Audit85083c05HookTest\n[PASS] testBindGachaLookalike() (gas: 2802302)\n[PASS] testGenesisDepthIsBoundedByTheEthTheLiquidityHolds() (gas: 36498)\n[PASS] testJitPayoutCap() (gas: 2644097)\n[PASS] testMinOutBpsMatchesTheFeeSchedule() (gas: 14976)\n[PASS] testMinOutFloorBehaviour() (gas: 536500)\n[PASS] testPartialFillFee() (gas: 1981863)\n[PASS] testPolFeeBrick() (gas: 3313799)\n[PASS] testShortWindowPushNoLongerInflatesGenesisBags() (gas: 1988705)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 29.68ms (23.98ms CPU time)\n\nRan 2 tests for test/audit930ea061/ConcentratedDepth.t.sol:ConcentratedDepthTest\n[PASS] testNarrowPositionInflatesGenesisDepthAndPayoutCap() (gas: 1293526)\n[PASS] testNarrowPositionMakesAPoolBelowMinimumDepthPriceable() (gas: 1286365)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 95.44ms (3.45ms CPU time)\n\nRan 3 tests for test/audit1f9510eb/OddsEscalation.t.sol:OddsEscalationDrainTest\n[PASS] testEmptyTierOddsMustNotEscalateToTheOnlyBag() (gas: 777033)\n[PASS] testFuzzOddsOnlyMoveDown(uint8,uint256) (runs: 256, μ: 1559761, ~: 1413655)\nLogs:\n  Bound result 1\n\n[PASS] testOnlyLargeInventoryFallsBackToGenesisWithoutRegularLiability() (gas: 1373084)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 167.04ms (166.62ms CPU time)\n\nRan 15 tests for test/GoldHook.t.sol:GoldHookTest\n[PASS] testConstructorRejectsZeroAndFlagsAreTheRequiredSet() (gas: 8696)\n[PASS] testExactInputBuyPaysFeeAndLaunchTaxOnTheEthInput() (gas: 304374)\n[PASS] testExactOutputBuyCapCountsFeeAndTax() (gas: 140294)\n[PASS] testExactOutputBuyChargesFeeAndTaxOnTopOfTheEthConsumed() (gas: 333936)\n[PASS] testFlushBeforeBindPaysHoldersOnlyAndBindRequiresPinnedCode() (gas: 1343235)\n[PASS] testFuzzFeeSplitInvariantOnBuys(uint256,uint256) (runs: 256, μ: 350716, ~: 351199)\nLogs:\n  Bound result 1999999988\n  Bound result 1981\n\n[PASS] testGenesisOneEthDepthBoundaryAndPayoutCapOnRealPool() (gas: 5557114)\n[PASS] testGenesisPricingStaleAndThinChecks() (gas: 3971824)\n[PASS] testHookPermissionsMatchCoreABIAndEveryFlag() (gas: 22848)\n[PASS] testInitializeOnlyByFactoryOnlyPlatformPoolOnlyOnce() (gas: 3145394)\n[PASS] testObserveTracksTickCumulativeAndTwapOraclePricesGenesisFromHook() (gas: 828036)\n[PASS] testPOLManagerBuyAndBurnAndFullRangeLiquidityHeldForever() (gas: 1187869)\n[PASS] testPinnedGachaRuntimeCodeHash() (gas: 43733)\nLogs:\n  BagGacha runtime code hash (this build): 0x2362cf1f844d00193c23b74e46c57cead60b44de33d2dee2831994cb02b0af09\n\n[PASS] testSellsPayOnePercentOfEthOutAndNoTax() (gas: 660120)\n[PASS] testTaxScheduleAndBuyCap() (gas: 945070)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 190.30ms (195.75ms CPU time)\n\nRan 1 test for test/GasBench.t.sol:GasBenchTest\n[PASS] testMaximumInventorySnapshotGas() (gas: 11359547)\nLogs:\n  32 Bags / 128 distinct pools request gas (mock observe): 10727301\n  32 Bag draw gas: 389866\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 273.34ms (22.57ms CPU time)\n\nRan 7 tests for test/audit930ea061/GenesisAndBinding.t.sol:BindPreflightTest\n[PASS] testAValidPreflightedSetStillBindsIfReleaseWinsTheRace() (gas: 319263036)\n[PASS] testBindCheckChecksEveryWireWithoutWaitingForReview() (gas: 3021133)\n[PASS] testMalformedDependencyReturnsReasonAndDoesNotBind() (gas: 381111)\n[PASS] testPathAFundingAndPreflightBeforeOwnerNamesTargets() (gas: 1383837)\nLogs:\n  GenesisVault surplus GOLD (base units) 1\n\n[PASS] testPostBindRetargetRemainsAnNFTOwnerTrustAssumption() (gas: 369495)\n[PASS] testPreflightRejectsIncorrectRuntimeAndWiring() (gas: 1193276)\n[PASS] testWrongCodeIsDetectedBeforeNamingOrReview() (gas: 102629)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 655.79ms (669.44ms CPU time)\n\nRan 14 tests for test/Audit85083c05.t.sol:Audit85083c05GachaTest\n[PASS] testAdmissionLimits() (gas: 175541)\n[PASS] testBuybackReturnsBagAndRematures() (gas: 1894090)\n[PASS] testCancelledFreeSpinRefundsNothingButReleasesTheGenesisTokens() (gas: 988973)\n[PASS] testFinalizeAfterWindowIsKeep() (gas: 1834858)\n[PASS] testGenesisAndFreeSpins() (gas: 1531263)\n[PASS] testGenesisPaidSpinSplit() (gas: 1183826)\n[PASS] testImmatureBagsNotDrawable() (gas: 555714)\n[PASS] testOneOutstandingDrawAndCallbackRules() (gas: 1556400)\n[PASS] testRegularSpinKeep() (gas: 2255050)\n[PASS] testRejectsUnexpectedEthAndEmptyCredit() (gas: 154595)\n[PASS] testReserveTooLowBlocksSpins() (gas: 119422)\n[PASS] testSpinRules() (gas: 494100)\n[PASS] testUnfulfilledRequestCanBeCancelledAfterADay() (gas: 3074224)\n[PASS] testWithdrawExitFeeAndUnpricedExitFree() (gas: 1224372)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 666.19ms (52.17ms CPU time)\n\nRan 1 test for test/GoldHook.invariant.t.sol:GoldHookInvariantTest\n[PASS] invariant_chargesEqualClaimsPlusFlushesAndNothingSticksInTheHook() (runs: 24, calls: 960, reverts: 0)\n\n╭-------------+----------+-------+---------+----------╮\n| Contract    | Selector | Calls | Reverts | Discards |\n+=====================================================+\n| HookHandler | advance  | 199   | 0       | 0        |\n|-------------+----------+-------+---------+----------|\n| HookHandler | bind     | 191   | 0       | 0        |\n|-------------+----------+-------+---------+----------|\n| HookHandler | buy      | 194   | 0       | 0        |\n|-------------+----------+-------+---------+----------|\n| HookHandler | flush    | 172   | 0       | 0        |\n|-------------+----------+-------+---------+----------|\n| HookHandler | sell     | 204   | 0       | 0        |\n╰-------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 499999999000007864\n  Bound result 462\n  Bound result 4999999999000008280\n  Bound result 995\n  Bound result 499999999000000016\n  Bound result 440\n  Bound result 700\n  Bound result 869771482696300\n  Bound result 282439955833832102\n  Bound result 1000000000\n  Bound result 999999000002501\n  Bound result 499999999000012103\n  Bound result 400\n  Bound result 1016\n  Bound result 802\n  Bound result 432501834424294964\n  Bound result 499999999000009851\n  Bound result 304\n  Bound result 516\n  Bound result 2093265657996194613\n  Bound result 3987125940561872\n  Bound result 4999999999000055906\n  Bound result 1500000000000000\n  Bound result 400\n  Bound result 19999999980000\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 759.91ms (742.50ms CPU time)\n\nRan 21 tests for test/BagGachaV2.t.sol:BagGachaV2Test\n[PASS] testAdmissionLimits() (gas: 175641)\n[PASS] testBuybackReturnsBagAndRematures() (gas: 1894042)\n[PASS] testCreditTransferFailureRollsBackAndReentryCannotPayTwice() (gas: 2150035)\n[PASS] testFeeOnTransferTokenCannotCreateUnderfundedBag() (gas: 1144630)\n[PASS] testFinalizeAfterWindowIsKeep() (gas: 1834681)\n[PASS] testFreeSpinAfterRegularSnapshotAlwaysGenesis() (gas: 2594139)\n[PASS] testFreeSpinUnfundedGenesisCannotUseRegularBags() (gas: 2132335)\n[PASS] testFuzzSolventPayoutAndNoDoublePayment(uint256,uint256,bool) (runs: 256, μ: 3028721, ~: 3063721)\nLogs:\n  Bound result 197000000000000000651\n\n[PASS] testGenesisAndFreeSpins() (gas: 1531341)\n[PASS] testGenesisPaidSpinSplit() (gas: 1183737)\n[PASS] testImmatureBagsNotDrawable() (gas: 555814)\n[PASS] testMissingVRFKeepsSnapshotLockedWithoutRefundOrReroll() (gas: 1140712)\n[PASS] testOddsAndOracleChangesDoNotRewritePendingSnapshot() (gas: 2213998)\n[PASS] testOldVRFIdCannotFulfillNewPendingRequest() (gas: 2851749)\n[PASS] testOneOutstandingDrawAndCallbackRules() (gas: 1556434)\n[PASS] testRegularSpinKeep() (gas: 2254835)\n[PASS] testRejectsUnexpectedEthAndEmptyCredit() (gas: 154607)\n[PASS] testReserveTooLowBlocksSpins() (gas: 119544)\n[PASS] testSpinRules() (gas: 494199)\n[PASS] testUnavailableGenesisDoesNotBlockRegularDrawOrWithdrawal() (gas: 1689623)\n[PASS] testWithdrawExitFeeAndUnpricedExitFree() (gas: 1224409)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 867.88ms (257.81ms CPU time)\n\nRan 19 tests for test/PayoutCap.t.sol:PayoutCapTest\n[PASS] testAdmissionLimits() (gas: 175607)\n[PASS] testBuybackReturnsBagAndRematures() (gas: 1896260)\n[PASS] testCapAtExactlyTheValueDoesNotSplitAndOneWeiBelowDoes() (gas: 4007065)\n[PASS] testCapBindsAndBuybackRelistsOnlyTheWonPortionWhileTheRemainderStaysDrawable() (gas: 4546850)\n[PASS] testCapBindsSplitsBagAndKeepPaysOnlyTheCappedPortion() (gas: 3756613)\n[PASS] testCapChangesAfterTheRequestDoNotRewriteTheCommittedSplit() (gas: 4020244)\n[PASS] testCapIsPerTokenAndAnUncappedTokenLeavesNothingBehind() (gas: 4480106)\n[PASS] testFinalizeAfterWindowIsKeep() (gas: 1836907)\n[PASS] testFuzzCappedPayoutNeverExceedsCapAndTokensAreConserved(uint256,uint256,bool) (runs: 256, μ: 3368983, ~: 3390388)\nLogs:\n  Bound result 125453122291388449637\n  Bound result 68391302536265793\n\n[PASS] testGenesisAndFreeSpins() (gas: 1531329)\n[PASS] testGenesisPaidSpinSplit() (gas: 1185916)\n[PASS] testGenesisQuoteIsCappedAndTheSurplusStaysInTheVault() (gas: 2626438)\n[PASS] testImmatureBagsNotDrawable() (gas: 555780)\n[PASS] testOneOutstandingDrawAndCallbackRules() (gas: 1556422)\n[PASS] testRegularSpinKeep() (gas: 2257012)\n[PASS] testRejectsUnexpectedEthAndEmptyCredit() (gas: 154595)\n[PASS] testReserveTooLowBlocksSpins() (gas: 119510)\n[PASS] testSpinRules() (gas: 494188)\n[PASS] testWithdrawExitFeeAndUnpricedExitFree() (gas: 1224380)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 891.58ms (400.41ms CPU time)\n\nRan 7 tests for test/audit930ea061/V3Depth.t.sol:V3JitCapTest\n[PASS] testBitmapNegativeTicksAndWordBoundaries() (gas: 364871)\n[PASS] testBothTokenOrdersUseTheEthSideOfTheBand() (gas: 1824979)\n[PASS] testFuzzBandDepthIsBoundedAndNarrowerRangesOnlyReduceIt(int24,uint128,uint16) (runs: 256, μ: 351999, ~: 353277)\nLogs:\n  Bound result -540\n  Bound result 999999000000000000005868\n  Bound result 25\n\n[PASS] testHarmonicMeanUsesTimeAtEachLiquidityAndHandlesCounterWrap() (gas: 270914)\n[PASS] testLiquidityRemovalAndInsufficientHistoryFailImmediately() (gas: 374464)\n[PASS] testOutOfRangeWethDoesNotPassMinimumLiquidity() (gas: 710616)\n[PASS] testV3JitCapCannotMoveInOneTransaction() (gas: 801091)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 898.42ms (907.92ms CPU time)\n\nRan 12 tests for test/GoblinNFTV2.t.sol:GoblinNFTV2Test\n[PASS] testDeploymentOwnerIsExplicit() (gas: 13478470)\n[PASS] testFuzzMintWalletCap(uint256,uint256) (runs: 256, μ: 614530, ~: 636006)\nLogs:\n  Bound result 10\n  Bound result 3\n\n[PASS] testMintAndLimits() (gas: 337136)\n[PASS] testRefundBeforeSellout() (gas: 308650)\n[PASS] testRefundsReopenAfter90Days() (gas: 318717206)\n[PASS] testRepeatedReviewRestartsFullSevenDaysAndOwnersCanTransfer() (gas: 319084703)\n[PASS] testRevealAndTokenURI() (gas: 319704648)\n[PASS] testRevealRearmsAfter256Blocks() (gas: 318772413)\n[PASS] testRevenue() (gas: 319229391)\n[PASS] testSelloutLocksRefundsAndRelease() (gas: 319518725)\n[PASS] testSharedReleaseTargetAndRevenueExcludedFromSplit() (gas: 319082333)\n[PASS] testTargetsRequireCodeInEverySlotAndRenounceOnlyAfterRelease() (gas: 319075641)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 931.45ms (5.19s CPU time)\n\nRan 15 tests for test/Curator.t.sol:CuratorTest\n[PASS] testApproveStoreThenPermissionlessExecuteAndReplay() (gas: 1622036)\n[PASS] testConsumedOracleUuidCannotApproveSecondRequest() (gas: 2009500)\n[PASS] testCrossContractAndCrossChainSignaturesRejected() (gas: 4596621)\n[PASS] testDirectSettersAndOutsideBoundsRejected() (gas: 185774)\n[PASS] testFuzzDiscountBounds(uint256) (runs: 256, μ: 529779, ~: 44233)\nLogs:\n  Bound result 695\n\n[PASS] testIntakeAndPaymentTokenAreCompiledInConstantsNotConstructorWords() (gas: 76285)\n[PASS] testLiquidityRecheckedAtExecutionAndCanonicalPoolRequired() (gas: 2956442)\n[PASS] testNoAnswerFailureAndTimeoutDoNotChangeSettings() (gas: 2600711)\n[PASS] testOddsRelativeTenPercentAndRollingDay() (gas: 3276290)\n[PASS] testPoolWhitelistDelistPauseAndUnpauseOnlyByApprovedAction() (gas: 4309210)\n[PASS] testProductionPinsTheRequiredSignerAndHasNoOwner() (gas: 93636)\n[PASS] testProposeReentrancyCannotOpenNestedRequest() (gas: 1492894)\n[PASS] testStaleConcurrentApprovalAndExpiredExecutionCannotChangeSettings() (gas: 2800598)\n[PASS] testWeakPanelExpiredFutureAndStaleAnswersRejected() (gas: 1692061)\n[PASS] testWrongSenderUnknownIdWrongQuestionAndTampering() (gas: 1545142)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 931.51ms (943.94ms CPU time)\n\nRan 15 tests for test/audit930ea061/CancelRace.t.sol:CancelRaceTest\n[PASS] testAdmissionLimits() (gas: 175563)\n[PASS] testBuybackReturnsBagAndRematures() (gas: 1893954)\n[PASS] testExactDeadlineIgnoresFulfilmentBeforeCancelEvenWhenPaused() (gas: 1364852)\n[PASS] testFinalizeAfterWindowIsKeep() (gas: 1834700)\n[PASS] testFulfilmentOneSecondBeforeDeadlineStillDrawsAfterIt() (gas: 1449750)\n[PASS] testFuzzAtOrAfterDeadlineBothTransactionOrdersCancel(uint256,uint32,bool) (runs: 256, μ: 1312087, ~: 1261746)\n[PASS] testGenesisAndFreeSpins() (gas: 1531244)\n[PASS] testGenesisPaidSpinSplit() (gas: 1183665)\n[PASS] testImmatureBagsNotDrawable() (gas: 555736)\n[PASS] testOneOutstandingDrawAndCallbackRules() (gas: 1556444)\n[PASS] testRegularSpinKeep() (gas: 2254785)\n[PASS] testRejectsUnexpectedEthAndEmptyCredit() (gas: 154595)\n[PASS] testReserveTooLowBlocksSpins() (gas: 119444)\n[PASS] testSpinRules() (gas: 494122)\n[PASS] testWithdrawExitFeeAndUnpricedExitFree() (gas: 1224230)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 1.01s (79.55ms CPU time)\n\nRan 12 tests for test/BagGacha.t.sol:BagGachaTest\n[PASS] testAdmissionLimits() (gas: 175519)\n[PASS] testBuybackReturnsBagAndRematures() (gas: 1893816)\n[PASS] testFinalizeAfterWindowIsKeep() (gas: 1834606)\n[PASS] testGenesisAndFreeSpins() (gas: 1531190)\n[PASS] testGenesisPaidSpinSplit() (gas: 1183530)\n[PASS] testImmatureBagsNotDrawable() (gas: 555692)\n[PASS] testOneOutstandingDrawAndCallbackRules() (gas: 1556400)\n[PASS] testRegularSpinKeep() (gas: 2254630)\n[PASS] testRejectsUnexpectedEthAndEmptyCredit() (gas: 154595)\n[PASS] testReserveTooLowBlocksSpins() (gas: 119378)\n[PASS] testSpinRules() (gas: 494056)\n[PASS] testWithdrawExitFeeAndUnpricedExitFree() (gas: 1224165)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 1.01s (22.71ms CPU time)\n\nRan 10 tests for test/GoblinNFTDeployed.t.sol:GoblinNFTDeployedTest\n[PASS] testFuzzDeferredRevenueConservation(uint256,uint256,uint256) (runs: 256, μ: 875613, ~: 924727)\nLogs:\n  Bound result 1\n  Bound result 51298246339753281928\n  Bound result 0\n\n[PASS] testMintAndLimits() (gas: 337135)\n[PASS] testPreReleaseRevenueIsDeferredAndNotClaimable() (gas: 457033)\n[PASS] testRefundBeforeSellout() (gas: 308650)\n[PASS] testRefundsReopenAfter90Days() (gas: 318717162)\n[PASS] testReleaseSplitsDeferredPoolAcrossLiveTokensThenAccruesImmediately() (gas: 319317118)\n[PASS] testRevealAndTokenURI() (gas: 319715170)\n[PASS] testRevealRearmsAfter256Blocks() (gas: 318772413)\n[PASS] testRevenue() (gas: 319229443)\n[PASS] testSelloutLocksRefundsAndRelease() (gas: 319518732)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 1.08s (4.47s CPU time)\n\nRan 11 tests for test/TwapOracle.t.sol:TwapOracleTest\n[PASS] testDonationsAndInactiveLiquidityCannotSatisfyTheLiquidityBound() (gas: 349650)\n[PASS] testFuzzGenesisOneEthBoundary(uint128) (runs: 256, μ: 91412, ~: 83253)\nLogs:\n  Bound result 4361923497350453\n\n[PASS] testFuzzInBandCapitalBoundary(uint128) (runs: 256, μ: 140121, ~: 128470)\nLogs:\n  Bound result 4361923497350453\n\n[PASS] testGenesisFourHourLiquidityAndPriceAreIndependentBounds() (gas: 390639)\n[PASS] testGenesisPoolOneEthBoundary() (gas: 520516)\n[PASS] testInsufficientLiquidityAndMissingHistory() (gas: 305933)\n[PASS] testMinOfBothTWAPsAndReverseQuote() (gas: 421203)\n[PASS] testPayoutCapIsFivePercentOfEthSideDepth() (gas: 966315)\n[PASS] testPolAndGenesisUseOppositeQuotesAndBothRespectPauses() (gas: 260032)\n[PASS] testRegularPoolEquivalentDepthAndCapitalFloor() (gas: 624576)\n[PASS] testStaleDelistedAndPausedValuesRevertWETHMayPause() (gas: 247718)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 1.11s (1.11s CPU time)\n\nRan 7 tests for test/audit1f9510eb/BandScale.t.sol:BandScaleTest\n[PASS] testAuditorBandScaleCannotPassOnQuarterEthOfCapital() (gas: 447948)\n[PASS] testCrossingShrinksLiquidityAndNeverCreditsAnIncrease() (gas: 292250)\n[PASS] testDownwardCrossingSubtractsLiquidityNet() (gas: 140033)\n[PASS] testDustTickCannotBreakOracleQuoteAfterListing() (gas: 695764)\n[PASS] testFuzzPayoutNeverExceedsReleasedCapital(uint128) (runs: 256, μ: 466219, ~: 466338)\nLogs:\n  Bound result 9999999978004361923497350454\n\n[PASS] testOneEthFloorAndCapBothTokenOrders() (gas: 2091205)\n[PASS] testTraversalStopsAtEightCrossingsAndDiscardsUnvisitedTail() (gas: 757165)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 1.11s (1.11s CPU time)\n\nRan 5 tests for test/GenesisVault.t.sol:GenesisVaultTest\n[PASS] testDividendsAndGenesisClaimsRemainSolventAndCannotPayTwice() (gas: 583410)\n[PASS] testFuzzCurveBounds(uint256,uint256,uint256,bool) (runs: 256, μ: 248382, ~: 246464)\nLogs:\n  Bound result 8664\n  Bound result 60393150\n  Bound result 532\n\n[PASS] testHugeQuoteCappedAtThreeDaysAndReopensWithSchedule() (gas: 237359)\n[PASS] testNotStartedUnfundedAndProtectedEntryPoints() (gas: 184742)\n[PASS] testScheduleDecayAndDiscountLimits() (gas: 445663)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 1.11s (59.98ms CPU time)\n\nRan 6 tests for test/audit1f9510eb/DustTick.t.sol:DustTickDepthTest\n[PASS] testNegativeDustTicksRetainDepthInBothDirections() (gas: 166306)\n[PASS] testOneDustTickWithinOneSpacingMakesA100EthPoolThin() (gas: 206006)\nLogs:\n  token0 depth seen with one dust tick at +60: 99.999999999999999963\n\n[PASS] testParkedAtLowerBoundaryCannotCreditEmptyLeftSide() (gas: 153786)\n[PASS] testParkedAtTickAfterUpwardSwapRetainsDownwardDepth() (gas: 164667)\n[PASS] testParkedAtUpperBoundaryCannotCreditEmptyRightSide() (gas: 171402)\n[PASS] testSwapParkedExactlyAtAnInitializedTickMeasuresZero() (gas: 169659)\nLogs:\n  token0 depth seen when parked at tick 60: 99700464504408921888\n\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 1.11s (3.22ms CPU time)\n\nRan 7 tests for test/GoblinNFT.t.sol:GoblinNFTTest\n[PASS] testMintAndLimits() (gas: 337105)\n[PASS] testRefundBeforeSellout() (gas: 308628)\n[PASS] testRefundsReopenAfter90Days() (gas: 318717096)\n[PASS] testRevealAndTokenURI() (gas: 319704626)\n[PASS] testRevealRearmsAfter256Blocks() (gas: 318772347)\n[PASS] testRevenue() (gas: 319229369)\n[PASS] testSelloutLocksRefundsAndRelease() (gas: 319518707)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 1.11s (4.44s CPU time)\n\nRan 1 test for test/GoblinEscrow.invariant.t.sol:GoblinEscrowInvariantTest\n[PASS] invariant_reviewsRefundsRevenueReleaseAndPullsRemainSolvent() (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+----------+-------+---------+----------╮\n| Contract      | Selector | Calls | Reverts | Discards |\n+=======================================================+\n| EscrowHandler | advance  | 981   | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| EscrowHandler | claim    | 1011  | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| EscrowHandler | deposit  | 1106  | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| EscrowHandler | pull     | 1019  | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| EscrowHandler | refund   | 1002  | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| EscrowHandler | release  | 992   | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| EscrowHandler | renounce | 1047  | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| EscrowHandler | review   | 1034  | 0       | 0        |\n╰---------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 320000\n  Bound result 10000\n  Bound result 873994180367884056\n  Bound result 2345\n  Bound result 6392284\n  Bound result 4835\n  Bound result 419684\n  Bound result 1701\n  Bound result 9517\n  Bound result 3696\n  Bound result 1731\n  Bound result 7258148\n  Bound result 6451\n  Bound result 3601\n  Bound result 6400000\n  Bound result 4\n  Bound result 5760000\n  Bound result 1346890\n  Bound result 9153\n  Bound result 10000\n  Bound result 200000000000000000\n  Bound result 97\n  Bound result 7160\n  Bound result 7240\n  Bound result 6157428\n  Bound result 7424\n  Bound result 10000\n  Bound result 8509\n  Bound result 1000000000000000000\n  Bound result 18202859192519780\n  Bound result 928194707376460443\n  Bound result 4160010\n  Bound result 8\n  Bound result 1000000000000000000\n  Bound result 648495\n  Bound result 14464\n  Bound result 6441\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.28s (2.12s CPU time)\n\nRan 1 test for test/BagGacha.invariant.t.sol:BagGachaInvariantTest\n[PASS] invariant_allReserveAndTokenLiabilitiesAreBacked() (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------------+-------+---------+----------╮\n| Contract     | Selector           | Calls | Reverts | Discards |\n+================================================================+\n| GachaHandler | advance            | 713   | 0       | 0        |\n|--------------+--------------------+-------+---------+----------|\n| GachaHandler | cancel             | 658   | 0       | 0        |\n|--------------+--------------------+-------+---------+----------|\n| GachaHandler | changeAvailability | 713   | 0       | 0        |\n|--------------+--------------------+-------+---------+----------|\n| GachaHandler | changeCap          | 676   | 0       | 0        |\n|--------------+--------------------+-------+---------+----------|\n| GachaHandler | claim              | 694   | 0       | 0        |\n|--------------+--------------------+-------+---------+----------|\n| GachaHandler | draw               | 694   | 0       | 0        |\n|--------------+--------------------+-------+---------+----------|\n| GachaHandler | flush              | 674   | 0       | 0        |\n|--------------+--------------------+-------+---------+----------|\n| GachaHandler | fulfill            | 662   | 0       | 0        |\n|--------------+--------------------+-------+---------+----------|\n| GachaHandler | seal               | 658   | 0       | 0        |\n|--------------+--------------------+-------+---------+----------|\n| GachaHandler | settle             | 696   | 0       | 0        |\n|--------------+--------------------+-------+---------+----------|\n| GachaHandler | spin               | 719   | 0       | 0        |\n|--------------+--------------------+-------+---------+----------|\n| GachaHandler | withdrawBag        | 635   | 0       | 0        |\n╰--------------+--------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 199000000000010742\n  Bound result 67688074040815924748\n  Bound result 197000000000211062851\n  Bound result 199000000000008345\n  Bound result 199000000000000541\n  Bound result 197000000000000002395\n  Bound result 1\n  Bound result 197000000000000000568\n  Bound result 199000000000020150\n  Bound result 197000000000000013503\n  Bound result 89482306490985744\n  Bound result 4679\n  Bound result 199000001000000001\n  Bound result 6637\n  Bound result 1\n  Bound result 2\n  Bound result 3\n  Bound result 194336000008627460\n  Bound result 6401\n  Bound result 1\n  Bound result 197000000000000000006\n  Bound result 197000000000000011796\n  Bound result 125583\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.32s (2.32s CPU time)\n\nRan 1 test for test/Curator.invariant.t.sol:CuratorInvariantTest\n[PASS] invariant_onlyFreshApprovedBoundedChangesExecuteOnce() (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+-----------------+-------+---------+----------╮\n| Contract       | Selector        | Calls | Reverts | Discards |\n+===============================================================+\n| CuratorHandler | advance         | 1654  | 0       | 0        |\n|----------------+-----------------+-------+---------+----------|\n| CuratorHandler | bypass          | 1596  | 0       | 0        |\n|----------------+-----------------+-------+---------+----------|\n| CuratorHandler | discount        | 1699  | 0       | 0        |\n|----------------+-----------------+-------+---------+----------|\n| CuratorHandler | invalidProposal | 1594  | 0       | 0        |\n|----------------+-----------------+-------+---------+----------|\n| CuratorHandler | replay          | 1649  | 0       | 0        |\n╰----------------+-----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 8807\n  Bound result 974\n  Bound result 60499\n  Bound result 1\n  Bound result 0\n  Bound result 720\n  Bound result 24552\n  Bound result 1191\n  Bound result 12500\n  Bound result 73600\n  Bound result 304\n  Bound result 548\n  Bound result 864\n  Bound result 77\n  Bound result 592\n  Bound result 962\n  Bound result 808\n  Bound result 250\n  Bound result 755\n  Bound result 200\n  Bound result 892\n  Bound result 120\n  Bound result 976\n  Bound result 140\n  Bound result 855\n  Bound result 468\n  Bound result 352\n  Bound result 0\n  Bound result 88\n  Bound result 1198\n  Bound result 306\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.51s (2.51s CPU time)\n\nRan 1 test for test/GoblinNFT.invariant.t.sol:GoblinNFTInvariantTest\n[PASS] invariant_revenueAndRefundBackingMatchIndependentLedger() (runs: 128, calls: 8192, reverts: 0)\n\n╭------------+----------+-------+---------+----------╮\n| Contract   | Selector | Calls | Reverts | Discards |\n+====================================================+\n| NFTHandler | claim    | 1641  | 0       | 0        |\n|------------+----------+-------+---------+----------|\n| NFTHandler | deposit  | 1653  | 0       | 0        |\n|------------+----------+-------+---------+----------|\n| NFTHandler | mint     | 1611  | 0       | 0        |\n|------------+----------+-------+---------+----------|\n| NFTHandler | refund   | 1640  | 0       | 0        |\n|------------+----------+-------+---------+----------|\n| NFTHandler | transfer | 1647  | 0       | 0        |\n╰------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 5355387\n  Bound result 90500000000000000\n  Bound result 2\n  Bound result 2\n  Bound result 16\n  Bound result 318095278327487706\n  Bound result 18\n  Bound result 11\n  Bound result 2974\n  Bound result 18\n  Bound result 2\n  Bound result 12\n  Bound result 2\n  Bound result 102000000000000000\n  Bound result 12\n  Bound result 5\n  Bound result 23\n  Bound result 6\n  Bound result 11\n  Bound result 37\n  Bound result 6\n  Bound result 13\n  Bound result 20\n  Bound result 55\n  Bound result 111032442922896861\n  Bound result 23245\n  Bound result 24200\n  Bound result 49\n  Bound result 32\n  Bound result 32490019871\n  Bound result 7\n  Bound result 3004\n  Bound result 59\n  Bound result 6\n  Bound result 22399\n  Bound result 44\n  Bound result 22\n  Bound result 10\n  Bound result 8\n  Bound result 52\n  Bound result 74\n  Bound result 91000000000000000\n  Bound result 30\n  Bound result 70\n  Bound result 17\n  Bound result 4452\n  Bound result 7\n  Bound result 33\n  Bound result 20\n  Bound result 30\n  Bound result 10\n  Bound result 51\n  Bound result 1000000000000000000\n  Bound result 51\n  Bound result 2\n  Bound result 96\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 16.07s (16.06s CPU time)\n\nRan 35 test suites in 16.08s (39.24s CPU time): 226 tests passed, 0 failed, 2 skipped (228 total tests)\n","passed":true},{"durationMs":174,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"BagGacha.cancelRequest()\",\"BagGacha.choose(uint256,bool)\",\"BagGacha.claimBag(uint256)\",\"BagGacha.draw()\",\"BagGacha.finalize(uint256)\",\"BagGacha.flush()\",\"BagGacha.freeSpin(uint256)\",\"BagGacha.fundReserve()\",\"BagGacha.fundVRF()\",\"BagGacha.holderSpin(uint256)\",\"BagGacha.pullMintEscrow()\",\"BagGacha.rawFulfillRandomWords(uint256,uint256[])\",\"BagGacha.receive()\",\"BagGacha.seal(address[],uint256[])\",\"BagGacha.setTierOdds(uint256[4])\",\"BagGacha.spin()\",\"BagGacha.withdraw(uint256)\",\"BagGacha.withdrawCredit()\",\"Curator.clear(uint256)\",\"Curator.execute(uint256)\",\"Curator.onOracleFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"Curator.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"Curator.propose(uint8,bytes,(uint64,uint64),bytes32,uint256)\",\"GenesisVault.claim()\",\"GenesisVault.claimDividends()\",\"GenesisVault.commit(bool)\",\"GenesisVault.deliver(address,uint256)\",\"GenesisVault.setDiscount(uint256)\",\"GenesisVault.setShares(address,uint256)\",\"GenesisVault.uncommit(uint256)\",\"GoblinNFT.approve(address,uint256)\",\"GoblinNFT.claimRelease()\",\"GoblinNFT.claimRevenue(uint256[])\",\"GoblinNFT.depositRevenue()\",\"GoblinNFT.mint(uint256)\",\"GoblinNFT.refund(uint256)\",\"GoblinNFT.release()\",\"GoblinNFT.renounceOwnership()\",\"GoblinNFT.reveal()\",\"GoblinNFT.safeTransferFrom(address,address,uint256)\",\"GoblinNFT.safeTransferFrom(address,address,uint256,bytes)\",\"GoblinNFT.setApprovalForAll(address,bool)\",\"GoblinNFT.setLaunchTargets(address,address,address)\",\"GoblinNFT.transferFrom(address,address,uint256)\",\"GoblinNFT.transferOwnership(address)\",\"GoldHook.afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)\",\"GoldHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"GoldHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"GoldHook.bindGacha(address)\",\"GoldHook.flush()\",\"GoldHook.receive()\",\"GoldHook.unlockCallback(bytes)\",\"POLManager.addLiquidity(uint256)\",\"POLManager.buyAndBurn(uint256)\",\"POLManager.depositBurn()\",\"POLManager.depositPOL()\",\"POLManager.pullMintEscrow()\",\"POLManager.receive()\",\"POLManager.recycle()\",\"POLManager.unlockCallback(bytes)\",\"TwapOracle.setPool(address,address)\",\"TwapOracle.setTokenPaused(address,bool)\"],\"files\":{\".gitignore\":3,\"README.md\":531,\"docs/build-hashes.json\":142,\"docs/hook-permissions.json\":16,\"docs/runbook.md\":58,\"foundry.toml\":14,\"remappings.txt\":2,\"report.md\":101,\"script/CheckLaunch.s.sol\":63,\"script/DeployGoblinNFT.s.sol\":13,\"src/BagGacha.sol\":950,\"src/Curator.sol\":405,\"src/GenesisVault.sol\":225,\"src/GoblinArt.sol\":235,\"src/GoblinNFT.sol\":334,\"src/GoldHook.sol\":546,\"src/IMDProtocol.sol\":19,\"src/OracleAttestation.sol\":221,\"src/POLManager.sol\":239,\"src/TickMath.sol\":77,\"src/TwapOracle.sol\":331,\"src/v3/V3Depth.sol\":135,\"src/v4/Hooks.sol\":23,\"src/v4/V4Minimal.sol\":92,\"test/Audit85083c05.t.sol\":477,\"test/BagGacha.invariant.t.sol\":235,\"test/BagGacha.t.sol\":384,\"test/BagGachaV2.t.sol\":287,\"test/Curator.invariant.t.sol\":125,\"test/Curator.t.sol\":390,\"test/GasBench.t.sol\":92,\"test/GenesisVault.t.sol\":111,\"test/GoblinEscrow.invariant.t.sol\":184,\"test/GoblinNFT.invariant.t.sol\":131,\"test/GoblinNFT.t.sol\":205,\"test/GoblinNFTDeployed.t.sol\":78,\"test/GoblinNFTV2.t.sol\":103,\"test/GoldHook.invariant.t.sol\":116,\"test/GoldHook.t.sol\":427,\"test/OracleConsumerConformance.t.sol\":146,\"test/PayoutCap.t.sol\":306,\"test/TickMath.t.sol\":22,\"test/TwapOracle.t.sol\":233,\"test/audit1f9510eb/BandScale.t.sol\":159,\"test/audit1f9510eb/DustTick.t.sol\":107,\"test/audit1f9510eb/GenesisDark.t.sol\":66,\"test/audit1f9510eb/LaunchPreflight.t.sol\":147,\"test/audit1f9510eb/OddsEscalation.t.sol\":210,\"test/audit930ea061/CancelRace.t.sol\":69,\"test/audit930ea061/ConcentratedDepth.t.sol\":139,\"test/audit930ea061/GenesisAndBinding.t.sol\":259,\"test/audit930ea061/PolFloorInverted.t.sol\":151,\"test/audit930ea061/V3Depth.t.sol\":173,\"test/fork/MainnetFork.t.sol\":90,\"test/fork/MainnetV4Fork.t.sol\":160,\"test/mocks/AdversarialMocks.sol\":42,\"test/mocks/CuratorMocks.sol\":199,\"test/mocks/Mocks.sol\":183,\"test/mocks/V4Fixture.sol\":116,\"test/v4-core/BUSL_LICENSE\":63,\"test/v4-core/ERC6909.sol\":90,\"test/v4-core/ERC6909Claims.sol\":23,\"test/v4-core/Extsload.sol\":64,\"test/v4-core/Exttload.sol\":40,\"test/v4-core/MIT_LICENSE\":7,\"test/v4-core/NoDelegateCall.sol\":33,\"test/v4-core/PoolManager.sol\":394,\"test/v4-core/ProtocolFees.sol\":71,\"test/v4-core/interfaces/IExtsload.sol\":21,\"test/v4-core/interfaces/IExttload.sol\":15,\"test/v4-core/interfaces/IHooks.sol\":152,\"test/v4-core/interfaces/IPoolManager.sol\":217,\"test/v4-core/interfaces/IProtocolFees.sol\":52,\"test/v4-core/interfaces/callback/IUnlockCallback.sol\":10,\"test/v4-core/interfaces/external/IERC20Minimal.sol\":48,\"test/v4-core/interfaces/external/IERC6909Claims.sol\":66,\"test/v4-core/libraries/BitMath.sol\":49,\"test/v4-core/libraries/CurrencyDelta.sol\":42,\"test/v4-core/libraries/CurrencyReserves.sol\":39,\"test/v4-core/libraries/CustomRevert.sol\":120,\"test/v4-core/libraries/FixedPoint128.sol\":8,\"test/v4-core/libraries/FixedPoint96.sol\":10,\"test/v4-core/libraries/FullMath.sol\":117,\"test/v4-core/libraries/Hooks.sol\":344,\"test/v4-core/libraries/LPFeeLibrary.sol\":79,\"test/v4-core/libraries/LiquidityMath.sol\":20,\"test/v4-core/libraries/Lock.sol\":28,\"test/v4-core/libraries/NonzeroDeltaCount.sol\":35,\"test/v4-core/libraries/ParseBytes.sol\":29,\"test/v4-core/libraries/Pool.sol\":620,\"test/v4-core/libraries/Position.sol\":103,\"test/v4-core/libraries/ProtocolFeeLibrary.sol\":47,\"test/v4-core/libraries/SafeCast.sol\":60,\"test/v4-core/libraries/SqrtPriceMath.sol\":292,\"test/v4-core/libraries/StateLibrary.sol\":345,\"test/v4-core/libraries/SwapMath.sol\":108,\"test/v4-core/libraries/TickBitmap.sol\":121,\"test/v4-core/libraries/TickMath.sol\":238,\"test/v4-core/libraries/TransientStateLibrary.sol\":48,\"test/v4-core/libraries/UnsafeMath.sol\":29,\"test/v4-core/solmate/Owned.sol\":44,\"test/v4-core/test/PoolModifyLiquidityTest.sol\":96,\"test/v4-core/test/PoolSwapTest.sol\":117,\"test/v4-core/test/PoolTestBase.sol\":31,\"test/v4-core/types/BalanceDelta.sol\":72,\"test/v4-core/types/BeforeSwapDelta.sol\":38,\"test/v4-core/types/Currency.sol\":118,\"test/v4-core/types/PoolId.sol\":17,\"test/v4-core/types/PoolKey.sol\":22,\"test/v4-core/types/PoolOperation.sol\":26,\"test/v4-core/types/Slot0.sol\":95,\"test/v4-core/utils/CurrencySettler.sol\":46},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":24728,"exitCode":0,"name":"slither","output":"[high/medium] arbitrary-send-eth at src/BagGacha.sol:914: BagGacha.flush() (src/BagGacha.sol#914-925) sends eth to arbitrary user\n[high/medium] arbitrary-send-eth at src/GoldHook.sol:391: GoldHook.flush() (src/GoldHook.sol#391-406) sends eth to arbitrary user\n[high/medium] arbitrary-send-eth at src/BagGacha.sol:515: BagGacha._request(address,uint256,uint256,bool,bool) (src/BagGacha.sol#515-560) sends eth to arbitrary user\n[high/medium] reentrancy-eth at src/BagGacha.sol:515: Reentrancy in BagGacha._request(address,uint256,uint256,bool,bool) (src/BagGacha.sol#515-560):\n[medium/medium] divide-before-multiply at src/TickMath.sol:10: TickMath.sqrtPriceAtTick(int24) (src/TickMath.sol#10-76) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/GoldHook.sol:467: GoldHook._observeSingle(uint32,uint32,int24) (src/GoldHook.sol#467-483) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/GoldHook.sol:282: GoldHook.afterSwap(address,PoolKey,SwapParams,int256,bytes) (src/GoldHook.sol#282-324) performs a multiplication on the result of a division:\n[medium/high] incorrect-equality at src/GoldHook.sol:467: GoldHook._observeSingle(uint32,uint32,int24) (src/GoldHook.sol#467-483) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/GoldHook.sol:432: GoldHook.liquidityAt(uint32) (src/GoldHook.sol#432-440) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/GoldHook.sol:442: GoldHook._write(int24,uint128) (src/GoldHook.sol#442-455) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/BagGacha.sol:565: BagGacha._commitGenesis(bool) (src/BagGacha.sol#565-585) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/BagGacha.sol:565: BagGacha._commitGenesis(bool) (src/BagGacha.sol#565-585) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/BagGacha.sol:515: BagGacha._request(address,uint256,uint256,bool,bool) (src/BagGacha.sol#515-560) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/POLManager.sol:199: POLManager._addFullRange(uint256,uint256) (src/POLManager.sol#199-225) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/GoldHook.sol:467: GoldHook._observeSingle(uint32,uint32,int24) (src/GoldHook.sol#467-483) uses a dangerous strict equality:\n[medium/medium] reentrancy-no-eth at src/POLManager.sol:141: Reentrancy in POLManager.addLiquidity(uint256) (src/POLManager.sol#141-160):\n[medium/medium] reentrancy-no-eth at src/Curator.sol:155: Reentrancy in Curator.propose(Curator.Kind,bytes,Curator.Window,bytes32,uint256) (src/Curator.sol#155-182):\n[medium/medium] reentrancy-no-eth at src/BagGacha.sol:515: Reentrancy in BagGacha._request(address,uint256,uint256,bool,bool) (src/BagGacha.sol#515-560):\n[medium/medium] uninitialized-local at src/GoldHook.sol:270: GoldHook.beforeSwap(address,PoolKey,SwapParams,bytes).delta (src/GoldHook.sol#270) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Curator.sol:214: Curator._validate(Curator.Kind,bytes).token (src/Curator.sol#214) is a local variable never initialized\n[medium/medium] uninitialized-local at src/BagGacha.sol:293: BagGacha.setTierOdds(uint256[4]).sum (src/BagGacha.sol#293) is a local variable never initialized\n[medium/medium] uninitialized-local at src/GoldHook.sol:289: GoldHook.afterSwap(address,PoolKey,SwapParams,int256,bytes).tax (src/GoldHook.sol#289) is a local variable never initialized\n[medium/medium] uninitialized-local at src/v3/V3Depth.sol:64: V3Depth._walk(address,uint160,int24,int24,uint128,uint160,bool).crossed (src/v3/V3Depth.sol#64) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Curator.sol:229: Curator._validate(Curator.Kind,bytes).sum (src/Curator.sol#229) is a local variable never initialized\n[medium/medium] uninitialized-local at src/BagGacha.sol:566: BagGacha._commitGenesis(bool).quoted (src/BagGacha.sol#566) is a local variable never initialized\n[medium/medium] uninitialized-local at src/GoldHook.sol:290: GoldHook.afterSwap(address,PoolKey,SwapParams,int256,bytes).unspecified (src/GoldHook.sol#290) is a local variable never initialized\n[medium/medium] unused-return at src/GoldHook.sol:391: GoldHook.flush() (src/GoldHook.sol#391-406) ignores return value by poolManager.unlock(abi.encode(total)) (src/GoldHook.sol#401)\n[medium/medium] unused-return at src/POLManager.sol:199: POLManager._addFullRange(uint256,uint256) (src/POLManager.sol#199-225) ignores return value by poolManager.settle{value: ethUsed}() (src/POLManager.sol#216)\n[medium/medium] unused-return at src/POLManager.sol:199: POLManager._addFullRange(uint256,uint256) (src/POLManager.sol#199-225) ignores return value by poolManager.settle() (src/POLManager.sol#220)\n[medium/medium] unused-return at src/TwapOracle.sol:240: TwapOracle._checkGenesisPool() (src/TwapOracle.sol#240-262) ignores return value by (sqrtPrice,None) = goldHook.slot0() (src/TwapOracle.sol#243)\n[medium/medium] unused-return at src/POLManager.sol:188: POLManager._buy(uint256,uint256,address) (src/POLManager.sol#188-197) ignores return value by poolManager.settle{value: uint256(uint128(- a0))}() (src/POLManager.sol#195)\n[medium/medium] unused-return at src/POLManager.sol:199: POLManager._addFullRange(uint256,uint256) (src/POLManager.sol#199-225) ignores return value by (sqrtPrice,None) = V4Lib.slot0(poolManager,V4Lib.poolId(poolKey())) (src/POLManager.sol#200)\n[medium/medium] unused-return at src/GoldHook.sol:419: GoldHook.observe(uint32[]) (src/GoldHook.sol#419-426) ignores return value by (None,tick) = V4Lib.slot0(poolManager,poolId) (src/GoldHook.sol#421)\n[medium/medium] unused-return at src/GoldHook.sol:262: GoldHook.beforeSwap(address,PoolKey,SwapParams,bytes) (src/GoldHook.sol#262-276) ignores return value by (None,tick) = V4Lib.slot0(poolManager,poolId) (src/GoldHook.sol#268)\n[medium/medium] unused-return at src/POLManager.sol:199: POLManager._addFullRange(uint256,uint256) (src/POLManager.sol#199-225) ignores return value by (delta,None) = poolManager.modifyLiquidity(poolKey(),ModifyLiquidityParams(TICK_LOWER,TICK_UPPER,int256(uint256(liquidity)),bytes32(0)),) (src/POLManager.sol#203-205)\n[low/medium] missing-zero-check at src/GoldHook.sol:333: GoldHook.bindGacha(address).gacha_ (src/GoldHook.sol#333) lacks a zero-check on :\n[low/medium] calls-loop at src/BagGacha.sol:320: BagGacha.bagValue(uint256) (src/BagGacha.sol#320-325) has external calls inside a loop: v += oracle.valueInEth(b.tokens[i],b.amounts[i]) (src/BagGacha.sol#323)\n[low/medium] calls-loop at src/BagGacha.sol:599: BagGacha._buildSnapshot() (src/BagGacha.sol#599-647) has external calls inside a loop: (got,full,amounts,capped) = this.bagPayout(id) (src/BagGacha.sol#608-613)\n[low/medium] calls-loop at src/BagGacha.sol:404: BagGacha.seal(address[],uint256[]) (src/BagGacha.sol#404-438) has external calls inside a loop: tokens[i] == genesis.token() || amounts[i] < 1 || ! oracle.isPriced(tokens[i]) (src/BagGacha.sol#410)\n[low/medium] calls-loop at src/BagGacha.sol:404: BagGacha.seal(address[],uint256[]) (src/BagGacha.sol#404-438) has external calls inside a loop: beforeBalance = IERC20(tokens[i_scope_0]).balanceOf(address(this)) (src/BagGacha.sol#433)\n[low/medium] calls-loop at src/BagGacha.sol:599: BagGacha._buildSnapshot() (src/BagGacha.sol#599-647) has external calls inside a loop: (got,full,amounts,capped) = this.bagPayout(id) (src/BagGacha.sol#608-613)\n[low/medium] calls-loop at src/BagGacha.sol:404: BagGacha.seal(address[],uint256[]) (src/BagGacha.sol#404-438) has external calls inside a loop: IERC20(tokens[i_scope_0]).balanceOf(address(this)) - beforeBalance != amounts[i_scope_0] (src/BagGacha.sol#435)\n[low/medium] calls-loop at src/BagGacha.sol:404: BagGacha.seal(address[],uint256[]) (src/BagGacha.sol#404-438) has external calls inside a loop: value += oracle.valueInEth(tokens[i],amounts[i]) (src/BagGacha.sol#414)\n[low/medium] calls-loop at src/BagGacha.sol:599: BagGacha._buildSnapshot() (src/BagGacha.sol#599-647) has external calls inside a loop: (got,full,amounts,capped) = this.bagPayout(id) (src/BagGacha.sol#608-613)\n[low/medium] calls-loop at src/BagGacha.sol:330: BagGacha.bagPayout(uint256) (src/BagGacha.sol#330-351) has external calls inside a loop: (v,cap) = oracle.valueAndCap(b.tokens[i],full) (src/BagGacha.sol#340)\n[low/medium] reentrancy-benign at src/POLManager.sol:141: Reentrancy in POLManager.addLiquidity(uint256) (src/POLManager.sol#141-160):\n[low/medium] reentrancy-benign at src/GoldHook.sol:391: Reentrancy in GoldHook.flush() (src/GoldHook.sol#391-406):\n[low/medium] reentrancy-benign at src/POLManager.sol:127: Reentrancy in POLManager.buyAndBurn(uint256) (src/POLManager.sol#127-137):\n[low/medium] reentrancy-benign at src/BagGacha.sol:515: Reentrancy in BagGacha._request(address,uint256,uint256,bool,bool) (src/BagGacha.sol#515-560):\n[low/medium] reentrancy-benign at src/Curator.sol:155: Reentrancy in Curator.propose(Curator.Kind,bytes,Curator.Window,bytes32,uint256) (src/Curator.sol#155-182):\n[low/medium] reentrancy-events at src/GoldHook.sol:282: Reentrancy in GoldHook.afterSwap(address,PoolKey,SwapParams,int256,bytes) (src/GoldHook.sol#282-324):\n[low/medium] timestamp at src/GenesisVault.sol:178: GenesisVault._accrue() (src/GenesisVault.sol#178-187) uses timestamp for comparisons\n[low/medium] timestamp at src/GenesisVault.sol:103: GenesisVault.target() (src/GenesisVault.sol#103-108) uses timestamp for comparisons\n[low/medium] timestamp at src/GoldHook.sol:203: GoldHook.buyTaxBps() (src/GoldHook.sol#203-210) uses timestamp for comparisons\n[low/medium] timestamp at src/BagGacha.sol:759: BagGacha._select(uint256) (src/BagGacha.sol#759-778) uses timestamp for comparisons\n[low/medium] timestamp at src/BagGacha.sol:651: BagGacha.rawFulfillRandomWords(uint256,uint256[]) (src/BagGacha.sol#651-660) uses timestamp for comparisons\n[low/medium] timestamp at src/GenesisVault.sol:205: GenesisVault.pendingDividends(address) (src/GenesisVault.sol#205-213) uses timestamp for comparisons\n[low/medium] timestamp at src/GenesisVault.sol:113: GenesisVault.quote(bool) (src/GenesisVault.sol#113-135) uses timestamp for comparisons\n[low/medium] timestamp at src/BagGacha.sol:808: BagGacha.choose(uint256,bool) (src/BagGacha.sol#808-814) uses timestamp for comparisons\n[low/medium] timestamp at src/GoblinNFT.sol:129: GoblinNFT.refundsOpen() (src/GoblinNFT.sol#129-134) uses timestamp for comparisons\n[low/medium] timestamp at src/GoldHook.sol:486: GoldHook._surroundings(uint32) (src/GoldHook.sol#486-510) uses timestamp for comparisons\n[low/medium] timestamp at src/Curator.sol:329: Curator.onOracleResult(bytes32,OracleAttestation.Attestation,bytes) (src/Curator.sol#329-359) uses timestamp for comparisons\n[low/medium] timestamp at src/Curator.sol:376: Curator.clear(uint256) (src/Curator.sol#376-383) uses timestamp for comparisons\n[low/medium] timestamp at src/GoldHook.sol:442: GoldHook._write(int24,uint128) (src/GoldHook.sol#442-455) uses timestamp for comparisons\n[low/medium] timestamp at src/GoldHook.sol:536: GoldHook._checkBuyCap(uint256) (src/GoldHook.sol#536-540) uses timestamp for comparisons\n[low/medium] timestamp at src/GoldHook.sol:432: GoldHook.liquidityAt(uint32) (src/GoldHook.sol#432-440) uses timestamp for comparisons\n[low/medium] timestamp at src/BagGacha.sol:666: BagGacha.cancelRequest() (src/BagGacha.sol#666-689) uses timestamp for comparisons\n[low/medium] timestamp at src/BagGacha.sol:479: BagGacha.holderSpin(uint256) (src/BagGacha.sol#479-486) uses timestamp for comparisons\n[low/medium] timestamp at src/BagGacha.sol:290: BagGacha.setTierOdds(uint256[4]) (src/BagGacha.sol#290-304) uses timestamp for comparisons\n[low/medium] timestamp at src/GoblinNFT.sol:221: GoblinNFT.release() (src/GoblinNFT.sol#221-236) uses timestamp for comparisons\n[low/medium] timestamp at src/TwapOracle.sol:216: TwapOracle._checkPool(address,address) (src/TwapOracle.sol#216-232) uses timestamp for comparisons\n[low/medium] timestamp at src/GoldHook.sol:333: GoldHook.bindGacha(address) (src/GoldHook.sol#333-347) uses timestamp for comparisons\n[low/medium] timestamp at src/GenesisVault.sol:215: GenesisVault.claimDividends() (src/GenesisVault.sol#215-224) uses timestamp for comparisons\n[low/medium] timestamp at src/BagGacha.sol:442: BagGacha.withdraw(uint256) (src/BagGacha.sol#442-467) uses timestamp for comparisons\n[low/medium] timestamp at src/BagGacha.sol:489: BagGacha.freeSpin(uint256) (src/BagGacha.sol#489-501) uses timestamp for comparisons\n[low/medium] timestamp at src/BagGacha.sol:515: BagGacha._request(address,uint256,uint256,bool,bool) (src/BagGacha.sol#515-560) uses timestamp for comparisons\n[low/medium] timestamp at src/BagGacha.sol:817: BagGacha.finalize(uint256) (src/BagGacha.sol#817-822) uses timestamp for comparisons\n[low/medium] timestamp at src/BagGacha.sol:565: BagGacha._commitGenesis(bool) (src/BagGacha.sol#565-585) uses timestamp for comparisons\n[low/medium] timestamp at src/Curator.sol:385: Curator.execute(uint256) (src/Curator.sol#385-404) uses timestamp for comparisons\n[low/medium] timestamp at src/GoldHook.sol:467: GoldHook._observeSingle(uint32,uint32,int24) (src/GoldHook.sol#467-483) uses timestamp for comparisons\n[low/medium] timestamp at src/TwapOracle.sol:240: TwapOracle._checkGenesisPool() (src/TwapOracle.sol#240-262) uses timestamp for comparisons\n[low/medium] timestamp at src/OracleAttestation.sol:157: OracleAttestationConsumer._verifyAttestation(OracleAttestation.Attestation,bytes) (src/OracleAttestation.sol#157-165) uses timestamp for comparisons\n[low/medium] timestamp at src/BagGacha.sol:599: BagGacha._buildSnapshot() (src/BagGacha.sol#599-647) uses timestamp for comparisons\n[low/medium] timestamp at src/BagGacha.sol:472: BagGacha.spin() (src/BagGacha.sol#472-476) uses timestamp for comparisons","passed":true},{"durationMs":1355,"exitCode":0,"name":"aderyn","output":"[high] contract-locks-ether at src/GoldHook.sol:69: Contract locks Ether without a withdraw function (2 places)\n[high] eth-send-unchecked-address at src/BagGacha.sol:891: ETH transferred without address checks\n[high] incorrect-shift-order at src/v4/V4Minimal.sol:76: Incorrect Assembly Shift Parameter Order\n[high] reentrancy-state-change at src/BagGacha.sol:410: Reentrancy: State change after external call (15 places)\n[high] unsafe-casting at src/TickMath.sol:75: Unsafe Casting of integers\n[low] centralization-risk at src/GoblinNFT.sol:20: Centralization Risk (3 places)\n[low] costly-loop at src/BagGacha.sol:604: Costly operations inside loop (4 places)\n[low] empty-require-revert at src/v3/V3Depth.sol:133: Empty `require()` / `revert()` Statement\n[low] internal-function-used-once at src/OracleAttestation.sol:185: Internal Function Used Only Once (2 places)\n[low] large-numeric-literal at src/BagGacha.sol:85: Large Numeric Literal (12 places)\n[low] literal-instead-of-constant at src/BagGacha.sol:290: Literal Instead of Constant (303 places)\n[low] local-variable-shadowing at src/GoldHook.sol:75: Local Variable Shadows State Variable\n[low] missing-inheritance at src/TwapOracle.sol:49: Missing Inheritance\n[low] require-revert-in-loop at src/BagGacha.sol:294: Loop Contains `require`/`revert` (11 places)\n[low] state-change-without-event at src/POLManager.sol:164: State Change Without Event\n[low] state-no-address-check at src/GoldHook.sol:343: Address State Variable Set Without Checks\n[low] state-variable-could-be-immutable at src/BagGacha.sol:93: State Variable Could Be Immutable (8 places)\n[low] storage-array-length-not-cached at src/BagGacha.sol:604: Storage Array Length not Cached (2 places)\n[low] unchecked-return at src/GoldHook.sol:401: Unchecked Return (4 places)\n[low] uninitialized-local-variable at src/BagGacha.sol:294: Uninitialized Local Variable (3 places)\n[low] unsafe-oz-erc721-mint at src/GoblinNFT.sol:124: Unsafe `ERC721::_mint()`\n[low] unused-public-function at src/BagGacha.sol:320: Public Function Not Used Internally (9 places)","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"0d1ee449741c5192f6ea147f3ea3a63d43c706cad1fd584e7aa63ab23f4f17ec","verifiedTreeHash":"c8047dc6d71740a878bfd73cb9ecc2496df99ff2","verifierVersion":"0.1.0+67c588fa"}]}