R3 Corda: Как проверяется действительность ввода транзакции у нотариусов, не проводящих валидацию, без раскрытия истории транзакции?

Я хотел бы включить Corda в один из моих проектов для управления несколькими активами между большим количеством участников. В моем случае использования критически важным требованием является сохранение конфиденциальности истории активов.

Документация Corda дает хороший обзор, но я до сих пор не понимаю, как достигается консенсус с нотариусом, не подтверждающим валидацию, без показа истории актива другой стороне, участвующей в транзакции.

Пример: предположим, что Алиса получила 10 долларов в транзакции A от Чарли и теперь хочет передать 20 долларов Бобу в транзакции B. Нотариус, не проверяющий подлинность, зарегистрировал транзакцию A, но не знает, что сумма транзакции составляла 10 долларов (если я понял это правильно, https://docs.corda.net/key-concepts-notaries.html). Теперь Алиса использует транзакцию A в транзакции B, и нотариус может подтвердить, что она не использовалась ранее. Но что мешает Алисе сказать Бобу, что она получила 20 долларов от Чарли в транзакции A? Бобу нужно будет посмотреть на цепочку транзакций, чтобы убедиться, что Алиса действительно может потратить 20 долларов. Следовательно, Боб должен знать историю наличных денег.

Я хотел бы знать, неправильно ли я понял документацию или это действительно проблема.

Спасибо!


person Julian    schedule 23.09.2019    source источник


Ответы (1)


Консенсус в Corda происходит на двух уровнях:

  • Консенсус по валидности
  • Консенсус уникальности

https://docs.corda.net/key-concepts-consensus.html

Консенсус действительности включает выполнение контракта каждой из сторон, участвующих в транзакции, и предоставление соглашения о результате транзакции в форме для подписи.

Консенсус уникальности, с другой стороны, осуществляется нотариусом, который проверяет двойные расходы.

Итак, в вашем примере нотариус просто проверит, используется ли ввод, используемый в транзакции, в которой Алиса платит 20 долларов Бобу, нотариус (не проверяющий) не может проверить действительность части консенсуса, все, что он проверяет, это то, используется ли ввод в транзакции уже потрачено или нет.

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

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

Это могло быть нарушением конфиденциальности, поэтому Чарли мог использовать конфиденциальную личность, транзакция, которая скроет его личность в цепочке транзакций, следовательно, Боб будет знать только то, что была транзакция, в которой Алиса получила 10 долларов от анонимного объекта, а личность Чарли не будет быть раскрытым.

В будущих версиях Corda узлы, скорее всего, будут обмениваться цепочками транзакций только в форме, зашифрованной SGX. Затем эти цепочки транзакций будут проверены в анклаве SGX на узле. Это не позволит узлам видеть содержимое проверяемых транзакций (см. Сообщение в блоге здесь: https://www.corda.net/2017/06/corda-sgx-privacy-update/). Это может даже зайти так далеко, что узлы смогут видеть только определенные части транзакций, которые они подписывают.

Надеюсь, что это ответ на ваш вопрос.

person Ashutosh Meher    schedule 23.09.2019
comment
Спасибо за объяснение. Да, это ответ на мой вопрос! - person Julian; 24.09.2019
comment
Что бы вы посоветовали скрыть личность Чарли в текущей версии? HD-кошельки? - person Julian; 24.09.2019
comment
Используйте конфиденциальную идентификацию: docs.corda.net/api-identity.html#confidential- личности - person Ashutosh Meher; 24.09.2019
comment
Спасибо! Не видел этого в документации. - person Julian; 24.09.2019