Что такое приватный канал?
Приватный канал — это внецепочечная платёжная сеть, привязанная к Solana. Пользователи вносят SPL-токены в эскроу-программу на блокчейне, после чего совершают транзакции вне цепочки через шлюз с высокой скоростью и без комиссии за каждый перевод. Расчёт с Solana Mainnet осуществляется через доказательство Sparse Merkle Tree, что гарантирует возможность вывода средств в любой момент и исключает двойное расходование.
В отличие от нативного платёжного потока Solana, переводы внутри канала не отображаются в цепочке до тех пор, пока пользователь не выведет средства. Сеть канала работает на собственном конвейере обработки транзакций (dedup -> sig verify -> sequencer -> executor -> settler), который обрабатывает транзакции независимо от времени блока Solana.
Участники
Администратор инстанса
Администратор развёртывает PDA Instance через CreateInstance и управляет тем, какие минты SPL-токенов принимаются (AllowMint / BlockMint). Администратор назначает и отзывает операторов через AddOperator / RemoveOperator, а также может передать права администратора через SetNewAdmin. На каждый инстанс приходится один администратор. Передача прав администратора необратима и выполняется за один шаг: текущий администратор не может вернуть роль без участия нового администратора.
Операторы
Операторы назначаются администратором. Они владеют PDA Operator и являются единственными аккаунтами, которым разрешено вызывать ReleaseFunds (для проведения расчётов по выводу средств на Mainnet) и ResetSmtRoot (для ротации Sparse Merkle Tree). Операторы обходят все проверки владения в шлюзе и имеют доступ ко всем методам JSON-RPC, включая getBlock, getTransaction и simulateTransaction. Роль JWT: "operator". Операторы должны быть добавлены непосредственно в базу данных; самостоятельное повышение прав не предусмотрено. См. руководство по операторам для получения сведений о развёртывании и настройке.
Пользователи
Пользователи самостоятельно регистрируются через Auth Service. Роль JWT: "user". Пользователи могут вызывать Deposit напрямую в Escrow Program и инициировать вывод средств через инструкцию WithdrawFunds на стороне канала в Withdraw Program. Доступ к шлюзу ограничен их собственными верифицированными кошельками; они не могут вызывать getBlock, getTransaction или simulateTransaction.
Жизненный цикл канала
- Создание инстанса — администратор вызывает
CreateInstance, создавая PDAInstanceи настраивая допустимые минты. - Депозит — пользователи вносят SPL-токены в эскроу через инструкцию
Deposit. Токены перемещаются на associated token account инстанса. - Внецепочечные переводы — пользователи отправляют переводы через шлюз. Переводы упорядочиваются и исполняются в сети канала без взаимодействия с Mainnet.
- Инициация вывода — пользователь вызывает
WithdrawFundsв Withdraw Program (на стороне канала), чтобы сжечь свой баланс и инициировать вывод средств. - Расчёт на Mainnet — оператор предоставляет действительное доказательство исключения SMT и вызывает
ReleaseFundsв Escrow Program (Mainnet), освобождая токены в кошелёк пользователя. - Ротация дерева — когда SMT приближается к максимальной ёмкости (65 536 листьев), оператор вызывает
ResetSmtRootдля ротации дерева и начала нового epoch.
Перевод
Вывод средств
Когда использовать приватные каналы
Используйте приватные каналы, если вашему приложению необходимо:
- Внецепочечная пропускная способность — объём переводов может исчерпать TPS Solana, или требуется подтверждение быстрее одной секунды
- Конфиденциальность — личности контрагентов и суммы переводов не должны отображаться в цепочке
- Отсутствие комиссии за перевод — частые переводы, при которых стоимость каждой транзакции в SOL неприемлемо высока
Используйте нативные SPL-переводы в следующих случаях:
- Необходима компонуемость на блокчейне (DeFi, свопы, кредитование; другие программы должны иметь возможность отслеживать перевод или реагировать на него)
- Расчёт в рамках одного перевода допустим, и конфиденциальность не является требованием
- Инфраструктура шлюза недоступна или нецелесообразна с операционной точки зрения
Is this page helpful?