ETH Price: $3,511.97 (+0.36%)
Gas: 5 Gwei

Contract

0x59d03727D8f3Fc695CA74f2DFdF0fd698424e0A2
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Network Fee ...184197392023-10-24 11:11:59273 days ago1698145919IN
0x59d03727...98424e0A2
0 ETH0.0007446724.45558329
Set Network Fee151360792022-07-13 19:15:31740 days ago1657739731IN
0x59d03727...98424e0A2
0 ETH0.0013447444.54137852
Set Network Fee150949202022-07-07 10:22:32747 days ago1657189352IN
0x59d03727...98424e0A2
0 ETH0.0004602315.24425865
Set Network Fee150519982022-06-30 19:10:44753 days ago1656616244IN
0x59d03727...98424e0A2
0 ETH0.0013320544.12097494
Set Network Fee150516142022-06-30 17:44:56753 days ago1656611096IN
0x59d03727...98424e0A2
0 ETH0.0020020566.31313922
Accept Ownership146879212022-04-30 21:10:29814 days ago1651353029IN
0x59d03727...98424e0A2
0 ETH0.0010623637.34155421
Transfer Ownersh...146878442022-04-30 20:53:42814 days ago1651352022IN
0x59d03727...98424e0A2
0 ETH0.0015897234.40216534
Set Network Fee134599712021-10-21 8:38:091006 days ago1634805489IN
0x59d03727...98424e0A2
0 ETH0.0020529868
Set Network Fee125632022021-06-03 18:44:511145 days ago1622745891IN
0x59d03727...98424e0A2
0 ETH0.0014491648
Set Network Fee121745312021-04-04 17:36:061205 days ago1617557766IN
0x59d03727...98424e0A2
0 ETH0.00349358115
Accept Ownership121745202021-04-04 17:33:421205 days ago1617557622IN
0x59d03727...98424e0A2
0 ETH0.00234865107
Transfer Ownersh...121745102021-04-04 17:32:121205 days ago1617557532IN
0x59d03727...98424e0A2
0 ETH0.00474117107
0x60806040121744362021-04-04 17:16:241205 days ago1617556584IN
 Create: NetworkSettings
0 ETH0.04307222108.5

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NetworkSettings

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2021-04-04
*/

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: solidity/contracts/utility/interfaces/IOwned.sol


pragma solidity 0.6.12;

/*
    Owned contract interface
*/
interface IOwned {
    // this function isn't since the compiler emits automatically generated getter functions as external
    function owner() external view returns (address);

    function transferOwnership(address _newOwner) external;

    function acceptOwnership() external;
}

// File: solidity/contracts/utility/interfaces/ITokenHolder.sol


pragma solidity 0.6.12;



/*
    Token Holder interface
*/
interface ITokenHolder is IOwned {
    receive() external payable;

    function withdrawTokens(
        IERC20 token,
        address payable to,
        uint256 amount
    ) external;

    function withdrawTokensMultiple(
        IERC20[] calldata tokens,
        address payable to,
        uint256[] calldata amounts
    ) external;
}

// File: solidity/contracts/INetworkSettings.sol


pragma solidity 0.6.12;


interface INetworkSettings {
    function networkFeeParams() external view returns (ITokenHolder, uint32);

    function networkFeeWallet() external view returns (ITokenHolder);

    function networkFee() external view returns (uint32);
}

// File: solidity/contracts/utility/Owned.sol


pragma solidity 0.6.12;


/**
 * @dev This contract provides support and utilities for contract ownership.
 */
contract Owned is IOwned {
    address public override owner;
    address public newOwner;

    /**
     * @dev triggered when the owner is updated
     *
     * @param _prevOwner previous owner
     * @param _newOwner  new owner
     */
    event OwnerUpdate(address indexed _prevOwner, address indexed _newOwner);

    /**
     * @dev initializes a new Owned instance
     */
    constructor() public {
        owner = msg.sender;
    }

    // allows execution by the owner only
    modifier ownerOnly {
        _ownerOnly();
        _;
    }

    // error message binary size optimization
    function _ownerOnly() internal view {
        require(msg.sender == owner, "ERR_ACCESS_DENIED");
    }

    /**
     * @dev allows transferring the contract ownership
     * the new owner still needs to accept the transfer
     * can only be called by the contract owner
     *
     * @param _newOwner    new contract owner
     */
    function transferOwnership(address _newOwner) public override ownerOnly {
        require(_newOwner != owner, "ERR_SAME_OWNER");
        newOwner = _newOwner;
    }

    /**
     * @dev used by a new owner to accept an ownership transfer
     */
    function acceptOwnership() public override {
        require(msg.sender == newOwner, "ERR_ACCESS_DENIED");
        emit OwnerUpdate(owner, newOwner);
        owner = newOwner;
        newOwner = address(0);
    }
}

