Вы замораживаете токены в контракте, и ваша доля растёт. Ниже — сколько он платит прямо сейчас, откуда берутся эти проценты на самом деле и чего стоит выход. Всё считается из блокчейна и обновляется каждую минуту.
Размер пула по суткам с первого дня работы контракта. Каждая точка — прямой запрос totalPooledRnbw() к блокчейну на историческом блоке; две независимые ноды дали одинаковый результат.
Пунктирная линия — чистая арифметика: она продолжает пул тем же приростом в токенах, что и за последние 30 суток. Темп зависит от того, сколько людей заходит и выходит, а это меняется за неделю; будущего линия не обещает.
Каждый вход в стейкинг за всю историю, с 31 марта. Выходы показаны отдельной таблицей ниже — там к каждому посчитано удержание. Точное число входов показано под таблицей и обновляется само. Адрес и хеш открываются в Basescan. История разложена на куски по 250 событий, браузер берёт только показанную страницу — около 13 КБ вместо мегабайта.
Рост не был непрерывным. Контракт работает … суток, и примерно каждые восьмые из них пул снижался — это дни, когда выходы перевесили входы. Резкий подъём в апреле — запуск программы начислений: тогда за две недели пул вырос с 200 тысяч до 5,7 млн.
Это то, что уже лежит в контракте и раздаётся оставшимся в пуле. Величина живая: обновляется от событий контракта, а не вписана в страницу руками.
Почему нераспределённых удержаний всегда немного. Они не копятся: каждое новое удержание перезапускает семисуточную раздачу, и монеты уходят оставшимся равномерно. Двое-трое суток запаса — это норма работы, а не признак того, что деньги кончаются. Пополняются они только выходами: чем больше людей уходит, тем больше накапливается и тем выше доходность у тех, кто остался.
Резерв кэшбэка — не то же самое. Из него платят возврат комиссии за обмены, а не проценты по стейкингу, и пополняет его команда. В обоих карманах обычно лежит запас меньше чем на пару суток, так что выплаты держатся на регулярных пополнениях, а не на накопленном.
Годовая ставка, посчитанная по фактическим начислениям, а не по обещаниям. Две линии отвечают на разные вопросы: месячная показывает, куда идёт дело, а мгновенная — сколько контракт раздаёт прямо сейчас. Обе растут при выходах и падают при входах: награды делятся на всех, кто в пуле.
Синяя линия — окно 30 суток: насколько подорожала доля за месяц, в пересчёте на год. Зелёная — мгновенная ставка контракта: она ступенчатая, прыгает при каждом крупном выходе и за семь суток оседает обратно, пока удержанное вытекает. Обещанием она не является.
Первые недели считать бессмысленно. В апреле в пуле лежали сотни тысяч токенов при тех же начислениях, поэтому ставка в пересчёте на год выходила трёхзначной. Это свойство маленького знаменателя, а не доходность, на которую можно было рассчитывать. Смотрите на месячную линию за последние месяцы.
Ряд восстановлен из истории удержаний и суточного размера пула. Отдаётся как /api/apr.json: столбцы — за 7, 30 и 90 суток.
Нераспределённые удержания — это то, что взято с уходящих, но контракт ещё не успел раздать. Раздаются они не сразу: монеты капают в пул с постоянной скоростью, и пока капают, цена доли растёт у всех одновременно. Поэтому величина всё время колеблется — сверху её пополняют чужие выходы, снизу подтачивает раздача.
Каждый выход за всю историю. Столбец «Что произошло» — не наша догадка: состояние контракта прочитано на блоке до выхода и на блоке выхода, и сравнение даёт ответ. Крупных выходов, поднявших ставку всем, здесь единицы — остальные лишь продлили срок.
Не каждый выход ускоряет раздачу — и это главное, что стоит понять. Контракт пересчитывает скорость, только если «нераспределённое, делённое на семь суток» окажется больше нынешней скорости: тогда она поднимается, и семисуточное окно начинается заново. Мелкое удержание скорость не трогает вообще — оно лишь продлевает срок, на который её хватит. В коде это сделано защитой: rewardRate can only stay flat or increase. Без неё кто угодно мог бы выходить копеечными порциями и каждым выходом ронять доходность всем остальным.
Сколько надо вывести, чтобы скорость пересчиталась. Прямо сейчас — около … RNBW. Цифра не постоянная: пока никто крупный не выходит, нераспределённое тает и порог растёт час от часа. Для сравнения, самый крупный выход за последние 245 был 460 126 RNBW — то есть в обычные дни скорость стоит на месте, меняется только срок.
Что означает, когда раздавать становится нечего. Когда окно раздачи истечёт, остаток уйдёт в пул разом, скорость обнулится, и следующий выход задаст её заново — уже от своего размера. Поэтому доходность здесь не плавная: она взлетает редкими скачками от крупных выходов и оседает, пока нераспределённое тает. Зубцы на графике — это оно и есть.
Ряд восстановлен архивными вызовами undistributedFees() на исторических блоках, по точке в час, и продолжается коллектором. Отдаётся как /api/pothist.json. Механика проверена по исходному коду контракта, функция _addFees.
Сеть Base выпускает блок раз в две секунды, а контракт начисляет непрерывно — значит каждый блок прибавляет к пулу одну и ту же величину, пока не изменится ставка. График показывает её за всё время работы контракта, по часам. Ступеньки — это входы и выходы: ставка пересчитывается при каждом из них.
Величина на графике — то, что за две секунды прибавляется ко всем токенам в контракте разом. Ваша доля от него ровно та, какую ваша позиция составляет от пула: разделите свою сумму на размер пула и умножьте на высоту.
Первые недели ставка была нулевой. Контракт заработал 31 марта 2026 года, а раздача началась в апреле — до этого начислять было нечего. На графике за всё время это видно ровной линией по нулю в самом начале.
Rainbow возвращает часть комиссии со свопов — от 10% на нижней ступени до 100% на верхней. Смарт-контракт кладёт RNBW в пул и тут же выпускает получателю долю от общего пула. График показывает, сколько начислено по суткам.
Кэшбэк адресный, а доход стейкеров — общий: его приносят выходы из пула. Начисление кэшбэка выпускает доли ровно в пропорции — sharesToMint = rnbwCashback × totalShares / totalPooledRnbw — поэтому курс доли не меняется: пул растёт, и выросшая часть принадлежит тому, кому начислили.
Устроено это так: когда любой стейкер выходит, 10% всей его позиции остаются в пуле и семь суток равномерно капают оставшимся. Вот это поднимает курс доли, то есть достаётся каждому, кто в пуле. Чем больше людей выходит, тем выше ваша доходность, — и это единственный доход пула.
Ступень Basic работает и без стейка — но платят по-разному. В приложении Rainbow пять ступеней, и у нижней, Basic, в карточке прямо написано «Stake to unlock: 0 RNBW» при возврате 10%. То есть ставка 10% одна и та же, есть у вас стейк или нет. Различается только путь выплаты, и это свойство контракта, а не ступени:
— стейка нет вовсе: контракт отказывает (if (shares[user] == 0) revert NoStakePosition), и Rainbow платит прямым переводом из отдельного контракта RNBWRewards. Монеты приходят на адрес и в пул не попадают. В таблице ниже таких выплат нет.
— в стейкинге есть хоть сколько-нибудь: контракт кладёт RNBW в пул и выпускает получателю доли. Такие строки в таблице есть и помечены Basic. Проверено: начисление проходит уже при позиции 1,005 RNBW, минимального порога нет.
Разделение жёсткое, без исключений: мы прочитали позицию каждого получателя прямого перевода на блоке самой выплаты — у всех семидесяти девяти она была ровно нулевой. Отсюда следствие для этой таблицы: получателей в ней меньше, чем людей с кэшбэком у Rainbow. Те, кто не стейкает, получают свои 10% мимо пула, и здесь их не видно.
Ряд: события CashbackAllocated контракта стейкинга 0x288ea8Bcb51d53aD361D786EFa904C401904aF70. Начисления идут пакетами: бэкенд подписывает и отправляет накопившееся раз в пять минут — 98% начислений попадают ровно на пятиминутную отметку, а в одной транзакции их бывает до тридцати. За что именно начислено, в цепочке не записано: событие несёт только адрес и сумму. Время во всех таблицах и на графиках — UTC.
Tier задаётся размером позиции: чем больше RNBW в стейкинге, тем большая доля комиссии возвращается. Нажмите на число адресов, чтобы увидеть их список. Пороги взяты из приложения — в контракте Tier нет вовсе, он про них не знает и просто начисляет ту сумму, которую подписал бэкенд. У каждого графика своя шкала: сравнивать надо форму линии, а не высоту. По горизонтали — время с первого дня работы контракта, по вертикали — сколько адресов было в этом Tier в тот день.
Таблица считается по нынешним позициям всех адресов с открытой позицией: контракт читается напрямую, по одному вызову на полсотни адресов.
Источник один, и это важнее самой цифры. Всё, что делает вашу позицию больше, приходит из нераспределённых удержаний — и больше ниоткуда.
Кто уходит, оставляет 10% всей позиции. Эти монеты попадают в нераспределённые удержания и ровно семь суток равномерно капают оставшимся: долей у вас не прибавляется, дорожает каждая. Это перекладывание внутри пула — ни одна монета не изымается с рынка. За всю историю так собрано 1 212 973 RNBW, около 2,4 млн в год.
Кэшбэк и вход за счёт проекта тоже кладут RNBW в пул, но контракт тут же выпускает получателю доли ровно пропорционально добавленным монетам. Отношение не меняется, значит цена доли не двигается ни на копейку. Роздано так 7 425 873 RNBW на 1 912 адресов — но это подарок конкретному получателю, а не доход остальных стейкеров.
Отсюда главное следствие. Доходность здесь держится на том, сколько людей выходит. Больше выходов — выше процент у оставшихся; поток выходов иссякнет — доходность станет нулевой, сколько бы проект ни раздавал кэшбэка. Поэтому ставка и колеблется: … за неделю против … за три месяца.
Чем обеспечен кэшбэк. Из 7 122 135 RNBW, прошедших через админ-Safe, выкуплено на рынке 3 237 348 — то есть 45%. Остальное пришло из казначейства и старых запасов. На доходность пула это не влияет, но показывает, чем проект платит за программу.
У этого стейкинга есть встроенная обратная связь, и она объясняет, почему цифра доходности так скачет. Награды делятся на всех, кто внутри, поэтому размер пула стоит в знаменателе. Дальше работают три силы, толкающие ставку в разные стороны.
Когда в пул заходят новые токены, а поток наград остаётся прежним, на каждый RNBW достаётся меньше. Ничего не сломалось — просто тот же пирог делится на большее число ртов.
Уходящий оставляет 10% всей позиции. Эти монеты идут оставшимся — числитель растёт. И одновременно сам пул уменьшается на всю ушедшую позицию — знаменатель падает. Два движения в одну сторону, поэтому выход соседа заметен сильнее, чем приход.
И круг замыкается. Поэтому доходность здесь колеблется вокруг некоторого уровня, а не держится ровной: … сейчас против … в среднем за месяц.
Порядок величины. При нынешнем пуле в … RNBW выход 5% пула по объёму оставил бы в контракте около 119 тысяч токенов. Для оставшихся это примерно 0,53% за неделю, пока удержание раскапывается, — около 27% годовых сверх обычной ставки, если считать простым процентом без сложного. Уход 10% дал бы вдвое больше. Цифра сама по себе внушительная, и именно она делает график доходности зубчатым.
Чем за это платят. Механика ничего не создаёт: удержание — это перекладывание из кармана уходящего в карман остающегося, монета в монету. Долгосрочный держатель действительно получает дополнительный RNBW за счёт тех, кто выходит, — но ровно в том объёме, в каком они теряют. Общее количество токенов в обращении при этом не меняется, поэтому ждать от этого роста цены не стоит: выгода тут перераспределительная, а не денежная.
И оборотная сторона. Тот же механизм означает, что чем спокойнее ведут себя участники, тем меньше первый источник платит. Если однажды все станут долгосрочными держателями, удержания обнулятся, и останется только то, что перечисляет проект, — а он не обязан этого делать. Рассчитывать на «доходность за счёт чужой суеты» как на постоянную величину нельзя: она есть, пока есть суета.
Частичный вывод запрещён — allowPartialUnstake возвращает false. Забрать часть нельзя, только всё сразу.
Вместе с накопленным, а не только с прибыли. exitFeeBps равен 1000, округление вверх в пользу протокола.
Дрип сам по себе прибавляет к пулу постоянную величину в секунду — от него прирост линейный. Вручную реинвестировать при этом нечего: число ваших долей не меняется, растёт их цена.
А вот удержания с уходящих делятся по стоимости долей — и ваша доля к этому моменту уже подросла на прошлых начислениях. То есть заработанное начинает зарабатывать само, без единого действия с вашей стороны. Это и есть сложный процент, только начисляет его не календарь, а чужие выходы: почему так устроено.
Пул растёт в RNBW. Если цена упадёт сильнее, чем набежали проценты, долларовый результат будет отрицательным.
trustedSignerCount равен единице. Вторая ветка наград зависит от бэкенда, а не только от кода контракта: это и точка доверия, и точка отказа.
Контракт 0x288ea8Bcb51d53aD361D786EFa904C401904aF70 в сети Base, исходник верифицирован. Ничего из написанного выше не требует доверия к нам.
| Что смотреть | Функция контракта |
|---|---|
| размер пула | totalPooledRnbw() |
| скорость раздачи удержаний | rewardRate(), undistributedFees() |
| резерв под начисления от проекта | cashbackReserve() |
| размер штрафа за выход | exitFeeBps() |
| разрешён ли частичный выход | allowPartialUnstake() |
| сколько доверенных подписантов | trustedSignerCount() |
| ваша позиция | shares(адрес), getPosition(адрес) |
Куда идут токены между адресами проекта — на странице Потоки. Живое состояние контракта — на дашборде.