Стелс-транзакции. Как это работает

0
459

Немного теории

Для начала разберемся, что такое стелс-транзакции в блокчейне на движке Graphene. Представьте, что Алиса хочет тайно отправить Бобу деньги внутри блокчейна, чтобы этого никто, кроме них не увидел. Для этого они должны пройти некоторую последовательность действий:

1. Боб создает некий приватный аккаунт, и делится (по независимому каналу связи) публичным ключом с Алисой как доказательством того, что этот аккаунт принадлежит ему. Аккаунт хранится НЕ в блокчейне, а ТОЛЬКО в кэше существующей сессии браузера в данный момент времени; 

2. Алиса создает приватный контакт приватного аккаунта Боба с помощью публичного ключа приватного аккаунта Боба (Сложно, но так надо!);

3. Алиса отправляет на этот приватный контакт стелс-транзакцию и передает по независимому каналу связи получившийся ключ-подтверждение Бобу; в блокчейне лишь фиксируется факт совершения Алисой стелс-транзакции.

4. По независимому каналу связи Боб получает связи ключ-подтверждение для расшифровки стелс-транзакции, и выводит средства из стелса на свой публичный аккаунт. В блокчейне фиксируется факт получения Бобом стелс-транзакции (отправитель неизвестен)

Механизм стелс-транзакции чем-то схож с работой эдакого простейшего локального смарт-контракта. Его также можно сравнить с торговлей и доставкой товаров через постаматы, с единственной оговоркой, что в блокчейне на Graphene ни случайно, ни специально найти и вскрыть вашу ячейку третьему лицу не представляется возможным.

Текущая комиссия

Нужно понимать, что комиссия платится дважды, как отправителем, так и получателем. Каждая из операций в блокчейне transfer TO blind и transfer FROM blind по сути являются двумя отдельными операциями, воспроизводимыми в РАЗНОЕ время.

Первая комиссия платится из баланса отправителя. Она жестко зашита в коде и составляет примерно 110.3643 DEEX.

Вторая комиссия вычитается из получаемой суммы и эквивалентна по core_exchange_rate 110.3643 DEEX. Она платится в ассете отправленной стелс-транзакции.

Пример: Алиса хочет отправить Бобу 10 BTS через DEEX.EXCHANGE.

Алиса платит 10 BTS+ ~23 BTS (заранее оплаченная комиссия при получении) + 110.3643 DEEX (комиссия при отправлении)

Таким образом, в стелс-транзакцию закладывается ~33 BTS.

Получив необходимую информацию, Боб распаковывает стелс-транзакцию и получает ~33-23=10 BTS.

Переходим к практике

Важное предупреждение!

Стелс-транзакции кэшируются ТОЛЬКО локально! При выходе из аккаунта или обновлении страницы существует огромный шанс потерять переводимые средства!

Ниже проведен эксперимент в ДВУХ ОТКРЫТЫХ ВЕРСИЯХ браузера, т.к. если вы хотите проверить работу stealth, то в ДВУХ ВКЛАДКАХ одного браузера ничего не выйдет, ибо логика стелс-транзакций смотрит в одну и ту же WebSQL-базу.

Последовательность действий следующая

1. Боб логинится в deex.exchange и кликает на новую опцию Stealth в интерфейсе своего кошелька.

Боб логинится в deex.exchange и кликает на новую опцию Stealth в интерфейсе своего кошелька

2. Боб создает приватный аккаунт с любым именем (имя аккаунта нужно лишь для того, чтобы сам Боб не запутался).

Боб создает приватный аккаунт с любым именем

3. Боб копирует свой публичный ключ только что созданного приватного аккаунта.

Боб копирует свой публичный ключ только что созданного приватного аккаунта

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

Боб передает по независимому каналу связи

5. Получив публичный ключ Боба, Алиса создает его приватный контакт. Для этого она логинится в deex.exchange и кликает на кнопку Stealth.

Получив публичный ключ Боба, Алиса создает его приватный контакт

6. Алиса создает приватный контакт Боба с его публичным ключом (имя, опять же, необходимо для того, чтобы не запутаться). 

Алиса создает приватный контакт Боба с его публичным ключом

7. Алиса кликает на имя созданного контакта.

Алиса кликает на имя созданного контакта

8. А затем — на опцию send transaction.

А затем - на опцию send transaction

9. Алиса заполняет сумму транзакции (помним про 10+~23 BTS)

Алиса заполняет сумму транзакции

Конпка send может продолжительное время быть такого вида, пока транзакция инициализируется.

Конпка send может продолжительное время быть такого вида, пока транзакция инициализируется

10. Алиса копирует ключ-подтверждение для «распаковки стелса».

Алиса копирует ключ-подтверждение для распаковки стелса

11. И отправляет его Бобу.

And sends it to Bob

12. Получив подтверждение от Алисы, Боб кликает на своем приватном контакте.

Получив подтверждение от Алисы, Боб кликает на своем приватном контакте

13. А затем на receive transaction.

А затем на receive transaction

А затем на receive transaction

14. После нажатия на approve у Боба появится поле your balance и новая транзакция. Боб кликает на Send Transaction (в данном случае Send означает переслать деньги из Stealth в публичный аккаунт. Боб может передать их кому-то еще, или указать свой аккаунт чтобы получить их самому).

После нажатия на approve у Боба появится поле your balance и новая транзакция

15. Кликнув на Maximum amount Боб увидит сумму Stealth с вычетом комиссии (23 BTS). Указав свой аккаунт, он отправляет транзакцию себе.

Кликнув на Maximum amount Боб увидит сумму Stealth с вычетом комиссии

16. …и видит как его баланс пополнился из анонимного источника 🙂

и видит как его баланс пополнился из анонимного источника

В Activity видно blind transfer.

В Activity видно blind transfer

На-этом-все!

Децентрализованная криптобиржа

Добавить комментарий

Please enter your comment!
Please enter your name here