ETH Price: $3,125.66 (-0.35%)

Contract

0xFD858c8bC5ac5e10f01018bC78471bb0DC392247
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x61010060172648092023-05-15 11:12:47552 days ago1684149167IN
 Create: CLSynchronicityPriceAdapterPegToBase
0 ETH0.0189105341.1017364

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CLSynchronicityPriceAdapterPegToBase

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 3 : CLSynchronicityPriceAdapterPegToBase.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import {IChainlinkAggregator} from '../interfaces/IChainlinkAggregator.sol';
import {ICLSynchronicityPriceAdapter} from '../interfaces/ICLSynchronicityPriceAdapter.sol';

/**
 * @title CLSynchronicityPriceAdapter
 * @author BGD Labs
 * @notice Price adapter to calculate price of (Asset / Base) pair by using
 * @notice Chainlink Data Feeds for (Asset / Peg) and (Peg / Base) pairs.
 * @notice For example it can be used to calculate stETH / USD
 * @notice based on stETH / ETH and ETH / USD feeds.
 */
contract CLSynchronicityPriceAdapterPegToBase is ICLSynchronicityPriceAdapter {
  /**
   * @notice Price feed for (Base / Peg) pair
   */
  IChainlinkAggregator public immutable PEG_TO_BASE;

  /**
   * @notice Price feed for (Asset / Peg) pair
   */
  IChainlinkAggregator public immutable ASSET_TO_PEG;

  /**
   * @notice Number of decimals in the output of this price adapter
   */
  uint8 public immutable DECIMALS;

  /**
   * @notice This is a parameter to bring the resulting answer with the proper precision.
   * @notice will be equal to 10 to the power of the sum decimals of feeds
   */
  int256 public immutable DENOMINATOR;

  /**
   * @notice Maximum number of resulting and feed decimals
   */
  uint8 public constant MAX_DECIMALS = 18;

  string private _description;

  /**
   * @param pegToBaseAggregatorAddress the address of PEG / BASE feed
   * @param assetToPegAggregatorAddress the address of the ASSET / PEG feed
   * @param decimals precision of the answer
   * @param pairDescription description
   */
  constructor(
    address pegToBaseAggregatorAddress,
    address assetToPegAggregatorAddress,
    uint8 decimals,
    string memory pairDescription
  ) {
    PEG_TO_BASE = IChainlinkAggregator(pegToBaseAggregatorAddress);
    ASSET_TO_PEG = IChainlinkAggregator(assetToPegAggregatorAddress);

    if (decimals > MAX_DECIMALS) revert DecimalsAboveLimit();
    if (PEG_TO_BASE.decimals() > MAX_DECIMALS) revert DecimalsAboveLimit();
    if (ASSET_TO_PEG.decimals() > MAX_DECIMALS) revert DecimalsAboveLimit();

    DECIMALS = decimals;
    _description = pairDescription;

    // equal to 10 to the power of the sum decimals of feeds
    unchecked {
      DENOMINATOR = int256(10 ** (PEG_TO_BASE.decimals() + ASSET_TO_PEG.decimals()));
    }
  }

  /// @inheritdoc ICLSynchronicityPriceAdapter
  function description() external view returns (string memory) {
    return _description;
  }

  /// @inheritdoc ICLSynchronicityPriceAdapter
  function decimals() external view returns (uint8) {
    return DECIMALS;
  }

  /// @inheritdoc ICLSynchronicityPriceAdapter
  function latestAnswer() public view virtual override returns (int256) {
    int256 assetToPegPrice = ASSET_TO_PEG.latestAnswer();
    int256 pegToBasePrice = PEG_TO_BASE.latestAnswer();

    if (assetToPegPrice <= 0 || pegToBasePrice <= 0) {
      return 0;
    }

    return (assetToPegPrice * pegToBasePrice * int256(10 ** DECIMALS)) / (DENOMINATOR);
  }
}

File 2 of 3 : ICLSynchronicityPriceAdapter.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface ICLSynchronicityPriceAdapter {
  /**
   * @notice Calculates the current answer based on the aggregators.
   * @return int256 latestAnswer
   */
  function latestAnswer() external view returns (int256);

  /**
   * @notice Returns the description of the feed
   * @return string desciption
   */
  function description() external view returns (string memory);

  /**
   * @notice Returns the feed decimals
   * @return uint8 decimals
   */
  function decimals() external view returns (uint8);

  error DecimalsAboveLimit();
  error DecimalsNotEqual();
}

