Можно ли скрыть владельца невзаимозаменяемого токена?

По сути, я хотел бы иметь уникальные записи, которые можно передавать между сторонами, и никто не знает, кому принадлежит конкретная запись, до тех пор, пока не произойдет передача, и только получатель может сказать, кому принадлежит запись.

В основном мне любопытно, возможно ли что-то подобное даже теоретически. Мне особенно интересно знать, достиг ли кто-то этого.

Ответы (4)

Я бы не исключал.

Многое будет зависеть от точной формулировки гарантий, которые должна предоставлять система. Например, «пока не произойдет передача, в этот момент только получатель может сказать, кому принадлежит запись».

Все идет нормально. Итак, должен ли получатель быть скрыт от всех остальных, чтобы этот процесс мог повториться, или можно с этого момента раскрывать право собственности на актив? Другими словами, является ли секретом только первоначальный владелец или вся цепочка поставок? Есть ли преимущество в сокрытии продавца от покупателя?

Я склонен думать, что это теоретически возможно, но нетривиально. Речь идет о разработке процессов запутывания и распутывания фактов и формулировании доказательств.

Надеюсь, поможет.

Благодарю за ваш ответ. Для этого конкретного случая использования я бы хотел замаскировать всю цепочку хранения. Я полагаю, это было бы невозможно, нет?
Я научился никогда не говорить «нет», потому что какой-нибудь умный парень предложит решение. Это не тривиально.

Если ваш NFT совместим с ERC721, то нет, согласно не доработанному стандарту ERC721 , это невозможно. Требование стандарта заключается в том, чтобы ваш контракт токена NFT содержал следующую функцию.

function ownerOf(uint256 _tokenId) external view returns (address);

Функция принимает один аргумент (tokenId) и возвращает адрес владельца токена.

Хорошо, спасибо за указание на стандарт. Я был бы открыт для рассмотрения пользовательского формата NFT по мере необходимости.
Конечно, не требуется, чтобы ваш токен соответствовал какому-либо стандарту, но вы должны знать, что несоответствие будет препятствием для принятия вашего токена другими проектами или торговыми площадками. Но если вы не собираетесь использовать или продавать свой токен за пределами вашей собственной экосистемы, то соответствие стандартам, вероятно, не имеет значения.
Более того, никто не говорит вам, какой должна быть функция. Вы вольны делать все, что вам требуется. Если вы хотите, чтобы некоторые пользователи использовали его, а другие — нет, при соблюдении спецификации интерфейса никто не сможет сказать вам, что вы не правы. Другими словами: в IERC20 ожидается наличие баланса (адреса). Но если написать в строке 1 «require (msg.sender = Vitalik Buterin);» это нормально с точки зрения стандарта 😉
Также ничто не мешает вам создать NFT, в котором ownerустановлено что-то вроде протокола Tornado, хотя до тех пор, пока в протокол не будет добавлено достаточное количество NFT, найти владельца будет тривиально. Это единственная проблема с технологией обфускации в Ethereum, она не обеспечивает настоящей конфиденциальности для первых последователей.

Чтобы добавить к ответу @anAllergyToAnalogy.

Даже если ваш токен не соответствует стандарту ERC721, вы, по сути, спрашиваете, возможно ли хранить секретную информацию в блокчейне. Вы, наверное, знаете, что ответ в значительной степени «нет».

Вы можете придумать всевозможные решения, но обычно они включают шифрование перед отправкой в ​​блокчейн, а сам контракт не будет иметь доступа к информации без помощи извне. И в этом случае смысл использования Ethereum немного теряется.

Благодарю за ваш ответ. Хорошо, я определенно собираюсь использовать одно из этих решений, связанных с шифрованием. Я не думаю, что это полностью отрицает смысл использования Ethereum, особенно если он используется только для маскировки определенных полей или предоставления некоторой записи, которую владелец может раскрыть позже.

zknifty — это рабочий пример невзаимозаменяемых токенов (NFT), основанных на доказательствах zk-SNARK. Однако он не был разработан для обеспечения конфиденциальности, поскольку его целью является « сжатие » нескольких транзакций в одно доказательство (т. е. минимизация хранимых данных в смарт-контракте). Основная идея заключается в том, что смарт-контракт хранит только корень дерева Меркла, любое изменение которого соответствует следующим требованиям:

  • Фактический владелец передаваемого токена подписал сообщение
  • Это сообщение состоит из идентификатора токена и адреса получателя.
  • Подпись действительна
  • Передача токена отражена в новом дереве merkle

Прообраз листьев этого дерева содержит открытый ключ владельца и идентификатор NFT. Это обеспечивает некоторую конфиденциальность, поскольку в контракте хранится только корень дерева, и невозможно получить информацию из этих доказательств.

Однако есть некоторые предостережения:

  • Поскольку этот проект не был разработан для конфиденциальности, листья не содержат анонса и, следовательно, могут быть угаданы методом грубой силы; т.е. h(идентификатор токена || адрес получателя) с известным набором идентификатора токена и адресов.
  • Поскольку вы задаете этот вопрос для Ethereum, транзакция Ethereum всегда содержит адрес отправителя , что может быть проблемой.

Отказ от ответственности : я не автор zknifty