Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add scenarios of galt-exit #62

Merged
merged 8 commits into from
Jul 21, 2018
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 99 additions & 2 deletions ru/GaltExit.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# Функционал обратного выкупа Galt токена - Требования
# Контракт обратного выкупа Galt токена - Требования

## Описание проблемы
Каждый пользователь имеет право в любой момент вернуть свои ETH, которые он потратил на покупку Galt токена.

## Цели контракта
- Сделать функционал, который позволит пользователю обменивать Galt токены на ETH;
- Сделать контракт, который позволит пользователю обменивать Galt токены на ETH;

## Сценарий контракта
### Сценарий 1: Обратный выкуп
Expand Down Expand Up @@ -88,6 +88,103 @@ GALT ЗА КОТОРЫЕ ЗАПЛАТИТ ФОНД / КУРС GALT к ETH

6. Раунд 1 окончен.

### Сценарий 2: Выкуп Galt с контракта адрес выкупа

Вводные пользователя В:

| Адрес пользователя | Баланс в Galt | Баланс в ETH |
| ---------- | --------- | --------- |
| 0xca2...88f | 0 | 30 |
| Остальные адреса | X | Y |

Фонды:

| Адрес фонда | Баланс в ETH |
| ---------- | --------- |
| 0xa0a...b2b | 200 |
| 0x7ca...90c | 800 |

Контракт адрес выкупа:

| Баланс в GALT | Баланс в ETH |
| ---------- | --------- |
| 150 000 | 0 |

1. Пользователь В хочет выкупить Galt с контракта адреса выкупа. Пользователь В вызывает метод CheckCourseOfBuyBack. Метод возвращает пользователю курс отношения Galt к ETH, по которому пользователь может выкупить Galt. Курс расчитывается по формуле: (ОБЩИЙ ВЫПУСК Galt - БАЛАНС АДРЕСА ВЫКУПА) / ОБЩИЙ БАЛАНС ЭФИРОВ ВО ВСЕХ ФОНДАХ = (4 000 000 - 150 000) / 1000 = 3 850 Galt за 1 ETH.
2. Пользователь В вызывает метод BuyGalts, передавая в аргумент к методу кол-во Galt, которые он хочет выкупить (10 000).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

3. Расчитывается курс, по которому пользователь выкупает Galt (см выше). Затем по курсу производится обмен Galt на ETH = 10 000 / 3850 = 2,59 ETH за 10 000 Galt. Пользователю В перечисляются 10 000 и отнимаются 2,59 ETH. Полученные от пользователя ETH отправляются на контракт адреса выкупа.

Вводные пользователя В:

| Адрес пользователя | Баланс в Galt | Баланс в ETH |
| ---------- | --------- | --------- |
| 0xca2...88f | 10 000 | 27,41 |
| Остальные адреса | X | Y |

Фонды:

| Адрес фонда | Баланс в ETH |
| ---------- | --------- |
| 0xa0a...b2b | 200 |
| 0x7ca...90c | 800 |

Контракт адрес выкупа:

| Баланс в GALT | Баланс в ETH |
| ---------- | --------- |
| 140 000 | 2,59 |

### Сценарий 3: Получение ETH фондами
Пользователи:

| Адрес пользователя | Баланс в Galt | Баланс в ETH |
| ---------- | --------- | --------- |
| 0xca2...88f | 10 000 | 27,41 |
| 0xfc1...2a8 | 70 000 | 35 |
| Остальные адреса | X | Y |

Фонды:

| Адрес фонда | Баланс в ETH | Репутация |
| ---------- | --------- | ------- |
| 0xa0a...b2b | 200 | 200 000 |
| 0x7ca...90c | 800 | 800 000 |

Контракт адрес выкупа:

| Баланс в GALT | Баланс в ETH |
| ---------- | --------- |
| 140 000 | 2,59 |

1. Если кошелек контракта адреса выкупа первый раз получил ETH инициируется 1-ый раунд. Каждый раунд длится 23 часа.
2. Пользователь 0xca2...88f состоит в фонде 0xa0a...b2b и хочет записать свой фонд в список для получения ETH. Пользователь вызывает метод CommitReputationForFund, передавая в аргумент адрес фонда и записывает в реестр фонд и его репутацию:

Реестр адреса выкупа:

| Раунд | Адрес фонда | Репутация фонда |
| ----- | ----------- | --------------- |
| 1 | 0xa0a...b2b | 200 000 |

3. Пользователь 0xfc1...2a8 состоит в фонде 0x7ca...90c и хочет записать свой фонд в список для получения ETH. Пользователь вызывает метод CommitReputationForFund, передавая в аргумент адрес фонда и записывает в реестр фонд и его репутацию:

Реестр адреса выкупа:

| Раунд | Адрес фонда | Репутация фонда |
| ----- | ----------- | --------------- |
| 1 | 0xa0a...b2b | 200 000 |
| 1 | 0x7ca...90c | 800 000 |

4. Пользователь 0xca2...88f вызывает метод ClaimEthForFund, передавая в аргумент адрес фонда 0xa0a...b2b. Если раунд окончен и в прошлом раунде в реестр был записан адрес фонда (0xa0a...b2b), и баланс адреса выкупа > 0 ETH, то пользователь выполняет транзакцию и ETH перечисляются на фонд по формуле ETH НА БАЛАНСЕ * (РЕПУТАЦИЯ ФОНДА / ОБЩАЯ РЕПУТАЦИЯ ФОНДОВ) = 2,59 * (200 000 / 1 000 000) = 0,518 ETH получает фонд 0xa0a...b2b.

5. Те же действия выполняет пользователь 0xfc1...2a8 с фондом 0x7ca...90c. 2,59 * (800 000 / 1 000 000) = 2,072

Фонды:

| Адрес фонда | Баланс в ETH | Репутация |
| ---------- | --------- | ------- |
| 0xa0a...b2b | 200,518 | 200 000 |
| 0x7ca...90c | 802,072 | 800 000 |

## Спецификация контракта
[Модель расчетов в Google Sheets](https://docs.google.com/spreadsheets/d/1zlbQGaYeIdah-t1EdBrl5jdTBGEeJ2JANazXgkxRzms/edit?usp=sharing)

Expand Down