如何通过代码层面来判断貔貅项目
如何通过代码层面来判断貔貅项目
合约学习交流: Dexdao123http://t.me/
“Dex貔貅项目”是指那些利用去中心化金融技术(DeFi)和区块链技术,通过一些特
殊的设计来实现价格不断上涨、不能卖出的项目。这些项目通常宣称可以带来高收益和高回报率,但实际上是一种传销和诈骗手段。
在这些项目中,通常会设置一些奖励机制和高额利润承诺,吸引人们买入特定的代币。而这些代币价格的上涨,是由新买入者的资金注入所驱动,缺乏真正的内在价值支撑。同时,这些项目还设定了一些限制,如不能卖出、只能在特定的交易所交易等,使得参与者无法回收自己的投资。
辨别貔貅币代码思路
前置知识:
- UnderstandingSolidity语言中的函数事务性。
- 了解Solidity中的gasLimit概念。
- 了解ERC-20标准代币的买入和授权、卖出流程。
步骤:
- 定义一个Solidity函数,内部包含ERC-20标准代币的买入、授权、卖出流程。
- 在调用该函数前,先调用估算gasLimit的函数,以便预先确定所需的gasLimit。
- 调用该函数,观察执行结果,若其中任何一步出现异常,则该代币可以被认为是貔貅币。
- 若没有异常,可进行正常的买入、卖出流程,以确定该代币是否为貔貅币。
注意事项:
- 调用估算gasLimit的函数会执行相应的代码,因此需要注意该函数所带来的成本和费用。
- 此方法并不能百分之百保证代币不是貔貅币,但是可以极大地降低风险。
- 在使用此方法时需要注意代币的实际情况和背景,以避免因为错误判断而损失资产。
以下是一个简单的貔貅项目代码,我们通过这个来深化理解貔貅合约中关键的地方。
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。这个合约旨在检查代币是否是貔貅币,即只能买入不能卖出的代币。下面是这个合约的详细说明:
- 首先,在构造函数中,将传入的PancakeSwap路由合约地址存储到uniswapV2Router中。
- 接下来,定义了一个名为checkToken的公共函数,用于检查代币是否是貔貅币。
- 这个函数接受三个参数,分别是代币地址、购买代币的交易路径和代币对的地址。
- 在函数中,使用PancakeSwap路由合约的swapExactETHForTokens函数进行代币购买,购买的数量为msg.value(即发送交易的以太币数量)。
- 购买完成后,使用IERC20接口的balanceOf函数获取当前智能合约中代币的余额。
- 接着,使用IERC20接口的approve函数将代币授权给PancakeSwap路由合约,授权数量为代币的余额。
- 最后,使用IERC20接口的transfer函数将代币转移给代币对的地址,即将代币放入代币池中。
- 这个合约还提供了一个名为setRoutor的公共函数,用于更新PancakeSwap路由合约的地址。
-
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/
Please specify source if reproduced如何通过代码层面来判断貔貅项目 | Dexnav 区块链导航网