Pop Quiz: Your protocol is just about finished, but it needs an oracle to get access to off chain data...What do you do?
## (Soft) Prerequisites {#soft-prerequisites}
This post aims to make accessing an oracle feed as simple and straightforward as possible. That said, we're assuming the following about your coding skill-level to focus on the oracle aspect.
Assumptions:
- you can navigate a terminal
- you have npm installed
- you know how to use npm to manage dependencies
Tellor is a live and open-sourced oracle ready for implementation. This beginner's guide is here to showcase the ease with which one can get up and running with Tellor, providing your project with a fully decentralized and censorship-resistent oracle.
## Overview {#overview}
Tellor is an oracle system where parties can request the value of an off-chain data point (e.g. BTC/USD) and reporters compete to add this value to an on-chain data-bank, accessible by all Ethereum smart contracts. The inputs to this data-bank are secured by a network of staked reporters. Tellor utilizes crypto-economic incentive mechanisms, rewarding honest data submissions by reporters and punishing bad actors through the issuance of Tellor’s token, Tributes (TRB) and a dispute mechanism.
In this tutorial we'll go over:
- Setting up the initial toolkit you'll need to get up and running.
- Walk through a simple example.
- List out testnet addresses of networks you currently can test Tellor on.
## UsingTellor {#usingtellor}
The first thing you'll want to do is install the basic tools necessary for using Tellor as your oracle. Use [this package](https://github.com/tellor-io/usingtellor) to install the Tellor User Contracts:
`npm install usingtellor`
Once installed this will allow your contracts to inherit the functions from the contract 'UsingTellor'.
Great! Now that you've got the tools ready, let's go through a simple exercise where we retrieve the bitcoin price:
### BTC/USD Example {#btcusd-example}
Inherit the UsingTellor contract, passing the Tellor address as a constructor argument:
Here's an example:
```solidity
import "usingtellor/contracts/UsingTellor.sol";
contract BtcPriceContract is UsingTellor {
//This Contract now has access to all functions in UsingTellor
bytes btcPrice;
bytes
bytes32 btcQueryId = 0x0000000000000000000000000000000000000000000000000000000000000002;
constructor(address payable _tellorAddress) UsingTellor(_tellorAddress) public {}
function setBtcPrice() public {
bool _didGet;
uint256 _timestamp;
(_didGet, btcPrice, _timestamp) = getCurrentValue(btcQueryId);
}
}
```
**Want to try a different data feed? Check out the list of supported data feeds here:
[Current Data Feeds](https://docs.tellor.io/tellor/integration/data-feed-ids)**
## Addresses: {#addresses}
Mainnet: [`0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a0`](https://etherscan.io/address/0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a0#code)
#### Looking to do some testing first? See the list below for our active testnet addresses: {#looking-to-do-some-testing-first-see-the-list-below-for-our-active-testnet-addresses}
Rinkeby: [`0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a0`](https://rinkeby.etherscan.io/address/0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a0#code)
Kovan: [`0x3477EB82263dabb59AC0CAcE47a61292f28A2eA7`](https://kovan.etherscan.io/address/0x3477EB82263dabb59AC0CAcE47a61292f28A2eA7#code)
Ropsten: [`0x3477EB82263dabb59AC0CAcE47a61292f28A2eA7`](https://ropsten.etherscan.io/address/0x3477EB82263dabb59AC0CAcE47a61292f28A2eA7#code)
Goerli: [`0x3477EB82263dabb59AC0CAcE47a61292f28A2eA7`](https://goerli.etherscan.io/address/0x3477EB82263dabb59AC0CAcE47a61292f28A2eA7#code)
BSC Testnet: [`0x3477EB82263dabb59AC0CAcE47a61292f28A2eA7 `](https://testnet.bscscan.com/address/0x3477EB82263dabb59AC0CAcE47a61292f28A2eA7#code)
Polygon Mumbai Testnet: [`0x3477EB82263dabb59AC0CAcE47a61292f28A2eA7 `](https://mumbai.polygonscan.com/address/0x3477EB82263dabb59AC0CAcE47a61292f28A2eA7/contracts#code)
Arbitrum Testnet: [`0x3477EB82263dabb59AC0CAcE47a61292f28A2eA7 `](https://rinkeby-explorer.arbitrum.io/address/0x3477EB82263dabb59AC0CAcE47a61292f28A2eA7)
#### For a more robust implementation of the Tellor oracle, check out the full list of available functions [here.](https://github.com/tellor-io/usingtellor/blob/master/README.md) {#for-a-more-robust-implementation-of-the-tellor-oracle-check-out-the-full-list-of-available-functions-here}