В этой статье мы узнаем, как интегрировать аппаратный кошелек Trezor T с интерфейсом MoneroGUI для работы с криптовалютой Монеро. Но для начала кратко разберем основы этой криптовалюты.

Про блокчейн и ключи Monero XMR

Monero (XMR) – это криптовалюта, основанная на специальном протоколе Cryptonote для совершения анонимных транзакций.

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

Такая анонимность порождает интересное свойство – взаимозаменяемость (Fungibility). Одна из важнейших целей, которые ставят перед собой разработчики – это создание 100% взаимозаменяемой монеты. Это означает, что ценность 1 XMR должна быть идентичной другому 1 XMR. Например, криптовалюты типа Bitcoin могут быть замешаны в нелегальных операциях и со временем «загрязняться». Таким образом, ценность 1 BTC с плохой репутацией будет меньше, чем ценность 1 BTC с белой историей. Тот факт, что блокчейн Биткоина полностью открытый, и можно просмотреть историю транзакций любого адреса, свидетельствует о том, что у Биткоина в ближайшем будущем могут возникнуть проблемы с взаимозаменяемостью.

Перед тем как изучать ключи и транзакции, повторим еще немного тезисов про Monero:

  • Блоки утверждаются каждые 2 минуты с помощью доказательства выполнения работы (PoW) с использованием алгоритма хеширования CryptoNight, который устойчив к ASIC’ам;
  • Блоки не имеют строго ограниченного размера. Вместо этого размер блока может увеличиваться или уменьшаться с течением времени в зависимости от состояния сети;
  • Сложность пересчитывается каждый блок, как и вознаграждение;
  • Эмиссия монет не ограничена. После выпуска 18,4 миллиона XMR последующий майнинг блоков будет приносить по 0.6 XMR за каждый блок. Это сделано для того, чтобы заложить экономический интерес для будущего майнинга.

Ключи Monero

Наиболее сложным для понимания для меня была тема с ключами. В Монеро помимо обычной пары приватного и публичного ключа используются дополнительные ключи.

Вот так выглядит публичный адрес Monero:

86v3WaPp8PkJRgiTA4sypWfPw3Mxvk4AvjeFQDVk3u98S9JMMMDzZCd8cgEZbNeEoQdGLEFG
T9U3yXT4rhtH3v7v9Fv5EJA

Он состоит из 95 символов и дополнительно состоит из двух частей:

Ключи для просмотра (View keys):

  • Публичный ключ просмотра (Public view key) – используется Отправителем для генерации одноразового скрытого адреса (Stealth address);
  • Приватный ключ просмотра (Private view key) – используется Получателем средств для определения какие монеты были переведены ему.

В Монеро есть и стандартные ключи:

Ключи для траты средств (Spend keys):

  • Публичный ключ траты (Public spend key) – предназначен для участия в кольцевых транзакциях (об этом ниже) и для подтверждения подписи образа ключа (об этом тоже ниже);
  • Приватный ключ траты (Private spend key) – предназначен для создания образа ключа с помощью которого отправляются транзакции.

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

Предполагается, что читатель знаком с темой транзакций в Биткоине. Если нет, то сперва рекомендуется ознакомиться с этой темой в одной из наших лекций.

Биткоин транзакции (часть 1)

Биткоин транзакции (часть 2)

Транзакции с участием скрытых адресов (Stealth Address)

Я буду сильно упрощать материал, чтобы облегчить понимание.

Получение монет

Алиса хочет перевести 100 XMR Бобу. Для этого она предоставляет Бобу один из своих публичных адресов. Боб вычисляет из него публичный адрес просмотра (Public view key) и на основе него генерирует скрытый адрес (Stealth address).

Важно помнить, что адрес Боба содержит Private и Public view key. С помощью последнего и рассчитывается скрытый адрес (Stealth Address).

Трата монет

Когда же приходит черед Боба и он хочет потратить полученные от Алисы 100 XMR. Для этого он использует Private spend key, чтобы отсканировать блокчейн в поисках отправленной ему транзакции. Он может вычислить приватный ключ, который соответствует скрытому адресу (Stealth address), указанному в транзакции, и совершает новый платеж.

