Sepolia Testnet

Contract

0xBe3Ac620eB4f5d177e03313FB7e26417F7B52A7b

Overview

ETH Balance

0 ETH

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Transfer Ownersh...60101342024-05-31 2:54:12258 days ago1717124052IN
0xBe3Ac620...7F7B52A7b
0 ETH0.00013594.76154939
Update Protocol ...60101322024-05-31 2:53:48258 days ago1717124028IN
0xBe3Ac620...7F7B52A7b
0 ETH0.000141964.76169176
Update Glue Fee60101312024-05-31 2:53:36258 days ago1717124016IN
0xBe3Ac620...7F7B52A7b
0 ETH0.000125064.19357606
Set Glue Fee Add...60101302024-05-31 2:53:24258 days ago1717124004IN
0xBe3Ac620...7F7B52A7b
0 ETH0.000128294.52570277
Set Team Address60101282024-05-31 2:53:00258 days ago1717123980IN
0xBe3Ac620...7F7B52A7b
0 ETH0.000126674.46995722
Set Team Address60101282024-05-31 2:53:00258 days ago1717123980IN
0xBe3Ac620...7F7B52A7b
0 ETH0.000100324.69752354
Transfer Ownersh...60101282024-05-31 2:53:00258 days ago1717123980IN
0xBe3Ac620...7F7B52A7b
0 ETH0.000100324.69752354

Advanced mode:
Parent Transaction Hash Block
From
To
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x4d45ef4d...04D9421c9
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
GluedSettings

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 2 : GluedSettings.sol
// SPDX-License-Identifier: BUSL-1.1
/**                                                 

  ██████ ▓█████▄▄▄█████▓▄▄▄█████▓ ██▓ ███▄    █   ▄████   ██████ 
▒██    ▒ ▓█   ▀▓  ██▒ ▓▒▓  ██▒ ▓▒▓██▒ ██ ▀█   █  ██▒ ▀█▒▒██    ▒ 
░ ▓██▄   ▒███  ▒ ▓██░ ▒░▒ ▓██░ ▒░▒██▒▓██  ▀█ ██▒▒██░▄▄▄░░ ▓██▄   
  ▒   ██▒▒▓█  ▄░ ▓██▓ ░ ░ ▓██▓ ░ ░██░▓██▒  ▐▌██▒░▓█  ██▓  ▒   ██▒
▒██████▒▒░▒████▒ ▒██▒ ░   ▒██▒ ░ ░██░▒██░   ▓██░░▒▓███▀▒▒██████▒▒
▒ ▒▓▒ ▒ ░░░ ▒░ ░ ▒ ░░     ▒ ░░   ░▓  ░ ▒░   ▒ ▒  ░▒   ▒ ▒ ▒▓▒ ▒ ░
░ ░▒  ░ ░ ░ ░  ░   ░        ░     ▒ ░░ ░░   ░ ▒░  ░   ░ ░ ░▒  ░ ░
░  ░  ░     ░    ░        ░       ▒ ░   ░   ░ ░ ░ ░   ░ ░  ░  ░  
      ░     ░  ░                  ░           ░       ░       ░  
                                                                 
 @title GluedSettings
 @author BasedToschi.eth
 @notice A contract for managing the ownership settings and fees in the glue ecosystem.

*/

pragma solidity ^0.8.25;

import {IGluedSettings} from './interfaces/IGluedSettings.sol';

/**
 * @title GluedSettings
 * @notice A contract for managing the ownership settings of the glue ecosystem.
 */
