период
, который равен 1 суткам. Время начала отсчета периодов задается либо в момент деплоя контрактов, либо отдельным методом при настройке параметров.01.04.2023 00:00:00
, то 1й период длится до 01.04.2023 23:59:59
, 2й - до 02.04.2023 23:59:59
, и т.д.distributeReward
на контракте. Для упрощения считаем, что если момент вызова метода попадает в середину интервала периода, то номер периода равен последнему завершенному. Например, распредление происходит 02.04.2023 11:23:45
, т.е. в интервале 2-го периода, то номер пориода для расчетов будет 1
Каждый nft обладает базовым показателем "прочночть" (endurance). Каждая nft может иметь свой собственный показатель прочности. Значение измеряется в %, у новых NFT endurance=100%.
Каждый стейк - тратит ендуранс непосредственно за операцию (например, на 0.25%) + начинает тикать время стейка. Для упрощения расчетов принимаем износ нтф за линейную функцию. т.е. старение каждой nft происходит пропорционально времени проведенному в стейкинге (аналог "гарантийного срока").
Каждый анстейк - высчитывается уменьшение прочности за время стейка, (но минимиум 0.25%).
Помимо стейкинга, износ nft проиходит при ее продаже/передачи другому владельцу, например, каждый тренсфер уменьшает ендуранс на 1%
при добавлении (стейке) nft в пул хешрейт nft плюсуется к общему хешрейту пула. Если стейк просиходит в середине периода, расчитывается дола япериода, когда nft не работала, чтобы исключить несправделивое распределение наград, когда стейк происходит в конце периода, непосредственно перед распределением ревардов.
Также расчитывается прогнозируемый номер периода, в котором износ nft будет равен минимально допустимому, после которого nft перестает зарабатывть ревард. Это нужно для исключения nft из дальнейшего распределения ревардов, если она будет по прежнему находится в стейке. Также, если момент полного износа nft попадает на середину периода, расчитываем долю периода, в которой nft уже на работала, для корректировки суммы ревардов.
При анстейке nft, происходит аналогичный расчет, но значения минусуются из общих показателей пула, а корректировочные значения удаляются из таблиц.
для оптимизации стоимости операций по распределени и клейму ревардов в контракте используются накопительные "пулы" полученных ревардов и потраченной мощности nft за все время.
в момент распределения ревардов, расчитывается суммарная мощность пула на начало новго периода исходя из значений предыдшего с учетом суммарных поправок на износ nft.
В момент анстейка nft просходит только пересчет доли владельца nft от пула ревадов и перевод начисленных ревардов сразу на адрес владельца. Как опция, можно не перечислять реварды сразу, а копить их на контракте, и потом склеймить, даже если nft уже передана длругому.
Т.к. nft изнашиваются, то с каждым новым периодом доля ревардов приходящаяся на застейканные nft постепенно падает. Это означает, что даже если каждый период сумма общих ревардов, поступающих на контракт будет одинаковой, то к распределению среди nft будет доступна только часть. Т.о. часть ревардов соответвуящая застейканным nft (с учетом износа) суммируется к пулу ревардов, а оставшаяся часть попадает в пул "нераспределенных" ревардов.
Износ nft учитывается при стейкинге для расчета хешрейта в каждом периоде. При добавлении (стейке) nft в пул расчитывается текущий хешрейт nft с учетом ее старения, и плюсуется к общему хешрейту пула. Дополнительно вычисляется дельта износа nft за 1 период и плюсуются к сумме этого показателя для всего пула.
пересчет мощности пула на следующий период будет с учетом этой дельты
при анстейке, доля в пуле ревардов таже будет скорректирована с учетом этой дельты
Использование показателя сложности для пересчета износа не представляется обоснованным, т.к. если, предположим, при повышении сложности износ nft будет происходить быстрее, то это кажется лишь понизит инвестиционный интерес, потому что помимо меньших сумм ревардов еще и срок их получения будет меньше.
Так же в силу значительного усложнения и удорожания всех расчетов производимых в контракте, использовать показатель сложности в моменты распределения ревардов непосредственно для каждой nft не представляется возможным.