Skip to content

Instantly share code, notes, and snippets.

@zh
Last active November 4, 2021 10:29
Show Gist options
  • Save zh/7d8f88290b568dcdc9fc9ae242d42cc6 to your computer and use it in GitHub Desktop.
Save zh/7d8f88290b568dcdc9fc9ae242d42cc6 to your computer and use it in GitHub Desktop.
open source woocommerce contract
#
# Panoramix v4 Oct 2019
# Decompiled source of 0x3E0371bcb61283c036A48274AbDe0Ab3DA107a50
#
# Let's make the world open source
#
def storage:
owner is addr at storage 0
feeAccount1 is addr at storage 1
feeAccount2 is addr at storage 2
feeAccountToken is addr at storage 3
seller is mapping of struct at storage 4
balanceOfEthFee is uint256 at storage 5
stor5 is uint256 at storage 5 offset 1
feePercent is uint256 at storage 6
maxFee is uint256 at storage 7
def maxFee(): # not payable
return maxFee
def getSellerAddressPayment(address _sellerAddress, uint256 _orderId): # not payable
return seller[addr(_sellerAddress)][_orderId].field_256
def getBuyerAddressPayment(address _sellerAddress, uint256 _orderId): # not payable
return seller[addr(_sellerAddress)][_orderId].field_0
def getValuePayment(address _sellerAddress, uint256 _orderId): # not payable
return seller[addr(_sellerAddress)][_orderId].field_512
def balanceOfEthFee(): # not payable
return balanceOfEthFee
def payment(address _param1, uint256 _param2): # not payable
return seller[_param1][_param2].field_0,
seller[_param1][_param2].field_256,
seller[_param1][_param2].field_512,
seller[_param1][_param2].field_768
def feeAccount2(): # not payable
return feeAccount2
def feePercent(): # not payable
return feePercent
def owner(): # not payable
return owner
def getCurrencyPayment(address _sellerAddress, uint256 _orderId): # not payable
return seller[addr(_sellerAddress)][_orderId].field_768
def feeAccount1(): # not payable
return feeAccount1
def feeAccountToken(): # not payable
return feeAccountToken
#
# Regular functions
#
def setFeeAccount1(address _feeAccount1): # not payable
require owner == caller
feeAccount1 = _feeAccount1
def setFeeAccount2(address _feeAccount2): # not payable
require owner == caller
feeAccount2 = _feeAccount2
def setFeeAccountToken(address _feeAccountToken): # not payable
require owner == caller
feeAccountToken = _feeAccountToken
def transferOwnership(address _newOwner): # not payable
require owner == caller
require _newOwner
owner = _newOwner
def setFeePercent(uint256 _feePercent): # not payable
require owner == caller
require _feePercent <= maxFee
feePercent = _feePercent
def balanceOfToken(address _tokenAddress, address _Address): # not payable
require ext_code.size(_tokenAddress)
call _tokenAddress.balanceOf(address owner) with:
gas gas_remaining wei
args _Address
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
require return_data.size >= 32
return ext_call.return_data[0]
def transferFee(): # not payable
require owner == caller
call feeAccount1 with:
value stor5 wei
gas 2300 * is_zero(value) wei
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
require stor5 <= balanceOfEthFee
balanceOfEthFee -= stor5
call feeAccount2 with:
value balanceOfEthFee - stor5 wei
gas 2300 * is_zero(value) wei
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
balanceOfEthFee = 0
def payToken(address _tokenAddress, address _sellerAddress, uint256 _orderId, uint256 _value): # not payable
require _tokenAddress
require _sellerAddress
require _value > 0
require ext_code.size(_tokenAddress)
call _tokenAddress.allowance(address owner, address spender) with:
gas gas_remaining wei
args caller, this.address
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
require return_data.size >= 32
require ext_call.return_data >= _value
if not _value:
require ext_code.size(_tokenAddress)
call _tokenAddress.transferFrom(address from, address to, uint256 value) with:
gas gas_remaining wei
args caller, feeAccountToken, 0
else:
require feePercent * _value / _value == feePercent
require ext_code.size(_tokenAddress)
call _tokenAddress.transferFrom(address from, address to, uint256 value) with:
gas gas_remaining wei
args caller, feeAccountToken, feePercent * _value / 100 * 10^6
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
require return_data.size >= 32
if not _value:
require 0 <= _value
require ext_code.size(_tokenAddress)
call _tokenAddress.transferFrom(address from, address to, uint256 value) with:
gas gas_remaining wei
args caller, addr(_sellerAddress), _value
else:
require feePercent * _value / _value == feePercent
require feePercent * _value / 100 * 10^6 <= _value
require ext_code.size(_tokenAddress)
call _tokenAddress.transferFrom(address from, address to, uint256 value) with:
gas gas_remaining wei
args caller, addr(_sellerAddress), _value - (feePercent * _value / 100 * 10^6)
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
require return_data.size >= 32
seller[addr(_sellerAddress)][_orderId].field_0 = caller
seller[addr(_sellerAddress)][_orderId].field_256 = _sellerAddress
seller[addr(_sellerAddress)][_orderId].field_512 = _value
seller[addr(_sellerAddress)][_orderId].field_768 = _tokenAddress
return 1
def _fallback() payable: # default function
require calldata.size == 20
require call.value > 99999999999
mem[96] = calldata.size
mem[128 len calldata.size] = call.data[0 len calldata.size]
idx = 20
s = 1
t = 0
while idx > 0:
require idx - 1 < calldata.size
idx = idx - 1
s = 256 * s
t = (mem[idx + 127 len 1] * s) + t
continue
if not call.value / 10^10:
require 0 <= call.value
require call.value + balanceOfEthFee >= balanceOfEthFee
balanceOfEthFee += call.value
revert
require 10^10 * call.value / 10^10 / call.value / 10^10 == 10^10
require 10^10 * call.value / 10^10 <= call.value
require call.value - (10^10 * call.value / 10^10) + balanceOfEthFee >= balanceOfEthFee
balanceOfEthFee = call.value - (10^10 * call.value / 10^10) + balanceOfEthFee
require addr(99220 * Mask(8, 248, _5) >> 248)
require 10^10 * call.value / 10^10 > 0
if not 10^10 * call.value / 10^10:
require 0 <= 10^10 * call.value / 10^10
call addr(99220 * Mask(8, 248, _5) >> 248) with:
value 10^10 * call.value / 10^10 wei
gas 2300 * is_zero(value) wei
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
require balanceOfEthFee >= balanceOfEthFee
else:
require 10^10 * feePercent * call.value / 10^10 / 10^10 * call.value / 10^10 == feePercent
require 10^10 * feePercent * call.value / 10^10 / 100 * 10^6 <= 10^10 * call.value / 10^10
call addr(99220 * Mask(8, 248, _5) >> 248) with:
value (10^10 * call.value / 10^10) - (10^10 * feePercent * call.value / 10^10 / 100 * 10^6) wei
gas 2300 * is_zero(value) wei
if not ext_call.success:
revert with ext_call.return_data[0 len return_data.size]
require (10^10 * feePercent * call.value / 10^10 / 100 * 10^6) + balanceOfEthFee >= balanceOfEthFee
balanceOfEthFee += 10^10 * feePercent * call.value / 10^10 / 100 * 10^6
seller[addr(99220 * Mask(8, 248, _5) >> 248)][call.value - (10^10 * call.value / 10^10)].field_0 = caller
seller[addr(99220 * Mask(8, 248, _5) >> 248)][call.value - (10^10 * call.value / 10^10)].field_256 = addr(99220 * Mask(8, 248, _5) >> 248)
seller[addr(99220 * Mask(8, 248, _5) >> 248)][call.value - (10^10 * call.value / 10^10)].field_512 = 10^10 * call.value / 10^10
seller[addr(99220 * Mask(8, 248, _5) >> 248)][call.value - (10^10 * call.value / 10^10)].field_768 = 1
seller[addr(99220 * Mask(8, 248, _5) >> 248)][call.value - (10^10 * call.value / 10^10)].field_776 = 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment