{"schemaVersion":"hookr.external-hook-catalog.v2","entryShape":"manifest-plus-derived","standardUrl":"https://hookr.fun/integrate/hooks","manifestSchemaUrl":"https://hookr.fun/schemas/external-hook.v2.json","policy":{"verifiedAt":"2026-08-26T16:00:00.000Z","hooklistRepository":"Uniswap/hooklist","hooklistCommit":"92f38fc5b2419bdd042f18eb8a8e12f0da921b0f","deploymentRepository":"Uniswap/contracts","deploymentCommit":"4cfc406c8e34da3ce04e60657a7825075b64fd22","robinhoodUniversalRouter":{"deploymentRegistryAddress":"0x06afBA43fd06227fA663b0dAeCF536F6eaA6BF99","renderedDocsAddress":"0x8876789976decbfcbbbe364623c63652db8c0904","version":"2.1.1","permissionedPools":false,"deploymentCommit":"023196a","addressStatus":"official-sources-conflict","releaseRule":"Pin the selected address, runtime code hash, constructor immutables, and fork evidence; never resolve this conflict by the label latest."},"routingGuideUrl":"https://support.uniswap.org/hc/en-us/articles/48291859140621-Routing-for-hooked-pools","routingFormUrl":"https://share.hsforms.com/15fMHwt6NTzuKuQdxw6nHwws8pgg"},"totals":{"integrations":3,"sourceOnly":3,"deployments":0},"integrations":[{"manifest":{"$schema":"https://hookr.fun/schemas/external-hook.v2.json","schemaVersion":"hookr.external-hook.v2","slug":"voladelta-looong","name":"Looong Hook","summary":"A canonical LOOONG/WETH pool where verified buys create non-transferable custodied positions, mature holders can earn WETH rewards after 30 days, and part of the sell fee can move from early profitable exits to eligible holders.","status":"source-only","integrationMode":"standalone-hook-product","author":{"github":"voladelta"},"source":{"repository":"https://github.com/voladelta/looong-hook","pinnedCommit":"cf498807aab6fa959109b2eada6dc77a23dfa84b","license":"MIT","hookContract":"src/LooongHook.sol","contracts":["src/LooongHook.sol","src/LooongHookFactory.sol","src/LooongLaunchV1.sol","src/LooongRouter.sol","src/interfaces/ILooongHook.sol","src/libraries/LooongAccounting.sol"]},"provenance":{"deploymentModel":"per-hook-instance","factoryContract":"src/LooongHookFactory.sol","factoryInterface":"typed","allowlistedFactoryInterface":false,"creationCodeHashEvidence":"source-derived","runtimeCodeHashEvidence":"absent","constructorArgsEvidence":"source-documented","saltDerivationEvidence":"source-documented","proxyModel":"non-proxy","mutableAuthorityReview":"reviewed-none","operatorDependencyReview":"reviewed-none"},"integration":{"poolScope":"canonical-pool-only","supportedTracks":["hook_publication","hook_token_launch"],"standardSwapBehavior":"Source tests cover ordinary exact-input and exact-output swaps in both directions with empty hookData through LooongRouter. Verified position buys and sells use one-shot authenticated intents through that router; an optional exact-output witness uses a separate versioned domain. Compatibility with Hookr's production router path is not yet proven.","dedicatedRouter":{"requiredForAllSwaps":false,"contract":"src/LooongRouter.sol","purpose":"Required for position-creating buys and owner-bound sells from hook custody. Ordinary swaps can use empty hookData without creating or consuming a position."},"routingCompatibility":{"hookData":{"mode":"optional-versioned","version":"64 bytes: INTENT_DOMAIN + intentId (exact-router) or WITNESS_DOMAIN + witnessGross (unrestricted)","maxBytes":64,"trustedFields":["other"],"emptyDataBehavior":"Empty hookData selects the unrestricted ordinary forwarded-sender path and does not create, sell, or mutate a verified position."},"swapMatrix":{"exactInputZeroForOne":{"status":"source-tested","routers":[{"family":"dedicated-router","identity":"src/LooongRouter.sol at the pinned source commit","status":"source-tested","evidenceUrls":["https://github.com/voladelta/looong-hook/tree/cf498807aab6fa959109b2eada6dc77a23dfa84b"]}]},"exactInputOneForZero":{"status":"source-tested","routers":[{"family":"dedicated-router","identity":"src/LooongRouter.sol at the pinned source commit","status":"source-tested","evidenceUrls":["https://github.com/voladelta/looong-hook/tree/cf498807aab6fa959109b2eada6dc77a23dfa84b"]}]},"exactOutputZeroForOne":{"status":"source-tested","routers":[{"family":"dedicated-router","identity":"src/LooongRouter.sol at the pinned source commit","status":"source-tested","evidenceUrls":["https://github.com/voladelta/looong-hook/tree/cf498807aab6fa959109b2eada6dc77a23dfa84b"]}]},"exactOutputOneForZero":{"status":"source-tested","routers":[{"family":"dedicated-router","identity":"src/LooongRouter.sol at the pinned source commit","status":"source-tested","evidenceUrls":["https://github.com/voladelta/looong-hook/tree/cf498807aab6fa959109b2eada6dc77a23dfa84b"]}]}},"officialUniversalRouter":{"status":"untested","requiredAddressIdentity":true,"notes":"No exact deployed Universal Router address, code hash, hookData quadrant, or final-settlement evidence has been supplied."},"multihop":{"status":"untested","notes":"The pinned source proves a dedicated one-pool router, not current Universal Router multihop composition."},"quoteDiscovery":{"mode":"none","alfCompatibility":"unsupported","simulationActorBinding":"not-applicable","notes":"The hook does not implement the Uniswap ALF indicative-quote interfaces."},"finalAmountEvidence":{"poolManagerSwapBasis":"pre-after-swap-return-delta","canonicalRouterEvent":null,"genericRouterFinalSettlement":"untested","notes":"PoolManager Swap deltas are not wallet-final amounts when beforeSwap or afterSwap returns deltas; generic-router settlement remains unproved."}},"dependencies":[{"name":"Uniswap v4 PoolManager","kind":"protocol","required":true},{"name":"Wrapped Ether","kind":"token","required":true},{"name":"LOOONG ERC-20","kind":"token","required":true},{"name":"LooongRouter","kind":"router","required":true},{"name":"LooongHookFactory","kind":"factory","required":true},{"name":"LooongLaunchV1","kind":"factory","required":true}]},"uniswapClassification":{"flags":{"beforeInitialize":true,"afterInitialize":false,"beforeAddLiquidity":false,"afterAddLiquidity":false,"beforeRemoveLiquidity":false,"afterRemoveLiquidity":false,"beforeSwap":true,"afterSwap":true,"beforeDonate":false,"afterDonate":false,"beforeSwapReturnsDelta":true,"afterSwapReturnsDelta":true,"afterAddLiquidityReturnsDelta":false,"afterRemoveLiquidityReturnsDelta":false},"properties":{"dynamicFee":false,"upgradeable":false,"requiresCustomSwapData":false,"customDataMode":"optional-feature","vanillaSwap":true,"swapAccess":"none"},"callbackSemantics":[{"name":"beforeInitialize","callerAuthorization":"exact-registrar","stateScope":"immutable-single-pool","hookData":{"schema":"none","maxBytes":0,"trustedFields":[]},"returnShape":"selector-only","deltaUnits":"none","failureMode":"fail-closed","externalCalls":false,"reentrancyBoundary":"One-shot registrar-only pool registration and initialization; no arbitrary external callback is intended.","gasBoundary":"No independent callback gas cap is evidenced; exact deploy gas remains a release gate."},{"name":"beforeSwap","callerAuthorization":"other","stateScope":"immutable-single-pool","hookData":{"schema":"versioned","maxBytes":64,"trustedFields":["other"]},"returnShape":"selector-and-delta","deltaUnits":"specified-unspecified","failureMode":"fail-closed","externalCalls":true,"reentrancyBoundary":"Forwarded-sender authorization is branch-dependent: empty data and WITNESS_DOMAIN are unrestricted, while INTENT_DOMAIN requires the immutable trusted router. Specified-fee paths call PoolManager.mint; verified sells also call PoolManager.sync and settleFor plus the immutable LOOONG token.","gasBoundary":"No independent callback gas cap is evidenced; fork gas and partial-fill cases remain release gates."},{"name":"afterSwap","callerAuthorization":"none","stateScope":"immutable-single-pool","hookData":{"schema":"versioned","maxBytes":64,"trustedFields":["other"]},"returnShape":"selector-and-delta","deltaUnits":"specified-unspecified","failureMode":"fail-closed","externalCalls":true,"reentrancyBoundary":"The forwarded sender and hookData are not re-read; branch state was established in beforeSwap. Some fee quadrants call PoolManager.mint, verified buys call PoolManager.take, and the callback ends with immutable token and PoolManager balance reads that enforce custody and claim conservation.","gasBoundary":"No independent callback gas cap is evidenced; stateful accounting gas must be measured on the target chain."}]},"security":{"auditStatus":"unaudited","auditUrls":[],"authorityModel":"PoolManager, registrar, trusted router, tokens, fee beneficiary, fee rates, and maturity are immutable. The one-shot launcher exposes no ownership, upgrade, liquidity-removal, fee-collection, rescue, or arbitrary-call path; the immutable fee beneficiary can claim the base-fee liability.","immutableDependencies":true,"knownRisks":["The repository labels itself a reference implementation that is unaudited and not ready for public deployment.","Before another owner has mature shares, a verified seller can receive the full 2.90% sell component back and effectively pay only the 0.10% base hook fee; the advertised anti-flip pressure is therefore weak during bootstrap.","Verified buys place LOOONG in hook custody and rely on internal non-transferable position, basis, rebate, and reward accounting.","Free withdrawal and alternate pools can bypass the position-and-reward behavior, while separate wallets can sybil mature-holder eligibility.","Before- and after-swap return deltas, exact-output gross-up, partial-fill handling, and PoolManager claim conservation require independent review and target-chain fork testing.","The holder-incentive outcome depends on early-profit, maturity, wallet-sybil, ordinary-swap, and MEV behavior; source tests are not a production economic review.","No public deployment, initialized pool, locked-liquidity receipt, source verification, or live monitoring evidence has been supplied."],"frameworkAssessment":{"frameworkUrl":"https://developers.uniswap.org/docs/protocols/v4/security","assessedAt":null,"scoreStatus":"unscored","score":null,"featureTriggers":["price-impact","custom-data","custody","external-liquidity"],"requiredActions":["accounting-invariants","stateful-fuzz","math-review","fork-tests","monitoring","bug-bounty","incident-procedure"],"monitoringStatus":"not-planned","bugBountyStatus":"not-planned","incidentResponseStatus":"not-planned"}},"deployments":[]},"derived":{"pinnedSourceUrl":"https://github.com/voladelta/looong-hook/tree/cf498807aab6fa959109b2eada6dc77a23dfa84b","enabledFlags":["beforeInitialize","beforeSwap","afterSwap","beforeSwapReturnsDelta","afterSwapReturnsDelta"],"routingReviewIfDeployed":true,"listingReadiness":"blocked-until-production-evidence"}},{"manifest":{"$schema":"https://hookr.fun/schemas/external-hook.v2.json","schemaVersion":"hookr.external-hook.v2","slug":"voladelta-luck","name":"Lucky Hook","summary":"An ownerless canonical ETH/LUCK pool that takes hook-level swap fees, funds Chainlink VRF, and distributes periodic rewards to eligible mature buyers.","status":"source-only","integrationMode":"standalone-hook-product","author":{"github":"voladelta"},"source":{"repository":"https://github.com/voladelta/luck-hook","pinnedCommit":"19e2c9582959ae2454454d619d7064f101dd017b","license":"MIT","hookContract":"src/RandomHolderRewardsHook.sol","contracts":["src/RandomHolderRewardsHook.sol","src/RewardToken.sol","src/LuckyLaunchFactory.sol","src/LuckySwapRouter.sol"]},"provenance":{"deploymentModel":"per-hook-instance","factoryContract":"src/LuckyLaunchFactory.sol","factoryInterface":"typed","allowlistedFactoryInterface":false,"creationCodeHashEvidence":"source-derived","runtimeCodeHashEvidence":"absent","constructorArgsEvidence":"source-documented","saltDerivationEvidence":"source-documented","proxyModel":"non-proxy","mutableAuthorityReview":"reviewed-none","operatorDependencyReview":"reviewed-present"},"integration":{"poolScope":"canonical-pool-only","supportedTracks":["hook_publication","hook_token_launch"],"standardSwapBehavior":"Empty hookData is accepted and non-empty hookData reverts. Delta-return fee accounting changes swap settlement, so the pool is not vanilla even though ordinary swaps do not require custom hook data.","dedicatedRouter":{"requiredForAllSwaps":false,"contract":"src/LuckySwapRouter.sol","purpose":"The repository's authenticated payer and recipient settlement surface for the canonical product flow."},"routingCompatibility":{"hookData":{"mode":"empty-only","version":null,"maxBytes":0,"trustedFields":[],"emptyDataBehavior":"Only empty hookData is accepted; non-empty hookData reverts."},"swapMatrix":{"exactInputZeroForOne":{"status":"untested","routers":[]},"exactInputOneForZero":{"status":"untested","routers":[]},"exactOutputZeroForOne":{"status":"untested","routers":[]},"exactOutputOneForZero":{"status":"untested","routers":[]}},"officialUniversalRouter":{"status":"untested","requiredAddressIdentity":true,"notes":"Empty hookData is structurally compatible, but no exact deployed Universal Router fork matrix or final wallet-settlement evidence has been supplied."},"multihop":{"status":"untested","notes":"No current Universal Router multihop evidence has been supplied for the return-delta fee path."},"quoteDiscovery":{"mode":"none","alfCompatibility":"unsupported","simulationActorBinding":"not-applicable","notes":"The hook does not implement the Uniswap ALF indicative-quote interfaces."},"finalAmountEvidence":{"poolManagerSwapBasis":"pre-after-swap-return-delta","canonicalRouterEvent":null,"genericRouterFinalSettlement":"untested","notes":"The hook changes settlement with return deltas; raw PoolManager Swap amounts are not sufficient proof of trader-final input and output."}},"dependencies":[{"name":"Uniswap v4 PoolManager","kind":"protocol","required":true},{"name":"Chainlink VRF v2.5 wrapper","kind":"oracle","required":true},{"name":"RewardToken","kind":"token","required":true},{"name":"LuckyLaunchFactory","kind":"factory","required":true},{"name":"LuckySwapRouter","kind":"router","required":false}]},"uniswapClassification":{"flags":{"beforeInitialize":true,"afterInitialize":false,"beforeAddLiquidity":false,"afterAddLiquidity":false,"beforeRemoveLiquidity":false,"afterRemoveLiquidity":false,"beforeSwap":true,"afterSwap":true,"beforeDonate":false,"afterDonate":false,"beforeSwapReturnsDelta":true,"afterSwapReturnsDelta":true,"afterAddLiquidityReturnsDelta":false,"afterRemoveLiquidityReturnsDelta":false},"properties":{"dynamicFee":false,"upgradeable":false,"requiresCustomSwapData":false,"customDataMode":"none","vanillaSwap":false,"swapAccess":"none"},"callbackSemantics":[{"name":"beforeInitialize","callerAuthorization":"exact-registrar","stateScope":"immutable-single-pool","hookData":{"schema":"none","maxBytes":0,"trustedFields":[]},"returnShape":"selector-only","deltaUnits":"none","failureMode":"fail-closed","externalCalls":false,"reentrancyBoundary":"Initialization is restricted to the immutable registrar and canonical pool configuration.","gasBoundary":"No independent callback gas cap is evidenced."},{"name":"beforeSwap","callerAuthorization":"none","stateScope":"immutable-single-pool","hookData":{"schema":"empty-only","maxBytes":0,"trustedFields":[]},"returnShape":"selector-and-delta","deltaUnits":"specified-unspecified","failureMode":"fail-closed","externalCalls":true,"reentrancyBoundary":"Specified-fee paths call PoolManager.take; other quadrants defer fee collection to afterSwap. VRF is never requested from a PoolManager callback.","gasBoundary":"No independent callback gas cap is evidenced; return-delta gas needs target-chain fork measurement."},{"name":"afterSwap","callerAuthorization":"none","stateScope":"immutable-single-pool","hookData":{"schema":"empty-only","maxBytes":0,"trustedFields":[]},"returnShape":"selector-and-delta","deltaUnits":"specified-unspecified","failureMode":"fail-closed","externalCalls":true,"reentrancyBoundary":"Fee-bearing paths call PoolManager.take, and buy paths call RewardToken.openCanonicalBuyCredit. VRF is requested only by the separate permissionless requestRound entry point once its interval, reward-pot, and buyer-count gates pass.","gasBoundary":"PoolManager fee collection and buyer-credit gas need target-chain fork measurement; VRF request gas belongs to the separate requestRound transaction."}]},"security":{"auditStatus":"unaudited","auditUrls":[],"authorityModel":"The source describes an ownerless hook with immutable token, PoolManager, VRF wrapper, registrar, and reward parameters.","immutableDependencies":true,"knownRisks":["The repository states that it has not been audited.","Reward liveness depends on Chainlink VRF funding, fulfillment, and timeout recovery.","Fee, liability, buyer-index, and random-selection invariants require independent production review."],"frameworkAssessment":{"frameworkUrl":"https://developers.uniswap.org/docs/protocols/v4/security","assessedAt":null,"scoreStatus":"unscored","score":null,"featureTriggers":["oracle","price-impact","external-liquidity","randomness"],"requiredActions":["dependency-failure-tests","accounting-invariants","stateful-fuzz","math-review","fork-tests","monitoring","bug-bounty","incident-procedure"],"monitoringStatus":"not-planned","bugBountyStatus":"not-planned","incidentResponseStatus":"not-planned"}},"deployments":[]},"derived":{"pinnedSourceUrl":"https://github.com/voladelta/luck-hook/tree/19e2c9582959ae2454454d619d7064f101dd017b","enabledFlags":["beforeInitialize","beforeSwap","afterSwap","beforeSwapReturnsDelta","afterSwapReturnsDelta"],"routingReviewIfDeployed":true,"listingReadiness":"blocked-until-production-evidence"}},{"manifest":{"$schema":"https://hookr.fun/schemas/external-hook.v2.json","schemaVersion":"hookr.external-hook.v2","slug":"voladelta-wager","name":"Wager Hook","summary":"An immutable canonical ETH/WAGER pool where ordinary swaps use empty hook data, exact-input swaps may optionally create fixed-odds WETH wager tickets, and randomness is requested only after the season closes for later settlement.","status":"source-only","integrationMode":"standalone-hook-product","author":{"github":"voladelta"},"source":{"repository":"https://github.com/voladelta/wager-hook","pinnedCommit":"9870b9e3e5ac8b49dc0178a9be9514e2873d1109","license":"MIT","hookContract":"src/WagerHook.sol","contracts":["src/WagerHook.sol","src/tokens/WagerToken.sol","src/router/WagerRouter.sol","src/vrf/WagerRandomnessAdapter.sol","src/launch/WagerLaunchFactory.sol","src/launch/PermanentPositionLocker.sol"]},"provenance":{"deploymentModel":"per-hook-instance","factoryContract":"src/launch/WagerLaunchFactory.sol","factoryInterface":"typed","allowlistedFactoryInterface":false,"creationCodeHashEvidence":"source-derived","runtimeCodeHashEvidence":"absent","constructorArgsEvidence":"source-documented","saltDerivationEvidence":"source-documented","proxyModel":"non-proxy","mutableAuthorityReview":"reviewed-none","operatorDependencyReview":"reviewed-present"},"integration":{"poolScope":"canonical-pool-only","supportedTracks":["hook_publication","hook_token_launch"],"standardSwapBehavior":"Empty hookData remains an ordinary swap. The optional wager path uses exact 36-byte versioned hookData and the dedicated router; routed Uniswap trades can use the ordinary path without enabling the wager feature.","dedicatedRouter":{"requiredForAllSwaps":false,"contract":"src/router/WagerRouter.sol","purpose":"Required only for the optional wager flow that binds a WETH stake to executed swap volume."},"routingCompatibility":{"hookData":{"mode":"optional-versioned","version":"36 bytes: WAGER_DATA_VERSION + pendingId (exact-router)","maxBytes":36,"trustedFields":["other"],"emptyDataBehavior":"Empty hookData selects the unrestricted ordinary forwarded-sender path and creates no wager."},"swapMatrix":{"exactInputZeroForOne":{"status":"untested","routers":[]},"exactInputOneForZero":{"status":"untested","routers":[]},"exactOutputZeroForOne":{"status":"untested","routers":[]},"exactOutputOneForZero":{"status":"untested","routers":[]}},"officialUniversalRouter":{"status":"untested","requiredAddressIdentity":true,"notes":"The ordinary empty-data lane may be structurally compatible, but no exact Robinhood Universal Router address, code hash, four-quadrant fork test, or wallet-final settlement evidence is supplied."},"multihop":{"status":"untested","notes":"No current Universal Router multihop evidence has been supplied, and the optional wager flow remains dedicated-router-only."},"quoteDiscovery":{"mode":"none","alfCompatibility":"unsupported","simulationActorBinding":"not-applicable","notes":"The hook does not implement the Uniswap ALF indicative-quote interfaces."},"finalAmountEvidence":{"poolManagerSwapBasis":"pre-after-swap-return-delta","canonicalRouterEvent":null,"genericRouterFinalSettlement":"untested","notes":"No exact router event plus wallet-delta reconciliation has been supplied for either ordinary or wager-enabled swaps."}},"dependencies":[{"name":"Uniswap v4 PoolManager","kind":"protocol","required":true},{"name":"Wrapped Ether","kind":"token","required":true},{"name":"Production randomness provider","kind":"oracle","required":true,"notes":"No target-chain provider has been evidenced for Robinhood Chain. The integration remains blocked until the provider and trust model are selected and reviewed."},{"name":"WagerRandomnessAdapter","kind":"oracle","required":true},{"name":"WagerLaunchFactory","kind":"factory","required":true},{"name":"PermanentPositionLocker","kind":"locker","required":true},{"name":"WagerRouter","kind":"router","required":false}]},"uniswapClassification":{"flags":{"beforeInitialize":false,"afterInitialize":true,"beforeAddLiquidity":false,"afterAddLiquidity":false,"beforeRemoveLiquidity":false,"afterRemoveLiquidity":false,"beforeSwap":true,"afterSwap":true,"beforeDonate":false,"afterDonate":false,"beforeSwapReturnsDelta":false,"afterSwapReturnsDelta":false,"afterAddLiquidityReturnsDelta":false,"afterRemoveLiquidityReturnsDelta":false},"properties":{"dynamicFee":false,"upgradeable":false,"requiresCustomSwapData":false,"customDataMode":"optional-feature","vanillaSwap":true,"swapAccess":"none"},"callbackSemantics":[{"name":"afterInitialize","callerAuthorization":"exact-registrar","stateScope":"immutable-single-pool","hookData":{"schema":"none","maxBytes":0,"trustedFields":[]},"returnShape":"selector-only","deltaUnits":"none","failureMode":"fail-closed","externalCalls":false,"reentrancyBoundary":"The canonical launch factory initializes the one configured pool; no arbitrary post-initialize external call is intended.","gasBoundary":"No independent callback gas cap is evidenced."},{"name":"beforeSwap","callerAuthorization":"other","stateScope":"immutable-single-pool","hookData":{"schema":"versioned","maxBytes":36,"trustedFields":["other"]},"returnShape":"selector-only","deltaUnits":"none","failureMode":"fail-closed","externalCalls":false,"reentrancyBoundary":"Forwarded-sender authorization is branch-dependent: empty data is unrestricted, while an exact 4-byte WAGER_DATA_VERSION plus 32-byte pendingId requires the immutable wager router and binds a staged wager to the same-block exact-input swap.","gasBoundary":"The wager payload is exactly 36 bytes; the callback gas ceiling remains unmeasured."},{"name":"afterSwap","callerAuthorization":"other","stateScope":"immutable-single-pool","hookData":{"schema":"versioned","maxBytes":36,"trustedFields":["other"]},"returnShape":"selector-only","deltaUnits":"none","failureMode":"fail-closed","externalCalls":true,"reentrancyBoundary":"Forwarded-sender authorization is branch-dependent: empty data is unrestricted, while nonempty wager data requires the immutable wager router. A wager-enabled swap creates a ticket and reads the immutable WETH balance for solvency; it does not request randomness.","gasBoundary":"Ticket creation and the WETH solvency read need target-chain measurement. Randomness is requested later, outside PoolManager callbacks, after the season closes."}]},"security":{"auditStatus":"unaudited","auditUrls":[],"authorityModel":"The source describes no mutable administrator, pause, upgrade, rescue, odds-change, or dependency-replacement path after launch.","immutableDependencies":true,"knownRisks":["The repository states that it is unaudited and not ready for real-value deployment.","The Robinhood Chain path has no evidenced production randomness provider; changing away from Chainlink VRF requires a new dependency and trust-model review.","Wager solvency and settlement depend on reserve accounting and the selected randomness provider's lifecycle behavior.","A real-money wager product requires jurisdiction-specific product and legal review before public launch."],"frameworkAssessment":{"frameworkUrl":"https://developers.uniswap.org/docs/protocols/v4/security","assessedAt":null,"scoreStatus":"unscored","score":null,"featureTriggers":["oracle","custom-data","custody","randomness","external-liquidity"],"requiredActions":["dependency-failure-tests","accounting-invariants","stateful-fuzz","fork-tests","monitoring","bug-bounty","incident-procedure","legal-review"],"monitoringStatus":"not-planned","bugBountyStatus":"not-planned","incidentResponseStatus":"not-planned"}},"deployments":[]},"derived":{"pinnedSourceUrl":"https://github.com/voladelta/wager-hook/tree/9870b9e3e5ac8b49dc0178a9be9514e2873d1109","enabledFlags":["afterInitialize","beforeSwap","afterSwap"],"routingReviewIfDeployed":false,"listingReadiness":"blocked-until-production-evidence"}}]}