Найти в Дзене
Ghost Academy

Транзакции в сети Ghost

Эта статья поможет сориентироваться в транзакциях между разными кошельками в сети Ghost. Часть 1 В первую очередь начнём с понятия «баланс» и «адрес», поскольку они являются взаимозаменяемыми в одном смысле и невзаимозаменяемыми в другом. а) Адрес — это место, на котором лежат монеты. При этом владелец кошелька Ghost может создавать столько адресов, сколько захочет и каждый раз использовать их для пополнения или других операций. При этом общая сумма выводится в целях удобства на главной панели кошелька, и в этом и заключается отличие, когда говорят о «балансе». Монеты лежат не на балансе, монеты лежат на адресах, которые обобщены в одной оболочке, являющейся кошельком. Иначе говоря, баланс кошелька — это сумма монет, лежащих на адресах. б) Это связано с тем, что кошельки Ghost используют ту же модель входов и выходов, что и Биткоин, которая называется UTXO, в детали которой мы не будем сейчас вдаваться. Достаточно иметь представление, как работает кошелёк, когда монеты лежат на несколь
Оглавление

Эта статья поможет сориентироваться в транзакциях между разными кошельками в сети Ghost.

Часть 1

В первую очередь начнём с понятия «баланс» и «адрес», поскольку они являются взаимозаменяемыми в одном смысле и невзаимозаменяемыми в другом.

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

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

б) Это связано с тем, что кошельки Ghost используют ту же модель входов и выходов, что и Биткоин, которая называется UTXO, в детали которой мы не будем сейчас вдаваться. Достаточно иметь представление, как работает кошелёк, когда монеты лежат на нескольких созданных адресах.

Например, владелец создал новый пустой кошелёк. Для того чтобы принять монеты, он должен создать адрес, на который эти монеты могут быть отправлены. Владелец создаёт адрес и на него происходит пополнение. Дальше возможны варианты: либо принять следующий платёж на тот же самый адрес, либо создать новый. Представим, что владелец создаёт новый адрес и на него тоже происходит пополнение. Преставим также, что в первом случае было получено 10 монет Ghost, а во втором 5. Получим 15 монет в кошельке и это то, что называют «баланс», но монеты находятся не на балансе, монеты лежат на адресах, которые разъединены друг с другом до тех пор пока владелец не переведёт монеты с одного адреса на другой, либо не отправит все 15 монет вместе.

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

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

Часть 2

Теперь, когда мы определились с балансами и адресами, скажем, что в сети Ghost есть два типа адресов: публичные и скрытые. Публичные адреса начинаются с префикса ‘G’. Скрытые адреса начинаются с префикса ‘SP’.

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

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

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

-2

Часть 3

Поскольку криптовалюта Ghost ориентирована в первую очередь на анонимность пользователей, рассмотрим анонимные транзакции между различными кошельками, которые доступны владельцам монет.

Итак, на момент написания статьи доступны четыре официальных и два неофициальных кошелька.[1] Скрытые адреса поддерживаются в трёх официальных кошельках и это —
Ghost Core, Ghost Desktop и Телеграм-бот Ghost Pay. Следовательно анонимные транзакции совершаются между этими тремя кошельками в режиме полной анонимности FULL ANON.[2]

Отправка анонимной транзакции

Давайте отправим анонимную транзакцию с кошелька Ghost Desktop.

-3

В данном примере кошелёк создан заранее, с одним сгенерированным скрытым адресом, на котором лежит 9 монет. Теперь нам нужно отправить монеты на другой адрес.

Для этого переходим на вкладку ‘SEND’ на левой панели (жёлтый прямоугольник).

-4

Убеждаемся, что в окне PAY FROM установлен пункт ‘Anon’ (красный прямоугольник). Копируем адрес, на который мы хотим отправить монеты, и вставляем в поле, которое подчеркнуто красной линией.[3]

Как мы помним, анонимные адреса начинаются с префикса
SP. Тут стоит сказать, что если адрес указан не правильно, то буквы будут отображаться красным цветом. Раньше пользователи криптовалют теряли монеты, поскольку они безвозвратно отправлялись на неверные адреса. При попытке отправки средств на неверный/несуществующий адрес, кошелёк Ghost Desktop предупреждает ошибку и делает неактивной кнопку отправки, защищая таким образом владельца от потери средств, даже если бы он захотел сделать это намеренно. Если адрес выделяется красным цветом, очистите поле и заново укажите правильный адрес.

