Как отследить статус транзакции с помощью PHP запроса?


#1

Прошу знатоков подсказать, как с помощью скрипта на PHP можно отследить статус транзакции?
Скажем так: есть сайт, зарегистрированный клиент заказывает товар или услугу, скрипт выставляет клиенту счет (в локальной БД фиксируется внутренний ИД операции, сумма, дата/время). Клиенту сообщается адрес кошелька на который необходимо перевести указанную сумму и, возможно, указать в комментарии ИД операции. Клиент совершает транзакцию. Задача скрипта: определить завершение транзакции. Механизм инициирования запроса неважен, важно понять каким образом и откуда получить статус транзакции. В общем нужен пример строки запроса и обработки ответа.

  • хочется обойтись без composer, который требуется кажется во всех найденных мной примеров обращения к API
  • хочется обойтись без установки собственной ноды

#2

Привет! Без обращения к API узнать статус транзакции не представляется возможным. По сути, при совершении транзакции с адреса A на адрес B средств в объёме С, нам нужно обратиться на адрес B и получить входящую транзакцию от A объёмом C. Это можно осуществить только при помощи API.

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


#3

Привет!
Спасибо за ответ!

  • пункт “обойтись без установки ноды” вычеркиваем, остальное в силе

Ок. Предположим я установил свою ноду.
Как от нее получить необходимую информацию? (Именно с помощью PHP)


#4

Сделать это можно при помощи простого GET-запроса, пример:

function exampleFunction() {
    $string = file_get_contents("https://nodes.wavesplatform.com/addresses/balance/details/3P9DEDP5VbyXQyKtXDUt2crRPn5B7gs6ujc");
    $json = json_decode($string, true);
    $generatingBalance = $json['generating'];
    echo number_format(($generatingBalance / 100000000), 2);
}

Данная функция позволяет нам узнать генерирующий баланс ноды :tradisys: Tradisys и вывести результат, округлив его до двух знаков после запятой.

Изучить другие запросы можно тут.


#5

Благодарю!
Завтра буду пробовать.


#6

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

Например, все кошельки по умолчанию работают через данный кластер, https://nodes.wavesplatform.com, что на практике означает: при проблемах на этих нодах, подавляющее большинство клиентов вообще не сможет пользоваться кошельками и проводить транзакции.

Решение вашей задачи:

  • проверяем транзакцию в блокчейне: https://nodes.wavesnodes.com/transactions/info/{id}
  • наличие транзакции равносильно её проведению
  • проверяем параметры транзакции (адреса, сумма и т.д.)
  • ждём достаточного количества подтверждений (на биржах от 6 подтверждений)
  • для этого сравниваем высоту (height) транзакции с текущей высотой сети: https://nodes.wavesnodes.com/blocks/height
  • по достижению подтверждений проверяем, что транзакция на месте без изменений
  • финиш

Если паранойя не отпускает:

  • делаем запросы не только к официальным нодам, а потом сверяем все ответы
  • проверяем подпись транзакции самостоятельно
  • пытаемся отправить транзакцию в блокчейн повторно, смотрим код ошибки

#7

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


#8

Именно с этим и было несогласие.

Если есть желание поспорить, тут не обойтись односложным ответом, необходимо обосновать:

  • Чем уровень безопасности официальных нод хуже своей ноды?
  • Почему своя нода у вас синоним максимальной безопасности?

С учётом приведённых выше параной.


#9

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


#10

Чем уровень безопасности официальных нод хуже своей ноды?

Если предположить, что некий платёжный сервис оперирует большими объёмами наличности, в том числе криптовалютной, то обращаясь к публичной ноде он рискует столкнуться с, например, такой вот проблемой.

Почему своя нода у вас синоним максимальной безопасности?

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

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


#11

Только скрипт ведь не знает ID транзакции. Он может знать только сумму, адрес зачисления и текстовое примечание, которое можно использовать как идентификатор. Даже сумму не всегда обязательно знать, ее лучше получить по факту.


#12

обращаясь к публичной ноде он рискует столкнуться с, например, такой вотпроблемой.

И что? Данные легко проверяются. Подделка не пройдёт валидацию подписи. Так что мимо.

беспокоиться даже из-за физического доступа к серверам

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

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

Вряд ли кто-то в ближайшее время вложится в ноды больше чем Waves вложились в официальные ноды.

Только скрипт ведь не знает ID транзакции. Он может знать только сумму, адрес зачисления и текстовое примечание, которое можно использовать как идентификатор. Даже сумму не всегда обязательно знать, ее лучше получить по факту.

Можно мониторить последние транзакции, связанные с конкретным адресом, например своим, куда ждёте прихода: https://nodes.wavesnodes.com/transactions/address/{address}/limit/{limit}