Neste artigo, exploraremos uma das abordagens mais amigáveis para o usuário para monitorar NFTs vendidos no Tensor ao longo do tempo, alimentado pelas abrangentes APIs de transação da SHYFT para Solana.
Bem-vindo ao Solana Brainfood, sua dose semanal de conteúdo de desenvolvimento, tutoriais, análises de código e muito mais - conteúdo em pequenas porções para impulsionar seu conhecimento em Solana. Se você é um profissional experiente procurando aprimorar suas habilidades ou um iniciante ansioso para aprender algo novo, temos algo preparado para todos.
No episódio de hoje, exploraremos uma das maneiras mais fáceis de rastrear todas as vendas de NFTs que estão acontecendo no mercado Tensor usando as APIs da SHYFT. Tensor é a porta de entrada para uma experiência de negociação de NFT mais simples na Solana. A plataforma oferece dados em tempo real, preços históricos de velas e pools AMM dedicados para NFTs. Se os usuários precisam realizar operações em massa como varreduras, lances, listagens ou remoções de NFTs, o Tensor fornece as soluções que eles procuram. No final deste artigo, teremos recursos e métodos suficientes para alcançar algo semelhante a este painel.
Sinta-se à vontade para conferir este projeto no GitHub.
Antes de começar
Para começar, precisaremos de algumas coisas.
Registre sua conta SHYFT e obtenha sua própria chave de API Shyft
x-api-key
é um parâmetro de autenticação que lhe dá acesso às APIs da SHYFT.
Você pode obter sua própria chave de API no site da SHYFT.
Basta se inscrever com seu e-mail aqui e você pode obtê-la gratuitamente. Se você já possui uma chave de API SHYFT, por favor, pule esta etapa.
NextJs ou qualquer ambiente/pilha de desenvolvimento que suporte chamadas de API
Utilizamos Next.js para este projeto, mas isso pode ser feito em qualquer ambiente de desenvolvimento de aplicativos.
Empolgado? Vamos começar a construir.
Buscar transações no Tensor
A API de Transação da Shyft nos permite obter uma lista de transações para uma conta na cadeia. Vamos usá-la para obter todas as transações que ocorrem no endereço do mercado Tensor. Normalmente, a API de transação da Shyft nos fornece as 10 transações mais recentes de uma vez. Para obter mais, podemos encontrar a assinatura da última transação recebida e colocá-la na parte before_tx_signature
da próxima solicitação de API. Dessa forma, podemos obter as transações que ocorreram antes dessa assinatura.
const response = await fetch(
`https://api.shyft.to/sol/v1/transaction/history?network=mainnet-beta&tx_num=50&account=${address}${
oldestTxnSignature ? `&before_tx_signature=${oldestTxnSignature}` : ""
}`,
{
headers: {
"Content-type": "application/json",
"x-api-key": process.env.NEXT_PUBLIC_SHYFT_API_KEY!,
},
}
)
type JSONResponse = ShyftBaseResponse<Array<NFTSaleTransactionType>>
const transactionData = (await response.json()) as JSONResponse
const transactions = transactionData.result
A API de Transação da Shyft requer os seguintes parâmetros:
network
: pode ser rede de desenvolvimento (devnet
), rede de testes (testnet
) ou rede principal-beta (mainnet-beta
).account
: o endereço da conta cujas transações estamos tentando buscar, neste caso será o endereço do TensorTSWAPaqyC
...tx_num(optional)
: indica o número de transações a serem buscadas de uma vez.before_tx_signature(optional)
: as transações são buscadas na ordem da transação mais recente primeiro. Este campo aceita uma assinatura de transação e buscará todas as transações antes desta transação (no tempo).enable_raw
: todas as transações retornadas deste ponto final são transações analisadas "legíveis por humanos" da Solana. Se definido como verdadeiro, as transações brutas também são retornadas junto com as transações analisadas.
Uma vez executada com sucesso, a resposta contém uma matriz de transações analisadas relacionadas à conta fornecida no campo de endereço. A resposta tem a seguinte estrutura.
{
"success": true,
"message": "Transaction history fetched successfully",
"result": [
{
"timestamp": "2023-09-26T11:45:02.000Z",
"fee": 0.000017,
"fee_payer": "pYcHPzHuE9znn9LLiVrTo3g8Aq6SH4qS3CCoaEXfLPt",
"signers": [
"pYcHPzHuE9znn9LLiVrTo3g8Aq6SH4qS3CCoaEXfLPt"
],
"signatures": [
"4LKWzyEWeBv2BrZW2Y4D6RGvBe4ncLm9ycPiREqGjywaX5ybXAgXN7xTqs1wniruaQHoJbdkj5e3UMW7Q8XMMGxL"
],
"protocol": {
"address": "TSWAPaqyCSx2KABk68Shruf4rp7CxcNi8hAsbdwmHbN",
"name": "TENSOR_SWAP"
},
"type": "NFT_SALE",
"status": "Success",
"actions": [
{
"info": {
"buyer": "pYcHPzHuE9znn9LLiVrTo3g8Aq6SH4qS3CCoaEXfLPt",
"seller": "AbXEqbQZQPoVahnoCke6wb9VxD8CuRTyVfyLdc9EmG4D",
"currency": "So11111111111111111111111111111111111111112",
"marketplace": "TSWAPaqyCSx2KABk68Shruf4rp7CxcNi8hAsbdwmHbN",
"nft_address": "5yV2e2T9h33BddiBQV2HWwSzb2vxaTH45N5VQLfiWnr7",
"price": 13.49
},
"source_protocol": {
"address": "TSWAPaqyCSx2KABk68Shruf4rp7CxcNi8hAsbdwmHbN",
"name": "TENSOR_SWAP"
},
"type": "NFT_SALE"
},
{
"info": {
"amount": 1,
"receiver": "pYcHPzHuE9znn9LLiVrTo3g8Aq6SH4qS3CCoaEXfLPt",
"sender": "4zdNGgAtFsW1cQgHqkiWyRsxaAgxrSRRynnuunxzjxue",
"receiver_associated_account": "8sa9WageiqVen6WEbzpVoMRHP3MLTGLqSCpP7NYKicGv",
"nft_address": "5yV2e2T9h33BddiBQV2HWwSzb2vxaTH45N5VQLfiWnr7"
},
"source_protocol": {
"address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"name": "TOKEN_PROGRAM"
},
"type": "NFT_TRANSFER",
"parent_protocol": "TSWAPaqyCSx2KABk68Shruf4rp7CxcNi8hAsbdwmHbN"
}
]
}
]
}
Observe que esta é uma resposta de amostra; documentação mais detalhada pode ser encontrada aqui. O SDK JS também aceita parâmetros similares e apenas o resultado é retornado como resposta.
Função equivalente no SDK JS para a API acima
Coleta e filtragem de transações
Ao invés de buscar todas as transações, nosso objetivo é obter transações para um dia específico (ou hora, dependendo do caso de uso). Para alcançar isso, continuamos buscando transações até encontrar uma que ocorreu antes do dia-alvo. Uma vez que localizamos tal transação, paramos de buscar e aplicamos um filtro adicional para garantir que recebemos todas as transações que ocorreram no dia desejado. O campo timestamp
(o carimbo de data/hora) em cada transação indica a sua data.
Agora que obtivemos todas as transações do Tensor de um dia específico, nosso foco está apenas nas transações envolvendo NFTs vendidos. Para extrair essas transações, iteramos pela nossa lista de transações e filtramos aquelas com o campo de type
definido como NFT_SALE
. A transação NFT_SALE
significa que um NFT foi vendido com sucesso de um vendedor para um comprador.
A transação NFT_SALE
inclui detalhes valiosos, como o endereço do comprador, o endereço do vendedor, o preço de venda e o endereço do NFT. Se desejar acessar metadados adicionais para o NFT, como exibir seu nome e imagem, você tem a opção de usar a API Shyft NFT para recuperar essas informações.
// Exemplo de resposta da transação NFT_SALE
{
"timestamp": "2023-09-26T11:45:02.000Z",
"fee": 0.000017,
"fee_payer": "pYcHPzHuE9znn9LLiVrTo3g8Aq6SH4qS3CCoaEXfLPt",
"signers": [
"pYcHPzHuE9znn9LLiVrTo3g8Aq6SH4qS3CCoaEXfLPt"
],
"signatures": [
"4LKWzyEWeBv2BrZW2Y4D6RGvBe4ncLm9ycPiREqGjywaX5ybXAgXN7xTqs1wniruaQHoJbdkj5e3UMW7Q8XMMGxL"
],
"protocol": {
"address": "TSWAPaqyCSx2KABk68Shruf4rp7CxcNi8hAsbdwmHbN",
"name": "TENSOR_SWAP"
},
"type": "NFT_SALE",
"status": "Success",
"actions": [
{
"info": {
"buyer": "pYcHPzHuE9znn9LLiVrTo3g8Aq6SH4qS3CCoaEXfLPt",
"seller": "AbXEqbQZQPoVahnoCke6wb9VxD8CuRTyVfyLdc9EmG4D",
"currency": "So11111111111111111111111111111111111111112",
"marketplace": "TSWAPaqyCSx2KABk68Shruf4rp7CxcNi8hAsbdwmHbN",
"nft_address": "5yV2e2T9h33BddiBQV2HWwSzb2vxaTH45N5VQLfiWnr7",
"price": 13.49
},
"source_protocol": {
"address": "TSWAPaqyCSx2KABk68Shruf4rp7CxcNi8hAsbdwmHbN",
"name": "TENSOR_SWAP"
},
"type": "NFT_SALE"
},
{
"info": {
"amount": 1,
"receiver": "pYcHPzHuE9znn9LLiVrTo3g8Aq6SH4qS3CCoaEXfLPt",
"sender": "4zdNGgAtFsW1cQgHqkiWyRsxaAgxrSRRynnuunxzjxue",
"receiver_associated_account": "8sa9WageiqVen6WEbzpVoMRHP3MLTGLqSCpP7NYKicGv",
"nft_address": "5yV2e2T9h33BddiBQV2HWwSzb2vxaTH45N5VQLfiWnr7"
},
"source_protocol": {
"address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"name": "TOKEN_PROGRAM"
},
"type": "NFT_TRANSFER",
"parent_protocol": "TSWAPaqyCSx2KABk68Shruf4rp7CxcNi8hAsbdwmHbN"
}
]
}
const response = await fetch(
`https://api.shyft.to/sol/v1/nft/read?network=mainnet-beta&token_address=${action.info.nft_address}`,
{
headers: {
"Content-type": "application/json",
"x-api-key": process.env.NEXT_PUBLIC_SHYFT_API_KEY!,
},
}
)
type JSONResponse = ShyftBaseResponse<NFTResponse>
const nftData = (await response.json()) as JSONResponse
const nft = nftData.result
Para encontrar mais informações sobre a API Shyft NFT, você pode consultar este link.
Exiba os dados no front-end.
Até agora, tudo está indo bem. Coletamos todas as informações necessárias, e agora você tem a liberdade para decidir como deseja apresentar os dados. Em nosso tutorial, vamos mostrar as transações em um formato de cartão que inclui detalhes como a imagem do NFT, o nome do NFT, o preço de venda, o endereço do vendedor e o endereço do comprador. Também incluiremos timestamp para quando a venda ocorreu.
Exemplo de interface de usuário para transações de venda de NFT
Conclusão
Exploramos a API da Shyft para obter todas as transações de venda de NFT que ocorrem no mercado Tensor e obter metadados de NFT para fins de exibição. A Shyft capacita os desenvolvedores a decodificar eventos complexos da blockchain, aprimorando as capacidades de aplicativos descentralizados. Em um cenário de blockchain em constante evolução, ferramentas como a Shyft preenchem as lacunas nas interações entre usuário e aplicativo.
Se você gosta de ler a série Solana Brainfood, convidamos você a explorar mais episódios, como "Como rastrear a compra de ingressos para uma rifa da Famous Fox na Solana" ou "Rastreando Eventos de Empréstimos no Famous Fox Citrus". Esperamos que esses recursos aprimorem sua experiência na construção com a Shyft.
Recursos
Junte-se ao nosso Discord
Experimente nossas APIs no Swagger UI
Artigo escrito por Khac Vy. Traduzido por Marcelo Panegali.
Oldest comments (0)