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'ы.

Материалы

Introduction to Anchor