Nillion и с чем это едят
Наевшись ZK во всех его имплементациях, подняв и попилив могучую кучу денег и придя в итоге к зкпсиху и старку, начинаешь смотреть что происходит еще в криптографии в блокчейне. И тут, оказывается, существует еще mpc и оно, наконец, начинает хоть как-то появляться в инфополе, пусть пока и единичных экземплярах (renegade https://renegade.fi/) (даже в кунилисте был Nillion). Так что же это такое этот Nillion? Немного вводных данных вначале
Безопасное хранение HVD
HVD (High value data) - это данные, которые важны юзерам и которые не особо хотят распространять: разные веса для моделек в ML, ордера, левередж позиций, медицинские данные. Эти данные нужно хранить и аккуратно с ними работать, по возможности не раскрывая всем. Для этого существуют разные подходы:
- MPC - мы храним секреты в разных местах, и если нам нужно их посчитать, то мы будем делать определенное количество операций между нодами (хранящими данные), например сложение умножение, между самими нодами так, что данные ноды не узнают никакой информации друг у друга, но смогут совместно посчитать то что нужно. Например то с чего начался mpc - проблема миллионеров, которые хотят узнать кто из них богаче, не разглашая никому свои балансы (ни третьей стороне, ни друг другу), просто кто богаче. Более приземленные варианты это
- Аукционы и ордера на покупку, чтобы выбрать самый высокий но чтобы никто не видел кто какой выставил и выбор был произведен абсолютно чисто
- Совместные обучения машинок (например Tesla и Waymo) обучают свои машинки отдельно, но могут получить что-то совместное, не делясь датасетом на котором машинки будут обучаться
- ZK - мы проведем вычисления у себя, проверим валидность данных вычислений и скажем результат, но мы есть третья кристально чистая сторона и нам нужно верить (это вот многие не любят). Если нету доверия то схема рушится, ну и сторона эта нужна. Из вариантов подходит
- Система идентификации и подтверждения, что ты не показываешь паспорт на кассе со всеми сопутствующими данными левыми, а условно через приложуху, которой обязан доверять магазин, можешь доказать что тебе уже 18 лет и ты достоин
- FHE - мы зашифруем твои данные и они будут зашифрованными в системе. А уже поверх них мы будем делать сложения и умножения. Они останутся в системе, но мы можем считать разные статистики, складывать умножать, главное что все поверх зашифрованных данных. Если нам нужно получить результат (например 1+2), и наши 1 и 2 зашифрованы, то мы складываем сами зашифрованные данные и в результате получим какое-то третье зашифрованное число, которые при расшифровке будет равно 3.
Вот три существующих подхода по решению данных задач, которые можно или скоро будет можно ( с FHE еще не все так гладко (люди из октры/fhenix/zama со мной не согласны офк)) увидеть в бч.
В чем основные сложности MPC
Так как мы должны использовать наши данные, лежащие в разных местах, для того чтобы посчитать общие результат, мы не можем просто кидать сразу реальные значения. Нам нужно разбить на множество крупиц, и так с каждыми данными из каждой ноды, и путем обмена сообщениями пересобрать уже в итоге финальный результат. Поэтому проблем несколько
- Если мы раскинем все по плохим нодам, они могут договориться и собрать сами то что ты разослал и какие данные хранишь.
- Или эти плохие ноды могут давать не те свои данные или не так их разбивать и в итоге получится не совсем то что надо.
- Для множественного взаимодействия нужно достаточно много итераций (которые занимают время). На 10 нод будет 100 итераций (условно), на 1000 нод обмен информацией будет невероятно долгим.
Ну и есть еще один тип нод, называемых honest but curious, это честные ноды, которые честно все считают и не занимаются херней, но им очень интересно что же ты хранишь там у себя.
И из-за этого множества есть особые криптографические алгоритмы с выбором нод, определенных трешхолдов распределения секретов (как на разделении секрета Шамира) и всяких сопутствующих вещей.
Что же придумал Ниллион
Архитектура
Ниллион решил пойти по пути современных блокчейнов, разделив экзекьюцию, хранение и вычисления в разные слои. Из-за этого получается следующее:
Существует множество Dealer нод, хранящих информацию. На вход функции поступают еще какие-то инпуты (Какие данные из каких нод, какие еще добавляются), собирают данные с нод с учетом данных инпутов, после отдают это все на вычисления в NMC ноды, которых гораздо меньше, уже на них проводят вычисления локально и после эти, скажем так полуфинальные данные, отдаются в Result nodes, которые меняют то что хранится внутри dealer nodes.
Raw-perprocessed-finish to network
- что мы не будем везде делать полную медленную децентрализацию как оно идет в smpc, и как изначально проектируется во всех криптографических протоколах основных, в итоге сильно сокращая количество действий и проблемы со множеством раундов, итераций.
- сами вычисления nmc нод, получающих какие-то части для вычислений, проводятся локально, на супер быстрой скорости, кои после будут отдаваться в result ноды, а не вся сеть общается друг с другом.
- Бывают вещи в идентификации и еще чем-то, когда эти данные хранятся на одной ноде (не распределены) и тогда не нужно множество дилер нод, а одна, которая делает рассылку на nmc ноды, сильно меньше коммуникаций. Ну и отправка всех скрывающих общие данные частей на все nmc ноды происходит параллельно, по времени +- как одна отправка на одну ноду, что, по их словам, дает скорость как в обычном блокчейне.
Nillio дают такие "оптимистичные" картинки, о чем они сами говорят (что это желаемое время)
Что это дает по сравнению со стандартным smpc:
- сильно меньше итераций между нодами, по сути базовые просто хранят распределенно инфу, поэтому будут сильно ориентированные ноды на одно, другое и третье.
- можно на основании эвристик и базовых правил грамотнее распределять нагрузку (возможно как в соле связанное с тем где хранятся ноды, чтобы условных экзекьюшн в моменте был в одной условной великобритании (то же самое делает соль с их бфт)).
- другой вопрос в том как заскейлить экзекьюшн леер через количество нод и расстояние между ними, и не будет ли такого что если вычисления внутри юс, то как SEC сказал с эфиром, раз большая часть внутри нас то это наша юрисдикция и мы это все будем регулировать.
На вопрос про экзекьюшн они дают ответ что используют byzantine подход, что если хотя бы 2/3 нод не будут "плохими", то к консенсусу придем. Сам консенсус при 50+% будет достигнут.
Хранение данных
Данные могут быть как приватными, так и публичными. Публичным может быть допустим цена токена в пуле, количество токенов у юзера на балансе, всякие такие общие вещи. Приватными же всякие персональные данные, идентификация.
Поэтому есть два типа нод, хранящих информацию - легкие и тяжелые. Легкие хранят публичную информацию и идут как помогающие развитию сети. Тяжелые же хранят и приватную и являются основополагающими в сети. При этом чтобы не было сибил атак с созданием множества нод, и доставанием информации, будет необходим стейк токена(омагад), ну и всякие штрафы в случае нарушения. Если же нода, что хранит данные является скомпроментированной, то для этого и существуют репликации и штрафы чтобы исправить данную ситуацию, так как берется информация со множества нод.
Токен
У проекта будет токен, erc20 тип NIL, который будет идти на оплату газа, на доходы для нод, инцентивы и DAO. ничего интересного и нового, все стандартно.
Что делают сейчас
Предоставление своего execution layer под evm. Юзер пишет контракт на solidity, отправляет им в систему и использует у них. Идея в том что можно отойти от подхода зкп с хранением данных и экзекьюшна, и сделать его более децентрализованным и безопасным. Также писали про вариации с л2/сайдчейнами (мы пипец чо можем только скажите, технология вау), но это под вопросом. Были слова про https://nillion.com/news/982/ коннект с Арбитрумом, очень много всего связано с near и полным переносом всех их штук под экзекьюшн на ниллионе https://nillion.com/news/1107/, но пока не меиннет и не полная реализация то сидим ждем.
Язык Nada
Так как вид самих программ будет сильно отличаться, не евм стиль, то нужен свой язык. Он является dsl(domain specific language) и по сути сильно похож на питон:
Также они перенесли уже numpy (одна из главных мат либ на питоне) и добавили либу nada ai(позволяет делать регрессии и всякие другие машин штуки) (https://docs.nillion.com/nada-by-example), но все равно если глубоко залезть в язык, и как сами они пишут, язык еще не полный и не финальная версия его (поэтому и пока не полностью готовы к меиннету). Но активно развивают, так как уже есть н-ное количество проектов, готовых делать сложные вещи. Одним из таких является chooseK. https://medium.com/@Nillion_Network/nillion-partners-with-choose-k-to-build-the-future-of-encrypted-rrder-books-eaebfdfa37af
Идея следующая: у нас есть специфическая сеть со множеством внутренних приколюх, почему бы их не использовать. Сразу появляются следующие идеи:
- ончейн дарк ордербук. У нас есть ордера которые являются приватными данными, так пусть они матчатся друг с другом и проводят свои обмены, все в плюсе.
- Есть подтверждения разных данных, так пусть оно остается по возможности анонимным (по сути идея зк), просто в реализации mpc.
- Аукционы и всякие выборы ончейн, пусть оно будет тоже скрытым дабы исключить "плохое" поведение, связанное с абузом.
- И дальше ...
В чем основной мотив - минимизировать любой возможный мев и абуз, насколько это возможно, только защитив это все не какими-то улучшениями и изменениями нод, а отдав все на криптографию и внутренние особенности сети.
Является ли это интересной штукой, которая может изменить многое в бч?
Вопрос сложный, так как уже были старки и зкпсихи со множеством своих идей, космос с вариациями всего, всякие icp. Но сам подход к решению данных проблем может заинтересовать людей с деньгами, а им достаточно собраться в одном месте чтобы создать ажиотаж. А там время покажет(и меиннет).