Написать смарт-контракт соло стейкинга для BSC проекта(solidity)

40 000 руб. за проект
24 июня 2021, 21:28 • 2 отклика • 53 просмотра
Есть токен-форк следующего контракта:
https://bscscan.com/address/0xEF2ec90e0b8D4CdFdB09...

К нему нужно сделать контракт соло-стейкинга, со следующим функционалом:

-возможность установки в контракте адреса токена для стейкинга
-юзер должен иметь возможность стейкать неограниченное количество раз с разными настройками периода стейкинга
-период стейкинга устанавливается пользователем один раз и не может изменяться в процессе
-необходима возможность установки базового APY за стейкинг и бонуса в APY за количество дней стейкинга с шагом 7, 14, 30, 60, 180, 300 дней. Формула следующая:
награда за стейкинг = период*APY/365 + период*бонусAPY/365. Если количество дней 7 - бонус за 7 дней, если 30 - бонус за 30.
-при досрочной отмене стейкинга взымается налог в 30% от количества застейканных токенов и падает на адрес ревард пула. Награда не выплачивается.
-пул наград за стейкинг формируется из токенов, посланных через трансфер на адрес контракта или на другой адрес. При каждом вызове функции стейкинга в этом пуле резервируется определенное количество токенов, которые гарантируют выплату награды в конце периода. Если токенов недостаточно - исключение в контракте. Нужно предусмотреть функцию для предварительной проверки резерва токенов перед стейкингом. Ее лучше отдельным методом предусмотреть чтоб исключение при выполнении не кидать
То есть вынести все это в публичные поля и функцию предусмотреть которая не жгет газ. Аналогично при раннем анстейкинге - резерв токенов снимается если он не был выплачен. Нужно предусмотреть функцию сброса всех резервов.
-в токене предусмотрена редистрибьюция(без трансфера). 5% от каждой транзакции перераспределяются между холдерами. Нужно сохранить этот бонус при стейкинге за держателями. Токены будут автоматически начисляться, просто нужно учитывать их в логике при выплате награды
-нужно предусмотреть функционал вывода любых токенов и бнб со смарт-контракта. Вызывается овнером.
-нужна функция смены овнера
-нужно предусмотреть виртуальные “очки” reward shares, получаемые за завершенный стейкинг. Логика начисления - (награда за стейкинг/100) * период*множительRewardsPoints/365
-нужно предусмотреть метод списания reward shares, который может вызываться как владельцем этих rewardshares, так и доверенным аккаунтом(другим смарт-контрактом). Давать права на списание должен сам владелец reward shares.

+- аналогичный стейкинг реализован тут(без сохранения бонуса за перераспределение и некоторого другого функционала)
https://dapp.pyxis.network/