contract GluedSettings is IGluedSettings {
    address public owner;
    uint256 public protocolFee;
    uint256 public glueFee;
    address public glueFeeAddress;
    address public teamAddress;

    uint256 constant MaxProtocolFee = 2e16; // 2% (2 * 1e16)
    uint256 constant MinProtocolFee = 5e14; // 0.05% (5 * 1e14)
    uint256 constant MinGlueFee = 5e17; // 50% (5 * 1e17)

    /**
     * @notice Constructor function to initialize the contract settings.
     */
    constructor() {
        owner = msg.sender;
        protocolFee = 1e16; // 1% Initialization (1 * 1e16)
        glueFee = 5e17; // 50% Initialization (5 * 1e17)
        glueFeeAddress = msg.sender;
        teamAddress = msg.sender;
    }

    /**
     * @notice Modifier to restrict access to the contract owner only.
     */
    modifier onlyOwner() {
        require(msg.sender == owner, "Ownable: caller is not the owner");
        _;
    }

    /**
     * @notice Transfers ownership of the contract to a new owner.
     * @param newOwner The address of the new contract owner.
     */
    function transferOwnership(address newOwner) external onlyOwner {
        require(newOwner != address(0), "Zero address not allowed");
        address previousOwner = owner;
        owner = newOwner;

        emit OwnershipTransferred(previousOwner, newOwner);
    }

    /**
     * @notice Updates the protocol fee percentage.
     * @param newProtocolFee The new protocol fee percentage.
     */
    function updateProtocolFee(uint256 newProtocolFee) external onlyOwner {
        require(newProtocolFee <= MaxProtocolFee, "Fee exceeds maximum limit");
        require(newProtocolFee >= MinProtocolFee, "Fee is less than minimum fee");
        protocolFee = newProtocolFee;

        emit ProtocolFeeUpdated(newProtocolFee);
    }

    /**
     * @notice Updates the main glue fee percentage.
     * @param newGlueFee The new main glue fee percentage.
     */
    function updateGlueFee(uint256 newGlueFee) external onlyOwner {
        require(newGlueFee <= 1e18, "Fee exceeds maximum limit");
        require(newGlueFee >= MinGlueFee, "Fee exceeds minimum limit");
        glueFee = newGlueFee;

        emit GlueFeeUpdated(newGlueFee);
    }

    /**
     * @notice Sets the main glue fee address (only callable by the current main glue fee address).
     * @param newGlueFeeAddress The new main glue fee address.
     */
    function setGlueFeeAddress(address newGlueFeeAddress) external {
        if (msg.sender != glueFeeAddress) revert("Only the glue fee address can set a new glue fee address");
        if (newGlueFeeAddress == address(0)) revert("Invalid glue fee address");
        address previousGlueFeeAddress = glueFeeAddress;
        glueFeeAddress = newGlueFeeAddress;

        emit GlueFeeAddressUpdated(previousGlueFeeAddress, newGlueFeeAddress);
    }

    /**
     * @notice Sets the team address (only callable by the current team address).
     * @param newTeamAddress The new team address.
     */
    function setTeamAddress(address newTeamAddress) external {
        if (msg.sender != teamAddress) revert("Only the team address can set a new team address");
        if (newTeamAddress == address(0)) revert("Invalid team address");
        address previousTeamAddress = teamAddress;
        teamAddress = newTeamAddress;

        emit TeamAddressUpdated(previousTeamAddress, newTeamAddress);
    }

    /**
     * @notice Gets the current team address.
     * @return The current team address.
     */
    function getTeamAddress() public view returns (address) {

        return teamAddress;
    }

    /**
     * @notice Gets the current glue fee address.
     * @return The current glue fee address.
     */
    function getGlueFeeAddress() public view returns (address) {

        return glueFeeAddress;
    }

    /**
     * @notice Gets the current protocol fee percentage.
     * @return The current protocol fee percentage.
     */
    function getProtocolFee() public view returns (uint256) {

        return protocolFee;
    }

    /**
     * @notice Gets the current glue fee percentage.
     * @return The current glue fee percentage.
     */
    function getGlueFee() public view returns (uint256) {

        return glueFee;
    }

    /**
     * @notice Gets the protocol fee information.
     * @return The protocol fee, glue fee, glue fee address, and team address.
     */
    function getProtocolFeeInfo() external view returns (uint256, uint256, address, address) {

        return (protocolFee, glueFee, glueFeeAddress, teamAddress);
    }
    /**
     * @notice Renounces ownership of the contract, setting the owner to the zero address.
     * @dev Once ownership is renounced, it cannot be transferred again.
     */
    function renounceOwnership() external onlyOwner {
        address previousOwner = owner;
        owner = address(0);

        emit OwnershipTransferred(previousOwner, address(0));
    }
}

File 2 of 2 : IGluedSettings.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.25;

interface IGluedSettings {
    function updateProtocolFee(uint256 newProtocolFee) external;
    function getProtocolFee() external view returns (uint256);
    function updateGlueFee(uint256 newGlueFee) external;
    function getGlueFee() external view returns (uint256);
    function setGlueFeeAddress(address newGlueFeeAddress) external;
    function setTeamAddress(address newTeamAddress) external;
    function getGlueFeeAddress() external view returns (address);
    function getTeamAddress() external view returns (address);
    function owner() external view returns (address);
    function transferOwnership(address newOwner) external;
    function renounceOwnership() external;
    function getProtocolFeeInfo() external view returns (uint256, uint256, address, address);

