-
Notifications
You must be signed in to change notification settings - Fork 201
/
interface.go
103 lines (91 loc) · 3.71 KB
/
interface.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package heartbeat
import (
"time"
"github.com/multiversx/mx-chain-core-go/core"
"github.com/multiversx/mx-chain-core-go/data"
crypto "github.com/multiversx/mx-chain-crypto-go"
"github.com/multiversx/mx-chain-go/common"
"github.com/multiversx/mx-chain-go/sharding/nodesCoordinator"
"github.com/multiversx/mx-chain-go/state"
)
// P2PMessenger defines a subset of the p2p.Messenger interface
type P2PMessenger interface {
Broadcast(topic string, buff []byte)
BroadcastUsingPrivateKey(topic string, buff []byte, pid core.PeerID, skBytes []byte)
ID() core.PeerID
Sign(payload []byte) ([]byte, error)
ConnectedPeersOnTopic(topic string) []core.PeerID
SignUsingPrivateKey(skBytes []byte, payload []byte) ([]byte, error)
IsInterfaceNil() bool
}
// PeerTypeProviderHandler defines what a component which computes the type of a peer should do
type PeerTypeProviderHandler interface {
ComputeForPubKey(pubKey []byte) (common.PeerType, uint32, error)
GetAllPeerTypeInfos() []*state.PeerTypeInfo
IsInterfaceNil() bool
}
// HardforkTrigger defines the behavior of a hardfork trigger
type HardforkTrigger interface {
TriggerReceived(payload []byte, data []byte, pkBytes []byte) (bool, error)
RecordedTriggerMessage() ([]byte, bool)
NotifyTriggerReceivedV2() <-chan struct{}
CreateData() []byte
IsInterfaceNil() bool
}
// CurrentBlockProvider can provide the current block that the node was able to commit
type CurrentBlockProvider interface {
GetCurrentBlockHeader() data.HeaderHandler
SetCurrentBlockHeaderAndRootHash(bh data.HeaderHandler, rootHash []byte) error
IsInterfaceNil() bool
}
// NodeRedundancyHandler defines the interface responsible for the redundancy management of the node
type NodeRedundancyHandler interface {
IsRedundancyNode() bool
IsMainMachineActive() bool
ObserverPrivateKey() crypto.PrivateKey
IsInterfaceNil() bool
}
// NodesCoordinator defines the behavior of a struct able to do validator selection
type NodesCoordinator interface {
GetAllEligibleValidatorsPublicKeys(epoch uint32) (map[uint32][][]byte, error)
GetAllWaitingValidatorsPublicKeys(epoch uint32) (map[uint32][][]byte, error)
GetValidatorWithPublicKey(publicKey []byte) (validator nodesCoordinator.Validator, shardId uint32, err error)
IsInterfaceNil() bool
}
// PeerShardMapper saves the shard for a peer ID
type PeerShardMapper interface {
PutPeerIdShardId(pid core.PeerID, shardID uint32)
IsInterfaceNil() bool
}
// TrieSyncStatisticsProvider is able to provide trie sync statistics
type TrieSyncStatisticsProvider interface {
NumProcessed() int
IsInterfaceNil() bool
}
// ManagedPeersHolder defines the operations of an entity that holds managed identities for a node
type ManagedPeersHolder interface {
AddManagedPeer(privateKeyBytes []byte) error
GetPrivateKey(pkBytes []byte) (crypto.PrivateKey, error)
GetP2PIdentity(pkBytes []byte) ([]byte, core.PeerID, error)
GetMachineID(pkBytes []byte) (string, error)
GetNameAndIdentity(pkBytes []byte) (string, string, error)
IncrementRoundsWithoutReceivedMessages(pkBytes []byte)
ResetRoundsWithoutReceivedMessages(pkBytes []byte, pid core.PeerID)
GetManagedKeysByCurrentNode() map[string]crypto.PrivateKey
GetLoadedKeysByCurrentNode() [][]byte
IsKeyManagedByCurrentNode(pkBytes []byte) bool
IsKeyRegistered(pkBytes []byte) bool
IsPidManagedByCurrentNode(pid core.PeerID) bool
IsKeyValidator(pkBytes []byte) bool
SetValidatorState(pkBytes []byte, state bool)
GetNextPeerAuthenticationTime(pkBytes []byte) (time.Time, error)
SetNextPeerAuthenticationTime(pkBytes []byte, nextTime time.Time)
IsMultiKeyMode() bool
IsInterfaceNil() bool
}
// ShardCoordinator defines the operations of a shard coordinator
type ShardCoordinator interface {
SelfId() uint32
ComputeId(address []byte) uint32
IsInterfaceNil() bool
}