写点什么

怎么开发一个貔貅币合约?代码教程全公开

作者:加密先生
  • 2023-03-01
    广东
  • 本文字数:1754 字

    阅读完需:约 6 分钟

貔貅读音是 pí xiū,它一种古老的猛兽,与龙、凤、龟、麒麟并称为五大瑞兽,别称“辟邪、天禄、百解”。每逢新春元宵佳节或喜庆之日,广东湛江的吴川市梅菉头的群众都要舞貔貅舞,或配合国技武术队伍和各式飘色,共同游行表演庆贺节日,以祈福驱邪,保佑平安。


本来是一头瑞兽,但是在币圈,貔貅变为了不详之兽,是韭菜的天敌,任何人遇到貔貅都要绕道而行。这到底是为什么呢?今天,就给大家解释一下貔貅盘的意思,以及如何开发一个貔貅的合约,并附上详细的代码。


1、貔貅代币是什么意思?


貔貅盘指的是一种只能购买,不能卖出的代币合约。由于只能买不能卖,使其代币价格会一路走高,这样就会不断的吸引更多的散户进入。如此循环往复,直到最后,项目方撤池子跑路,完成一次资金诈骗。


这种资金盘为什么叫貔貅盘呢?据传说,上古时期貔貅在天庭犯了戒,被玉帝揍的肛门封闭了,只能吃不能拉。这种只吃不拉的特点,就和貔貅盘“只买不卖”的特点很像,所以貔貅盘的名字便由此而来。


2、如何撰写一个貔貅合约代码


‘貔貅币合约最大的特点就是:只有合约拥有者能够卖出代币,其他人无法卖出。对此,需要对应使用到三种函数:构造函数、铸造函数以及转账函数。


构造函数:初始化代币的名称和代号,并根据去中心化交易所的的原理计算 LP 合约地址,这个地址会在 _beforeTokenTransfer() 函数中用到。


铸造函数 mint():仅 owner 地址(合约拥有者)可以调用,用于铸造貔貅代币。


_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 < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); //将tokenA和tokenB按大小排序    bytes32 salt = keccak256(abi.encodePacked(token0, token1));    // calculate pair address    pair = address(uint160(uint(keccak256(abi.encodePacked(    hex'ff',    factory,    salt,    hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f'    )))));}
/** * 铸造函数,只有合约所有者可以调用 */function mint(address to, uint amount) public onlyOwner { _mint(to, amount);}
/** * @dev See {ERC20-_beforeTokenTransfer}. * 貔貅函数:只有合约拥有者可以卖出 */function _beforeTokenTransfer( address from, address to, uint256 amount) internal virtual override { super._beforeTokenTransfer(from, to, amount); // 当转账的目标地址为 LP 时,会revert if(to == pair){ require(from == owner(), "Can not Transfer"); }}
复制代码


3、貔貅币开发演示


为了降低演示成本,我在 Goerli 测试网上部署 Pixiu 合约,并在 uniswap 交易所中演示。其实 Uni 和 pancake 一样,你学会了在以太坊上如何部署,同样可以复制到币安链上,没有太大区别。


1):部署貔貅合约


2):调用 mint() 函数,给自己铸造 100000 枚貔貅币。


3):进入 uniswap 交易所,为貔貅币创造流动性(v2),提供 10000 貔貅币和 0.1 ETH。


4):出售 100 貔貅币,能够操作成功。


5):切换到另一个账户,使用 0.01 ETH 购买貔貅币,能够操作成功。


6)出售貔貅币,无法弹出交易,故而不能卖出


至此,整个貔貅盘的合约开发教程就到这里结束了。如果你没有分析貔貅盘的能力,可以借助 ave 等第三方平台进行检测。总而言之,了解貔貅合约的原理和预防方法,可以显著减少你买到貔貅盘的概率,让你的资金更安全。如果在开发过程中遇到什么困难或者问题,也欢迎大家随时找我讨论了解。


wx:btc6540,电报:@btc6540

用户头像

加密先生

关注

区块链dapp开发,v:btc6540 2023-02-07 加入

区块链工程师,专业开发

评论

发布
暂无评论
怎么开发一个貔貅币合约?代码教程全公开_加密先生_InfoQ写作社区