Аукцион Эмиссии - Требования

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

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

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

  • Обеспечить выпуск GALT в долгосрочной перспективе и справедливое распределение GALT между Инвесторами и Владельцами земли.
  • Обеспечить справедливое распределение поступающих Эфиров между разными фондами.

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

Сценарий 1: Аукцион Эмиссии для Инвестора

Аукцион эмиссии выполняется раундами по 23 часа. За каждый раунд

  1. Любой пользователь без ограничений может запустить нулевой раунд Аукциона Эмиссии при условии, что Генезис завершен. Для этого пользователь должен отправить Эфиры на контракт. Если раунд эмиссии не является нулевым, то его запуск так же инициирует самая первая транзакция пользователя.
  2. Пользователь запустил раунд Аукциона Эмиссии и оплатил Газ. Контракт фиксирует временные рамки выполнения раунда эмиссии.
  3. Контракт берет значения total supply токена GALT и рассчитывает размер эмиссии на раунд. Размер эмиссии равен X% за каждый раунд.
  4. Контракт берет общее значение репутации всех пользователей во всех Фондах, т.е. фактически всю сумму заложенных GALT за все участки и рассчитывает стоимость одного пункта репутации за 1 GALT. Например:

Общая репутация во всех фондах на начало Раунда Эмиссии = 500 000

  1. Пользователь А - Инвестор отправляет Эфиры на контракт Аукциона Эмиссии. Контракт определяет в какой раунд Эмиссии попала транзакция пользователя. В момент выполнения транзакции Пользователем вносится запись в реестр о том, сколько этот пользователь перевел на текущем раунде в следующем виде:

До выполнения Транзакции пользователа А:

Номер Раунда Адрес пользователя Сумма отправленных пользователем Эфиров за раунд, ETH.
0 0x477...b65 22
0 Остальные участники 70

После выполнения Транзакции Пользователем А:

Номер Раунда Адрес пользователя Сумма отправленных пользователем Эфиров за раунд, ETH.
0 0x477...b65 22
0 Остальные участники 70
0 Пользователь А 8
  1. Контракт изменяет значение переменной, которая содержит общее количество Эфиров, получленных на текущем раунде в отдельном реестре.

До выполнения Транзакции пользователа А:

Номер Раунда Всего Эфиров получено за раунд, ETH.
0 92

После выполнения Транзакции Пользователем А:

Номер Раунда Всего Эфиров получено за раунд, ETH.
0 100
  1. Пользователь А отправляет транзакцию на получение GALT из Аукциона. Пользователь передает номер раунда и оплачивает газ. Контракт проверяет, что раунд уже завершен. Контракт проверяет, что пользователь еще не получил GALT за этот раунд. Если раунд завершен, то контракт переводит GALT Пользователю А по следующей формуле "Сумма отправленных пользователем Эфиров за раунд/Всего Эфиров получено за раунд Количество выпускаемых GALT за раунд 0,5"

  2. Контракт вносит информацию о том, что все токены GALT Пользователем А за раунд получены в Реестр.

Номер Раунда Адрес пользователя Флаг получено/ не получено
0 0x477...b65 False
0 Остальные участники Разные значения
0 Пользователь А True

Сценарий 2: Аукцион Эмиссии для Владельца земли

  1. Пользователь Б - Владелец земли отправляет транзакцию и оплачивает Газ. Пользователь Б передает значение своей текущей глобальной репутации во всех фондах контракту.
  2. Контракт записывает значение глобальной репутации Пользователя Б во всех фондах в реестр репутаций аукциона эмиссии:
Номер Раунда Адрес пользователя Глобальная репутация пользователя за раунд
0 0x477...b65 2400
0 Остальные участники 495 000
0 Пользователь Б 3600
  1. Пользователь Б отправляет транзакцию на получение GALT из Аукциона. Пользователь передает номер раунда и оплачивает газ. Контракт проверяет, что раунд уже завершен. Контракт проверяет, что пользователь еще не получил GALT за этот раунд. Если раунд завершен, то контракт переводит GALT Пользователю Б по следующей формуле "Глобальная репутация пользователя за раунд/Общая репутация во всех фондах на начало Раунда Эмиссии Количество выпускаемых GALT за раунд 0,5".
  2. Контракт вносит информацию о том, что все токены GALT Пользователем Б за раунд получены в Реестр.
Номер Раунда Адрес пользователя Флаг получено/ не получено
0 0x477...b65 False
0 Остальные участники Разные значения
0 Пользователь Б True

Сценарий 3: Аукцион Эмиссии для Делегата Фонда

  1. Каждый делегат фонда - Пользователь В может отправит транзакцию на контракт аукциона Эмиссии и передать значение общей репутации участников фонда. Отправить транзакцию может любой делегат. Если репутация уже зафиксирована, то транзакция отклоняется.
  2. Контракт записывает значение общей репутации фонда и балансы ETH фондов в общий реестр фондов на раунд эмиссии в следующем виде:
Номер Раунда Адрес фонда Глобальная Репутация фонда Баланс ETH фонда
0 0x477...b65 60 000 120
0 Остальные фонды 300 000 400
0 Фонд Пользователя В 140 000 200

Так же контракт записывает общую репутацию всех фондов и общий баланс ETH всех фондов в отдельную структуру:

Номер раунда Общая репутация Общий баланс ETH
0 500 000 720
  1. Пользователь В отправляет транзакцию на получение ETH из Аукциона. Пользователь В передает номер раунда, адрес фонда и оплачивает газ. Контракт проверяет, что раунд уже завершен. Контракт проверяет, что Фонд еще не получил ETH за этот раунд. Если раунд завершен, то контракт переводит ETH Фонду Пользователя В по следующей формуле "Глобальная Репутация фонда за раунд/Общая репутация во всех фондах на начало Раунда Эмиссии * Всего Эфиров получено за раунд".

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

Раунды эмиссии, snapshot репутации и балансов ETH используются другими контрактами! ( GaltExit, Адрес выкупа )

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

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

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

  • методов claimAll & claimAllEth в solidity быть не должно. Вместо них пользователь должен вызывать методы claim && claimEth передавая в аргумент номер раунда

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

results matching ""

    No results matching ""