-
Notifications
You must be signed in to change notification settings - Fork 191
/
icacallbacks.go
52 lines (41 loc) · 1.62 KB
/
icacallbacks.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
package keeper
import (
icacallbackstypes "github.com/Stride-Labs/stride/x/icacallbacks/types"
sdk "github.com/cosmos/cosmos-sdk/types"
channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types"
)
const DELEGATE = "delegate"
const CLAIM = "claim"
const UNDELEGATE = "undelegate"
const REINVEST = "reinvest"
const REDEMPTION = "redemption"
// ICACallbacks wrapper struct for stakeibc keeper
type ICACallback func(Keeper, sdk.Context, channeltypes.Packet, *channeltypes.Acknowledgement, []byte) error
type ICACallbacks struct {
k Keeper
icacallbacks map[string]ICACallback
}
var _ icacallbackstypes.ICACallbackHandler = ICACallbacks{}
func (k Keeper) ICACallbackHandler() ICACallbacks {
return ICACallbacks{k, make(map[string]ICACallback)}
}
func (c ICACallbacks) CallICACallback(ctx sdk.Context, id string, packet channeltypes.Packet, ack *channeltypes.Acknowledgement, args []byte) error {
return c.icacallbacks[id](c.k, ctx, packet, ack, args)
}
func (c ICACallbacks) HasICACallback(id string) bool {
_, found := c.icacallbacks[id]
return found
}
func (c ICACallbacks) AddICACallback(id string, fn interface{}) icacallbackstypes.ICACallbackHandler {
c.icacallbacks[id] = fn.(ICACallback)
return c
}
func (c ICACallbacks) RegisterICACallbacks() icacallbackstypes.ICACallbackHandler {
a := c.
AddICACallback(DELEGATE, ICACallback(DelegateCallback)).
AddICACallback(CLAIM, ICACallback(ClaimCallback)).
AddICACallback(UNDELEGATE, ICACallback(UndelegateCallback)).
AddICACallback(REINVEST, ICACallback(ReinvestCallback)).
AddICACallback(REDEMPTION, ICACallback(RedemptionCallback))
return a.(ICACallbacks)
}