bsc链上持币分红usdt轮询分发usdt,通过BABYTOKENDividendTracker降低gas费用的源代码实现

一、说明

在bsc链上常见的持币分红usdt的原理如下:

通过用户钱包地址里持有的本币数量,映射分红派发器铸造mint的分红tracker跟踪币BABYTOKENDividendTracker。通过筛选条件需要限制持币数量达到指定值时才能接收到持币分红兑换的usdt,因此不能直接以持有的本币作为分发的权重指标,必须mint一个分红跟踪tracker币BABYTOKENDividendTracker,满足分红usdt条件的钱包地址就mint铸造BABYTOKENDividendTracker币种,以BABYTOKENDividendTracker币种的数量和权重作为usdt分发的依据。

随着bsc链上交易手续费gas的升高,每笔本币的交易不但需要执行本币的transfer方法还需要执行BABYTOKENDividendTracker币种的mint或者burn方法,以保证BABYTOKENDividendTracker币种的数量和权重与本币的数量和权重比例对应统一一致。这就会导致交易的gas费用急剧升高。为了降低交易的整体gas费用,同时实现持币分红usdt的功能,通过以下完整版合约代码实现上述功能。

二、持币分红usdt合约核心代码,功能说明

  1. 代币构造函数及输入参数格式如下:
constructor(
        string memory name_,
        string memory symbol_,
        uint256 totalSupply_,
        address[4] memory addrs, // reward, router, marketing wallet, dividendTracker
        uint256[4] memory buyFeeSetting_, // rewards,lp,market,dead
        uint256[4] memory sellFeeSetting_,// rewards,lp,market,dead
        uint256 tokenBalanceForReward_,
        address serviceFeeReceiver_,
        uint256 serviceFee_
    ) payable ERC20(name_, symbol_)  {
        rewardToken = addrs[0];
        _marketingWalletAddress = addrs[2];

        buyTokenRewardsFee = buyFeeSetting_[0];
        buyLiquidityFee = buyFeeSetting_[1];
        buyMarketingFee = buyFeeSetting_[2];
        buyDeadFee = buyFeeSetting_[3];

        sellTokenRewardsFee = sellFeeSetting_[0];
        sellLiquidityFee = sellFeeSetting_[1];
        sellMarketingFee = sellFeeSetting_[2];
        sellDeadFee = sellFeeSetting_[3];

        require(buyTokenRewardsFee.add(buyLiquidityFee).add(buyMarketingFee).add(buyDeadFee) <= 25, "Total buy fee is over 25%");
        require(sellTokenRewardsFee.add(sellLiquidityFee).add(sellMarketingFee).add(sellDeadFee) <= 25, "Total sell fee is over 25%");

        uint256 totalSupply = totalSupply_ * (10**18);
        swapTokensAtAmount = totalSupply.mul(2).div(10**6); // 0.0
要归集BSC链上USDT,您需要执行以下步骤: 1. 创建BSC钱包地址并获取私钥。 2. 使用Binance Smart Chain的RPC接口连接到BSC网络。 3. 使用USDT的合约地址和ABI,调用USDT合约的transfer方法将USDT从原地址转移到BSC钱包地址。 以下是Java代码示例: ```java import java.math.BigInteger; import java.util.Arrays; import org.web3j.abi.FunctionEncoder; import org.web3j.abi.FunctionReturnDecoder; import org.web3j.abi.TypeReference; import org.web3j.abi.datatypes.Function; import org.web3j.abi.datatypes.Type; import org.web3j.abi.datatypes.generated.Uint256; import org.web3j.crypto.Credentials; import org.web3j.protocol.Web3j; import org.web3j.protocol.core.DefaultBlockParameterName; import org.web3j.protocol.core.methods.request.Transaction; import org.web3j.protocol.core.methods.response.EthGetTransactionCount; import org.web3j.protocol.core.methods.response.EthSendTransaction; import org.web3j.protocol.http.HttpService; import org.web3j.tx.RawTransactionManager; import org.web3j.utils.Convert; import org.web3j.utils.Numeric; public class USDTTransfer { public static void main(String[] args) throws Exception { // BSC钱包地址和私钥 String fromAddress = "0x..."; String privateKey = "..."; Credentials credentials = Credentials.create(privateKey); // BSC节点地址 String bscRpcUrl = "https://bsc-dataseed.binance.org/"; Web3j web3j = Web3j.build(new HttpService(bscRpcUrl)); // USDT合约地址和ABI String usdtContractAddress = "0x..."; String usdtContractAbi = "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"initialSupply\",\"type\":\"uint256\"},{\"name\":\"tokenName\",\"type\":\"string\"},{\"name\":\"decimalUnits\",\"type\":\"uint8\"},{\"name\":\"tokenSymbol\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}]"; // 获取USDT的decimals参数 Function decimalsFunction = new Function("decimals", Arrays.asList(), Arrays.asList(new TypeReference<Uint256>() {})); String encodedDecimals = FunctionEncoder.encode(decimalsFunction); org.web3j.protocol.core.methods.response.EthCall decimalsCall = web3j.ethCall(Transaction.createEthCallTransaction(fromAddress, usdtContractAddress, encodedDecimals), DefaultBlockParameterName.LATEST).send(); String decimalsHex = decimalsCall.getValue(); int decimals = Integer.parseInt(Numeric.cleanHexPrefix(decimalsHex), 16); // 转移USDT的数量 BigInteger amount = Convert.toWei("1", Convert.Unit.ETHER).multiply(BigInteger.TEN.pow(decimals)); // 获取BSC钱包地址的nonce EthGetTransactionCount ethGetTransactionCount = web3j.ethGetTransactionCount(fromAddress, DefaultBlockParameterName.LATEST).send(); BigInteger nonce = ethGetTransactionCount.getTransactionCount(); // 构造USDT转移交易数据 Function transferFunction = new Function("transfer", Arrays.asList(credentials.getAddress(), new Uint256(amount)), Arrays.asList(new TypeReference<Type>() {})); String encodedTransfer = FunctionEncoder.encode(transferFunction); // 使用USDT合约地址、nonce、gasPrice、gasLimit和交易数据构造交易 BigInteger gasPrice = Convert.toWei("5", Convert.Unit.GWEI).toBigInteger(); BigInteger gasLimit = BigInteger.valueOf(100000); Transaction transaction = Transaction.createFunctionCallTransaction(fromAddress, nonce, gasPrice, gasLimit, usdtContractAddress, encodedTransfer); // 签名交易并发送到BSC网络 RawTransactionManager rawTransactionManager = new RawTransactionManager(web3j, credentials); EthSendTransaction ethSendTransaction = rawTransactionManager.signAndSend(transaction); String transactionHash = ethSendTransaction.getTransactionHash(); System.out.println("USDT transfer transaction hash: " + transactionHash); } } ``` 请注意,您需要将代码中的钱包地址、私钥、USDT合约地址和ABI替换为您自己的值,并确保您的钱包具有足够的USDT余额以支付交易费用。此外,gasPrice和gasLimit参数应根据当前网络状况进行调整以确保交易能够成功被打包。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值