Band Protocol Standard Dataset

Introduction

Developers building on Fantom can now leverage Band’s decentralized oracle infrastructure. With Band’s oracle, they now have access to various cryptocurrency price data to integrate into their applications.

Supported Tokens

Currently, the list of supported symbols can be found below. Going forward, this list will continue to expand based on developer needs and community feedback.
Crypto
AAVE
BAND
BNB
BTC
COVER
BAND
CREAM
CRV
ETH
FTM
BNB
HEGIC
KP3R
LINK
SFI
BTC
SNX
SUSHI
YFI
Stablecoins
FRAX
USDC
SUSD
Commodities
OIL
XAG
XAU
Forex
CHF
CNY
EUR
GBP
JPY

Price Pairs

The following methods can work with any combination of base/quote token pair, as long as the base and quote symbols are supported by the dataset.

Querying Prices

Currently, there are two methods for developers to query prices from Band’s oracle: through Band’s StdReference smart contract on BSC and through their bandchain.js JavaScript helper library.

Solidity Smart Contract

To query prices from Band’s oracle, a smart contract should reference Band’s StdReference contract, specifically the getReferenceData and getReferenceDatabulk methods.
getReferenceData takes two strings as the inputs, the base and quote symbol, respectively. It then queries the StdReference contract for the latest rates for those two tokens, and returns a ReferenceData struct, shown below.
1
struct ReferenceData {
2
uint256 rate; // base/quote exchange rate, multiplied by 1e18.
3
uint256 lastUpdatedBase; // UNIX epoch of the last time when base price gets updated.
4
uint256 lastUpdatedQuote; // UNIX epoch of the last time when quote price gets updated.
5
}
Copied!
getReferenceDataBulk instead takes two lists, one of the base tokens, and one of the quotes. It then proceeds to similarly queries the price for each base/quote pair at each index, and returns an array of ReferenceData structs.
For example, if we call getReferenceDataBulk with ['BTC','BTC','ETH'] and ['USD','ETH','BNB'], the returned ReferenceData array will contain information regarding the pairs:
  • BTC/USD
  • BTC/ETH
  • ETH/BNB
Contract Addresses
Blockchain
Contract Address
Explorer
Fantom (Mainnet)
0x56e2898e0ceff0d1222827759b56b28ad812f92f
link
Example Usage
This contract demonstrates an example of using Band’s StdReference contract and the getReferenceData function.

BandChain.JS

Band’s node helper library bandchain.js also supports a similar getReferenceData function. This function takes one argument, a list of token pairs to query the result of. It then returns a list of corresponding rate values.
Example Usage
The code below shows an example usage of the function
1
const { Client } = require('@bandprotocol/bandchain.js');
2
3
// BandChain's REST Endpoint
4
const endpoint = 'https://rpc.bandchain.org';
5
const client = new Client(endpoint);
6
7
// This example demonstrates how to query price data from
8
// Band's standard dataset
9
async function exampleGetReferenceData() {
10
const rate = await client.getReferenceData(['BTC/ETH','BAND/EUR', 'FTM/USD']);
11
return rate;
12
}
13
14
(async () => {
15
console.log(await exampleGetReferenceData());
16
})();
17
Copied!
The corresponding result will then be similar to
1
$ node index.js
2
[
3
{
4
pair: 'BTC/ETH',
5
rate: 30.998744363906173,
6
updatedAt: { base: 1615866954, quote: 1615866954 },
7
requestID: { base: 2206590, quote: 2206590 }
8
},
9
{
10
pair: 'BAND/EUR',
11
rate: 10.566138918332376,
12
updatedAt: { base: 1615866845, quote: 1615866911 },
13
requestID: { base: 2206539, quote: 2206572 }
14
},
15
{
16
pair: 'FTM/USD',
17
rate: 0.36662363,
18
updatedAt: { base: 1615866851, quote: 1615866960 },
19
requestID: { base: 2206543, quote: 0 }
20
}
21
]
Copied!
For each pair, the following information will be returned:
  • pair: The base/quote symbol pair string
  • rate: The resulting rate of the given pair
  • updated: The timestamp at which the base and quote symbols was last updated on BandChain. For USD, this will be the current timestamp
  • rawRate: This object consists of two parts.
    • value is the BigInt value of the actual rate, multiplied by 10^decimals
    • decimals is then the exponent by which rate was multiplied by to get rawRate
Last modified 8mo ago