Немного тезисов для лучшего понимания транзакции в Monero:

  • Публичные адреса получателя и отправителя не сохраняются в блокчейне. Вместо них в блокчейн записываются одноразовые скрытые адреса для каждой транзакции;
  • Скрытый адрес вычисляет Отправитель с помощью Публичного адреса получателя;
  • Публичный адрес Monero позволяет любому участнику сети рассчитать открытый ключ просмотра;
  • Ключи просмотра (Public view key, Private view key) позволяют только создавать одноразовые адреса и проверять наличие баланса в блокчейне. С помощью них нельзя будет потратить монеты;

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

Кольцевые подписи (Ring Signatures)

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

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

Природа криптографии кольцевых подписей такова, что никто не сможет доказать, какие выходы действительно являются источником. И также эта технология обладает еще одним важным для криптовалют свойством! Несмотря на то, что никто не сможет доказать, кто из участников кольцевой подписи совершает транзакцию, система сможет обнаружить, если отправитель попытается перевести свои средства дважды. Это делается благодаря специальному ключу Key Image, рассчитанному, как уже говорилось ранее, с помощью Public Spend Key.

Другой пример. Скорее всего вам известен мультисиг принцип в Биткоине, где одним кошельком распоряжаются несколько участников, например, по схеме 2-3. Это означает, что для совершения платежа требуются любые 2 из 3 подписей. Однако для использования цифровых активов в таком виде участникам требуется объединить ключи и рассчитать новые общие адреса.

Подробнее о MultiSig в нашем видео

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

Немного тезисов:

  • Кольцевая подпись присутствует во всех транзакциях Монеро;
  • Кольцевая подпись создается отправителем;
  • Другие участники кольца не участвуют в формировании подписи. Более того они даже и не знают об этом;
  • Внешнему наблюдателю невозможно установить и понять, кто из участников создал подпись;
  • Чем больше кольцо, тем сложнее определить того, кто создал транзакцию;
  • Чем больше совершается транзакций, тем больше смешиваются выходы друг с другом, и тем больше уровень анонимности.

Кольцевые конфиденциальные транзакции (Ring CT)

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

Я постарался в очень сжатом виде донести ту информацию, которая пригодится нам в практической части. Перейдем к Monero GUI.

Monero GUI

С этого момента мы начинаем обзор интерфейса MoneroGUI и его интеграцию с аппаратным кошельком Trezor T.

[ofer-trezor-t]

Загрузка и установка

Переходим на страницу загрузки клиента и скачиваем дистрибутив под нашу операционную систему. Доступны Windows, macOS, Linux для 64 разрядных систем. Кстати, getmonero.org — это официальная страница сообщества, где можно найти много полезной информации. Для удобства в правом верхнем углу можно сменить язык отображения сайта на русский.

При скачивании дистрибутивов можно проверить на соответствие их подписи. Полный список подписей в этом файле, который подписан одним из основателей Монеро Riccardo “fluffypony” Spagni.

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

В следующем окне нам предлагается выбрать вид кошелька:

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

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

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

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

Затем мы переходим в окно, где нам предлагается:

  • Создать новый кошелек – имеется в виду горячий;
  • Подключить аппаратный – наша опция с интеграцией;
  • Открыть кошелек из файла – импорт файлов с расширением .keys
  • Восстановиться из ключей или мнемонической фразы – восстановление кошелька с помощью приватного ключа или seed’а.

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

В данном моменте предполагается, что аппаратный кошелек Трезор Т активирован и настроен. Если вы этого еще не сделали, то рекомендую ознакомиться с нашим большим обзором устройства Trezor T.

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

Например, если наша первая транзакция была включена в 2017-07-08 в блоке 1350000, мы должны указать дату предыдущего дня (например, 2017-07-06) или немного меньшую высоту (например, 1330000), чтобы кошелек начал сканирование с нужного места и сэкономил наше время. Моя высота блока равно 1914673, что я и введу.

Высота блока отображается при создании кошелька.

Нажимаем далее.

У вас может быть выключена Кодовая фраза. В этом случае, шаги ввода фраз будут отсутствовать.

Кодовая фраза (часть 1)

Кодовая фраза (часть 2)

Задаем пароль к файлу MoneroGUI с расширением .keys. Он будет необходим при совершении транзакций и отображения ключей просмотра.

