//Объявляем версию солидити pragma solidity ^0.4.11; //Инициализация контракта contract MyFirstERC20Coin { //Объявляем переменную в которой будет название токена string public name; //Объявляем переменную в которой будет символ токена string public symbol; //Объявляем переменную в которой будет число нулей токена uint8 public decimals; //Объявляем переменную в которой будет общее число токенов uint256 public totalSupply; //Объявляем маппинг для хранения балансов пользователей mapping (address => uint256) public balanceOf; //Объявляем маппинг для хранения одобренных транзакций mapping (address => mapping(address => uint256)) public allowance; //Объявляем евент для логгирования события перевода токенов event Transfer(address from, address to, uint256 value); // Объявляем евент для логгирования события одобрения перевода токенов event Approval(address from, address to, uint256 value); //Функция инициализации контртакта function MyFirstERC20Coin() { //Указываем число нулей decimals = 8; //Объявляем общее число токенов, которое будет создано при инициалзации totalSupply = 1000000 * (10 ** uint256(decimals)); //"Отправляем" все токены на баланс того, кто инициализировал создание контракт balanceOf[msg.sender] = totalSupply; //Указываем название токена name = "MyFirstERC20Coin"; // Указываем символ токена symbol = "NMS"; } //Внутренняя функция для перевода токенов function _transfer(address _from, address _to, uint256 _value) internal { //Проверка на пустой адрес require(_to != 0x0); //Проверка того, что у отправителя хватает токенов для перевода require(balanceOf[_from] >= _value); //Проверка на переполнение require(balanceOf[_to] + _value >= balanceOf[_to]); //Токен списывается у отправителя balanceOf[_from] -= _value; //Токен прибавляется у получателя balanceOf[_to] += _value; //Евент перевода токенов Transfer(_from, _to, _value); } //Функция для перевода токенов function transfer(address _to, uint256 _value) public { //Вызов внутренней функции перевода _transfer(msg.sender, _to, _value); } //Функция для перевода "одобренных" токенов function transferFrom(address _from, address _to, uint256 _value) public { //Проверка что токены были выделены аккаунтом _from для аккаунта _to require(_value <= allowance[_from][_to]); //Уменьшаем число "одобренных" токенов allowance[_from][_to] -= _value; //Отправка токенов _transfer(_from, _to, _value); } //Функция для "одобрения" перевода токенов function approve(address _to, uint256 _value) public { //Записываем в маппинг число "одобренных" токенов allowance[msg.sender][_to] = _value; //Вызов эвента для логгирования события одобрения перевода токенов Approval(msg.sender, _to, _value); } }
0.4.18