S10. 貔貅

您所在的位置:网站首页 给我们讲一下貔貅 S10. 貔貅

S10. 貔貅

2024-03-26 18:29| 来源: 网络整理| 查看: 265

WTF Solidity 合约安全: S10. 貔貅

我最近在重新学 solidity,巩固一下细节,也写一个“WTF Solidity 极简入门”,供小白们使用(编程大佬可以另找教程),每周更新 1-3 讲。

推特:@0xAA_Science|@WTFAcademy_

社区:Discord|微信群|官网 wtf.academy

所有代码和教程开源在 github: github.com/AmazingAng/WTF-Solidity

这一讲,我们将介绍貔貅合约和预防方法(英文习惯叫蜜罐代币 honeypot token)。

貔貅学入门​

貔貅是中国的一个神兽,因为在天庭犯了戒,被玉帝揍的肛门封闭了,只能吃不能拉,可以帮人们聚财。但在Web3中,貔貅变为了不详之兽,韭菜的天敌。貔貅盘的特点:投资人只能买不能卖,仅有项目方地址能卖出。

通常一个貔貅盘有如下的生命周期:

恶意项目方部署貔貅代币合约。宣传貔貅代币让散户上车,由于只能买不能卖,代币价格会一路走高。项目方rug pull卷走资金。

学会貔貅合约的原理,才能更好的识别并避免被割,才能做一个顽强的韭菜!

貔貅合约​

这里我们介绍一个极简的ERC20代币貔貅合约Pixiu。在该合约中,只有合约拥有者可以在uniswap出售代币,其他地址不能。

Pixiu 有一个状态变量pair,用于记录uniswap中 Pixiu-ETH LP的币对地址。它主要有三个函数:

构造函数:初始化代币的名称和代号,并根据 uniswap 和 create2 的原理计算LP合约地址,具体内容可以参考 WTF Solidity 第25讲: Create2。这个地址会在 _beforeTokenTransfer() 函数中用到。mint():铸造函数,仅 owner 地址可以调用,用于铸造 Pixiu 代币。_beforeTokenTransfer():ERC20代币在被转账前会调用的函数。在其中,我们限制了当转账的目标地址 to 为 LP 的时候,也就是韭菜卖出的时候,交易会 revert;只有调用者为owner的时候能够成功。这也是貔貅合约的核心。// 极简貔貅ERC20代币,只能买,不能卖contract HoneyPot is ERC20, Ownable { address public pair; // 构造函数:初始化代币名称和代号 constructor() ERC20("HoneyPot", "Pi Xiu") { address factory = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f; // goerli uniswap v2 factory address tokenA = address(this); // 貔貅代币地址 address tokenB = 0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6; // goerli WETH (address token0, address token1) = tokenA


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3