说在前头

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) externalpayable{// buyuniswapV2Router.swapExactETHForTokens{value:msg.value}(0,pathBuy,address(this),block.timestamp);uint256 tokenBalance = IERC20(tokenAddress).balanceOf(address(this));// approveIERC20(tokenAddress).approve(address(uniswapV2Router),tokenBalance);// sellIERC20(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调用智能合约等教程

辨别貔貅币的一种代码思路相关推荐

  1. 分布式与人工智能课程(part7)--两种绘图思路

    学习笔记,仅供参考,有错必纠 文章目录 两种绘图思路 函数式绘图 对象式绘图 对象式子图 方式1: ax=plt.subpolt(121) 方式2: ax=fig.add_sub(121) 方式3: ...

  2. Android记录日志方式,关于Android中处理崩溃异常和记录日志的另一种实现思路

    我们写程序的时候都希望能写出一个没有任何Bug的程序,期望在任何情况下都不会发生程序崩溃.不过理想是丰满的,现实是骨感的.没有一个程序员能保证自己写的程序绝对不会出现异常崩溃.特别是针对用户数达到几十 ...

  3. HAL库版STM32双轮自平衡车(一) ———代码思路和PID基础精讲

    系列文章目录 HAL库版STM32双轮自平衡车(一) ---代码思路和PID的简单介绍(本篇) HAL库版STM32双轮自平衡车(二) --- CubeMX的配置.原理图接线.物料准备 HAL库版ST ...

  4. Verilog 序列信号发生器的三种设计思路

    文章目录 前言 一.由移位寄存器构成 二.由移位寄存器和组合逻辑电路构成 三.由计数器构成 前言 在数字电路中, 序列信号是指在同步脉冲作用下循环地产生一串周期性的二进制信号.能产生这种信号的逻辑器件 ...

  5. 用html实现抽奖大转盘,【项目实战】用CSS实现一个抽奖转盘(附详细代码+思路)...

    原标题:[项目实战]用CSS实现一个抽奖转盘(附详细代码+思路) 效果 基本是用CSS实现的,没有用图片,加一丢丢JS. 完全没有考虑兼容性. 首先画一个转盘 < htmllang= " ...

  6. linux批量删除后门的代码,Linux_用批处理写的后门 永不被杀,代码思路是影子鹰DESERT朋友的 - phpStudy...

    用批处理写的后门 永不被杀 代码思路是影子鹰DESERT朋友的,原代码比较麻烦,我做了改进,这个后门优点就是小而且不会被杀,放到SYSTEM32目录下就可以了 ,代码如下: @echo off @at ...

  7. java导出文件大数据量一种处理思路:多文件压缩导出

    java导出文件大数据量一种处理思路:多文件压缩导出:1,查询的时候分页查询确定总的文件个数:totalExcel; 总条数:count; 单个excel设定的行数:SINGLE_EXCEL_NUM; ...

  8. 泰山OFFICE技术讲座:关于文字方向的几种实现思路

    WORD正文的文字方向,只有3种,文本框可有5种.这种区分并无必要.从技术上来说,有几种实现思路?实现方案还是很多的. 文字方向,实际上影响的是本页面的直接内容,比如文字.绕排.如果有表格,布局在顶部 ...

  9. 【性能优化】网络编程 - PHP - 使用TCP长连接的一种优化思路 - 学习/实践

    1.应用场景 主要了解学习如何基于PHP使用TCP长连接的一种优化思路. 2.学习/参考 文档阅读 PHP - CGI, Fast-FGI, PHP-FPM - 学习/实践 php使用tcp长连接的一 ...

最新文章

  1. node项目部署到服务器报错,记一次部署node项目到centos服务器经历
  2. mysql注入反弹_Discuz!x xss反弹后台无防御sql注入getshell(附带exploit)
  3. 全排列算法原理和实现
  4. ios android cpu占用率,iPhone-iOS-从应用程序获取CPU使用率
  5. C3P0连接池工具类使用
  6. Linux配置本地yum源(RHEL8)
  7. python查找指定文件夹_python实现在目录中查找指定文件的方法
  8. 安卓mysql修改_手动修改Android数据库数据
  9. bootstrap表格插件php,深入了解Bootstrap table表格插件(一)
  10. vi/vim使用进阶: quickfix
  11. 计算机一级要下什么软件练习,国家计算机一级MS OFFICE练习软件
  12. python3.5安装PyHook3
  13. (1)初探android——客户端开发学习
  14. JavaScript Debugger 原理
  15. 计算机在智能建筑中的应用,【计算机技术在建筑智能化中的应用研究原稿_0材料】...
  16. 学习WPF之解决方案和项目结构
  17. 盘点电脑速度变慢的七大原因
  18. 哈尔滨工业大学软件构造课程笔记第三章第四节
  19. 使用docker安装ubuntu镜像
  20. Win32DiskImager写img到u盘报“拒绝访问”解决办法

热门文章

  1. 数据告诉你:中国足球还有理论性出线的可能吗?
  2. javascript报错BigNumber的overflow错误?怎么解决
  3. 【Linux】Shell 特殊符号总结 数组
  4. route和bridge是什么意思_vue-router中router和route的区别
  5. 人工智能:极大极小算法
  6. 八零后月薪56K老程序员感慨人生的起起伏伏,跳槽居然没地方让我跳!
  7. 设备选型(选择交换机、选择路由器的技能指标)
  8. 【shell】shell 函数
  9. springboot flowable 工作流
  10. 数字化转型思考的延伸问题