Pre:
实现一个具有黑名单功能的erc20代币
github仓库地址: https://github.com/jerrychan807/cool-erc20/tree/main/blacklist
需求:
-
黑名单用户无法正常
transfer
-
管理员可配置黑名单里的地址
业务场景:
暂时能想到的
项目方 | 目的 |
---|---|
好人 | 将恶意用户、抢跑用户、机器人、非正常渠道获得大量代币的用户加入黑名单,相当于冻结它的资产 |
坏人 | rug、scam |
还想到一个骚操作,如果把swap的地址加入黑名单列表。。🤣也可以使得该erc20代币 无法正常的与swap交互,无法买卖、添加移除流动性。
部署:
如果是在hardhat
环境的话,不用先执行编译、部署了,可以直接yarn hardhat test
,会默认执行前两步。
编写合约:
黑名单判断:
1 | function _beforeTokenTransfer( |
一开始觉得这个erc20合约很简单,结果一写到黑名单判断的时候,第一次就写错了。。😅
还发现正确写法有两种,其中第一种可以更清晰地把错误原因写清楚。
看来还是要多code,多实践才行
测试:
Mocha测试框架
在写测试脚本时,有一个目前没接触过的测试需求:需要给用户设置黑名单后,给这个用户转账,然后希望这次转账报错。
1 | // 希望该函数报错的写法 |
在查文档的时候才知道。。hardhat
用到的是一个叫Mocha
的测试框架,后续如果还遇到新的测试需求可以查阅该文档。
Mocha是一个能够运行在Node和浏览器中的多功能的JavaScript测试框架,它让异步测试简单且有趣。
Mocha连续地运行测试,并给出灵活而精确的报告,同时能够将错误精确地映射到测试用例上。它托管在GitHub上。
测试结果:
符合预期:
1 | Token contract |
Summary:
-
看来还是要多code,多实践才行,再简单的需求,真正写起来的时候也很有可能出错。
-
写
hardhat
测试脚本时,如果遇到没见过的测试需求,可以查阅mocha
的文档 -
比如平时有看到别的项目用hardhat构建的,可以参考里面的test脚本,学学别人的写法
-
实践出真知🧐🧐🧐
-
实践出真知🧐🧐🧐
-
实践出真知🧐🧐🧐