CREATOR_Reward_Top10 - my-crypto-datascience-portfolio/my_crypto_donations_bank_solana GitHub Wiki
Процесс награждения ТОП-10
Процесс награждения ТОП-10 донатеров запускает CREATOR в ручном режиме.
Механизм нахождения ТОП-10 донатеров
Используем существующий Web3 API:
getProgramAccounts - is a versatile RPC method that returns all accounts owned by a program
const programAccounts = await connection.getProgramAccounts(programId, { filters: [], });
Для расчета ТОП-10 - нужно сделать выборку всех аккаунтов (счетчиков статистики), привязанных к программе банка и ранжировать.
Будем делать это из WEB-UI.
Группировка по ключу (аккаунтам USER'ов) и суммирование
Описано тут (используем их код):
Having fun grouping arrays into maps with TypeScript
Т.е. из сохраненных слотов донатов (мета-данных платежей) можно построить всю статистику банка.
Рабочий вариант сортировки
Sort an Array of Objects by Date in TypeScript
Массив структур (после GROUP BY) превращаем в MAP и сортируем (по суммам донатов USER'ов) - для вычисления TOP-10 донатеров.
Повторные награждения
После распределения токенов для ТОП-10 - необходимо проставить признак "награда выплачена" (chrt_top10_reward_paid) - в слот доната.
Чтобы данный донат повторно не учитывался в вычислении ТОП-10
.
- Для этого нужна отдельная reward-sealed-транзакция (после транзакции выплаты CHRT наград)