Несколько месяцев назад криптокоманда a16z опубликовала Испытание Накамото, список наиболее важных проблем, которые необходимо решить в блокчейне. Особенно привлекло наше внимание четвертое: «Соответствие программной конфиденциальности», так как мы активно думаем об этом уже некоторое время. Сегодня мы предлагаем первое решение с использованием гомоморфного шифрования и нашего протокола конфиденциального смарт-контракта fhEVM (если вы не знакомы с fhEVM, вы можете прочитать наши статьи о конфиденциальности Токен ERC20ислепые аукционы).
fhEVM - это обычный EVM с некоторыми предварительными компиляциями, которые позволяют вычислять зашифрованные состояния с использованием нашей библиотеки гомоморфного шифрования TFHE-rs. С точки зрения разработчика здесь нет криптографии: они просто пишут код Solidity, используя предоставляемые нами типы данных (euint32, ebool и т. д.). Одним из больших преимуществ fhEVM по сравнению с другими решениями конфиденциальности является то, что все данные и вычисления происходят onchain. Это означает, что у вас может быть такой же уровень композиции и доступности данных, как у обычных контрактов с открытым текстом.
Это свойство является ключевым для создания программной конфиденциальности, поскольку вся логика контроля доступа может быть определена непосредственно в самом контракте. Нет ничего, что должно быть жёстко задано в протоколе, и нет необходимости выполнять какие-либо действия вне цепи для соответствия. Приложение может обеспечить соответствие напрямую всего лишь несколькими строками кода на Solidity!
В этой статье мы покажем, как создать соблюдаемый токен ERC20, используя ончейн DIDs. Исходный код для этого учебного пособия можно найти в папка примероврепозитория fhEVM.
Децентрализованный идентификатор (DID) — это уникальное цифровое удостоверение, которое выдается таким субъектом, как правительство, регистратор, компания или сам пользователь. Этот DID может быть привязан к криптографическому ключу, который доказывает, что пользователь владеет DID, например, к кошельку EVM. Но он также может хранить целый ряд атрибутов, таких как возраст пользователя, национальность, номер социального страхования и т. д. Эти атрибуты, в свою очередь, могут быть использованы для доказательства того, что вы соответствуете какому-либо условию (называемому «аттестацией»), например, быть старше 18 лет или не быть гражданином Нарнии.
Большинство DID реализуются на стороне клиента и используют подтверждения с нулевым разглашением для создания аттестаций. Хотя во многих случаях это нормально, это быстро усложняется, когда в транзакции участвует несколько пользователей, когда вам нужно применить сложные правила к DID или когда вам нужно сохранить общий набор правил, которым должны следовать все. По сути, это тот же компромисс, что и в периферийных и облачных приложениях.
Имея централизованный реестр DID, можно было бы решить эти проблемы, поскольку вы могли бы просто попросить реестр проверить, что все соблюдают правила. Это также упростило бы отслеживание регулирований, поскольку вам нужно было бы реализовать его только в одном месте. Для этого блокчейн был бы идеальной инфраструктурой, поскольку он позволил бы взаимосвязь между DID и приложениями, требующими соответствия, а также взаимосвязь между самими регулированиями.
Проблема: каждый увидел бы личность каждого!
К счастью, у нас есть решение: гомоморфное шифрование, а точнее fhEVM! Благодаря возможности иметь композицию на зашифрованном состоянии, мы можем размещать учетные записи пользователей напрямую на цепочке в зашифрованной форме и иметь признанные приложения, проверяющие атрибуты с помощью простого вызова контракта. Возможность управлять идентификацией через смарт-контракт, который мы называем «Абстракция идентичности», подобна тому, как можно управлять средствами через смарт-контракт с помощью Абстракции учетной записи.
Этот учебник состоит из 3 частей:
Архитектура нашего протокола конфиденциального DID Onchain
Контракт IdentityRegistry - это реестр DID пользователей, выданных регистраторами, включающий набор зашифрованных идентификаторов, таких как их национальность, возраст, номер социального страхования и т. д. Эти идентификаторы хранятся как зашифрованные 32-разрядные значения (euint32).
Контракт также обрабатывает разрешения, такие как:
В качестве первого шага давайте реализуем логику создания и управления DID:
Теперь следующим шагом будет реализация логики идентификаторов и контроля доступа.
Идентификатор - это просто строка (например, «дата рождения») и зашифрованное 32-битное значение. Его можно создать или обновить только регистратору. Пользователь не может создавать свои собственные идентификаторы, так как мы хотим, чтобы они были подтверждены регистратором.
Поскольку идентификаторы зашифрованы, пользователь должен дать разрешение контракту на доступ к конкретным значениям, что мы будем обрабатывать через простой механизм контроля доступа, аналогичный тому, как вы можете разрешить контракту тратить ваши токены ERC20.
контракт IdentityRegistry - это EIP712WithModifier, Ownable
Теперь мы можем завершить наш контракт реестра идентификации, добавив необходимые методы получения, с некоторыми условиями и обработкой ошибок.
контракт IdentityRegistry является EIP712WithModifier, Ownable
Следующим шагом будет создание нашего контракта о регулировании.
При реализации набора правил для трансферов между двумя физическими лицами важно понимать, что эти правила могут развиваться со временем. Наличие одного умного контракта, определяющего всю регламентацию для определенного контекста, такого как перевод денег, означает, что контрактов ERC20 не нужно отслеживать регулирование самостоятельно. Правительства могут просто обновить этот контракт, и он автоматически распространится на все токены, которые его реализовали.
По сути, регулирующий контракт представляет собой просто набор условий, которые сопоставляются с зашифрованными атрибутами личности. Чтобы избежать злоупотреблений, пользователи не предоставляют прямой доступ к регулирующему контракту, а предоставляют доступ к контракту токена ERC20, который затем выполняет делегированный вызов к регулирующему контракту. Такой подход гарантирует, что только контракт ERC20, которому пользователь доверяет, может получить доступ к его информации. Имейте в виду, что как отправитель, так и получатель должны предоставить разрешение контракту ERC20 перед тем, как между ними может произойти передача.
В этом примере мы реализуем некоторые основные правила:
Вместо того чтобы сбой транзакции, который может раскрыть чувствительную информацию, мы просто установим сумму перевода равной 0, если одно из условий не выполняется. Для этого используется гомоморфный тернарный оператор, называемый cmux: value = TFHE.cmux(encryptedCondition, valueIfTrue, valueIfFalse
Теперь, когда у нас есть реестр идентификации и регуляционный контракт, мы наконец можем создать наш соблюдающий, сохраняющий конфиденциальность токен контракт. Этот контракт будет называться CompliantERC20 и иметь следующие ключевые особенности:
Контракт регулирования вызывается с помощью простого вызова. Это подразумевает, что пользователи должны предоставить доступ к контракту ERC20 перед инициированием любого перевода; в противном случае перевод будет отменен.
Наконец, теперь мы можем создать наш контракт ERC20:
Аналогично тому, как пользователи предоставляют разрешения протоколам DeFi на использование своих токенов, им потребуется предоставить разрешение контракту на доступ к идентификаторам, необходимым для контракта о регулировании. Это делается с помощью вызова Identity.grantAccess(contractAddress, identifiers), которое может быть получено путем вызова метода просмотра ERC20.identifiers(). Этот список поступает непосредственно из контракта ERC20Rules для обновления свойств.
Надеемся, что этот учебник показал вам, что обеспечить соответствие требованиям несложно, если доступны инструменты управления правами. Хотя изначально мы создали fhEVM для обеспечения конфиденциальности в блокчейне, мы быстро поняли, что эту технологию можно использовать для управления идентификацией и, таким образом, программируемого соответствия.
Предлагаемый дизайн здесь далеко не идеально, но мы считаем, что его легко можно улучшить и запустить как реальный пример использования в реальном мире, чтобы соответствие больше не было синонимом слежки!
Несколько месяцев назад криптокоманда a16z опубликовала Испытание Накамото, список наиболее важных проблем, которые необходимо решить в блокчейне. Особенно привлекло наше внимание четвертое: «Соответствие программной конфиденциальности», так как мы активно думаем об этом уже некоторое время. Сегодня мы предлагаем первое решение с использованием гомоморфного шифрования и нашего протокола конфиденциального смарт-контракта fhEVM (если вы не знакомы с fhEVM, вы можете прочитать наши статьи о конфиденциальности Токен ERC20ислепые аукционы).
fhEVM - это обычный EVM с некоторыми предварительными компиляциями, которые позволяют вычислять зашифрованные состояния с использованием нашей библиотеки гомоморфного шифрования TFHE-rs. С точки зрения разработчика здесь нет криптографии: они просто пишут код Solidity, используя предоставляемые нами типы данных (euint32, ebool и т. д.). Одним из больших преимуществ fhEVM по сравнению с другими решениями конфиденциальности является то, что все данные и вычисления происходят onchain. Это означает, что у вас может быть такой же уровень композиции и доступности данных, как у обычных контрактов с открытым текстом.
Это свойство является ключевым для создания программной конфиденциальности, поскольку вся логика контроля доступа может быть определена непосредственно в самом контракте. Нет ничего, что должно быть жёстко задано в протоколе, и нет необходимости выполнять какие-либо действия вне цепи для соответствия. Приложение может обеспечить соответствие напрямую всего лишь несколькими строками кода на Solidity!
В этой статье мы покажем, как создать соблюдаемый токен ERC20, используя ончейн DIDs. Исходный код для этого учебного пособия можно найти в папка примероврепозитория fhEVM.
Децентрализованный идентификатор (DID) — это уникальное цифровое удостоверение, которое выдается таким субъектом, как правительство, регистратор, компания или сам пользователь. Этот DID может быть привязан к криптографическому ключу, который доказывает, что пользователь владеет DID, например, к кошельку EVM. Но он также может хранить целый ряд атрибутов, таких как возраст пользователя, национальность, номер социального страхования и т. д. Эти атрибуты, в свою очередь, могут быть использованы для доказательства того, что вы соответствуете какому-либо условию (называемому «аттестацией»), например, быть старше 18 лет или не быть гражданином Нарнии.
Большинство DID реализуются на стороне клиента и используют подтверждения с нулевым разглашением для создания аттестаций. Хотя во многих случаях это нормально, это быстро усложняется, когда в транзакции участвует несколько пользователей, когда вам нужно применить сложные правила к DID или когда вам нужно сохранить общий набор правил, которым должны следовать все. По сути, это тот же компромисс, что и в периферийных и облачных приложениях.
Имея централизованный реестр DID, можно было бы решить эти проблемы, поскольку вы могли бы просто попросить реестр проверить, что все соблюдают правила. Это также упростило бы отслеживание регулирований, поскольку вам нужно было бы реализовать его только в одном месте. Для этого блокчейн был бы идеальной инфраструктурой, поскольку он позволил бы взаимосвязь между DID и приложениями, требующими соответствия, а также взаимосвязь между самими регулированиями.
Проблема: каждый увидел бы личность каждого!
К счастью, у нас есть решение: гомоморфное шифрование, а точнее fhEVM! Благодаря возможности иметь композицию на зашифрованном состоянии, мы можем размещать учетные записи пользователей напрямую на цепочке в зашифрованной форме и иметь признанные приложения, проверяющие атрибуты с помощью простого вызова контракта. Возможность управлять идентификацией через смарт-контракт, который мы называем «Абстракция идентичности», подобна тому, как можно управлять средствами через смарт-контракт с помощью Абстракции учетной записи.
Этот учебник состоит из 3 частей:
Архитектура нашего протокола конфиденциального DID Onchain
Контракт IdentityRegistry - это реестр DID пользователей, выданных регистраторами, включающий набор зашифрованных идентификаторов, таких как их национальность, возраст, номер социального страхования и т. д. Эти идентификаторы хранятся как зашифрованные 32-разрядные значения (euint32).
Контракт также обрабатывает разрешения, такие как:
В качестве первого шага давайте реализуем логику создания и управления DID:
Теперь следующим шагом будет реализация логики идентификаторов и контроля доступа.
Идентификатор - это просто строка (например, «дата рождения») и зашифрованное 32-битное значение. Его можно создать или обновить только регистратору. Пользователь не может создавать свои собственные идентификаторы, так как мы хотим, чтобы они были подтверждены регистратором.
Поскольку идентификаторы зашифрованы, пользователь должен дать разрешение контракту на доступ к конкретным значениям, что мы будем обрабатывать через простой механизм контроля доступа, аналогичный тому, как вы можете разрешить контракту тратить ваши токены ERC20.
контракт IdentityRegistry - это EIP712WithModifier, Ownable
Теперь мы можем завершить наш контракт реестра идентификации, добавив необходимые методы получения, с некоторыми условиями и обработкой ошибок.
контракт IdentityRegistry является EIP712WithModifier, Ownable
Следующим шагом будет создание нашего контракта о регулировании.
При реализации набора правил для трансферов между двумя физическими лицами важно понимать, что эти правила могут развиваться со временем. Наличие одного умного контракта, определяющего всю регламентацию для определенного контекста, такого как перевод денег, означает, что контрактов ERC20 не нужно отслеживать регулирование самостоятельно. Правительства могут просто обновить этот контракт, и он автоматически распространится на все токены, которые его реализовали.
По сути, регулирующий контракт представляет собой просто набор условий, которые сопоставляются с зашифрованными атрибутами личности. Чтобы избежать злоупотреблений, пользователи не предоставляют прямой доступ к регулирующему контракту, а предоставляют доступ к контракту токена ERC20, который затем выполняет делегированный вызов к регулирующему контракту. Такой подход гарантирует, что только контракт ERC20, которому пользователь доверяет, может получить доступ к его информации. Имейте в виду, что как отправитель, так и получатель должны предоставить разрешение контракту ERC20 перед тем, как между ними может произойти передача.
В этом примере мы реализуем некоторые основные правила:
Вместо того чтобы сбой транзакции, который может раскрыть чувствительную информацию, мы просто установим сумму перевода равной 0, если одно из условий не выполняется. Для этого используется гомоморфный тернарный оператор, называемый cmux: value = TFHE.cmux(encryptedCondition, valueIfTrue, valueIfFalse
Теперь, когда у нас есть реестр идентификации и регуляционный контракт, мы наконец можем создать наш соблюдающий, сохраняющий конфиденциальность токен контракт. Этот контракт будет называться CompliantERC20 и иметь следующие ключевые особенности:
Контракт регулирования вызывается с помощью простого вызова. Это подразумевает, что пользователи должны предоставить доступ к контракту ERC20 перед инициированием любого перевода; в противном случае перевод будет отменен.
Наконец, теперь мы можем создать наш контракт ERC20:
Аналогично тому, как пользователи предоставляют разрешения протоколам DeFi на использование своих токенов, им потребуется предоставить разрешение контракту на доступ к идентификаторам, необходимым для контракта о регулировании. Это делается с помощью вызова Identity.grantAccess(contractAddress, identifiers), которое может быть получено путем вызова метода просмотра ERC20.identifiers(). Этот список поступает непосредственно из контракта ERC20Rules для обновления свойств.
Надеемся, что этот учебник показал вам, что обеспечить соответствие требованиям несложно, если доступны инструменты управления правами. Хотя изначально мы создали fhEVM для обеспечения конфиденциальности в блокчейне, мы быстро поняли, что эту технологию можно использовать для управления идентификацией и, таким образом, программируемого соответствия.
Предлагаемый дизайн здесь далеко не идеально, но мы считаем, что его легко можно улучшить и запустить как реальный пример использования в реальном мире, чтобы соответствие больше не было синонимом слежки!