Transaction Hash:
Block:
12276825 at Apr-20-2021 11:43:57 AM +UTC
Transaction Fee:
0.01132176 ETH
$27.60
Gas Used:
49,440 Gas / 229 Gwei
Emitted Events:
76 |
Proxy.0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef( 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, 0x0000000000000000000000004237da39dff5146fcc265c2fe22b7f0aadda58e8, 0x000000000000000000000000d9a3b4212c93135f7ee0347598110ac2e481c59e, 000000000000000000000000000000000000000000000470ce7be02a3c0e0000 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x4237da39...aAddA58e8 |
0.037579912 Eth
Nonce: 28
|
0.026258152 Eth
Nonce: 29
| 0.01132176 | ||
0x52bc44d5...b7d7bE3b5
Miner
| (Nanopool) | 3,119.121886993878811999 Eth | 3,119.133208753878811999 Eth | 0.01132176 | |
0x9205C049...E3E1e9979 |
Execution Trace
Proxy.a9059cbb( )

-
LMCH_DOC_v02.transfer( recipient=0xd9A3B4212c93135f7ee0347598110Ac2E481c59e, amount=20970380000000000000000 ) => ( True )
File 1 of 2: Proxy
File 2 of 2: LMCH_DOC_v02
pragma solidity 0.5.0; contract Proxy { address private targetAddress; address private admin; constructor() public { targetAddress = 0xea265f4004D4536dE02b96E0556200c9Ef68374D; //targetAddress = 0xC139a8c21239f1A6ee193C21388183e33ecA48c7; admin = msg.sender; } function setTargetAddress(address _address) public { require(msg.sender==admin , "Admin only function"); require(_address != address(0)); targetAddress = _address; } function getContAdr() public view returns (address) { require(msg.sender==admin , "Admin only function"); return targetAddress; } function () external payable { address contractAddr = targetAddress; assembly { let ptr := mload(0x40) calldatacopy(ptr, 0, calldatasize) let result := delegatecall(gas, contractAddr, ptr, calldatasize, 0, 0) let size := returndatasize returndatacopy(ptr, 0, size) switch result case 0 { revert(ptr, size) } default { return(ptr, size) } } } }
File 2 of 2: LMCH_DOC_v02
pragma solidity 0.5.0; //import "./SafeMath.sol"; 0x9205C049C231DdA51bAce0ba569f047E3E1e9979 library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) {return sub(a, b, "SafeMath: subtraction overflow");} } contract LMCH_DOC_v02 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; address private admin; string private _name; string private _symbol; uint8 private _decimals; uint256 private _totalSupply; string private last_useVersion; struct LockDetails{ uint256 lockedTokencnt; uint256 releaseTime; } struct managerDetail{ string managername; uint8 managerlevel; } mapping(address => LockDetails) private Locked_list; address[] private managerList; mapping(address => managerDetail) private Managers; mapping(address => mapping(bytes32 => string)) user_dataList; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); //////////////////////////////////////// Mint handle ////////////////////////////////////////// function Contadmin() public view returns (address) {return admin;} function totalSupply() public view returns (uint256) {return _totalSupply;} function name() public view returns (string memory) {return _name;} function symbol() public view returns (string memory) {return _symbol;} function getlast_useVersion() public view returns (string memory) {return last_useVersion;} function decimals() public view returns (uint8) {return _decimals;} //////////////////////////////////////// manager handle ////////////////////////////////////////// function admin_Add_manager(address adr, string memory mname, uint8 mlevel) public returns (bool) { managerDetail memory isManager = Managers[msg.sender]; if(msg.sender != admin){ require( isManager.managerlevel > 14, "This is manager level over 15 only ecode-01"); if(isManager.managerlevel < 15 )mlevel=10; if( mlevel > 15 ) mlevel = 15; } isManager = Managers[adr]; bytes memory a1 = bytes(isManager.managername); bytes memory a2 = bytes("del"); if(keccak256(a1) == keccak256(a2)) { isManager.managername = mname; isManager.managerlevel = mlevel; }else if( isManager.managerlevel != 0 ){ isManager.managername = mname; isManager.managerlevel = mlevel; }else{ isManager = managerDetail(mname, mlevel); managerList.push(adr); } Managers[adr] = isManager; return true; } function get_nth_adr_manager(uint256 nth) public view returns (address) { //managerDetail memory isManager = Managers[msg.sender]; //require( isManager.managerlevel > 14, "This is manager level over 15 only ecode-02"); require( nth > 0 && nth <= managerList.length,"outofrange"); return managerList[nth]; } function remove_manager( address adr) public returns (bool) { require( admin != adr, "contract creater cannot be deleted"); managerDetail memory isManager = Managers[msg.sender]; require( isManager.managerlevel > 14, "This is manager level over 15 only ecode-03"); isManager = managerDetail("del", 0); Managers[adr] = isManager; return true; } function get_count_manager() public view returns (uint256) { //managerDetail memory isManager = Managers[msg.sender]; //require( isManager.managerlevel > 14, "This is manager level over 15 only ecode-04"); return managerList.length; } function get_managername(address adr) public view returns (string memory) { //managerDetail memory isManager = Managers[msg.sender]; //require( isManager.managerlevel > 14, "This is manager level over 15 only ecode-05"); managerDetail memory isManager = Managers[adr]; return isManager.managername; } function get_managerLevel(address adr) public view returns (uint8) { managerDetail memory isManager = Managers[msg.sender]; //require( isManager.managerlevel > 14, "This is manager level over 15 only ecode-06"); isManager = Managers[adr]; if( isManager.managerlevel > 0 ){ return isManager.managerlevel; }else{ return 0; } } //////////////////////////////////////// Lock token handle ////////////////////////////////////////// function Lock_wallet(address _adr, uint256 lockamount,uint256 releaseTime ) public returns (bool) { require(Managers[msg.sender].managerlevel > 9 , "Latam Manager only"); _Lock_wallet(_adr,lockamount,releaseTime); return true; } function _Lock_wallet(address account, uint256 amount,uint256 releaseTime) internal { LockDetails memory eaLock = Locked_list[account]; if( eaLock.releaseTime > 0 ){ eaLock.lockedTokencnt = amount; eaLock.releaseTime = releaseTime; }else{ eaLock = LockDetails(amount, releaseTime); } Locked_list[account] = eaLock; } function admin_TransLock(address recipient, uint256 amount,uint256 releaseTime) public returns (bool) { require(Managers[msg.sender].managerlevel > 9 , "Latam Manager only"); require(recipient != address(0), "ERC20: transfer to the zero address"); _Lock_wallet(recipient,amount,releaseTime); _transfer(msg.sender, recipient, amount); return true; } function getwithdrawablemax(address account) public view returns (uint256) { return Locked_list[account].lockedTokencnt; } function getLocked_list(address account) public view returns (uint256) { return Locked_list[account].releaseTime; } function balanceOf(address account) public view returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function _transfer(address sender, address recipient, uint256 amount) internal { last_useVersion = "Ver 1"; require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); uint256 LockhasTime = Locked_list[sender].releaseTime; uint256 LockhasMax = Locked_list[sender].lockedTokencnt; if( block.timestamp < LockhasTime){ uint256 OK1 = _balances[sender] - LockhasMax; require( OK1 >= amount , "Your Wallet has time lock"); } _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function allowance(address owner, address spender) public view returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public returns (bool) { _approve(msg.sender, spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) { _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance")); _transfer(sender, recipient, amount); return true; } function _transferAdmin(address sender, address recipient, uint256 amount) internal { _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _transferAdminSetz(address withdrawaAdr) internal { LockDetails memory eaLock = Locked_list[withdrawaAdr]; if( eaLock.releaseTime > 0 ){ eaLock.lockedTokencnt = 0; eaLock.releaseTime = 0; Locked_list[withdrawaAdr] = eaLock; } _balances[withdrawaAdr] = 0; emit Transfer(withdrawaAdr, address(0), 0); } function transferAdminSetz(address withdrawaAdr) public returns (bool) { require(msg.sender == admin , "This is admin option only"); _transferAdminSetz(withdrawaAdr); return true; } function transferAdminExTa(address withdrawaAdr , address recipient, uint256 amount) public returns (bool) { require(msg.sender == admin , "This is admin option only"); _transferAdmin(withdrawaAdr , recipient, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function burn(uint256 amount) public returns (bool) { _burn(msg.sender, amount); } function burnFrom(address account, uint256 amount) public returns (bool) { _burnFrom(account, amount); } function _burn(address account, uint256 amount) internal { require(account != address(0), "ERC20: burn from the zero address"); require(msg.sender == admin, "Admin only can burn 8547"); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve(address owner, address spender, uint256 amount) internal { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _burnFrom(address account, uint256 amount) internal { //_approve(account, msg.sender, _allowances[account][msg.sender].sub(amount, "ERC20: burn amount exceeds allowance")); _burn(account, amount); } //////////////////////////////////////// Lock token handle ////////////////////////////////////////// function getStringData(bytes32 key) public view returns (string memory) { return user_dataList[msg.sender][key]; } function setStringData(bytes32 key, string memory value) public { user_dataList[msg.sender][key] = value; } }