26 ноября 2021

Cross-rollup NFT wrapper и идеи миграции

Пролог

Материал ниже — перевод статьи В. Бутерина, которая легла на те мои идеи, что развиваю с 2018 года по платёжным каналам и роллапам. Поэтому — предлагаю и вам ознакомиться с сим трудом. (Для нетерпеливых — есть выжимка). Оригинальный пост: https://ethresear.ch/t/cross-rollup-nft-wrapper-and-migration-ideas/10507

Описание основное

Экосистема NFT быстро растёт и составляет значительную часть потребления газа в блокчейне Ethereum. Молодость и относительная несформированность экосистемы, а также необходимость избегать высоких комиссий (из-за нефинансового характера значительной части сектора NFTs) делает её главной целью перехода на уровень L2. Однако это открывает и вопрос о том: а как же может произойти переход на уровень L2?

Одним из простых предложений является координация перехода на единую платформу (например, Arbitrum, поскольку сегодня она доступна для развёртывания в рамках общих контрактов), но это имеет ряд важных недостатков:

  • Все существующие (основные) платформы роллапов с поддержкой EVM имеют или бэкдоры, или централизованную синхронизацию, и/или другие тестовые механизмы, поэтому рискованно вводить всю экосистему в один роллап-модуль: (по крайне мере) пока существует неопределённость в отношении того, как этот роллап-модуль будет развиваться вне таких функций (как централизация и т.п.);
  • Экосистема NFT может стать слишком большой, чтобы с ней мог безопасно справиться один отдельный роллап;
  • Ни одна часть экосистемы NFT, или даже вся экосистема NFT, не является само-замкнутым миром, (поэтому) они должны будут взаимодействовать с другими частями экосистемы Ethereum.

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

Предлагаемое решение №01

Вначале NFT должны быть зарегистрированы в одном роллапе (или базовой цепочке). NFT может перемещаться между другими роллапами (или базовой цепочкой) путём создания NFT-обертки.

Процесс создания обертки выглядит следующим образом:

  1. На роллапе A отрпавляетс NFT (назовём его X) — контракту менеджера обёртки [буквально: wrapper manager contract], указав (i) роллап назначения и (ii) начального владельца. Контракт локбокса (сейфа) сохраняет запись в хранилище, присваивая X новый серийный номер R, а также сохраняя роллап назначения (назовем его B) и первоначального владельца на роллапе назначения (назовём этот счёт O1).
  2. На роллапе B любой может создать обёрнутый NFT (wNFT), используя контракт менеджера обёрток на роллапе B. Создание обёрнутого NFT требует указания исходного роллапа и серийного номера. Создать «действительный» wNFT от X может только указанный владелец, заявив (R, A) в качестве серийного номера и исходного роллапа. Обратите внимание, что можно создать «пустой» (недействительный) wNFT, который ни на что не указывает; роллап B “не знает”, что является действительным и недействительным. Контракт менеджера обёртки хранит данные (серийный номер, исходный роллап, начальный владелец) и предотвращает создание нескольких NFT с одним и тем же именем (набором данных).
  3. Чтобы извлечь NFT, текущий владелец wrapped-X на роллапе B должен отправить его обратно менеджеру обёртки, который выдает квитанцию-подтверждение, сообщающую: «NFT с серийным номером R, исходным роллапом A и начальным владельцем O1 только что был развёрнут, с требуемым новым владельцем O2».
  4. Контракт локбокса (сейфа) может передать X владельцу O2, когда получит доказательство того, что такая квитанция на роллап B была сделана, и сверит серийный номер, исходный роллап и начального владельца с собственной хранимой информацией и убедится, что она прошла (валидацию).

На схеме (воспринимайте её как неразрывную и связанную/переходящую по полям роллапов A & B): 

Роллапы. Менаскоп. 00

И далее:

Роллапы. Менаскоп. 01

Обратите внимание, что вывод средств будет иметь временную задержку, поскольку требуется примерно 1 (одна) неделя для завершения работы Optimistic роллапов (по состояниям сворачивания/закрытия), чтобы можно было проверить (итоговую) квитанцию. Пока что единственным способом более быстрого выполнения нескольких переходов является многоуровневая обёртка.

