# About BKC Oracle

&#x20;         &#x20;

<figure><img src="/files/3oOutN0i1rxjI9eRfmzj" alt=""><figcaption></figcaption></figure>

BKC Oracle is an important tool for developing smart contracts or dApps. The data oracle functions as a medium to bring data from off-chain to the blockchain via smart contracts. Data Oracle can process data from off-chain, for example, Weather, sporting results, temperature, and high-risk data (such as stock or asset prices, election results, or even blockchains).

**Core features**

* **Data Feeds**

  Retrieve the latest prices and data points of assets. ([read more](/features/data-feeds))
* **Verifiable Random Function (VRF)**

  Retrieve the randomness data on the bitkub chain. ([read more](/features/verifiable-random-function-vrf))


# Connect with MetaMask

At the top right corner, you will find the *Connect Wallet* button.

![Connect wallet button on the top right corner](/files/A1xBw8GvJJt2xhWr1YzV)

Click on the button then the site will pop the choices up for you to choose.

![Choices pop up to connect wallet](/files/npCdUJiszmebyRzvy1PS)

Click on MetaMask then it will connect to your MetaMask wallet.

{% hint style="warning" %}
Currently, we only support for MetaMask wallet connection.
{% endhint %}


# Data feeds

Data feeds are the contracts that provide real-world data on-chain, gold prices for example. You can see all current data feeds in the *Data Feeds* menu.

![Data feed list](/files/9pMJxApAwPxfigjk0Fxz)

If you want to view the latest data on the data feed, click on the data feed you want to view, and the site will navigate you to the detail page below.

![Data feed detail page](/files/x7rD7bGGZtEoGtP04WMN)

