Skip to content

Instantly share code, notes, and snippets.

@ImanMousavi
Last active January 9, 2023 07:06
Show Gist options
  • Save ImanMousavi/046f663e959a6b23213afd35f214a5c7 to your computer and use it in GitHub Desktop.
Save ImanMousavi/046f663e959a6b23213afd35f214a5c7 to your computer and use it in GitHub Desktop.
This DAPP was used to send token or ETH to many addresses in one transaction, and that can help user to save tx fee
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract BulkSender is Ownable {
using SafeMath for uint256;
uint256 public txFee;
uint256 public memberFee;
address payable feeWallet;
mapping(address => bool) memberStatus;
receive() external payable {}
fallback() external payable {}
function setFeeWallet(address payable _wallet) public payable onlyOwner {
feeWallet = _wallet;
}
function setTxFee(uint256 _amount) public onlyOwner{
txFee = _amount;
}
function setMemberFee(uint256 _amount) public onlyOwner {
memberFee = _amount;
}
function revokeMember(address _toBeRevoked) public onlyOwner {
memberStatus[_toBeRevoked] = false;
}
function buyMembership() external payable {
require(msg.value >= memberFee);
require(feeWallet.send(msg.value));
memberStatus[msg.sender] = true;
}
function isMember(address _member) public view returns(bool) {
return memberStatus[_member];
}
function bulksendToken(IERC20 _token, address[] calldata _receivers, uint256[] calldata _values) public payable
{
uint256 msgValue = msg.value;
bool memStatus = isMember(msg.sender);
if(memStatus == false) {
require(msgValue >= txFee);
}
require(_receivers.length == _values.length);
for (uint256 i = 0; i < _receivers.length; i++) {
require(_token.transferFrom(msg.sender, _receivers[i], _values[i]));
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment