BEP20实现带有黑白名单功能的合约代码。通过白名单可以限制部分钱包地址要执行某些特定的功能,或者绕开某些特定功能。比如目前主流的交易手续费(通缩,燃烧,基金会地址回流,加池分红,持币分红,持币生息)等功能都要在每一笔交易时实现扣除部分本币作为交易手续费。另外在添加资金池或者撤销流动性时都会收取部分本币手续费。但是对特定的钱包地址,比如主钱包地址需要设置免手续费,免通缩,免加池撤池手续费。
通过黑白名单功能实现设置特权账户,特权账户的地址可以绕开手续费限制。
黑名单可以强制用户必须收取交易手续费用。
实现黑白名单功能的合约核心代码部分如下:
contract Token is { mapping(address => bool) private _isExcludedFromFee; constructor () public { _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _balances[_msgSender()] = _totalSupply; emit Transfer(address(0), _msgSender(), _totalSupply); }
transfer函数部分代码如下:
function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); /** * 省略部分逻辑代码 */ if( _isExcludedFromFee[sender] || _isExcludedFromFee[recipient] || //省略部分逻辑代码 ) { removeAllFee(); } _transferStandard(sender, recipient, amount); if( _isExcludedFromFee[sender] || _isExcludedFromFee[recipient] || //省略部分逻辑代码 ) { restoreAllFee(); } } }
通过黑白名单来限制特定用户执行某些功能或者绕开某些功能。
合约部署完成后,可以在链上触发相关的黑白名单功能,最终实现对特定钱包地址是设置。
注意:设置了黑白名单功能后,对合约上的gas消耗是有影响的,如果设置的功能过于复杂是会大幅度提升转账的gas费用的,尤其是对于功能已经比较复杂的合约来说,譬如目前的燃烧+通缩+基金会地址回流+加持分红+持币分红+持币生息模式的合约代码,因此,要谨慎设置黑白名单功能,或者简化繁琐的功能,以平衡过高的gas费用。
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册