-
Notifications
You must be signed in to change notification settings - Fork 0
/
events.go
96 lines (85 loc) · 2.76 KB
/
events.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package elv_token_upgradeable_go
import (
"fmt"
"reflect"
"github.com/ethereum/go-ethereum/common"
"github.com/eluv-io/contracts-evm-builds/elv_token_upgradeable/elv_token_upgradeable_go/events"
"github.com/eluv-io/contracts-evm-builds/elv_token_upgradeable/elv_token_upgradeable_go/v0.0.0-dev"
)
var (
// UniqueEvents contains all events keyed by their name (e.g. "AccessRequest"). Events that have different
// signatures in different contract versions (sub-packages) are treated as separate events. Their most recent
// version will get the event's original name, while older versions are suffixed with the version date of the
// contract package, e.g. VersionConfirm_20200206.
UniqueEvents = make(map[string]*events.EventInfo)
// EventsByName is an alias of UniqueEvents
EventsByName = UniqueEvents
// EventsByType contains all events keyed by their go type.
EventsByType = make(map[reflect.Type]*events.EventInfo)
// EventsByID contains all events keyed by their id (topic hash)
EventsByID = make(map[common.Hash]*events.EventInfo)
// EventNamesByID contains all event names keyed by their id (topic hash)
EventNamesByID = make(map[common.Hash]string)
allEventInfos = []packageEvent{
{ elv_token_upgradeable_v0_0_0_dev.UniqueEvents, "v000_dev" },
}
)
type packageEvent struct {
events map[string]*events.EventInfo
suffix string
}
func init() {
addEvents := func(
events map[string]*events.EventInfo,
eventSuffix string) {
for name, event := range events {
ev, ok := UniqueEvents[name]
if !ok {
UniqueEvents[name] = event
EventsByID[event.ID] = event
continue
}
if ev.ID == event.ID || EventsByID[event.ID] != nil {
continue
}
UniqueEvents[fmt.Sprintf("%s_%s", name, eventSuffix)] = event
EventsByID[event.ID] = event
}
}
for _, packageEvents := range allEventInfos {
addEvents(packageEvents.events, packageEvents.suffix)
}
for name, event := range UniqueEvents {
for _, eventType := range event.Types {
evt := eventType.Type
ev, _ := EventsByType[evt]
if ev != nil {
panic(fmt.Sprintf("duplicate events for type %v: %s <-> %s",
evt, ev.Name, name))
}
EventsByType[evt] = event
}
EventNamesByID[event.ID] = event.Name
}
// above might have left out some types - ensure that all event types are set
for _, pes := range allEventInfos {
ues := pes.events
for _, event := range ues {
for _, eventType := range event.Types {
evt := eventType.Type
ev, _ := EventsByType[evt]
if ev == nil {
byId, _ := EventsByID[event.ID]
if byId == nil {
panic(fmt.Sprintf("no event in EventsByID for ID %s",
event.ID.String()))
}
if !byId.HasType(eventType) {
byId.Types = append(byId.Types, eventType)
}
EventsByType[evt] = byId
}
}
}
}
}