0xb4467e8d621105312a914f1d42f10770c0ffe3c8

deployer: unknown relevance score: 0 status: partially_identified bytecode: 4592 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 decimals = 18;
    uint256 public constant unresolved_30adf81f = 49955707469362902507454157297736832118868343942642399513960811609542965143241;
    uint256 public constant TRANSFER_WITH_AUTHORIZATION_TYPEHASH = 56306633564104940265533113178924840914391875988752422239815283474255924830823;
    string public constant unresolved_06fdde03 = "Flash Token";
    string public constant unresolved_95d89b41 = "FLASH";
    
    mapping(bytes32 => bytes32) storage_map_a;
    uint256 public unresolved_18160ddd;
    mapping(bytes32 => bytes32) storage_map_e;
    uint256 public flashSupply;
    mapping(bytes32 => bytes32) storage_map_d;
    
    event Event_8c5be1e5();
    event Transfer(address, address, uint256);
    event AuthorizationUsed(address, bytes32);
    
    /// @custom:selector    0x095ea7b3
    /// @custom:signature   Unresolved_095ea7b3(address arg0, uint256 arg1) public payable returns (bool)
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function Unresolved_095ea7b3(address arg0, uint256 arg1) public payable returns (bool) {
        var_a = address(arg0);
        storage_map_a[var_a] = arg1;
        emit Event_8c5be1e5(address(msg.sender), address(arg0), arg1);
        return 0x01;
    }
    
    /// @custom:selector    0x522c8067
    /// @custom:signature   Unresolved_522c8067(uint256 arg0, uint256 arg1) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function Unresolved_522c8067(uint256 arg0, uint256 arg1) public payable {
        require(!arg1 > 0x0100000000);
        require(!((flashSupply + arg0) < flashSupply), "MATH:ADD_OVERFLOW");
        flashSupply = flashSupply + arg0;
        require(!(0xffffffffffffffffffffffffffff < (flashSupply + arg0)), "FlashToken:: SUPPLY_LIMIT_EXCEED");
    }
    
    /// @custom:selector    0xa9059cbb
    /// @custom:signature   transfer(address arg0, uint256 arg1) public payable returns (bool)
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function transfer(address arg0, uint256 arg1) public payable returns (bool) {
        require(address(this) == (address(arg0)), "MATH:SUB_UNDERFLOW");
        require(!(!address(arg0)), "MATH:SUB_UNDERFLOW");
        address var_a = address(msg.sender);
        require(!((storage_map_a[var_a] - arg1) > storage_map_a[var_a]), "MATH:SUB_UNDERFLOW");
        var_a = address(msg.sender);
        storage_map_a[var_a] = storage_map_a[var_a] - arg1;
        var_a = address(arg0);
        require(!((storage_map_a[var_a] + arg1) < storage_map_a[var_a]), "MATH:ADD_OVERFLOW");
        var_a = address(arg0);
        storage_map_a[var_a] = storage_map_a[var_a] + arg1;
        emit Transfer(address(msg.sender), address(arg0), arg1);
        return 0x01;
    }
    
    /// @custom:selector    0x23b872dd
    /// @custom:signature   Unresolved_23b872dd(address arg0, address arg1, uint256 arg2) public payable returns (bool)
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg2 ["uint256", "bytes32", "int256"]
    function Unresolved_23b872dd(address arg0, address arg1, uint256 arg2) public payable returns (bool) {
        var_a = msg.sender;
        require(storage_map_a[var_a] == 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, "MATH:SUB_UNDERFLOW");
        require(address(this) == (address(arg1)), "MATH:SUB_UNDERFLOW");
        require(!(!address(arg1)), "MATH:SUB_UNDERFLOW");
        var_a = address(arg0);
        require(!((storage_map_a[var_a] - arg2) > storage_map_a[var_a]), "MATH:SUB_UNDERFLOW");
        var_a = address(arg0);
        storage_map_a[var_a] = storage_map_a[var_a] - arg2;
        var_a = address(arg1);
        require(!((storage_map_a[var_a] + arg2) < storage_map_a[var_a]), "MATH:ADD_OVERFLOW");
        var_a = address(arg1);
        storage_map_a[var_a] = storage_map_a[var_a] + arg2;
        emit Transfer(address(arg0), address(arg1), arg2);
        return 0x01;
    }
    
    /// @custom:selector    0x3408e470
    /// @custom:signature   getChainId() public view returns (uint256)
    function getChainId() public view returns (uint256) {
        return block.chainid;
    }
    
    /// @custom:selector    0x70a08231
    /// @custom:signature   Unresolved_70a08231(address arg0) public view returns (uint256)
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function Unresolved_70a08231(address arg0) public view returns (uint256) {
        address var_b = address(arg0);
        return storage_map_d[var_b];
    }
    
    /// @custom:selector    0xe3ee160e
    /// @custom:signature   transferWithAuthorization(address arg0, address arg1, uint256 arg2, uint256 arg3, uint256 arg4, bytes32 arg5, uint8 arg6, bytes32 arg7, bytes32 arg8) public payable
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg2 ["uint256", "bytes32", "int256"]
    /// @param              arg3 ["uint256", "bytes32", "int256"]
    /// @param              arg4 ["uint256", "bytes32", "int256"]
    /// @param              arg5 ["uint256", "bytes32", "int256"]
    /// @param              arg6 ["bool", "uint8", "bytes1", "int8"]
    /// @param              arg7 ["uint256", "bytes32", "int256"]
    /// @param              arg8 ["uint256", "bytes32", "int256"]
    function transferWithAuthorization(address arg0, address arg1, uint256 arg2, uint256 arg3, uint256 arg4, bytes32 arg5, uint8 arg6, bytes32 arg7, bytes32 arg8) public payable {
        require(block.timestamp > arg3, "FlashToken:: AUTH_NOT_YET_VALID");
        require(block.timestamp < arg4, "FlashToken:: AUTH_ALREADY_USED");
        var_e = arg5;
        address var_f = keccak256(var_e);
        require(!(bytes1(storage_map_e[var_e])), "FlashToken:: AUTH_ALREADY_USED");
        var_b = 0x20;
        uint256 var_n = var_n + 0x0100;
        var_n = var_b + (0x20 + (0x20 + (0x20 + (0x20 + (0x20 + var_n)))));
        var_n = var_b + var_n;
        require(var_f);
        require(!(address(var_af)), "FlashToken:: INVALID_SIGNATURE");
        require(address(var_af) == (address(arg0)), "FlashToken:: INVALID_SIGNATURE");
        var_e = arg5;
        storage_map_e[var_e] = 0x01 | (uint248(storage_map_e[var_e]));
        emit AuthorizationUsed(address(arg0), arg5);
        require(address(this) == (address(arg1)), "MATH:SUB_UNDERFLOW");
        require(!(!address(arg1)), "MATH:SUB_UNDERFLOW");
        var_e = address(arg0);
        require(!((storage_map_e[var_e] - arg2) > storage_map_e[var_e]), "MATH:SUB_UNDERFLOW");
        var_e = address(arg0);
        storage_map_e[var_e] = storage_map_e[var_e] - arg2;
        var_e = address(arg1);
        require(!((storage_map_e[var_e] + arg2) < storage_map_e[var_e]), "MATH:ADD_OVERFLOW");
        var_e = address(arg1);
        storage_map_e[var_e] = storage_map_e[var_e] + arg2;
        emit Transfer(address(arg0), address(arg1), arg2);
        require(!(!address(var_af)), "FlashToken:: INVALID_SIGNATURE");
    }
    
    /// @custom:selector    0x7ecebe00
    /// @custom:signature   nonces(address arg0) public view returns (uint256)
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function nonces(address arg0) public view returns (uint256) {
        address var_b = address(arg0);
        return storage_map_d[var_b];
    }
    
    /// @custom:selector    0x40c10f19
    /// @custom:signature   mint(address arg0, uint256 arg1) public view
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function mint(address arg0, uint256 arg1) public view {
        address var_a = msg.sender;
        require(0x01 == (bytes1(storage_map_a[var_a])), "MATH:ADD_OVERFLOW");
        require(!((unresolved_18160ddd + arg1) < unresolved_18160ddd), "MATH:ADD_OVERFLOW");
    }
    
    /// @custom:selector    0xed24911d
    /// @custom:signature   getDomainSeparator() public view returns (uint256)
    function getDomainSeparator() public view returns (uint256) {
        return keccak256(var_i);
    }
    
    /// @custom:selector    0x42966c68
    /// @custom:signature   Unresolved_42966c68(uint256 arg0) public view
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function Unresolved_42966c68(uint256 arg0) public view {
        address var_a = address(msg.sender);
        require(!((storage_map_a[var_a] - arg0) > storage_map_a[var_a]), "MATH:SUB_UNDERFLOW");
    }
    
    /// @custom:selector    0xd505accf
    /// @custom:signature   Unresolved_d505accf(address arg0, address arg1, uint256 arg2, uint256 arg3, bool arg4, uint256 arg5, uint256 arg6) public payable
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg2 ["uint256", "bytes32", "int256"]
    /// @param              arg3 ["uint256", "bytes32", "int256"]
    /// @param              arg4 ["bool", "uint8", "bytes1", "int8"]
    /// @param              arg5 ["uint256", "bytes32", "int256"]
    /// @param              arg6 ["uint256", "bytes32", "int256"]
    function Unresolved_d505accf(address arg0, address arg1, uint256 arg2, uint256 arg3, bool arg4, uint256 arg5, uint256 arg6) public payable {
        require(!(arg3 < block.timestamp), "MATH:ADD_OVERFLOW");
        address var_a = address(arg0);
        uint256 var_j = var_j + 0xe0;
        var_a = address(arg0);
        require(!((storage_map_a[var_a] + 0x01) < storage_map_a[var_a]), "MATH:ADD_OVERFLOW");
        var_l = 0x20;
        var_a = address(arg0);
        var_b = 0x05;
        storage_map_a[var_a] = storage_map_a[var_a] + 0x01;
        var_j = var_l + (0x20 + (0x20 + (0x20 + (0x20 + (0x20 + var_j)))));
        require(var_b);
        require(!(address(var_ae)), "FlashToken:: INVALID_SIGNATURE");
        require(address(var_ae) == (address(arg0)), "FlashToken:: INVALID_SIGNATURE");
        var_a = address(arg1);
        storage_map_a[var_a] = arg2;
        emit Event_8c5be1e5(address(arg0), address(arg1), arg2);
        require(!(!address(var_ae)), "FlashToken:: INVALID_SIGNATURE");
        var_a = address(arg1);
        storage_map_a[var_a] = arg2;
        emit Event_8c5be1e5(address(arg0), address(arg1), arg2);
    }
    
    /// @custom:selector    0xdd62ed3e
    /// @custom:signature   Unresolved_dd62ed3e(address arg0, address arg1) public view returns (uint256)
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["address", "uint160", "bytes20", "int160"]
    function Unresolved_dd62ed3e(address arg0, address arg1) public view returns (uint256) {
        address var_b = address(arg0);
        var_b = address(arg1);
        return storage_map_d[var_b];
    }
    
    /// @custom:selector    0xe94a0102
    /// @custom:signature   authorizationState(address arg0, bytes32 arg1) public view returns (bool)
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function authorizationState(address arg0, bytes32 arg1) public view returns (bool) {
        address var_b = address(arg0);
        var_b = arg1;
        return !(!bytes1(storage_map_d[var_b]));
    }
    
    /// @custom:selector    0xf46eccc4
    /// @custom:signature   minters(address arg0) public view returns (bool)
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function minters(address arg0) public view returns (bool) {
        address var_b = address(arg0);
        return !(!bytes1(storage_map_d[var_b]));
    }
}

