Sonic Blaze Testnet

Contract

0x347E4950D0D8aA5b01102ec29Be7a00Ca958Ac97

Overview

S Balance

Sonic Blaze LogoSonic Blaze LogoSonic Blaze Logo0 S

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

1 Internal Transaction found.

Latest 1 internal transaction

Parent Transaction Hash Block From To
227445972025-02-24 16:10:5015 days ago1740413450
0x347E4950...Ca958Ac97
0 S
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PriceFeedOracle

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 2 : PriceFeedOracle.sol
// SPDX-License-Identifier: GPL-3.0-only

pragma solidity ^0.8.18;

import "../../interfaces/IPriceFeedOracle.sol";


contract PriceFeedOracle is IPriceFeedOracle {

  mapping(address => OracleAsset) public assets;

  address public constant ETH = 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38; // 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
  address public immutable safeTracker;

  constructor(
    address[] memory _assetAddresses,
    address[] memory _assetAggregators,
    uint8[] memory _assetDecimals,
    address _safeTracker
  ) {
    require(
      _assetAddresses.length == _assetAggregators.length && _assetAggregators.length == _assetDecimals.length,
      "PriceFeedOracle: different args length"
    );
    require(_safeTracker != address(0), "PriceFeedOracle: safeTracker cannot be zero address");

    safeTracker = _safeTracker;
    assets[_safeTracker] = OracleAsset(Aggregator(_safeTracker), 18);

    for (uint i = 0; i < _assetAddresses.length; i++) {
      assets[_assetAddresses[i]] = OracleAsset(Aggregator(_assetAggregators[i]), _assetDecimals[i]);
    }
  }

  /**
   * @dev Returns the amount of ether in wei that are equivalent to 1 unit (10 ** decimals) of asset
   * @param assetAddress address of asset
   * @return price in ether
   */
  function getAssetToEthRate(address assetAddress) public view returns (uint) {
    if (assetAddress == ETH || assetAddress == safeTracker) {
      return 1 ether;
    }

    OracleAsset memory asset = assets[assetAddress];
    return _getAssetToEthRate(asset.aggregator);
  }

  /**
   * @dev Returns the amount of currency that is equivalent to ethIn amount of ether.
   * @param assetAddress address of asset
   * @param ethIn amount of ether to be converted to the asset
   * @return asset amount
   */
  function getAssetForEth(address assetAddress, uint ethIn) external view returns (uint) {
    if (assetAddress == ETH || assetAddress == safeTracker) {
      return ethIn;
    }

    OracleAsset memory asset = assets[assetAddress];
    uint price = _getAssetToEthRate(asset.aggregator);

    return ethIn * (10**uint(asset.decimals)) / price;
  }

  /**
   * @dev Returns the amount of eth that is equivalent to a given asset and amount
   * @param assetAddress address of asset
   * @param amount amount of asset
   * @return amount of ether
   */
  function getEthForAsset(address assetAddress, uint amount) external view returns (uint) {
    if (assetAddress == ETH || assetAddress == safeTracker) {
      return amount;
    }

    OracleAsset memory asset = assets[assetAddress];
    uint price = _getAssetToEthRate(asset.aggregator);

    return amount * (price) / 10**uint(asset.decimals);
  }

  /**
   * @dev Returns the amount of ether in wei that are equivalent to 1 unit (10 ** decimals) of asset
   * @param aggregator The asset aggregator
   * @return price in ether
   */
  function _getAssetToEthRate(Aggregator aggregator) internal view returns (uint) {
    require(address(aggregator) != address(0), "PriceFeedOracle: Unknown asset");
    // TODO: consider checking the latest timestamp and revert if it's *very* old
    int rate = aggregator.latestAnswer();
    require(rate > 0, "PriceFeedOracle: Rate must be > 0");

    return uint(rate);
  }
}

File 2 of 2 : IPriceFeedOracle.sol
// SPDX-License-Identifier: GPL-3.0-only

pragma solidity >=0.5.0;

interface Aggregator {
  function decimals() external view returns (uint8);
  function latestAnswer() external view returns (int);
}

interface IPriceFeedOracle {

  struct OracleAsset {
    Aggregator aggregator;
    uint8 decimals;
  }

  function ETH() external view returns (address);
  function assets(address) external view returns (Aggregator, uint8);

  function getAssetToEthRate(address asset) external view returns (uint);
  function getAssetForEth(address asset, uint ethIn) external view returns (uint);
  function getEthForAsset(address asset, uint amount) external view returns (uint);

}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract ABI

API
[{"inputs":[{"internalType":"address[]","name":"_assetAddresses","type":"address[]"},{"internalType":"address[]","name":"_assetAggregators","type":"address[]"},{"internalType":"uint8[]","name":"_assetDecimals","type":"uint8[]"},{"internalType":"address","name":"_safeTracker","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"assets","outputs":[{"internalType":"contract Aggregator","name":"aggregator","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"assetAddress","type":"address"},{"internalType":"uint256","name":"ethIn","type":"uint256"}],"name":"getAssetForEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"assetAddress","type":"address"}],"name":"getAssetToEthRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"assetAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getEthForAsset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"safeTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60a06040523480156200001157600080fd5b5060405162000bce38038062000bce833981016040819052620000349162000371565b8251845114801562000047575081518351145b620000a85760405162461bcd60e51b815260206004820152602660248201527f5072696365466565644f7261636c653a20646966666572656e742061726773206044820152650d8cadccee8d60d31b60648201526084015b60405180910390fd5b6001600160a01b038116620001265760405162461bcd60e51b815260206004820152603360248201527f5072696365466565644f7261636c653a2073616665547261636b65722063616e60448201527f6e6f74206265207a65726f20616464726573730000000000000000000000000060648201526084016200009f565b6001600160a01b03808216608081905260408051808201825282815260126020808301918252600094855284905291832090518154925160ff16600160a01b026001600160a81b0319909316941693909317179091555b84518110156200025e576040518060400160405280858381518110620001a757620001a762000481565b60200260200101516001600160a01b03168152602001848381518110620001d257620001d262000481565b602002602001015160ff16815250600080878481518110620001f857620001f862000481565b6020908102919091018101516001600160a01b03908116835282820193909352604090910160002083518154949092015160ff16600160a01b026001600160a81b0319909416919092161791909117905580620002558162000497565b9150506200017d565b5050505050620004bf565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620002aa57620002aa62000269565b604052919050565b60006001600160401b03821115620002ce57620002ce62000269565b5060051b60200190565b80516001600160a01b0381168114620002f057600080fd5b919050565b600082601f8301126200030757600080fd5b81516020620003206200031a83620002b2565b6200027f565b82815260059290921b840181019181810190868411156200034057600080fd5b8286015b8481101562000366576200035881620002d8565b835291830191830162000344565b509695505050505050565b600080600080608085870312156200038857600080fd5b84516001600160401b0380821115620003a057600080fd5b620003ae88838901620002f5565b9550602091508187015181811115620003c657600080fd5b620003d489828a01620002f5565b955050604087015181811115620003ea57600080fd5b87019050601f81018813620003fe57600080fd5b80516200040f6200031a82620002b2565b81815260059190911b8201830190838101908a8311156200042f57600080fd5b928401925b828410156200046057835160ff81168114620004505760008081fd5b8252928401929084019062000434565b80965050505050506200047660608601620002d8565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b600060018201620004b857634e487b7160e01b600052601160045260246000fd5b5060010190565b6080516106df620004ef6000396000818160920152818161018d01528181610272015261032e01526106df6000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806355c40e66146100675780635d8471e41461008d578063696ae5e3146100cc5780638322fff2146100df578063bbff4e5a146100fa578063f11b81881461010d575b600080fd5b61007a61007536600461050c565b610163565b6040519081526020015b60405180910390f35b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610084565b61007a6100da366004610536565b610248565b6100b473039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b61007a61010836600461050c565b610304565b61014261011b366004610536565b6000602081905290815260409020546001600160a01b03811690600160a01b900460ff1682565b604080516001600160a01b03909316835260ff909116602083015201610084565b60006001600160a01b03831673039e2fb66102314ce7b64ce5ce3e5183bc94ad3814806101c157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b156101cd575080610242565b6001600160a01b03838116600090815260208181526040808320815180830190925254938416808252600160a01b90940460ff169181019190915291610212906103d3565b905080826020015160ff16600a610229919061064b565b6102339086610657565b61023d919061066e565b925050505b92915050565b60006001600160a01b03821673039e2fb66102314ce7b64ce5ce3e5183bc94ad3814806102a657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b156102ba5750670de0b6b3a7640000919050565b6001600160a01b0382811660009081526020818152604091829020825180840190935254928316808352600160a01b90930460ff1690820152906102fd906103d3565b9392505050565b60006001600160a01b03831673039e2fb66102314ce7b64ce5ce3e5183bc94ad38148061036257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b1561036e575080610242565b6001600160a01b03838116600090815260208181526040808320815180830190925254938416808252600160a01b90940460ff1691810191909152916103b3906103d3565b9050816020015160ff16600a6103c9919061064b565b6102338286610657565b60006001600160a01b0382166104305760405162461bcd60e51b815260206004820152601e60248201527f5072696365466565644f7261636c653a20556e6b6e6f776e206173736574000060448201526064015b60405180910390fd5b6000826001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610470573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104949190610690565b9050600081136102425760405162461bcd60e51b815260206004820152602160248201527f5072696365466565644f7261636c653a2052617465206d757374206265203e206044820152600360fc1b6064820152608401610427565b80356001600160a01b038116811461050757600080fd5b919050565b6000806040838503121561051f57600080fd5b610528836104f0565b946020939093013593505050565b60006020828403121561054857600080fd5b6102fd826104f0565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156105a257816000190482111561058857610588610551565b8085161561059557918102915b93841c939080029061056c565b509250929050565b6000826105b957506001610242565b816105c657506000610242565b81600181146105dc57600281146105e657610602565b6001915050610242565b60ff8411156105f7576105f7610551565b50506001821b610242565b5060208310610133831016604e8410600b8410161715610625575081810a610242565b61062f8383610567565b806000190482111561064357610643610551565b029392505050565b60006102fd83836105aa565b808202811582820484141761024257610242610551565b60008261068b57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156106a257600080fd5b505191905056fea264697066735822122023547624834ca477711c912ec527761ead89fcf650adebe3ba2096de80eca9b164736f6c63430008120033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000053171be74d0ac87ce38fede85af530408bd135b100000000000000000000000000000000000000000000000000000000000000010000000000000000000000001570300e9cfec66c9fb0c8bc14366c86eb170ad0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000081caff07827aacfe953dd3168793073fad61d73500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000006

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100625760003560e01c806355c40e66146100675780635d8471e41461008d578063696ae5e3146100cc5780638322fff2146100df578063bbff4e5a146100fa578063f11b81881461010d575b600080fd5b61007a61007536600461050c565b610163565b6040519081526020015b60405180910390f35b6100b47f00000000000000000000000053171be74d0ac87ce38fede85af530408bd135b181565b6040516001600160a01b039091168152602001610084565b61007a6100da366004610536565b610248565b6100b473039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b61007a61010836600461050c565b610304565b61014261011b366004610536565b6000602081905290815260409020546001600160a01b03811690600160a01b900460ff1682565b604080516001600160a01b03909316835260ff909116602083015201610084565b60006001600160a01b03831673039e2fb66102314ce7b64ce5ce3e5183bc94ad3814806101c157507f00000000000000000000000053171be74d0ac87ce38fede85af530408bd135b16001600160a01b0316836001600160a01b0316145b156101cd575080610242565b6001600160a01b03838116600090815260208181526040808320815180830190925254938416808252600160a01b90940460ff169181019190915291610212906103d3565b905080826020015160ff16600a610229919061064b565b6102339086610657565b61023d919061066e565b925050505b92915050565b60006001600160a01b03821673039e2fb66102314ce7b64ce5ce3e5183bc94ad3814806102a657507f00000000000000000000000053171be74d0ac87ce38fede85af530408bd135b16001600160a01b0316826001600160a01b0316145b156102ba5750670de0b6b3a7640000919050565b6001600160a01b0382811660009081526020818152604091829020825180840190935254928316808352600160a01b90930460ff1690820152906102fd906103d3565b9392505050565b60006001600160a01b03831673039e2fb66102314ce7b64ce5ce3e5183bc94ad38148061036257507f00000000000000000000000053171be74d0ac87ce38fede85af530408bd135b16001600160a01b0316836001600160a01b0316145b1561036e575080610242565b6001600160a01b03838116600090815260208181526040808320815180830190925254938416808252600160a01b90940460ff1691810191909152916103b3906103d3565b9050816020015160ff16600a6103c9919061064b565b6102338286610657565b60006001600160a01b0382166104305760405162461bcd60e51b815260206004820152601e60248201527f5072696365466565644f7261636c653a20556e6b6e6f776e206173736574000060448201526064015b60405180910390fd5b6000826001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610470573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104949190610690565b9050600081136102425760405162461bcd60e51b815260206004820152602160248201527f5072696365466565644f7261636c653a2052617465206d757374206265203e206044820152600360fc1b6064820152608401610427565b80356001600160a01b038116811461050757600080fd5b919050565b6000806040838503121561051f57600080fd5b610528836104f0565b946020939093013593505050565b60006020828403121561054857600080fd5b6102fd826104f0565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156105a257816000190482111561058857610588610551565b8085161561059557918102915b93841c939080029061056c565b509250929050565b6000826105b957506001610242565b816105c657506000610242565b81600181146105dc57600281146105e657610602565b6001915050610242565b60ff8411156105f7576105f7610551565b50506001821b610242565b5060208310610133831016604e8410600b8410161715610625575081810a610242565b61062f8383610567565b806000190482111561064357610643610551565b029392505050565b60006102fd83836105aa565b808202811582820484141761024257610242610551565b60008261068b57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156106a257600080fd5b505191905056fea264697066735822122023547624834ca477711c912ec527761ead89fcf650adebe3ba2096de80eca9b164736f6c63430008120033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000053171be74d0ac87ce38fede85af530408bd135b100000000000000000000000000000000000000000000000000000000000000010000000000000000000000001570300e9cfec66c9fb0c8bc14366c86eb170ad0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000081caff07827aacfe953dd3168793073fad61d73500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000006

-----Decoded View---------------
Arg [0] : _assetAddresses (address[]): 0x1570300e9cFEC66c9Fb0C8bc14366C86EB170Ad0
Arg [1] : _assetAggregators (address[]): 0x81CaFF07827AacFe953dD3168793073fAd61d735
Arg [2] : _assetDecimals (uint8[]): 6
Arg [3] : _safeTracker (address): 0x53171BE74d0AC87CE38fede85af530408Bd135B1

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 00000000000000000000000053171be74d0ac87ce38fede85af530408bd135b1
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 0000000000000000000000001570300e9cfec66c9fb0c8bc14366c86eb170ad0
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [7] : 00000000000000000000000081caff07827aacfe953dd3168793073fad61d735
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000006


Block Transaction 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
[ 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.