Acessando Feeds de Preços com o Band Protocol¶
Introdução¶
Band Protocol é uma rede de oracles descentralizada que fornece dados confiáveis, seguros e em tempo real para contratos inteligentes em várias redes blockchain.
O protocolo é construído sobre o BandChain, uma rede projetada para ser compatível com a maioria das cadeias compatíveis com EVM, como as redes EVM powered by Tanssi, e com frameworks de desenvolvimento. O protocolo busca oferecer uma solução:
- Descentralizada, aproveitando o poder computacional de uma rede de validadores
- Flexível, suportando ampla variedade de fontes e formatos de dados, facilitando integrações
- Escalável, projetada para lidar com alto volume de requisições
- Acessível, permitindo solicitar dados apenas quando necessário e pagar apenas as taxas associadas
Para implantar o oráculo na sua rede, entre em contato diretamente com a equipe do Band Protocol.
Este tutorial percorre as etapas para interagir com feeds de preços usando o oráculo do Band Protocol na rede EVM de demonstração da Tanssi.
Configuração na Rede de Demonstração EVM da Tanssi¶
O oráculo do Band Protocol já está implantado na rede EVM de demonstração da Tanssi e configurado para fornecer preços para os tokens ETH e DOT.
Os feeds de preços são enviados regularmente para um contrato inteligente acessível no endereço:
0x8c064bCf7C0DA3B3b090BAbFE8f3323534D84d68
O contrato pode ser utilizado via a interface:
IStdReference.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity 0.8.26;
interface IStdReference {
/// A structure returned whenever someone requests for standard reference data.
struct ReferenceData {
uint256 rate; // base/quote exchange rate, multiplied by 1e18.
uint256 lastUpdatedBase; // UNIX epoch of the last time when base price gets updated.
uint256 lastUpdatedQuote; // UNIX epoch of the last time when quote price gets updated.
}
/// Returns the price data for the given base/quote pair. Revert if not available.
function getReferenceData(string memory _base, string memory _quote) external view returns (ReferenceData memory);
/// Similar to getReferenceData, but with multiple base/quote pairs at once.
function getReferenceDataBulk(string[] memory _bases, string[] memory _quotes) external view returns (ReferenceData[] memory);
}
Como visto acima, há duas funções para buscar dados:
getReferenceData(_base, _quote) — busca o preço de um par base/cotação
_basestring memory - token cujo preço você quer obter_quotestring memory - token (ouUSD) em que o preço é expresso
_base- ETH_quote- USD
getReferenceDataBulk(_bases, _quotes) — busca preços para os pares base/cotação fornecidos simultaneamente
_basesstring[] memory - lista de tokens base para os quais deseja obter preços_quotesstring[] memory - lista de tokens (ouUSD) em que os preços são expressos
_bases- ["ETH", "DOT"]_quotes- ["USD", "USD"]
A resposta de ambas as funções é composta pelos seguintes dados, agrupados em uma tupla no caso de getReferenceData e em uma lista de tuplas (uma por par) no caso de getReferenceDataBulk:
rateuint256 - preço do par base/cotação fornecido. Ajuste o resultado para considerar 18 casas decimaislastUpdatedBaseuint256 - timestamp de atualização do parâmetro_base, em epoch UNIX (segundos desde01-01-1970 00:00:00 UT)lastUpdatedQuoteuint256 - timestamp de atualização do parâmetro_quote, em epoch UNIX (segundos desde01-01-1970 00:00:00 UT)
Buscar Feeds de Preço usando Remix¶
Nesta seção, usaremos o Remix para buscar o preço do par ETH/USD.
Primeiro, certifique-se de ter uma carteira compatível com EVM conectada à rede EVM de demonstração. MetaMask é usada como exemplo. Em seguida, acesse o Remix, cole a interface IStdReference em um novo arquivo e compile.
Depois, siga:
- Vá para a aba Deploy & Run Transactions
- Defina ENVIRONMENT como Injected Provider -- MetaMask
- Selecione o contrato
IStdReference.solno menu CONTRACT - Informe o endereço do contrato de feed de dados
0x8c064bCf7C0DA3B3b090BAbFE8f3323534D84d68da rede EVM de demonstração no campo At Address e clique em At Address
O contrato estará acessível. Para interagir:
- Expanda o contrato IStdReference para ver as funções disponíveis
- Expanda getReferenceData e defina
_basee_quotecomoETHeUSD - Clique em Call
- O resultado exibirá três valores: o preço, o horário de atualização do parâmetro
_basee o horário de atualização do parâmetro_quote
Para obter um preço legível, ajuste pelas casas decimais do feed (18). No exemplo, 2361167929271984201806 corresponde a um preço de ETH de $2,361.167929271984201806 em USD. Observe também que os timestamps de atualização estão em epoch UNIX, ou seja, segundos desde 01-01-1970 00:00:00 UT.
| Criada: 27 de novembro de 2025


