Skip to content

Commit 510f015

Browse files
committed
fix(events): load actor from tipset state, not parent state
1 parent 9abe818 commit 510f015

File tree

2 files changed

+21
-9
lines changed

2 files changed

+21
-9
lines changed

chain/events/filter/index.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,10 @@ func (ei *EventIndex) migrateToVersion4(ctx context.Context) error {
362362
}
363363
}
364364

365+
if _, err = tx.Exec("INSERT OR IGNORE INTO _meta (version) VALUES (4)"); err != nil {
366+
return xerrors.Errorf("increment _meta version: %w", err)
367+
}
368+
365369
err = tx.Commit()
366370
if err != nil {
367371
return xerrors.Errorf("commit transaction: %w", err)
@@ -502,7 +506,7 @@ func (ei *EventIndex) migrateToVersion5(ctx context.Context, chainStore *store.C
502506
}
503507

504508
// Increment the schema version in _meta table to 4.
505-
if _, err = tx.Exec("INSERT OR IGNORE INTO _meta (version) VALUES (4)"); err != nil {
509+
if _, err = tx.Exec("INSERT OR IGNORE INTO _meta (version) VALUES (5)"); err != nil {
506510
return xerrors.Errorf("increment _meta version: %w", err)
507511
}
508512

node/impl/full/eth_events.go

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ func ethLogFromEvent(entries []types.EventEntry) (data []byte, topics []ethtypes
9797
func ethFilterResultFromEvents(ctx context.Context, evs []*filter.CollectedEvent, sa StateAPI) (*ethtypes.EthFilterResult, error) {
9898
res := &ethtypes.EthFilterResult{}
9999
for _, ev := range evs {
100-
log := ethtypes.EthLog{
100+
ethlog := ethtypes.EthLog{
101101
Removed: ev.Reverted,
102102
LogIndex: ethtypes.EthUint64(ev.EventIdx),
103103
TransactionIndex: ethtypes.EthUint64(ev.MsgIdx),
@@ -108,7 +108,7 @@ func ethFilterResultFromEvents(ctx context.Context, evs []*filter.CollectedEvent
108108
ok bool
109109
)
110110

111-
log.Data, log.Topics, ok = ethLogFromEvent(ev.Entries)
111+
ethlog.Data, ethlog.Topics, ok = ethLogFromEvent(ev.Entries)
112112
if !ok {
113113
continue
114114
}
@@ -118,35 +118,43 @@ func ethFilterResultFromEvents(ctx context.Context, evs []*filter.CollectedEvent
118118
return nil, xerrors.Errorf("emitter to addr: %w", err)
119119
}
120120

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+
stateRoot, _, err := sa.StateManager.TipSetState(ctx, ts)
126+
if err != nil {
127+
return nil, xerrors.Errorf("loading tipset state: %w", err)
128+
}
129+
actor, err := sa.StateManager.LoadActorRaw(ctx, emitterAddr, stateRoot)
122130
if err != nil {
123131
return nil, xerrors.Errorf("state get actor: %w", err)
124132
}
125133
if actor == nil && actor.Address == nil {
126134
return nil, xerrors.New("state get actor: nil")
127135
}
128-
log.Address, err = ethtypes.EthAddressFromFilecoinAddress(*actor.Address)
136+
ethlog.Address, err = ethtypes.EthAddressFromFilecoinAddress(*actor.Address)
129137
if err != nil {
130138
return nil, xerrors.Errorf("eth addr from fil: %w", err)
131139
}
132-
log.TransactionHash, err = ethTxHashFromMessageCid(ctx, ev.MsgCid, sa)
140+
ethlog.TransactionHash, err = ethTxHashFromMessageCid(ctx, ev.MsgCid, sa)
133141
if err != nil {
134142
return nil, err
135143
}
136-
if log.TransactionHash == ethtypes.EmptyEthHash {
144+
if ethlog.TransactionHash == ethtypes.EmptyEthHash {
137145
// We've garbage collected the message, ignore the events and continue.
138146
continue
139147
}
140148
c, err := ev.TipSetKey.Cid()
141149
if err != nil {
142150
return nil, err
143151
}
144-
log.BlockHash, err = ethtypes.EthHashFromCid(c)
152+
ethlog.BlockHash, err = ethtypes.EthHashFromCid(c)
145153
if err != nil {
146154
return nil, err
147155
}
148156

149-
res.Results = append(res.Results, log)
157+
res.Results = append(res.Results, ethlog)
150158
}
151159

152160
return res, nil

0 commit comments

Comments
 (0)