Skip to content

Commit 2dfdd09

Browse files
authored
Merge pull request #404 from shutter-network/feat/observer-contract-creation
Chainobserver: sync from earliest contract deployment only
2 parents b7b201f + 1faab62 commit 2dfdd09

File tree

3 files changed

+76
-47
lines changed

3 files changed

+76
-47
lines changed

rolling-shutter/chainobserver/observer.go

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,28 @@ func (chainobs *ChainObserver) Observe(ctx context.Context, eventTypes []*events
5555
if err != nil {
5656
return errors.Wrap(err, "failed to get last synced event from db")
5757
}
58-
fromBlock := uint64(eventSyncProgress.NextBlockNumber)
59-
fromLogIndex := uint64(eventSyncProgress.NextLogIndex)
58+
59+
var fromBlock, fromLogIndex uint64
60+
if len(eventTypes) == 0 {
61+
return errors.New("no events to observe")
62+
}
63+
64+
// first find the min of all event's from-blocks
65+
fromBlock = eventTypes[0].FromBlockNumber
66+
for _, event := range eventTypes {
67+
if event.FromBlockNumber < fromBlock {
68+
fromBlock = event.FromBlockNumber
69+
}
70+
}
71+
72+
// then check if our saved progress is already later
73+
progressBlock := uint64(eventSyncProgress.NextBlockNumber)
74+
if progressBlock > fromBlock {
75+
fromBlock = progressBlock
76+
// only use the saved log index when we're using the
77+
// saved block-number
78+
fromLogIndex = uint64(eventSyncProgress.NextLogIndex)
79+
}
6080

6181
log.Info().Uint64("from-block", fromBlock).Uint64("from-log-index", fromLogIndex).
6282
Msg("starting event syncing")

rolling-shutter/contract/deployment/deployment.go

Lines changed: 48 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -118,11 +118,12 @@ func (c *Contracts) initKeypersConfigsList() error {
118118
}
119119
boundContract := bind.NewBoundContract(d.Address, d.ABI, c.Client, c.Client, c.Client)
120120
c.KeypersConfigsListNewConfig = &eventsyncer.EventType{
121-
Contract: boundContract,
122-
Address: d.Address,
123-
ABI: d.ABI,
124-
Name: "NewConfig",
125-
Type: reflect.TypeOf(contract.KeypersConfigsListNewConfig{}),
121+
Contract: boundContract,
122+
Address: d.Address,
123+
FromBlockNumber: d.DeployBlockNumber,
124+
ABI: d.ABI,
125+
Name: "NewConfig",
126+
Type: reflect.TypeOf(contract.KeypersConfigsListNewConfig{}),
126127
}
127128
return nil
128129
}
@@ -139,11 +140,12 @@ func (c *Contracts) initCollatorConfigsList() error {
139140
}
140141
boundContract := bind.NewBoundContract(d.Address, d.ABI, c.Client, c.Client, c.Client)
141142
c.CollatorConfigsListNewConfig = &eventsyncer.EventType{
142-
Contract: boundContract,
143-
Address: d.Address,
144-
ABI: d.ABI,
145-
Name: "NewConfig",
146-
Type: reflect.TypeOf(contract.CollatorConfigsListNewConfig{}),
143+
Contract: boundContract,
144+
FromBlockNumber: d.DeployBlockNumber,
145+
Address: d.Address,
146+
ABI: d.ABI,
147+
Name: "NewConfig",
148+
Type: reflect.TypeOf(contract.CollatorConfigsListNewConfig{}),
147149
}
148150
return nil
149151
}
@@ -160,25 +162,28 @@ func (c *Contracts) initKeypers() error {
160162
}
161163
boundContract := bind.NewBoundContract(d.Address, d.ABI, c.Client, c.Client, c.Client)
162164
c.KeypersAdded = &eventsyncer.EventType{
163-
Contract: boundContract,
164-
Address: d.Address,
165-
ABI: d.ABI,
166-
Name: "Added",
167-
Type: reflect.TypeOf(contract.AddrsSeqAdded{}),
165+
FromBlockNumber: d.DeployBlockNumber,
166+
Contract: boundContract,
167+
Address: d.Address,
168+
ABI: d.ABI,
169+
Name: "Added",
170+
Type: reflect.TypeOf(contract.AddrsSeqAdded{}),
168171
}
169172
c.KeypersAppended = &eventsyncer.EventType{
170-
Contract: boundContract,
171-
Address: d.Address,
172-
ABI: d.ABI,
173-
Name: "Appended",
174-
Type: reflect.TypeOf(contract.AddrsSeqAppended{}),
173+
FromBlockNumber: d.DeployBlockNumber,
174+
Contract: boundContract,
175+
Address: d.Address,
176+
ABI: d.ABI,
177+
Name: "Appended",
178+
Type: reflect.TypeOf(contract.AddrsSeqAppended{}),
175179
}
176180
c.KeypersOwnershipTransferred = &eventsyncer.EventType{
177-
Contract: boundContract,
178-
Address: d.Address,
179-
ABI: d.ABI,
180-
Name: "OwnershipTransferred",
181-
Type: reflect.TypeOf(contract.AddrsSeqOwnershipTransferred{}),
181+
FromBlockNumber: d.DeployBlockNumber,
182+
Contract: boundContract,
183+
Address: d.Address,
184+
ABI: d.ABI,
185+
Name: "OwnershipTransferred",
186+
Type: reflect.TypeOf(contract.AddrsSeqOwnershipTransferred{}),
182187
}
183188
return nil
184189
}
@@ -195,25 +200,28 @@ func (c *Contracts) initCollator() error {
195200
}
196201
boundContract := bind.NewBoundContract(d.Address, d.ABI, c.Client, c.Client, c.Client)
197202
c.CollatorsAdded = &eventsyncer.EventType{
198-
Contract: boundContract,
199-
Address: d.Address,
200-
ABI: d.ABI,
201-
Name: "Added",
202-
Type: reflect.TypeOf(contract.AddrsSeqAdded{}),
203+
FromBlockNumber: d.DeployBlockNumber,
204+
Contract: boundContract,
205+
Address: d.Address,
206+
ABI: d.ABI,
207+
Name: "Added",
208+
Type: reflect.TypeOf(contract.AddrsSeqAdded{}),
203209
}
204210
c.CollatorsAppended = &eventsyncer.EventType{
205-
Contract: boundContract,
206-
Address: d.Address,
207-
ABI: d.ABI,
208-
Name: "Appended",
209-
Type: reflect.TypeOf(contract.AddrsSeqAppended{}),
211+
FromBlockNumber: d.DeployBlockNumber,
212+
Contract: boundContract,
213+
Address: d.Address,
214+
ABI: d.ABI,
215+
Name: "Appended",
216+
Type: reflect.TypeOf(contract.AddrsSeqAppended{}),
210217
}
211218
c.CollatorsOwnershipTransferred = &eventsyncer.EventType{
212-
Contract: boundContract,
213-
Address: d.Address,
214-
ABI: d.ABI,
215-
Name: "OwnershipTransferred",
216-
Type: reflect.TypeOf(contract.AddrsSeqOwnershipTransferred{}),
219+
FromBlockNumber: d.DeployBlockNumber,
220+
Contract: boundContract,
221+
Address: d.Address,
222+
ABI: d.ABI,
223+
Name: "OwnershipTransferred",
224+
Type: reflect.TypeOf(contract.AddrsSeqOwnershipTransferred{}),
217225
}
218226
return nil
219227
}

rolling-shutter/medley/eventsyncer/eventsyncer.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,12 @@ var (
3333

3434
// EventType defines a single event type to filter for.
3535
type EventType struct {
36-
Contract *bind.BoundContract
37-
Address common.Address
38-
ABI abi.ABI
39-
Name string
40-
Type reflect.Type
36+
Contract *bind.BoundContract
37+
Address common.Address
38+
FromBlockNumber uint64
39+
ABI abi.ABI
40+
Name string
41+
Type reflect.Type
4142
}
4243

4344
// logChannelItem is what is put on the (internal) channel of found logs. It can either contain a

0 commit comments

Comments
 (0)