Loading...

如何通过代码层面来判断貔貅项目

技术博客1年前 (2023)更新 Dexnav
0

如何通过代码层面来判断貔貅项目

合约学习交流: Dexdao123http://t.me/

“Dex貔貅项目”是指那些利用去中心化金融技术(DeFi)和区块链技术,通过一些特

殊的设计来实现价格不断上涨、不能卖出的项目。这些项目通常宣称可以带来高收益和高回报率,但实际上是一种传销和诈骗手段。

在这些项目中,通常会设置一些奖励机制和高额利润承诺,吸引人们买入特定的代币。而这些代币价格的上涨,是由新买入者的资金注入所驱动,缺乏真正的内在价值支撑。同时,这些项目还设定了一些限制,如不能卖出、只能在特定的交易所交易等,使得参与者无法回收自己的投资。

辨别貔貅币代码思路

前置知识:

  1. 了解Solidity语言中的函数事务性。
  2. 了解Solidity中的gasLimit概念。
  3. 了解ERC-20标准代币的买入和授权、卖出流程。

步骤:

  1. 定义一个Solidity函数,内部包含ERC-20标准代币的买入、授权、卖出流程。
  2. 在调用该函数前,先调用估算gasLimit的函数,以便预先确定所需的gasLimit。
  3. 调用该函数,观察执行结果,若其中任何一步出现异常,则该代币可以被认为是貔貅币。
  4. 若没有异常,可进行正常的买入、卖出流程,以确定该代币是否为貔貅币。

注意事项:

  1. 调用估算gasLimit的函数会执行相应的代码,因此需要注意该函数所带来的成本和费用。
  2. 此方法并不能百分之百保证代币不是貔貅币,但是可以极大地降低风险。
  3. 在使用此方法时需要注意代币的实际情况和背景,以避免因为错误判断而损失资产。
    以下是一个简单的貔貅项目代码,我们通过这个来深化理解貔貅合约中关键的地方。
pragma solidity =0.8.4;
contract PiXiuCheck{

    IPancakeRouter02 public uniswapV2Router;

    constructor(
        address pancakeRuouter
    ){
        uniswapV2Router = IPancakeRouter02(pancakeRuouter);
    }

    function checkToken(address tokenAddress,address[] memory pathBuy,address pair) 
    external
    payable{
        // buy
        uniswapV2Router.swapExactETHForTokens{value:msg.value}(
            0,
            pathBuy,
            address(this),
            block.timestamp
        );

        uint256 tokenBalance = IERC20(tokenAddress).balanceOf(address(this));
        // approve
        IERC20(tokenAddress).approve(address(uniswapV2Router),tokenBalance);
        // sell
        IERC20(tokenAddress).transfer(pair,tokenBalance);
    }

    function setRoutor(address routor) 
    external{
        uniswapV2Router = IPancakeRouter02(routor);
    }
}

代码分析

这是一个名为PiXiuCheck的智能合约,使用的是Solidity语言,版本号为0.8.4。这个合约旨在检查代币是否是貔貅币,即只能买入不能卖出的代币。下面是这个合约的详细说明:

  1. 首先,在构造函数中,将传入的PancakeSwap路由合约地址存储到uniswapV2Router中。
  2. 接下来,定义了一个名为checkToken的公共函数,用于检查代币是否是貔貅币。
  3. 这个函数接受三个参数,分别是代币地址、购买代币的交易路径和代币对的地址。
  4. 在函数中,使用PancakeSwap路由合约的swapExactETHForTokens函数进行代币购买,购买的数量为msg.value(即发送交易的以太币数量)。
  5. 购买完成后,使用IERC20接口的balanceOf函数获取当前智能合约中代币的余额。
  6. 接着,使用IERC20接口的approve函数将代币授权给PancakeSwap路由合约,授权数量为代币的余额。
  7. 最后,使用IERC20接口的transfer函数将代币转移给代币对的地址,即将代币放入代币池中。
  8. 这个合约还提供了一个名为setRoutor的公共函数,用于更新PancakeSwap路由合约的地址。
  9. uniswapV2Router.swapExactETHForTokens{value:msg.value}(
                0,
                pathBuy,
                address(this),
                block.timestamp
            );
    

考虑到一般的土狗都是和wbnb(weth之类的)组的流动性,所以这里的pathBuy你可以固定的传[wbnbAddress,tokenAddress]数组

{value:msg.value}表示用于买入代币的wbnb数量由checkToken函数调用方传入的bnb数量决定

买入的代币填写的收币地址是本合约的地址,方便下面的授权和卖出

IERC20(tokenAddress).approve(address(uniswapV2Router),tokenBalance);
  • 这是授权的代码,在卖出任何ERC20代币前,需要将该Token无限授权给负责卖出的Router合约
IERC20(tokenAddress).transfer(pair,tokenBalance);

这是模拟卖出的代码,实际上卖出代币一般调用swapExactTokensForETH方法,但是卖出代币最核心的一步就是将Token转移到对应的LP流动性对的合约,很多貔貅代币都是在这一步上面动手脚,导致代币无法卖出

这里直接将买入的Token给LP流动性对的合约,功能相当于卖出

该函数配合调用方估测gasLimit的函数即可完成貔貅币的检查

功能不足

有些貔貅币自带交易开关,可以随时关闭交易,本文代码无法检测出这种潜在的貔貅

有些代币合约会限制用户只能卖出一部分代币,本文代码会将此种代币识别为貔貅币

BSC上已经创建了一个检查貔貅的智能合约,如果大家有需要可以调用这个智能合约的方法进行调用。BSC智能合约地址:0xd269d17D1b1C61E03d795e856545858E4fbc5de1

合约学习交流: Dexdao123http://t.me/

© 版权声明

相关文章

暂无评论

暂无评论...