    event ProtocolFeeUpdated(uint256 newProtocolFee);
    event GlueFeeUpdated(uint256 newGlueFee);
    event GlueFeeAddressUpdated(address previousGlueFeeAddress, address newGlueFeeAddress);
    event TeamAddressUpdated(address previousTeamAddress, address newTeamAddress);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousGlueFeeAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newGlueFeeAddress","type":"address"}],"name":"GlueFeeAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newGlueFee","type":"uint256"}],"name":"GlueFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newProtocolFee","type":"uint256"}],"name":"ProtocolFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousTeamAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newTeamAddress","type":"address"}],"name":"TeamAddressUpdated","type":"event"},{"inputs":[],"name":"getGlueFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlueFeeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTeamAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"glueFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"glueFeeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newGlueFeeAddress","type":"address"}],"name":"setGlueFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTeamAddress","type":"address"}],"name":"setTeamAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"teamAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newGlueFee","type":"uint256"}],"name":"updateGlueFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolFee","type":"uint256"}],"name":"updateProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101005760003560e01c80638da5cb5b11610097578063c90b509911610066578063c90b50991461020e578063e495932c1461021f578063f2fde38b14610232578063fce1fe771461024557600080fd5b80638da5cb5b146101d7578063a5a41031146101ea578063afc3461c146101f2578063b0e21e8a1461020557600080fd5b80635e3b24c0116100d35780635e3b24c01461016a5780636690864e14610181578063695639b714610194578063715018a6146101cf57600080fd5b8063182d326e146101055780631c75f0851461012f5780634256dd78146101425780634a0df6a114610157575b600080fd5b6004546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b600454610112906001600160a01b031681565b610155610150366004610808565b61024d565b005b600354610112906001600160a01b031681565b61017360025481565b604051908152602001610126565b61015561018f366004610821565b610366565b6001546002546003546004546040805194855260208501939093526001600160a01b0391821692840192909252166060820152608001610126565b610155610488565b600054610112906001600160a01b031681565b600154610173565b610155610200366004610808565b6104fd565b61017360015481565b6003546001600160a01b0316610112565b61015561022d366004610821565b610608565b610155610240366004610821565b610738565b600254610173565b6000546001600160a01b031633146102805760405162461bcd60e51b815260040161027790610851565b60405180910390fd5b66470de4df8200008111156102d35760405162461bcd60e51b815260206004820152601960248201527811995948195e18d959591cc81b585e1a5b5d5b481b1a5b5a5d603a1b6044820152606401610277565b6601c6bf5263400081101561032a5760405162461bcd60e51b815260206004820152601c60248201527f466565206973206c657373207468616e206d696e696d756d20666565000000006044820152606401610277565b60018190556040518181527fd10d75876659a287a59a6ccfa2e3fff42f84d94b542837acd30bc184d562de40906020015b60405180910390a150565b6004546001600160a01b031633146103d95760405162461bcd60e51b815260206004820152603060248201527f4f6e6c7920746865207465616d20616464726573732063616e2073657420612060448201526f6e6577207465616d206164647265737360801b6064820152608401610277565b6001600160a01b0381166104265760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964207465616d206164647265737360601b6044820152606401610277565b600480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f1080123bfca356f02c07c7c4a86bbf7fec3ad4f8aa2698a4ca62c88ed6a4f6ac91015b60405180910390a15050565b6000546001600160a01b031633146104b25760405162461bcd60e51b815260040161027790610851565b600080546001600160a01b0319811682556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b031633146105275760405162461bcd60e51b815260040161027790610851565b670de0b6b3a764000081111561057b5760405162461bcd60e51b815260206004820152601960248201527811995948195e18d959591cc81b585e1a5b5d5b481b1a5b5a5d603a1b6044820152606401610277565b6706f05b59d3b200008110156105d35760405162461bcd60e51b815260206004820152601960248201527f4665652065786365656473206d696e696d756d206c696d6974000000000000006044820152606401610277565b60028190556040518181527f88b2e50ffb1bef92e532b88dd7c3e7f84fc25bb9a1c2a6ba982b2ed4233a6d979060200161035b565b6003546001600160a01b031633146106885760405162461bcd60e51b815260206004820152603860248201527f4f6e6c792074686520676c75652066656520616464726573732063616e20736560448201527f742061206e657720676c756520666565206164647265737300000000000000006064820152608401610277565b6001600160a01b0381166106de5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420676c756520666565206164647265737300000000000000006044820152606401610277565b600380546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f654968337a58d8b2f66d341d19303fafcecde240617e50af5f4f9a5bebbb1085910161047c565b6000546001600160a01b031633146107625760405162461bcd60e51b815260040161027790610851565b6001600160a01b0381166107b85760405162461bcd60e51b815260206004820152601860248201527f5a65726f2061646472657373206e6f7420616c6c6f77656400000000000000006044820152606401610277565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561081a57600080fd5b5035919050565b60006020828403121561083357600080fd5b81356001600160a01b038116811461084a57600080fd5b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408201526060019056fea2646970667358221220a3da1c41a8987b78a456024e5438ac623d1015f16020bbae9815062dcbd3c5e364736f6c63430008190033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.