Arcium
Когда в Solana появились confidential transfers в Token-2022, стало возможным прятать балансы и суммы. Но пользоваться этим сложно: доступен только EOA-кошелёк, нет DeFi и UX'а нет для обычного юзера(кошельки не поддерживают, баги есть, нахрен надо?).
Про это уже писалось в отдельной статье: https://teletype.in/@valpaq/confidential_balances
Arcium — вторая половина истории: Solana остаётся быстрым L1, рядом вешается зашифрованный «процессор», который считает над зашифрованными данными и отдает результат обратно обычным программам.
Что такое Arcium
- Solana отвечает за:
- Arcium - это сеть Arx нод:
- получают зашифрованные входы,
- внутри MPC-кластера считают функцию (добавляют рандом и подобное),
- шлют результат обратно в Солану (через Arcium Program или ваш callback-сервер).
- MXE (Multi-Party Execution Environment) - контейнер под конкретное приложение:
- ваша Solana-программа,
- набор «конфиденциальных инструкций»,
- метаданные, какой MPC-кластер использовать и т.п.
- Arcis - слой над Anchor для написания конфиденциальных инструкций.
В программе на Solana появляется вызов условной [confidential]-функции. Она не считает сама: собирает описание вычисления и кидает его в Arcium Program. Тот кладёт задачу в ончейн-мемпул, выбирает свободный MPC-кластер и через callback возвращает результат.
Cerberus и Manticore: два режима MPC
У Arcium два MPC-протокола: Cerberus и Manticore.
Cerberus - permissionless
- Модель безопасности.
Dishonest majority / N-1 honest - достаточно, чтобы хотя бы одна нода в кластере была честной. - Без trusted dealer’а.
Нет единого генератора секретов, в которого надо верить; все распределяется протоколом. - MAC-проверки.
Каждая часть секрета обвешана MAC’ами; как только кто-то начинает подсовывать левое значение, вычисление останавливается, ноду можно выкинуть из кластера. - Арифметика в шифртекстах.
Сложение/умножение над зашифрованными данными делается без дешифровки.
Кейсы: приватные ордера, предикшн-маркеты, конфиденциальные балансы.
Manticore - permissioned
- Модель.
Honest-but-curious / honest majority - участники следуют протоколу, но могут пытаться вытащить лишнюю инфу из своих шеров. - Trusted dealer. Есть отдельный участник, который готовит криптографические материалы (preprocessing, секреты и т.п.). Это ускоряет протокол, но требует доверия к сетапу.
- Заточен под ML. Исходный ресерч по Manticore - как раз про эффективный MPC для вещественной и булевой арифметики (ML/AI, аналитика, матрицы и прочая беда).
Как это выглядит для разработчика
Жизненный цикл вычислений
- Definition.
В Arcis описываешь computation: какие аргументы, какая функция, какой кластер. - Commissioning.
Solana-программа дёргает этот definition с конкретными аргументами и окном по времени. - Mempool.
Задача падает в ончейн-мемпул Arcium Program. - Execution.
Кластер Arx-нод забирает задачу, крутит Cerberus/Manticore, на выходе - зашифрованный результат. - Callback.
Результат заворачивается в callback-транзу (или в ваш HTTP-callback, если не влезает) и прилетает обратно в программу на Солане.
Весь MPC живёт в сети Arx-нод. Солана видит только описание вычисления, факт исполнения и кусок данных. Дальше уже сами решаете, что с этим делать.
DSL/Arcis
Arcis — язык под схемы, которые крутятся на Arcium. Рамки жёсткие:
- в Cerberus/Manticore вы не залезете - протоколы спрятаны под капот.
- топологию кластера вы не настроите, только выберете, куда слать (и то летом ни о какой Manticore речи не было).
- с отдельными нодами не пообщаетесь, всё идёт через Arcium Program / клиент.
- Все детерминированно заранее, никаких циклов от размера массива и т.д.
Это не «соберу свой MPC», а «описал функцию - Arcium посчитал и отдал результат, взамен сказал ему спасибо(заплатил монету)».
Технические ограничения
- Размер выхода. Результат одной конфиденциальной инструкции должен влезать в одну Solana-транзу (callback). Если нет - нужно поднимать свой HTTP-callback-сервер, принимать весь остаток там и самому уже управлять результатом.
- Асинхронность.
Вычисление живет отдельно от Solana-транзакции по времени. Естьvalid_after/valid_beforeокна; если не успели - задача протухла.
- Сетевой слой от вас независим.
Вы не управляете тем, какой конкретно узел считает вашу задачу; это переключаемые кластеры, какой именно узел считает - не контролируете.
Arcium SPL
Ранее мы уже смотрели на Token-2022 SPL CT:
- twisted ElGamal поверх публичного ключа
- range/validity/equality ZK-пруфы
- разделение pending/available
- опциональный аудитор, AES-баланс
Arcium Confidential SPL Token (C-SPL) - надстройка над этим всем. Задуман как единый слой поверх разных стандартов токенов.
- Программная работа с конфиденциальными аккаунтами.
Token-2022 CT разрешает владеть конфиденциальным балансом только EOA-кошелькам, что убивает DeFi - программы не могут работать с зашифрованными балансами.
C-SPL добавляет адаптер, который через Arcium позволяет программам владеть и двигать эти балансы внутри MPC, не открывая их. - Аккаунты за других людей.
В CT получатель должен заранее завести конфиденциальный аккаунт для каждого минта. В C-SPL есть Confidential ATA-програм, которая через Arcium создает временный защищенный аккаунт на получателя, а он потом его «забирает» и подшивает свои ключи. UX похож на обычный SPL~. - Канонические конфиденциальные обертки.
Через token-wrap можно сделать единый C-SPL-mint для любого обычного SPL-токена и дать исходному минту роль аудитора. - Отдельный Encrypted SPL Token.
Для программных (не EOA) use-case’ов они делают отдельный, более легкий стандарт, заточенный под Cerberus и прямое вычисление над ciphertext’ами в MPC.
Umbra: приватный слой поверх Arcium
У Umbra вся архитектура делится на три крупных блока:
- Umbra Addresses - «stealth-адреса» на Solana;
- Anonymity Layer (shielded pool) - слой, который рвёт линк депозит ↔ вывод;
- Encrypted Balances - хранение балансов как ciphertext’ов в PDA + MPC-обновления.
Umbra Addresses
Umbra Address - это обычный Ed25519-ключ, ничем не отличимый от стандартного адреса Solana. Важен не формат, а процесс генерации:
- берётся подпись статического сообщения основным кошельком;
- эта подпись идёт в PRF, из неё детерминированно вываливается последовательность сидов;
- по каждому сиду генерится отдельный Ed25519-keypair - это и есть Umbra-адрес (как в SPL-CT, только шире).
Свойства: легко восстановить, сложно привязать к автору и друг к другу.
На уровне протокола Umbra отделяет «публичные» балансы на этих адресах от приватных, живущих внутри shielded pool.
Anonymity Layer: shielded-пул с ZK-claim’ами и релейерами
- Shielded Pool.
Контракт, который держит кучу токенов разных пользователей; приватность одной транзы зависит от размера множества депозитов. - Deposit.
Ты кладёшь токены в пул, а данные (сумма, целевой Umbra-адрес и т.п.) зашиваются в commitment / «записку», которая попадает в общий список. - Claim.
Получатель доказывает через ZK-пруф, что он владеет одной из этих записок, не раскрывая какой именно. Контракт проверяет proof, смотрит, не был ли nullifier уже потрачен, и выдаёт токены Umbra-адресу получателя. - Relayer Network.
Чтобы не светить, кто платит газ и с какого адреса идёт claim, используется сеть релейеров: они платят комиссию и получают компенсацию из выводимой суммы.
Encrypted Balances: PDAs + X25519 + Rescue + MPC
Umbra хранит приватные балансы как ciphertext в PDA на Solana, а все обновления делает через Arcium.
- Ed25519 - обычный spending key, подписывает транзы;
- X25519 - encryption key, по нему считается ECDH с MPC-сетью, от него зависят PDA.
- кошелёк дёргает PDA, вытаскивает
(ciphertext, nonce); - делает ECDH(X25519_user, PK_MPC) → shared secret;
- из секрета + nonce инициализирует Rescue и расшифровывает баланс - всё локально на девайсе.
- кошелёк шлёт в MPC-кластер инструкцию
+10 USDCв зашифрованном виде; - MPC-ноды подтягивают текущий ciphertext из PDA, делают гомоморфное обновление над шифртекстом, генерят новый
ciphertext + nonce, пишут обратно. - При этом никто из нод не видит ни старого, ни нового баланса, ни дельту.
Stealf
Stealf - нео-банк на стейблкоинах, у которого два уровня кошелька: публичный и приватный.
- двойная архитектура кошелька: один слой под «официальный» флоу, второй - под крипто-приватность;
- Arcium + PDAs: приватный кошелёк использует PDA как прокси-адреса, реальные суммы хранятся в зашифрованном виде и обновляются через MPC;
- relayers: чтобы не светить реальные адреса/суммы, транзы подписывают и отправляют релейеры, а сумма на цепочке показывается минимальной, реальная зашита в данных транзы, уходит в MPC и там уже добавляется к балансу.
Melee: viral prediction markets
Melee - «viral prediction markets» на Solana: смесь Pump.fun и Polymarket.
- Любой крейтор может завести рынок про что угодно: выборы, мемы, монеты, поп-культуру;
- Нет отдельной касты «админов, которые решают, какие рынки можно»;
- Прайсинг поверх бондинг-кривой: ранние заходы награждаются сильнее - классическая «зашёл первым, оказался прав - забрал львиную долю».
- Создание рынка.
On-chain маркет создаётся permissionless, параметры и ставки видны всем. - Разрешение исхода.
Вместо одного централизованного оракула или DAO, который руками резолвит рынок, собирается кворум валидаторов/участников. Они голосуют зашифрованно через Arcium, голоса не видны до конца периода, нет эффекта «подстроиться под большинство». - MPC-резолв.
Arcium считает итоги и проверяет, кто голосовал против факта; неправильно проголосовавших можно слэшить. Результат (какой исход победил) возвращается на Solana, и уже там идёт обычный расчёт по рынку.
Другие направления поверх Arcium
Кроме Umbra / Stealf / Melee там уже намечается зоопарк:
- Encrypted DeFi / даркпулы.
Orca и co смотрят в сторону рынков, где объёмы, цены и контрагенты уходят в MPC, а на цепи остаётся только сетлмент и минимум метаданных. - Платежи и кастоди.
Squads, Sphere, Iron и подобные - конфиденциальные мультисиги/трезори, лимиты и балансы которых не торчат в эксплорере, плюс MPC-key-менеджмент. - AI / аналитика.
Nosana, CrunchDAO и прочие AI-ребята - совместный тренинг/инференс по шифрованным данным, когда каждый боится показывать датасет соседу.
В Colosseum сейчас реально каждый второй питч - «мы делаем X, но поверх Arcium».
Ограничения
Помимо самой Solana добавляются:
Для кошелька/разового перевода ок. Для чего-то, что должно реагировать быстро, задержка уже заметна. На летнем тестнете между «отправил» и «получил результат» у меня было примерно 7 блоков. Их dark pool demo при этом не работал с балансами и ценой - просто кидал и мэтчил ордера с бидами/асками (и не было очереди из других протоколов).
Выход одной encrypted-инструкции должен помещаться в одну транзу. Всё, что выше - поднимаешь HTTP-callback, принимаешь хвост там, проверяешь хеш на цепи и сам раскладываешь по стейту.
Cerberus на бумаге живёт в модели N-1 honest. На практике всё упрётся в то, кто именно крутит Arx-ноды и как у них устроен стейкинг/слэшинг.
Manticore честно говорит «есть trusted dealer» - это история для permissioned-сетапов, а не для любого контракта на Solana.
Mainnet Alpha только выкатывают, часть нод под командой и «индустриальными» валидаторами, "множество"(тоже encrypted, я их не видел) проектов в закрытых когортах еще с весны. Янник при общении рассказывает многое (вплоть до почти атомарных флоу в одну транзу (и encrypted everything)), но пока это планы.