Skip to content

Commit 8da62a1

Browse files
authored
Merge pull request #1115 from HathorNetwork/refactor/p2p-peer-types
refactor(p2p): add PublicPeer and PrivatePeer to simplify Peer
2 parents 335d050 + 646878b commit 8da62a1

34 files changed

+850
-567
lines changed

hathor/builder/builder.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
from hathor.manager import HathorManager
3636
from hathor.mining.cpu_mining_service import CpuMiningService
3737
from hathor.p2p.manager import ConnectionsManager
38-
from hathor.p2p.peer import Peer
38+
from hathor.p2p.peer import PrivatePeer
3939
from hathor.pubsub import PubSubManager
4040
from hathor.reactor import ReactorProtocol as Reactor
4141
from hathor.storage import RocksDBStorage
@@ -69,6 +69,7 @@ def add_factories(
6969
sync_v1_support: 'SyncSupportLevel',
7070
sync_v2_support: 'SyncSupportLevel',
7171
vertex_parser: VertexParser,
72+
vertex_handler: VertexHandler,
7273
) -> None:
7374
"""Adds the sync factory to the manager according to the support level."""
7475
from hathor.p2p.sync_v1.factory import SyncV11Factory
@@ -82,9 +83,13 @@ def add_factories(
8283
p2p_manager.enable_sync_version(SyncVersion.V1_1)
8384
# sync-v2 support:
8485
if sync_v2_support > cls.UNAVAILABLE:
85-
p2p_manager.add_sync_factory(
86-
SyncVersion.V2, SyncV2Factory(settings, p2p_manager, vertex_parser=vertex_parser)
86+
sync_v2_factory = SyncV2Factory(
87+
settings,
88+
p2p_manager,
89+
vertex_parser=vertex_parser,
90+
vertex_handler=vertex_handler,
8791
)
92+
p2p_manager.add_sync_factory(SyncVersion.V2, sync_v2_factory)
8893
if sync_v2_support is cls.ENABLED:
8994
p2p_manager.enable_sync_version(SyncVersion.V2)
9095

@@ -96,7 +101,7 @@ class StorageType(Enum):
96101

97102
class BuildArtifacts(NamedTuple):
98103
"""Artifacts created by a builder."""
99-
peer: Peer
104+
peer: PrivatePeer
100105
settings: HathorSettingsType
101106
rng: Random
102107
reactor: Reactor
@@ -137,7 +142,7 @@ def __init__(self) -> None:
137142
self._checkpoints: Optional[list[Checkpoint]] = None
138143
self._capabilities: Optional[list[str]] = None
139144

140-
self._peer: Optional[Peer] = None
145+
self._peer: Optional[PrivatePeer] = None
141146
self._network: Optional[str] = None
142147
self._cmdline: str = ''
143148

@@ -337,7 +342,7 @@ def set_capabilities(self, capabilities: list[str]) -> 'Builder':
337342
self._capabilities = capabilities
338343
return self
339344

340-
def set_peer(self, peer: Peer) -> 'Builder':
345+
def set_peer(self, peer: PrivatePeer) -> 'Builder':
341346
self.check_if_can_modify()
342347
self._peer = peer
343348
return self
@@ -361,7 +366,7 @@ def _get_soft_voided_tx_ids(self) -> set[bytes]:
361366

362367
return set(settings.SOFT_VOIDED_TX_IDS)
363368

364-
def _get_peer(self) -> Peer:
369+
def _get_peer(self) -> PrivatePeer:
365370
if self._peer is not None:
366371
return self._peer
367372
raise ValueError('peer not set')
@@ -436,6 +441,7 @@ def _get_or_create_p2p_manager(self) -> ConnectionsManager:
436441
self._sync_v1_support,
437442
self._sync_v2_support,
438443
self._get_or_create_vertex_parser(),
444+
self._get_or_create_vertex_handler(),
439445
)
440446
return self._p2p_manager
441447

hathor/builder/cli_builder.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
from hathor.mining.cpu_mining_service import CpuMiningService
3737
from hathor.p2p.entrypoint import Entrypoint
3838
from hathor.p2p.manager import ConnectionsManager
39-
from hathor.p2p.peer import Peer
39+
from hathor.p2p.peer import PrivatePeer
4040
from hathor.p2p.utils import discover_hostname, get_genesis_short_hash
4141
from hathor.pubsub import PubSubManager
4242
from hathor.reactor import ReactorProtocol as Reactor
@@ -100,7 +100,11 @@ def create_manager(self, reactor: Reactor) -> HathorManager:
100100
self.log = logger.new()
101101
self.reactor = reactor
102102

103-
peer = Peer.create_from_json_path(self._args.peer) if self._args.peer else Peer()
103+
peer: PrivatePeer
104+
if self._args.peer:
105+
peer = PrivatePeer.create_from_json_path(self._args.peer)
106+
else:
107+
peer = PrivatePeer.auto_generated()
104108
python = f'{platform.python_version()}-{platform.python_implementation()}'
105109

106110
self.log.info(
@@ -325,7 +329,6 @@ def create_manager(self, reactor: Reactor) -> HathorManager:
325329
whitelist_only=False,
326330
rng=Random(),
327331
)
328-
SyncSupportLevel.add_factories(settings, p2p_manager, sync_v1_support, sync_v2_support, vertex_parser)
329332

330333
vertex_handler = VertexHandler(
331334
reactor=reactor,
@@ -340,6 +343,15 @@ def create_manager(self, reactor: Reactor) -> HathorManager:
340343
log_vertex_bytes=self._args.log_vertex_bytes,
341344
)
342345

346+
SyncSupportLevel.add_factories(
347+
settings,
348+
p2p_manager,
349+
sync_v1_support,
350+
sync_v2_support,
351+
vertex_parser,
352+
vertex_handler,
353+
)
354+
343355
from hathor.consensus.poa import PoaBlockProducer, PoaSignerFile
344356
poa_block_producer: PoaBlockProducer | None = None
345357
if settings.CONSENSUS_ALGORITHM.is_poa():

hathor/cli/peer_id.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020

2121

2222
def main() -> None:
23-
from hathor.p2p.peer import Peer
23+
from hathor.p2p.peer import PrivatePeer
2424

25-
peer = Peer()
26-
data = peer.to_json(include_private_key=True)
25+
peer = PrivatePeer.auto_generated()
26+
data = peer.to_json_private()
2727
txt = json.dumps(data, indent=4)
2828
print(txt)

hathor/manager.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
from hathor.mining import BlockTemplate, BlockTemplates
4747
from hathor.mining.cpu_mining_service import CpuMiningService
4848
from hathor.p2p.manager import ConnectionsManager
49-
from hathor.p2p.peer import Peer
49+
from hathor.p2p.peer import PrivatePeer
5050
from hathor.p2p.peer_id import PeerId
5151
from hathor.profiler import get_cpu_profiler
5252
from hathor.pubsub import HathorEvents, PubSubManager
@@ -60,7 +60,7 @@
6060
from hathor.transaction.storage.tx_allow_scope import TxAllowScope
6161
from hathor.transaction.vertex_parser import VertexParser
6262
from hathor.types import Address, VertexId
63-
from hathor.util import EnvironmentInfo, LogDuration, Random, calculate_min_significant_weight, not_none
63+
from hathor.util import EnvironmentInfo, LogDuration, Random, calculate_min_significant_weight
6464
from hathor.verification.verification_service import VerificationService
6565
from hathor.vertex_handler import VertexHandler
6666
from hathor.wallet import BaseWallet
@@ -97,7 +97,7 @@ def __init__(
9797
pubsub: PubSubManager,
9898
consensus_algorithm: ConsensusAlgorithm,
9999
daa: DifficultyAdjustmentAlgorithm,
100-
peer: Peer,
100+
peer: PrivatePeer,
101101
tx_storage: TransactionStorage,
102102
p2p_manager: ConnectionsManager,
103103
event_manager: EventManager,
@@ -298,7 +298,7 @@ def start(self) -> None:
298298
sys.exit(-1)
299299

300300
if self._enable_event_queue:
301-
self._event_manager.start(str(not_none(self.my_peer.id)))
301+
self._event_manager.start(str(self.my_peer.id))
302302

303303
self.state = self.NodeState.INITIALIZING
304304
self.pubsub.publish(HathorEvents.MANAGER_ON_START)

hathor/metrics.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ def collect_peer_connection_metrics(self) -> None:
246246
self.peer_connection_metrics.clear()
247247

248248
for connection in self.connections.connections:
249-
if not connection.peer or not connection.peer.id:
249+
if not connection._peer:
250250
# A connection without peer will not be able to communicate
251251
# So we can just discard it for the sake of the metrics
252252
continue

hathor/p2p/factory.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
from hathor.conf.settings import HathorSettings
2121
from hathor.p2p.manager import ConnectionsManager
22-
from hathor.p2p.peer import Peer
22+
from hathor.p2p.peer import PrivatePeer
2323
from hathor.p2p.protocol import HathorLineReceiver
2424

2525
if TYPE_CHECKING:
@@ -39,7 +39,7 @@ class HathorServerFactory(protocol.ServerFactory):
3939
def __init__(
4040
self,
4141
network: str,
42-
my_peer: Peer,
42+
my_peer: PrivatePeer,
4343
p2p_manager: ConnectionsManager,
4444
*,
4545
settings: HathorSettings,
@@ -75,7 +75,7 @@ class HathorClientFactory(protocol.ClientFactory):
7575
def __init__(
7676
self,
7777
network: str,
78-
my_peer: Peer,
78+
my_peer: PrivatePeer,
7979
p2p_manager: ConnectionsManager,
8080
*,
8181
settings: HathorSettings,

0 commit comments

Comments
 (0)