Sonic Blaze Testnet

Contract

0x900c5355A7214B19BA1d2E8B957d52F83dC8D2d9

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

8 Internal Transactions found.

Latest 8 internal transactions

Parent Transaction Hash Block From To
259964252025-03-12 19:57:2114 hrs ago1741809441
0x900c5355...83dC8D2d9
0 S
259964252025-03-12 19:57:2114 hrs ago1741809441
0x900c5355...83dC8D2d9
0 S
259964252025-03-12 19:57:2114 hrs ago1741809441
0x900c5355...83dC8D2d9
0 S
259964252025-03-12 19:57:2114 hrs ago1741809441
0x900c5355...83dC8D2d9
0 S
259961732025-03-12 19:55:1414 hrs ago1741809314
0x900c5355...83dC8D2d9
0 S
259961732025-03-12 19:55:1414 hrs ago1741809314
0x900c5355...83dC8D2d9
0 S
259961732025-03-12 19:55:1414 hrs ago1741809314
0x900c5355...83dC8D2d9
0 S
259479152025-03-12 13:19:2421 hrs ago1741785564
0x900c5355...83dC8D2d9
0 S
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x347E4950...Ca958Ac97
The constructor portion of the code might be different and could alter the actual behaviour of the contract

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"}]

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100625760003560e01c806355c40e66146100675780635d8471e41461008d578063696ae5e3146100cc5780638322fff2146100df578063bbff4e5a146100fa578063f11b81881461010d575b600080fd5b61007a61007536600461050c565b610163565b6040519081526020015b60405180910390f35b6100b47f0000000000000000000000001527eebb5a84837c8d8ed8f1ae334cc8e630170c81565b6040516001600160a01b039091168152602001610084565b61007a6100da366004610536565b610248565b6100b473039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b61007a61010836600461050c565b610304565b61014261011b366004610536565b6000602081905290815260409020546001600160a01b03811690600160a01b900460ff1682565b604080516001600160a01b03909316835260ff909116602083015201610084565b60006001600160a01b03831673039e2fb66102314ce7b64ce5ce3e5183bc94ad3814806101c157507f0000000000000000000000001527eebb5a84837c8d8ed8f1ae334cc8e630170c6001600160a01b0316836001600160a01b0316145b156101cd575080610242565b6001600160a01b03838116600090815260208181526040808320815180830190925254938416808252600160a01b90940460ff169181019190915291610212906103d3565b905080826020015160ff16600a610229919061064b565b6102339086610657565b61023d919061066e565b925050505b92915050565b60006001600160a01b03821673039e2fb66102314ce7b64ce5ce3e5183bc94ad3814806102a657507f0000000000000000000000001527eebb5a84837c8d8ed8f1ae334cc8e630170c6001600160a01b0316826001600160a01b0316145b156102ba5750670de0b6b3a7640000919050565b6001600160a01b0382811660009081526020818152604091829020825180840190935254928316808352600160a01b90930460ff1690820152906102fd906103d3565b9392505050565b60006001600160a01b03831673039e2fb66102314ce7b64ce5ce3e5183bc94ad38148061036257507f0000000000000000000000001527eebb5a84837c8d8ed8f1ae334cc8e630170c6001600160a01b0316836001600160a01b0316145b1561036e575080610242565b6001600160a01b03838116600090815260208181526040808320815180830190925254938416808252600160a01b90940460ff1691810191909152916103b3906103d3565b9050816020015160ff16600a6103c9919061064b565b6102338286610657565b60006001600160a01b0382166104305760405162461bcd60e51b815260206004820152601e60248201527f5072696365466565644f7261636c653a20556e6b6e6f776e206173736574000060448201526064015b60405180910390fd5b6000826001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610470573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104949190610690565b9050600081136102425760405162461bcd60e51b815260206004820152602160248201527f5072696365466565644f7261636c653a2052617465206d757374206265203e206044820152600360fc1b6064820152608401610427565b80356001600160a01b038116811461050757600080fd5b919050565b6000806040838503121561051f57600080fd5b610528836104f0565b946020939093013593505050565b60006020828403121561054857600080fd5b6102fd826104f0565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156105a257816000190482111561058857610588610551565b8085161561059557918102915b93841c939080029061056c565b509250929050565b6000826105b957506001610242565b816105c657506000610242565b81600181146105dc57600281146105e657610602565b6001915050610242565b60ff8411156105f7576105f7610551565b50506001821b610242565b5060208310610133831016604e8410600b8410161715610625575081810a610242565b61062f8383610567565b806000190482111561064357610643610551565b029392505050565b60006102fd83836105aa565b808202811582820484141761024257610242610551565b60008261068b57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156106a257600080fd5b505191905056fea264697066735822122023547624834ca477711c912ec527761ead89fcf650adebe3ba2096de80eca9b164736f6c63430008120033

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.