RemappingOracle

Description:

Smart contract deployed on Ethereum with Factory features.

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

{{
  "language": "Solidity",
  "sources": {
    "src/periphery/RemappingOracle.sol": {
      "content": "/**
 *Submitted for verification at Etherscan.io on 2024-11-26
*/

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.18;

interface ICompounder {
    function vault() external view returns (address);
    function management() external view returns (address);
    function decimals() external view returns (uint256);
}

interface IAprOracle {
     function getWeightedAverageApr(
        address _vault,
        int256 _delta
    ) external view returns (uint256);
}

contract RemappingOracle {

    address public constant APR_ORACLE = 0x1981AD9F44F2EA9aDd2dC4AD7D075c102C70aF92;

    mapping (address => address) public remappings;

    function aprAfterDebtChange(
        address _strategy,
        int256 _delta
    ) external view virtual returns (uint256 _apr) {
        address vault = remappings[_strategy];

        if (vault == address(0)) {
            vault = ICompounder(_strategy).vault();
        }

        uint256 baseDecimals = ICompounder(_strategy).decimals();
        uint256 targetDecimals = ICompounder(vault).decimals();

        if (baseDecimals > targetDecimals) {
            _delta = _delta / int256(10 ** (baseDecimals - targetDecimals));
        } else if (baseDecimals < targetDecimals) {
            _delta = _delta * int256(10 ** (targetDecimals - baseDecimals));
        }

        _apr = IAprOracle(APR_ORACLE).getWeightedAverageApr(vault, _delta);
    }

    function setRemapping(address _strategy, address _vault) external {
        require(msg.sender == ICompounder(_strategy).management());
        remappings[_strategy] = _vault;
    }

}"
    }
  },
  "settings": {
    "remappings": [
      "@openzeppelin/=lib/openzeppelin-contracts/",
      "forge-std/=lib/forge-std/src/",
      "@tokenized-strategy/=lib/tokenized-strategy/src/",
      "@periphery/=lib/tokenized-strategy-periphery/src/",
      "@yearn-vaults/=lib/tokenized-strategy-periphery/lib/yearn-vaults-v3/contracts/",
      "ds-test/=lib/forge-std/lib/ds-test/src/",
      "erc4626-tests/=lib/tokenized-strategy/lib/erc4626-tests/",
      "openzeppelin-contracts/=lib/openzeppelin-contracts/",
      "openzeppelin/=lib/openzeppelin-contracts/contracts/",
      "tokenized-strategy-periphery/=lib/tokenized-strategy-periphery/",
      "tokenized-strategy/=lib/tokenized-strategy/",
      "yearn-vaults-v3/=lib/tokenized-strategy-periphery/lib/yearn-vaults-v3/"
    ],
    "optimizer": {
      "enabled": false,
      "runs": 200
    },
    "metadata": {
      "useLiteralContent": false,
      "bytecodeHash": "ipfs",
      "appendCBOR": true
    },
    "outputSelection": {
      "*": {
        "*": [
          "evm.bytecode",
          "evm.deployedBytecode",
          "devdoc",
          "userdoc",
          "metadata",
          "abi"
        ]
      }
    },
    "evmVersion": "shanghai",
    "viaIR": false
  }
}}

Tags:
Factory|addr:0x282fb12f1d498766ef93423e10d2f2ece9dec8aa|verified:true|block:23649140|tx:0x31c0d26505ad43d138a014a0f18bace1b563a4199712706e9049d32bd4518804|first_check:1761336525

Submitted on: 2025-10-24 22:08:47

Comments

Log in to comment.

No comments yet.