Tokens

騙局:無法換回代幣

  • February 25, 2022

最近我從 PancakeSwap 買了一個代幣。看起來像是被騙了——它是新的,只有買入操作,沒有賣出操作。而且我也不能換回來。

我正在提供它的契約原始碼,如果有人解釋為什麼它不能出售,我會很高興:

#
#  Panoramix v4 Oct 2019 
#  Decompiled source of bsc:0xEF45178482b5868668D4ae8f2556D4F23c4Ffe51
# 
#  Let's make the world open source 
# 

def storage:
 owner is addr at storage 0
 newOwner is addr at storage 1
 symbol is array of uint256 at storage 2
 name is array of uint256 at storage 3
 decimals is uint8 at storage 4
 stor5 is uint256 at storage 5
 unknown1ee59f20Address is addr at storage 6
 balanceOf is mapping of uint256 at storage 7
 allowance is mapping of uint256 at storage 8

def name(): # not payable
 return name[0 len name.length]

def unknown1ee59f20(): # not payable
 return unknown1ee59f20Address

def decimals(): # not payable
 return decimals

def balanceOf(address _owner): # not payable
 require calldata.size - 4 >= 32
 return balanceOf[addr(_owner)]

def owner(): # not payable
 return owner

def symbol(): # not payable
 return symbol[0 len symbol.length]

def newOwner(): # not payable
 return newOwner

def allowance(address _owner, address _spender): # not payable
 require calldata.size - 4 >= 64
 return allowance[addr(_owner)][addr(_spender)]
#
#  Regular functions
#

def _fallback() payable: # default function
 revert

def totalSupply(): # not payable
 require balanceOf[0] <= stor5
 return (stor5 - balanceOf[0])

def transferOwnership(address _newOwner): # not payable
 require calldata.size - 4 >= 32
 require caller == owner
 newOwner = _newOwner

def unknown81f4f399(addr _param1): # not payable
 require calldata.size - 4 >= 32
 require caller == owner
 unknown1ee59f20Address = _param1

def acceptOwnership(): # not payable
 require caller == newOwner
 log OwnershipTransferred(
       address previousOwner=owner,
       address newOwner=newOwner)
 owner = newOwner
 newOwner = 0

def approve(address _spender, uint256 _value): # not payable
 require calldata.size - 4 >= 64
 allowance[caller][addr(_spender)] = _value
 log Approval(
       address owner=_value,
       address spender=caller,
       uint256 value=_spender)
 return 1

def transfer(address _to, uint256 _value): # not payable
 require calldata.size - 4 >= 64
 if unknown1ee59f20Address == _to:
     revert with 0, 'Please wait'
 require _value <= balanceOf[caller]
 balanceOf[caller] -= _value
 require _value + balanceOf[_to] >= balanceOf[_to]
 balanceOf[addr(_to)] = _value + balanceOf[_to]
 log Transfer(
       address from=_value,
       address to=caller,
       uint256 value=_to)
 return 1

def approveAndCall(address _spender, uint256 _amount, bytes _extraData): # not payable
 require calldata.size - 4 >= 96
 require _extraData <= 4294967296
 require _extraData + 36 <= calldata.size
 require _extraData.length <= 4294967296 and _extraData + _extraData.length + 36 <= calldata.size
 allowance[caller][addr(_spender)] = _amount
 mem[ceil32(_extraData.length) + 128] = _amount
 log Approval(address owner, address spender, uint256 value):
              Mask(8 * -ceil32(_extraData.length) + _extraData.length + 32, 0, 0),
              mem[_extraData.length + 160 len -_extraData.length + ceil32(_extraData.length)],
              caller,
              _spender,
 require ext_code.size(_spender)
 call _spender with:
      gas gas_remaining wei
     args caller, _amount, this.address, Array(len=_extraData.length, data=_extraData[all])
 if not ext_call.success:
     revert with ext_call.return_data[0 len return_data.size]
 return 0, 1

def transferFrom(address _from, address _to, uint256 _value): # not payable
 require calldata.size - 4 >= 96
 if not _from:
     if unknown1ee59f20Address == _to:
         revert with 0, 'Please wait'
 else:
     if unknown1ee59f20Address:
         if unknown1ee59f20Address == _to:
             revert with 0, 'Please wait'
     else:
         unknown1ee59f20Address = _to
 require _value <= balanceOf[addr(_from)]
 balanceOf[addr(_from)] -= _value
 require _value <= allowance[addr(_from)][caller]
 allowance[addr(_from)][caller] -= _value
 require _value + balanceOf[addr(_to)] >= balanceOf[addr(_to)]
 balanceOf[addr(_to)] += _value
 log Transfer(
       address from=_value,
       address to=_from,
       uint256 value=_to)
 return 1

我將不勝感激任何幫助將其換回並返還我的投資!

轉移中的這一行是禁止轉移:

def transfer(address _to, uint256 _value): # not payable
 ...
 if unknown1ee59f20Address == _to:
     revert with 0, 'Please wait'

如果你讀出unknown1ee59f20Address(儲存槽 6),它會顯示一個地址:682b9056b61a5087e2373a6ee6a7d3000752b46c: PancakeSwap V2: BUSD-STXC ( https://bscscan.com/address/682b9056b61a5087e2373a6ee6a7d3000752b46c#code )

所以合約主動禁止向pancake LP轉賬。

此地址可由所有者設置:

def unknown81f4f399(addr _param1): # not payable
 require calldata.size - 4 >= 32
 require caller == owner
 unknown1ee59f20Address = _param1

從“請稍候”消息來看,此令牌很可能會在一段時間後啟用傳輸(或者它只是一塊地毯)。無論如何,我會遠離禁止以任何形式轉移的代幣。

引用自:https://ethereum.stackexchange.com/questions/122554