Skip to content

Instantly share code, notes, and snippets.

@7flash
Created February 18, 2020 12:00
Show Gist options
  • Save 7flash/83d2a214b97df62286af8f012697243c to your computer and use it in GitHub Desktop.
Save 7flash/83d2a214b97df62286af8f012697243c to your computer and use it in GitHub Desktop.
#
# Panoramix v4 Oct 2019
# Decompiled source of 0x4f4e0f2cb72E718fC0433222768c57e823162152
#
# Let's make the world open source
#
#
# I failed with these:
# - unknowna270ef06(?)
# All the rest is below.
#
def storage:
stor0 is uint256 at storage 0
stor0 is addr at storage 0
def _fallback() payable: # default function
stop
def unknown7f5b002e(uint256 _param1): # not payable
require calldata.size - 4 >=′ 32
require _param1 == addr(_param1)
return eth.balance(_param1)
def unknown363a7ef7(): # not payable
if not addr(stor0):
uint256(stor0) = tx.origin or Mask(96, 160, uint256(stor0))
if addr(stor0) != tx.origin:
revert with 0, 'bad origin'
def unknown746a5053(uint256 _param1, uint256 _param2) payable:
require calldata.size - 4 >=′ 64
require _param1 == addr(_param1)
require _param2 == _param2
if not addr(stor0):
uint256(stor0) = tx.origin or Mask(96, 160, uint256(stor0))
if addr(stor0) != tx.origin:
revert with 0, 'bad origin'
create contract with 0 wei
code: 0xfe608060405234801561001057600080fd5b5060da8061001f6000396000f3fe608060405260043610601c5760003560e01c8063f2adf1cb14601e575b005b348015602957600080fd5b50601c60353660046050565b806001600160a01b0316ff5b8035604a816083565b92915050565b600060208284031215606157600080fd5b6000606b84846041565b949350505050565b60006001600160a01b038216604a565b608a816073565b8114609457600080fd5b5056fea365627a7a7231582002418c334d1aed8da2f2f5f053319e0c542be659c16228e886da830043f4c02a6c6578706572696d656e74616cf564736f6c634300051000
if not create.new_address:
revert with ext_call.return_data[0 len return_data.size]
call addr(create.new_address) with:
value _param2 wei
gas 2300 * is_zero(value) wei
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
require ext_code.size(addr(create.new_address))
call addr(create.new_address).0xf2adf1cb with:
gas gas_remaining wei
args addr(_param1)
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
return 0, 64, 0
def unknown41fc3baf(uint256 _param1, array _param2, uint256 _param3) payable:
require calldata.size - 4 >=′ 96
require _param1 == addr(_param1)
require _param2 <= 18446744073709551615
require _param2 + 35 <′ calldata.size
require _param2.length <= 18446744073709551615
require ceil32(_param2.length) + 128 >= 96 and ceil32(_param2.length) + 128 <= 18446744073709551615
require _param2 + _param2.length + 36 <= calldata.size
mem[128 len _param2.length] = _param2[all]
mem[_param2.length + 128] = 0
require _param3 == _param3
if not addr(stor0):
uint256(stor0) = tx.origin or Mask(96, 160, uint256(stor0))
if addr(stor0) != tx.origin:
revert with 0, 'bad origin'
mem[ceil32(_param2.length) + 128 len ceil32(_param2.length)] = _param2[all], mem[_param2.length + 128 len ceil32(_param2.length) - _param2.length]
if ceil32(_param2.length) > _param2.length:
mem[ceil32(_param2.length) + _param2.length + 128] = 0
call addr(_param1) with:
funct Mask(32, -(8 * ceil32(_param2.length) + -_param2.length + 4) + 256, 0) >> -(8 * ceil32(_param2.length) + -_param2.length + 4) + 256
value _param3 wei
gas gas_remaining wei
args mem[ceil32(_param2.length) + 132 len _param2.length - 4]
if return_data.size:
return bool(ext_call.success), Array(len=return_data.size, data=ext_call.return_data)
mem[ceil32(_param2.length) + 128] = bool(ext_call.success)
mem[ceil32(_param2.length) + 160] = 64
mem[ceil32(_param2.length) + 192] = _param2.length
return Mask(8 * -ceil32(_param2.length) + _param2.length + 32, 0, 0),
mem[_param2.length + 160 len (2 * ceil32(_param2.length)) + -_param2.length + 64]
def unknown8b418713(uint256 _param1, uint256 _param2, uint256 _param3, array _param4): # not payable
require calldata.size - 4 >=′ 128
require _param1 == addr(_param1)
require calldata.size - 36 >=′ 64
require _param2 == addr(_param2)
require _param3 == _param3
mem[128] = _param3
require _param4 <= 18446744073709551615
require _param4 + 35 <′ calldata.size
require _param4.length <= 18446744073709551615
require ceil32(_param4.length) + 192 >= 160 and ceil32(_param4.length) + 192 <= 18446744073709551615
mem[160] = _param4.length
require _param4 + _param4.length + 36 <= calldata.size
mem[192 len _param4.length] = _param4[all]
mem[_param4.length + 192] = 0
if not addr(stor0):
uint256(stor0) = tx.origin or Mask(96, 160, uint256(stor0))
if addr(stor0) != tx.origin:
revert with 0, 'bad origin'
mem[ceil32(_param4.length) + 192 len ceil32(_param4.length)] = _param4[all], mem[_param4.length + 192 len ceil32(_param4.length) - _param4.length]
if ceil32(_param4.length) > _param4.length:
mem[ceil32(_param4.length) + _param4.length + 192] = 0
call this.address with:
funct Mask(32, -(8 * ceil32(_param4.length) + -_param4.length + 4) + 256, 0) >> -(8 * ceil32(_param4.length) + -_param4.length + 4) + 256
gas gas_remaining wei
args mem[ceil32(_param4.length) + 196 len _param4.length - 4]
if return_data.size:
return bool(ext_call.success), Array(len=return_data.size, data=ext_call.return_data)
mem[ceil32(_param4.length) + 192] = bool(ext_call.success)
mem[ceil32(_param4.length) + 224] = 64
mem[ceil32(_param4.length) + 256] = _param2
mem[ceil32(_param4.length) + 288 len ceil32(_param2)] = mem[128 len ceil32(_param2)]
if ceil32(_param2) > _param2:
mem[ceil32(_param4.length) + _param2 + 288] = 0
return Mask(8 * -ceil32(_param4.length) + _param4.length + 32, 0, 0),
mem[_param4.length + 224 len ceil32(_param4.length) + -_param4.length + 32],
_param2,
mem[ceil32(_param4.length) + 288 len ceil32(_param2)]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment