Validators may also elect to delegate voting rights to another key to prevent the block signing key from being kept online. To do so, they must submit a MsgDelegateFeedConsent, delegating their oracle voting rights to a Delegate that sign MsgExchangeRatePrevote and MsgExchangeRateVote on behalf of the validator.

Delegate validators will likely require you to deposit some funds (in UX) which they can use to pay fees, sent in a separate MsgSend. This agreement is made off-chain and not enforced by the UX protocol.

The Operator field contains the operator address of the validator (prefixed umeevaloper-). The Delegate field is the account address (prefixed umee-) of the delegate account that will be submitting exchange rate related votes and prevotes on behalf of the Operator.

// MsgDelegateFeedConsent - struct for delegating oracle voting rights to another address.
type MsgDelegateFeedConsent struct {
    Operator    sdk.ValAddress
    Delegate    sdk.AccAddress


Hash is a hex string generated by the leading 20 bytes of the SHA256 hash (hex string) of a string of the format {salt}:{exchange rate}{denom},...,{exchange rate}{denom}:{voter}, the metadata of the actual MsgAggregateExchangeRateVote to follow in the next VotePeriod. You can use the GetAggregateVoteHash() function to help encode this hash. Note that since in the subsequent MsgAggregateExchangeRateVote, the salt will have to be revealed, the salt used must be regenerated for each prevote submission.

// MsgAggregateExchangeRatePrevote - struct for aggregate prevoting on the ExchangeRateVote.
// The purpose of aggregate prevote is to hide vote exchange rates with a hash
// which is formatted as hex string in SHA256("{salt}:{exchange rate}{denom},...,{exchange rate}{denom}:{voter}")
type MsgAggregateExchangeRatePrevote struct {
    Hash        AggregateVoteHash
    Feeder      sdk.AccAddress
    Validator   sdk.ValAddress


The MsgAggregateExchangeRateVote contains the actual exchange rates vote. The Salt parameter must match the salt used to create the prevote, otherwise the voter cannot be rewarded.

// MsgAggregateExchangeRateVote - struct for voting on the exchange rates of various assets.
type MsgAggregateExchangeRateVote struct {
    Salt            string
    ExchangeRates   string
    Feeder          sdk.AccAddress
    Validator       sdk.ValAddress