// File: solidity/contracts/utility/Utils.sol


pragma solidity 0.6.12;


/**
 * @dev Utilities & Common Modifiers
 */
contract Utils {
    uint32 internal constant PPM_RESOLUTION = 1000000;
    IERC20 internal constant NATIVE_TOKEN_ADDRESS = IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);

    // verifies that a value is greater than zero
    modifier greaterThanZero(uint256 _value) {
        _greaterThanZero(_value);
        _;
    }

    // error message binary size optimization
    function _greaterThanZero(uint256 _value) internal pure {
        require(_value > 0, "ERR_ZERO_VALUE");
    }

    // validates an address - currently only checks that it isn't null
    modifier validAddress(address _address) {
        _validAddress(_address);
        _;
    }

    // error message binary size optimization
    function _validAddress(address _address) internal pure {
        require(_address != address(0), "ERR_INVALID_ADDRESS");
    }

    // ensures that the portion is valid
    modifier validPortion(uint32 _portion) {
        _validPortion(_portion);
        _;
    }

    // error message binary size optimization
    function _validPortion(uint32 _portion) internal pure {
        require(_portion > 0 && _portion <= PPM_RESOLUTION, "ERR_INVALID_PORTION");
    }

    // validates an external address - currently only checks that it isn't null or this
    modifier validExternalAddress(address _address) {
        _validExternalAddress(_address);
        _;
    }

    // error message binary size optimization
    function _validExternalAddress(address _address) internal view {
        require(_address != address(0) && _address != address(this), "ERR_INVALID_EXTERNAL_ADDRESS");
    }

    // ensures that the fee is valid
    modifier validFee(uint32 fee) {
        _validFee(fee);
        _;
    }

    // error message binary size optimization
    function _validFee(uint32 fee) internal pure {
        require(fee <= PPM_RESOLUTION, "ERR_INVALID_FEE");
    }
}

// File: solidity/contracts/NetworkSettings.sol


pragma solidity 0.6.12;




/**
 * @dev This contract maintains the network settings.
 *
 */
