Skip to content
LogoLogo

Onchain Integration

Raven is built entirely on public, permissionless Morpho infrastructure on Robinhood Chain. The markets are standard Morpho Blue markets and the vault is a standard Vault V2. Any integrator can interact with them directly.

Core contracts

ContractAddress
Morpho Blue0x9D53d5E3bd5E8d4Cbfa6DB1ca238AEA02E651010
Adaptive Curve IRM0x2BD3d5965B26B51814AC95127B2b80dD6CcC0fa1
USDG0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168
WETH0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73
Vault V2 (rUSDG)0x3537A4d0d3C3B581945C203A7182E6351098A1BA
Vault V2 Blue Public Allocator0xCe5c1aFa115fF8b1D6913509bfc79D9AE08CC857
MarketV1AdapterV20x1D292b1Cb4adB121a9b1D594F72a4aa16E45f23a

The Public Allocator's idle-only Raven policy was activated on 2026-08-29. It may move idle rUSDG vault assets into the five Raven markets up to their configured caps; market-to-market pulls remain disabled. Vault adapter, collateral, and market relative caps are 1e18, leaving the reviewed absolute caps as the effective limits. See the operations runbook for the activation receipts and verification procedure.

Full factory/registry addresses (ChainlinkOracleV2, VaultV2Factory, adapter factories, Bundler3, GeneralAdapter1) are listed in Protocol Sources.

Raven v1 markets

Every approved market lends canonical USDG against one Stock Token at a 77% liquidation LLTV with the Adaptive Curve IRM and a guarded Chainlink-only oracle.

AssetMarket IDOracle
NVDA0x21539fb91cac5c218508f89d6bd946eabaeed3b4ff185e802bbb73c2f77c25de0x94d7d2f6790c676a2d3133b4d7dd689526b7c4e5
SPY0x077088f9ae5f5c1d35439ee68f4bdbb176368a1a73fd4c8cb8e004143d0c5c300x3697e6e149b8f080a753d3f624600a3a3c9cc72c
AAPL0x6641d1333a00edf42f79b931554f1c81971656f18d881245f9547b471d5a49fb0xce96f48ee4404f06174e46f0d2020d2bc5d705c2
GOOGL0xfb89cd660644af485ed5eb7dc4fe20623a7934537258c95635ac9a3a87d787fd0xe8598bc02719c5b00133329743051d739b0321ae
TSLA0xfa83733bf91efe91c9ef2ff56ab4ff6dcd3ef7c90e55f20ae7e88070e0b846340x1440704059616f3aa4a6087b1b52fdb87183d20e

Each market ID represents an immutable Morpho configuration: the loan asset, collateral asset, oracle, IRM, and LLTV are fixed at creation. Future parameter sets use a new market ID and a deliberate migration path.

Collateral tokens

AssetToken address
NVDA0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC
SPY0x117cc2133c37B721F49dE2A7a74833232B3B4C0C
AAPL0xaF3D76f1834A1d425780943C99Ea8A608f8a93f9
GOOGL0x2e0847E8910a9732eB3fb1bb4b70a580ADAD4FE3
TSLA0x322F0929c4625eD5bAd873c95208D54E1c003b2d

RavenStockTokenOracle

Each market uses a separate immutable RavenStockTokenOracle. The oracle quotes one whole Stock Token in USDG using two Chainlink Stock Token/USD proxy feeds and one shared USDG/USD proxy feed. Robinhood's Stock Token feeds already include uiMultiplier(), so the oracle does not apply the multiplier again.

Feed proxies

AssetPrimary Stock Token/USD proxySecondary Stock Token/USD proxy
NVDA0x379EC4f7C378F34a1B47E4F3cbeBCbAC3E8E9F150xCF169363636D73dbBf77733629CB38919d14232d
SPY0x319724394D3A0e3669269846abE664Cd621f9f6A0xa68CA83408bE3f78d1c58a82081c619e9d21486d
AAPL0x6B22A786bAa607d76728168703a39Ea9C99f2cD00x4bDbb3150014c6Ab2C6D9347B0779c49015a2f3f
GOOGL0xF6f373a037c30F0e5010d854385cA89185AE638b0xA04EE5c4c8827F17e82f93bE9e19DeA221A749a8
TSLA0x4A1166a659A55625345e9515b32adECea5547C380xE4479F01738B4e8C428CD8eB72D47AB9BC3c7de6

All five oracles use USDG/USD proxy 0x61B7e5650328764B076A108EFF5fa7282a1B9aD2. The primary and secondary Stock Token proxies currently resolve to the same underlying aggregator. They protect against proxy divergence, but they are not independent price sources.

Public interface and immutable getters

interface IRavenStockTokenOracle {
    function price() external view returns (uint256);
    function STOCK_TOKEN() external view returns (address);
    function STOCK_PRIMARY_FEED() external view returns (address);
    function STOCK_SECONDARY_FEED() external view returns (address);
    function USDG_USD_FEED() external view returns (address);
    function STOCK_IS_COLLATERAL() external view returns (bool);
    function STOCK_MAX_AGE() external view returns (uint256);
    function USDG_MAX_AGE() external view returns (uint256);
    function MAX_STOCK_FEED_DEVIATION_WAD() external view returns (uint256);
    function SCALE_FACTOR() external view returns (uint256);
}

The deployed oracles all have the following immutable policy values:

GetterValue
STOCK_IS_COLLATERAL()true
STOCK_MAX_AGE()345600 seconds (96 hours)
USDG_MAX_AGE()93600 seconds (26 hours)
MAX_STOCK_FEED_DEVIATION_WAD()50000000000000000 (5%)
SCALE_FACTOR()1000000000000000000000000 (1e24)

STOCK_TOKEN() and both Stock Token feed getters return the asset-specific addresses in the tables above. USDG_USD_FEED() returns the shared USDG/USD proxy.

Price scaling

Morpho's oracle interface describes price() as the value of one collateral token quoted in the loan token and scaled by 1e36. Token decimals are part of that representation: the result has 36 + loanTokenDecimals - collateralTokenDecimals decimals of precision.

Raven markets use an 18-decimal Stock Token as collateral and 6-decimal USDG as the loan asset, so the returned value has 24 decimals of precision. Both deployed feed legs use 8 decimals. The oracle therefore computes:

scale exponent = 36 + USDG token decimals + USDG feed decimals
                   - Stock Token decimals - stock feed decimals
               = 36 + 6 + 8 - 18 - 8
               = 24

price = conservativeStockUsdPrice * 1e24 / usdgUsdPrice

The lower of the two valid Stock Token prices is used because the Stock Token is collateral. This prevents a higher proxy answer from increasing collateral value.

Validation and reverts

price() reverts rather than returning an unsafe value when:

  • the Stock Token reports oraclePaused() == true during a corporate-action pause;
  • a feed answer is zero or negative;
  • a Chainlink round has no update timestamp, has a timestamp in the future, or reports answeredInRound < roundId;
  • a Stock Token price is older than 96 hours or the USDG price is older than 26 hours; or
  • the two Stock Token proxy answers differ by more than 5%, measured against the lower answer.

The custom errors are:

error InvalidConfiguration();
error InvalidRound(address feed);
error StaleRound(address feed, uint256 age, uint256 maximumAge);
error StockOraclePaused();
error StockFeedDeviation(uint256 primary, uint256 secondary);

Deployment also reverts with InvalidConfiguration() for a zero required address, identical primary and secondary Stock Token feeds, zero maximum ages, a deviation limit above 100%, mismatched Stock Token feed decimals, or a computed scaling exponent outside the supported range.

Deployment provenance

All five current oracles and markets were deployed successfully in Robinhood Chain block 45975493.

AssetOracle deployment transactionMarket creation transaction
NVDA0x40fc09f2f2fb1d8e7849f4a55448265908acce276ab752fa9619ef19139a27330x00e8ae05c7df0f5ec9dee2fea836d5fe4d79b9432f89b380fc92030d58ebfadb
SPY0x6d44173ecccbe4452535afc6f2f5a25bd8a3bc25c199cb3b0188ab4a85bf6d870xe92d5c09513bd4c9a5e29aef5a98353159bb945c75c9dabf340d298d46034da0
AAPL0x6da17acfce5bedfbf3cac73a7f6db26f23447634dc3ee920e8ef8e558189bd7e0x613404a2f106f0694e21e8b630a31b8c083f0a2b65752369f5b17d45bf34cdd4
GOOGL0xdf5dc42343329fae60a679c5f4e5cd4dd5a2bee835a1ba4cbfb3b6e50a639e5b0xe1f15cdbd1c017fe592c1b3064ad7900b34ad4bc8df9fc048c8702e9714c08a9
TSLA0xff80ad98756fae7fc25aa0170d80dbc470c379bdbac63ff64a35724d7b7acf890x3680e00f78d392e83c383e02e3f8d08c7fcb0f45c8da18be129954eb514f25b9

See Deployment for the active vault configuration and operational deployment notes.

How to integrate

  • Supply-side: deposit USDG into the Vault V2 (rUSDG, ERC-20 shares) or supply directly to any of the five markets on Morpho Blue.
  • Borrow-side: supply a Stock Token as collateral and borrow USDG while maintaining a buffer below the market's 77% liquidation LLTV.
  • Aggregators/wallets: read positions with standard Morpho Blue view calls (market(id), position(...)) and Vault V2 balances; build transactions with Bundler3 or direct contract calls.

Reference documentation:

Integration gotchas

  • Stock Tokens are 18-decimal ERC-20s whose Chainlink feeds are already multiplier-adjusted. Applying the token multiplier again is a known error class, don't double-adjust prices.
  • Verify oracle feed descriptions onchain rather than trusting symbol labels.