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
| Contract | Address |
|---|---|
| Morpho Blue | 0x9D53d5E3bd5E8d4Cbfa6DB1ca238AEA02E651010 |
| Adaptive Curve IRM | 0x2BD3d5965B26B51814AC95127B2b80dD6CcC0fa1 |
| USDG | 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 |
| WETH | 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73 |
| Vault V2 (rUSDG) | 0x3537A4d0d3C3B581945C203A7182E6351098A1BA |
| Vault V2 Blue Public Allocator | 0xCe5c1aFa115fF8b1D6913509bfc79D9AE08CC857 |
| MarketV1AdapterV2 | 0x1D292b1Cb4adB121a9b1D594F72a4aa16E45f23a |
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.
| Asset | Market ID | Oracle |
|---|---|---|
| NVDA | 0x21539fb91cac5c218508f89d6bd946eabaeed3b4ff185e802bbb73c2f77c25de | 0x94d7d2f6790c676a2d3133b4d7dd689526b7c4e5 |
| SPY | 0x077088f9ae5f5c1d35439ee68f4bdbb176368a1a73fd4c8cb8e004143d0c5c30 | 0x3697e6e149b8f080a753d3f624600a3a3c9cc72c |
| AAPL | 0x6641d1333a00edf42f79b931554f1c81971656f18d881245f9547b471d5a49fb | 0xce96f48ee4404f06174e46f0d2020d2bc5d705c2 |
| GOOGL | 0xfb89cd660644af485ed5eb7dc4fe20623a7934537258c95635ac9a3a87d787fd | 0xe8598bc02719c5b00133329743051d739b0321ae |
| TSLA | 0xfa83733bf91efe91c9ef2ff56ab4ff6dcd3ef7c90e55f20ae7e88070e0b84634 | 0x1440704059616f3aa4a6087b1b52fdb87183d20e |
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
| Asset | Token address |
|---|---|
| NVDA | 0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC |
| SPY | 0x117cc2133c37B721F49dE2A7a74833232B3B4C0C |
| AAPL | 0xaF3D76f1834A1d425780943C99Ea8A608f8a93f9 |
| GOOGL | 0x2e0847E8910a9732eB3fb1bb4b70a580ADAD4FE3 |
| TSLA | 0x322F0929c4625eD5bAd873c95208D54E1c003b2d |
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
| Asset | Primary Stock Token/USD proxy | Secondary Stock Token/USD proxy |
|---|---|---|
| NVDA | 0x379EC4f7C378F34a1B47E4F3cbeBCbAC3E8E9F15 | 0xCF169363636D73dbBf77733629CB38919d14232d |
| SPY | 0x319724394D3A0e3669269846abE664Cd621f9f6A | 0xa68CA83408bE3f78d1c58a82081c619e9d21486d |
| AAPL | 0x6B22A786bAa607d76728168703a39Ea9C99f2cD0 | 0x4bDbb3150014c6Ab2C6D9347B0779c49015a2f3f |
| GOOGL | 0xF6f373a037c30F0e5010d854385cA89185AE638b | 0xA04EE5c4c8827F17e82f93bE9e19DeA221A749a8 |
| TSLA | 0x4A1166a659A55625345e9515b32adECea5547C38 | 0xE4479F01738B4e8C428CD8eB72D47AB9BC3c7de6 |
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:
| Getter | Value |
|---|---|
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 / usdgUsdPriceThe 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() == trueduring 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.
| Asset | Oracle deployment transaction | Market creation transaction |
|---|---|---|
| NVDA | 0x40fc09f2f2fb1d8e7849f4a55448265908acce276ab752fa9619ef19139a2733 | 0x00e8ae05c7df0f5ec9dee2fea836d5fe4d79b9432f89b380fc92030d58ebfadb |
| SPY | 0x6d44173ecccbe4452535afc6f2f5a25bd8a3bc25c199cb3b0188ab4a85bf6d87 | 0xe92d5c09513bd4c9a5e29aef5a98353159bb945c75c9dabf340d298d46034da0 |
| AAPL | 0x6da17acfce5bedfbf3cac73a7f6db26f23447634dc3ee920e8ef8e558189bd7e | 0x613404a2f106f0694e21e8b630a31b8c083f0a2b65752369f5b17d45bf34cdd4 |
| GOOGL | 0xdf5dc42343329fae60a679c5f4e5cd4dd5a2bee835a1ba4cbfb3b6e50a639e5b | 0xe1f15cdbd1c017fe592c1b3064ad7900b34ad4bc8df9fc048c8702e9714c08a9 |
| TSLA | 0xff80ad98756fae7fc25aa0170d80dbc470c379bdbac63ff64a35724d7b7acf89 | 0x3680e00f78d392e83c383e02e3f8d08c7fcb0f45c8da18be129954eb514f25b9 |
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.