The oracle-consumer is an application of the Cosmos SDK that demonstrates the use of the pricefeed-module implemented by BandProtocol. This module allows other Cosmos SDK applications to easily obtain data from BandChain through IBC.
oracle-consumerd
: The Oracle Consumer Daemon and command-line interface (CLI). Runs a full node of the consumer application.
oracle-consumer is built on the Cosmos SDK using the following modules:
x/consumer
: Consume data from pricefeed module.x/pricefeed
: Logic of requesting data from BandChain.
Be sure you have met the prerequisites before you install and use Consumer Chain
- Ubuntu 22.04
- 1.19.5 or higher
- 1.65.0 or higher
This guide will provide instructions on how to install the oracle-consumerd
binary and run the CLI on a server. By following these steps, you will have the binary properly set up and ready to use.
Ignite CLI is an easy-to-use CLI tool for creating and maintaining sovereign application-specific blockchains. Blockchains created with Ignite CLI use Cosmos SDK and Tendermint.
To install the ignite
binary in /usr/local/bin
run the following command:
curl https://get.ignite.com/cli! | bash
sudo apt update && sudo apt install build-essential
git clone -b <latest-release-tag> https://github.com/bandprotocol/oracle-consumer.git
cd oracle-consumer & ignite chain serve -v
You can locate the <latest-release-tag>
here.
When you initiate the chain, the Alice and Bob mnemonic will be displayed in your logging. Kindly preserve this mnemonic for use in the section below.
[IGNITE] ✔ Added account alice with address cosmos1d2dymcelkm6qgfaje3t4xt8vlpqfn227nvu9ja and mnemonic:
[IGNITE] [your alice mnemonic]
[IGNITE] ✔ Added account bob with address cosmos1cn9yzz5p7scdc7s0he7vujyfcvtldlnv86tnys and mnemonic:
[IGNITE] [your bob mnemonic]
By executing the command ignite chain serve -v
, the oracle-consumerd binary will be installed and your consumer chain will start running.
Verify that everything is installed successfully by running:
oracle-consumerd version --long
You should see something similar to the following:
...
build_tags: ""
commit: ...
cosmos_sdk_version: v0.46.12
go: go version go1.19.5 darwin/amd64
name: Oracle-Consumer
server_name: oracle-consumerd
version: ""
The last step is to set up a relayer to listen and relay IBC packets between an oracle-consumer chain and BandChain.
Here are the simple guides for setting up a relayer.
The current default value for the source channel is [not_set]
. If you wish to obtain BandChain data through IBC, you will need to open the proposal to change the source channel param to your own source channel. An example of how to open parameter change proposal is provided below.
Note: this example has been provided in
example/proposals/source-channel-params-change.json
{
"title": "Param change for SourceChannel",
"description": "Proposal for change SourceChannel param in pricefeed module",
"changes": [
{
"subspace": "pricefeed",
"key": "SourceChannel",
"value": "channel-0"
}
],
"deposit": "10000000stake"
}
oracle-consumerd tx gov submit-legacy-proposal param-change example/proposals/source-channel-params-change.json --from alice
oracle-consumerd tx gov vote 1 yes --from alice
oracle-consumerd tx gov vote 1 yes --from bob
The purpose of this proposal is to request price data from BandChain at block_interval
specified in the proposal. If the proposal is approved, the pricefeed module will retrieve the data and store the response on the consumer chain.
Note: this example has been provided in
example/proposals/update-symbol-requests.json
{
"title": "Update Symbol requests",
"description": "Update symbol that request price from BandChain",
"symbol_requests": [
{
"symbol": "BTC",
"oracle_script_id": "396",
"block_interval": "40"
},
{
"symbol": "ETH",
"oracle_script_id": "396",
"block_interval": "40"
}
],
"deposit": "10000000stake"
}
You can also delete symbol request by set "block_interval": "0"
on this proposal.
oracle-consumerd tx gov submit-legacy-proposal update-symbol-request example/proposals/update-symbol-requests.json --from alice
oracle-consumerd tx gov vote 2 yes --from alice
oracle-consumerd tx gov vote 2 yes --from bob
oracle-consumerd query gov proposals
To utilize the Ignite feature to replace the genesis state, insert the code shown below into the config.yml
file. and restat the chin by using ignite chain serve -r -v
command.
genesis:
app_state:
pricefeed:
params:
source_channel: "channel-0"
symbol_requests: [{"symbol": "BAND", "oracle_script_id": 396, "block_interval": 40}]
Query latest price that got from BandChin via pricefeed module
oracle-consumerd query pricefeed price BAND
Query latest price that got from BandChin via consumer module
oracle-consumerd query consumer price BAND