Na Parte 1 desta série, Monitore os ativos da Stellar usando Couchbase e Python, apresentamos os conceitos básicos do Stellar Descentralizado (Blockchain) Exchange e mostramos como armazenar uma cópia da lista de ativos de uma conta no Couchbase. Nesta postagem, carregamos e consultamos as negociações de ativos. Em seguida, analisamos essas transações em um gráfico no console da Web do Couchbase para ver tendências e investimentos - tudo feito facilmente no console da Web do Couchbase.
Para isso, seguimos três etapas:
- Acessar a lista de negociações de uma conta
- Carregar as negociações no Couchbase
- Executar uma consulta
Um aviso antes de começarmos - não sou um guru cripto-financeiro e abusarei do jargão comercial comum, com o objetivo de tornar o tópico em questão o mais acessível possível para os leitores que são novos na tecnologia.
Compreensão dos ativos Stellar
Na Stellar, o ativo nativo é o Stellar Lumens, ou XLM. Quando falamos sobre valores de ativos, sempre resumimos isso ao valor de um ativo em unidades XLM. Por exemplo, alguém pode negociar um Bitcoin ou um Ether, ambos atrelados a um valor específico de XLM. A XLM é como o dólar americano das redes de negociação que você pode usar em outros lugares.
Na postagem anterior, obtivemos os dados básicos da conta; nesta, vamos obter as negociações feitas nessa conta. Anteriormente, criamos um único documento no Couchbase que tinha todas as informações da conta, inclusive os saldos como objetos incorporados.
Com esse endpoint, podemos obter uma lista de todas as negociações para a mesma conta. Escolhemos aleatoriamente um ID de conta e o usamos no URL:
|
1 |
https://horizon.stellar.org/accounts/GAF55XSX3WCHWUB6CEGSKKMLPKV56Y5MK4UCBRSSGRBBDENFEXSWWMDQ/trades |
Ele listará até 200 entradas e também tem URLs de paginação usando uma variável de cursor nos resultados, mas não vamos usá-los aqui. Em vez disso, inseriremos parâmetros muito específicos para que possamos examinar determinados tipos de negociações.
Aqui estão as partes mais importantes de uma negociação retornada da solicitação GET acima:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
... "id": "171637003501543425-2", "paging_token": "171637003501543425-2", "ledger_close_time": "2022-03-10T04:38:43Z", "trade_type": "carteira de pedidos", "base_offer_id": "949268568", "base_account": "GBP4XRX3EBSZHLVKQFNZZFMQZZV2ZZ6PFV346RMUQGNTNWNNGOA5EE7U", "base_amount": "0.0578957", "base_asset_type": "nativo", "counter_offer_id": "4783323021928931329", "counter_account": "GAF55XSX3WCHWUB6CEGSKKMLPKV56Y5MK4UCBRSSGRBBDENFEXSWWMDQ", "counter_amount": "0.0105768", "counter_asset_type": "credit_alphanum4", "counter_asset_code": "USDC", "counter_asset_issuer": "GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN", "base_is_seller": verdadeiro, "price" (preço): { "n": "10000000", "d": "54738433" }... |
Essa operação vendeu 0,057 do nativo ativo base (XLM) por 0,0105 USDC ativo/moeda digital.
A resposta tem um campo de data/hora e também entidades para o emissor de cada ativo de base/contrapartida. Esse é outro conceito central da Stellar. Cada ativo tem um código (por exemplo, USDC, XLM, BTC, ETH, etc.) e um emissor desse ativo (por exemplo, GA5ZSE...). Isso foi projetado para que, por exemplo, qualquer pessoa crie novos ativos na rede, mas você possa confiar nos emissores/fornecedores de ativos de endereços específicos que você sabe que são legítimos.
Podemos ajustar a solicitação da API REST para incluir pares específicos nos quais estamos interessados usando parâmetros, por exemplo, somente negociações de XLM e USDC.
|
1 2 3 |
https://horizon.stellar.org/accounts/GAF55XSX3WCHWUB6CEGSKKMLPKV56Y5MK4UCBRSSGRBBDENFEXSWWMDQ/trades ?base_asset_type=nativo&counter_asset_type=crédito_alphanum4 &counter_asset_code=USDC&emissor do contra-activo=GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN |
Embora os resultados nos forneçam tudo o que precisamos saber, pode ser útil ter registros separados para as negociações nos dois sentidos. Podemos executar a consulta inversa, mostrando as negociações de USDC para XLM:
|
1 2 3 |
https://horizon.stellar.org/accounts/GAF55XSX3WCHWUB6CEGSKKMLPKV56Y5MK4UCBRSSGRBBDENFEXSWWMDQ/trades ?base_asset_type=crédito_alphanum4&counter_asset_type=nativo &base_asset_code=USDC&emissor do patrimônio base=GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN |
Obviamente, podemos fazer download de muito mais do que apenas um simples par de transações e carregá-los no banco de dados, mas vamos nos concentrar em apenas alguns casos de uso para simplificar este exemplo.
Python carregando negociações Stellar no Couchbase
Continuamos de onde paramos da última vez, mas alteraremos o URL principal para corresponder aos exemplos acima. Isso é muito detalhado e pode ser feito de forma muito mais eficiente com o comando SDK do Stellar mas ele adiciona alguma complexidade assíncrona que evitaremos por enquanto.
O código de exemplo abaixo conexões para o Couchbase, consultas o serviço Stellar Horizon e que analisa para cada negociação e lojas em seu próprio documento. As chaves do documento são definidas como a ID da negociação mais um registro de data e hora, o que não faz sentido para nós, mas nos ajuda a ter chaves de documento exclusivas.
(A última função adiciona explicitamente o campo de código de ativo XLM nos casos em que ele está ausente, pois quando se trata de um tipo de ativo nativo, o código de ativo fica em branco, o que o torna confuso).
|
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 |
importação solicitações, tempo de couchbase.agrupamento importação Aglomerado, ClusterOptions de couchbase.autenticação importação PasswordAuthenticator 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 conectar(): agrupamento = Aglomerado('couchbase://localhost', ClusterOptions(PasswordAuthenticator("Administrador, "Administrador))) retorno agrupamento.balde("estelar) def gettrades(comércio): impressão("Fetching: " + comércio) resposta = solicitações.solicitação("GET", comércio) retorno resposta.json() def upsert_document(conexão, doc, chave): tentar: resultado = conexão.upsert(chave, doc) impressão(resultado) exceto Exceção como e: impressão("Erro",e) def process_trades(negócios): agora = str(tempo.tempo()) para comércio em negócios: comércio['tipo'] = "comércio chave = comércio['id']+agora se comércio['base_asset_type'] == "nativo: comércio['base_asset_code'] = 'XLM' elif comércio['counter_asset_type'] == "nativo: comércio['counter_asset_code'] = 'XLM' upsert_document(cb, comércio, chave) cb = conectar() negócios = gettrades(usdctrades)['_embedded']['registros'] process_trades(negócios) negócios = gettrades(xlmtrades)['_embedded']['registros'] process_trades(negócios) |
O conjunto resultante de documentos é processado para as negociações em que a base é USDC e, em seguida, novamente usando o URL que busca negociações de XLM para USDC.
Agora haverá 20 documentos no bucket do Couchbase Stellar:
Consulta de negociações Stellar no Couchbase
Usando a linguagem N1QL (SQL para JSON), agora podemos consultar facilmente nossa lista de negociações.
Primeiro, criamos um índice básico para os documentos usando a guia Query (Consulta) e executando essa consulta:
|
1 |
CRIAR PRIMÁRIO ÍNDICE ON estelar |
Em um exemplo de escala maior, você desejaria criar índices secundários nos campos que você tem interesse em consultar. Mas com esse pequeno conjunto de documentos, não se preocupe com isso.
Agora podemos executar a consulta propriamente dita. Nessa consulta, usamos algumas funções básicas para converter tipos, reformatar a data e selecionar os valores nos quais estamos interessados. Todos os documentos são formatados em JSON e qualquer consulta terá como padrão mostrar as correspondências do JSON de origem, como mostrado aqui:
Selecione o Tabela acima dos resultados para mostrá-los de forma mais estruturada:
A tabela pode ser facilmente classificada. A tabela Gráfico agora também pode ser usado porque temos um bom campo para o eixo X (data) e o eixo Y (valores base ou contador). Selecione as opções depois de escolher o botão Chart, como mostrado aqui:
Essa é uma maneira simples, porém eficaz, de se aprofundar em seus dados.
O que mais podemos fazer?
Até o momento, mantivemos os exemplos muito simples: buscar alguns detalhes da conta e da negociação do Stellar e armazená-los em documentos NoSQL do Couchbase. Essa é apenas a ponta do iceberg!
Em postagens futuras, mostraremos mais alguns exemplos de vários tipos de uniões de documentos e investigaremos mais a fundo a compreensão do valor perdido ou ganho ao fazer as negociações acima.
Por enquanto, você pode tentar ajustar a consulta acessando os objetos de preço e ver quais cálculos podem ajudá-lo a descobrir o lucro/prejuízo. (Dica: o objeto de preço tem um numerador e um denominador e pode ser acessado como um campo usando preço.n e preço.d na consulta).
E agora?
Aqui estão alguns links adicionais para ler sobre os tópicos que discutimos:
- Parte 1: Monitorar ativos Stellar usando Couchbase e Python
- Comece a usar o Couchbase Python SDK
- Folha de verificação do Couchbase N1QL (PDF)
- Bolsa descentralizada Stellar (stellar.org)
- Noções básicas de blockchain
- Documentos da API do desenvolvedor Stellar (contas)
- Stellar Lumens - XLM - o token do futuro



