@@ -97,7 +97,7 @@ func ethLogFromEvent(entries []types.EventEntry) (data []byte, topics []ethtypes
97
97
func ethFilterResultFromEvents (ctx context.Context , evs []* filter.CollectedEvent , sa StateAPI ) (* ethtypes.EthFilterResult , error ) {
98
98
res := & ethtypes.EthFilterResult {}
99
99
for _ , ev := range evs {
100
- log := ethtypes.EthLog {
100
+ ethlog := ethtypes.EthLog {
101
101
Removed : ev .Reverted ,
102
102
LogIndex : ethtypes .EthUint64 (ev .EventIdx ),
103
103
TransactionIndex : ethtypes .EthUint64 (ev .MsgIdx ),
@@ -108,7 +108,7 @@ func ethFilterResultFromEvents(ctx context.Context, evs []*filter.CollectedEvent
108
108
ok bool
109
109
)
110
110
111
- log .Data , log .Topics , ok = ethLogFromEvent (ev .Entries )
111
+ ethlog .Data , ethlog .Topics , ok = ethLogFromEvent (ev .Entries )
112
112
if ! ok {
113
113
continue
114
114
}
@@ -118,35 +118,46 @@ func ethFilterResultFromEvents(ctx context.Context, evs []*filter.CollectedEvent
118
118
return nil , xerrors .Errorf ("emitter to addr: %w" , err )
119
119
}
120
120
121
- actor , err := sa .StateGetActor (ctx , emitterAddr , ev .TipSetKey )
121
+ ts , err := sa .Chain .GetTipSetFromKey (ctx , ev .TipSetKey )
122
+ if err != nil {
123
+ return nil , xerrors .Errorf ("loading tipset: %w" , err )
124
+ }
125
+ // Because we collect events after the tipset is processed, a call to TipSetState should't have
126
+ // to execute the tipset to get the state root, so we shouldn't have to worry about avoiding
127
+ // expensive migrations here.
128
+ stateRoot , _ , err := sa .StateManager .TipSetState (ctx , ts )
129
+ if err != nil {
130
+ return nil , xerrors .Errorf ("loading tipset state: %w" , err )
131
+ }
132
+ actor , err := sa .StateManager .LoadActorRaw (ctx , emitterAddr , stateRoot )
122
133
if err != nil {
123
134
return nil , xerrors .Errorf ("state get actor: %w" , err )
124
135
}
125
136
if actor == nil && actor .Address == nil {
126
137
return nil , xerrors .New ("state get actor: nil" )
127
138
}
128
- log .Address , err = ethtypes .EthAddressFromFilecoinAddress (* actor .Address )
139
+ ethlog .Address , err = ethtypes .EthAddressFromFilecoinAddress (* actor .Address )
129
140
if err != nil {
130
141
return nil , xerrors .Errorf ("eth addr from fil: %w" , err )
131
142
}
132
- log .TransactionHash , err = ethTxHashFromMessageCid (ctx , ev .MsgCid , sa )
143
+ ethlog .TransactionHash , err = ethTxHashFromMessageCid (ctx , ev .MsgCid , sa )
133
144
if err != nil {
134
145
return nil , err
135
146
}
136
- if log .TransactionHash == ethtypes .EmptyEthHash {
147
+ if ethlog .TransactionHash == ethtypes .EmptyEthHash {
137
148
// We've garbage collected the message, ignore the events and continue.
138
149
continue
139
150
}
140
151
c , err := ev .TipSetKey .Cid ()
141
152
if err != nil {
142
153
return nil , err
143
154
}
144
- log .BlockHash , err = ethtypes .EthHashFromCid (c )
155
+ ethlog .BlockHash , err = ethtypes .EthHashFromCid (c )
145
156
if err != nil {
146
157
return nil , err
147
158
}
148
159
149
- res .Results = append (res .Results , log )
160
+ res .Results = append (res .Results , ethlog )
150
161
}
151
162
152
163
return res , nil
0 commit comments