-
Notifications
You must be signed in to change notification settings - Fork 56
/
msg_server_connect_chain.go
77 lines (64 loc) · 2.19 KB
/
msg_server_connect_chain.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
package keeper
import (
"context"
"fmt"
"github.com/cosmos/cosmos-sdk/store/prefix"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/deweb-services/deweb/x/deweb/types"
"strings"
)
func (k msgServer) ConnectChain(goCtx context.Context, msg *types.MsgConnectChain) (*types.MsgConnectChainResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
externalAddress := msg.GetAddress()
externalChain := msg.GetChain()
creator := msg.GetCreator()
itemToStore := types.ChainAddressMapping{
ExtAddress: externalAddress,
Chain: externalChain,
}
idVal := creator + "_" + externalChain + "_" + externalAddress
mappingWriteError := k.writeChainMappingRecord(ctx, itemToStore, idVal)
if mappingWriteError != nil {
return nil, fmt.Errorf("error writing message to store: %w", mappingWriteError)
}
toUserErr := k.appendMappingRecordToUser(ctx, creator, idVal)
if toUserErr != nil {
return nil, fmt.Errorf("error adding created record to user")
}
return &types.MsgConnectChainResponse{}, nil
}
func (k msgServer) writeChainMappingRecord(ctx sdk.Context, mappingRec types.ChainAddressMapping, idVal string) error {
store := prefix.NewStore(ctx.KVStore(k.storeKey), []byte(types.ConnectChainRecords))
recordValue, err := k.cdc.Marshal(&mappingRec)
if err != nil {
return err
}
store.Set([]byte(idVal), recordValue)
return nil
}
func (k msgServer) appendMappingRecordToUser(ctx sdk.Context, address string, recordID string) error {
k.Logger(ctx).Error(fmt.Sprintf("[appendUserRecordID] Process"))
existRecords, err := k.getChainMappingRecordsIDs(ctx, address)
if err != nil {
return err
}
if existRecords == nil {
existRecords = make([]string, 0, 1)
}
for _, recID := range existRecords {
if recID == recordID {
return nil
}
}
existRecords = append(existRecords, recordID)
k.Logger(ctx).Error(fmt.Sprintf("[appendUserRecordID] user records: %s", strings.Join(existRecords, ",")))
store := prefix.NewStore(ctx.KVStore(k.storeKey), []byte(types.UserConnectChainRecords))
resRecords := types.RecordsToUser{Records: existRecords}
recordValue, err := k.cdc.Marshal(&resRecords)
if err != nil {
return err
}
recKey := []byte(address)
store.Set(recKey, recordValue)
return nil
}