Прослушивание платежей (в реальном времени) на вашем кошельке Stellar


Прослушивание платежей (в режиме реального времени) на вашем кошельке Stellar

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

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

Почему мы хотим получать уведомления о последних платежах, поступающих на наш кошелек

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

Нам нужно найти способ получать уведомления о входящих платежах.

Решение 1

Периодически получать данные о платежах по счету с помощью API-запроса. С помощью следующего GET-запроса пользователь может получить платежи, связанные с идентификатором_счета/публичным_ключом.

Используя запрос curl:

curl "https://horizon.stellar.org/accounts/<account_id>/payments?limit="
Войти в полноэкранный режим Выход из полноэкранного режима

Приведенный выше запрос curl получает последние платежи по указанному идентификатору счета.

Пример ответа:

{
  "_links": {
    "self": {
      "href": "https://horizon.stellar.org/accounts/GCNL55IJTH2HX26HLNIGYD2JIQLTBAQL3SVPNZA6PXK7NAVHU423WOTE/payments?cursor=u0026limit=10u0026order=desc"
    },
    "next": {
      "href": "https://horizon.stellar.org/accounts/GCNL55IJTH2HX26HLNIGYD2JIQLTBAQL3SVPNZA6PXK7NAVHU423WOTE/payments?cursor=110694007436259329u0026limit=10u0026order=desc"
    },
    "prev": {
      "href": "https://horizon.stellar.org/accounts/GCNL55IJTH2HX26HLNIGYD2JIQLTBAQL3SVPNZA6PXK7NAVHU423WOTE/payments?cursor=119400713599217665u0026limit=10u0026order=asc"
    }
  },
  "_embedded": {
    "records": [
      {
        "_links": {
          "self": {
            "href": "https://horizon.stellar.org/operations/119400713599217665"
          },
          "transaction": {
            "href": "https://horizon.stellar.org/transactions/b9d7c534b5fa168570a5bffe0f2089de150d00bf8cbd19ec93e897c565958f3f"
          },
          "effects": {
            "href": "https://horizon.stellar.org/operations/119400713599217665/effects"
          },
          "succeeds": {
            "href": "https://horizon.stellar.org/effects?order=descu0026cursor=119400713599217665"
          },
          "precedes": {
            "href": "https://horizon.stellar.org/effects?order=ascu0026cursor=119400713599217665"
          }
        },
        "id": "119400713599217665",
        "paging_token": "119400713599217665",
        "transaction_successful": true,
        "source_account": "GCNL55IJTH2HX26HLNIGYD2JIQLTBAQL3SVPNZA6PXK7NAVHU423WOTE",
        "type": "payment",
        "type_i": 1,
        "created_at": "2020-01-17T20:32:38Z",
        "transaction_hash": "b9d7c534b5fa168570a5bffe0f2089de150d00bf8cbd19ec93e897c565958f3f",
        "asset_type": "credit_alphanum4",
        "asset_code": "USD",
        "asset_issuer": "GDUKMGUGDZQK6YHYA5Z6AY2G4XDSZPSZ3SW5UN3ARVMO6QSRDWP5YLEX",
        "from": "GCNL55IJTH2HX26HLNIGYD2JIQLTBAQL3SVPNZA6PXK7NAVHU423WOTE",
        "to": "GASWJWFRYE55KC7MGANZMMRBK5NPXT3HMPDQ6SEXZN6ZPWYXVVYBFRTE",
        "amount": "84.9410878"
      },
      {
        "_links": {
          "self": {
            "href": "https://horizon.stellar.org/operations/117356420835532801"
          },
          "transaction": {
            "href": "https://horizon.stellar.org/transactions/c25dd84798076ee8ea126c78407d61c7e8f3efdf8739274f56b07a7029500b00"
          },
          "effects": {
            "href": "https://horizon.stellar.org/operations/117356420835532801/effects"
          },
          "succeeds": {
            "href": "https://horizon.stellar.org/effects?order=descu0026cursor=117356420835532801"
          },
          "precedes": {
            "href": "https://horizon.stellar.org/effects?order=ascu0026cursor=117356420835532801"
          }
        },
        "id": "117356420835532801",
        "paging_token": "117356420835532801",
        "transaction_successful": true,
        "source_account": "GDV4KECLSZLKRVH4ZTWVAS4I3W2LPAPV66ADFFUZKGIVOTK6GMKGJT53",
        "type": "payment",
        "type_i": 1,
        "created_at": "2019-12-18T08:23:35Z",
        "transaction_hash": "c25dd84798076ee8ea126c78407d61c7e8f3efdf8739274f56b07a7029500b00",
        "asset_type": "native",
        "from": "GDV4KECLSZLKRVH4ZTWVAS4I3W2LPAPV66ADFFUZKGIVOTK6GMKGJT53",
        "to": "GCNL55IJTH2HX26HLNIGYD2JIQLTBAQL3SVPNZA6PXK7NAVHU423WOTE",
        "amount": "355.3887598"
      },
      {
        "_links": {
          "self": {
            "href": "https://horizon.stellar.org/operations/115354197276323841"
          },
          "transaction": {
            "href": "https://horizon.stellar.org/transactions/c09d4cee993d60d73c80f036666966738a26b8f3b25d7275b93fd995505b5e5b"
          },
          "effects": {
            "href": "https://horizon.stellar.org/operations/115354197276323841/effects"
          },
          "succeeds": {
            "href": "https://horizon.stellar.org/effects?order=descu0026cursor=115354197276323841"
          },
          "precedes": {
            "href": "https://horizon.stellar.org/effects?order=ascu0026cursor=115354197276323841"
          }
        },
        "id": "115354197276323841",
        "paging_token": "115354197276323841",
        "transaction_successful": true,
        "source_account": "GDV4KECLSZLKRVH4ZTWVAS4I3W2LPAPV66ADFFUZKGIVOTK6GMKGJT53",
        "type": "payment",
        "type_i": 1,
        "created_at": "2019-11-18T19:59:40Z",
        "transaction_hash": "c09d4cee993d60d73c80f036666966738a26b8f3b25d7275b93fd995505b5e5b",
        "asset_type": "native",
        "from": "GDV4KECLSZLKRVH4ZTWVAS4I3W2LPAPV66ADFFUZKGIVOTK6GMKGJT53",
        "to": "GCNL55IJTH2HX26HLNIGYD2JIQLTBAQL3SVPNZA6PXK7NAVHU423WOTE",
        "amount": "688.4065454"
      }
    ]
  }
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Недостатками этого подхода являются:

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

Решение 2

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

Ниже описано, как это решение может быть реализовано:

Сначала мы устанавливаем необходимую зависимость stellar-sdk в наш проект, используя следующую команду:

yarn add stellar-sdk
Войти в полноэкранный режим Выйти из полноэкранного режима

Во-вторых, мы импортируем stellar-sdk с помощью ключевого слова require. После этого мы инициализируем сервер sdk с помощью horizon url перед его использованием.

var StellarSdk = require("stellar-sdk");
var server = new StellarSdk.Server("https://horizon.stellar.org");

server
  .payments()
  .cursor('now')
  .stream({
      onmessage: (payment)=>{},
      onerror: (error)=>{}
  })
Вход в полноэкранный режим Выход из полноэкранного режима

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

{
        "_links": {
          "self": {
            "href": "https://horizon.stellar.org/operations/115354197276323841"
          },
          "transaction": {
            "href": "https://horizon.stellar.org/transactions/c09d4cee993d60d73c80f036666966738a26b8f3b25d7275b93fd995505b5e5b"
          },
          "effects": {
            "href": "https://horizon.stellar.org/operations/115354197276323841/effects"
          },
          "succeeds": {
            "href": "https://horizon.stellar.org/effects?order=descu0026cursor=115354197276323841"
          },
          "precedes": {
            "href": "https://horizon.stellar.org/effects?order=ascu0026cursor=115354197276323841"
          }
        },
        "id": "115354197276323841",
        "paging_token": "115354197276323841",
        "transaction_successful": true,
        "source_account": "GDV4KECLSZLKRVH4ZTWVAS4I3W2LPAPV66ADFFUZKGIVOTK6GMKGJT53",
        "type": "payment",
        "type_i": 1,
        "created_at": "2019-11-18T19:59:40Z",
        "transaction_hash": "c09d4cee993d60d73c80f036666966738a26b8f3b25d7275b93fd995505b5e5b",
        "asset_type": "native",
        "from": "GDV4KECLSZLKRVH4ZTWVAS4I3W2LPAPV66ADFFUZKGIVOTK6GMKGJT53",
        "to": "GCNL55IJTH2HX26HLNIGYD2JIQLTBAQL3SVPNZA6PXK7NAVHU423WOTE",
        "amount": "688.4065454"
}
Вход в полноэкранный режим Выход из полноэкранного режима

Преимущества данного подхода:

  • Масштабируемость; Надежность. Он не требует дополнительных ресурсов, если / когда ваша транзакционная активность растет со временем.
  • Получайте статус платежей по мере их проведения в режиме реального времени, используя памятку, поставляемую в сочетании с реализованным бизнес-процессом.

Дополнительные ресурсы

Документация Stellar

Оцените статью
Procodings.ru
Добавить комментарий