/
msg_register_resolver.go
61 lines (49 loc) · 1.49 KB
/
msg_register_resolver.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
package server
import (
"bytes"
"context"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
api "github.com/regen-network/regen-ledger/api/v2/regen/data/v1"
"github.com/regen-network/regen-ledger/x/data/v2"
)
// RegisterResolver registers data content hashes to the provided resolver.
func (s serverImpl) RegisterResolver(ctx context.Context, msg *data.MsgRegisterResolver) (*data.MsgRegisterResolverResponse, error) {
resolver, err := s.stateStore.ResolverTable().Get(ctx, msg.ResolverId)
if err != nil {
return nil, sdkerrors.ErrNotFound.Wrapf("resolver with id %d does not exist", msg.ResolverId)
}
manager, err := sdk.AccAddressFromBech32(msg.Manager)
if err != nil {
return nil, err
}
if !bytes.Equal(resolver.Manager, manager) {
return nil, data.ErrUnauthorizedResolverManager
}
sdkCtx := sdk.UnwrapSDKContext(ctx)
for _, ch := range msg.ContentHashes {
iri, id, _, err := s.anchorAndGetIRI(ctx, ch)
if err != nil {
return nil, err
}
err = s.stateStore.DataResolverTable().Save(
ctx,
&api.DataResolver{
ResolverId: msg.ResolverId,
Id: id,
},
)
if err != nil {
return nil, err
}
err = sdkCtx.EventManager().EmitTypedEvent(&data.EventRegisterResolver{
Id: msg.ResolverId,
Iri: iri,
})
if err != nil {
return nil, err
}
sdkCtx.GasMeter().ConsumeGas(data.GasCostPerIteration, "data/RegisterResolver content hash iteration")
}
return &data.MsgRegisterResolverResponse{}, nil
}