Контракт TerritoryCrowdsale

Описание проблем

В контракте AddNewPlot были созданые токены SPACE Упаковки большого Земельного участка и соответствующие им токены SPACE Геохеш-участков. При помощи контракта CreateTerritory была создана и утверждена Заявка на Краудсейл Территории. Соответственно необходимо:

  • выпустить токены GALT, который будет выполнять функцию обьекта долевой собственности на Территорию и пая инвестиционного Фонда, который будет ее развивать;
  • для покупки Земельных участков на Аукционе земли и взаимодействия с другим функционалом Проекта у Участников проекта должна быть возможность купить токены GALT за ETH;
  • может быть неограниченное количество параллельных Краудсейлов Территории на разные Территории для привлечения средств для их покупки и развития;
  • Краудсейл может запускать контракт Аукциона земли на Территорию при запуске Краудсейл Территории или при его завершении;
  • выпуск GALT на конкретную Территорию должен быть фиксирован по времени, по сумме выпущенных GALT и по количеству привлекаемых Эфиров;
  • привлекаемые Эфиры нужно распределять между Оператором ввода Территории, Владельцем Территории и Фондом;
  • должна быть заложена возможность изменения и ввода новой логики проведения Краудсейлов Территорий.

Цели контракта

  • Обеспечить выпуск GALT токенов;
  • Обеспечить покупку GALT токенов любому пользователю за ETH;
  • Обеспечить запуск Аукциона земли на Территорию в начале или при завершении Генезиса GALT Территории;
  • Обеспечить несколько сценариев реализации выпуска GALT;
  • Обеспечить уничтожение непроданных GALT;
  • Обеспечить возврат Эфиров, если цель по привлечению Эфиров не будет достигнута;

Ограничения

Существует 2 первоначальных варианта исполнения Контракта:

  • Тип №1: Краудсейл Территории продает фиксированное количество GALT за фиксированное количество ETH. Краудсейл Территории выполняется фиксированное время. Если по истечении заданного времени Цель в количестве Эфиров не достигнута, то перечисленные Эфиры можно забрать обратно, а новые GALT просто не создаются. Если цель достигнута, то создаются GALT и те, кто перечислял Эфиры на контракт получают GALT, а те, кто должен получить Эфиры - Эфир.
  • Тип №2: Краудсейл Территории продает большое количество GALT без зафиксированной цели в Эфирах. Краудсейл Территории считается успешным при привлечении любой сумму Эфиров. Токены GALT передаются Участникам проекта сразу после перечисления Эфиров. Не распределенные токены GALT уничтожаются после завершения выполнения Краудсейл Территории.

Могут быть созданы любые дополнительные варианты реализации контракта TerritoryCrowdsale. Они могут быть включены в контракт GaltGenesisRegistry и запущены, если будет принята соответствующая заявка в контракте CreateTerritory.

Каждый тип контракта Краудсейла со своими особенностями будем делать отдельными контрактами.

Контракты - источники данных

  1. Контракт CreateTerritory.
  2. Контракт GaltGenesisRegistry.

Входные параметры

Параметр Название параметра Контракт - источник Тип данных
Количество выпускаемых токенов GALT на Территорию GaltMintAmmount Контракт CreateTerritory uint
Адрес Контракта Аукциона земли LandAuctionAdress Контракт CreateTerritory address
Адрес контракта Краудсейла GenesisID Контракт CreateTerritory address
Количество привлекамых Эфиров ETHAmmount Контракт CreateTerritory uint
Признак запуска Аукциона земли на Территорию (В начала / в конце/ не запускать) AuctionStartType Контракт CreateTerritory string
Длительность проведения Краудсейла GenesisDuration Контракт CreateTerritory day
Адрес Оператора ввода TerritoryOperatorAddress Контракт CreateTerritory address
Вознаграждение Оператора ввода TerritoryOperatorETH Контракт CreateTerritory address
Адрес Владельца Территории TerritoryOwnerAddress Контракт CreateTerritory address
Вознаграждение Владельца Территории TerritoryOwnerETH Контракт CreateTerritory address
Адрес Фонда TerritoryFundAddress Контракт CreateTerritory address
Вознаграждение Фонда TerritoryFundETH Контракт CreateTerritory address

