Skip to main content
Version: Next

Testing the Oracle Module

We will guide you through the process of testing the Oracle module in your application. The Oracle module uses vote extensions to provide current price data. If you would like to see the complete working oracle module please see here.

Step 1: Compile and Install the Application

First, we need to compile and install the application. Please ensure you are in the tutorials/oracle/base directory. Run the following command in your terminal:

make install

This command compiles the application and moves the resulting binary to a location in your system's PATH.

Step 2: Initialise the Application

Next, we need to initialise the application. Run the following command in your terminal:

make init

This command runs the script tutorials/oracle/base/scripts/init.sh, which sets up the necessary configuration for your application to run. This includes creating the app.toml configuration file and initialising the blockchain with a genesis block.

Step 3: Start the Application

Now, we can start the application. Run the following command in your terminal:

exampled start

This command starts your application, begins the blockchain node, and starts processing transactions.

Step 4: Query the Oracle Prices

Finally, we can query the current prices from the Oracle module. Run the following command in your terminal:

exampled q oracle prices

This command queries the current prices from the Oracle module. The expected output shows that the vote extensions were successfully included in the block and the Oracle module was able to retrieve the price data.

Understanding Vote Extensions in Oracle

In the Oracle module, the ExtendVoteHandler function is responsible for creating the vote extensions. This function fetches the current prices from the provider, creates a OracleVoteExtension struct with these prices, and then marshals this struct into bytes. These bytes are then set as the vote extension.

In the context of testing, the Oracle module uses a mock provider to simulate the behavior of a real price provider. This mock provider is defined in the mockprovider package and is used to return predefined prices for specific currency pairs.

Conclusion

In this tutorial, we've delved into the concept of Oracle's in blockchain technology, focusing on their role in providing external data to a blockchain network. We've explored vote extensions, a powerful feature of ABCI++, and integrated them into a Cosmos SDK application to create a price oracle module.

Through hands-on exercises, you've implemented vote extensions, and tested their effectiveness in providing timely and accurate asset price information. You've gained practical insights by setting up a mock provider for testing and analysing the process of extending votes, verifying vote extensions, and preparing and processing proposals.

Keep experimenting with these concepts, engage with the community, and stay updated on new advancements. The knowledge you've acquired here is crucial for developing robust and reliable blockchain applications that can interact with real-world data.