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 {
address public nominatedOwner;
address public target;
address public owner;
event OwnerChanged( address , address ) ;
event TargetUpdated( address ) ;
event Event_00000000( ) ;
event OwnerNominated( address ) ;
/// @custom:selector 0x095ea7b3
/// @custom:signature approve(address arg0, uint256 arg1) public returns (bool)
/// @param arg0 ["address", "uint160", "bytes20", "int160"]
/// @param arg1 ["uint256", "bytes32", "int256"]
function approve( address arg0, uint256 arg1) public returns ( bool ) {
address var_b = msg. sender;
require ( address ( target) . code. length) ;
( bool success, bytes memory ret0) = address ( target) . { value: 0 ether } Unresolved_bc67f832( var_b) ; // call
var_b = address ( arg0) ;
require ( address ( target) . code. length) ;
( bool success, bytes memory ret0) = address ( target) . { value: 0 ether } Unresolved_095ea7b3( var_b) ; // call
require ( ! ret0. length < 0x20 ) ;
return 0x01 ;
}
/// @custom:selector 0x18160ddd
/// @custom:signature totalSupply() public returns (uint256)
function totalSupply( ) public returns ( uint256 ) {
require ( address ( target) . code. length) ;
( bool success, bytes memory ret0) = address ( target) . { value: 0 ether } totalSupply( ) ; // call
require ( ! ret0. length < 0x20 ) ;
return var_b. length;
}
/// @custom:selector 0x313ce567
/// @custom:signature decimals() public returns (bool)
function decimals( ) public returns ( bool ) {
require ( address ( target) . code. length) ;
( bool success, bytes memory ret0) = address ( target) . { value: 0 ether } decimals( ) ; // call
require ( ! ret0. length < 0x20 ) ;
return bytes1 ( var_b. length) ;
}
/// @custom:selector 0x79ba5097
/// @custom:signature acceptOwnership() public
function acceptOwnership( ) public {
require ( msg. sender = = ( address ( nominatedOwner) ) , "You must be nominated before you can accept ownership" ) ;
emit OwnerChanged( address ( owner) , address ( nominatedOwner) ) ;
owner = ( address ( nominatedOwner) ) | ( uint96 ( owner) ) ;
nominatedOwner = uint96 ( nominatedOwner) ;
}
/// @custom:selector 0x23b872dd
/// @custom:signature transferFrom(address arg0, address arg1, uint256 arg2) public returns (bool)
/// @param arg0 ["address", "uint160", "bytes20", "int160"]
/// @param arg1 ["address", "uint160", "bytes20", "int160"]
/// @param arg2 ["uint256", "bytes32", "int256"]
function transferFrom( address arg0, address arg1, uint256 arg2) public returns ( bool ) {
address var_b = msg. sender;
require ( address ( target) . code. length) ;
( bool success, bytes memory ret0) = address ( target) . { value: 0 ether } Unresolved_bc67f832( var_b) ; // call
var_b = address ( arg0) ;
require ( address ( target) . code. length) ;
( bool success, bytes memory ret0) = address ( target) . { value: 0 ether } Unresolved_23b872dd( var_b) ; // call
require ( ! ret0. length < 0x20 ) ;
return 0x01 ;
}
/// @custom:selector 0xa9059cbb
/// @custom:signature transfer(address arg0, uint256 arg1) public returns (bool)
/// @param arg0 ["address", "uint160", "bytes20", "int160"]
/// @param arg1 ["uint256", "bytes32", "int256"]
function transfer( address arg0, uint256 arg1) public returns ( bool ) {
address var_b = msg. sender;
require ( address ( target) . code. length) ;
( bool success, bytes memory ret0) = address ( target) . { value: 0 ether } Unresolved_bc67f832( var_b) ; // call
var_b = address ( arg0) ;
require ( address ( target) . code. length) ;
( bool success, bytes memory ret0) = address ( target) . { value: 0 ether } Unresolved_a9059cbb( var_b) ; // call
require ( ! ret0. length < 0x20 ) ;
return 0x01 ;
}
/// @custom:selector 0x70a08231
/// @custom:signature balanceOf(address arg0) public returns (uint256)
/// @param arg0 ["address", "uint160", "bytes20", "int160"]
function balanceOf( address arg0) public returns ( uint256 ) {
address var_b = address ( arg0) ;
require ( address ( target) . code. length) ;
( bool success, bytes memory ret0) = address ( target) . { value: 0 ether } Unresolved_70a08231( var_b) ; // call
require ( ! ret0. length < 0x20 ) ;
return var_c. length;
}
/// @custom:selector 0x1627540c
/// @custom:signature nominateNewOwner(address arg0) public
/// @param arg0 ["address", "uint160", "bytes20", "int160"]
function nominateNewOwner( address arg0) public {
require ( msg. sender = = ( address ( owner) ) , "Only the contract owner may perform this action" ) ;
nominatedOwner = ( address ( arg0) ) | ( uint96 ( nominatedOwner) ) ;
emit OwnerNominated( address ( arg0) ) ;
}
/// @custom:selector 0x907dff97
/// @custom:signature Unresolved_907dff97(uint256 arg0, uint256 arg1, uint256 arg2, uint256 arg3, uint256 arg4, uint256 arg5) public view
/// @param arg0 ["uint256", "bytes32", "int256"]
/// @param arg1 ["uint256", "bytes32", "int256"]
/// @param arg2 ["uint256", "bytes32", "int256"]
/// @param arg3 ["uint256", "bytes32", "int256"]
/// @param arg4 ["uint256", "bytes32", "int256"]
/// @param arg5 ["uint256", "bytes32", "int256"]
function Unresolved_907dff97( uint256 arg0, uint256 arg1, uint256 arg2, uint256 arg3, uint256 arg4, uint256 arg5) public view {
require ( msg. sender = = ( address ( target) ) , "Must be proxy target" ) ;
var_b = 0x20 ;
if ( arg1 = = 0 ) {
if ( arg1 = = 0x01 ) {
emit Event_00000000( ) ; // anonymous event
if ( arg1 = = 0x02 ) {
emit Event_00000000( arg3) ; // anonymous event
if ( arg1 = = 0x03 ) {
emit Event_00000000( arg3, arg4) ; // anonymous event
if ( arg1 = = 0x04 ) {
emit Event_00000000( arg3, arg4, arg5) ; // anonymous event
emit Event_00000000( ) ; // anonymous event
}
}
}
}
}
}
/// @custom:selector 0xbefff6af
/// @custom:signature Unresolved_befff6af(uint256 arg0) public
/// @param arg0 ["uint256", "bytes32", "int256"]
function Unresolved_befff6af( uint256 arg0) public {
require ( msg. sender = = ( address ( owner) ) , "Only the contract owner may perform this action" ) ;
target = ( uint248 ( target) ) | ( 0x010000000000000000000000000000000000000000 * arg0) ;
}
/// @custom:selector 0x776d1a01
/// @custom:signature setTarget(address arg0) public
/// @param arg0 ["address", "uint160", "bytes20", "int160"]
function setTarget( address arg0) public {
require ( msg. sender = = ( address ( owner) ) , "Only the contract owner may perform this action" ) ;
target = ( address ( arg0) ) | ( uint96 ( target) ) ;
emit TargetUpdated( address ( arg0) ) ;
}
/// @custom:selector 0xdd62ed3e
/// @custom:signature allowance(address arg0, address arg1) public returns (uint256)
/// @param arg0 ["address", "uint160", "bytes20", "int160"]
/// @param arg1 ["address", "uint160", "bytes20", "int160"]
function allowance( address arg0, address arg1) public returns ( uint256 ) {
address var_b = address ( arg0) ;
require ( address ( target) . code. length) ;
( bool success, bytes memory ret0) = address ( target) . { value: 0 ether } Unresolved_dd62ed3e( var_b) ; // call
require ( ! ret0. length < 0x20 ) ;
return var_d. length;
}
/// @custom:selector 0x06fdde03
/// @custom:signature name() public returns (string memory)
function name( ) public returns ( string memory ) {
require ( address ( target) . code. length) ;
( bool success, bytes memory ret0) = address ( target) . { value: 0 ether } name( ) ; // call
uint256 var_b = var_b + ( uint248 ( ret0. length + 0x1f ) ) ;
require ( ! ret0. length < 0x20 ) ;
require ( ! var_b. length > 0x0100000000 ) ;
require ( ! ( ( var_b + var_b. length) + 0x20 ) > ( var_b + ret0. length) ) ;
require ( ! ( ( var_b + ret0. length) < ( var_c + ( ( var_b + var_b. length) + 0x20 ) ) ) | ( var_c > 0x0100000000 ) ) ;
require ( ! 0 < ( var_f) ) ;
require ( ! bytes1 ( var_f) ) ;
return abi. encodePacked( 0x20 , var_f, ( ~ ( ( 0x0100 * * ( 0x20 - ( bytes1 ( var_f) ) ) ) - 0x01 ) ) & ( var_h) ) ;
return abi. encodePacked( 0x20 , var_f) ;
}
/// @custom:selector 0x95d89b41
/// @custom:signature symbol() public returns (string memory)
function symbol( ) public returns ( string memory ) {
require ( address ( target) . code. length) ;
( bool success, bytes memory ret0) = address ( target) . { value: 0 ether } symbol( ) ; // call
uint256 var_b = var_b + ( uint248 ( ret0. length + 0x1f ) ) ;
require ( ! ret0. length < 0x20 ) ;
require ( ! var_b. length > 0x0100000000 ) ;
require ( ! ( ( var_b + var_b. length) + 0x20 ) > ( var_b + ret0. length) ) ;
require ( ! ( ( var_b + ret0. length) < ( var_c + ( ( var_b + var_b. length) + 0x20 ) ) ) | ( var_c > 0x0100000000 ) ) ;
require ( ! 0 < ( var_f) ) ;
require ( ! bytes1 ( var_f) ) ;
return abi. encodePacked( 0x20 , var_f, ( ~ ( ( 0x0100 * * ( 0x20 - ( bytes1 ( var_f) ) ) ) - 0x01 ) ) & ( var_h) ) ;
return abi. encodePacked( 0x20 , var_f) ;
}
}
ABI
[
{
"type": "function",
"name": "Unresolved_907dff97",
"inputs": [
{
"name": "arg0",
"type": "uint256"
},
{
"name": "arg1",
"type": "uint256"
},
{
"name": "arg2",
"type": "uint256"
},
{
"name": "arg3",
"type": "uint256"
},
{
"name": "arg4",
"type": "uint256"
},
{
"name": "arg5",
"type": "uint256"
}
],
"outputs": [],
"stateMutability": "view"
},
{
"type": "function",
"name": "Unresolved_befff6af",
"inputs": [
{
"name": "arg0",
"type": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "acceptOwnership",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "allowance",
"inputs": [
{
"name": "arg0",
"type": "address"
},
{
"name": "arg1",
"type": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "approve",
"inputs": [
{
"name": "arg0",
"type": "address"
},
{
"name": "arg1",
"type": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "balanceOf",
"inputs": [
{
"name": "arg0",
"type": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "decimals",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "name",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "nominateNewOwner",
"inputs": [
{
"name": "arg0",
"type": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "nominatedOwner",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "owner",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "setTarget",
"inputs": [
{
"name": "arg0",
"type": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "symbol",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "target",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "totalSupply",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "transfer",
"inputs": [
{
"name": "arg0",
"type": "address"
},
{
"name": "arg1",
"type": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "transferFrom",
"inputs": [
{
"name": "arg0",
"type": "address"
},
{
"name": "arg1",
"type": "address"
},
{
"name": "arg2",
"type": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "useDELEGATECALL",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool"
}
],
"stateMutability": "view"
},
{
"type": "event",
"name": "Event_0000000000000000000000000000000000000000000000000000000000000000",
"inputs": [],
"anonymous": true
},
{
"type": "event",
"name": "OwnerChanged",
"inputs": [
{
"name": "arg0",
"type": "address",
"indexed": false
},
{
"name": "arg1",
"type": "address",
"indexed": false
}
],
"anonymous": false
},
{
"type": "event",
"name": "OwnerNominated",
"inputs": [
{
"name": "arg0",
"type": "address",
"indexed": false
}
],
"anonymous": false
},
{
"type": "event",
"name": "TargetUpdated",
"inputs": [
{
"name": "arg0",
"type": "address",
"indexed": false
}
],
"anonymous": false
}
]