Skip to content

Commit 9967cb7

Browse files
Merge pull request #586 from shutter-network/feat/db-migration
Feat/db migration
2 parents 688397f + f405cc4 commit 9967cb7

File tree

19 files changed

+343
-71
lines changed

19 files changed

+343
-71
lines changed

rolling-shutter/chainobserver/db/collator/definition.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ var files embed.FS
1616
var Definition db.Definition
1717

1818
func init() {
19-
def, err := db.NewSQLCDefinition(files, "sql/", "chainobscollator", 1)
19+
def, err := db.NewSQLCDefinition(files, "sql/", "chainobscollator")
2020
if err != nil {
2121
log.Fatal().Err(err).Msg("failed to initialize DB metadata")
2222
}

rolling-shutter/chainobserver/db/keyper/definition.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ var files embed.FS
1616
var Definition db.Definition
1717

1818
func init() {
19-
def, err := db.NewSQLCDefinition(files, "sql/", "chainobskeyper", 1)
19+
def, err := db.NewSQLCDefinition(files, "sql/", "chainobskeyper")
2020
if err != nil {
2121
log.Fatal().Err(err).Msg("failed to initialize DB metadata")
2222
}

rolling-shutter/chainobserver/db/sync/definition.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ var Definition db.Definition
1616

1717
func init() {
1818
var err error
19-
Definition, err = db.NewSQLCDefinition(files, "sql/", "chainobssync", 1)
19+
Definition, err = db.NewSQLCDefinition(files, "sql/", "chainobssync")
2020
if err != nil {
2121
log.Fatal().Err(err).Msg("failed to initialize DB metadata")
2222
}

rolling-shutter/keyper/database/definition.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ var files embed.FS
2121
var Definition db.Definition
2222

2323
func init() {
24-
sqlcDB, err := db.NewSQLCDefinition(files, "sql/", "keyper", 1)
24+
sqlcDB, err := db.NewSQLCDefinition(files, "sql/", "keyper")
2525
if err != nil {
2626
log.Fatal().Err(err).Msg("failed to initialize DB")
2727
}

rolling-shutter/keyperimpl/gnosis/config.go

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -100,30 +100,32 @@ func (c *Config) GetAddress() common.Address {
100100
}
101101

102102
type GnosisConfig struct {
103-
Node *configuration.EthnodeConfig `shconfig:",required"`
104-
Contracts *GnosisContractsConfig `shconfig:",required"`
105-
EncryptedGasLimit uint64 `shconfig:",required"`
106-
MinGasPerTransaction uint64 `shconfig:",required"`
107-
MaxTxPointerAge uint64 `shconfig:",required"`
108-
SecondsPerSlot uint64 `shconfig:",required"`
109-
SlotsPerEpoch uint64 `shconfig:",required"`
110-
GenesisSlotTimestamp uint64 `shconfig:",required"`
111-
SyncStartBlockNumber uint64 `shconfig:",required"`
112-
SyncMonitorCheckInterval uint64 `shconfig:",required"`
103+
Node *configuration.EthnodeConfig `shconfig:",required"`
104+
Contracts *GnosisContractsConfig `shconfig:",required"`
105+
EncryptedGasLimit uint64 `shconfig:",required"`
106+
MinGasPerTransaction uint64 `shconfig:",required"`
107+
MaxTxPointerAge uint64 `shconfig:",required"`
108+
SecondsPerSlot uint64 `shconfig:",required"`
109+
SlotsPerEpoch uint64 `shconfig:",required"`
110+
GenesisSlotTimestamp uint64 `shconfig:",required"`
111+
SyncStartBlockNumber uint64 `shconfig:",required"`
112+
SyncMonitorCheckInterval uint64 `shconfig:",required"`
113+
EnableAggregateValidatorRegistrationV1 bool `shconfig:",required"`
113114
}
114115

115116
func NewGnosisConfig() *GnosisConfig {
116117
c := &GnosisConfig{
117-
Node: configuration.NewEthnodeConfig(),
118-
Contracts: NewGnosisContractsConfig(),
119-
EncryptedGasLimit: 0,
120-
MinGasPerTransaction: 0,
121-
MaxTxPointerAge: 0,
122-
SecondsPerSlot: 0,
123-
SlotsPerEpoch: 0,
124-
GenesisSlotTimestamp: 0,
125-
SyncStartBlockNumber: 0,
126-
SyncMonitorCheckInterval: 0,
118+
Node: configuration.NewEthnodeConfig(),
119+
Contracts: NewGnosisContractsConfig(),
120+
EncryptedGasLimit: 0,
121+
MinGasPerTransaction: 0,
122+
MaxTxPointerAge: 0,
123+
SecondsPerSlot: 0,
124+
SlotsPerEpoch: 0,
125+
GenesisSlotTimestamp: 0,
126+
SyncStartBlockNumber: 0,
127+
SyncMonitorCheckInterval: 0,
128+
EnableAggregateValidatorRegistrationV1: false,
127129
}
128130
c.Init()
129131
return c
@@ -161,6 +163,7 @@ func (c *GnosisConfig) SetExampleValues() error {
161163
c.GenesisSlotTimestamp = 1665410700
162164
c.SyncStartBlockNumber = 0
163165
c.SyncMonitorCheckInterval = 30
166+
c.EnableAggregateValidatorRegistrationV1 = false
164167
return nil
165168
}
166169

rolling-shutter/keyperimpl/gnosis/database/definition.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ var files embed.FS
1717
var Definition db.Definition
1818

1919
func init() {
20-
def, err := db.NewSQLCDefinition(files, "sql/", "gnosiskeyper", 1)
20+
def, err := db.NewSQLCDefinition(files, "sql/", "gnosiskeyper")
2121
if err != nil {
2222
log.Fatal().Err(err).Msg("failed to initialize DB metadata")
2323
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
-- schema-version: gnosiskeyper-2 --
2+
-- migrations need to start from V2... as file name, as the V1 was initial schema
3+
4+
ALTER TABLE validator_registrations
5+
DROP CONSTRAINT validator_registrations_pkey,
6+
ADD PRIMARY KEY (block_number, tx_index, log_index, validator_index);

rolling-shutter/keyperimpl/gnosis/database/sql/schemas/gnosiskeyper.sql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,5 @@ CREATE TABLE validator_registrations_synced_until(
6666
enforce_one_row bool PRIMARY KEY DEFAULT true,
6767
block_hash bytea NOT NULL,
6868
block_number bigint NOT NULL CHECK (block_number >= 0)
69-
);
69+
);
70+

rolling-shutter/keyperimpl/gnosis/keyper.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -248,12 +248,13 @@ func (kpr *Keyper) initValidatorSyncer(ctx context.Context) error {
248248
return errors.Wrap(err, "failed to instantiate validator registry contract")
249249
}
250250
kpr.validatorSyncer = &ValidatorSyncer{
251-
Contract: validatorRegistryContract,
252-
DBPool: kpr.dbpool,
253-
BeaconAPIClient: kpr.beaconAPIClient,
254-
ExecutionClient: validatorSyncerClient,
255-
ChainID: chainID.Uint64(),
256-
SyncStartBlockNumber: kpr.config.Gnosis.SyncStartBlockNumber,
251+
Contract: validatorRegistryContract,
252+
DBPool: kpr.dbpool,
253+
BeaconAPIClient: kpr.beaconAPIClient,
254+
ExecutionClient: validatorSyncerClient,
255+
ChainID: chainID.Uint64(),
256+
SyncStartBlockNumber: kpr.config.Gnosis.SyncStartBlockNumber,
257+
EnableAggregateValidatorRegistrationV1: kpr.config.Gnosis.EnableAggregateValidatorRegistrationV1,
257258
}
258259

259260
// Perform an initial sync now because it might take some time and doing so during regular

rolling-shutter/keyperimpl/gnosis/validatorsyncer.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,13 @@ const (
2929
)
3030

3131
type ValidatorSyncer struct {
32-
Contract *validatorRegistryBindings.Validatorregistry
33-
DBPool *pgxpool.Pool
34-
BeaconAPIClient *beaconapiclient.Client
35-
ExecutionClient *ethclient.Client
36-
ChainID uint64
37-
SyncStartBlockNumber uint64
32+
Contract *validatorRegistryBindings.Validatorregistry
33+
DBPool *pgxpool.Pool
34+
BeaconAPIClient *beaconapiclient.Client
35+
ExecutionClient *ethclient.Client
36+
ChainID uint64
37+
SyncStartBlockNumber uint64
38+
EnableAggregateValidatorRegistrationV1 bool
3839
}
3940

4041
func (v *ValidatorSyncer) Sync(ctx context.Context, header *types.Header) error {
@@ -226,8 +227,12 @@ func (v *ValidatorSyncer) filterEvents(
226227
evLog.Warn().Msg("ignoring registration message with invalid signature")
227228
continue
228229
}
230+
} else if v.EnableAggregateValidatorRegistrationV1 && msg.Version == validatorregistry.AggregateValidatorRegistrationMessageVersion {
231+
if !validatorregistry.VerifyAggregateSignature(sig, pubKeys, msg) {
232+
evLog.Warn().Msg("ignoring validator registration message with invalid signature")
233+
continue
234+
}
229235
} else {
230-
// TODO: this disables aggregate message
231236
evLog.Warn().Msg("ignoring validator registration message as the version is not compatible")
232237
continue
233238
}

0 commit comments

Comments
 (0)