Security research · Robinhood Chain
Help protect user funds.
The gage bug bounty rewards researchers who find and responsibly report vulnerabilities in our smart contracts and agent software.
$5,000
Announced for qualifying Critical contract bugs that can cause loss of user funds in our contracts. Valid High, Medium and Low bugs are also rewarded, with amounts assessed individually.
Report privately
Send it through the report form. It follows the Immunefi template and asks for a refundable deposit of 15 USDC on Base, paid from your wallet in one signature with no gas. The deposit comes back with every valid report, even a Low; it stays with gage for duplicates, non-reproducible claims and spam. The team reads reports in private and answers on your report page and by email.
Agents send the same fields as JSON with an x402 payment to POST https://support-production-707f.up.railway.app/reports; the agent docs show the body and a client. Never share exploit code, credentials or vulnerability details in public replies, GitHub issues or group chats.
Contract scope
Primary focus: customer funds in partner lending and native V2 on Robinhood Chain mainnet, chain ID 4663. Prioritize theft, insolvency, unauthorized collateral release and freezing of lender principal, partial funding, repayment proceeds or withdrawable balances.
partner lending customer funds
IntentFactory
0x20a908d82885cf4e990a9f8f3f5a483687660822Creates every partner strategy from one fixed creation code (VAULT_INIT_HASH); admits creators and the filler, names the fill router, quote signer and protocol fee recipient, and classifies tokens.
GageV2Vault (Intent core)
0x856e4232469b957150cb29a8ce9b60059449e87eLoan accounting for partner-funded loans: fractional lender units, reclaim rights, repayment, default recovery and USDG credits. Only strategies of its IntentFactory can fund (the bound funder gate).
GageV2TokenRegistry (Intent core)
0x09c52d590bd9c764fbe58e6ff8b6e31bae892670Token collateral admission, per-token limits, terms and fees of the partner core, and the pause of its new loans.
GageV2Rewards (Intent core)
0x5f653337f0B017aa60dbF977Cbc4e48Aa71ffA3cReward entitlement of the partner core's loans, the funder gate bound once to the IntentFactory, and claims through its adapter.
GageV2TokenCollateralAccount implementation (Intent core)
0x92073EE56E033Fd13300DB0E1Db472A2655E1175Template for per-loan token custody clones. The funded clones, not this template balance, are the custody targets.
GageV2CashoutRouter (Intent core)
0x3e7dc9bd908f5ba5aae43238c915e4f28a073ea7Flash repayment and collateral sale through the admitted exit routes or, through cashOutVia, one of KyberSwap's routers the owner admits as executor; callbacks and payout recipient.
GageLegacyAdapter (Intent core)
0x789637f1f3fde2760d66b365f2cf7e30d2c7f6caConnects native loans to legacy settlement and reward reserves; internal receipts and per-loan party accounts.
GageLegacyParty implementation (Intent core)
0x888E571586fc14D2250aB54D6815C773525def4ETemplate for distinct borrower/lender settlement clones. Include the actual clones and their balances/claims.
IntentFillRouter
0xf8560439d914fe1fc2c1a2faa5b19ed46f73208dExecutes signed fill plans: funds a listing whole from one or more partner strategies at once and routes execution fees to the protocol fee recipient.
IntentQuoteVerifier
0x80ec8893cec448cd43578c9d1e5a4bee71a7db53Verifies the rates service's signed plans and quotes (allocation per strategy, pricing evidence, fees, lifetimes) before a fill or a secondary purchase.
LoopRouter
0xacfffd412dd838d3ede489bc4b79e19505769badLeverage loops: buys more of the pledged token through admitted Uniswap pools or an admitted aggregator executor (KyberSwap's routers), then lists, fills and pays out one loan on the partner core in one transaction.
RolloverRouter
0x85829427103E33F3c8D6B06Ebb3aAd7185b0feDaLoan rollover: repays a running loan on the partner core with PoolManager flash liquidity, lists the same collateral for the same borrower and funds the new loan on a signed plan, in one transaction; runs the standing roll instructions holders set, inside the limits it checks on chain, and returns collateral repaid to it only to the loan's holder.
PrivateBorrowRouter
0xc62DA1872bf3C9922e8C22Be4b29b5317b4bAa21Private borrowing: withdraws a piece of a screened deposit from the pool the Entrypoint registers, lists it for the borrower the proof names and funds it with a signed plan, in one transaction; per-token caps, the screener's root attestation, the owner's attester and cap switches.
GradeRegistry
0x897b15ea30923f9adbea4637aaee98722480cb3dLoan grades and modeled costs the grade publisher posts; partner strategies and the quote verifier refuse a listing without a current grade.
MorphoV2ReserveLens
0x653a22564c7ae7c37511dee025342afec2c20a16Reads what the Morpho reserve can pay out now; partner strategies size exits and funding by it.
IntentVault creation code, part 1 of 2
0xd36c4bf618b084cd517d79bbd34607178f1cabf4Data contract holding half of the creation code every partner strategy is deployed from; keccak256 of both halves is the factory's VAULT_INIT_HASH. Never executed.
IntentVault creation code, part 2 of 2
0x3a4086a4daea168f8ecc00d03d6a45ee52719330Data contract holding half of the creation code every partner strategy is deployed from; keccak256 of both halves is the factory's VAULT_INIT_HASH. Never executed.
IntentFactory (GLD generation)
0x0966d92887d41796fcf6f77159d543b1565fec0dCreates every partner strategy from one fixed creation code (VAULT_INIT_HASH); admits creators and the filler, names the fill router, quote signer and protocol fee recipient, and classifies tokens.
GageV2Vault (GLD generation)
0xf2b98f79040b4157373093cdda2a4f2cb3c838d8Loan accounting for partner-funded loans: fractional lender units, reclaim rights, repayment, default recovery and USDG credits. Only strategies of its IntentFactory can fund (the bound funder gate).
GageV2TokenRegistry (GLD generation)
0x1b7208b92586fbf7eb246234832530efdecfeb86Token collateral admission, per-token limits, terms and fees of the partner core, and the pause of its new loans.
GageV2Rewards (GLD generation)
0x24772Df730EEed3961b4712e99F33Cf0fe257A7EReward entitlement of the partner core's loans, the funder gate bound once to the IntentFactory, and claims through its adapter.
GageV2CashoutRouter (GLD generation)
0x4fb133edc4b72b81b2804b00b4e843ad34deca84Flash repayment and collateral sale through the admitted exit routes or, through cashOutVia, one of KyberSwap's routers the owner admits as executor; callbacks and payout recipient.
IntentFillRouter (GLD generation)
0x5f4c6be5cb0695f7a795debbed326d760dc30566Executes signed fill plans: funds a listing whole from one or more partner strategies at once and routes execution fees to the protocol fee recipient.
IntentQuoteVerifier (GLD generation)
0xfaf4e55307aef8e074ef409dbbfe125c5d156322Verifies the rates service's signed plans and quotes (allocation per strategy, pricing evidence, fees, lifetimes) before a fill or a secondary purchase.
GradeRegistry (GLD generation)
0x620ca1fdc07001ee4c631e82e645b11d56e57eb8Loan grades and modeled costs the grade publisher posts; partner strategies and the quote verifier refuse a listing without a current grade.
IntentAssetFeeProcessor (GLD generation)
0x2d509cb5ed7b0a61c65c604e2b5ca4aab93e1eb9The protocol fee recipient of a lend-asset generation: holds its fees in its asset and converts them, in clips its keeper sizes, into USDG for the GAGE floor (DealFeeRouter) through one canonical V3 pool.
IntentClosedReserve (GLD generation)
0xb150d62186fb136b1d1541c74c1591235293c42fThe reserve of a lend-asset generation: an ERC-4626 over its asset that takes nothing, so its strategies keep idle cash themselves.
RolloverRouter (GLD generation)
0x87A8C18c63A7f5957cB533389c20b80962d4E8A8Loan rollover: repays a running loan on the partner core with PoolManager flash liquidity, lists the same collateral for the same borrower and funds the new loan on a signed plan, in one transaction; runs the standing roll instructions holders set, inside the limits it checks on chain, and returns collateral repaid to it only to the loan's holder.
IntentVault creation code, part 1 of 2 (GLD generation)
0x3b5520b2b81528c5ea11634f518f19dcb8c37d08Data contract holding half of the creation code every partner strategy is deployed from; keccak256 of both halves is the factory's VAULT_INIT_HASH. Never executed.
IntentVault creation code, part 2 of 2 (GLD generation)
0x1c15d80a372f6c2104ace9303f70eeac0318326fData contract holding half of the creation code every partner strategy is deployed from; keccak256 of both halves is the factory's VAULT_INIT_HASH. Never executed.
IntentFactory (NVDA generation)
0xcb848a80801bfcdb7fa43a6729013ecf319a000bCreates every partner strategy from one fixed creation code (VAULT_INIT_HASH); admits creators and the filler, names the fill router, quote signer and protocol fee recipient, and classifies tokens.
GageV2Vault (NVDA generation)
0x380a536b1c8bf9e8c1035413497f767f76d30b6eLoan accounting for partner-funded loans: fractional lender units, reclaim rights, repayment, default recovery and USDG credits. Only strategies of its IntentFactory can fund (the bound funder gate).
GageV2TokenRegistry (NVDA generation)
0x8c73694f6394cb2054307b02646e2399a7f54045Token collateral admission, per-token limits, terms and fees of the partner core, and the pause of its new loans.
GageV2Rewards (NVDA generation)
0x5f0359CEE3f48cDa6afD4De2a111b62dfde51908Reward entitlement of the partner core's loans, the funder gate bound once to the IntentFactory, and claims through its adapter.
GageV2CashoutRouter (NVDA generation)
0xdc5c966e05279fb860b4986c7483e431f1a3d482Flash repayment and collateral sale through the admitted exit routes or, through cashOutVia, one of KyberSwap's routers the owner admits as executor; callbacks and payout recipient.
IntentFillRouter (NVDA generation)
0xda8bb629cfd4ffd8e0e00d7bf96fba35bbf354f4Executes signed fill plans: funds a listing whole from one or more partner strategies at once and routes execution fees to the protocol fee recipient.
IntentQuoteVerifier (NVDA generation)
0xffc963221cad7c370c1443daa7c43568c73a8566Verifies the rates service's signed plans and quotes (allocation per strategy, pricing evidence, fees, lifetimes) before a fill or a secondary purchase.
GradeRegistry (NVDA generation)
0x1aea6ba46beee96b936ceaa36481316b7b579ee1Loan grades and modeled costs the grade publisher posts; partner strategies and the quote verifier refuse a listing without a current grade.
IntentAssetFeeProcessor (NVDA generation)
0xca929749af2cd4c72fbf291c8c880d5b0b6ffbe3The protocol fee recipient of a lend-asset generation: holds its fees in its asset and converts them, in clips its keeper sizes, into USDG for the GAGE floor (DealFeeRouter) through one canonical V3 pool.
IntentClosedReserve (NVDA generation)
0x24e81017982ac7fb78f17419c727410e893cc222The reserve of a lend-asset generation: an ERC-4626 over its asset that takes nothing, so its strategies keep idle cash themselves.
RolloverRouter (NVDA generation)
0x5d1308A9B8FBe849053E4Fc8E8BE9cD1a5c1D492Loan rollover: repays a running loan on the partner core with PoolManager flash liquidity, lists the same collateral for the same borrower and funds the new loan on a signed plan, in one transaction; runs the standing roll instructions holders set, inside the limits it checks on chain, and returns collateral repaid to it only to the loan's holder.
IntentVault creation code, part 1 of 2 (NVDA generation)
0x949e40a4aa48abd3e3b88ceb68256c013a6e6bcdData contract holding half of the creation code every partner strategy is deployed from; keccak256 of both halves is the factory's VAULT_INIT_HASH. Never executed.
IntentVault creation code, part 2 of 2 (NVDA generation)
0x54e4e06ccff51291576bc7029de9b297c161c9daData contract holding half of the creation code every partner strategy is deployed from; keccak256 of both halves is the factory's VAULT_INIT_HASH. Never executed.
IntentFactory (HIMS generation)
0x48a234770e74d907071b8d310f06cf253a846e9dCreates every partner strategy from one fixed creation code (VAULT_INIT_HASH); admits creators and the filler, names the fill router, quote signer and protocol fee recipient, and classifies tokens.
GageV2Vault (HIMS generation)
0x359bb9751f5c2cfdce5d034a9742e7a0a3ac8e54Loan accounting for partner-funded loans: fractional lender units, reclaim rights, repayment, default recovery and USDG credits. Only strategies of its IntentFactory can fund (the bound funder gate).
GageV2TokenRegistry (HIMS generation)
0x0b07d49dbfb4f6932e4f11bd0b74d5f9adc5dd59Token collateral admission, per-token limits, terms and fees of the partner core, and the pause of its new loans.
GageV2Rewards (HIMS generation)
0x50EDf2Be5C6dA2cF82BB853DD008639A180309F3Reward entitlement of the partner core's loans, the funder gate bound once to the IntentFactory, and claims through its adapter.
GageV2CashoutRouter (HIMS generation)
0x4a9ef39ca35ff26e4f21099e8dd8914c1df8bb14Flash repayment and collateral sale through the admitted exit routes or, through cashOutVia, one of KyberSwap's routers the owner admits as executor; callbacks and payout recipient.
IntentFillRouter (HIMS generation)
0x81495ca59861b17af926fad46d8b2d9f547479b7Executes signed fill plans: funds a listing whole from one or more partner strategies at once and routes execution fees to the protocol fee recipient.
IntentQuoteVerifier (HIMS generation)
0x64921900c30540514951f19cd37c93c86be33998Verifies the rates service's signed plans and quotes (allocation per strategy, pricing evidence, fees, lifetimes) before a fill or a secondary purchase.
GradeRegistry (HIMS generation)
0x8bd57dab6cccb38979cf19edcc276eb16b09046bLoan grades and modeled costs the grade publisher posts; partner strategies and the quote verifier refuse a listing without a current grade.
IntentAssetFeeProcessor (HIMS generation)
0x36077c5c5cad4f7192fece13d4be9fa5598480eaThe protocol fee recipient of a lend-asset generation: holds its fees in its asset and converts them, in clips its keeper sizes, into USDG for the GAGE floor (DealFeeRouter) through one canonical V3 pool.
IntentClosedReserve (HIMS generation)
0x41140cb9628ae2d5077933ea8188f6de5c87e130The reserve of a lend-asset generation: an ERC-4626 over its asset that takes nothing, so its strategies keep idle cash themselves.
RolloverRouter (HIMS generation)
0x6b563aD0058c369472968D64c3D4Ad63C86c6513Loan rollover: repays a running loan on the partner core with PoolManager flash liquidity, lists the same collateral for the same borrower and funds the new loan on a signed plan, in one transaction; runs the standing roll instructions holders set, inside the limits it checks on chain, and returns collateral repaid to it only to the loan's holder.
IntentVault creation code, part 1 of 2 (HIMS generation)
0xa50522b74835c1d7b59b35c60d8bcc3648ddd776Data contract holding half of the creation code every partner strategy is deployed from; keccak256 of both halves is the factory's VAULT_INIT_HASH. Never executed.
IntentVault creation code, part 2 of 2 (HIMS generation)
0x8c0a18033f2cef497c7b395170f78f878bd9f0daData contract holding half of the creation code every partner strategy is deployed from; keccak256 of both halves is the factory's VAULT_INIT_HASH. Never executed.
native V2 customer funds
GageV2Vault (original)
0x22658055b70b8b09616b1e0953f2a51cc66cf493Loan accounting, fractional lender units, reclaim rights, repayment, default recovery and USDG credits.
GageV2Registry (original)
0x1d9f88705d398cd13af4e35a74ef21253734f153Live collateral admission, limits and route configuration; qualify an unauthorized path into user funds.
GageV2BridgeRewards (original)
0xb1a4EB7B43d129617B2C5BaeF97B1A95b189Eb81V2 reward entitlement, closure cutoff and claims through the shared adapter.
GageV2CashoutRouter (original)
0x38e37cc00427dd2a930d2a31e29e4104530d671bFlash repayment, collateral sale, callbacks and payout recipient.
GageV2EntryRouter (original)
0x88168bd379a69a8429f1d3ceebe18783995ddc12ETH conversion, funding and refund of unused input.
GageV2ZapRouter (original)
0xdea3b7b6f57c63cce013a64ba42020c10af083adToken/ETH conversion into LP collateral and loan creation.
GageV2CollateralValidator (original)
0x0427fB6ab83B121a6C84B9F78B1cBbE87B8A835dValidates the actual token or LP collateral accepted into custody.
GageV2CollateralAccount implementation (original)
0x78Cefe229dC4EeDC6520fC099Cc9Ac0fff5585A4Template for per-loan custody clones. The funded clones, not this template balance, are the custody targets.
GageV2Vault (lender sales)
0x08561c817a5bf5230f91c001800449f047e4c07dLoan accounting, fractional lender units, reclaim rights, repayment, default recovery and USDG credits.
GageV2Registry (lender sales)
0x5fbac7654c309eaeaa0a3bb9f4dc6d6dde04c7aaLive collateral admission, limits and route configuration; qualify an unauthorized path into user funds.
GageV2BridgeRewards (lender sales)
0xD855c721C82a773135B0C1B67305d78c6dd35696V2 reward entitlement, closure cutoff and claims through the shared adapter.
GageV2CashoutRouter (lender sales)
0x8f0ddfbb88a4a70ef4c82ab237eb8407c6b6d866Flash repayment, collateral sale, callbacks and payout recipient.
GageV2EntryRouter (lender sales)
0x346f21b71792a7f181860738ee90867f5688fde7ETH conversion, funding and refund of unused input.
GageV2ZapRouter (lender sales)
0x53d0e390438fbeec6440403458641bfa7ec29178Token/ETH conversion into LP collateral and loan creation.
GageV2CollateralValidator (lender sales)
0x5e8688BB96D04898DAC62C832EC7755FA9334C02Validates the actual token or LP collateral accepted into custody.
GageV2CollateralAccount implementation (lender sales)
0xd92790053d8Bc920E5b9e47Dc69ca35C19709395Template for per-loan custody clones. The funded clones, not this template balance, are the custody targets.
GageV2Vault (V3, no grace)
0xfee799ade96229c2c128bc5ed9e55f8d9d01a7e9Loan accounting, fractional lender units, reclaim rights, repayment, default recovery and USDG credits.
GageV2Registry (V3, no grace)
0x17cfddae7247042a857326c2bb2abe43343e5d33Live collateral admission, limits and route configuration; qualify an unauthorized path into user funds.
GageV2BridgeRewards (V3, no grace)
0x7C2E47fe32C391bc9Dd6d8895559D67eF5651f21V2 reward entitlement, closure cutoff and claims through the shared adapter.
GageV2CashoutRouter (V3, no grace)
0x895285fdbbec09eada41fc3784117d5177427accFlash repayment, collateral sale, callbacks and payout recipient.
GageV2EntryRouter (V3, no grace)
0x699b3f84d8c90789da766a524e7ea50522ac1132ETH conversion, funding and refund of unused input.
GageV2ZapRouter (V3, no grace)
0xcf5d008e1ea2359223bf721e96c9c28b46cd3eebToken/ETH conversion into LP collateral and loan creation.
GageV2CollateralValidator (V3, no grace)
0x28790088216D10Ec81f477cE85F4F706dB648FD7Validates the actual token or LP collateral accepted into custody.
GageV2CollateralAccount implementation (V3, no grace)
0x7A0CbEFC777c99DCa06A14c6BF5688Ac768b7AeFTemplate for per-loan custody clones. The funded clones, not this template balance, are the custody targets.
GageLegacyAdapter (V3)
0x2166a547bc27fef846c9858e3101b84d1a8d994eConnects native loans to legacy settlement and reward reserves; internal receipts and per-loan party accounts.
GageLegacyParty implementation (V3)
0x4E7faE22CFb408399E3d0c810bEd46Ed7A7C62cDTemplate for distinct borrower/lender settlement clones. Include the actual clones and their balances/claims.
GageLegacyAdapter (earlier engines)
0x647d46c0577453be8c75039f829740b5d2e44938Connects native loans to legacy settlement and reward reserves; internal receipts and per-loan party accounts.
GageLegacyParty implementation (earlier engines)
0xAbc5F5B52baC8ED7CC44727ee184973Ff2b71930Template for distinct borrower/lender settlement clones. Include the actual clones and their balances/claims.
Per-loan collateral and borrower/lender party accounts are included. Identify the actual account holding the collateral or settlement claim; the implementation address alone is not the custody balance.
Legacy customer funds remain covered. Existing collateral, withdrawal rights and shared contracts still used by V2 are in scope. Historical-only or disabled paths need current reachability evidence. Lower research priority does not remove the advertised reward tiers or retroactively change earlier submissions.
Use the full target inventory, scope JSON and app deployment manifest. Verify code, bindings, configuration and exact assets at a recent fork block. Bindings of every native V2 engine, adapter and Intent generation, and the nonempty code of every listed contract, were checked at block 91,567,109.
Report affected customer principal, collateral and withdrawal rights separately from funded rewards and protocol fees. Do not count unrelated pool-manager balances, token market cap or all protocol TVL as exposed. Third-party systems are not independent targets. Other web/API claims should show the concrete funds path; no separate web/API payout schedule is established.
Agent software
gage-sdk and gage-mcp on npm, from 0.5.0, and the hosted agent service at mcp.gage.cash with the review links it issues are in scope for the funds and keys of the wallets that use them. A report shows a transaction, approval or signature the wallet's owner did not agree to (beyond the plan shown or Valet's spend limits, or paying anyone but the wallet and gage's contracts), a review link that shows one action and asks for another, or a wallet key someone else can read.
These are rewarded at the severity the impact shows, with amounts assessed individually; the $5,000 Critical announcement covers loss of user funds in the contracts. Test with a local install, a local fork and throwaway keys, and keep requests to the hosted service at ordinary volume.
Severity follows impact
We use the Smart Contracts category of Immunefi's Severity Classification System v2.3. These are relevant examples; the linked standard supplies the full classification.
- Critical
- Theft of user principal or collateral, permanently inaccessible funds, or protocol insolvency.
- High
- Theft or permanent freezing of unclaimed rewards, or temporary freezing of user funds.
- Medium
- Demonstrated griefing, gas theft or unbounded gas consumption.
- Low
- Failure to deliver promised returns without loss of value.
Severity depends on demonstrated impact and prerequisites. Extraction claims should include net profit; freezing and griefing do not require attacker profit. Expected admin powers, normal market movements and speculative scanner alerts alone are not validated bugs.
This is a gage-run bounty. Using Immunefi's standard does not imply Immunefi hosting, administration or a payment guarantee. The announcement leaves payout currency, timing and whether $5,000 is per bug or a shared pool unspecified; confirm those details privately.
Rules of engagement
- Test locally. Use isolated environments or local forks. Ordinary read-only chain queries are fine. Do not broadcast exploit transactions or manipulate live pools, prices or oracles.
- Protect users. Do not move or freeze real funds, access other people's accounts, extract private data or use discovered credentials. Stop and report sensitive material privately.
- Keep services available. No denial of service, high-volume scanning, spam, brute force, phishing, social engineering or testing of third-party systems.
- Provide a reproducible proof. Include chain, native V2/legacy version, engine and custody accounts, loan IDs, a recent fork block, current configuration, root cause and runnable local steps. Label historical or future-conditional prerequisites. For extraction, show before/after balances, capital and costs; for freezing, show duration and recovery limits.
- Coordinate disclosure. Report promptly and privately; coordinate remediation and publication before sharing technical details. Duplicate reports of one underlying issue do not establish separate bugs.
- Agents follow the same rules. AI-assisted research is welcome. The submitter must verify the evidence and keep their tools within scope. Agents must not autonomously sign or broadcast exploit transactions. Follow the agent research checklist; payment of the separate submission deposit requires wallet-owner authorization.
Read the full policy and submission checklist before testing. A report is assessed for reproducibility, reachability and impact before a reward decision.