# 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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.bkcoracle.com/deprecated/interface-requirement-of-a-consumer-contract.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
