Для чего нужно приложение:
1. Человек захотел кушать
2. Человек отправил запрос о том, что он хочет кушать, какую еду он хочет кушать, по какому адресу он проживает и сколько токенов он готов заплатить.
3. Другой человек принял запрос, доставил эту еду к заказчику.
4. Заказщик, получив еду отправил подтверждение, тем самым переведя токены на счет доставщика.
5. Доставщик захотел кушать...
- Поля
1. Владелец - инициализируется тем, кто загрузил контракт(owner)
2. Администратор - назначается владельцем(administrator)
-Функции и модификаторы:
1. Модификатор - "только владелец". Все функции с этим модификатором исполняются только владельцем контракта.(onlyOwner)
2. Модификатор - "только администратор". Все функции с этим модификатором могут испольняться администратором и владельцем.(onlyAdmin)
3. Функция смены владельца - меняет адрес владельца. Исполняется только владельцем. (changeOwner)
4. Функция добавления админа - меняет адрес админитратора. Исполняется только владельцем (addAdmin)
Для всех арифметических операций используется библиотека SafeMath. Для защиты от переполнения стэка
- Поля
1. Имя, символ, кол-во знаков после запятой. Основные для ERC20 компоненты.
2. Две bool переменные - canTransfer. Определяет возможность перевода средств между счетами.
3. Переменная totalSupply, которая является общим количеством выпущенных токенов.
4. Словари:
- Балансы счетов: ключ - адрес аккаунта, значение ключа - количество токенов на адресе.
- Словарь т.н. разрешений. Для обозначения того, сколько одному адресу можно снять токенов с другого адреса.
- Пользовательские функции
1. Узнать баланс. Принимает на вход адрес, выводит баланс токенов на этом адресе. (balanceOf)
2. Совершить перевод. Принимает на вход адрес получателя и сумму. Адрес отправителя инциализирует со значением отправителя транзакии. (transfer)
3. Разрешить снять сумму. Принимает на вход аргументы: адрес, которому разрешено снимать, количество, которое разрешено снимать. (aprove)
4. Узнать разрешенное количество. Принимает на вход два адреса: владельца суммы и того, кому разрешено снять. (allowance)
5. Перевести со счета. Аргументы: адрес куда перевести, откуда перевести, сколько перевести. Если есть разрешенное количество для снятие, тот, кому разрешили, может обращаться с ними как угодно.
- Административные функции:
1. Начать/остановить передачу токенов. Меняет значение глобальной переменной canTransfer. (startTransfer, stopTransfer)
2. Чеканить. Выпускаем больше токенов в обращение. Прибавляет значение к totalSupply, отправляет выпущенные токены, на какой-либо счет выбранный администратором.
3. Сжечь. Убирает какое-то количество токенов со счета, не добавляя их в totalSupply.
- Поля
1. Коэффициент - переменная отвечающая за цену токена в Эфирах.
2. Переменные стадий продаж. Даты начала трех стадий в unixtime.
3. Бонус - значение множителя. Использована для увеличения получаемых токенов за одну и ту же сумму в разные периоды продаж.
4. Bool переменная canSale. Относительно её значения определяется возможность покупки токенов.
5. Переменная coinCount. Определяет количество монет для ограниченного выпуска.
- Пользовательские функции
1. fallback функция. Выполняется при переводе эфира на адрес контракта. При переводе эфира на контракт, он принимает его численное значение в wei, для этого коэффициент - это не то, на что умножается количество эфира, а то, на что делится количество wei присланных пользователем. Включены все зависимости от стадии продаж, от текущего бонуса и от ограничений по продажам.
- Административные функции
1. Смена коэффициента. Меняет значение коэффициента на заданный администратором или владельцем.(changeCoef)
2. Начало распродажи токенов. Функция принимающая на вход переменные старта этапов распродажи в unixtime и бонусы на этих этапах. Для третьего этапа бонусов нет.
3. Функция для старта продаж токенов в ограниченных количествах с определенным коэффициентом. До заданного значения по заданному бонусу, которое принято на вход.
4. Начало/остановка продаж. Две функции отвечающие за смену глобальной переменной canSale. Для запрета или разрешения покупки токенов.
1. Добавить функции в контракт отвечающие за запрос, ответ, подтверждение и хранение данных о заказах.
2. Создать мобильное и веб-приложение на базе Web3.js или Web3.py