Многих пользователей аппаратных кошельков волнует один и тот же вопрос – как можно получать, хранить и тратить криптовалюту Tether USDT. Напомню, что особенность этого стейблкойна заключается в привязке 1 USDT к 1 доллару. Это позволяет сохранить ценность своих активов во время высокой волатильности на рынке криптовалют. В этой статье я покажу, как используя аппаратные кошельки, можно совершать платежи с Tether.

Как работает Tether

Tether использует данные блокчейна биткоина через протокол OMNI Layer – программное обеспечение с открытым исходным кодом, которое взаимодействует с блокчейном биткоина и обеспечивает движение, то есть получение и трату токенов USDT.

Помимо Tether существует огромное множество других цифровых активов, использующих этот протокол. Ознакомиться с ними можно в omni обозревателе.

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

Структура OMNI транзакций

Рассмотрим omni платеж с помощью обозревателя обозревателя блокчейна от SatoshiLabs.

Ссылка на транзакцию - 30f9199cc09bacf64e2e50f0ff812053fc6979cd711d0cbee0b3a31ff0801554

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

OMNI Simple Send 2143,31 TetherUS (#31)

И здесь важно отметить четыре особенности такого платежа:

  • Адрес отправителя и сдачи должны быть идентичны. В спецификации протокола OMNI есть правило, которое определяет получателя, как выход с наибольшим индексом. Так как многие интерфейсы конфигурируют порядок выходов по неизвестному нам алгоритму, то может случиться так, что выход сдачи будет с наибольшим индексом, чем выход получателя, таким образом, отправитель отправит USDT сам себе. Во избежании этого, необходимо чтобы адрес отправления был равен адресу сдачи; в этом случае OMNI протокол проигнорирует этот выход и определит получателя с адресом 1LxNaNcfbDN6ZqXCFzM1Wj1ueDFzn6Zpo2;
  • Помимо USDT мы отправляем получателю минимальную сумму в биткоинах 546 сатоши. Этот выход определяет адрес получателя;
  • При отправлении USDT необходимо иметь на адресе Биткоины, так как комиссию за эту транзакцию мы будем выплачивать в них;
  • Очевидное условие, но я все же решил его тоже озвучить – на адресе отправителя должна быть необходимая сумма в USDT.
Помимо принципа Адрес отправителя = Адресу сдачи, можно применить хитрость и совершить транзакцию без сдачи. В этом случае, нужно, чтобы при отправлении у нас была небольшая сумма в BTC и, чтобы она вся ушла на выплату комиссии. Такая транзакция будет иметь вид 1 вход и 2 выхода (получатель, op_return).

Перед тем как начать практиковать такие платежи, я бы хотел разобрать выход со строкой OMNI Simple Send 2143,31 TetherUS (#31).

Разбираем OP_RETURN

В сыром виде он выглядит вот так:

{
"value": 0,
"n": 1,
"scriptPubKey": {
"asm": "OP_RETURN 6f6d6e69000000000000001f00000031e71f84c0",
"hex": "6a146f6d6e69000000000000001f00000031e71f84c0",
"type": "nulldata"
}

Отбросим лишний код.

OP_RETURN 6f6d6e69000000000000001f00000031e71f84c0

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

Теперь рассмотрим этот код, который записан в шестнадцатеричном формате или в HEX.

6f6d6e69000000000000001f00000031e71f84c0

Разделим его на смысловые части:

6f6d6e69 00000000 0000001f 00000031e71f84c0

1. 6f6d6e69 при переводе c HEX в кодировку ASCII означает “omni”. Это можно проверить с помощью соответствующего конвертера;

2. 00000000 при переводе с HEX в десятичный формат означает цифру 0, в спецификации OMNI этот индекс означает команду Simple Send, то есть отправку.

3. 0000001f при переводе с HEX в цифры равен 31. На странице омни-обозревателя можно найти индекс этого номера за которым закреплен токен Tether;

4. 00000031e71f84c0 при переводе в десятичный формат означает 214 331 000 000. Почему такая большая цифра? Дело в том, что USDT отправляется в микроцентах. 1 USDT = 100 000 000 микроцентам.

Последняя часть данных должна иметь длину в 16 символов. То есть, если мы хотим отправить 1usdt, который равен 5f5e100, то мы добавляем 9 нулей впереди, чтобы получилось 16 символов – 0000000005f5e100 и так по аналогии с другими суммами.

Повторяем важное!

Во избежание ошибок еще раз зафиксируем следующие утверждения:

  • Адрес отправления = Адресу сдачи
  • Адрес отправления должен иметь баланс в BTC для оплаты комиссии
  • Получателю отправляем пыль в 546 сатоши
  • Формируем правильный код в HEX. Первые три блока данных 6f6d6e69 00000000 0000001f статичные (без пробелов), а последние формируем с помощью google-конвертера при условии, что 1usdt = 100 000 000 микроцентам
Первые транзакции совершайте на маленькие суммы и в периметре кошельков, которые дают полный контроль над средствами. В противном случае вы потеряете деньги!

Получаем USDT

Для получения я использую адрес 3L7VHGV5nUW4Gr3jH64pqVoMH5CuJLDTyH, мне необходимо убедиться, что на нем имеются биткоины, которые пригодятся для расходов на комиссию. Не будет лишним сверить адреса на дисплее аппаратного кошелька и на ПК.

Запомним путь деривации расчет ключа m/49’/0’/1’/0/3, он нам пригодится немного позже.

Обратите внимание, что биткоин адрес получателя должен начинаться с 1 или 3, формат bech32, начинающиеся с «bc1», не поддерживаются протоколом Omni.

Теперь отправляем USDT с биржи или горячего кошелька на аппаратный кошелек и дожидаемся подтверждения.

Транзакцию также можно посмотреть в ОМНИ обозревателе.

Обратим внимание, что OMNI обозреватель не отображает сдачу, как это делает биткоин обозреватель.

Тратим USDT

Как я говорил ранее, чтобы успешно совершить транзакцию необходимо, чтобы адрес сдачи совпадал с адресом отправления. В интерфейсе trezor.io это сделать не удастся, так как у нас нет возможности управлять выходами. Поэтому воспользуемся интеграцией Trezor T с горячим кошельком Electrum.

Интеграция с Electrum

Скачивайте Electrum с официального сайта сообщества electrum.org!!!

Даем название кошельку.

Выбираем тип кошелька – Standard wallet.

Выбираем опцию Use a Hardware Wallet.

Устанавливаем желаемый тип соединения – Webusb новый протокол обмена, а bridge требует наличия приложения trezor bridge.

Если включена кодовая фраза (passphrase), то вводим ее.

Напомню, что в Trezor T есть опция ввода кодовой фразы и через устройство, где выбираем пункт Device.

Выбираем формат ключей и пути деривации. Так как я использую адрес, который начинается с 3, то это p2sh-segwit формат. В путях деривации на уровне аккаунтов устанавливаем цифру 1 (первый аккаунт 0, второй 1) в соответствии с путями, которые были предложены при использовании ключа – m/49’/0’/1’/0/3.

Шифруем файл кошелька.

Попадаем в интерфейс кошелька Electrum. Мы его можем определить по первому поступлению в 546 сатоши, которые мы отправили недавно.

И первое, что нам необходимо сделать – это выключить автоматическую подстановку адресов сдачи, чтобы адрес отправления и сдачи были идентичны.

Создаем транзакцию

Выбираем адрес, на который были отправлены токены tether. Нажимаем правой кнопкой мыши опцию Spend from, которая позволяет тратить средства непосредственно с него.

В данном окне я уберу лишние входы (правая кнопка и Remove), которые мне не нужны, так как достаточно будет средств для оплаты комиссии и с одного входа.

И вводим в строке Pay to команду OP_RETURN и код в HEX:

6f6d6e69000000000000001f 000000001dcd6500

Последняя часть данных означает перевод 5 USDT, то есть 500 000 000 микроцентов. При переводе этой цифры в HEX мы получаем 1dcd6500. В конце ставим запятую и цифру 0, которая будет означать, что на этот выход мы отправляем ноль биткоинов.

Биткоины отправленные на выход с OP_RETURN будут сожжены навсегда!!!

Добавляем второй выход с адресом получателя – 3KStF5tPingpcuqM1fi9P99KYFcaCavDG3 и минимальной суммой отправления в 546 сатоши.

Комиссию я установлю максимальную в 23049 сатоши, чтобы платеж быстро подтвердился. Еще раз тщательно проверяем вход, выходы, суммы и нажимаем на кнопку Send.

Подтверждаем действия на аппаратном кошельке. Мы видим, что Trezor T распознает эту транзакцию и отображает команду OP_RETURN в удобном виде. Сначала соглашаемся с намерением отправить USDT, далее сверяем адрес получателя и соглашаемся с комиссией.

Транзакция успешно совершена.

Подтверждение транзакции

Теперь самое время по id посмотреть на то, как выглядит транзакция в обозревателе биткоина.

Мы видим, что адрес отправления используется один и тот же. Мы видим пыль предназначенную для получателя и также видим Simple Send 5 Tether USDT.

Можно скопировать id транзакции и посмотреть ее в омни обозревателе.

Здесь она выглядит также за исключением отображения сдачи.

Подождем подтверждения.

Подтверждение в блокчейне биткоина.

Подтверждение в omni обозревателе.

Как потратить USDT с помощью аппаратных кошельков Keepkey, Ledger Nano S, Nano X?

Пользователи других аппаратных кошельков могут также повторить все эти действия с помощью интеграции с кошельком Electrum, которые можно увидеть в следующих видео:

Интеграции Ledger Nano S и Electrum

Интеграции Trezor и Electrum

Не будет лишним также ознакомиться с фишингом сайта Electrum

Весь процесс совершения транзакции Tether я демонстрировал в одном из роликов на нашем YouTube канале.

Любое копирование материалов допустимо со ссылкой на данную страницу!

    Подпишитесь на рассылку

    Свежие новости из мира криптовалюты, блокчейна, обзоры аппаратных кошельков

    Похожие статьи Перейти в блог