File 3 of 3 : IChainlinkAggregator.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IChainlinkAggregator {
  function decimals() external view returns (uint8);

  function latestAnswer() external view returns (int256);

  function latestTimestamp() external view returns (uint256);

  function latestRound() external view returns (uint256);

  function getAnswer(uint256 roundId) external view returns (int256);

  function getTimestamp(uint256 roundId) external view returns (uint256);

  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 timestamp);
  event NewRound(uint256 indexed roundId, address indexed startedBy);
}

Settings
{
  "remappings": [
    "aave-address-book/=lib/aave-address-book/src/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"pegToBaseAggregatorAddress","type":"address"},{"internalType":"address","name":"assetToPegAggregatorAddress","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"string","name":"pairDescription","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"DecimalsAboveLimit","type":"error"},{"inputs":[],"name":"DecimalsNotEqual","type":"error"},{"inputs":[],"name":"ASSET_TO_PEG","outputs":[{"internalType":"contract IChainlinkAggregator","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DECIMALS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DENOMINATOR","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_DECIMALS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PEG_TO_BASE","outputs":[{"internalType":"contract IChainlinkAggregator","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"}]

6101006040523480156200001257600080fd5b5060405162000be738038062000be78339810160408190526200003591620002ca565b6001600160a01b03808516608052831660a052601260ff831611156200006e57604051638fdc971960e01b815260040160405180910390fd5b601260ff166080516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000da9190620003d7565b60ff161115620000fd57604051638fdc971960e01b815260040160405180910390fd5b601260ff1660a0516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000143573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001699190620003d7565b60ff1611156200018c57604051638fdc971960e01b815260040160405180910390fd5b60ff821660c0526000620001a182826200048b565b5060a0516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002099190620003d7565b6080516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002709190620003d7565b0160ff16600a0a60e052506200055792505050565b80516001600160a01b03811681146200029d57600080fd5b919050565b805160ff811681146200029d57600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215620002e157600080fd5b620002ec8562000285565b93506020620002fd81870162000285565b93506200030d60408701620002a2565b60608701519093506001600160401b03808211156200032b57600080fd5b818801915088601f8301126200034057600080fd5b815181811115620003555762000355620002b4565b604051601f8201601f19908116603f01168101908382118183101715620003805762000380620002b4565b816040528281528b868487010111156200039957600080fd5b600093505b82841015620003bd57848401860151818501870152928501926200039e565b600086848301015280965050505050505092959194509250565b600060208284031215620003ea57600080fd5b620003f582620002a2565b9392505050565b600181811c908216806200041157607f821691505b6020821081036200043257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200048657600081815260208120601f850160051c81016020861015620004615750805b601f850160051c820191505b8181101562000482578281556001016200046d565b5050505b505050565b81516001600160401b03811115620004a757620004a7620002b4565b620004bf81620004b88454620003fc565b8462000438565b602080601f831160018114620004f75760008415620004de5750858301515b600019600386901b1c1916600185901b17855562000482565b600085815260208120601f198616915b82811015620005285788860151825594840194600190910190840162000507565b5085821015620005475787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e051610635620005b26000396000818161016801526102df01526000818160b10152818160d5015261030301526000818161012901526101b601526000818161018f015261023c01526106356000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80637284e4161161005b5780637284e4161461010f578063910bb70c14610124578063918f867414610163578063de4aedab1461018a57600080fd5b80630417cf8e1461008d5780632e0f2625146100ac578063313ce567146100d357806350d25bcd146100f9575b600080fd5b610095601281565b60405160ff90911681526020015b60405180910390f35b6100957f000000000000000000000000000000000000000000000000000000000000000081565b7f0000000000000000000000000000000000000000000000000000000000000000610095565b6101016101b1565b6040519081526020016100a3565b61011761034e565b6040516100a391906103e0565b61014b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100a3565b6101017f000000000000000000000000000000000000000000000000000000000000000081565b61014b7f000000000000000000000000000000000000000000000000000000000000000081565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610212573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610236919061042e565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610298573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102bc919061042e565b90506000821315806102cf575060008113155b156102dd5760009250505090565b7f00000000000000000000000000000000000000000000000000000000000000006103297f0000000000000000000000000000000000000000000000000000000000000000600a610543565b6103338385610559565b61033d9190610559565b6103479190610589565b9250505090565b60606000805461035d906105c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610389906105c5565b80156103d65780601f106103ab576101008083540402835291602001916103d6565b820191906000526020600020905b8154815290600101906020018083116103b957829003601f168201915b5050505050905090565b600060208083528351808285015260005b8181101561040d578581018301518582016040015282016103f1565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561044057600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561049857816000190482111561047e5761047e610447565b8085161561048b57918102915b93841c9390800290610462565b509250929050565b6000826104af5750600161053d565b816104bc5750600061053d565b81600181146104d257600281146104dc576104f8565b600191505061053d565b60ff8411156104ed576104ed610447565b50506001821b61053d565b5060208310610133831016604e8410600b841016171561051b575081810a61053d565b610525838361045d565b806000190482111561053957610539610447565b0290505b92915050565b600061055260ff8416836104a0565b9392505050565b80820260008212600160ff1b8414161561057557610575610447565b818105831482151761053d5761053d610447565b6000826105a657634e487b7160e01b600052601260045260246000fd5b600160ff1b8214600019841416156105c0576105c0610447565b500590565b600181811c908216806105d957607f821691505b6020821081036105f957634e487b7160e01b600052602260045260246000fd5b5091905056fea264697066735822122050a4f9c9e3211e493d76c09148e4ec96d95c5508326cfd0bb73fc31e547968cb64736f6c63430008110033000000000000000000000000deb288f737066589598e9214e782fa5a8ed689e8000000000000000000000000fdfd9c85ad200c506cf9e21f1fd8dd01932fbb2300000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c774254432f4254432f4554480000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100885760003560e01c80637284e4161161005b5780637284e4161461010f578063910bb70c14610124578063918f867414610163578063de4aedab1461018a57600080fd5b80630417cf8e1461008d5780632e0f2625146100ac578063313ce567146100d357806350d25bcd146100f9575b600080fd5b610095601281565b60405160ff90911681526020015b60405180910390f35b6100957f000000000000000000000000000000000000000000000000000000000000001281565b7f0000000000000000000000000000000000000000000000000000000000000012610095565b6101016101b1565b6040519081526020016100a3565b61011761034e565b6040516100a391906103e0565b61014b7f000000000000000000000000fdfd9c85ad200c506cf9e21f1fd8dd01932fbb2381565b6040516001600160a01b0390911681526020016100a3565b6101017f00000000000000000000000000000000000000000052b7d2dcc80cd2e400000081565b61014b7f000000000000000000000000deb288f737066589598e9214e782fa5a8ed689e881565b6000807f000000000000000000000000fdfd9c85ad200c506cf9e21f1fd8dd01932fbb236001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610212573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610236919061042e565b905060007f000000000000000000000000deb288f737066589598e9214e782fa5a8ed689e86001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610298573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102bc919061042e565b90506000821315806102cf575060008113155b156102dd5760009250505090565b7f00000000000000000000000000000000000000000052b7d2dcc80cd2e40000006103297f0000000000000000000000000000000000000000000000000000000000000012600a610543565b6103338385610559565b61033d9190610559565b6103479190610589565b9250505090565b60606000805461035d906105c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610389906105c5565b80156103d65780601f106103ab576101008083540402835291602001916103d6565b820191906000526020600020905b8154815290600101906020018083116103b957829003601f168201915b5050505050905090565b600060208083528351808285015260005b8181101561040d578581018301518582016040015282016103f1565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561044057600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561049857816000190482111561047e5761047e610447565b8085161561048b57918102915b93841c9390800290610462565b509250929050565b6000826104af5750600161053d565b816104bc5750600061053d565b81600181146104d257600281146104dc576104f8565b600191505061053d565b60ff8411156104ed576104ed610447565b50506001821b61053d565b5060208310610133831016604e8410600b841016171561051b575081810a61053d565b610525838361045d565b806000190482111561053957610539610447565b0290505b92915050565b600061055260ff8416836104a0565b9392505050565b80820260008212600160ff1b8414161561057557610575610447565b818105831482151761053d5761053d610447565b6000826105a657634e487b7160e01b600052601260045260246000fd5b600160ff1b8214600019841416156105c0576105c0610447565b500590565b600181811c908216806105d957607f821691505b6020821081036105f957634e487b7160e01b600052602260045260246000fd5b5091905056fea264697066735822122050a4f9c9e3211e493d76c09148e4ec96d95c5508326cfd0bb73fc31e547968cb64736f6c63430008110033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000deb288f737066589598e9214e782fa5a8ed689e8000000000000000000000000fdfd9c85ad200c506cf9e21f1fd8dd01932fbb2300000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c774254432f4254432f4554480000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : pegToBaseAggregatorAddress (address): 0xdeb288F737066589598e9214E782fa5A8eD689e8
Arg [1] : assetToPegAggregatorAddress (address): 0xfdFD9C85aD200c506Cf9e21F1FD8dd01932FBB23
Arg [2] : decimals (uint8): 18
Arg [3] : pairDescription (string): wBTC/BTC/ETH

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000deb288f737066589598e9214e782fa5a8ed689e8
Arg [1] : 000000000000000000000000fdfd9c85ad200c506cf9e21f1fd8dd01932fbb23
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [5] : 774254432f4254432f4554480000000000000000000000000000000000000000


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.