@@ -2,30 +2,28 @@ 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"
10
+ "github.com/shutter-network/rolling-shutter/rolling-shutter/gnosisaccessnode/storage"
11
+ "github.com/shutter-network/rolling-shutter/rolling-shutter/gnosisaccessnode/synchandler"
12
12
"github.com/shutter-network/rolling-shutter/rolling-shutter/medley/chainsync"
13
- syncevent "github.com/shutter-network/rolling-shutter/rolling-shutter/medley/chainsync/event"
14
13
"github.com/shutter-network/rolling-shutter/rolling-shutter/medley/metricsserver"
15
14
"github.com/shutter-network/rolling-shutter/rolling-shutter/medley/service"
16
15
"github.com/shutter-network/rolling-shutter/rolling-shutter/p2p"
17
- "github.com/shutter-network/rolling-shutter/rolling-shutter/shdb"
18
16
)
19
17
20
18
type GnosisAccessNode struct {
21
19
config * Config
22
- storage * Storage
20
+ storage * storage. Memory
23
21
}
24
22
25
23
func New (config * Config ) * GnosisAccessNode {
26
24
return & GnosisAccessNode {
27
25
config : config ,
28
- storage : NewStorage (),
26
+ storage : storage . NewMemory (),
29
27
}
30
28
}
31
29
@@ -39,59 +37,39 @@ func (node *GnosisAccessNode) Start(ctx context.Context, runner service.Runner)
39
37
messageSender .AddMessageHandler (NewDecryptionKeysHandler (node .config , node .storage ))
40
38
services = append (services , messageSender )
41
39
42
- chainSyncClient , err := chainsync .NewClient (
43
- ctx ,
44
- chainsync .WithClientURL (node .config .GnosisNode .EthereumURL ),
45
- chainsync .WithKeyperSetManager (node .config .Contracts .KeyperSetManager ),
46
- chainsync .WithKeyBroadcastContract (node .config .Contracts .KeyBroadcastContract ),
47
- chainsync .WithSyncNewKeyperSet (node .onNewKeyperSet ),
48
- 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 ,
49
48
)
50
49
if err != nil {
51
- return errors . Wrap ( err , "failed to initialize chain sync client" )
50
+ return err
52
51
}
53
- services = append (services , chainSyncClient )
54
-
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 )
55
69
if node .config .Metrics .Enabled {
56
70
metricsServer := metricsserver .New (node .config .Metrics )
57
71
services = append (services , metricsServer )
58
72
}
59
73
60
74
return runner .StartService (services ... )
61
75
}
62
-
63
- func (node * GnosisAccessNode ) onNewKeyperSet (_ context.Context , keyperSet * syncevent.KeyperSet ) error {
64
- obsKeyperSet := obskeyperdatabase.KeyperSet {
65
- KeyperConfigIndex : int64 (keyperSet .Eon ),
66
- ActivationBlockNumber : int64 (keyperSet .ActivationBlock ),
67
- Keypers : shdb .EncodeAddresses (keyperSet .Members ),
68
- Threshold : int32 (keyperSet .Threshold ),
69
- }
70
- log .Info ().
71
- Uint64 ("keyper-config-index" , keyperSet .Eon ).
72
- Uint64 ("activation-block-number" , keyperSet .ActivationBlock ).
73
- Int ("num-keypers" , len (keyperSet .Members )).
74
- Uint64 ("threshold" , keyperSet .Threshold ).
75
- Msg ("adding keyper set" )
76
- node .storage .AddKeyperSet (keyperSet .Eon , & obsKeyperSet )
77
- return nil
78
- }
79
-
80
- func (node * GnosisAccessNode ) onNewEonKey (_ context.Context , eonKey * syncevent.EonPublicKey ) error {
81
- key := new (shcrypto.EonPublicKey )
82
- err := key .Unmarshal (eonKey .Key )
83
- if err != nil {
84
- log .Error ().
85
- Err (err ).
86
- Hex ("key" , eonKey .Key ).
87
- Int ("keyper-config-index" , int (eonKey .Eon )).
88
- Msg ("received invalid eon key" )
89
- return nil
90
- }
91
- log .Info ().
92
- Int ("keyper-config-index" , int (eonKey .Eon )).
93
- Hex ("key" , eonKey .Key ).
94
- Msg ("adding eon key" )
95
- node .storage .AddEonKey (eonKey .Eon , key )
96
- return nil
97
- }
0 commit comments