Все статьи
Гайды

Перевод многие ко многим в Solana

Как работают парные переводы в Solana: одна транзакция на строку, 0,001 SOL за перевод и правило ренты, которое пропускает строку вместо того, чтобы её урезать.

6 минут чтения J Tools Editorial
Два вертикальных столбца красных точек на почти чёрном фоне, каждая точка слева соединена тонкой прямой линией ровно с одной точкой справа

Есть три способа разослать много платежей за один раз в Solana, и их постоянно путают. Мульти-сендер платит списку из одного кошелька. Коллектор собирает много кошельков в один. А потом идёт случай, который ни один из двух выразить не умеет.

Третья форма, перевод многие ко многим solana, держит каждого отправителя с его собственным получателем. Кошелёк 7 платит кошельку 7, восьмой восьмому, и ни один из них не знает о другом.

Звучит как мелочь. Это разница между одним источником и сорока независимыми источниками.

  • Строка это одна транзакция. Кошелёк-отправитель этой строки платит всё, что на ней стоит.
  • Комиссия платформы 0,001 SOL за перевод, сетевая комиссия 0,000005 SOL.
  • Получатель, который никогда не держал этот токен, добавляет 0,00203928 SOL рентного депозита.
  • Строки, которые не проходят, пропускаются, а не урезаются.

Три формы массового перевода

Инструмент массовой рассылки это один ко многим. Один кошелёк, список получателей, один плательщик. Такая форма нужна для airdrop.

Пакетный сборщик средств это многие к одному. Двадцать кошельков, одна цель, и в конце всё лежит в одном месте.

Инструмент многие ко многим это третья форма и единственная, которая знает пары. У первой строки свой источник, у второй другой. Общей кассы нет, и строки друг друга не покрывают.

Слева яркая точка расходится веером в столбец из десяти точек, справа прямые линии соединяют два столбца точка к точке

Сколько стоит одна строка

На строке могут стоять три позиции, и кошелёк-отправитель этой строки платит все три. Общего финансирующего счёта нет, поэтому кошелёк, который не покрывает свою строку, ничего не занимает у строки выше. Сетевая позиция это базовая комиссия в 5 000 лампортов за подпись, которую разбирает собственная документация Solana по комиссиям.

ПозицияРежим SOLРежим токена
Комиссия платформы0,001 SOL0,001 SOL
Сетевая комиссия0,000005 SOL0,000005 SOL
Токен-аккаунт получателяне применяется0,00203928 SOL, и только если этот получатель никогда не держал данный токен

Третью строку стоит прочитать дважды, потому что именно она застаёт людей врасплох. Отправить SPL-токен на адрес, который его никогда не касался, значит создать аккаунт под этот токен, и Solana берёт за такой аккаунт рентный депозит. Депозит примерно в двести раз больше сетевой комиссии и вдвое больше комиссии платформы.

На сотне свежих получателей это около 0,204 SOL счёта, тогда как комиссия платформы останавливается на 0,1. Депозит не сжигается: он лежит в токен-аккаунте получателя и возвращается тому, кто позже этот аккаунт закроет.

Строки, которые пропускаются

До подписи идут две проверки, и обе останавливают строку, а не меняют её.

Первая это простая арифметика. Если кошелёк-отправитель не покрывает свою сумму плюс комиссии плюс возможный токен-аккаунт, строка помечается и остаётся нетронутой. Ничего наполовину не уходит.

Вторая страннее и её стоит понять, потому что в первый раз она выглядит как ошибка. Solana не разрешает оставить аккаунт с балансом выше нуля, но ниже рентного минимума. Для обычного кошелька этот минимум равен 0,00089088 SOL, и он выводится по формуле из документации Solana по аккаунтам.

Опустошить аккаунт полностью можно. Оставить в нём 0,0005 SOL нельзя. Строка, которая загоняет кошелёк в эту щель, помечается как rent dust и остаётся неотправленной.

Горизонтальная ось: светящаяся точка в нуле, затем красная полоса между двумя чертами с тусклой точкой внутри, а за ней две светящиеся точки

Почему нельзя просто урезать сумму

Альтернатива это срезать сумму, пока она не влезет, и так хуже. Вы набрали число. Инструмент, который отправляет другое число молча, это инструмент, с которым потом не сойдётся ни одна таблица.

Отправьте весь баланс или снизьте сумму так, чтобы остаток прошёл минимум. Предпросмотр заранее показывает, какие строки затронуты, а инструмент опрашивает все аккаунты назначения одним вызовом, прежде чем что-либо подписать.

