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