Контракт Contributor предназначен для управления вкладами участников в систему, распределения вознаграждений и обработки запросов на вывод средств. Ниже приведены подробные условия и правила участия, описанные простым и понятным языком.

## Типы вкладов
Участники могут совершать два вида вкладов:

- Интеллектуальные вклады: это нематериальные вклады, такие как идеи, разработки, контент и т.д. Совершая интеллектуальный вклад, участник инициирует распределение вознаграждений среди всех участников системы.
- Имущественные вклады: это материальные вклады, выраженные в токенах системы. Совершая имущественный вклад, участник увеличивает свою долю в системе, но не инициирует распределение вознаграждений.

## Как начать участие
- Инициализация контракта: после развертывания контракта администратор должен выполнить действие init, чтобы инициализировать глобальное состояние системы.
- Регистрация участника: участник автоматически регистрируется в системе при совершении первого вклада через действие contribute.

## Совершение вкладов

Действие: contribute
Параметры:
username: ваше имя аккаунта в системе.
amount: сумма вклада в токенах.
type: тип вклада ("intellect"_n для интеллектуального, "property"_n для имущественного).

Пример
Если вы хотите совершить интеллектуальный вклад на сумму 50 токенов:

``` bash
cleos push action <contract_account> contribute '["ваш_аккаунт", "50.0000 SYS", "intellect"]' -p ваш_аккаунт@active
```

## Распределение вознаграждений
При совершении интеллектуального вклада происходит распределение вознаграждений среди всех участников пропорционально их долям.
Распределенная сумма рассчитывается как сумма вклада, умноженная на коэффициент 1.618 (золотое сечение). Вознаграждения накапливаются в поле pending_rewards у каждого участника.

## Обновление состояния участника
Действие: refresh
Цель: применить накопленные вознаграждения к вашему балансу.
Когда использовать: перед выводом средств или для обновления своего состояния после совершения вкладов другими участниками.


``` bash
cleos push action <contract_account> refresh '["ваш_аккаунт"]' -p ваш_аккаунт@active
``` 

## Вывод средств
Контракт предоставляет два способа вывода средств:

1. Прямой вывод интеллектуальных вкладов (withdraw1)
Действие: withdraw1
Кто может использовать: участники, совершившие интеллектуальные вклады.

Ограничения:
Вы можете вывести сумму не более общей суммы ваших интеллектуальных вкладов без учета накопленных вознаграждений. Перед выводом необходимо вызвать refresh, чтобы обновить свое состояние.

``` bash
cleos push action <contract_account> withdraw1 '["ваш_аккаунт", "10.0000 SYS"]' -p ваш_аккаунт@active
```

2. Вывод через очередь из членских взносов (withdraw2)
Действие: withdraw2
Кто может использовать: все участники, независимо от типа совершенных вкладов.

Особенности:
Сумма, которую вы хотите вывести, ставится в очередь на выплату. Выплаты происходят из накопленных членских взносов, которые добавляет система. Средства, поставленные в очередь на вывод, перестают участвовать в распределении вознаграждений. Выплаты осуществляются в порядке очереди по мере накопления достаточных средств.

``` bash
cleos push action <contract_account> withdraw2 '["ваш_аккаунт", "20.0000 SYS"]' -p ваш_аккаунт@active
```

## Добавление членских взносов
Действие: addfee
Кто может вызвать: только система (сам контракт).
Цель: добавить входящие членские взносы, из которых будут осуществляться выплаты по запросам withdraw2.

``` bash
cleos push action <contract_account> addfee '["100.0000 SYS"]' -p <contract_account>@active
``` 

## Важные моменты и ограничения
Обновление перед выводом: перед любым выводом средств вы обязаны вызвать действие refresh. Если ваше состояние не обновлено, вывод будет отклонен.

## Доступный баланс для вывода:
Для withdraw1: сумма ваших интеллектуальных вкладов за вычетом уже выведенных средств.
Для withdraw2: ваш общий баланс долей за вычетом сумм, уже поставленных в очередь на вывод.

## Распределение вознаграждений:

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

## Очередь на вывод:
Запросы на вывод через withdraw2 обрабатываются по мере поступления членских взносов. Если накопленных взносов недостаточно для удовлетворения вашего запроса, вам придется ждать поступления новых средств.

## Общий пример сценария участия
### Регистрация и первый вклад:
Вы совершаете имущественный вклад на сумму 100 токенов.
Ваш баланс долей увеличивается на 100 токенов.
Вы становитесь участником системы.

### Получение вознаграждений:
Другой участник совершает интеллектуальный вклад.
Происходит распределение вознаграждений.
Вы вызываете refresh и видите, что у вас появились накопленные вознаграждения.

### Вывод средств:
Вы решаете вывести 30 токенов через withdraw2.
Сумма ставится в очередь на вывод.
Система добавляет членские взносы, и ваш запрос на вывод обрабатывается.
Вы получаете 30 токенов на свой счет.

### Совершение интеллектуального вклада:
Вы совершаете интеллектуальный вклад на 50 токенов.
Ваш баланс долей увеличивается, и происходит новое распределение вознаграждений среди участников.

## Лицензия
Продукт Потребительского Кооператива "ВОСХОД" распространяется по лицензии BY-NC-SA 4.0. 

Разрешено делиться, копировать и распространять материал на любом носителе и форме, адаптировать, делать ремиксы, видоизменять и создавать новое, опираясь на этот материал. При использовании, Вы должны обеспечить указание авторства, предоставить ссылку, и обозначить изменения, если таковые были сделаны. Если вы перерабатываете, преобразовываете материал или берёте его за основу для производного произведения, вы должны распространять переделанные вами части материала на условиях той же лицензии , в соответствии с которой распространяется оригинал. Запрещено коммерческое использование материала. Использование в коммерческих целях – это использование, в первую очередь направленное на получение коммерческого преимущества или денежного вознаграждения.

Юридический текст лицензии: https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.ru