contract NetworkSettings is INetworkSettings, Owned, Utils {
    ITokenHolder private _networkFeeWallet;
    uint32 private _networkFee;

    /**
     * @dev triggered when the network fee wallet is updated
     *
     * @param prevNetworkFeeWallet  previous network fee wallet
     * @param newNetworkFeeWallet   new network fee wallet
     */
    event NetworkFeeWalletUpdated(ITokenHolder prevNetworkFeeWallet, ITokenHolder newNetworkFeeWallet);

    /**
     * @dev triggered when the network fee is updated
     *
     * @param prevNetworkFee    previous network fee
     * @param newNetworkFee     new network fee
     */
    event NetworkFeeUpdated(uint32 prevNetworkFee, uint32 newNetworkFee);

    /**
     * @dev initializes a new NetworkSettings contract
     *
     * @param initialNetworkFeeWallet initial network fee wallet
     * @param initialNetworkFee initial network fee in ppm units
     */
    constructor(ITokenHolder initialNetworkFeeWallet, uint32 initialNetworkFee)
        public
        validAddress(address(initialNetworkFeeWallet))
        validFee(initialNetworkFee)
    {
        _networkFeeWallet = initialNetworkFeeWallet;
        _networkFee = initialNetworkFee;
    }

    /**
     * @dev returns the network fee parameters
     *
     * @return network fee wallet
     * @return network fee in ppm units
     */
    function networkFeeParams() external view override returns (ITokenHolder, uint32) {
        return (_networkFeeWallet, _networkFee);
    }

    /**
     * @dev returns the wallet that receives the global network fees
     *
     * @return network fee wallet
     */
    function networkFeeWallet() external view override returns (ITokenHolder) {
        return _networkFeeWallet;
    }

    /**
     * @dev returns the global network fee
     * the network fee is a portion of the total fees from each pool
     *
     * @return network fee in ppm units
     */
    function networkFee() external view override returns (uint32) {
        return _networkFee;
    }

    /**
     * @dev sets the network fee wallet
     * can be executed only by the owner
     *
     * @param newNetworkFeeWallet new network fee wallet
     */
    function setNetworkFeeWallet(ITokenHolder newNetworkFeeWallet)
        external
        ownerOnly
        validAddress(address(newNetworkFeeWallet))
    {
        emit NetworkFeeWalletUpdated(_networkFeeWallet, newNetworkFeeWallet);
        _networkFeeWallet = newNetworkFeeWallet;
    }

    /**
     * @dev sets the network fee
     * can be executed only by the owner
     *
     * @param newNetworkFee new network fee in ppm units
     */
    function setNetworkFee(uint32 newNetworkFee) external ownerOnly validFee(newNetworkFee) {
        emit NetworkFeeUpdated(_networkFee, newNetworkFee);
        _networkFee = newNetworkFee;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract ITokenHolder","name":"initialNetworkFeeWallet","type":"address"},{"internalType":"uint32","name":"initialNetworkFee","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"prevNetworkFee","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"newNetworkFee","type":"uint32"}],"name":"NetworkFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract ITokenHolder","name":"prevNetworkFeeWallet","type":"address"},{"indexed":false,"internalType":"contract ITokenHolder","name":"newNetworkFeeWallet","type":"address"}],"name":"NetworkFeeWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_prevOwner","type":"address"},{"indexed":true,"internalType":"address","name":"_newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"networkFee","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"networkFeeParams","outputs":[{"internalType":"contract ITokenHolder","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"networkFeeWallet","outputs":[{"internalType":"contract ITokenHolder","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"newNetworkFee","type":"uint32"}],"name":"setNetworkFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ITokenHolder","name":"newNetworkFeeWallet","type":"address"}],"name":"setNetworkFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b506040516106be3803806106be8339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b0319163317905581610058816100a6565b8161006281610104565b50506002805463ffffffff909216600160a01b0263ffffffff60a01b196001600160a01b039094166001600160a01b03199093169290921792909216179055610154565b6001600160a01b038116610101576040805162461bcd60e51b815260206004820152601360248201527f4552525f494e56414c49445f4144445245535300000000000000000000000000604482015290519081900360640190fd5b50565b620f424063ffffffff82161115610101576040805162461bcd60e51b815260206004820152600f60248201526e4552525f494e56414c49445f46454560881b604482015290519081900360640190fd5b61055b806101636000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b1461010f5780639db9e18b14610117578063d4ee1d9014610138578063e33b5f5f14610140578063f2fde38b1461017057610093565b8063155bb726146100985780633e456504146100bd578063551e9a6f146100e157806379ba509714610107575b600080fd5b6100bb600480360360208110156100ae57600080fd5b503563ffffffff16610196565b005b6100c561021b565b604080516001600160a01b039092168252519081900360200190f35b6100bb600480360360208110156100f757600080fd5b50356001600160a01b031661022a565b6100bb6102a7565b6100c561035e565b61011f61036d565b6040805163ffffffff9092168252519081900360200190f35b6100c5610380565b61014861038f565b604080516001600160a01b03909316835263ffffffff90911660208301528051918290030190f35b6100bb6004803603602081101561018657600080fd5b50356001600160a01b03166103ae565b61019e61042c565b806101a881610481565b6002546040805163ffffffff600160a01b90930483168152918416602083015280517f3f421a4eb9000b7b5fd6b0947132c94b9d04fa31e65a2f4843261c186bb3bec69281900390910190a1506002805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b6002546001600160a01b031690565b61023261042c565b8061023c816104d4565b600254604080516001600160a01b039283168152918416602083015280517f70c95ab75c8116dcc974957f01a8ff5e6c23a3413e7c94c5a31de9779b2cdbb89281900390910190a150600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146102fa576040805162461bcd60e51b815260206004820152601160248201527011549497d050d0d154d4d7d11153925151607a1b604482015290519081900360640190fd5b600154600080546040516001600160a01b0393841693909116917f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a91a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b031681565b600254600160a01b900463ffffffff1690565b6001546001600160a01b031681565b6002546001600160a01b03811691600160a01b90910463ffffffff1690565b6103b661042c565b6000546001600160a01b038281169116141561040a576040805162461bcd60e51b815260206004820152600e60248201526d22a9292fa9a0a6a2afa7aba722a960911b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461047f576040805162461bcd60e51b815260206004820152601160248201527011549497d050d0d154d4d7d11153925151607a1b604482015290519081900360640190fd5b565b620f424063ffffffff821611156104d1576040805162461bcd60e51b815260206004820152600f60248201526e4552525f494e56414c49445f46454560881b604482015290519081900360640190fd5b50565b6001600160a01b0381166104d1576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f4144445245535360681b604482015290519081900360640190fdfea2646970667358221220e2a2ddad0ab648b4bae4c32c37f57d2978fae0fe417a0b4235db606acc598b1664736f6c634300060c0033000000000000000000000000ebcc959479634eec5a4d7162e36f8b8cc763f4910000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b1461010f5780639db9e18b14610117578063d4ee1d9014610138578063e33b5f5f14610140578063f2fde38b1461017057610093565b8063155bb726146100985780633e456504146100bd578063551e9a6f146100e157806379ba509714610107575b600080fd5b6100bb600480360360208110156100ae57600080fd5b503563ffffffff16610196565b005b6100c561021b565b604080516001600160a01b039092168252519081900360200190f35b6100bb600480360360208110156100f757600080fd5b50356001600160a01b031661022a565b6100bb6102a7565b6100c561035e565b61011f61036d565b6040805163ffffffff9092168252519081900360200190f35b6100c5610380565b61014861038f565b604080516001600160a01b03909316835263ffffffff90911660208301528051918290030190f35b6100bb6004803603602081101561018657600080fd5b50356001600160a01b03166103ae565b61019e61042c565b806101a881610481565b6002546040805163ffffffff600160a01b90930483168152918416602083015280517f3f421a4eb9000b7b5fd6b0947132c94b9d04fa31e65a2f4843261c186bb3bec69281900390910190a1506002805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b6002546001600160a01b031690565b61023261042c565b8061023c816104d4565b600254604080516001600160a01b039283168152918416602083015280517f70c95ab75c8116dcc974957f01a8ff5e6c23a3413e7c94c5a31de9779b2cdbb89281900390910190a150600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146102fa576040805162461bcd60e51b815260206004820152601160248201527011549497d050d0d154d4d7d11153925151607a1b604482015290519081900360640190fd5b600154600080546040516001600160a01b0393841693909116917f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a91a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b031681565b600254600160a01b900463ffffffff1690565b6001546001600160a01b031681565b6002546001600160a01b03811691600160a01b90910463ffffffff1690565b6103b661042c565b6000546001600160a01b038281169116141561040a576040805162461bcd60e51b815260206004820152600e60248201526d22a9292fa9a0a6a2afa7aba722a960911b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461047f576040805162461bcd60e51b815260206004820152601160248201527011549497d050d0d154d4d7d11153925151607a1b604482015290519081900360640190fd5b565b620f424063ffffffff821611156104d1576040805162461bcd60e51b815260206004820152600f60248201526e4552525f494e56414c49445f46454560881b604482015290519081900360640190fd5b50565b6001600160a01b0381166104d1576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f4144445245535360681b604482015290519081900360640190fdfea2646970667358221220e2a2ddad0ab648b4bae4c32c37f57d2978fae0fe417a0b4235db606acc598b1664736f6c634300060c0033

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

000000000000000000000000ebcc959479634eec5a4d7162e36f8b8cc763f4910000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : initialNetworkFeeWallet (address): 0xeBcC959479634EEC5A4d7162e36f8B8cc763f491
Arg [1] : initialNetworkFee (uint32): 0

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000ebcc959479634eec5a4d7162e36f8b8cc763f491
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000


Block Transaction Difficulty 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
Loading...
Loading
[ 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.