Чтобы пользователь мог проверить, что завёрнутый X является действительным (легальным), ему нужно будет самостоятельно проверить состояние свёртывания B и квитанцию на свёртывание A.

Дополнение: добавление пересылок между роллапами

На роллапе B владелец wrapped-X может отправить его Менеджеру роллапа с указанием выдать квитанцию (следующего типа/формата): «NFT с серийным номером R, исходный рулон (которого) A, с первоначальным владельцем O1, был только что перемещён в рулон C, с новым (желаемым) владельцем O2″.

На роллапе С снова любой может создать объект wrapped-X, указав исходный роллап (в данном примере — роллап А), серийный номер (R) и первоначального владельца (O1), и этим wrapped-X на рулоне С можно свободно торговать. Однако, как только это произойдёт, для фактического изъятия X теперь потребуется опубликовать всю цепочку квитанций (в данном случае всего две) о переходе между роллапами.

Схема следующая:

Роллапы. Менаскоп. 02

Далее:

Роллапы. Менаскоп. 03

Наконец:

Роллапы. Менаскоп. 04

Заметим для простоты, что «снятие» не является операцией кросс-роллап; вместо этого снятие осуществляется путём выполнения (также) операции кросс-роллап для создания wrapped-X на роллапе A (тот же роллап, что и X), а затем — окончательное разворачивание X в отдельной операции.

Фактически происходит (следующее): когда NFT перемещается из роллапа в роллап, цепочка переводов оставляет после себя цепочку квитанций и каждая квитанция в этой цепочке квитанций зеркалируется в роллап А и обрабатывается по порядку в какой-то момент в будущем, когда состояния в других  роллапах завершатся (это может быть оптимизировано в краткосрочной перспективе с помощью Kate commitments (альтернативная ссылка), а в долгосрочной перспективе вся цепочка квитанций может быть верифицирована с помощью ZK-SNARKs).

Чтобы пользователь мог убедиться в подлинности обёртки X, ему нужно проверить всю цепочку квитанций на всех роллапах, отражающих кросс-роллап передачу (или, по крайней мере, цепочку квитанций, начиная с последней квитанции, которая уже была зеркально отражена на роллапе A).

Предлагаемое решение №02: оптимизированная по GAS эмиссия на базовой цепочке

Все NFTs могут быть выпущены таким образом, что они будут «принадлежать» контракту локбокса на базовой цепочке Ethereum. Чтобы сделать это газоэффективным, контракт lockbox получит функциональность для генерации всего набора серийных номеров и передачи их в роллап. По сути, все NFTs заранее созданы, но ни один из них ещё не имеет «значения» (подумайте: существует 2**256 ещё не дифференцированных NFT — (как будто) «стволовых клеток»), и они передаются в роллапы партиями.

Процесс «выдачи» (в таком случае) становится процессом присвоения значения. Это можно сделать, просто передавая «хэш смысла» через квитанции так же, как передаются владельцы: если NFT не имеет смысла (это «стволовая клетка»), владелец может присвоить ему смысл, превратив его в «дифференцированный» NFT. Базовая цепочка узнает значение NFT только после того, как проверит цепочку квитанций до того момента, когда значение было присвоено (реально, проверка квитанций должна быть ZK-SNARKed, чтобы сделать это (полностью) жизнеспособным).

Это позволяет всем NFTs быть «укоренёнными» в базовой цепочке, а не в свернутой. Это полезно для сценария, когда цепь роллапа «ломается» или иным образом становится нежизнеспособной, и приложения должны постоянно мигрировать на другие ресурсы.

P.S. Для любознательных

Если тема вам интересна — рекомендую ряд своих материалов по теме:

  1. Первая часть книги о Web 3.0;
  2. Базовые вещи по каналам (роллапам) на Hub.Forklog;
  3. Токенизация платёжных каналов (роллапов): часть #01;
  4. Токенизация платёжных каналов (роллапов): часть #02;
  5. Свопирование и каналы/роллапы;
  6. Оптимистик;
  7. Арбитрум;
  8. И самый, пожалуй, короткий, но самый важный материал об уровне L3.

За сим — всё и 

До!