DECOMPILED SOLIDITY (Heimdall)
VERIFY
// 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
}
]