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 наград)