0xf616e5d28c2c6d20214fd2da65df9733bd0ca855

deployer: unknown relevance score: 10 status: identified bytecode: 4269 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 {
    uint256 public constant rate = 24000;
    uint256 public constant mkr = 910928527968400316125753109717913824688037263778;
    uint256 public constant sky = 570921205234808502046533014728369247151631707205;
    
    uint256 public fee;
    mapping(bytes32 => bytes32) storage_map_a;
    uint256 public take;
    mapping(bytes32 => bytes32) storage_map_c;
    
    event Rely(address);
    event MkrToSky(address, address, uint256, uint256, uint256);
    event Collect(address, uint256);
    event File(bytes32, uint256);
    event Deny(address);
    event Burn(uint256);
    
    /// @custom:selector    0x29ae8114
    /// @custom:signature   file(bytes32 arg0, uint256 arg1) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function file(bytes32 arg0, uint256 arg1) public payable {
        require(arg0 == arg0);
        require(arg1 == arg1);
        address var_a = address(msg.sender);
        require(storage_map_a[var_a] == 0x01, "MkrSky/fee-exceeds-wad");
        require(arg0 - 0x6665650000000000000000000000000000000000000000000000000000000000, "MkrSky/fee-exceeds-wad");
        require(!(arg1 > 0x0de0b6b3a7640000), "MkrSky/fee-exceeds-wad");
        fee = arg1;
        emit File(arg0, arg1);
    }
    
    /// @custom:selector    0x42966c68
    /// @custom:signature   Unresolved_42966c68(uint256 arg0) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function Unresolved_42966c68(uint256 arg0) public payable {
        require(arg0 == arg0);
        address var_a = address(msg.sender);
        require(storage_map_a[var_a] == 0x01);
        address var_d = address(this);
        require(address(0x6400fe04cba0d72be2f2e6ece30ba7c591752c45).code.length);
        (bool success, bytes memory ret0) = address(0x6400fe04cba0d72be2f2e6ece30ba7c591752c45).Unresolved_9dc29fac(var_d); // call
        emit Burn(arg0);
    }
    
    /// @custom:selector    0xbf353dbb
    /// @custom:signature   wards(address arg0) public view returns (uint256)
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function wards(address arg0) public view returns (uint256) {
        require(arg0 == (address(arg0)));
        address var_b = arg0;
        return storage_map_c[var_b];
    }
    
    /// @custom:selector    0x65fae35e
    /// @custom:signature   rely(address arg0) public payable
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function rely(address arg0) public payable {
        require(arg0 == (address(arg0)));
        address var_a = address(msg.sender);
        require(storage_map_a[var_a] == 0x01, "MkrSky/not-authorized");
        var_a = address(arg0);
        storage_map_a[var_a] = 0x01;
        emit Rely(address(arg0));
    }
    
    /// @custom:selector    0x9c52a7f1
    /// @custom:signature   deny(address arg0) public payable
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function deny(address arg0) public payable {
        require(arg0 == (address(arg0)));
        address var_a = address(msg.sender);
        require(storage_map_a[var_a] == 0x01, "MkrSky/not-authorized");
        var_a = address(arg0);
        storage_map_a[var_a] = 0;
        emit Deny(address(arg0));
    }
    
    /// @custom:selector    0x06ec16f8
    /// @custom:signature   collect(address arg0) public payable returns (uint256)
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function collect(address arg0) public payable returns (uint256) {
        require(arg0 == (address(arg0)));
        address var_a = address(msg.sender);
        require(storage_map_a[var_a] == 0x01);
        require(take > 0);
        take = 0;
        address var_d = address(arg0);
        require(address(0x6400fe04cba0d72be2f2e6ece30ba7c591752c45).code.length);
        (bool success, bytes memory ret0) = address(0x6400fe04cba0d72be2f2e6ece30ba7c591752c45).Unresolved_a9059cbb(var_d); // call
        emit Collect(address(arg0), take);
        return take;
    }
    
    /// @custom:selector    0xab89605a
    /// @custom:signature   mkrToSky(address arg0, uint256 arg1) public payable
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function mkrToSky(address arg0, uint256 arg1) public payable {
        require(arg0 == (address(arg0)));
        require(arg1 == arg1);
        require(!arg1 | (0x5dc0 == ((arg1 * 0x5dc0) / arg1)));
        require(!fee > 0);
        require((!arg1 * 0x5dc0) | (fee == (((arg1 * 0x5dc0) * fee) / (arg1 * 0x5dc0))));
        require(0x0de0b6b3a7640000);
        require(!take > (take + (((arg1 * 0x5dc0) * fee) / 0x0de0b6b3a7640000)));
        take = take + (((arg1 * 0x5dc0) * fee) / 0x0de0b6b3a7640000);
        address var_d = address(msg.sender);
        require(address(0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2).code.length);
        (bool success, bytes memory ret0) = address(0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2).Unresolved_9dc29fac(var_d); // call
        var_d = address(arg0);
        require(address(0x6400fe04cba0d72be2f2e6ece30ba7c591752c45).code.length);
        (bool success, bytes memory ret0) = address(0x6400fe04cba0d72be2f2e6ece30ba7c591752c45).Unresolved_a9059cbb(var_d); // call
        emit MkrToSky(address(msg.sender), address(arg0), arg1, (arg1 * 0x5dc0) - (((arg1 * 0x5dc0) * fee) / 0x0de0b6b3a7640000), ((arg1 * 0x5dc0) * fee) / 0x0de0b6b3a7640000);
    }
}

ABI

[
  {
    "type": "function",
    "name": "Unresolved_42966c68",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "collect",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "deny",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "fee",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "file",
    "inputs": [
      {
        "name": "arg0",
        "type": "bytes32"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "mkr",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "mkrToSky",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "rate",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "rely",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "sky",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "take",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "wards",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "event",
    "name": "Burn",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256",
        "indexed": false
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "Collect",
    "inputs": [
      {
        "name": "arg0",
        "type": "address",
        "indexed": false
      },
      {
        "name": "arg1",
        "type": "uint256",
        "indexed": false
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "Deny",
    "inputs": [
      {
        "name": "arg0",
        "type": "address",
        "indexed": false
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "File",
    "inputs": [
      {
        "name": "arg0",
        "type": "bytes32",
        "indexed": false
      },
      {
        "name": "arg1",
        "type": "uint256",
        "indexed": false
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "MkrToSky",
    "inputs": [
      {
        "name": "arg0",
        "type": "address",
        "indexed": false
      },
      {
        "name": "arg1",
        "type": "address",
        "indexed": false
      },
      {
        "name": "arg2",
        "type": "uint256",
        "indexed": false
      },
      {
        "name": "arg3",
        "type": "uint256",
        "indexed": false
      },
      {
        "name": "arg4",
        "type": "uint256",
        "indexed": false
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "Rely",
    "inputs": [
      {
        "name": "arg0",
        "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)