-
Notifications
You must be signed in to change notification settings - Fork 41
/
packets.go
92 lines (85 loc) · 2.69 KB
/
packets.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
package types
import (
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
)
// NewOracleRequestPacketData contructs a new OracleRequestPacketData instance
func NewOracleRequestPacketData(
clientID string,
oracleScriptID OracleScriptID,
calldata []byte,
askCount uint64,
minCount uint64,
feeLimit sdk.Coins,
prepareGas uint64,
executeGas uint64,
) OracleRequestPacketData {
return OracleRequestPacketData{
ClientID: clientID,
OracleScriptID: oracleScriptID,
Calldata: calldata,
AskCount: askCount,
MinCount: minCount,
FeeLimit: feeLimit,
PrepareGas: prepareGas,
ExecuteGas: executeGas,
}
}
// ValidateBasic is used for validating the request.
func (p OracleRequestPacketData) ValidateBasic() error {
if p.MinCount <= 0 {
return sdkerrors.Wrapf(ErrInvalidMinCount, "got: %d", p.MinCount)
}
if p.AskCount < p.MinCount {
return sdkerrors.Wrapf(ErrInvalidAskCount, "got: %d, min count: %d", p.AskCount, p.MinCount)
}
if len(p.ClientID) > MaxClientIDLength {
return WrapMaxError(ErrTooLongClientID, len(p.ClientID), MaxClientIDLength)
}
if p.PrepareGas <= 0 {
return sdkerrors.Wrapf(ErrInvalidOwasmGas, "invalid prepare gas: %d", p.PrepareGas)
}
if p.ExecuteGas <= 0 {
return sdkerrors.Wrapf(ErrInvalidOwasmGas, "invalid execute gas: %d", p.ExecuteGas)
}
if p.PrepareGas+p.ExecuteGas > MaximumOwasmGas {
return sdkerrors.Wrapf(
ErrInvalidOwasmGas,
"sum of prepare gas and execute gas (%d) exceed %d",
p.PrepareGas+p.ExecuteGas,
MaximumOwasmGas,
)
}
if !p.FeeLimit.IsValid() {
return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, p.FeeLimit.String())
}
return nil
}
// GetBytes is a helper for serialising
func (p OracleRequestPacketData) GetBytes() []byte {
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&p))
}
func NewOracleRequestPacketAcknowledgement(requestID RequestID) *OracleRequestPacketAcknowledgement {
return &OracleRequestPacketAcknowledgement{
RequestID: requestID,
}
}
// NewOracleResponsePacketData contructs a new OracleResponsePacketData instance
func NewOracleResponsePacketData(
clientID string, requestID RequestID, ansCount uint64, requestTime int64,
resolveTime int64, resolveStatus ResolveStatus, result []byte,
) OracleResponsePacketData {
return OracleResponsePacketData{
ClientID: clientID,
RequestID: requestID,
AnsCount: ansCount,
RequestTime: requestTime,
ResolveTime: resolveTime,
ResolveStatus: resolveStatus,
Result: result,
}
}
// GetBytes returns the bytes representation of this oracle response packet data.
func (p OracleResponsePacketData) GetBytes() []byte {
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&p))
}