-
Notifications
You must be signed in to change notification settings - Fork 0
/
msg_server.go
64 lines (53 loc) · 1.54 KB
/
msg_server.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
package keeper
import (
"context"
"fmt"
errorsmod "cosmossdk.io/errors"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/furyanprotocol/v4-chain/protocol/x/delaymsg/types"
)
type msgServer struct {
types.DelayMsgKeeper
}
func NewMsgServerImpl(keeper types.DelayMsgKeeper) types.MsgServer {
return &msgServer{keeper}
}
// DelayMessage delays execution of a message by a given number of blocks.
func (k msgServer) DelayMessage(
goCtx context.Context,
msg *types.MsgDelayMessage,
) (*types.MsgDelayMessageResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
// x/delaymsg accepts messages that may have been created by other modules. In this case, the
// ValidateBasic method of the message will not have been called. We call it here to ensure
// that the message is valid before continuing.
if err := msg.ValidateBasic(); err != nil {
return nil, errorsmod.Wrapf(
types.ErrInvalidInput,
"msg.ValidateBasic failed, err = %v",
err,
)
}
if !k.HasAuthority(msg.GetAuthority()) {
return nil, errorsmod.Wrapf(
types.ErrInvalidInput,
"%v is not recognized as a valid authority for sending messages",
msg.GetAuthority(),
)
}
sdkMsg, err := msg.GetMessage()
if err != nil {
return nil, errorsmod.Wrapf(
types.ErrInvalidInput,
"GetMessage for MsgDelayedMessage failed, err = %v",
err,
)
}
id, err := k.DelayMessageByBlocks(ctx, sdkMsg, msg.DelayBlocks)
if err != nil {
return nil, fmt.Errorf("DelayMessageByBlocks failed, err = %w", err)
}
return &types.MsgDelayMessageResponse{
Id: uint64(id),
}, nil
}