-
Notifications
You must be signed in to change notification settings - Fork 0
/
ante_wrapper.go
75 lines (62 loc) · 2.05 KB
/
ante_wrapper.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
package ante
import (
sdk "github.com/cosmos/cosmos-sdk/types"
)
// SingleMsgClobTxAnteWrapper is a wrapper for Antehandlers that need to be skipped for
// single msg clob txs `MsgPlaceOrder` and `MsgCancelOrder`. These transactions should always have `0` Gas,
// and therefore should never be charged a gas fee.
type SingleMsgClobTxAnteWrapper struct {
antehandler sdk.AnteDecorator
}
func NewSingleMsgClobTxAnteWrapper(handler sdk.AnteDecorator) SingleMsgClobTxAnteWrapper {
return SingleMsgClobTxAnteWrapper{
antehandler: handler,
}
}
func (antWrapper SingleMsgClobTxAnteWrapper) GetAnteHandler() sdk.AnteDecorator {
return antWrapper.antehandler
}
func (anteWrapper SingleMsgClobTxAnteWrapper) AnteHandle(
ctx sdk.Context,
tx sdk.Tx,
simulate bool,
next sdk.AnteHandler,
) (sdk.Context, error) {
isSingleClobMsgTx, err := IsSingleClobMsgTx(ctx, tx)
if err != nil {
return ctx, err
}
if isSingleClobMsgTx {
return next(ctx, tx, simulate)
}
return anteWrapper.antehandler.AnteHandle(ctx, tx, simulate, next)
}
// ShortTermSingleMsgClobTxAnteWrapper is a wrapper for Antehandlers that need to be skipped for
// single msg clob txs `MsgPlaceOrder` and `MsgCancelOrder` which reference Short-Term orders.
// For example, these transactions do not require sequence number validation.
type ShortTermSingleMsgClobTxAnteWrapper struct {
antehandler sdk.AnteDecorator
}
func NewShortTermSingleMsgClobTxAnteWrapper(handler sdk.AnteDecorator) ShortTermSingleMsgClobTxAnteWrapper {
return ShortTermSingleMsgClobTxAnteWrapper{
antehandler: handler,
}
}
func (antWrapper ShortTermSingleMsgClobTxAnteWrapper) GetAnteHandler() sdk.AnteDecorator {
return antWrapper.antehandler
}
func (anteWrapper ShortTermSingleMsgClobTxAnteWrapper) AnteHandle(
ctx sdk.Context,
tx sdk.Tx,
simulate bool,
next sdk.AnteHandler,
) (sdk.Context, error) {
isShortTermClobMsgTx, err := IsShortTermClobMsgTx(ctx, tx)
if err != nil {
return ctx, err
}
if isShortTermClobMsgTx {
return next(ctx, tx, simulate)
}
return anteWrapper.antehandler.AnteHandle(ctx, tx, simulate, next)
}