@@ -2,20 +2,17 @@ package gnosisaccessnode
2
2
3
3
import (
4
4
"context"
5
+ "fmt"
5
6
7
+ "github.com/ethereum/go-ethereum/ethclient"
6
8
"github.com/pkg/errors"
7
- "github.com/rs/zerolog/log"
8
9
9
- "github.com/shutter-network/shutter/shlib/shcrypto"
10
-
11
- obskeyperdatabase "github.com/shutter-network/rolling-shutter/rolling-shutter/chainobserver/db/keyper"
12
10
"github.com/shutter-network/rolling-shutter/rolling-shutter/gnosisaccessnode/storage"
13
- chainsync "github.com/shutter-network/rolling-shutter/rolling-shutter/medley/legacychainsync "
14
- syncevent "github.com/shutter-network/rolling-shutter/rolling-shutter/medley/legacychainsync/event "
11
+ "github.com/shutter-network/rolling-shutter/rolling-shutter/gnosisaccessnode/synchandler "
12
+ "github.com/shutter-network/rolling-shutter/rolling-shutter/medley/chainsync "
15
13
"github.com/shutter-network/rolling-shutter/rolling-shutter/medley/metricsserver"
16
14
"github.com/shutter-network/rolling-shutter/rolling-shutter/medley/service"
17
15
"github.com/shutter-network/rolling-shutter/rolling-shutter/p2p"
18
- "github.com/shutter-network/rolling-shutter/rolling-shutter/shdb"
19
16
)
20
17
21
18
type GnosisAccessNode struct {
@@ -40,59 +37,39 @@ func (node *GnosisAccessNode) Start(ctx context.Context, runner service.Runner)
40
37
messageSender .AddMessageHandler (NewDecryptionKeysHandler (node .config , node .storage ))
41
38
services = append (services , messageSender )
42
39
43
- chainSyncClient , err := chainsync .NewClient (
44
- ctx ,
45
- chainsync .WithClientURL (node .config .GnosisNode .EthereumURL ),
46
- chainsync .WithKeyperSetManager (node .config .Contracts .KeyperSetManager ),
47
- chainsync .WithKeyBroadcastContract (node .config .Contracts .KeyBroadcastContract ),
48
- chainsync .WithSyncNewKeyperSet (node .onNewKeyperSet ),
49
- chainsync .WithSyncNewEonKey (node .onNewEonKey ),
40
+ ethClient , err := ethclient .DialContext (ctx , node .config .GnosisNode .EthereumURL )
41
+ if err != nil {
42
+ return err
43
+ }
44
+ keyperSetAdded , err := synchandler .NewKeyperSetAdded (
45
+ ethClient ,
46
+ node .storage ,
47
+ node .config .Contracts .KeyperSetManager ,
50
48
)
51
49
if err != nil {
52
- return errors . Wrap ( err , "failed to initialize chain sync client" )
50
+ return err
53
51
}
54
- services = append (services , chainSyncClient )
55
-
52
+ eonKeyBroadcast , err := synchandler .NewEonKeyBroadcast (
53
+ node .storage ,
54
+ node .config .Contracts .KeyBroadcastContract ,
55
+ )
56
+ if err != nil {
57
+ return err
58
+ }
59
+ chainsyncOpts := []chainsync.Option {
60
+ chainsync .WithClient (ethClient ),
61
+ chainsync .WithContractEventHandler (keyperSetAdded ),
62
+ chainsync .WithContractEventHandler (eonKeyBroadcast ),
63
+ }
64
+ chainsyncer , err := chainsync .New (chainsyncOpts ... )
65
+ if err != nil {
66
+ return fmt .Errorf ("can't instantiate chainsync: %w" , err )
67
+ }
68
+ services = append (services , chainsyncer )
56
69
if node .config .Metrics .Enabled {
57
70
metricsServer := metricsserver .New (node .config .Metrics )
58
71
services = append (services , metricsServer )
59
72
}
60
73
61
74
return runner .StartService (services ... )
62
75
}
63
-
64
- func (node * GnosisAccessNode ) onNewKeyperSet (_ context.Context , keyperSet * syncevent.KeyperSet ) error {
65
- obsKeyperSet := obskeyperdatabase.KeyperSet {
66
- KeyperConfigIndex : int64 (keyperSet .Eon ),
67
- ActivationBlockNumber : int64 (keyperSet .ActivationBlock ),
68
- Keypers : shdb .EncodeAddresses (keyperSet .Members ),
69
- Threshold : int32 (keyperSet .Threshold ),
70
- }
71
- log .Info ().
72
- Uint64 ("keyper-config-index" , keyperSet .Eon ).
73
- Uint64 ("activation-block-number" , keyperSet .ActivationBlock ).
74
- Int ("num-keypers" , len (keyperSet .Members )).
75
- Uint64 ("threshold" , keyperSet .Threshold ).
76
- Msg ("adding keyper set" )
77
- node .storage .AddKeyperSet (keyperSet .Eon , & obsKeyperSet )
78
- return nil
79
- }
80
-
81
- func (node * GnosisAccessNode ) onNewEonKey (_ context.Context , eonKey * syncevent.EonPublicKey ) error {
82
- key := new (shcrypto.EonPublicKey )
83
- err := key .Unmarshal (eonKey .Key )
84
- if err != nil {
85
- log .Error ().
86
- Err (err ).
87
- Hex ("key" , eonKey .Key ).
88
- Int ("keyper-config-index" , int (eonKey .Eon )).
89
- Msg ("received invalid eon key" )
90
- return nil
91
- }
92
- log .Info ().
93
- Int ("keyper-config-index" , int (eonKey .Eon )).
94
- Hex ("key" , eonKey .Key ).
95
- Msg ("adding eon key" )
96
- node .storage .AddEonKey (eonKey .Eon , key )
97
- return nil
98
- }
0 commit comments