Кошелек настроен. Жмем Открыть кошелек и переходим к интерфейсу.

Интерфейс и настройки MoneroGUI

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

Баланс в интерфейсе не отобразится до тех пор, пока сканирование не завершится.

В определенный момент необходимо будет подтвердить на аппаратном кошельке обновление данных интерфейса.

После этих действий и после того, как завершится синхронизация, баланс подтянется и отобразится в левом верхнем углу.

Обратим внимание на нижний правый угол – там видно состояние клиента, а именно синхронизирован он или нет. Самая нижняя строчка показывает высоту актуального блока. По умолчанию мы находимся в разделе отправить. Его мы разберем немного позже, а пока перейдем в Настройки клиента.

Здесь имеются три вкладки: Кошелек, Интерфейс и Информация.

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

Больший интерес представляет раздел Показать мнемонику & ключи. Для перехода потребуется ввести пароль.

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

Приватный ключ просмотра (Private View Key) – Позволяет владельцу кошелька просматривать входящие транзакции. Иногда его следует предоставлять третьей стороне, чтобы доказать совершение платежа;

Публичный ключ просмотра (Public View Key) – Используется Отправителем для создания скрытого адреса;

Приватный ключ траты (Private Spend Key) – Как и в Биткоине используется для подписания транзакций. Его нельзя передавать никому. Собственно, поэтому он и скрыт Трезором;

Публичный ключ траты (Public Spend Key) – Используется для проверки подписи образа ключа (Key Image). Это как раз то, что предотвращает двойные траты, так как магия криптографии делает так, что ключевой образ можно подписать только один раз.

В самом низу отображается QR-код, предназначенный только для мониторинга.

Вкладка Интерфейс содержит ряд полезных настроек:

Заголовок окна – добавляет дополнительное меню с кнопками выхода из кошелька, смены языка и перехода в ночную тему. Также фиксирует размер окна;

  • Скрыть баланс – скрывает баланс;
  • Включить перевод с ID платежа – устаревшая опция, которая использовалась в качестве идентификатора, например, при отправке на биржу. Использование подобных идентификаторов сильно занижало уровень конфиденциальности;
  • Светлая тема – смена темы интерфейса на темную;
  • Блокировать кошелек при бездействии – включение блокировки при бездействии от 1 до 60 минут;
  • Включить отображение баланса в других валютах – при клике на значок Иены в области баланса значения меняются на фиатные.

Вкладка Информация отображает данные о файле кошелька: версия, путь к кошельку, высоту блока, путь к логам и тип интерфейса.

Высоту блока можно изменять в этом окне. Для этого кликните по ссылке Нажать для изменения и далее следует ввести либо высоту блока, либо дату в формате ГГГГ-ММ-ДД.

Аккаунт

Стоит отметить, что Монеро относится к криптовалюте с моделью учета Accounts, которая также используется в Биткоине, Лайткоине, Биткоин Кэше и т.п., где дочерние ключи используются для получения и сдачи.

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

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

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

Выберем второй счет и перейдем к получению средств.

Получить

В разделе Получить отображается список использованных адресов. Я создал специально адрес получения для этой статьи:

85SHa3F4h5fEcXZfQKSNDiPw8fqTAPVTCf5rmxNGaqKiYjAVmpkRiQce4DbrnWCZoG2mE39Y
sn46M2byTxzHzLDg9SyLCod

Для удобства справа от адреса есть кнопка копирования.

Снизу также есть две кнопки – сохранить QR-код в png формате и скопировать в буфер.

Адрес получения содержит информацию о ключах просмотра. Собственно, именно так и создаются скрытые адреса Отправителем.

Копируем адрес и попробуем отправить средства с другого счета.

Отправить

В разделе Отправить вводим сумму для отправки и подставляем адрес.

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

Подтверждаем адрес отправки и соглашаемся с суммой.

После подтверждения девайс будет формировать подпись дольше чем в других криптовалютах.

Подпись Monero занимает примерно в 8 раз больше места, чем в Биткоине. Именно поэтому подписание транзакции занимает так много времени.

После вводим пароль от клиента и видим окно отправки, но уже с меньшим балансом на счете.

