Skip to content

Instantly share code, notes, and snippets.

@PillarDevelopment
Created April 4, 2018 10:30
Show Gist options
  • Select an option

  • Save PillarDevelopment/dab401309b1e9bfc52e304aafb810c08 to your computer and use it in GitHub Desktop.

Select an option

Save PillarDevelopment/dab401309b1e9bfc52e304aafb810c08 to your computer and use it in GitHub Desktop.
Функция массовой рассылки выпускаемых токенов по большому списку авторизованных адресов
pragma solidity ^0.4.21;
contract Airdrop is SimpleToken{
event Authorized(address members, uint timestamp);
event Mint(address unit, uint256 amount);
mapping(address=>bool) public allMembers; // содержит авторизованный адрес
address[] public members; // массив авторизованных адресов
uint256 public quantityMembers; // количество авторизованных адресов
function Airdrop() public SimpleToken(0, "Standart Token Coin", "STC"){}
// авторизация и добавление адреса в массив
function authorize(address newmembers) public onlyOwner {
require(newmembers != address(0x0)); // проверка на существование
require(!inTheList(newmembers)); // проверка что не был записан ранее
allMembers[newmembers] = true; // верификация
members.push(newmembers); //добаление в массив
emit Authorized(newmembers, now); //создание евента
quantityMembers++; //добавление в общее количество членов списка
}
// Проверка что не был добавлен ранее
function inTheList(address newmembers) private view returns(bool) {
return allMembers[newmembers];
}
// OpenZeppelin Mintable функция
function mint (address _to, uint256 _amount) onlyOwner public {
_amount = _amount*1e18;
totalSupply_ = totalSupply_.add(_amount);
balances[_to] = balances[_to].add(_amount);
emit Mint(_to, _amount);
emit Transfer(address(0), _to, _amount);
totalSupply = totalSupply_; // явная инициализация
balanceOf[_to] = balances[_to]; // явная инициализация
}
// Функция, где _inTheList - количество получателей, _amount - количество отправляемых токенов
function specTransfer(uint256 _inTheList, uint256 _amount) public onlyOwner {
require(_inTheList <= quantityMembers); // проверка что в массиве есть столько членов
for (uint64 i = 0; i<= _inTheList - 1; i++) { // итерация цикла,
address tempMembers = members[i]; // временная переменная в цикле для хранения авторизованного адреса
mint(tempMembers, _amount); // вызов минта
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment