Skip to content

asimaranov/solana_donation

Repository files navigation

Написать solana-программу на Rust: платформа для сбора пожертвований в виде нативной валюты (в лампортах). Описание:

  • Все кампании по сбору бессрочные, но инициатор может остановить кампанию(и получить задоначенные SOL).
  • У проекта есть свой собственный токен CHRT, которым поощряют пользователей(рефереров) привлекающих жертвователей(рефералов).
  • Также не чаще чем раз в период N владелец платформы может наградить ТОП-3 жертвователей CHRT-токеном.
  • Минт токена принадлежит платформе; децимал - 3.
  • Создателю платформы полагается некоторая комиссия с каждого перевода.
  • Владельцы CHRT могут внести свои токены в сбор пожертвований, и при определённом количестве внесённых CHRT-токенов, в этом сборе не будет взиматься комиссия владельца платформы. Освобождение от комиссии происходит для всех последующих пожертвований, после того как достигнут лимит CHRT-токена для кампании по сбору.
  • Также с помощью CHRT-токена сообщество может закрыть кампанию по сбору; в этом случае собранные SOL распределяются между активными кампаниями по сбору, соразмерно размеру их текущего сбора.
  • Длительность периода N, размер комиссии, размер поощрения CHRT-токеном для топовых донатеров, лимит CHRT-токенов для освобождения от комиссии и лимит CHRT-токенов для закрытия указываются при инициализации(и более не меняются).

Основной функционал

  • Инициировать новый сбор пожертвований.
  • Внести пожертвование; при вносе пожертвования жертвователь может указать адрес своего “реферера”. Рефереру начисляется CHRT-токены пропорционально от суммы пожертвования. Пропорция 1:101, за один SOL начисляется 101 СHRT.
  • Вывести пожертвования на кошелёк инициатора пожертвования.
  • Владелец выводит накопившуюся комиссию.
  • Владелец награждает топ-3 донатеров (топ-3 всей платформы).
  • Инициатор останавливает сбор пожертвований.
  • Перевести CHRT-токен в какую-либо из кампаний по сбору пожертвований, чтобы закрыть сбор. Переведённые CHRT-токены повторно не используются.
  • Перевести CHRT-токен в какую-либо из кампаний по сбору пожертвований, чтобы освободить сбор от комиссии. Переведённые CHRT-токены повторно не используются.

Особенности.

  • В любой момент доступны данные о суммарном количестве пожертвований любого жертвователя в любую конкретную кампанию по сбору пожертвований.
  • В любой момент доступны данные по ТОП-10 жертвователей на всей платформе и ТОП-3 в каждую из компаний.
  • В любой момент доступны данные о сумме всех пожертвований платформы и о сумме собранной в каждой кампании(и активной и уже нет); общая сумма комиссии не уплаченная владельцу(а пошедшая в пожертвования) и общая сумма “перераспределённых” сообществом пожертвований.
  • При награждении ТОП-3 донатеров, награждать за “одни и те же пожертвования” нельзя. Чтобы избежать ситуации, когда сформировался пул лидеров и они из раза в раз получают CHRT-токены. При награждении учитываются только “ещё не отмеченные” пожертвования.
  • Технические ограничения на размер аккаунтов(а значит, в какой-то степени, и всей платформы) должны быть отданы на выбор владельцу платформы: этот момент должен быть параметризован, а не захардкожен.
  • В случае если, при выполнении инструкций, вы столкнетёсь с непреодолимыми ограничениями рантайма соланы – укажите это в readme, и соответствующе прокомментируйте (допустимые)параметры в коде. —--------------------------------------------------------------------------------- Чек лист.
  • программа написана на Anchor
  • программа задеплоенна в test/dev, есть минималистичный клиент для проверки(не обязательно браузерный и даже cli, можно просто скрипт воспроизводящий определённый сценарий).
  • есть скрипт деплоя, для защиты от перехвата owner’ства. Никакого хардкода адресов. всё что должно вычисляться на БЧ – вычисляется на БЧ; смарт-контракт это непредвзятая “третья сторона”, которой должны мочь доверять все участники. должны быть errors, в тех местах, где может “поломаться”; программа может упасть с солановской ошибкой, с ошибкой из анкора, или собственной, но не с растовской; в тех местах где могут “поломать” ошибки тоже должны быть. должны быть эвенты. эвенты должны быть полезными.
  • все ненужные более данные – освобождаются для возврата ренты рента за данные максимально переложена на пользователей потери из-за целочисленного округления сведены к (разумному) минимуму
  • тесты на typescript
  • тесты на happy-path, на безопасность.
  • тесты читаемые: всё что можно вынести в helpers; в теле теста только взятие базы для ассерта, инвоук(и) и ассерт.
  • тесты разбиты на suit’s

Материалы https://doc.rust-lang.ru/book/ - основная документация по rust, рекомендуются к прочтению главы 1-8. 10, 13 и 17 можно посмотреть дополнительно. https://docs.solana.com/developing/programming-model/overview - оф.дока по Solana, рекомендуется к прочтению весь раздел "Developing". https://solanacookbook.com/#contributing - помимо оф.доки советуем к прочтению(более «живая» теория и снипеты кода) https://project-serum.github.io/anchor/tutorials/tutorial-0.html и https://book.anchor-lang.com/ - базовые материалы по Anchor. https://www.brianfriel.xyz/learning-how-to-build-on-solana/ - программа на Anchor https://www.brianfriel.xyz/understanding-program-derived-addresses/ - она же с PDA https://pencilflip.medium.com/solanas-token-program-explained-de0ddce29714 - spl-token https://book.solmeet.dev/notes/intro-to-anchor - escrow-program with Anchor.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published