interface: check genesis hash on connection

Prevents the client from accidentally connecting to a server on a
different network.
I noticed its possible to connect to mainnet servers on a signet
instance causing the recent peers to get populated with mainnet peers
rendering the wallet instance barely usable. Doing this check should
prevent this and similar issues.
This commit is contained in:
f321x
2025-10-27 16:11:30 +01:00
parent 4bce545c26
commit ff2bbf159e
2 changed files with 21 additions and 0 deletions

View File

@@ -964,6 +964,14 @@ class Interface(Logger):
if not self.network.check_interface_against_healthy_spread_of_connected_servers(self):
raise GracefulDisconnect(f'too many connected servers already '
f'in bucket {self.bucket_based_on_ipaddress()}')
try:
features = await session.send_request('server.features')
server_genesis_hash = assert_dict_contains_field(features, field_name='genesis_hash')
except (aiorpcx.jsonrpc.RPCError, RequestCorrupted) as e:
raise GracefulDisconnect(e)
if server_genesis_hash != constants.net.GENESIS:
raise GracefulDisconnect(f'server on different chain: {server_genesis_hash=}. ours: {constants.net.GENESIS}')
self.logger.info(f"connection established. version: {ver}")
try: