Donation_Bank_Task - my-crypto-datascience-portfolio/my_crypto_donations_bank_solana GitHub Wiki
Написать Solana-программу на RUST: платформа для сбора пожертвований в виде нативной валюты (в лампортах).
Описание:
- Все кампании по сбору бессрочные, но инициатор может остановить кампанию (и получить задоначенные SOL).
- У проекта есть свой собственный токен CHRT, которым поощряют пользователей (рефереров) привлекающих жертвователей (рефералов).
- Также не чаще, чем раз в период N, владелец платформы может наградить ТОП-10 жертвователей CHRT-токеном.
- MINT токена принадлежит платформе; decimal - 3.
- Создателю платформы полагается некоторая комиссия с каждого перевода.
- Владельцы CHRT могут внести свои токены в сбор пожертвований, и при определённом количестве внесённых CHRT-токенов, в этом сборе не будет взиматься комиссия владельца платформы. Освобождение от комиссии происходит для всех последующих пожертвований, после того как достигнут лимит CHRT-токена для кампании по сбору.
- Также с помощью CHRT-токена сообщество может закрыть кампанию по сбору; в этом случае собранные SOL распределяются между активными кампаниями по сбору, соразмерно размеру их текущего сбора.
- Длительность периода N, размер комиссии, размер поощрения CHRT-токеном для топовых донатеров, лимит CHRT-токенов для освобождения от комиссии и лимит CHRT-токенов для закрытия указываются при инициализации (и более не меняются).
Основной функционал:
- Инициировать новый сбор пожертвований.
- Внести пожертвование; при вносе пожертвования жертвователь может указать адрес своего "реферера". Рефереру начисляется CHRT-токены пропорционально от суммы пожертвования. Пропорция 1:101, за один SOL начисляется 101 CHRT.
- Вывести пожертвования на кошелёк инициатора пожертвования (видимо, инициатора кампании по сборам - т.е. Владельца).
- Владелец выводит накопившуюся комиссию.
- Владелец награждает топ-10 донатеров (топ-10 всей платформы).
- Инициатор останавливает сбор пожертвований.
- Перевести CHRT-токен в какую-либо из кампаний по сбору пожертвований, чтобы закрыть сбор. Переведённые CHRT-токены повторно не используются.
- Перевести CHRT-токен в какую-либо из кампаний по сбору пожертвований, чтобы освободить сбор от комиссии. Переведённые CHRT-токены повторно не используются.
Особенности:
- В любой момент доступны данные о суммарном количестве пожертвований любого жертвователя в любую конкретную кампанию по сбору пожертвований.
- В любой момент доступны данные по ТОП-100 жертвователей на всей платформе и ТОП-10 в каждую из кампаний.
- В любой момент доступны данные о сумме всех пожертвований платформы и о сумме, собранной в каждой кампании (и активной и уже нет); общая сумма комиссии неуплаченная владельцу, а пошедшая в пожертвования и общая сумма "перераспределённых" сообществом пожертвований.
- При награждении ТОП-10 донатеров, награждать за "одни и те же пожертвования" нельзя. Чтобы избежать ситуации, когда сформировался пул лидеров и они из раза в раз получают CHRT-токены. При награждении учитываются только "ещё не отмеченные" пожертвования.
- Технические ограничения на размер аккаунтов (а значит, в какой-то степени, и всей платформы) должны быть отданы на выбор владельцу платформы; этот момент должен быть параметризован, а не захардкожен.
- В случае, если при выполнении инструкций, вы столкнетесь с неопреодолимыми ограничениями рантайма Solana - укажите это в readme, и соответствующе прокомментируйте (допустимые) параметры в коде.
Чек лист:
- Программа написана на Anchor.
- Программа задеплоена в test/dev, есть минималистичный клиент для проверки (не обязательно браузерный и даже cli, можно просто скрипт воспроизводящий определенный сценарий).
- Есть скрипт деплоя, для защиты от перехвата owner'ства. Никакого хардкода адресов.
- Все операции с SOL и токенами - явные (вызов трансфера, а не +/- баланс).
- Все, что должно вычисляться на БЧ - вычисляется на БЧ; смарт-контракт - это непредвзятая "третья сторона", которой должны мочь доверять все участники.
- Должны быть ERRORS, в тех местах, где может "поломаться"; программа может упасть с солановской ошибкой, с ошибкой из анкора, или собственной, но не с растовской; в тех местах где могут "поломать" ошибки тоже должны быть.
- Должны быть эвенты. Эвенты должны быть полезными.
- Все ненужные более данные - освобождаются для возврата ренты.
- Рента за данные максимально переложена на пользователей.
- Потери из-за целочисленного округления сведены к (разумному) минимуму.
- Тесты на typescript.
- Тесты на happy-path, на безопасность.
- Тесты читаемые: всё что можно - вынести в helpers; в теле теста только взятие базы для ассерта, инвоук(и) и ассерт.
- Тесты разбиты на suit'ы.