-
Notifications
You must be signed in to change notification settings - Fork 791
/
msgs.go
executable file
·127 lines (103 loc) · 3.91 KB
/
msgs.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package types
import (
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
)
// ensure Msg interface compliance at compile time
var (
_ sdk.Msg = &MsgDelegateFeedConsent{}
_ sdk.Msg = &MsgAggregateExchangeRateVote{}
)
// oracle message types
const (
TypeMsgDelegateFeedConsent = "delegate_feeder"
TypeMsgAggregateExchangeRateVote = "aggregate_exchange_rate_vote"
)
//-------------------------------------------------
//-------------------------------------------------
// NewMsgAggregateExchangeRateVote returns MsgAggregateExchangeRateVote instance
func NewMsgAggregateExchangeRateVote(exchangeRates string, feeder sdk.AccAddress, validator sdk.ValAddress) *MsgAggregateExchangeRateVote {
return &MsgAggregateExchangeRateVote{
ExchangeRates: exchangeRates,
Feeder: feeder.String(),
Validator: validator.String(),
}
}
// Route implements sdk.Msg
func (msg MsgAggregateExchangeRateVote) Route() string { return RouterKey }
// Type implements sdk.Msg
func (msg MsgAggregateExchangeRateVote) Type() string { return TypeMsgAggregateExchangeRateVote }
// GetSignBytes implements sdk.Msg
func (msg MsgAggregateExchangeRateVote) GetSignBytes() []byte {
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg))
}
// GetSigners implements sdk.Msg
func (msg MsgAggregateExchangeRateVote) GetSigners() []sdk.AccAddress {
feeder, err := sdk.AccAddressFromBech32(msg.Feeder)
if err != nil {
panic(err)
}
return []sdk.AccAddress{feeder}
}
// ValidateBasic implements sdk.Msg
func (msg MsgAggregateExchangeRateVote) ValidateBasic() error {
_, err := sdk.AccAddressFromBech32(msg.Feeder)
if err != nil {
return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid feeder address (%s)", err)
}
_, err = sdk.ValAddressFromBech32(msg.Validator)
if err != nil {
return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid operator address (%s)", err)
}
if l := len(msg.ExchangeRates); l == 0 {
return sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "must provide at least one oracle exchange rate")
} else if l > 4096 {
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "exchange rates string can not exceed 4096 characters")
}
exchangeRates, err := ParseExchangeRateTuples(msg.ExchangeRates)
if err != nil {
return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, "failed to parse exchange rates string cause: "+err.Error())
}
for _, exchangeRate := range exchangeRates {
// Check overflow bit length
if exchangeRate.ExchangeRate.BigInt().BitLen() > 255+sdk.DecimalPrecisionBits {
return sdkerrors.Wrap(ErrInvalidExchangeRate, "overflow")
}
}
return nil
}
// NewMsgDelegateFeedConsent creates a MsgDelegateFeedConsent instance
func NewMsgDelegateFeedConsent(operatorAddress sdk.ValAddress, feederAddress sdk.AccAddress) *MsgDelegateFeedConsent {
return &MsgDelegateFeedConsent{
Operator: operatorAddress.String(),
Delegate: feederAddress.String(),
}
}
// Route implements sdk.Msg
func (msg MsgDelegateFeedConsent) Route() string { return RouterKey }
// Type implements sdk.Msg
func (msg MsgDelegateFeedConsent) Type() string { return TypeMsgDelegateFeedConsent }
// GetSignBytes implements sdk.Msg
func (msg MsgDelegateFeedConsent) GetSignBytes() []byte {
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg))
}
// GetSigners implements sdk.Msg
func (msg MsgDelegateFeedConsent) GetSigners() []sdk.AccAddress {
operator, err := sdk.ValAddressFromBech32(msg.Operator)
if err != nil {
panic(err)
}
return []sdk.AccAddress{sdk.AccAddress(operator)}
}
// ValidateBasic implements sdk.Msg
func (msg MsgDelegateFeedConsent) ValidateBasic() error {
_, err := sdk.ValAddressFromBech32(msg.Operator)
if err != nil {
return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid operator address (%s)", err)
}
_, err = sdk.AccAddressFromBech32(msg.Delegate)
if err != nil {
return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid delegate address (%s)", err)
}
return nil
}