Skip to main content

Overview

Price adapters provide USD-denominated pricing for all assets in the Multiliquid Protocol. Each asset RWA has an associated price adapter that the MultiliquidSwap contract queries during swap calculations. Interface: src/interface/IPriceAdapter.sol

Price Adapter Interface

All price adapters implement a simple, standardized interface:
interface IPriceAdapter {
    /**
     * @notice Returns the USD price of the asset
     * @return price The price in 18-decimal WAD format (1e18 = $1 USD)
     */
    function getPrice() external view returns (uint256 price);
}
Price Format: 18-decimal WAD (1e18 = $1.00 USD) Examples:
  • $1.00 = 1000000000000000000 (1e18)
  • $1.05 = 1050000000000000000 (1.05e18)
  • $0.99 = 990000000000000000 (0.99e18)

Adapter Types

ULTRAAdapter

Fetches ULTRA (Delta Wellington Ultra Short Treasury On-Chain Fund) price from ULTRA’s manager contract. Location: src/PriceAdapters/ULTRAAdapter.sol Implementation:
contract ULTRAAdapter is IPriceAdapter {
    IULTRAManager public immutable ultraManager;

    constructor(address _ultraManager) {
        ultraManager = IULTRAManager(_ultraManager);
    }

    function getPrice() external view override returns (uint256) {
        return ultraManager.getNavPerShare();  // Returns 18-decimal price
    }
}
Dependencies:
  • ULTRA Manager contract must be available
  • getNavPerShare() must return current NAV

JTRSYAdapter

Fetches JTRSY (Janus Henderson Anemoy Treasury Fund) price from JTRSY’s vault contract. Location: src/PriceAdapters/JTRSYAdapter.sol Implementation:
contract JTRSYAdapter is IPriceAdapter {
    IJTRSYVault public immutable vault;

    constructor(address _vault) {
        vault = IJTRSYVault(_vault);
    }

    function getPrice() external view override returns (uint256) {
        return vault.sharePrice();  // Returns 18-decimal price
    }
}
Dependencies:
  • JTRSY Vault contract must be available
  • sharePrice() must return current share price

USTBAdapter

Fetches USTB (Superstate Short Duration US Government Securities Fund) price from USTB’s implementation contract. Location: src/PriceAdapters/USTBAdapter.sol Implementation:
contract USTBAdapter is IPriceAdapter {
    IUSTB public immutable ustb;

    constructor(address _ustb) {
        ustb = IUSTB(_ustb);
    }

    function getPrice() external view override returns (uint256) {
        // USTB stores price with 6 decimals, scale to 18
        uint256 rawPrice = ustb.getPrice();
        return rawPrice * 1e12;  // Scale 6 decimals → 18 decimals
    }
}
Dependencies:
  • USTB contract must be available
  • getPrice() must return current price (6 decimals)
Note: Handles decimal conversion internally

DollarPeggedAdapter

For RWAs with a NAV pegged to $1 USD (e.g., BENJI, WTGXX). Implementation:
contract DollarPeggedAdapter is IPriceAdapter {
    function getPrice() external pure override returns (uint256) {
        return 1e18;  // Always $1.00
    }
}
Use Cases:
  • BENJI (Franklin OnChain US Gov Money Fund)
  • WTGXX (WisdomTree US Dollar Digital Fund)
  • Other RWAs with $1.00 target NAV
Characteristics:
  • No external dependencies
  • Zero gas cost (pure function)
  • Deterministic pricing

Next: Integration Guide

Learn how to integrate Multiliquid into your application