To access the data from data feeders, you have to [purchase a subscription](/deprecated/how-to-subscribe-to-data-oracle#to-subscribe) then you will get the subscription NFT that you can [set permission](/deprecated/whats-dashboard/how-to-manage-subscriptions#manage-access) to your contract to access data feeds.

Please see the [consuming a data feed example](/examples/data-feed-consumer) section to access the data for more details.


# Verifiable Random Function (VRF)

**Introduction:** Welcome to our Verifiable Random Function (VRF) service, a powerful cryptographic tool that provides secure and verifiable randomness for various applications. Whether you're involved in blockchain protocols, decentralized systems, or any other domain requiring unbiased and unpredictable randomness, our VRF solution offers a reliable way to generate and verify random outputs.

**What is a VRF?** A Verifiable Random Function (VRF) is a cryptographic construction that produces random-looking outputs while offering the ability to verify the authenticity of those outputs. It combines the properties of randomness, verifiability, pseudorandomness, and unpredictability. By leveraging VRFs, you can ensure that generated random data remains unbiased, tamper-proof, and publicly verifiable.

**Key Features:**

1. **Randomness**: Our VRF service generates outputs that are indistinguishable from true randomness, providing a high level of unpredictability.
2. **Verifiability**: With our VRF solution, anyone can easily verify the authenticity of generated random outputs by utilizing the associated public key. This enables transparent and trustless verification.
3. **Pseudorandomness**: VRFs offer deterministic behavior, meaning that the same input will always produce the same output. This property ensures consistency and reproducibility when working with random data.
4. **Unpredictability**: The unpredictable nature of VRFs ensures that it is computationally infeasible to predict the output without knowledge of the secret key, adding an additional layer of security.

**Conclusion:** Our Verifiable Random Function (VRF) service offers a reliable and efficient solution for generating and verifying secure randomness. By harnessing the power of VRFs, you can introduce fairness, transparency, and trust into your applications, ensuring the integrity of critical processes. Explore our VRF service today and experience the benefits of a robust and verifiable source of randomness.


# Using Data Feed

To access our Data Feed service, you must subscribe using KDEV tokens, the Bitkub Chain developer utility token. Subscribing with KDEV tokens provides a cost-effective and efficient way to leverage the benefits of off-chain data in your smart contracts.

**Subscription Process:** To subscribe to our Data Feed service, follow these simple steps:

1. Deploy your Data Feed consumer contract. ([example contract](/examples/data-feed-consumer))
2. Acquire KDEV tokens through the Bitkub chain [developer console](https://console.bitkubchain.com/get-kdev).
3. Visit our website, connect your wallet, and navigate to the *Services > Data Feed Subscription* menu.
4. Click *Create new subscription* button.
5. Review the information, select the subscription plan, approve the KDEV token, and click *Create subscription* button.
6. Add the Data Feed consumer contract address to the subscription.
7. Optional, extend your subscription through our website.&#x20;

<br>


# Using VRF

To access our VRF service, you must subscribe using KDEV tokens, the Bitkub Chain developer utility token. Subscribing with KDEV tokens provides a cost-effective and efficient way to leverage the benefits of off-chain data in your smart contracts.

**Subscription Process:** To subscribe to our Data Feed service, follow these simple steps:

1. Acquire KDEV tokens through the Bitkub chain [developer console](https://console.bitkubchain.com/get-kdev).
2. Visit our website, connect your wallet, and navigate to the *Services > VRF* menu.
3. Click *Create new subscription* button.
4. Review the information and click *Create subscription* button.
5. Add funds to the subscription.
6. Deploy your VRF consumer contract with the required information. ([example contract](/examples/vrf-consumer))
7. Add the VRF consumer contract address to the subscription.


# Data Feed Consumer

This page guides you through an example of consuming a data feed from your consumer contract.

The example consumer contract is at [`0x0A787d834cEbFfedCb43a531Cf788F7229E7Fc51`](https://testnet.bkcscan.com/address/0x0A787d834cEbFfedCb43a531Cf788F7229E7Fc51/contracts).

As you can see in the consumer contract, we must create a variable to store the address of the data feed contract and use <mark style="color:orange;">`AggregatorV2V3Interface`</mark> to consume a token price.

![](https://lh5.googleusercontent.com/emm3u8VGCxN9f1s53dyfhVc5rz-Je1tMZP7JCP799G5X98mlX20c3TkDTAk8XGydOfiQRlFlwF-RtwfoBWPFYi0Vd4ewAveql9jAQXGpnbkfs9hhVblEoxMlMA-q8cRE0-i-egZP)

&#x20;If you want to get the answer of the latest round, you can use <mark style="color:orange;">`aggregator.latestRoundData()`</mark>.

![](https://lh4.googleusercontent.com/b7Zwg0ZeINP1p9RUMiJhwAyaTyWjnj-TkUhVZgUx_QhpqX4RwEHBWEprO0gXDMqCkiZAxw3OGnjLoEVb5C-ndegdzBiDt_rpnH0T5tVANtXm_E26mUqFjDxrYiLatd_o_G_5bZIp)

Five values will be returned after your contract is allowed to consume the data feed. The price is the second value of the returned values. In this case, the answer is the price of BTC in USD.

{% hint style="info" %}
Right now, we only offer 8 decimal places for the token prices.

The number of decimal places of each token price can be obtained using <mark style="color:orange;">`aggregator.decimals()`</mark>.&#x20;
{% endhint %}


# VRF Consumer

This page guides you through an example of consuming randomness from your consumer contract. The example consumer contract on the test network is at the [GitHub repository](https://github.com/bkcoracle/vrf-consumer-contract)

As you can see in the [VRFConsumerSample](https://github.com/bkcoracle/vrf-consumer-contract/blob/main/contracts/sample/VRFConsumerSample.sol) contract, we must create a variable to store

* Subscription ID: you can get this after creating a subscription via our website
* VRF Address: you can get the address from [this page](/utilities/contract-addresses)
* Key Hash: you can get the key hash from [this page](/utilities/key-hash)

**Requirements**

* Your contract has to inherit [VRFConsumerBaseV2](https://github.com/bkcoracle/vrf-consumer-contract/blob/main/contracts/libs/VRFConsumerBaseV2.sol)&#x20;
* Your contract has to implement a function&#x20;

<pre><code><strong>function fulfillRandomWords(uint256 _requestId, uint256[] memory _randomWords) internal override
</strong></code></pre>

To get randomness, you must call the function called requestRandomWords() to the VRF coordinator by sending these parameters:

* keyHash: you can get the key hash from [this page](/utilities/key-hash)
* subscriptionId: your subscription id
* requestConfirmations: the amount of block to confirm the transaction.
* callbackGasLimit: gas limit when VRF node calls your fulfillRandomWords function
* numWords: the amount of randomness

{% hint style="info" %}
Make sure your subscription has enough KDEV funding before requesting
{% endhint %}

&#x20;


# Contract Addresses

### [Bitkub Mainnet](/utilities/contract-addresses/bitkub-mainnet)

### [Bitkub Testnet](/utilities/contract-addresses/bitkub-testnet)


# Bitkub Mainnet

### VRF

| Name                                     | Contract Address                           |
| ---------------------------------------- | ------------------------------------------ |
| <p>VRF Address<br>(VRFCoordinatorV2)</p> | 0xF8540e9a9b069f62F2a94B252d12ebA3d12aeCBc |

### Data Feed Proxies

| Name           | Proxy Address                                                                                                          |
| -------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `BTC / USDT`   | [`0xe937651673adCc0585254014A711542bF53fc247`](https://bkcscan.com/address/0xe937651673adCc0585254014A711542bF53fc247) |
| `ETH / USDT`   | [`0xC5D51DF217dDAeCf902BF706687ecA6277c3a936`](https://bkcscan.com/address/0xC5D51DF217dDAeCf902BF706687ecA6277c3a936) |
| `KUB / USDT`   | [`0x775eeFF3f80f110C2f7ac9127041915489c275f4`](https://bkcscan.com/address/0x775eeFF3f80f110C2f7ac9127041915489c275f4) |
| `XRP / USDT`   | [`0xD7577EB140C56572ACa1CA46d4425F8b0bF7b83A`](https://bkcscan.com/address/0xD7577EB140C56572ACa1CA46d4425F8b0bF7b83A) |
| `LTC / USDT`   | [`0x27A6d79f7f436770f16a2Bc2A528b6B731248A7d`](https://bkcscan.com/address/0x27A6d79f7f436770f16a2Bc2A528b6B731248A7d) |
| `BCH / USDT`   | [`0xa5342871444186B3E47067C867ea1e463104fc2e`](https://bkcscan.com/address/0xa5342871444186B3E47067C867ea1e463104fc2e) |
| `USDT / THB`   | [`0x4A6947323A1c14Cf69Dd128A2cf854364239d044`](https://bkcscan.com/address/0x4A6947323A1c14Cf69Dd128A2cf854364239d044) |
| `BNB / USDT`   | [`0xE924086d7DB6C2df5f75171Dc4773784C31F545f`](https://bkcscan.com/address/0xE924086d7DB6C2df5f75171Dc4773784C31F545f) |
| `XLM / USDT`   | [`0x86724f67C56120abcDDEb35aC5D2f0ac5F6bc6D7`](https://bkcscan.com/address/0x86724f67C56120abcDDEb35aC5D2f0ac5F6bc6D7) |
| `ADA / USDT`   | [`0x48dF4734E9404eD578527DF0e813eBb2A1193A56`](https://bkcscan.com/address/0x48dF4734E9404eD578527DF0e813eBb2A1193A56) |
| `WAN / USDT`   | [`0x0D62C1a14e5F8fbC6f76508082060b2383d9F0EA`](https://bkcscan.com/address/0x0D62C1a14e5F8fbC6f76508082060b2383d9F0EA) |
| `OMG / USDT`   | [`0x022CFf06250E57954C97230a09bB9d6DF222Ab02`](https://bkcscan.com/address/0x022CFf06250E57954C97230a09bB9d6DF222Ab02) |
| `ZIL / USDT`   | [`0x6D09F80eEC71a38655c2830D11C95EEe96d65322`](https://bkcscan.com/address/0x6D09F80eEC71a38655c2830D11C95EEe96d65322) |
| `SNT / USDT`   | [`0xFDfCd8942F39f048411043173f7aaD42CB54bf71`](https://bkcscan.com/address/0xFDfCd8942F39f048411043173f7aaD42CB54bf71) |
| `CVC / USDT`   | [`0xAEf86fA35e471604cD500588f3dA51619076E255`](https://bkcscan.com/address/0xAEf86fA35e471604cD500588f3dA51619076E255) |
| `LINK / USDT`  | [`0xe31411f4a4a6fF6DA0b1E15e959e36A31814096b`](https://bkcscan.com/address/0xe31411f4a4a6fF6DA0b1E15e959e36A31814096b) |
| `IOST / USDT`  | [`0x1478718430F09FCcAEbf7941FEc244573c638c1c`](https://bkcscan.com/address/0x1478718430F09FCcAEbf7941FEc244573c638c1c) |
| `ZRX / USDT`   | [`0x5Da0c65383AC3c006F354565578eB0F5424669Dd`](https://bkcscan.com/address/0x5Da0c65383AC3c006F354565578eB0F5424669Dd) |
| `KNC / USDT`   | [`0x09620f083e2ACde8F7fa2d413A32Fd809fdCF0A6`](https://bkcscan.com/address/0x09620f083e2ACde8F7fa2d413A32Fd809fdCF0A6) |
| `ABT / USDT`   | [`0x01f80308dE6F31b1C90AE341D261B62602C40078`](https://bkcscan.com/address/0x01f80308dE6F31b1C90AE341D261B62602C40078) |
| `MANA / USDT`  | [`0xc95eB0d9aAA492d41065911530b0341218Efa87b`](https://bkcscan.com/address/0xc95eB0d9aAA492d41065911530b0341218Efa87b) |
| `CTXC / USDT`  | [`0xa412f422BAb8328b97F377B5077a0769293768f4`](https://bkcscan.com/address/0xa412f422BAb8328b97F377B5077a0769293768f4) |
| `SIX / USDT`   | [`0x748CeD9D0D1Ad58E56b537C810669F96D43d1F34`](https://bkcscan.com/address/0x748CeD9D0D1Ad58E56b537C810669F96D43d1F34) |
| `JFIN / USDT`  | [`0xDb47d4040C1cEEC40B56837Dc1b27E81B4b19Ecc`](https://bkcscan.com/address/0xDb47d4040C1cEEC40B56837Dc1b27E81B4b19Ecc) |
| `POW / USDT`   | [`0x2da487079A83C83b5C42a3a4C6919b0ce35bED52`](https://bkcscan.com/address/0x2da487079A83C83b5C42a3a4C6919b0ce35bED52) |
| `DOGE / USDT`  | [`0x26D0108AdF2c1b0c0BdE10d3ff6747B93ADCe4B1`](https://bkcscan.com/address/0x26D0108AdF2c1b0c0BdE10d3ff6747B93ADCe4B1) |
| `DAI / USDT`   | [`0x566EE3eF3DaE8C9f219229Ede8759919833De41e`](https://bkcscan.com/address/0x566EE3eF3DaE8C9f219229Ede8759919833De41e) |
| `USDC / USDT`  | [`0xB36801C9BCeF88dd72FE17689C18179a97941069`](https://bkcscan.com/address/0xB36801C9BCeF88dd72FE17689C18179a97941069) |
| `BAT / USDT`   | [`0x50f3911E3c253d6633A08E187D4949cf1ceaa5b3`](https://bkcscan.com/address/0x50f3911E3c253d6633A08E187D4949cf1ceaa5b3) |
| `MKR / USDT`   | [`0xb8AD807fb6252c74fd4D8611779f0104169C4f14`](https://bkcscan.com/address/0xb8AD807fb6252c74fd4D8611779f0104169C4f14) |
| `ENJ / USDT`   | [`0xFbcF96a2Cd16824177DDe0c03014FacA600d3A31`](https://bkcscan.com/address/0xFbcF96a2Cd16824177DDe0c03014FacA600d3A31) |
| `BAND / USDT`  | [`0x2201E3D39aC6a25A8d9573E23BeFBBfEB84cD652`](https://bkcscan.com/address/0x2201E3D39aC6a25A8d9573E23BeFBBfEB84cD652) |
| `COMP / USDT`  | [`0xbb1782dE14F98D947b1AdFe94623383Ad072Ed70`](https://bkcscan.com/address/0xbb1782dE14F98D947b1AdFe94623383Ad072Ed70) |
| `KSM / USDT`   | [`0xb284F5660e729DAdf279CCFc2cc26546E04acA5a`](https://bkcscan.com/address/0xb284F5660e729DAdf279CCFc2cc26546E04acA5a) |
| `DOT / USDT`   | [`0xf2Ef4362299A98a2204A42e31cC5A5F3c603595B`](https://bkcscan.com/address/0xf2Ef4362299A98a2204A42e31cC5A5F3c603595B) |
| `NEAR / USDT`  | [`0x2D6AC1432ECA7995104F17f70e2e12290F634E65`](https://bkcscan.com/address/0x2D6AC1432ECA7995104F17f70e2e12290F634E65) |
| `SCRT / USDT`  | [`0xDFfbC5f4172A502b04aC1fCC9B957b038bAaaa78`](https://bkcscan.com/address/0xDFfbC5f4172A502b04aC1fCC9B957b038bAaaa78) |
| `GLM / USDT`   | [`0xa9fe01f2080aA6D6E4c37B3227F1137a11175718`](https://bkcscan.com/address/0xa9fe01f2080aA6D6E4c37B3227F1137a11175718) |
| `YFI / USDT`   | [`0x023Da9Fa0A5Bf8Cb92A01c95D3e9455658Def251`](https://bkcscan.com/address/0x023Da9Fa0A5Bf8Cb92A01c95D3e9455658Def251) |
| `UNI / USDT`   | [`0x91AA9b8e940a522446E072046A4db7CF5faF1639`](https://bkcscan.com/address/0x91AA9b8e940a522446E072046A4db7CF5faF1639) |
| `AAVE / USDT`  | [`0xFcB3c3f076472e18f40Cccb42d2Fe71FE4A3C965`](https://bkcscan.com/address/0xFcB3c3f076472e18f40Cccb42d2Fe71FE4A3C965) |
| `ALPHA / USDT` | [`0xfB61891D7A692B57D0326e18F1Ee4E171181582B`](https://bkcscan.com/address/0xfB61891D7A692B57D0326e18F1Ee4E171181582B) |
| `OCEAN / USDT` | [`0x33eEbe6fd0c550B1c7580DD911b52F5D7ED89894`](https://bkcscan.com/address/0x33eEbe6fd0c550B1c7580DD911b52F5D7ED89894) |
| `SNX / USDT`   | [`0x0463Bd2f6a2e1003cB43b5cD91d5739afc83B535`](https://bkcscan.com/address/0x0463Bd2f6a2e1003cB43b5cD91d5739afc83B535) |
| `SAND / USDT`  | [`0x7A76FE2F0435326f194B3f3d47A3EE15893bB347`](https://bkcscan.com/address/0x7A76FE2F0435326f194B3f3d47A3EE15893bB347) |
| `BAL / USDT`   | [`0x9c98d650b464c7002B7534c28E400a43C365cA56`](https://bkcscan.com/address/0x9c98d650b464c7002B7534c28E400a43C365cA56) |
| `CRV / USDT`   | [`0x896C2a3c7130f1ae57Bdb835871cD70e4bE98Bac`](https://bkcscan.com/address/0x896C2a3c7130f1ae57Bdb835871cD70e4bE98Bac) |
| `AXS / USDT`   | [`0x434d4500da8493705647E2A64c3180Bab53A53d5`](https://bkcscan.com/address/0x434d4500da8493705647E2A64c3180Bab53A53d5) |
| `SUSHI / USDT` | [`0x5E6421756C215Bb9a640eEF3fdCC572BF773E06a`](https://bkcscan.com/address/0x5E6421756C215Bb9a640eEF3fdCC572BF773E06a) |
| `FTT / USDT`   | [`0x45ae4Cc1CE9d0E17A213415fC5832Efd28b3454F`](https://bkcscan.com/address/0x45ae4Cc1CE9d0E17A213415fC5832Efd28b3454F) |
| `ILV / USDT`   | [`0x984849f401065a84C8C3A191b82A006d461A2877`](https://bkcscan.com/address/0x984849f401065a84C8C3A191b82A006d461A2877) |
| `IMX / USDT`   | [`0x3058c263880E0dD8272836F6654a597100307e99`](https://bkcscan.com/address/0x3058c263880E0dD8272836F6654a597100307e99) |
| `DYDX / USDT`  | [`0x5914f054Ae09b082082933cC67567924a69B97B9`](https://bkcscan.com/address/0x5914f054Ae09b082082933cC67567924a69B97B9) |
| `ENS / USDT`   | [`0x5171ab1C1203ffB19C3CE341f5d69825837f29d5`](https://bkcscan.com/address/0x5171ab1C1203ffB19C3CE341f5d69825837f29d5) |
| `GALA / USDT`  | [`0xae3d8c255cB273AE81359fF4A8b5Ca73c9c920d4`](https://bkcscan.com/address/0xae3d8c255cB273AE81359fF4A8b5Ca73c9c920d4) |
| `GT / USDT`    | [`0xD4482Df3C302912a28FE074746b5BA505B06716b`](https://bkcscan.com/address/0xD4482Df3C302912a28FE074746b5BA505B06716b) |
| `LYXE / USDT`  | [`0x0cbeBa9559218C3439357d39B227f749cDAb3293`](https://bkcscan.com/address/0x0cbeBa9559218C3439357d39B227f749cDAb3293) |
| `GF / USDT`    | [`0x97006aEC3329BD6ffbc5e65D376cf356fe299273`](https://bkcscan.com/address/0x97006aEC3329BD6ffbc5e65D376cf356fe299273) |
| `SOL / USDT`   | [`0xdEDF62183410BEcf7506C68C8eB353a727212f11`](https://bkcscan.com/address/0xdEDF62183410BEcf7506C68C8eB353a727212f11) |
| `AVAX / USDT`  | [`0x5DACa9c3A3Ca6e0Bb6dFe6A0Fd453bD5e0Ea9a6f`](https://bkcscan.com/address/0x5DACa9c3A3Ca6e0Bb6dFe6A0Fd453bD5e0Ea9a6f) |
| `APE / USDT`   | [`0xB36957af0400018bc423C8fD85320EafFca44b0a`](https://bkcscan.com/address/0xB36957af0400018bc423C8fD85320EafFca44b0a) |
| `LUNA / USDT`  | [`0x25dC449f752C36251890267990891eA79e6Aae98`](https://bkcscan.com/address/0x25dC449f752C36251890267990891eA79e6Aae98) |
| `MATIC / USDT` | [`0x3613bd9e25117bF25414075fFe9e61452F5C31f4`](https://bkcscan.com/address/0x3613bd9e25117bF25414075fFe9e61452F5C31f4) |
| `FTM / USDT`   | [`0x123E62A81F3E06Bf92EBB0d0c9E52cf2cCE822Ef`](https://bkcscan.com/address/0x123E62A81F3E06Bf92EBB0d0c9E52cf2cCE822Ef) |
| `CHZ / USDT`   | [`0xb64427B12718b9ef5D5d51b4dA9f5E8a7F8E438E`](https://bkcscan.com/address/0xb64427B12718b9ef5D5d51b4dA9f5E8a7F8E438E) |
| `GRT / USDT`   | [`0x98E2306881fD0c7153558791122CdBcc686101Eb`](https://bkcscan.com/address/0x98E2306881fD0c7153558791122CdBcc686101Eb) |
| `TRX / USDT`   | [`0xbf0303241db8907E7Db33Ec4891f6Bab390c3F31`](https://bkcscan.com/address/0xbf0303241db8907E7Db33Ec4891f6Bab390c3F31) |
| `HBAR / USDT`  | [`0x2f5708F0bF8e5163F628DbBEF3b0595EF55AB271`](https://bkcscan.com/address/0x2f5708F0bF8e5163F628DbBEF3b0595EF55AB271) |
| `OP / USDT`    | [`0x83A25a75FC14dFA56B07A3A2EE9eA0f9682F66F9`](https://bkcscan.com/address/0x83A25a75FC14dFA56B07A3A2EE9eA0f9682F66F9) |
| `GAL / USDT`   | [`0x9aF09636217f5e45bC93B16a599254aaBa93Ad98`](https://bkcscan.com/address/0x9aF09636217f5e45bC93B16a599254aaBa93Ad98) |
| `XTZ / USDT`   | [`0xbC690ff960D98667f10430875edFF59Dc9b7699e`](https://bkcscan.com/address/0xbC690ff960D98667f10430875edFF59Dc9b7699e) |
| `CELO / USDT`  | [`0xf98303F84678A267De8fC770975d8Fcb0b77C028`](https://bkcscan.com/address/0xf98303F84678A267De8fC770975d8Fcb0b77C028) |
| `LRC / USDT`   | [`0x876994E69a78099B2f72844A20F09D544BCB9614`](https://bkcscan.com/address/0x876994E69a78099B2f72844A20F09D544BCB9614) |


# Bitkub Testnet

### VRF

| Name                                     | Contract Address                           |
| ---------------------------------------- | ------------------------------------------ |
| <p>VRF Address<br>(VRFCoordinatorV2)</p> | 0x6ADeee32297d4861fA49a8567bfC1d108FfA0dcE |

### Data Feed Proxies

| Name           | Proxy Address                                                                                                                  |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `BTC / USDT`   | [`0xFDd3A5C3E27506F942139EE858EC61a7174681ed`](https://testnet.bkcscan.com/address/0xFDd3A5C3E27506F942139EE858EC61a7174681ed) |
| `ETH / USDT`   | [`0xDA1891Cc504B104B69fCF9DCBB855d0c77098BcB`](https://testnet.bkcscan.com/address/0xDA1891Cc504B104B69fCF9DCBB855d0c77098BcB) |
| `KUB / USDT`   | [`0x6Cc1316A9695E435875A5CDA6e60066114f8A395`](https://testnet.bkcscan.com/address/0x6Cc1316A9695E435875A5CDA6e60066114f8A395) |
| `XRP / USDT`   | [`0x38Cab3CBcaD8080e76104f654848CeC6327Ee6C0`](https://testnet.bkcscan.com/address/0x38Cab3CBcaD8080e76104f654848CeC6327Ee6C0) |
| `LTC / USDT`   | [`0x34F078c5c05f2F6113247202127aF2112ef9FDc8`](https://testnet.bkcscan.com/address/0x34F078c5c05f2F6113247202127aF2112ef9FDc8) |
| `BCH / USDT`   | [`0x3eC5EDC6E4fF172870b9446B6Eba7Dc8ADB7d0Ac`](https://testnet.bkcscan.com/address/0x3eC5EDC6E4fF172870b9446B6Eba7Dc8ADB7d0Ac) |
| `USDT / THB`   | [`0x4A41CD5FB30b8AD3626181BAcB7bE42165316C59`](https://testnet.bkcscan.com/address/0x4A41CD5FB30b8AD3626181BAcB7bE42165316C59) |
| `BNB / USDT`   | [`0x16545C96CBceC942F8CBfF3602E9d2B70be27b31`](https://testnet.bkcscan.com/address/0x16545C96CBceC942F8CBfF3602E9d2B70be27b31) |
| `XLM / USDT`   | [`0xBaca6a922D067aa63C9A61CF2DB63F8713B8d2c4`](https://testnet.bkcscan.com/address/0xBaca6a922D067aa63C9A61CF2DB63F8713B8d2c4) |
| `ADA / USDT`   | [`0x960Ac508aE5bDAAC0182139eDaADd2DB082E3A1f`](https://testnet.bkcscan.com/address/0x960Ac508aE5bDAAC0182139eDaADd2DB082E3A1f) |
| `WAN / USDT`   | [`0xdfbBb5623737c8dff729Db04519875AC7b12AA21`](https://testnet.bkcscan.com/address/0xdfbBb5623737c8dff729Db04519875AC7b12AA21) |
| `OMG / USDT`   | [`0x8675Ef46B93f51158EB7A19D226d0344C3e0566C`](https://testnet.bkcscan.com/address/0x8675Ef46B93f51158EB7A19D226d0344C3e0566C) |
| `ZIL / USDT`   | [`0xEb2Bc23b8ed510461396E1484a65b7CB37916B7c`](https://testnet.bkcscan.com/address/0xEb2Bc23b8ed510461396E1484a65b7CB37916B7c) |
| `SNT / USDT`   | [`0xe47328B27A49AcF5ab66BB2361E3E53F9AaA313a`](https://testnet.bkcscan.com/address/0xe47328B27A49AcF5ab66BB2361E3E53F9AaA313a) |
| `CVC / USDT`   | [`0x447eDA3cF0B320188D7EB6AF66b072c541c853b2`](https://testnet.bkcscan.com/address/0x447eDA3cF0B320188D7EB6AF66b072c541c853b2) |
| `LINK / USDT`  | [`0x942B6d0de6DAD9Ece3180DC9E53063bDDF856559`](https://testnet.bkcscan.com/address/0x942B6d0de6DAD9Ece3180DC9E53063bDDF856559) |
| `IOST / USDT`  | [`0xCc4b4147C1D98aF83213BeDDE91Cd7C33601aD46`](https://testnet.bkcscan.com/address/0xCc4b4147C1D98aF83213BeDDE91Cd7C33601aD46) |
| `ZRX / USDT`   | [`0xfF3Db854d6D6A78FB4b35036e3a3e687e6dA5660`](https://testnet.bkcscan.com/address/0xfF3Db854d6D6A78FB4b35036e3a3e687e6dA5660) |
| `KNC / USDT`   | [`0xA299E5285492255faA5bc0454d65E384F17FD8Ec`](https://testnet.bkcscan.com/address/0xA299E5285492255faA5bc0454d65E384F17FD8Ec) |
| `ABT / USDT`   | [`0x7D4058560d901D3A7a4C5E76D5929412be08DB2B`](https://testnet.bkcscan.com/address/0x7D4058560d901D3A7a4C5E76D5929412be08DB2B) |
| `MANA / USDT`  | [`0x58Fd9436318e65819F5898070c32428f3CA0f49d`](https://testnet.bkcscan.com/address/0x58Fd9436318e65819F5898070c32428f3CA0f49d) |
| `CTXC / USDT`  | [`0x64743722A805be595fdcd853a4Aa763CB179Ccd8`](https://testnet.bkcscan.com/address/0x64743722A805be595fdcd853a4Aa763CB179Ccd8) |
| `SIX / USDT`   | [`0x81d4A122bA6401a27f2443b0f9d25a8822301fA5`](https://testnet.bkcscan.com/address/0x81d4A122bA6401a27f2443b0f9d25a8822301fA5) |
| `JFIN / USDT`  | [`0x8a980B2a90a7E94ff7f4aA0b44B4Bd3c64be8b1C`](https://testnet.bkcscan.com/address/0x8a980B2a90a7E94ff7f4aA0b44B4Bd3c64be8b1C) |
| `POW / USDT`   | [`0x18B64E96580a041567A09114AA45B3cE344d9bEC`](https://testnet.bkcscan.com/address/0x18B64E96580a041567A09114AA45B3cE344d9bEC) |
| `DOGE / USDT`  | [`0xa5F71D330998c6f51daed2eC410dc67438b279ef`](https://testnet.bkcscan.com/address/0xa5F71D330998c6f51daed2eC410dc67438b279ef) |
| `DAI / USDT`   | [`0xcF86270902e1147b4a232267F8ec4F86d407b492`](https://testnet.bkcscan.com/address/0xcF86270902e1147b4a232267F8ec4F86d407b492) |
| `USDC / USDT`  | [`0x6f1373EC8d0562be98a98FE46844f057284B7A61`](https://testnet.bkcscan.com/address/0x6f1373EC8d0562be98a98FE46844f057284B7A61) |
| `BAT / USDT`   | [`0x03Dad49207fFE296E8dfb242e27f55b2eF0352a7`](https://testnet.bkcscan.com/address/0x03Dad49207fFE296E8dfb242e27f55b2eF0352a7) |
| `MKR / USDT`   | [`0x78005f6D97849Be917588F9b7Ba98463399e1D07`](https://testnet.bkcscan.com/address/0x78005f6D97849Be917588F9b7Ba98463399e1D07) |
| `ENJ / USDT`   | [`0x9418bBCDC2F6f82B9A808dBcD88Dabc17A3dE05f`](https://testnet.bkcscan.com/address/0x9418bBCDC2F6f82B9A808dBcD88Dabc17A3dE05f) |
| `BAND / USDT`  | [`0x431ae4ADd22aCD56eD287F24aD8cf78c8eF6533D`](https://testnet.bkcscan.com/address/0x431ae4ADd22aCD56eD287F24aD8cf78c8eF6533D) |
| `COMP / USDT`  | [`0xf899bD858dD71D1718afD9c8b7eDF5f87fbB8712`](https://testnet.bkcscan.com/address/0xf899bD858dD71D1718afD9c8b7eDF5f87fbB8712) |
| `KSM / USDT`   | [`0xC8eEe07FCEA65475AB94B9537C8Ea800D22a8B0a`](https://testnet.bkcscan.com/address/0xC8eEe07FCEA65475AB94B9537C8Ea800D22a8B0a) |
| `DOT / USDT`   | [`0x24878155C0068D4ED9CB43205261ec566F1f14d1`](https://testnet.bkcscan.com/address/0x24878155C0068D4ED9CB43205261ec566F1f14d1) |
| `NEAR / USDT`  | [`0x11328d1f2f3fE125F3B5Ca7a5baf046c6eE2091E`](https://testnet.bkcscan.com/address/0x11328d1f2f3fE125F3B5Ca7a5baf046c6eE2091E) |
| `SCRT / USDT`  | [`0xD1AE82E37abf236A02CD1177c8D9a4fB580B04C5`](https://testnet.bkcscan.com/address/0xD1AE82E37abf236A02CD1177c8D9a4fB580B04C5) |
| `GLM / USDT`   | [`0xC080B53868D494Fba796C27F91B52BC4100aF7A0`](https://testnet.bkcscan.com/address/0xC080B53868D494Fba796C27F91B52BC4100aF7A0) |
| `YFI / USDT`   | [`0xAACF63b225562a179B6226871d98933De7174b8e`](https://testnet.bkcscan.com/address/0xAACF63b225562a179B6226871d98933De7174b8e) |
| `UNI / USDT`   | [`0xAd2c8Ab018F6567d0ccA46fDDdF11F6a4b774f5B`](https://testnet.bkcscan.com/address/0xAd2c8Ab018F6567d0ccA46fDDdF11F6a4b774f5B) |
| `AAVE / USDT`  | [`0xD4351a5bE3B87E8Bb9c7eb7971d1bB2D83c643fB`](https://testnet.bkcscan.com/address/0xD4351a5bE3B87E8Bb9c7eb7971d1bB2D83c643fB) |
| `ALPHA / USDT` | [`0xf364DceF04d279803062DBc3ba624964b40b8D07`](https://testnet.bkcscan.com/address/0xf364DceF04d279803062DBc3ba624964b40b8D07) |
| `OCEAN / USDT` | [`0xa39a79652e732D51108b3c7757A3807B2e7cB50f`](https://testnet.bkcscan.com/address/0xa39a79652e732D51108b3c7757A3807B2e7cB50f) |
| `SNX / USDT`   | [`0x11f3848916d85618911D26a0A41F7f67995f08A1`](https://testnet.bkcscan.com/address/0x11f3848916d85618911D26a0A41F7f67995f08A1) |
| `SAND / USDT`  | [`0x2A7F3f85B1dc2E0709930BE1418E72ef8f6f55A1`](https://testnet.bkcscan.com/address/0x2A7F3f85B1dc2E0709930BE1418E72ef8f6f55A1) |
| `BAL / USDT`   | [`0x455df6dc0AA2c10E5ABe440d12B3C5912AA5912e`](https://testnet.bkcscan.com/address/0x455df6dc0AA2c10E5ABe440d12B3C5912AA5912e) |
| `CRV / USDT`   | [`0x26C8c49D9bB9C0AB36E2A29a719332DEC9C019Ac`](https://testnet.bkcscan.com/address/0x26C8c49D9bB9C0AB36E2A29a719332DEC9C019Ac) |
| `AXS / USDT`   | [`0x3CCF43649352B520b629Ce133DcB730696930a5e`](https://testnet.bkcscan.com/address/0x3CCF43649352B520b629Ce133DcB730696930a5e) |
| `SUSHI / USDT` | [`0x84c10E9407BFD0711bE56759E019153A29B18425`](https://testnet.bkcscan.com/address/0x84c10E9407BFD0711bE56759E019153A29B18425) |
| `FTT / USDT`   | [`0x4D1d2c5B41988F530AA23a48a42755a49029E335`](https://testnet.bkcscan.com/address/0x4D1d2c5B41988F530AA23a48a42755a49029E335) |
| `ILV / USDT`   | [`0x63903Ece6F3AD22a94dF576460717B4F3Aa84b1d`](https://testnet.bkcscan.com/address/0x63903Ece6F3AD22a94dF576460717B4F3Aa84b1d) |
| `IMX / USDT`   | [`0xe2f9a6592D77A0135bdBB780E9761e37399e4d16`](https://testnet.bkcscan.com/address/0xe2f9a6592D77A0135bdBB780E9761e37399e4d16) |
| `DYDX / USDT`  | [`0x5227668d48f78cEeb06B38D85F07360FC76E9bc5`](https://testnet.bkcscan.com/address/0x5227668d48f78cEeb06B38D85F07360FC76E9bc5) |
| `ENS / USDT`   | [`0xfaF14c744348B087087730D9E5b582803372BC52`](https://testnet.bkcscan.com/address/0xfaF14c744348B087087730D9E5b582803372BC52) |
| `GALA / USDT`  | [`0x69145D369FA7722873Cbc8aeC77C6013927b60e0`](https://testnet.bkcscan.com/address/0x69145D369FA7722873Cbc8aeC77C6013927b60e0) |
| `GT / USDT`    | [`0xc4276E8a5be679E049d071Ba9214bc9DC2ef2e33`](https://testnet.bkcscan.com/address/0xc4276E8a5be679E049d071Ba9214bc9DC2ef2e33) |
| `LYXE / USDT`  | [`0xb7F2E923Fd7B38cdc1a302D2Bfb182e274238025`](https://testnet.bkcscan.com/address/0xb7F2E923Fd7B38cdc1a302D2Bfb182e274238025) |
| `GF / USDT`    | [`0xA2df049A4bbe232Bb4B51528119B70A2c723E0D5`](https://testnet.bkcscan.com/address/0xA2df049A4bbe232Bb4B51528119B70A2c723E0D5) |
| `SOL / USDT`   | [`0x5B7F758640aabAf9C6EB53e669bC8E841942b931`](https://testnet.bkcscan.com/address/0x5B7F758640aabAf9C6EB53e669bC8E841942b931) |
| `AVAX / USDT`  | [`0xfB311E83Fb519EBaa47a4AF24eA49A74c2a828DB`](https://testnet.bkcscan.com/address/0xfB311E83Fb519EBaa47a4AF24eA49A74c2a828DB) |
| `APE / USDT`   | [`0xBB82F7580741e9d7a5f63a2F23b851f5aee706BA`](https://testnet.bkcscan.com/address/0xBB82F7580741e9d7a5f63a2F23b851f5aee706BA) |
| `LUNA / USDT`  | [`0x568A8b6E960c9567f974b194081198AA09AD6f4c`](https://testnet.bkcscan.com/address/0x568A8b6E960c9567f974b194081198AA09AD6f4c) |
| `MATIC / USDT` | [`0xa2E86811b2bf91eB21a1a7f2b7b77b5d3914a5CA`](https://testnet.bkcscan.com/address/0xa2E86811b2bf91eB21a1a7f2b7b77b5d3914a5CA) |
| `FTM / USDT`   | [`0x78b1F351F48D22f0351eE9fa80E26dE361a38d3F`](https://testnet.bkcscan.com/address/0x78b1F351F48D22f0351eE9fa80E26dE361a38d3F) |
| `CHZ / USDT`   | [`0x4742086cfBF40497397c4a922AAEeBA6dE750b87`](https://testnet.bkcscan.com/address/0x4742086cfBF40497397c4a922AAEeBA6dE750b87) |
| `GRT / USDT`   | [`0xdd52B808d3C72450c1dcB7a3Bca6153E6335B8Ee`](https://testnet.bkcscan.com/address/0xdd52B808d3C72450c1dcB7a3Bca6153E6335B8Ee) |
| `TRX / USDT`   | [`0x552de7b6BB6E1F1B52aF461E7aF384eB9Ed1c007`](https://testnet.bkcscan.com/address/0x552de7b6BB6E1F1B52aF461E7aF384eB9Ed1c007) |
| `HBAR / USDT`  | [`0x4929d25d9aff1f0a59574F1e4E32464b28eD95E2`](https://testnet.bkcscan.com/address/0x4929d25d9aff1f0a59574F1e4E32464b28eD95E2) |
| `OP / USDT`    | [`0x27011A927316959C1be1D78743ba8265f2F57e8A`](https://testnet.bkcscan.com/address/0x27011A927316959C1be1D78743ba8265f2F57e8A) |
| `GAL / USDT`   | [`0xAFbae96925b38817998cbEBD64A567A533678488`](https://testnet.bkcscan.com/address/0xAFbae96925b38817998cbEBD64A567A533678488) |
| `XTZ / USDT`   | [`0x5b3eaaa310c4F08895e1c4C2322FA845854EFb8E`](https://testnet.bkcscan.com/address/0x5b3eaaa310c4F08895e1c4C2322FA845854EFb8E) |
| `CELO / USDT`  | [`0x778D8dDaF025910101Cd7B038cdb2BcAF80fdFB1`](https://testnet.bkcscan.com/address/0x778D8dDaF025910101Cd7B038cdb2BcAF80fdFB1) |
| `LRC / USDT`   | [`0x1471ff5a895be6f5791F26e9A5eA45B2823aC83B`](https://testnet.bkcscan.com/address/0x1471ff5a895be6f5791F26e9A5eA45B2823aC83B) |


# Data Feed Proxy Contract Interface

This page explains the interface of <mark style="color:orange;">`EACAggregatorProxy`</mark>. <mark style="color:orange;">`EACAggregatorProxy`</mark> implements <mark style="color:orange;">`AggregatorV2V3Interface`</mark> from Chainlink, which consists of <mark style="color:orange;">`AggregatorInterface`</mark> and <mark style="color:orange;">`AggregatorV3Interface`</mark>.

### [<mark style="color:orange;">`AggregatorInterface`</mark>’s Methods](/utilities/data-feed-proxy-contract-interface/aggregatorinterfaces-methods)

### [<mark style="color:orange;">**`AggregatorV3Interface`**</mark>**’s Methods**](/utilities/data-feed-proxy-contract-interface/aggregatorv3interfaces-methods)


# AggregatorInterface’s Methods

#### latestAnswer&#x20;

Get the latest answer stamped onto blockchain.&#x20;

**Returns** the latest answer. E.g. the latest token price.

<mark style="color:orange;">**`function`**</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">`latestAnswer()`</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">**`external`**</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">`view returns (int256)`</mark>

#### latestTimestamp&#x20;

Get the timestamp of the latest answer stamped onto blockchain.&#x20;

**Returns** the latest timestamp. E.g. the timestamp when the latest token price is stamped.&#x20;

<mark style="color:orange;">**`function`**</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">`latestTimestamp()`</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">**`external`**</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">`view returns (uint256)`</mark>

#### latestRound&#x20;

Get the round ID of the latest answer stamped onto blockchain.&#x20;

**Returns** uint80 value, which the first 16 bits represent the phase ID of the aggregator this proxy currently points to, the later 64 bits represent the round ID of the latest answer stamped onto the aggregator this proxy points to.&#x20;

<mark style="color:orange;">**`function`**</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">`latestRound()`</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">**`external`**</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">`view returns (uint256)`</mark>

**getAnswer**

Get the answer of the input round ID. The input round ID is a uint80 value, the first 16 bits represent the phase ID of an aggregator this proxy once pointed to or currently points to, the later 64 bits represent the round ID of the answer in the aggregator of the phase ID.

**Returns** the answer of the round ID.

<mark style="color:orange;">**`function`**</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">`getAnswer(uint256 roundId)`</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">**`external`**</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">`view returns (int256)`</mark>

**getTimestamp**

Get the timestamp of the answer of the input round ID. The input round ID’s details are the same as <mark style="color:orange;">`getTimestamp(uint256 roundId)`</mark> method.

**Returns** the timestamp of the answer of the round ID.

<mark style="color:orange;">**`function`**</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">`getTimestamp(uint256 roundId)`</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">**`external`**</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">`view returns (uint256)`</mark>


# AggregatorV3Interface’s Methods

**decimals**

Get the number of decimal places of the answer.

**Returns** the number of decimal places.

<mark style="color:orange;">**`function`**</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">`decimals()`</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">**`external`**</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">`view returns (uint8)`</mark>

#### **description**

Get the description of the aggregator this proxy points to.

**Returns** the description of the aggregator.

<mark style="color:orange;">**`function`**</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">`description()`</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">**`external`**</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">`view returns (string memory)`</mark>

#### **version**

Get the version of the aggregator this proxy points to.

**Returns** the version of the aggregator.

<mark style="color:orange;">**`function`**</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">`version()`</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">**`external`**</mark><mark style="color:orange;">` `</mark><mark style="color:orange;">`view returns (uint256)`</mark>

#### **getRoundData**

Get the details of the input round ID. The input round ID’s details are the same as getTimestamp(uint256 roundId) method.

**Returns**

* <mark style="color:orange;">`roundId`</mark>: The round ID.
* <mark style="color:orange;">`answer`</mark>: The answer of the round ID.
* <mark style="color:orange;">`startedAt`</mark>: Timestamp of when the round started. (In our case, this value is the same as <mark style="color:orange;">`updatedAt`</mark>)
* <mark style="color:orange;">`updatedAt`</mark>: Timestamp of when the round was updated.
* <mark style="color:orange;">`answeredInRound`</mark>: The round ID of the round in which the answer was computed. (In our case, this value is the same as <mark style="color:orange;">`roundId`</mark>)

```
function getRoundData(uint80 _roundId)
    external 
    view 
    returns (
        uint80 roundId,
        int256 answer,
        uint256 startedAt,
        uint256 updatedAt,
        uint80 answeredInRound
    )
```

#### **latestRoundData**

Get the details of the latest round.

**Returns**

* <mark style="color:orange;">`roundId`</mark>: The round ID.
* <mark style="color:orange;">`answer`</mark>: The answer of the round ID.
* <mark style="color:orange;">`startedAt`</mark>: Timestamp of when the round started. (In our case, this value is the same as <mark style="color:orange;">`updatedAt`</mark>)
* <mark style="color:orange;">`updatedAt`</mark>: Timestamp of when the round was updated.
* <mark style="color:orange;">`answeredInRound`</mark>: The round ID of the round in which the answer was computed. (In our case, this value is the same as <mark style="color:orange;">`roundId`</mark>)

```
function latestRoundData()
    external 
    view 
        returns (
        uint80 roundId,
        int256 answer,
        uint256 startedAt,
        uint256 updatedAt,
        uint80 answeredInRound
    )
```


# Key Hash

| Network | Key Hash                                                           |
| ------- | ------------------------------------------------------------------ |
| Mainnet | 0xfca6d1f1ade5713287e3bf614ae0015a4779c81831e51ad16ab366c7b48f0a96 |
| Testnet | 0x9154d4a5e07a92bf31ffc567502009ac83b0049f21c8331a610158c05ab3f682 |


# What’s dashboard?

The dashboard is where user can manage their information and subscriptions.

Inside the dashboard, you can &#x20;

* View announcements (Dashboard tab)
* See the expire-soon NFTs (Dashboard tab)
* Subscriptions (Subscription tab)
* Add new subscription (Add new subscription tab)
* Convert KUB-KKUB (Convert KUB-KKUB tab)


# How to manage subscriptions?

You can manage your subscriptions from the *Dashboard* menu and select the *Subscriptions* tab.

### Subscription List

All your subscriptions will appear here.

![Subscriptions list](/files/UVOoWeW4CHKJ3v1Nl2T3)

You can see the detail of your NFTs, plan, renewal quota left, and expired date.

### Manage access

To manage access control of the NFT you can click on a magnify icon after subscription detail, then the site will navigate you to the management page.

![Manage access tab](/files/fUgJYaP4idqX4ckHZvob)

You can paste the contract address that you want to give access to the text field, as shown above, then click on the *SAVE PERMISSION* button to save the data.

{% hint style="warning" %}
The contract address you want to give permission to requires some function to confirm that you really are the owner or involved. ([see more](/deprecated/interface-requirement-of-a-consumer-contract))
{% endhint %}

{% hint style="warning" %}
Save permission will cost gas due to saving data into a smart contract.
{% endhint %}

### Subscription Renewal

you can renew or extend the duration by selecting the *Subscription Renewal* tab.

![Renewal Subscription tab](/files/cOVO09ZUctqOGHYDXI10)

You can renew by clicking the *RENEW* button (make sure you have enough KKUB in your wallet) then the transaction confirmation popup will appear then confirm the transaction.

{% hint style="info" %}
**Renewal**

The plan you have bought will be recorded to the NFT and can not be changed. For example, if you buy the monthly subscription, you will get an NFT with ID *x* and the NFT  can only be renewed in the monthly plan.

**Renewal Quotas**

A subscription NFT has a limited renewal quota, after the quota runs out you have to buy a new subscription and save permission for the new one again.
{% endhint %}

{% hint style="danger" %}
Once an NFT expired it can not be renewed anymore.
{% endhint %}


# How to add a new subscription?

You can have more than one subscription NFT depending on how many contracts you need to access the data feeds.

If you want to buy more subscriptions, navigate to the *Dashboard* menu and select the *Add new subscription* tab.

![Add new subscription](/files/bCUkcWHHOaQvgmCyswLP)

You will find the page as above, click the *Purchase Now* button on the plan you want to purchase (make sure you have enough KKUB in your wallet) then confirm the transaction in your wallet popup.

After purchase, you can manage the access control of the new subscription via the *Subscriptions* tab. ([see more](/deprecated/whats-dashboard/how-to-manage-subscriptions#manage-access))


# How to convert KUB to KKUB?

The BKC Oracle subscription payment is using KKUB (ERC20) token so you have to convert KUB into KKUB to make a payment.

We provide a tool to convert KUB into KKUB in the *Dashboard* menu in the *Convert KUB-KKUB* tab.

![Convert KUB to KKUB form](/files/91yMrXOVpyRp2uHsvGRp)

To convert, insert the amount you want to convert into the text field, then click on the *Convert KUB to KKUB* button and confirm the transaction on your wallet popup.

{% hint style="info" %}
To convert KKUB to KUB back, please go to [*diamon.finance*](https://app.diamon.finance/#/swap?outputCurrency=0x67eBD850304c70d983B2d1b93ea79c7CD6c3F6b5)
{% endhint %}


# Interface Requirement of a Consumer Contract

In order to consume the data feeds, your consumer contract is required to indicate the owner of the consumer contract.

You must return the address that you will be using to allow the consumer contract to be able to consume the data feeds from at least one of the specified functions.

The specified functions are as follows. &#x20;

* <mark style="color:orange;">`function owner() external view returns (address)`</mark>
* <mark style="color:orange;">`function dataFeedOwner() external view returns (address)`</mark>

### Example 1

This [consumer contract](https://testnet.bkcscan.com/address/0x0A787d834cEbFfedCb43a531Cf788F7229E7Fc51/read-contract) implements a function about ownership, which is <mark style="color:orange;">`owner()`</mark>. The implemented function returns <mark style="color:orange;">`0x9f5dc5b73adeccd5d4cee55ab7ec003e1dc6b495`</mark> as the owner of the contract. <mark style="color:orange;">`0x9f5…495`</mark> is the only address that can allow the consumer contract to consume the data feeds

### Example 2

This [consumer contract](https://testnet.bkcscan.com/address/0xa8BA61538eABd1784381A0bc1A29B127F1CB1B73/read-contract) implements only <mark style="color:orange;">dataFeedOwner()</mark>. The implemented function returns <mark style="color:orange;">0xA3E098DCECa0baBeA44bcd10405f1F8c97fd27f0</mark> as the owner of the contract. <mark style="color:orange;">0xA3E…7f0</mark> is the only address that can allow the consumer contract to consume the data feeds

### Example 3

This [consumer contract](https://testnet.bkcscan.com/address/0x8801be1aaF5500ef0bbF18958D34D9319b4Ad3e8/read-contract) implements both <mark style="color:orange;">`owner()`</mark> and <mark style="color:orange;">`dataFeedOwner()`</mark>. The <mark style="color:orange;">`owner()`</mark> method returns <mark style="color:orange;">`0x9f5DC5B73ADECcD5D4cEe55Ab7ec003E1Dc6b495`</mark>, and the <mark style="color:orange;">`dataFeedOwner()`</mark> method returns <mark style="color:orange;">`0xA3E098DCECa0baBeA44bcd10405f1F8c97fd27f0`</mark>. The consumer contract can be allowed by both <mark style="color:orange;">`0x9f5…495`</mark> and <mark style="color:orange;">`0xA3E…7f0`</mark>. This means it is possible for <mark style="color:orange;">`0xA3E…7f0`</mark> to allow the consumer contract while the consumer contract is being allowed by <mark style="color:orange;">`0x9f5…495`</mark>, resulting in the consumer contract disappearing from <mark style="color:orange;">`0x9f5…495`</mark>’s allowed address list and appearing in <mark style="color:orange;">`0xA3E…7f0`</mark>’s allowed address list instead, as <mark style="color:orange;">`0x9f5…495`</mark> and <mark style="color:orange;">`0xA3E…7f0`</mark> are both considered the owner of the consumer contract, and a consumer contract can only be allowed by only one subscribed token at a time.


# How to subscribe to data oracle?

### About the subscription

There are 2 subscription plans for you to choose

* [Monthly subscription](/deprecated/how-to-subscribe-to-data-oracle/monthly-subscription)
* [Annual subscription](/deprecated/how-to-subscribe-to-data-oracle/annual-subscription)

Once you have bought the subscription you will get the **Subscription NFT** that can assign which smart contract address can access the data feeders.&#x20;

The subscription NFT contains&#x20;

* Plan
* Expired date
* Renewal quota count
* Access control

{% hint style="info" %}
**Renewal**

The plan you have bought will be recorded to the NFT and can not be changed. For example, if you buy the monthly subscription, you will get an NFT with ID *x* and the NFT  can only be renewed in the monthly plan.
{% endhint %}

### To subscribe

After you connect your wallet to the site, a *Dashboard* menu will appear on the top bar, click on it.

Select *Add new subscription* tab on the left, you will find the page below.

![Add new subsciption page](/files/q0VtjeITtqctmXitg2jx)

Click on the *Terms & Policy* button to accept our terms and policy before subscribing to any plan.

The *Approve KKUB* / *Purchase now* button will appear then you can purchase the subscription.


# Monthly subscription

A monthly subscription will grant an NFT with access to the data feeds for 30 days (the expiration date can be extended for 30 days per renewal).

To purchase you must have at least 2 KKUB in your connected wallet, if you don't have enough KKUB you can [convert KUB to KKUB](/deprecated/whats-dashboard/how-to-convert-kub-to-kkub).

To purchase you have to approve KKUB to the subscription contract first, to do that click on *Approve KKUB* button and confirm granting permission on the wallet's popup.

![Approve KKUB](/files/OKVIBx7luys6RVXFQ698) ![Purchase the monthly subscription](/files/BkYfcciaSZrdxsYXh2uE)

After approving KKUB, the *Purchase Now* button will appear and you can click on the button to purchase a monthly subscription.

After the purchasing, the subscription NFT will appear in the *Subscriptions* tab then you can manage the NFT's access control from there.


# Annual subscription

An annual subscription will grant the NFT access for 365 days (the expiration date can be extended for 1 year per renewal).

To purchase you must have at least 10 KKUB in your connected wallet, if you don't have enough KKUB you can [convert KUB to KKUB.](/deprecated/whats-dashboard/how-to-convert-kub-to-kkub)

{% hint style="info" %}
The annual subscription price will change after the promotion ends, the promotion will end if the annual subscription is purchased 10,000 times.
{% endhint %}

To purchase you have to approve KKUB to the subscription contract first, to do that click on *Approve KKUB* button and confirm granting permission on the wallet's popup.

![Approve KKUB](/files/V7APWLv0uy0Fxs8vPtPG) ![Purchase the annual subscription](/files/ZfVaUHz4jXHBFnfjlCAt)

After approving KKUB, the *Purchase Now* button will appear and you can click on the button to purchase an annual subscription.

After the purchasing, the subscription NFT will appear in the *Subscriptions* tab then you can manage the NFT's access control from there.


