Контракт ManagementFee - Требования

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

  • У делегатов должно быть несколько источников мотивации;

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

  • Обеспечить вознаграждение за управление;
  • Обеспечить вознаграждение за рост;

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

Сценарий 1: Вонаграждение за управление

Балансы делегатов до вознаграждения за управление:

№ раунда Адрес пользователя Баланс (ETH) Баланс фонда (ETH)
1 0x477...f88 900 500000
1 0x42f...18c 1500 500000
1 0x4fb...9cb 300 500000
1 0x42b...bjs 800 500000
1 0x4a7...cbb 858 500000
1 0x1cs...al9 1211 500000
1 0x90c...aii 2000 500000

Вознаграждение за управление выполняется раундами по 28 дней. За каждый раунд:

  1. Как только список делегатов сформирован один из делегатов может вызвать метод initializeManagementFee контракта ManagementFee для начала первого раунда. Метод можно вызвать только один раз;
  2. Контракт ManagementFee на начало раунда формирует список из делегатов и сохраняет его до конца раунда;
  3. В конце раунда формируется еще один список делегатов и сравнивается с тем, что был в начале раунда. Адреса делегатов, которые остаются в первом и втором списке могут забрать вознаграждение за прошлый раунд с помощью метода getManagementFee контракта ManagementFee;
  4. Расчитывается вознаграждение для каждого делегата по формуле ОСТАТОК НА БАЛАНСЕ MULTISIG * 0.1 / 100 = вознаграждение за управление;
  5. Каждому делегату, который вызвал метод getManagementFee начисляется вознаграждение за управление в ETH за прошлый раунд;

Балансы делегатов после вознаграждения за управление ( 2 раунд ):

№ раунда Адрес пользователя Баланс (ETH) Баланс фонда (ETH)
2 0x477...f88 1400 499500
2 0x42f...18c 2000 499500
2 0x4fb...9cb 800 499500
2 0x42b...bjs 1300 499500
2 0x4a7...cbb 1358 499500
2 0x1cs...al9 1711 499500
2 0x90c...aii 2500 499500

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

Сценарий 2: Вонаграждение за рост

Балансы делегатов до вознаграждения за рост:

№ раунда Адрес пользователя Баланс (ETH) Баланс фонда (ETH)
1 0x477...f88 900 500000
1 0x42f...18c 1500 500000
1 0x4fb...9cb 300 500000
1 0x42b...bjs 800 500000
1 0x4a7...cbb 858 500000
1 0x1cs...al9 1211 500000
1 0x90c...aii 2000 500000

Вознаграждение за рост выполняется раундами по 168 дней. За каждый раунд:

  1. Как только список делегатов сформирован один из делегатов может вызвать метод initializeManagementFee контракта ManagementFee для начала первого раунда. Метод можно вызвать только один раз!
  2. Контракт ManagementFee на начало раунда формирует список из делегатов и сохраняет его до конца раунда.
  3. Контракт ManagementFee на начало раунда записывает баланс фонда в переменную totalSupplyForGrowth.
  4. В конце раунда формируется еще один список делегатов и сравнивается с тем, что был в начале раунда. Адреса делегатов, которые остаются в первом и втором списке могут забрать вознаграждение за прошлый раунд с помощью метода getRewardForGrowth контракта ManagementFee.
  5. Если БАЛАНС ФОНДА - totalSupplyForGrowth > 0, то расчитывается вознаграждение для каждого делегата по формуле (БАЛАНС ФОНДА - totalSupplyForGrowth) * 3 / 100 = вознаграждение за рост.
  6. Каждому делегату, который вызвал метод getRewardForGrowth начисляется вознаграждение за рост в ETH.

Балансы делегатов после вознаграждения за рост:

№ раунда Адрес пользователя Баланс (ETH) Баланс фонда (ETH)
2 0x477...f88 4800 626100
2 0x42f...18c 5400 626100
2 0x4fb...9cb 4200 626100
2 0x42b...bjs 4700 626100
2 0x4a7...cbb 4758 626100
2 0x1cs...al9 5111 626100
2 0x90c...aii 5900 626100

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

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

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

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

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

  • Правильна ли логика того, что вознаграждение получают только те делегаты, которые были делегатами ВЕСЬ раунд? ( пункт 3 в вознаграждении за управление и пункт 4 в вознаграждении за рост )

results matching ""

    No results matching ""