> ## Documentation Index
> Fetch the complete documentation index at: https://cosmos-docs-cosmjs-docs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Getting Started

> What is an Oracle? Implementing Vote Extensions Testing the Oracle Module

## Table of Contents

* [What is an Oracle?](/sdk/v0.50/tutorials/vote-extensions/oracle/what-is-an-oracle)
* [Implementing Vote Extensions](/sdk/v0.50/tutorials/vote-extensions/oracle/implementing-vote-extensions)
* [Testing the Oracle Module](/sdk/v0.50/tutorials/vote-extensions/oracle/testing-oracle)

## Prerequisites

Before you start with this tutorial, make sure you have:

* A working chain project. This tutorial won't cover the steps of creating a new chain/module.
* Familiarity with the Cosmos SDK, as ABCI++ is considered an advanced topic.
* Read and understood [What is an Oracle?](/sdk/v0.50/tutorials/vote-extensions/oracle/what-is-an-oracle). This provides necessary background information for understanding the Oracle module.
* Basic understanding of Go programming language.

## What are Vote extensions?

Vote extensions is arbitrary information which can be inserted into a block. This feature is part of ABCI 2.0, which is available for use in the SDK 0.50 release and part of the 0.38 CometBFT release.

More information about vote extensions can be seen [here](/sdk/v0.50/build/abci/vote-extensions).

## Overview of the project

We’ll go through the creation of a simple price oracle module focusing on the vote extensions implementation, ignoring the details inside the price oracle itself.

We’ll go through the implementation of:

* `ExtendVote` to get information from external price APIs.
* `VerifyVoteExtension` to check that the format of the provided votes is correct.
* `PrepareProposal` to process the vote extensions from the previous block and include them into the proposal as a transaction.
* `ProcessProposal` to check that the first transaction in the proposal is actually a “special tx” that contains the price information.
* `PreBlocker` to make price information available during FinalizeBlock.

If you would like to see the complete working oracle module please see [here](https://github.com/cosmos/sdk-tutorials/blob/master/tutorials/oracle/base/x/oracle)
