0x4fd0aaa7506f3d9cb8274bdb946ec42a1b8751ef

deployer: unknown relevance score: 10 status: identified bytecode: 1222 bytes

DECOMPILED SOLIDITY (Heimdall)

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

/// @title            Decompiled Contract
/// @author           Jonathan Becker <jonathan@jbecker.dev>
/// @custom:version   heimdall-rs v0.9.2
///
/// @notice           This contract was decompiled using the heimdall-rs decompiler.
///                     It was generated directly by tracing the EVM opcodes from this contract.
///                     As a result, it may not compile or even be valid solidity code.
///                     Despite this, it should be obvious what each function does. Overall
///                     logic should have been preserved throughout decompiling.
///
/// @custom:github    You can find the open-source decompiler here:
///                       https://heimdall.rs

contract DecompiledContract {
    address public implementation;
    address public upgradeabilityOwner;
    uint256 public version;
    
    event Upgraded(uint256, address);
    event ProxyOwnershipTransferred(address, address);
    
    /// @custom:selector    0x3ad06d16
    /// @custom:signature   upgradeTo(uint256 arg0, address arg1) public
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["address", "uint160", "bytes20", "int160"]
    function upgradeTo(uint256 arg0, address arg1) public {
        require(address(msg.sender) == (address(upgradeabilityOwner)));
        require(!(address(implementation)) == (address(arg1)));
        require(0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 == (address(arg1).codehash));
        require(!0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 == (address(arg1).codehash));
        require(arg0 > version);
        version = arg0;
        implementation = (address(arg1)) | (uint96(implementation));
        emit Upgraded(address(arg1), arg0);
        require(address(arg1).codehash);
    }
    
    /// @custom:selector    0xf1739cae
    /// @custom:signature   transferProxyOwnership(address arg0) public
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function transferProxyOwnership(address arg0) public {
        require(address(msg.sender) == (address(upgradeabilityOwner)));
        require(address(arg0));
        emit ProxyOwnershipTransferred(address(upgradeabilityOwner), address(arg0));
        upgradeabilityOwner = (address(arg0)) | (uint96(upgradeabilityOwner));
    }
    
    /// @custom:selector    0xa9c45fcb
    /// @custom:signature   Unresolved_a9c45fcb(uint256 arg0, address arg1, uint256 arg2) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg2 ["uint256", "bytes32", "int256"]
    function Unresolved_a9c45fcb(uint256 arg0, address arg1, uint256 arg2) public payable {
        require(!arg2 > 0x0100000000);
        require(address(msg.sender) == (address(upgradeabilityOwner)));
        require(address(msg.sender) == (address(upgradeabilityOwner)));
        require(!(address(implementation)) == (address(arg1)));
        require(0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 == (address(arg1).codehash));
        require(!0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 == (address(arg1).codehash));
        require(arg0 > version);
        version = arg0;
        implementation = (address(arg1)) | (uint96(implementation));
        emit Upgraded(address(arg1), arg0);
        (bool success, bytes memory ret0) = address(this).transfer(msg.value);
        require(ret0.length == 0);
        require(address(arg1).codehash);
    }
}

ABI

[
  {
    "type": "function",
    "name": "Unresolved_a9c45fcb",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      },
      {
        "name": "arg1",
        "type": "address"
      },
      {
        "name": "arg2",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "implementation",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "transferProxyOwnership",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "upgradeTo",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      },
      {
        "name": "arg1",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "upgradeabilityOwner",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "version",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "event",
    "name": "ProxyOwnershipTransferred",
    "inputs": [
      {
        "name": "arg0",
        "type": "address",
        "indexed": false
      },
      {
        "name": "arg1",
        "type": "address",
        "indexed": false
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "Upgraded",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256",
        "indexed": false
      },
      {
        "name": "arg1",
        "type": "address",
        "indexed": false
      }
    ],
    "anonymous": false
  }
]

UNKNOWN SELECTORS (0)

(none -- all recognized)
These selectors are not yet in the research database — they are being investigated and will be added as known functions once identified. They are also marked in red in the decompiled Solidity above.

KNOWN CLUSTER ADDRESSES IN THIS BYTECODE (0)

(none)