terra-oracle/example/terra_oracle.go

74 lines
1.6 KiB
Go

package main
import (
"log"
"os"
"github.com/cosmos/cosmos-sdk/types"
"github.com/tendermint/tendermint/rpc/client"
"github.com/certusone/terra-oracle/pkg/oracle"
"github.com/certusone/terra-oracle/pkg/signer"
)
// examplePriceProvider implements the PriceProvider interface
// It returns the same price for all denominations.
type examplePriceProvider struct {
}
func NewExamplePriceProvider() (*examplePriceProvider, error) {
return &examplePriceProvider{}, nil
}
func (provider *examplePriceProvider) GetPrice(denom string) (types.Dec, error) {
return types.NewDecWithPrec(int64(10), 2), nil
}
func main() {
oracle.Init()
wsClient := client.NewHTTP(os.Getenv("RPC_HOST"), "/websocket")
err := wsClient.Start()
if err != nil {
panic(err)
}
chainID := os.Getenv("CHAIN_ID")
valAddressString := os.Getenv("VAL_ADDR")
valAddress, err := types.ValAddressFromBech32(valAddressString)
if err != nil {
panic(err)
}
mnemonic := os.Getenv("MNEMONIC")
hdSigner, err := signer.NewHdSignerFromMnemonic(mnemonic)
if err != nil {
panic(err)
}
priceProvider, err := NewExamplePriceProvider()
if err != nil {
panic(err)
}
txFee := types.Coin{
Denom: "ukrw",
Amount: types.NewInt(750),
}
oracle := oracle.NewPriceOracle(oracle.PriceOracleConfig{
Client: wsClient,
ValAddress: valAddress,
ChainID: chainID,
PriceProvider: priceProvider,
Signer: hdSigner,
TxFee: txFee,
})
log.Printf("starting voter for:\n\tValidator: %s\n\tFeeder: %s\n\tChain: %s\n", valAddress.String(), hdSigner.Address().String(), chainID)
// TODO(hendrik): Allow graceful stop with os.Signal
log.Fatal(oracle.ProcessingLoop())
}