Одна транзакция на строку и почему это важно

Поскольку каждая строка это отдельная транзакция, упавшая строка падает одна. В пакете, где всё сложено в одну транзакцию, ошибка на тридцатой строке уносит двадцать девять предыдущих.

За это платят: сорок пар это сорок подписей и сорок комиссий платформы. Взамен получается результат, который читается построчно. Кому нужно понять, с какой скоростью эти транзакции проходят, цифры лежат в разборе приоритетной комиссии Solana.

Когда перевод многие ко многим solana это правильная форма

Ротация кошельков честный ответ для большинства. У вас есть набор кошельков с историей, которую хочется оставить позади, вы делаете свежий набор через генератор кошельков пачками, и хотите, чтобы старый кошелёк 7 профинансировал новый кошелёк 7 и ничего больше.

Второй случай это выплатный список, где плательщик меняется от строки к строке. Несколько проектов, несколько касс, одна таблица. Мульти-сендер не может это выразить вовсе, потому что источник у него ровно один.

Третий это перераспределение после снапшота, где каждому держателю платят с уже закреплённого за ним кошелька. Как прочитать это распределение до раздачи, написано в разборе распределения держателей токена.

Как подготовить список

Сделайте первый проход на двух строках. Таблица результатов скажет, во сколько строка обошлась на самом деле, вместе с депозитами токен-аккаунтов, до того как вы отправите две тысячи.

Проверьте также, держат ли получатели этот токен уже сейчас. В списке, наполовину состоящем из существующих держателей, позиция депозитов уменьшается вдвое, а на сотне строк это самая крупная цифра всего счёта.

И запишите заранее, какой кошелёк платит какую строку. После прохода это соответствие восстанавливается тяжелее, чем кажется сейчас, особенно если отправители только что созданы и ещё не имеют истории, по которой их различают.

Последнее про баланс: оставьте в каждом отправителе немного сверх его суммы. Подогнанный до копейки баланс приведёт к тому, что рентная проверка отложит строку и её придётся финансировать заново, а это дольше, чем сразу оставить запас.

Что меняется, когда список растёт

На десяти строках всё это удобная теория. На двух тысячах настоящей работой становятся две вещи, и обе происходят вне инструмента.

Первая это финансирование. Каждому отправителю нужна его сумма плюс комиссии ещё до старта, и никакая строка не может закрыть другую. Значит, нужен предварительный проход раздачи, обычно из одной кассы, и делать его лучше с запасом, а не впритык.

Вторая это сверка после. На сорока строках достаточно посмотреть таблицу. На двух тысячах результат хочется выгрузить и сверить с исходным листом построчно, потому что пропущенные строки в обозревателе не появятся вовсе: как транзакции они не существуют.

Частые вопросы о парном переводе

Чем это отличается от нескольких запусков мульти-сендера?

У мульти-сендера ровно один источник за запуск. Сорок источников это сорок запусков и сорок ручных смен кошелька. Здесь один запуск и сорок строк.

Стоит ли чего-нибудь упавшая строка?

Нет. Строка, не прошедшая предварительную проверку, никогда не подписывается, так что ни сетевой, ни платформенной комиссии не возникает.

Могут ли отправители и получатели пересекаться?

Могут. Кошелёк вправе отправлять в одной строке и получать в другой. Каждая строка проверяется сама по себе.

Почему моя строка помечена как rent dust?

Потому что остаток в кошельке-отправителе оказался бы между нулём и 0,00089088 SOL. Отправьте весь баланс или снизьте сумму.

Нужен ли SOL в кошельке, который шлёт только токены?

Нужен. Сетевая и платформенная комиссии платятся в SOL, даже когда переводится токен.

Есть ли предел числа пар?

На практике вас ограничивает подготовка, а не инструмент: каждый кошелёк-отправитель нужно профинансировать заранее.

Как решить в одну строку

Если в вашей таблице есть колонка плательщика, вам нужна именно эта форма. Если все строки уходят с одного кошелька, берите мульти-сендер и платите один раз вместо сорока. А если строки не хватает, посмотрите сперва на рентный минимум, прежде чем предполагать сбой. Про этот минимум есть отдельный разбор ренты в Solana и возврата SOL.

J
Автор
J Tools Editorial

Материал команды J Tools.

Все материалы автора J Tools Editorial →

Похожие статьи