-
Notifications
You must be signed in to change notification settings - Fork 113
/
msg_server.go
70 lines (53 loc) · 1.7 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
65
66
67
68
69
70
package keeper
import (
"context"
"fmt"
"github.com/cosmos/cosmos-sdk/baseapp"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/axelarnetwork/axelar-core/utils/events"
"github.com/axelarnetwork/axelar-core/x/auxiliary/types"
)
var _ types.MsgServiceServer = msgServer{}
type msgServer struct {
router *baseapp.MsgServiceRouter
}
func NewMsgServer(msgServiceRouter *baseapp.MsgServiceRouter) types.MsgServiceServer {
return msgServer{
msgServiceRouter,
}
}
func (s msgServer) Batch(c context.Context, req *types.BatchRequest) (*types.BatchResponse, error) {
ctx := sdk.UnwrapSDKContext(c)
var results []types.BatchResponse_Response
for i, message := range req.UnwrapMessages() {
var batchResponse types.BatchResponse_Response
cacheCtx, writeCache := ctx.CacheContext()
res, err := s.processMessage(cacheCtx, message)
if err != nil {
batchResponse = types.BatchResponse_Response{Res: &types.BatchResponse_Response_Err{Err: err.Error()}}
events.Emit(ctx, &types.BatchedMessageFailed{
Index: int32(i),
Error: err.Error(),
})
} else {
batchResponse = types.BatchResponse_Response{Res: &types.BatchResponse_Response_Result{Result: res}}
writeCache()
ctx.EventManager().EmitEvents(res.GetEvents())
}
results = append(results, batchResponse)
}
return &types.BatchResponse{
Responses: results,
}, nil
}
func (s msgServer) processMessage(ctx sdk.Context, message sdk.Msg) (*sdk.Result, error) {
handler := s.router.Handler(message)
if handler == nil {
return nil, fmt.Errorf("unrecognized message type: %s", sdk.MsgTypeURL(message))
}
res, err := handler(ctx, message)
if err != nil {
return nil, fmt.Errorf("execution failed: %s", err)
}
return res, nil
}