Теперь выберите графу ‘Advansed options’ в верхнем правом углу и спуститесь вниз.

-5

В нижнем левом углу установите уровень желаемой приватности, который измеряется в размере колец криптографического протокола RingCT. Чем выше значение, тем надёжнее транзакция. Максимальное значение — 32 кольца. К слову, в известной анонимной криптовалюте Monero это значение составляет 16.

Теперь осталось указать сумму и другие необязательные опции. В поле ‘сумма’ (Ammount to send) указываем количество монет. Можно указывать дробные значения, например, 0.099 $GHOST. Если Вы хотите отправить всю сумму (независимо от того, на одном или на нескольких адресах лежат монеты), поставьте галочку в графе ‘отправить всё’ (Send All). Тогда это поле поменяет свой цвет на красный, а сумма будет заполнена автоматически и не сможет быть изменена. Дополнительно указывается примечание (Narration).

-6

В рамках данной инструкции отправляем 6 монет Ghost и добавляем примечание “Благотворительность”.

После того, как всё заполнено, нажимаем кнопку Make payment.

-7

Монеты Ghost отправлены с Вашего скрытого адреса на скрытый адрес получателя! Транзакция получила TXid (без каких-либо сведений о переводе) и добавлена в список на главной панели.

-8

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

Ниже Вы можете ознакомиться с тем, как совершить анонимную транзакцию в Ghost Desktop в видео формате.

Платёжный запрос на скрытый адрес

Теперь посмотрим как создать платёжный запрос на скрытый адрес. В Ghost Desktop такая функция не предусмотрена, однако её можно использовать в Ghost Core, Телеграм-кошельке Ghost Pay, а также в настольной и мобильной версии Ghost Electrum для публичных адресов.

Суть платёжного запроса сводится, что называется, к выставлению счетов с заранее указанными параметрами, такими как адрес, сумма, примечание и срок действия, что удобно для совершения предустановленных платежей. Говоря иначе,
URI — это ссылка, которая вставляется и заполняет все поля за один клик. Давайте создадим запрос на анонимную транзакцию в Ghost Pay, а потом совершим по нему оплату с другого кошелька.

Итак, отправьте боту команду /payme

-9

Ответьте на вопросы, которые бот задаст для формирования запроса

  • на анонимный или публичный адрес Вы хотели бы получить перевод
  • какова сумма перевода (с возможностью установить эквивалент в $ или BTC)
  • хотите ли добавить примечание
  • хотите ли установить срок

После того, как все шаги пройдены, бот предоставит URI-ссылка и QR-код.

-10

В данном примере указан анонимный адрес с суммой 5 монет Ghost и примечанием “На шоколадку” без срока действия.

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

Для этого переходим на вкладу ‘Отправка’ и нажимаем кнопку вставки (если копировалась ссылка), либо сканируем QR-код через кнопку Поиск. Как видим, все поля заполняются автоматически.

-11

Остаётся только нажать кнопку Оплатить и отправить платёж.

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

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

Отправка на несколько адресов

а) Теперь давайте совершим ANON-транзакцию на несколько адресов. Для этого откроем кошелёк Ghost Core и перейдём на вкладку ‘Отправить’. Внизу есть кнопка Добавить получателя. Сначала можно заполнить первую форму, затем нажать на эту кнопку и приступить к заполнению второй. Можно нажать сразу и заполнить формы за один подход. Порядок не имеет значения. Вы можете добавлять столько получателей, сколько необходимо. Заполнение форм предусматривается также с помощью URI. В этом примере совершим перевод двум получателям.

Итак, указываем адреса и суммы и получаем панель вот такого вида.

-12

В общей сложности отправляется три монеты: одна первому получателю и две второму. Теперь давайте посмотрим сколько и на каких адресах лежит в нашем кошельке монет.

б) Для этого переходим в верхний левый угол (жёлтый прямоугольник) и нажимаем кнопку Входы. Откроется новое окно.

-13

Открываем выпадающее под-меню и выбираем Anon. Это позволит просмотреть монеты на скрытых адресах, даже если на один и тот же адрес пополнение происходило несколько раз. Этим адреса и отличаются от входов, ибо вход — это количество поступлений на адрес.

Окно входов в режиме списка
Окно входов в режиме списка

