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