Skip to content

Latest commit

 

History

History
65 lines (51 loc) · 4.39 KB

File metadata and controls

65 lines (51 loc) · 4.39 KB

Rate Provider: UltraLRT

Details

Context

Affine ultraLRTs are Symbiotic and Eigenlayer Liquid Restaking Tokens (LRTs). Affine UltraLRT vaults expose an exchange rate of affine vault share <-> affine vault asset via a rate provider.

Review Checklist: Bare Minimum Compatibility

Each of the items below represents an absolute requirement for the Rate Provider. If any of these is unchecked, the Rate Provider is unfit to use.

  • Implements the IRateProvider interface.
  • getRate returns an 18-decimal fixed point number (i.e., 1 == 1e18) regardless of underlying token decimals.

Review Checklist: Common Findings

Each of the items below represents a common red flag found in Rate Provider contracts.

If none of these is checked, then this might be a pretty great Rate Provider! If any of these is checked, we must thoroughly elaborate on the conditions that lead to the potential issue. Decision points are not binary; a Rate Provider can be safe despite these boxes being checked. A check simply indicates that thorough vetting is required in a specific area, and this vetting should be used to inform a holistic analysis of the Rate Provider.

Administrative Privileges

Oracles

  • Price data is provided by an off-chain source (e.g., a Chainlink oracle, a multisig, or a network of nodes).

  • Price data is expected to be volatile (e.g., because it represents an open market price instead of a (mostly) monotonically increasing price).

Common Manipulation Vectors

  • The Rate Provider is susceptible to donation attacks.
    • comment: The rate can be influenced by donating to the vault as the vault's total assets are measured via
    // 
    function vaultAssets() public view returns (uint256) {
        return IERC20MetadataUpgradeable(asset()).balanceOf(address(this));
    }
    which is part of the totalAssets used in the getRate calculation.

Additional Findings

To save time, we do not bother pointing out low-severity/informational issues or gas optimizations (unless the gas usage is particularly egregious). Instead, we focus only on high- and medium-severity findings which materially impact the contract's functionality and could harm users.

Conclusion

Summary judgment: SAFE

This rate Provider should work well with Balancer pools. Upgradeability of the system is guarded behind a multisig with a timelock of 1 second. The suggestion is to increase the timelock's minDelay to a higher duration like 24 hours.