Сценарий контракта

Сценарий 1: TerritoryCrowdsale общий случай Тип 1.

  1. Успешно принятая заявка в CreateTerritory добавила в контракт GaltGenesisRegistry следующую информацию:
Адрес контракта Краудсейла Территории Количество выпускаемых токенов GALT Флаг Выпущены / не выпущены id заявки на ввод новой территории из контракта CreateTerritory
Адрес контракта 55 000 не выпущены id заявки
  1. Деплой конкретного контракта Краудсейла Территории уже сделан.

  2. Пользователи отправляют Эфиры на контракт Краудсейла Территории. Фиксируется общее количество полученных Эфиров в переменной TotalGenesisEthAmmount и сколько перечислил каждый адрес.

Адрес отправителя ETH Количество ETH
Адрес отправителя ETH 10
Все остальные отправители ETH 50 000
  1. При каждом перечислении происходит проверка, что Краудсейла еще не закончен и что цель еще не достигнута. Это происходит с учетом параметра Погрешность сбора эфиров.

  2. Если Краудсейл закончен и цель не достигнута, то выставляется флаг неуспешного сбора средств и Каждый адрес, который отправлял Эфиры - может затребовать их обратно. Токены GALT не выпускаются.

Адрес контракта Краудсейла Территории Количество выпускаемых токенов GALT Флаг Выпущены / не выпущены id заявки на ввод новой территории из контракта CreateTerritory
Адрес контракта 55 000 не успешен id заявки

Владелец Территории вызывает метод и получает все токены SPACE, которые были переданы контракту SPACEAuctionRegistry обратно:

Токен SPACE Владелец
743883bs7GEOw24qgy48hgdhhqfhfhqw663w24qg464mbk Владелец Территории
686743883bs7GEOw24qgy48hgdhhqgddqw663w24qgumbd Владелец Территории
36374683bs7GEOw24qdhjsssdhhqgddqw47457w24qgumgga Владелец Территории
  1. Если Краудсейл Территории закончен и цель с учетом погрешности достигнута, то выставляется флаг успешного завершения.
Адрес контракта Краудсейла Территории Количество выпускаемых токенов GALT Флаг Выпущены / не выпущены id заявки на ввод новой территории из контракта CreateTerritory
Адрес контракта 55 000 успешен id заявки

Контракт TerritoryCrowdsale по id заявки и по соответствующей этой заявке записи в контракте SPACEAuctionRegistry запускает соответствующий контракт Аукциона земли.

Газ за все описанные выше действия платит последняя транзакция.

  1. Каждый адрес, который перечислял Эфиры на контракт может затребовать 95% GALT пропорционально перечисленным Эфирам.

  2. Владелец Территории своим адресом, Оператор Ввода своим адресом и Фонд любым адресом могут затребовать Эфиры, полученные при Краудсейле Территории в соответствии с суммами, указанными в Заявке на Краудсейл.

  3. 5% GALT может затребовать GALT FOUNDATION.

  4. Далее - контракт SpaceAuctionPack.

Спецификация контракта

  • Наследуется от OpenZeppelin Crowdsale[2] контракта
  • Использует OpenZeppelin TimedCrowdsale[3] для обеспечения периода действия контракта
  • Рейт продажи определяется при деплое контракта и не может быть изменен в процессе действия контракта
  • Количество GALT токенов определяется исходя из требований моделирования экономики контрактов
  • Завершение действия контракта происходит по истечению установленного времени или по факту продажи всех GALT токенов на контракте GALTGenesis

Детальный Сценарий пользователя и описание интерфейса

Ссылка на сценарий пользователя и описание интерфейса

Особенности реализации на Solidity

Особенности реализации на TypeScript

Неоднозначные вопросы и ответы на них

multisig команды ли? Что именно он должен представлять?

Какой процент от купленных токенов идет на multisig команды?

Референсы

  1. GALT Токен
  2. OpenZeppelin Crowdsale
  3. OpenZeppelin TimedCrowdsale

results matching ""

    No results matching ""