Пишем смарт-контракт Ethereum — это просто: Часть 9 — ICO — добавляем бонусы инвесторам

В прошлом уроке мы добавили к нашему ICO выпуск токенов для основателей и на баунти программы. Для полноценного ICO нам осталось только добавить бонусы для инвесторов

Что такое бонусы для инвесторов и зачем это нужно

Бонусы — это вознаграждение в виде дополнительных токенов для инвесторов которые раньше всего купили наши токены. Такой подход сильно мотивирует инвесторов вложится пораньше и побольше. К примеру, если инвестор вложится в наш проект в первые два дня начала ICO то  мы можем ему выпустить на 25% больше токенов к тем что он купил.

Вот так выглядела программа бонусов для Polybius ICO.

Стоимость одного PLBT  (название токена Polybius) была 10$. Таким образом если бы вы купили один токен в первый день, то получили бы еще 2.5 бесплатно.

А вот так выглядела программа бонуcов в TenX ICO.

Добавляем бонусы в ICO

Пусть наша программа бонусов делится на четыре периода ICO .

  1. первая четверть +25%
  2. вторая четверть +10%
  3. третья четверть +5%
  4. четвертая без бонусов

Тогда если tokens — количество купленных инвесторами токенов, start — дата начала ICO, а period — продолжительность ICO в днях, то наш код расчета бонуcных токенов будет выглядеть так:

Осталось только поправить функцию продажи токенов createTokens так, чтобы бонусные токены добавлялись к купленным:

Отлично, теперь полностью код нашего ICO выглядит так:

Если вы посмотрите еще раз на бонусную программу Polybius  и TenX, то увидите что они указывают периоды бонусов в днях. А у нас они указаны в математических терминах — в четвертях. Инвестору приятнее когда написано все человеческим языком — т.е. в днях. Поэтому вашим домашним заданием будет перевести расчет в дни.

В этом уроке мы ввели бонусную программу для инвесторов, что позволит нам мотивировать инвестора вложиться больше и быстрее. Теперь наш ICO полноценный!

Продолжение читать тут. Предыдущий урок тут.

Если у вас возникли вопросы то можете смело писать на электронную почту (раздел «контакты«). Также приветствуется критика.

Если статья показалась вам полезной и вы желаете отблагодарить автора, то это можно сделать отослав немного эфира на адрес 0xEA15Adb66DC92a4BbCcC8Bf32fd25E2e86a2A770.

Полный список уроков тут.

  1. Привет! Отличные и очень полезные статьи! Планируются ли какие-либо материалы по интеграции смарт-контрактов со сторонними платформами? Например, мне хотелось бы изучить момент внедрения UI для смарт-контракта в веб-сайт или мобильное приложение. Пока в интернетах мало доступной информации на эту тему.

    Спасибо за лучший туториал по смарт-контрактам!

  2. …И еще одна поправка.
    В «function createTokens()» в условиях пропущено «start +».
    В результате — срабатывают только скидки 25% и 0%.
    Исправил и добавил формализма для читабельности:

    За статьи — спасибо! Ждем следующих серий! 🙂

    • Спасибо, поправил. По формализму — не могу сказать что ваш вариант более читабельный, поэтому пока оставлю свой.

    • Я вот наоборот, убрал формализма для читабельности и добавил одну переменную, saleTime. Получилось вот так:

  3. uint restrictedTokens = issuedTokenSupply.mul(restrictedPercent).div(100 — restrictedPercent);
    может я чего то не понимаю но если мы в общем купили 100 токенов и наш процент как разработчиков 20 % то получиться такая формула
    100*20/100-20=2000/80=25 а должно получиться 20 . Так вот вопрос зачем в скобках от 100 отнимаем процент ? если просто должны поделить на 100?

    • Мы указываем процент не от количества проданных токенов, а от общего количества токенов (включая свои бонусные)

  4. скопировал код из данной темы и при попытке вызова fallback выдает вот это

    transact to Crowdsale.(fallback) pending …
    transact to Crowdsale.(fallback) errored: Error: gas required exceeds allowance or always failing transaction
    at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:1341136
    at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:918064
    at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:351880
    at o (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:370111)
    at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:354710
    at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:351880
    at u (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:354986)
    at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:355024
    at Ht (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:364393)
    at Object. (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:355113)
    at e.value (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:918979)
    at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:918546
    at n (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:370055)
    at o (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:370133)
    at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:354710
    at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:918512
    at n (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:370055)
    at o (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:370133)
    at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:354710
    at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:918885
    at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:355520
    at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:351880
    at u (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:354986)
    at s (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:354908)
    at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:354710
    at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:355500
    at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:918767
    at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:766706
    at n (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:134148)

Добавить комментарий