FRAX Price: $0.81 (-0.15%)

Contract

0xD0Bc541E7c558cA50c33C4166a63ED2b899d2C70

Overview

FRAX Balance | FXTL Balance

0 FRAX | 212 FXTL

FRAX Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Age:180D
Reset Filter

Transaction Hash
Block
From
To

There are no matching entries

1 Token Transfer found.

View more zero value Internal Transactions in Advanced View mode

Advanced mode:

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PushOracleOwner

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 200 runs

Other Settings:
shanghai EvmVersion
pragma solidity ^0.8.13;

import {Owned} from "src/utils/Owned.sol";

interface IPushOracle {
    function setPrice(
        address base,
        address quote,
        uint256 bqPrice,
        uint256 qbPrice
    ) external;
}

contract PushOracleOwner is Owned {
    IPushOracle public oracle;

    address public keeper;

    event KeeperUpdated(address previous, address current);

    error NotKeeperNorOwner();

    constructor(address _oracle, address _owner) Owned(_owner) {
        oracle = IPushOracle(_oracle);
    }

    function setPrice(
        address base,
        address quote,
        uint256 bqPrice,
        uint256 qbPrice
    ) external onlyKeeperOrOwner {
        oracle.setPrice(base, quote, bqPrice, qbPrice);
    }

    function setKeeper(address _keeper) external onlyOwner {
        emit KeeperUpdated(keeper, _keeper);
        keeper = _keeper;
    }

    function acceptOracleOwnership() external onlyOwner {
        Owned(address(oracle)).acceptOwnership();
    }

    modifier onlyKeeperOrOwner() {
        if (msg.sender != owner && msg.sender != keeper)
            revert NotKeeperNorOwner();
        _;
    }
}

// SPDX-License-Identifier: GPL-3.0
// Docgen-SOLC: 0.8.25

pragma solidity ^0.8.25;

// https://docs.synthetix.io/contracts/source/contracts/owned
contract Owned {
    address public owner;
    address public nominatedOwner;

    constructor(address _owner) {
        require(_owner != address(0), "Owner address cannot be 0");
        owner = _owner;
        emit OwnerChanged(address(0), _owner);
    }

    function nominateNewOwner(address _owner) external virtual onlyOwner {
        nominatedOwner = _owner;
        emit OwnerNominated(_owner);
    }

    function acceptOwnership() external virtual {
        require(msg.sender == nominatedOwner, "You must be nominated before you can accept ownership");
        emit OwnerChanged(owner, nominatedOwner);
        owner = nominatedOwner;
        nominatedOwner = address(0);
    }

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

    function _onlyOwner() private view {
        require(msg.sender == owner, "Only the contract owner may perform this action");
    }

    event OwnerNominated(address newOwner);
    event OwnerChanged(address oldOwner, address newOwner);
}

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/",
    "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
    "solmate/=lib/solmate/src/",
    "solady/=lib/solady/src/",
    "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "ERC-7540-Reference/=lib/ERC-7540-Reference/src/",
    "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
    "safe-smart-account/=lib/safe-smart-account/",
    "v3-core/=lib/v3-core/",
    "v3-periphery/=lib/v3-periphery/contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "shanghai",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_oracle","type":"address"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"NotKeeperNorOwner","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previous","type":"address"},{"indexed":false,"internalType":"address","name":"current","type":"address"}],"name":"KeeperUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"inputs":[],"name":"acceptOracleOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"keeper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"nominateNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nominatedOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"contract IPushOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_keeper","type":"address"}],"name":"setKeeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"},{"internalType":"uint256","name":"bqPrice","type":"uint256"},{"internalType":"uint256","name":"qbPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561000f575f80fd5b506040516106a73803806106a783398101604081905261002e91610121565b806001600160a01b0381166100895760405162461bcd60e51b815260206004820152601960248201527f4f776e657220616464726573732063616e6e6f74206265203000000000000000604482015260640160405180910390fd5b5f80546001600160a01b0319166001600160a01b03831690811782556040805192835260208301919091527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a15050600280546001600160a01b0319166001600160a01b0392909216919091179055610152565b80516001600160a01b038116811461011c575f80fd5b919050565b5f8060408385031215610132575f80fd5b61013b83610106565b915061014960208401610106565b90509250929050565b6105488061015f5f395ff3fe608060405234801561000f575f80fd5b5060043610610090575f3560e01c80637dc0d1d0116100635780637dc0d1d0146100f35780638da5cb5b14610106578063a405d31214610118578063aced16611461012b578063fd5835d01461013e575f80fd5b80631627540c1461009457806353a47bb7146100a9578063748747e6146100d857806379ba5097146100eb575b5f80fd5b6100a76100a23660046104b3565b610146565b005b6001546100bc906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100a76100e63660046104b3565b6101a2565b6100a7610213565b6002546100bc906001600160a01b031681565b5f546100bc906001600160a01b031681565b6100a76101263660046104d3565b610300565b6003546100bc906001600160a01b031681565b6100a76103b9565b61014e610425565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce229060200160405180910390a150565b6101aa610425565b600354604080516001600160a01b03928316815291831660208301527f53d3703fe259def57584466f32d1b94c30278008c683c21b04501c4966f13a69910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146102905760405162461bcd60e51b815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527402063616e20616363657074206f776e65727368697605c1b60648201526084015b60405180910390fd5b5f54600154604080516001600160a01b0393841681529290911660208301527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a1600180545f80546001600160a01b03199081166001600160a01b03841617909155169055565b5f546001600160a01b0316331480159061032557506003546001600160a01b03163314155b156103435760405163c6764d6d60e01b815260040160405180910390fd5b600254604051635202e98960e11b81526001600160a01b038681166004830152858116602483015260448201859052606482018490529091169063a405d312906084015f604051808303815f87803b15801561039d575f80fd5b505af11580156103af573d5f803e3d5ffd5b5050505050505050565b6103c1610425565b60025f9054906101000a90046001600160a01b03166001600160a01b03166379ba50976040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561040d575f80fd5b505af115801561041f573d5f803e3d5ffd5b50505050565b5f546001600160a01b031633146104965760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660448201526e37b936903a3434b99030b1ba34b7b760891b6064820152608401610287565b565b80356001600160a01b03811681146104ae575f80fd5b919050565b5f602082840312156104c3575f80fd5b6104cc82610498565b9392505050565b5f805f80608085870312156104e6575f80fd5b6104ef85610498565b93506104fd60208601610498565b9396939550505050604082013591606001359056fea26469706673582212207dfdc690ae7fdc90c851fb8b4c098aa88f99423eb97044d0d3ba19fa8e2f596564736f6c63430008190033000000000000000000000000e8f047dc264d62288bf16a0ad7ff158ddfd149130000000000000000000000002c3b135cd7dc6c673b358bef214843dab3464278

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610090575f3560e01c80637dc0d1d0116100635780637dc0d1d0146100f35780638da5cb5b14610106578063a405d31214610118578063aced16611461012b578063fd5835d01461013e575f80fd5b80631627540c1461009457806353a47bb7146100a9578063748747e6146100d857806379ba5097146100eb575b5f80fd5b6100a76100a23660046104b3565b610146565b005b6001546100bc906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100a76100e63660046104b3565b6101a2565b6100a7610213565b6002546100bc906001600160a01b031681565b5f546100bc906001600160a01b031681565b6100a76101263660046104d3565b610300565b6003546100bc906001600160a01b031681565b6100a76103b9565b61014e610425565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce229060200160405180910390a150565b6101aa610425565b600354604080516001600160a01b03928316815291831660208301527f53d3703fe259def57584466f32d1b94c30278008c683c21b04501c4966f13a69910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146102905760405162461bcd60e51b815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527402063616e20616363657074206f776e65727368697605c1b60648201526084015b60405180910390fd5b5f54600154604080516001600160a01b0393841681529290911660208301527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a1600180545f80546001600160a01b03199081166001600160a01b03841617909155169055565b5f546001600160a01b0316331480159061032557506003546001600160a01b03163314155b156103435760405163c6764d6d60e01b815260040160405180910390fd5b600254604051635202e98960e11b81526001600160a01b038681166004830152858116602483015260448201859052606482018490529091169063a405d312906084015f604051808303815f87803b15801561039d575f80fd5b505af11580156103af573d5f803e3d5ffd5b5050505050505050565b6103c1610425565b60025f9054906101000a90046001600160a01b03166001600160a01b03166379ba50976040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561040d575f80fd5b505af115801561041f573d5f803e3d5ffd5b50505050565b5f546001600160a01b031633146104965760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660448201526e37b936903a3434b99030b1ba34b7b760891b6064820152608401610287565b565b80356001600160a01b03811681146104ae575f80fd5b919050565b5f602082840312156104c3575f80fd5b6104cc82610498565b9392505050565b5f805f80608085870312156104e6575f80fd5b6104ef85610498565b93506104fd60208601610498565b9396939550505050604082013591606001359056fea26469706673582212207dfdc690ae7fdc90c851fb8b4c098aa88f99423eb97044d0d3ba19fa8e2f596564736f6c63430008190033

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

000000000000000000000000e8f047dc264d62288bf16a0ad7ff158ddfd149130000000000000000000000002c3b135cd7dc6c673b358bef214843dab3464278

-----Decoded View---------------
Arg [0] : _oracle (address): 0xe8f047DC264D62288BF16a0aD7Ff158ddfd14913
Arg [1] : _owner (address): 0x2C3B135cd7dc6C673b358BEF214843DAb3464278

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000e8f047dc264d62288bf16a0ad7ff158ddfd14913
Arg [1] : 0000000000000000000000002c3b135cd7dc6c673b358bef214843dab3464278


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

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.