-
Notifications
You must be signed in to change notification settings - Fork 38
/
object_id_map.go
70 lines (59 loc) · 2.27 KB
/
object_id_map.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 objectidmap
import (
"context"
"errors"
abci "github.com/cometbft/cometbft/abci/types"
tmctypes "github.com/cometbft/cometbft/rpc/core/types"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/gogoproto/proto"
"github.com/forbole/juno/v4/common"
"github.com/forbole/juno/v4/log"
"github.com/bnb-chain/greenfield-storage-provider/store/bsdb"
storagetypes "github.com/bnb-chain/greenfield/x/storage/types"
)
var (
EventCreateObject = proto.MessageName(&storagetypes.EventCreateObject{})
)
// buildPrefixTreeEvents maps event types that trigger the creation or deletion of prefix tree nodes.
// If an event type is present and set to true in this map,
// it means that event will result in changes to the prefix tree structure.
var buildPrefixTreeEvents = map[string]bool{
EventCreateObject: true,
}
func (m *Module) ExtractEventStatements(ctx context.Context, block *tmctypes.ResultBlock, txHash common.Hash, event sdk.Event) (map[string][]interface{}, error) {
if !buildPrefixTreeEvents[event.Type] {
return nil, nil
}
typedEvent, err := sdk.ParseTypedEvent(abci.Event(event))
if err != nil {
log.Errorw("parse typed events error", "module", m.Name(), "event", event, "err", err)
return nil, err
}
switch event.Type {
case EventCreateObject:
createObject, ok := typedEvent.(*storagetypes.EventCreateObject)
if !ok {
log.Errorw("type assert error", "type", "EventCreateObject", "event", typedEvent)
return nil, errors.New("create object event assert error")
}
return m.handleCreateObject(ctx, createObject), nil
default:
return nil, nil
}
}
// HandleEvent handles the events relevant to the building of the PrefixTree.
// It checks the type of the event and calls the appropriate handler for it.
func (m *Module) HandleEvent(ctx context.Context, block *tmctypes.ResultBlock, txHash common.Hash, event sdk.Event) error {
return nil
}
// handleCreateObject handles EventCreateObject.
func (m *Module) handleCreateObject(ctx context.Context, createObject *storagetypes.EventCreateObject) map[string][]interface{} {
objectIDMap := &bsdb.ObjectIDMap{
ObjectID: common.BigToHash(createObject.ObjectId.BigInt()),
BucketName: createObject.BucketName,
}
k, v := m.db.CreateObjectIDMap(ctx, objectIDMap)
return map[string][]interface{}{
k: v,
}
}