Алгоритм стейкинга в Sushiswap MasterChef и Synthetix. Часть 2
Решением проблемы из предыдущего поста является простое утверждение: нет транзакций, нет изменения балансов.
Вместо того чтобы заставлять оффчейн бота проводить транзакции каждые 20 блоков или что-то типа того, мы можем просто ждать, пока пользователь начнет взаимодействует с контрактом через функции изменения состояния, такие как deposit() или withdraw().
В промежутках между вызовами этих функций мы можем быть уверены, что ничей баланс не изменился.
Например, если между блоком 10 и блоком 15 у Алисы было 50% стейкинга и у Боба - 50%, то мы можем выдать 5 000 REWARD (5 блоков умножить на 1 000) и дать каждому из них по 50%.
У Чада или Боба нет возможности «вскочить» и увеличить свой баланс, потому что когда они вызовут функцию deposit(), то вызовут распределение вознаграждения. А функция распределения вознаграждения запрограммирована так, чтобы не учитывать их недавний депозит.
Посмотрите на график на скрине выше, показывающий изменения баланса с течением времени.
Единственный способ, чтобы эти изменения произошли - это вызвать транзакцию со смарт-контрактом.
Однако это решение не масштабируется.
#Sushiswap #MasterChef #staking
Post #1094
720

- 👍 4