А в счете 1 смотрим разницу баланса и заблокированного баланса (не утвержденного в блокчейне). Кстати, клиент пишет ориентировочное время подтверждения ~14 минут.

Транзакция

В разделе транзакций можно посмотреть список всех платежей.

Здесь представлена базовая информация сколько и кому мы отправили. На каком блоке замайнили транзу, количество подтверждений и комиссия. ID транзакции и адрес получателя.

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

Под значением Дата есть две кнопки с латинскими буквами I и P.

Первая кнопка I отображает детали транзакции. Обратите внимание на параметр Размер кольца, где можно найти 11 участников разделенными пробелами.

Вторая кнопка P отображает ключ InProof, который, как я полагаю, предназначен для подтверждения платежа третьему лицу. Правда я не нашел, где его можно применить.

Обозреватели Monero

Стоит учесть, что Монеро обозреватели не выполняют роль, где можно посмотреть подтверждения платежей, однако посмотреть информацию о текущей высоте блока и транзакциях (входах и выходах) все же можно. Правда ни адресов и ни сумм видно не будет.

  • MoneroBlocks – популярный обозреватель с базовой информацией;
  • Minergate – обозреватель нескольких валют в том числе и Монеро;
  • Xmrchain – обозреватель с возможностью декодировать и доказать платеж.

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

Мое мнение о MoneroGUI и полезные ссылки

В целом у меня не возникло никаких серьезных проблем при интеграции за исключением мертвых подвисаний интерфейса при выходе из кошелька. В таких случаях приходилось принудительно завершать работу клиента. Также хочется пожелать разработчикам поскорее добавить возможность отображать в исходящих транзакциях ключ транзакции (Transaction Key) для возможности подтверждать платеж перед третьими лицами.

  • Сайт русскоязычного сообщество xmr.ru и телеграм-чат;
  • Официальный сайт getmonero.org комьюнити, где можно получить общее представление о криптовалюте (с русским переводом);
  • Сайт monero.how с наиболее полной информацией о Монеро (на английском).

Частые вопросы

Ответим на часто-задаваемые вопросы по интеграции и в целом по сети Монеро.

Ошибка кошелек не подключен к Демону.

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

Предупреждение – Ожидание окончания синхронизации Демона

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

Как подключиться к полной ноде вручную?

В нижнем левом углу кликаем по ссылке Удаленная нода и в соответствующих полях Address, Port устанавливаем нужные значения.

Как подтвердить перед третьими лицами транзакцию?

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

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

На вопрос о отсутствии ключа транзакции на официальной страничке Reddit мне ответили следующее:

Обещают, что в следующей версии 0.15 эта опция будет работать. Обычно для подтверждения транзакции требуются следующее:

  • id транзакции;
  • адрес получателя;
  • ключ транзакции.

Насколько быстро подтверждаются транзакции?

Как правило через 2-3 минуты транзакция получает первое подтверждение в блокчейне, а уже через 25-27 минут 10 подтверждений.

Насколько дорогие комиссии в Monero?

Согласно одной из моих транзакций я заплатил 0.000026170000 XMR, что по текущему курсу составляет 0,0017 цента или 0,1 копейки. Но стоит учесть, что комиссии могут увеличиться в зависимости от загруженности сети.

Если данные в транзакциях монеро скрыты, то как сеть борется с двойным расходованием?

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

В чем разница между легким и обычным кошельком?

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

Чем основное отличие Монеро от Биткойна?

  • Блокчейн Монеро не содержит информации о адресах пользователей;
  • Можно сказать, что транзакции пользователей постоянно смешиваются друг с другом, как если бы каждый раз пользователь в Биткоине использовал протокол CoinJoin для смешивания монет;
  • Суммы входов и выходов тоже недоступны в открытом виде;

Эти свойства порождают еще одно свойство – взаимозаменяемость. Информация об этом была в начале статьи.

Что такое Коври (Kovri)?

Kovri – это аппаратный маршрутизатор I2P, который будет работать с Monero. Он скрывает трансляцию транзакций, чтобы другие узлы не смогли идентифицировать отправителя. В настоящее время проект находится в альфа-версии, и он еще не полностью интегрирован в Monero.

Видео-обзор

Посмотреть весь процесс интеграции можно на нашем YouTube канале или на этой странице.

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

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

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

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