Skip to content

Latest commit

 

History

History
32 lines (23 loc) · 6.44 KB

README_ru.md

File metadata and controls

32 lines (23 loc) · 6.44 KB

Контракт NMX

Контракт NMX - это ERC20 токен с предопределенным расписанием выпуска монет. К моменту создания контракта NMX часть токенов уже была распределена биржей централизованно. Эта часть в конструкторе контракта выпускается на адрес биржи. Расписание эмиссии определено при выпуске контракта и не может быть изменено в дальнейшем.

Расписание эмиссии

Расписание выстроено таким образом, что количество ежедневно выпускаемых монет каждую неделю уменьшается. В различные периоды времени коэффициент уменьшения недельного пула отличается. Коэффициенты подобраны таким образом, чтобы за все время эмиссии NMX (5218 недель ≈ 100 лет) было выпущено не более 200 млн. токенов. Выпускаемые NMX распределяются среди четырех пулов распределения:

  1. Основной пул
  2. Пул Nominex (включая Бонусный и Командный пулы)

Каждый пул распределения представляет собой адрес в сети ethereum, на который будут начислены токены. Пропорции, в которых пулы распределения получают выпущенные NMX, с течением времени изменяются, но также предопределены расписанием.

Пулы распределения

Nominex пул - адрес, принадлежащий бирже Nominex. На них токены просто начисляются. Дальнейшее распределение начисленных на этот пул NMX осуществляется централизовано биржей Номинекс и не представляет интереса в рамках ethereum сети. Распределение внутри Основного пула рассмотено ниже.

Основной пул распределения

Основной пул представляет собой набор контрактов, предназначенных для начисления NMX за стейкинг LP токенов Uniswap. Всё взаимодействие можно выразить следующим образом: контракт вызывает у своего поставщика NMX метод supplyNMX(), получает дополнительное количество токенов и каким-то образом распределяет их по своим потребителям NMX. Поставщик NMX вызывает в свою очередь метод у своего поставщика NMX и т.д. Схема взаимодействия контрактов представлена ниже:

                                                                                                                            схема взаимодействия контрактов

  1. При каждом изменении состояния (staking или unstaking) StakingService вызывает у StakingRouter (своего поставщика NMX) метод для получения новых токенов.
  2. StakingRouter вызывает у NMX (своего поставщика NMX) метод для получения новых токенов.
  3. NMX видит, что вызывающий его контракт - владелец Основного пула, и запрашивает у расписания обновление состояния распределения Основного пула.
  4. MintSchedule обновляет состояние распределения основного пула и возвращает количество токенов, которые контракт должен выпустить на адрес Основного пула распределения.
  5. NMX начисляет на адрес владельца основного пула новые токены и возвращает их количество в качестве результата вызова метода supplyNMX.
  6. StakingRouter получает информацию о том, сколько NMX ему только что добавили. Распределяет эти NMX между различными StakingService'ами согласно их долям (в вырожденном случае одному StakingService'у начисляются все полученные NMX токены) и запоминает во внутреннем состоянии. Далее возвращает вызвавшему StakingService количество NMX, которые были ему начислены с момента последнего вызова. После этого StakingService на основании количества только что полученных им токенов обновляет внутреннее состояние так, чтобы в будущем было возможно рассчитать вознаграждение в NMX всем адресам, принимавшим участие в стейкинге LP токенов пропорционально их долям и срокам стейкинга.

Пользователи взаимодействуют только с контрактом StakingService для осуществления стейкинга, анстейкинга и получения вознаграждения за стейкинг. Операции, не связанные со стейкингом и доступные в рамках стандарта ERC20, выполняются на контракте NMX.