一、说明
波场TRX链上代币空投时需要消耗比较高的gas费用。降低gas费用的渠道主要有两种:
- 租用或者质押trx获取能量,使用能量和带宽来批量转账代币替换直接消耗trx空投代币的情况,可以降低70%左右的交易gas费用消耗。
- 优化合约代码,减少链上数量的修改调整,避免链上数据提交的此次
通常使用第三方的批量转账空投合约,会频繁的调用代币合约的transfer或者transferFrom函数向链上提交数据。并且合约之间调用会增加gas费用的消耗;频繁的调用transfer或者transferFrom函数无法有效的降低链上数据的调用次数。通过优化合约代码,减少发送者代币余额的减少次数,将所有批量转账的发送者交易此次整合为批量转账的一次交易,以此来减少批量空投的交易gas费用。
二、优化后的合约代码
function multiTransfer(address[] calldata _recipients, uint256[] calldata _values) public onlyOwner returns (bool) {
require(_recipients.length > 0, "ERC20 Error: min airdrop limit is 1 address");
require(_recipients.length < 2001,"ERC20 Error: max airdrop limit is 2000 addresses"); // to prevent overflow
require(_recipients.length == _values.length,"ERC20 Error: Mismatch between Address and value");
uint256 SCCC = 0;
for(uint i=0; i < _values.length; i++){
SCCC = SCCC + _values[i];
}
address sender = _msgSender();
uint256 fromBalance = balanceOf(sender);
require(fromBalance >= SCCC, "ERC20 Error: insufficient token");
_balances[sender] = _balances[sender].sub(SCCC, "ERC20: transfer amount exceeds balance");
for(uint i = 0; i < _recipients.length; i++){
_balances[_recipients[i]] = _balances[_recipients[i]].add(_values[i]);
emit Transfer(sender, _recipients[i], _values[i]);
}
return true;
}
将以上函数代码添加到代币合约中,可以减少sender地址批量转账后链上数据的提交次数。将对sender地址的所有批量转账次数整合为一次,最大限度的优化交易gas费用。
至此,完成波场链上代币合约中优化批量转账功能降低空投时的gas费用消耗所有操作流程。
pdf+视频波场链TRX发币教程及多模式组合合约源代码下载:
波场链TRX发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频波场链TRX发币教程及多模式组合合约源代码下载地址:
此内容仅供注册用户可见,请登录!
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册