ABI

[
  {
    "type": "function",
    "name": "TRANSFER_WITH_AUTHORIZATION_TYPEHASH",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "Unresolved_06fdde03",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "Unresolved_095ea7b3",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "Unresolved_18160ddd",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "Unresolved_23b872dd",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "address"
      },
      {
        "name": "arg2",
        "type": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "Unresolved_30adf81f",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "Unresolved_42966c68",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "Unresolved_522c8067",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "Unresolved_70a08231",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "Unresolved_95d89b41",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "Unresolved_d505accf",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "address"
      },
      {
        "name": "arg2",
        "type": "uint256"
      },
      {
        "name": "arg3",
        "type": "uint256"
      },
      {
        "name": "arg4",
        "type": "bool"
      },
      {
        "name": "arg5",
        "type": "uint256"
      },
      {
        "name": "arg6",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "Unresolved_dd62ed3e",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "authorizationState",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "bytes32"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "decimals",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "flashSupply",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getChainId",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getDomainSeparator",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "mint",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "minters",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "nonces",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "transfer",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "transferWithAuthorization",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "address"
      },
      {
        "name": "arg2",
        "type": "uint256"
      },
      {
        "name": "arg3",
        "type": "uint256"
      },
      {
        "name": "arg4",
        "type": "uint256"
      },
      {
        "name": "arg5",
        "type": "bytes32"
      },
      {
        "name": "arg6",
        "type": "uint8"
      },
      {
        "name": "arg7",
        "type": "bytes32"
      },
      {
        "name": "arg8",
        "type": "bytes32"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "event",
    "name": "AuthorizationUsed",
    "inputs": [
      {
        "name": "arg0",
        "type": "address",
        "indexed": false
      },
      {
        "name": "arg1",
        "type": "bytes32",
        "indexed": false
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "Event_8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925",
    "inputs": [],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "Transfer",
    "inputs": [
      {
        "name": "arg0",
        "type": "address",
        "indexed": false
      },
      {
        "name": "arg1",
        "type": "address",
        "indexed": false
      },
      {
        "name": "arg2",
        "type": "uint256",
        "indexed": false
      }
    ],
    "anonymous": false
  }
]

UNKNOWN SELECTORS (1)

0xc4a11628unknown
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)