이 시리즈의 1부에서는 카우치베이스 및 파이썬을 사용하여 스텔라 에셋을 모니터링하세요, 의 기본 개념을 소개했습니다. 스텔라 탈중앙화 (블록체인) 거래소에서 계정 자산 목록의 사본을 카우치베이스에 저장하는 방법을 보여드렸습니다. 이 글에서는 자산 거래를 로드하고 쿼리합니다. 그런 다음 이를 Couchbase 웹 콘솔의 차트에서 살펴보고 추세와 투자금을 확인합니다. 이 모든 작업은 Couchbase 웹 콘솔 내에서 쉽게 수행할 수 있습니다.
이를 위해 세 단계를 거칩니다:
- 계정의 거래 목록에 액세스
- 카우치베이스에 거래 로드
- 쿼리 실행
시작하기 전에 경고 한 마디 - 저는 암호화폐 금융 전문가가 아니며, 기술을 처음 접하는 독자들이 최대한 쉽게 이해할 수 있도록 일반적인 거래 용어를 남용할 것입니다.
스텔라 자산 이해
스텔라에서 기본 자산은 스텔라 루멘, 즉 XLM입니다. 자산 가치에 대해 이야기할 때는 항상 자산의 가치를 XLM 단위로 환산할 것입니다. 예를 들어 비트코인이나 이더를 거래할 때 두 자산 모두 특정 XLM 가치에 고정되어 있을 수 있습니다. XLM은 다른 곳에서 사용할 수 있는 거래 네트워크의 USD와 같습니다.
이전 게시물에서는 기본 계좌 데이터를 가져왔는데, 이번 게시물에서는 해당 계좌에서 이루어진 거래를 가져올 것입니다. 이전에는 잔액을 포함한 모든 계좌 정보를 임베디드 객체로 포함하는 단일 문서를 Couchbase에 만들었습니다.
이 엔드포인트를 사용하면 동일한 계좌의 모든 거래 목록을 가져올 수 있습니다. 계정 ID를 무작위로 선택해 URL에 사용합니다:
1 |
https://horizon.stellar.org/accounts/GAF55XSX3WCHWUB6CEGSKKMLPKV56Y5MK4UCBRSSGRBBDENFEXSWWMDQ/trades |
여기에는 최대 200개의 항목이 나열되며 결과에 커서 변수를 사용한 페이지 매김 URL도 있지만 여기서는 사용하지 않겠습니다. 대신 특정 유형의 거래를 살펴볼 수 있도록 매우 구체적인 매개변수를 입력하겠습니다.
위의 GET 요청에서 반환된 한 거래의 주요 내용은 다음과 같습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
... "id": "171637003501543425-2", "페이징_토큰": "171637003501543425-2", "ledger_close_time": "2022-03-10T04:38:43Z", "trade_type": "주문서", "base_offer_id": "949268568", "base_account": "GBP4XRX3EBSZLVKQFNZZFMQZZV2ZZ6PFV346RMUQGNTNOWNNGOA5EE7U", "base_amount": "0.0578957", "base_asset_type": "native", "카운터_오퍼_ID": "4783323021928931329", "카운터_계정": "GAF55XSX3WCHWUB6CEGSKSKMLPKV56Y5MK4UCBRSSGRBBDENFEXSWMDQ", "카운터_금액": "0.0105768", "카운터_자산_유형": "credit_alphanum4", "카운터_자산_코드": "USDC", "카운터_자산_발행자": "GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN", "base_is_seller": true, "가격": { "n": "10000000", "d": "54738433" }... |
이 거래는 0.057의 네이티브 0.0105에 기본 자산(XLM) USDC 자산/디지털 화폐.
응답에는 날짜/시간 필드와 다음과 같은 엔티티가 있습니다. 발행자 의 각 기본/카운터 자산에 대해 설명합니다. 이것은 스텔라의 또 다른 핵심 개념입니다. 각 자산에는 코드(예: USDC, XLM, BTC, ETH 등)와 해당 자산의 발행자(예: GA5ZSE...)가 있습니다. 이는 예를 들어 누구나 네트워크에서 새로운 자산을 생성할 수 있지만, 합법적인 것으로 알려진 특정 주소의 자산 발행자/공급자를 신뢰할 수 있도록 설계되었습니다.
매개변수를 사용하여 관심 있는 특정 쌍(예: XLM 및 USDC 거래만)을 포함하도록 REST API 요청을 조정할 수 있습니다.
1 2 3 |
https://horizon.stellar.org/accounts/GAF55XSX3WCHWUB6CEGSKKMLPKV56Y5MK4UCBRSSGRBBDENFEXSWWMDQ/trades ?base_asset_type=네이티브&카운터_자산_유형=credit_alphanum4 &카운터_자산_코드=USDC&카운터_자산_발행자=GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN |
결과는 우리가 알아야 할 모든 정보를 제공하지만, 양방향 거래에 대해 별도의 기록을 보유하는 것이 도움이 될 수 있습니다. 역방향 쿼리를 실행하여 USDC에서 XLM으로의 거래를 보여줄 수 있습니다:
1 2 3 |
https://horizon.stellar.org/accounts/GAF55XSX3WCHWUB6CEGSKKMLPKV56Y5MK4UCBRSSGRBBDENFEXSWWMDQ/trades ?base_asset_type=credit_alphanum4&카운터_자산_유형=네이티브 &기본_자산_코드=USDC&BASE_ASSET_ISSUER=GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN |
물론, 우리는 단순한 한 쌍의 거래 를 사용하여 데이터베이스에 로드할 수도 있지만, 이 예제를 간단하게 만들기 위해 몇 가지 사용 사례에만 초점을 맞춥니다.
스텔라 트레이딩을 카우치베이스에 로드하는 파이썬
지난번에 중단했던 부분부터 다시 시작하되, 위의 예시와 일치하도록 기본 URL을 변경하겠습니다. 이는 지나치게 장황한 설명이며, 훨씬 더 효율적으로 달성하려면 스텔라 SDK 하지만 비동기 복잡성이 추가되므로 당분간은 피할 것입니다.
아래 예제 코드는 다음과 같습니다. 연결 를 Couchbase에 추가합니다, 쿼리 스텔라 호라이즌 서비스 및 파싱 각 거래와 스토어 를 자체 문서에 저장합니다. 문서 키는 거래 ID와 타임스탬프로 설정되는데, 이는 별 의미는 없지만 고유한 문서 키를 갖는 데 도움이 됩니다.
(마지막 함수는 기본 에셋 유형인 경우 에셋 코드가 비어 있어 혼란스러울 수 있으므로 XLM 에셋 코드 필드가 누락된 경우 명시적으로 추가합니다).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
가져오기 요청, 시간 에서 카우치베이스.클러스터 가져오기 클러스터, 클러스터 옵션 에서 카우치베이스.auth 가져오기 비밀번호 인증기 usdctrades = "https://horizon.stellar.org/accounts/GAF55XSX3WCHWUB6CEGSKKMLPKV56Y5MK4UCBRSSGRBBDENFEXSWWMDQ/trades?base_asset_type=credit_alphanum4&counter_asset_type=native&base_asset_code=USDC&base_asset_issuer=GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN" xlmtrades = "https://horizon.stellar.org/accounts/GAF55XSX3WCHWUB6CEGSKKMLPKV56Y5MK4UCBRSSGRBBDENFEXSWWMDQ/trades?base_asset_type=native&counter_asset_type=credit_alphanum4&counter_asset_code=USDC&counter_asset_issuer=GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN" def 연결(): 클러스터 = 클러스터('couchbase://localhost', 클러스터 옵션(비밀번호 인증기('관리자', '관리자'))) 반환 클러스터.버킷('stellar') def 겟트레이드(tradesurl): 인쇄("가져오기: " + tradesurl) 응답 = 요청.요청("GET", tradesurl) 반환 응답.json() def 업서트_문서(연결, doc, 키): 시도: 결과 = 연결.업서트(키, doc) 인쇄(결과) 예외 예외 as e: 인쇄("오류",e) def 프로세스_거래(거래): 지금 = str(시간.시간()) 에 대한 무역 in 거래: 무역['type'] = 'trade' 키 = 무역['id']+지금 만약 무역['base_asset_type'] == '네이티브': 무역['base_asset_code'] = 'XLM' elif 무역['카운터_자산_유형'] == '네이티브': 무역['카운터_자산_코드'] = 'XLM' 업서트_문서(cb, 무역, 키) cb = 연결() 거래 = 겟트레이드(usdctrades)['_embedded']['records'] 프로세스_거래(거래) 거래 = 겟트레이드(xlmtrades)['_embedded']['records'] 프로세스_거래(거래) |
결과 문서 세트는 기준이 USDC인 거래에 대해 처리된 다음 XLM에서 USDC로 거래를 가져오는 URL을 사용하여 다시 처리됩니다.
이제 카우치베이스 스텔라 버킷에 20개의 문서가 저장됩니다:
카우치베이스에서 스텔라 거래 쿼리하기
이제 N1QL(JSON용 SQL) 언어를 사용하여 거래 목록에서 쉽게 쿼리할 수 있습니다.
먼저 쿼리 탭을 사용하여 이 쿼리를 실행하여 문서에 대한 기본 인덱스를 생성합니다:
1 |
만들기 기본 INDEX 켜기 스텔라 |
더 큰 규모의 예에서는 다음과 같이 하고 싶을 것입니다. 보조 인덱스 생성 를 클릭해 쿼리하려는 필드에 추가하세요. 하지만 이 작은 문서 세트는 걱정하지 마세요.
이제 실제 쿼리를 실행할 수 있습니다. 이 쿼리에서는 몇 가지 기본 함수를 사용하여 유형을 변환하고, 날짜를 다시 포맷하고, 관심 있는 값을 선택합니다. 모든 문서는 JSON 형식이며 모든 쿼리는 기본적으로 여기에 표시된 것처럼 소스 JSON 일치 항목을 표시합니다:
를 선택하고 표 버튼을 클릭하면 결과 위에 보다 체계적으로 표시할 수 있습니다:
표는 쉽게 정렬할 수 있습니다. 테이블을 쉽게 정렬할 수 있습니다. 차트 버튼은 이제 X축(날짜) 및 Y축(기준 또는 카운터 금액)에 적합한 필드가 있으므로 사용할 수도 있습니다. 다음과 같이 차트 버튼을 선택한 후 옵션을 선택합니다:
이는 간단하면서도 효과적으로 데이터를 심층적으로 분석할 수 있는 방법입니다.
또 무엇을 할 수 있을까요?
지금까지는 스텔라 계정과 거래 세부 정보를 가져와서 Couchbase NoSQL 문서에 저장하는 매우 간단한 예제였습니다. 이것은 빙산의 일각에 불과합니다!
다음 포스팅에서는 다양한 유형의 문서 조인에 대한 몇 가지 예를 더 보여드리고, 위의 거래를 통해 잃거나 얻는 가치에 대해 더 자세히 살펴보겠습니다.
지금은 가격 개체에 액세스하여 쿼리를 조정하고 어떤 계산을 통해 수익/손실을 발견하는 데 도움이 될 수 있는지 확인해 볼 수 있습니다. (힌트: 가격 개체에는 분자와 분모가 있으며 다음을 사용하여 필드로 액세스할 수 있습니다. price.n 그리고 price.d 를 쿼리에 입력합니다.)
다음 단계는 무엇인가요?
다음은 논의한 주제에 대해 자세히 알아볼 수 있는 몇 가지 추가 링크입니다: