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}