辨别貔貅币的一种代码思路
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
说在前头
Web3是一种新兴的网络概念由于某些原因导致我们能够接触到的相关技术知识实在有限每当我遇见技术瓶颈总是不能找到充足的资料这也让我萌生了填补这片空白知识的冲动。“Hello Web3” 这个专栏会尽力将我掌握的web3 知识分享给大家。如果分享的知识能帮助到大家希望能够 关注、点赞 支持作者
本人已在github上发布Web3j工具欢迎使用和star
辨别貔貅币的一种代码思路
知识前置
-
貔貅币指的是一类只能买入不能卖出的币对喜欢冲土狗的老兄伤害极大
-
solidity中的函数具有事务性函数中任何代码执行失败所有步骤都会回滚
-
执行智能合约前估算gasLimit的函数实际上是执行了相关函数但是没有提交
思路剖析
-
貔貅币无法卖出我们只需要将买入、授权、卖出三个流程全部走一遍就可知道这个币是否是貔貅币。
-
但是将三个流程逐个走一遍需要花费一定的成本和手续费(gas)等待链上反馈执行信息的流程也比较缓慢。
-
将这三个步骤放入到一个solidity函数中配合估算gasLimit的函数即可模拟对一个币的买入卖出全过程且无需任何成本。
代码展示
为了避免代码长度影响文章篇幅所以去掉了IERC20、IPancakeRouter01、IPancakeRouter02等引用文件只展示最精华的部分
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);
}
}
代码分析
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
以下是我将检测貔貅币功能填充到discord机器人的截图
保持对作者的关注后续会分享各种合约的源码解析java调用智能合约等教程
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |