false
false

Contract Address Details

0x8a358F391d93f7558D5F5E61BDf533e2cc3Cf7a3

Contract Name
SupraSValueFeedStorage
Creator
0x1241f4–923734 at 0x2928e3–0e2d60
Balance
0 SYS ( )
Tokens
Fetching tokens...
Transactions
1 Transactions
Transfers
0 Transfers
Gas Used
47,142
Last Balance Update
792786
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
SupraSValueFeedStorage




Optimization enabled
true
Compiler version
v0.8.19+commit.7dd6d404




Optimization runs
200
EVM Version
default




Verified at
2023-06-29T05:43:25.466009Z

Contract source code

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol)

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Contract module which provides access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership} and {acceptOwnership}.
 *
 * This module is used through inheritance. It will make available all functions
 * from parent (Ownable).
 */
abstract contract Ownable2Step is Ownable {
    address private _pendingOwner;

    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Returns the address of the pending owner.
     */
    function pendingOwner() public view virtual returns (address) {
        return _pendingOwner;
    }

    /**
     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual override onlyOwner {
        _pendingOwner = newOwner;
        emit OwnershipTransferStarted(owner(), newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual override {
        delete _pendingOwner;
        super._transferOwnership(newOwner);
    }

    /**
     * @dev The new owner accepts the ownership transfer.
     */
    function acceptOwnership() public virtual {
        address sender = _msgSender();
        require(pendingOwner() == sender, "Ownable2Step: caller is not the new owner");
        _transferOwnership(sender);
    }
}

/// @title Supra Oracle Value Feed Storage Contract
/// @author Supra developer
/// @notice This contract is used for to storing the exchange rate of trading pairs
/// @dev All function calls are currently implemented without side effects
contract SupraSValueFeedStorage is Ownable2Step {
    /// @notice It is address of Verifier contract of SupraOracle
    /// @dev It stores contract address of Verifier contract
    address public supraSValueFeedVerifier;
    mapping(uint64 => bytes32) supraStorage;

    // mapping(uint256 => mapping(uint256 => uint256)) latestTimestamp;
    mapping(uint256 => uint256) latestTimestamp;

    error InvalidVerifier();
    error UnauthorisedAccess(address _actualAddr, address _ownerAddr);

    modifier onlySupraVerifier() {
        if (msg.sender != supraSValueFeedVerifier)
            revert UnauthorisedAccess(msg.sender, supraSValueFeedVerifier);
        _;
    }

    event SupraSValueVerifierUpdated(address _updatedVerifierAddress);

    /// @notice Get the exchange rate value and availability status for a single trading pair.
    /// @param _pairIndex The index of the trading pair.
    /// @return The exchange rate value and a flag indicating if the value is available or not.
    function getSvalue(uint64 _pairIndex)
        external
        view
        returns (bytes32, bool)
    {
        bool flag;
        if (supraStorage[_pairIndex] == bytes32(0)) {
            flag = true;
        }
        return (supraStorage[_pairIndex], flag);
    }

    /// @notice Get the exchange rate values and availability statuses for multiple trading pairs.
    /// @param _pairIndexes An array of trading pair indexes.
    /// @return An array of exchange rate values and an array of flags indicating if the values are available or not.
    function getSvalues(uint64[] memory _pairIndexes)
        external
        view
        returns (bytes32[] memory, bool[] memory)
    {
        bytes32[] memory storedata = new bytes32[](_pairIndexes.length);
        bool[] memory flags = new bool[](_pairIndexes.length);
        for (uint64 loop = 0; loop < _pairIndexes.length; loop++) {
            storedata[loop] = supraStorage[_pairIndexes[loop]];
            if (supraStorage[_pairIndexes[loop]] == bytes32(0)) {
                flags[loop] = true;
            }
        }
        return (storedata, flags);
    }

    /// @notice Update the address of the Supra Oracle Verifier contract.
    /// @param _supraSValueFeedVerifier The new address of the SupraOracle Verifier contract.
    /// @dev Only the owner of this contract can update the verifier address.
    function updateSupraSValueFeedVerifier(address _supraSValueFeedVerifier)
        public
        onlyOwner
    {
        if (_supraSValueFeedVerifier == address(0)) {
            revert InvalidVerifier();
        }
        supraSValueFeedVerifier = _supraSValueFeedVerifier;

        emit SupraSValueVerifierUpdated(_supraSValueFeedVerifier);
    }

    /// @notice Set the exchange rate value for a specific trading pair.
    /// @param _index The index of the trading pair.
    /// @param _bytes The exchange rate value to be set.
    /// @dev This function is restricted to the Supra Oracle Verifier contract.
    ///      It is used to set the exchange rate value for a trading pair.
    function restrictedSetSupraStorage(uint64 _index, bytes32 _bytes)
        external
        onlySupraVerifier
    {
        setSupraStorage(_index, _bytes);
    }

    function restrictedSetTimestamp(uint256 _tradingPair, uint256 timestamp)
        external
        onlySupraVerifier
    {
        setTimestamp(_tradingPair, timestamp);
    }

    function getTimestamp(uint256 _tradingPair)
        external
        view
        returns (uint256)
    {
        return latestTimestamp[_tradingPair];
    }

    function setTimestamp(uint256 _tradingPair, uint256 timestamp) internal {
        latestTimestamp[_tradingPair] = timestamp;
    }

    function setSupraStorage(uint64 _index, bytes32 _bytes) internal {
        supraStorage[_index] = _bytes;
    }
}

        

Contract ABI

[{"type":"error","name":"InvalidVerifier","inputs":[]},{"type":"error","name":"UnauthorisedAccess","inputs":[{"type":"address","name":"_actualAddr","internalType":"address"},{"type":"address","name":"_ownerAddr","internalType":"address"}]},{"type":"event","name":"OwnershipTransferStarted","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"SupraSValueVerifierUpdated","inputs":[{"type":"address","name":"_updatedVerifierAddress","internalType":"address","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"acceptOwnership","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"},{"type":"bool","name":"","internalType":"bool"}],"name":"getSvalue","inputs":[{"type":"uint64","name":"_pairIndex","internalType":"uint64"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32[]","name":"","internalType":"bytes32[]"},{"type":"bool[]","name":"","internalType":"bool[]"}],"name":"getSvalues","inputs":[{"type":"uint64[]","name":"_pairIndexes","internalType":"uint64[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getTimestamp","inputs":[{"type":"uint256","name":"_tradingPair","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pendingOwner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"restrictedSetSupraStorage","inputs":[{"type":"uint64","name":"_index","internalType":"uint64"},{"type":"bytes32","name":"_bytes","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"restrictedSetTimestamp","inputs":[{"type":"uint256","name":"_tradingPair","internalType":"uint256"},{"type":"uint256","name":"timestamp","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"supraSValueFeedVerifier","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateSupraSValueFeedVerifier","inputs":[{"type":"address","name":"_supraSValueFeedVerifier","internalType":"address"}]}]
              

Contract Creation Code

0x608060405234801561001057600080fd5b5061001a3361001f565b61008b565b600180546001600160a01b03191690556100388161003b565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61094d8061009a6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80639b0bb736116100715780639b0bb736146101425780639fd0913c14610155578063b633620c14610168578063b9d0fa9c14610196578063e30c3978146101a9578063f2fde38b146101ba57600080fd5b80630c16e044146100ae57806353202b04146100c357806379ba5097146100ed5780638da5cb5b146100f557806398f93a961461011a575b600080fd5b6100c16100bc3660046106aa565b6101cd565b005b6100d66100d13660046106fe565b610224565b6040516100e49291906107c2565b60405180910390f35b6100c16103d5565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100e4565b61012d61012836600461083f565b61044f565b604080519283529015156020830152016100e4565b6100c1610150366004610861565b610494565b6100c161016336600461088b565b6104f1565b6101886101763660046108b4565b60009081526004602052604090205490565b6040519081526020016100e4565b600254610102906001600160a01b031681565b6001546001600160a01b0316610102565b6100c16101c836600461088b565b610574565b6002546001600160a01b0316331461021257600254604051630d95d29760e41b81523360048201526001600160a01b0390911660248201526044015b60405180910390fd5b60009182526004602052604090912055565b606080600083516001600160401b03811115610242576102426106cc565b60405190808252806020026020018201604052801561026b578160200160208202803683370190505b509050600084516001600160401b03811115610289576102896106cc565b6040519080825280602002602001820160405280156102b2578160200160208202803683370190505b50905060005b8551816001600160401b031610156103ca576003600087836001600160401b0316815181106102e9576102e96108cd565b60200260200101516001600160401b03166001600160401b031681526020019081526020016000205483826001600160401b03168151811061032d5761032d6108cd565b6020026020010181815250506000801b6003600088846001600160401b03168151811061035c5761035c6108cd565b60200260200101516001600160401b03166001600160401b0316815260200190815260200160002054036103b857600182826001600160401b0316815181106103a7576103a76108cd565b911515602092830291909101909101525b806103c2816108e3565b9150506102b8565b509094909350915050565b60015433906001600160a01b031681146104435760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610209565b61044c816105e5565b50565b6001600160401b03811660009081526003602052604081205481908190610474575060015b6001600160401b0390931660009081526003602052604090205493915050565b6002546001600160a01b031633146104d457600254604051630d95d29760e41b81523360048201526001600160a01b039091166024820152604401610209565b6001600160401b0391909116600090815260036020526040902055565b6104f96105fe565b6001600160a01b0381166105205760405163baa3de5f60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fda52bd66d138416c3a3ddc3bd0931b7fd43e8566ae54be77d52e767f336f29dd9060200160405180910390a150565b61057c6105fe565b600180546001600160a01b0383166001600160a01b031990911681179091556105ad6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600180546001600160a01b031916905561044c8161065a565b6000546001600160a01b031633146106585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610209565b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156106bd57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b80356001600160401b03811681146106f957600080fd5b919050565b6000602080838503121561071157600080fd5b82356001600160401b038082111561072857600080fd5b818501915085601f83011261073c57600080fd5b81358181111561074e5761074e6106cc565b8060051b604051601f19603f83011681018181108582111715610773576107736106cc565b60405291825284820192508381018501918883111561079157600080fd5b938501935b828510156107b6576107a7856106e2565b84529385019392850192610796565b98975050505050505050565b604080825283519082018190526000906020906060840190828701845b828110156107fb578151845292840192908401906001016107df565b5050508381038285015284518082528583019183019060005b81811015610832578351151583529284019291840191600101610814565b5090979650505050505050565b60006020828403121561085157600080fd5b61085a826106e2565b9392505050565b6000806040838503121561087457600080fd5b61087d836106e2565b946020939093013593505050565b60006020828403121561089d57600080fd5b81356001600160a01b038116811461085a57600080fd5b6000602082840312156108c657600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361090d57634e487b7160e01b600052601160045260246000fd5b600101939250505056fea2646970667358221220a6cb490957ba895c72fcff1d79c969f199f9470eac1ed97322ed1e5add8edbf764736f6c63430008130033

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80639b0bb736116100715780639b0bb736146101425780639fd0913c14610155578063b633620c14610168578063b9d0fa9c14610196578063e30c3978146101a9578063f2fde38b146101ba57600080fd5b80630c16e044146100ae57806353202b04146100c357806379ba5097146100ed5780638da5cb5b146100f557806398f93a961461011a575b600080fd5b6100c16100bc3660046106aa565b6101cd565b005b6100d66100d13660046106fe565b610224565b6040516100e49291906107c2565b60405180910390f35b6100c16103d5565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100e4565b61012d61012836600461083f565b61044f565b604080519283529015156020830152016100e4565b6100c1610150366004610861565b610494565b6100c161016336600461088b565b6104f1565b6101886101763660046108b4565b60009081526004602052604090205490565b6040519081526020016100e4565b600254610102906001600160a01b031681565b6001546001600160a01b0316610102565b6100c16101c836600461088b565b610574565b6002546001600160a01b0316331461021257600254604051630d95d29760e41b81523360048201526001600160a01b0390911660248201526044015b60405180910390fd5b60009182526004602052604090912055565b606080600083516001600160401b03811115610242576102426106cc565b60405190808252806020026020018201604052801561026b578160200160208202803683370190505b509050600084516001600160401b03811115610289576102896106cc565b6040519080825280602002602001820160405280156102b2578160200160208202803683370190505b50905060005b8551816001600160401b031610156103ca576003600087836001600160401b0316815181106102e9576102e96108cd565b60200260200101516001600160401b03166001600160401b031681526020019081526020016000205483826001600160401b03168151811061032d5761032d6108cd565b6020026020010181815250506000801b6003600088846001600160401b03168151811061035c5761035c6108cd565b60200260200101516001600160401b03166001600160401b0316815260200190815260200160002054036103b857600182826001600160401b0316815181106103a7576103a76108cd565b911515602092830291909101909101525b806103c2816108e3565b9150506102b8565b509094909350915050565b60015433906001600160a01b031681146104435760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610209565b61044c816105e5565b50565b6001600160401b03811660009081526003602052604081205481908190610474575060015b6001600160401b0390931660009081526003602052604090205493915050565b6002546001600160a01b031633146104d457600254604051630d95d29760e41b81523360048201526001600160a01b039091166024820152604401610209565b6001600160401b0391909116600090815260036020526040902055565b6104f96105fe565b6001600160a01b0381166105205760405163baa3de5f60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fda52bd66d138416c3a3ddc3bd0931b7fd43e8566ae54be77d52e767f336f29dd9060200160405180910390a150565b61057c6105fe565b600180546001600160a01b0383166001600160a01b031990911681179091556105ad6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600180546001600160a01b031916905561044c8161065a565b6000546001600160a01b031633146106585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610209565b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156106bd57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b80356001600160401b03811681146106f957600080fd5b919050565b6000602080838503121561071157600080fd5b82356001600160401b038082111561072857600080fd5b818501915085601f83011261073c57600080fd5b81358181111561074e5761074e6106cc565b8060051b604051601f19603f83011681018181108582111715610773576107736106cc565b60405291825284820192508381018501918883111561079157600080fd5b938501935b828510156107b6576107a7856106e2565b84529385019392850192610796565b98975050505050505050565b604080825283519082018190526000906020906060840190828701845b828110156107fb578151845292840192908401906001016107df565b5050508381038285015284518082528583019183019060005b81811015610832578351151583529284019291840191600101610814565b5090979650505050505050565b60006020828403121561085157600080fd5b61085a826106e2565b9392505050565b6000806040838503121561087457600080fd5b61087d836106e2565b946020939093013593505050565b60006020828403121561089d57600080fd5b81356001600160a01b038116811461085a57600080fd5b6000602082840312156108c657600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361090d57634e487b7160e01b600052601160045260246000fd5b600101939250505056fea2646970667358221220a6cb490957ba895c72fcff1d79c969f199f9470eac1ed97322ed1e5add8edbf764736f6c63430008130033