Skip to content

Commit 06b60b7

Browse files
committed
Query eon key publisher address from contracts
Now we don't have to configure the address anymore and therefore keyper set changes are smoother.
1 parent d1f7214 commit 06b60b7

File tree

3 files changed

+40
-17
lines changed

3 files changed

+40
-17
lines changed

rolling-shutter/eonkeypublisher/eonkeypublisher.go

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,29 +30,29 @@ const (
3030

3131
// EonKeyPublisher is a service that publishes eon keys via a eon key publisher contract.
3232
type EonKeyPublisher struct {
33-
dbpool *pgxpool.Pool
34-
client *ethclient.Client
35-
contract *bindings.EonKeyPublish
36-
privateKey *ecdsa.PrivateKey
33+
dbpool *pgxpool.Pool
34+
client *ethclient.Client
35+
keyperSetManager *bindings.KeyperSetManager
36+
privateKey *ecdsa.PrivateKey
3737

3838
keys chan keyper.EonPublicKey
3939
}
4040

4141
func NewEonKeyPublisher(
4242
dbpool *pgxpool.Pool,
4343
client *ethclient.Client,
44-
eonKeyPublishAddress common.Address,
44+
keyperSetManagerAddress common.Address,
4545
privateKey *ecdsa.PrivateKey,
4646
) (*EonKeyPublisher, error) {
47-
contract, err := bindings.NewEonKeyPublish(eonKeyPublishAddress, client)
47+
keyperSetManager, err := bindings.NewKeyperSetManager(keyperSetManagerAddress, client)
4848
if err != nil {
49-
return nil, errors.Wrap(err, "failed to instantiate eon key publisher contract")
49+
return nil, errors.Wrapf(err, "failed to instantiate keyper set manager contract at address %s", keyperSetManagerAddress.Hex())
5050
}
5151
return &EonKeyPublisher{
52-
dbpool: dbpool,
53-
client: client,
54-
contract: contract,
55-
privateKey: privateKey,
52+
dbpool: dbpool,
53+
client: client,
54+
keyperSetManager: keyperSetManager,
55+
privateKey: privateKey,
5656

5757
keys: make(chan keyper.EonPublicKey, eonKeyChannelSize),
5858
}, nil
@@ -155,8 +155,12 @@ func (p *EonKeyPublisher) publish(ctx context.Context, key []byte, keyperSetInde
155155
}
156156

157157
func (p *EonKeyPublisher) tryPublish(ctx context.Context, key []byte, keyperSetIndex uint64, keyperIndex uint64) error {
158+
contract, err := p.getEonKeyPublisherContract(keyperSetIndex)
159+
if err != nil {
160+
return err
161+
}
158162
keyperAddress := ethcrypto.PubkeyToAddress(p.privateKey.PublicKey)
159-
hasAlreadyVoted, err := p.contract.HasKeyperVoted(&bind.CallOpts{}, keyperAddress)
163+
hasAlreadyVoted, err := contract.HasKeyperVoted(&bind.CallOpts{}, keyperAddress)
160164
if err != nil {
161165
return errors.Wrap(err, "failed to query eon key publisher contract if keyper has already voted")
162166
}
@@ -168,7 +172,7 @@ func (p *EonKeyPublisher) tryPublish(ctx context.Context, key []byte, keyperSetI
168172
Msg("not publishing eon key as keyper has already voted")
169173
return nil
170174
}
171-
isAlreadyConfirmed, err := p.contract.EonKeyConfirmed(&bind.CallOpts{}, key)
175+
isAlreadyConfirmed, err := contract.EonKeyConfirmed(&bind.CallOpts{}, key)
172176
if err != nil {
173177
return errors.Wrap(err, "failed to query eon key publisher contract if eon key is confirmed")
174178
}
@@ -188,7 +192,7 @@ func (p *EonKeyPublisher) tryPublish(ctx context.Context, key []byte, keyperSetI
188192
if err != nil {
189193
return errors.Wrap(err, "failed to construct tx opts")
190194
}
191-
tx, err := p.contract.PublishEonKey(opts, key, keyperIndex)
195+
tx, err := contract.PublishEonKey(opts, key, keyperIndex)
192196
if err != nil {
193197
return errors.Wrap(err, "failed to send publish eon key tx")
194198
}
@@ -216,3 +220,24 @@ func (p *EonKeyPublisher) tryPublish(ctx context.Context, key []byte, keyperSetI
216220
Msg("successfully published eon key")
217221
return nil
218222
}
223+
224+
func (p *EonKeyPublisher) getEonKeyPublisherContract(keyperSetIndex uint64) (*bindings.EonKeyPublish, error) {
225+
opts := &bind.CallOpts{}
226+
keyperSetAddress, err := p.keyperSetManager.GetKeyperSetAddress(opts, keyperSetIndex)
227+
if err != nil {
228+
return nil, errors.Wrapf(err, "failed to get keyper set address from manager for index %d", keyperSetIndex)
229+
}
230+
keyperSet, err := bindings.NewKeyperSet(keyperSetAddress, p.client)
231+
if err != nil {
232+
return nil, errors.Wrapf(err, "failed to instantiate keyper set contract at address %s", keyperSetAddress.Hex())
233+
}
234+
eonKeyPublisherAddress, err := keyperSet.GetPublisher(opts)
235+
if err != nil {
236+
return nil, errors.Wrapf(err, "failed to get eon key publisher contract from keyper set at address %s", keyperSetAddress.Hex())
237+
}
238+
eonKeyPublisher, err := bindings.NewEonKeyPublish(eonKeyPublisherAddress, p.client)
239+
if err != nil {
240+
return nil, errors.Wrapf(err, "failed to instantiate eon key publisher contract at address %s", eonKeyPublisherAddress.Hex())
241+
}
242+
return eonKeyPublisher, nil
243+
}

rolling-shutter/keyperimpl/gnosis/config.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,6 @@ func (c *GnosisConfig) TOMLWriteHeader(_ io.Writer) (int, error) {
166166
type GnosisContractsConfig struct {
167167
KeyperSetManager common.Address `shconfig:",required"`
168168
KeyBroadcastContract common.Address `shconfig:",required"`
169-
EonKeyPublish common.Address `shconfig:",required"`
170169
Sequencer common.Address `shconfig:",required"`
171170
ValidatorRegistry common.Address `shconfig:",required"`
172171
}
@@ -175,7 +174,6 @@ func NewGnosisContractsConfig() *GnosisContractsConfig {
175174
return &GnosisContractsConfig{
176175
KeyperSetManager: common.Address{},
177176
KeyBroadcastContract: common.Address{},
178-
EonKeyPublish: common.Address{},
179177
Sequencer: common.Address{},
180178
ValidatorRegistry: common.Address{},
181179
}

rolling-shutter/keyperimpl/gnosis/keyper.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ func (kpr *Keyper) Start(ctx context.Context, runner service.Runner) error {
128128
kpr.eonKeyPublisher, err = eonkeypublisher.NewEonKeyPublisher(
129129
kpr.dbpool,
130130
eonKeyPublisherClient,
131-
kpr.config.Gnosis.Contracts.EonKeyPublish,
131+
kpr.config.Gnosis.Contracts.KeyperSetManager,
132132
kpr.config.Gnosis.Node.PrivateKey.Key,
133133
)
134134
if err != nil {

0 commit comments

Comments
 (0)