Например, на кошельке может быть создано два адреса и получено десять входов (три на один адрес и семь на другой). Если представить, что каждое пополнение происходило по 5 монет, это означало бы, что первый адрес содержал бы 15 монет, а второй 35, при этом в целом на кошельке лежало бы 50 монет, которые владелец мог бы тратить. Сторонний наблюдатель не может определить, что эти два адреса находятся в одном кошельке, только если владелец не совершит транзакцию, в которой средства связаны между собой: например, если бы нужно было отправить 40 монет.

Это окно позволяет точно выбирать, монеты с каких конкретных входов отправляются получателям. И когда на стороне получателя монеты попадают на адрес (допустим, не использованный ранее), на нём создаётся новый вход, а с Вашего адреса создаётся выход.

  • Собственно говоря, UTXO, о котором речь шла в первой части, переводится как «непотраченный выход транзакции». Сумма монет на этих непотраченных выходах и является моделью баланса в кошельке.

Просмотр доступен в режиме списка и в режиме дерева. Вид дерева позволяет визуально определить какие входы принадлежат тем или иным адресам. Если при отправке транзакции входы не проставляются, то кошелёк выбирает их автоматически. Таким образом, если Вы хотите исключить из движения средств те или иные суммы, Вы можете указать монеты с конкретных входов. Либо установить заморозку, которая предотвращает трату при пользовании кошельком в автоматическом режиме.

При совершении ANON-транзакций выбор входов не является обязательным и применяется пользователями по желанию. Однако он востребован с применением публичных адресов и приводится здесь в рамках инструкции по работе с кошельком.

Окно входов в режиме дерева
Окно входов в режиме дерева

в) Итак, давайте переключим окно входов в режим дерева и представим, что работаем с публичной транзакцией.

Мы видим, что в кошельке создано два адреса, на одном из которых лежит 3 монеты, а на другом 3,5; то есть всего шесть с половиной монет, три из которых нужно отправить получателям.

На первый взгляд можно совершить транзакцию с любого адреса, однако не стоит забывать про комиссии, которые предусмотрены для всех транзакций в рамках работы блокчейна. Когда мы ставим галочку на вход, то кошелёк видит эту сумму как всю имеющуюся вообще. Поэтому, если мы выберем адрес, на котором лежит 3 монеты, то кошельку не хватит этих средств и он будет вынужден обратиться к другому адресу для покрытия комиссии, однако, поскольку он не сможет этого сделать, будет показано сообщение «недостаточно средств» и транзакция не отправится. Поэтому в данном случае мы выбираем адрес с суммой 3,5 монет: тогда обе комиссии спишутся из входа размером 2,5 монет, а второй адрес останется не тронутым.

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

Таким образом, выбираем вход, нажимаем OK.

-16

Окно входов закроется. Далее сообщаем кошельку какую транзакцию он должен совершить (анонимную, публичную, конвертацию). Для этого выбираем типы адресов в выпадающих под-меню под формой заполнения. Поскольку монеты отправляются между скрытыми адресами, выбираем Anon в обоих случаях. Если бы транзакция выполнялась между публичными адресами, то Ghost => Ghost. Если бы происходила конвертация, то из Ghost в Anon или наоборот. Если что-то будет указано неправильно, при попытке отправки кошелёк выдаст сообщение об ошибке.

Осталось проверить сопутствующие детали: размер колец, комиссии, адреса для сдачи, примечания... Нажимаем кнопку ‘Отправить’

-17

И подтверждаем платёж. Монеты Ghost на несколько скрытых адресов успешно отправлены!

Инструкция в видео формате.

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

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

1) Кошелек способен генерировать неограниченное количество адресов

2) Количество пополнений на адрес соответствует количеству входов

3) Трата происходит с входов, но отправка происходит между адресами

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

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

Читайте также:

Сноски:

[1] Поскольку Ghost — это проект с открытым исходным кодом, опирающийся на поддержку сообщества, правильнее было бы говорить 4 нативных, 1 кастодиальный кошелёк и 1 децентрализованный обменник. Перечислим все доступные кошельки (ссылки на скачивание).

4 нативных — это два full-node кошелька Ghost Core и Ghost Desktop (ПК). Помимо этого Ghost Electrum (ПК и android) и Ghost Pay (любое устройство в Telegram).

1 кастодиальный — это Hebe Wallet (android и iphone) и 1 обменник GhostX.live (или swaponline.io)

В декабре 2023 состоялся анонс SHELTR

[2] В данном контексте предполагается, что пользователь соблюдает базовые правила цифровой гигиены

[3] Обратите внимание, третий тип адресов BLIND не используется и упразднён. Так же, как и в случае с неверно указанными адресами, кошелёк не допускает использование этого парамерта