Stellar 지갑에서 결제(실시간) 듣기

Stellar 지갑에서 결제(실시간) 듣기



Stellar는 모든 통화 쌍 간의 국경 간 지불을 허용하는 저비용 송금에 대한 디지털 통화용 오픈 소스 분산 프로토콜입니다.

스텔라 지갑은 루멘 및 기타 자산을 디지털 통화로 보관하는 데 사용되는 디지털 지갑입니다. 그것은 공개 키와 비밀 키로 구성되며 조합하여 자금을 받고 보낼 수 있는 주소로 작동할 수 있습니다.

지갑으로 들어오는 최신 지불에 대한 알림을 받으려는 이유는 무엇입니까?



결제 옵션 중 하나로 스텔라를 활용하는 서비스가 있다고 가정해 보겠습니다. 송금 상태를 확인하려면 Horizon을 통해 자금을 받았는지 지속적으로 확인해야 합니다.

들어오는 지불에 대한 알림을 받을 수 있는 방법을 찾아야 합니다.

솔루션 1



API 요청을 사용하여 정기적으로 계정의 결제를 검색합니다. 다음 GET 요청을 사용하여 사용자는 account_id/public_key와 관련된 결제를 검색할 수 있습니다.

curl 요청 사용:

curl "https://horizon.stellar.org/accounts/<account_id>/payments?limit="


위의 curl 요청은 지정된 account_id에서 최신 결제를 받습니다.

예시 응답은 다음과 같습니다.

{
  "_links": {
    "self": {
      "href": "https://horizon.stellar.org/accounts/GCNL55IJTH2HX26HLNIGYD2JIQLTBAQL3SVPNZA6PXK7NAVHU423WOTE/payments?cursor=\u0026limit=10\u0026order=desc"
    },
    "next": {
      "href": "https://horizon.stellar.org/accounts/GCNL55IJTH2HX26HLNIGYD2JIQLTBAQL3SVPNZA6PXK7NAVHU423WOTE/payments?cursor=110694007436259329\u0026limit=10\u0026order=desc"
    },
    "prev": {
      "href": "https://horizon.stellar.org/accounts/GCNL55IJTH2HX26HLNIGYD2JIQLTBAQL3SVPNZA6PXK7NAVHU423WOTE/payments?cursor=119400713599217665\u0026limit=10\u0026order=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=desc\u0026cursor=119400713599217665"
          },
          "precedes": {
            "href": "https://horizon.stellar.org/effects?order=asc\u0026cursor=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=desc\u0026cursor=117356420835532801"
          },
          "precedes": {
            "href": "https://horizon.stellar.org/effects?order=asc\u0026cursor=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=desc\u0026cursor=115354197276323841"
          },
          "precedes": {
            "href": "https://horizon.stellar.org/effects?order=asc\u0026cursor=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
    


    두 번째로 require 키워드를 사용하여 stellar-sdk를 가져옵니다. 그런 다음 사용하기 전에 Horizon URL을 사용하여 서버 SDK를 초기화합니다.

    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=desc\u0026cursor=115354197276323841"
              },
              "precedes": {
                "href": "https://horizon.stellar.org/effects?order=asc\u0026cursor=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 Documentation

    좋은 웹페이지 즐겨찾기