Skip to content

Commit 1b600b4

Browse files
committed
lnmsg/lnonion: follow-up prev: "hide" MappingProxyType usage
1 parent 936e7fd commit 1b600b4

File tree

7 files changed

+52
-57
lines changed

7 files changed

+52
-57
lines changed

electrum/lnmsg.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import os
22
import csv
33
import io
4-
from typing import Callable, Tuple, Any, Dict, List, Sequence, Union, Optional
4+
from typing import Callable, Tuple, Any, Dict, List, Sequence, Union, Optional, Mapping
55
from types import MappingProxyType
66
from collections import OrderedDict
77

@@ -290,7 +290,7 @@ def _write_tlv_record(*, fd: io.BytesIO, tlv_type: int, tlv_val: bytes) -> None:
290290
_write_primitive_field(fd=fd, field_type="byte", count=tlv_len, value=tlv_val)
291291

292292

293-
def _resolve_field_count(field_count_str: str, *, vars_dict: Union[dict, MappingProxyType], allow_any=False) -> Union[int, str]:
293+
def _resolve_field_count(field_count_str: str, *, vars_dict: Mapping, allow_any=False) -> Union[int, str]:
294294
"""Returns an evaluated field count, typically an int.
295295
If allow_any is True, the return value can be a str with value=="...".
296296
"""
@@ -404,12 +404,7 @@ def write_field(
404404
fd: io.BytesIO,
405405
field_type: str,
406406
count: Union[int, str],
407-
value: Union[
408-
List[Union[MappingProxyType[str, Any], Dict[str, Any]]],
409-
Tuple[Union[MappingProxyType[str, Any], Dict[str, Any]], ...],
410-
Dict[str, Any],
411-
MappingProxyType[str, Any],
412-
],
407+
value: Union[Sequence[Mapping[str, Any]], Mapping[str, Any]],
413408
) -> None:
414409
assert fd
415410

electrum/lnonion.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
import io
2727
import hashlib
28-
from typing import Sequence, List, Tuple, NamedTuple, TYPE_CHECKING, Dict, Any, Optional, Union
28+
from typing import Sequence, List, Tuple, NamedTuple, TYPE_CHECKING, Dict, Any, Optional, Union, Mapping
2929
from enum import IntEnum
3030
from dataclasses import dataclass, field, replace
3131
from types import MappingProxyType
@@ -57,10 +57,10 @@ class InvalidPayloadSize(Exception): pass
5757

5858
@dataclass(frozen=True, kw_only=True)
5959
class OnionHopsDataSingle:
60-
payload: MappingProxyType = field(default_factory=lambda: MappingProxyType({}))
60+
payload: Mapping = field(default_factory=lambda: MappingProxyType({}))
6161
hmac: Optional[bytes] = None
6262
tlv_stream_name: str = 'payload'
63-
blind_fields: MappingProxyType = field(default_factory=lambda: MappingProxyType({}))
63+
blind_fields: Mapping = field(default_factory=lambda: MappingProxyType({}))
6464
_raw_bytes_payload: Optional[bytes] = None
6565

6666
def __post_init__(self):
@@ -111,7 +111,7 @@ def from_fd(cls, fd: io.BytesIO, *, tlv_stream_name: str = 'payload') -> 'OnionH
111111
tlv_stream_name=tlv_stream_name)
112112
ret = OnionHopsDataSingle(
113113
tlv_stream_name=tlv_stream_name,
114-
payload=MappingProxyType(payload),
114+
payload=payload,
115115
hmac=fd.read(PER_HOP_HMAC_SIZE)
116116
)
117117
return ret
@@ -303,7 +303,7 @@ def calc_hops_data_for_payment(
303303
"total_msat": total_msat,
304304
"amount_msat": amt
305305
}
306-
hops_data = [OnionHopsDataSingle(payload=MappingProxyType(hop_payload))]
306+
hops_data = [OnionHopsDataSingle(payload=hop_payload)]
307307
# payloads, backwards from last hop (but excluding the first edge):
308308
for edge_index in range(len(route) - 1, 0, -1):
309309
route_edge = route[edge_index]
@@ -313,7 +313,7 @@ def calc_hops_data_for_payment(
313313
"short_channel_id": {"short_channel_id": route_edge.short_channel_id},
314314
}
315315
hops_data.append(
316-
OnionHopsDataSingle(payload=MappingProxyType(hop_payload)))
316+
OnionHopsDataSingle(payload=hop_payload))
317317
amt += route_edge.fee_for_edge(amt)
318318
cltv_abs += route_edge.cltv_delta
319319
hops_data.reverse()

electrum/lnworker.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3731,7 +3731,7 @@ def create_onion_for_route(
37313731
"hops_data": trampoline_onion.hops_data,
37323732
"hmac": trampoline_onion.hmac
37333733
}
3734-
hops_data[-1] = dataclasses.replace(hops_data[-1], payload=MappingProxyType(trampoline_payload))
3734+
hops_data[-1] = dataclasses.replace(hops_data[-1], payload=trampoline_payload)
37353735
if t_hops_data := trampoline_onion._debug_hops_data: # None if trampoline-forwarding
37363736
t_route = trampoline_onion._debug_route
37373737
assert t_route is not None

electrum/onion_message.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ def encrypt_onionmsg_tlv_hops_data(
152152
encrypted_recipient_data = encrypt_onionmsg_data_tlv(shared_secret=hop_shared_secrets[i], **hops_data[i].blind_fields)
153153
new_payload = dict(hops_data[i].payload)
154154
new_payload['encrypted_recipient_data'] = {'encrypted_recipient_data': encrypted_recipient_data}
155-
hops_data[i] = dataclasses.replace(hops_data[i], payload=MappingProxyType(new_payload))
155+
hops_data[i] = dataclasses.replace(hops_data[i], payload=new_payload)
156156

157157

158158
def create_onion_message_route_to(lnwallet: 'LNWallet', node_id: bytes) -> Sequence[PathEdge]:
@@ -284,17 +284,17 @@ def send_onion_message_to(
284284
hops_data = [
285285
OnionHopsDataSingle(
286286
tlv_stream_name='onionmsg_tlv',
287-
blind_fields=MappingProxyType({'next_node_id': {'node_id': x.end_node}})
287+
blind_fields={'next_node_id': {'node_id': x.end_node}},
288288
) for x in path[:-1]
289289
]
290290

291291
# final hop pre-ip, add next_path_key_override
292292
final_hop_pre_ip = OnionHopsDataSingle(
293293
tlv_stream_name='onionmsg_tlv',
294-
blind_fields=MappingProxyType({
294+
blind_fields={
295295
'next_node_id': {'node_id': introduction_point},
296296
'next_path_key_override': {'path_key': blinded_path['first_path_key']},
297-
})
297+
},
298298
)
299299
hops_data.append(final_hop_pre_ip)
300300

@@ -307,7 +307,7 @@ def send_onion_message_to(
307307
payload['encrypted_recipient_data'] = {
308308
'encrypted_recipient_data': encrypted_recipient_data
309309
}
310-
hops_data[i] = dataclasses.replace(hops_data[i], payload=MappingProxyType(payload))
310+
hops_data[i] = dataclasses.replace(hops_data[i], payload=payload)
311311

312312
path_key = ecc.ECPrivkey(session_key).get_public_key_bytes()
313313

@@ -320,7 +320,7 @@ def send_onion_message_to(
320320
}
321321
if i == len(remaining_blinded_path) - 1: # final hop
322322
payload.update(destination_payload)
323-
hop = OnionHopsDataSingle(tlv_stream_name='onionmsg_tlv', payload=MappingProxyType(payload))
323+
hop = OnionHopsDataSingle(tlv_stream_name='onionmsg_tlv', payload=payload)
324324
hops_data.append(hop)
325325

326326
payment_path_pubkeys = blinded_node_ids + blinded_path_blinded_ids
@@ -351,13 +351,13 @@ def send_onion_message_to(
351351
hops_data = [
352352
OnionHopsDataSingle(
353353
tlv_stream_name='onionmsg_tlv',
354-
blind_fields=MappingProxyType({'next_node_id': {'node_id': x.end_node}})
354+
blind_fields={'next_node_id': {'node_id': x.end_node}},
355355
) for x in path[1:]
356356
]
357357

358358
final_hop = OnionHopsDataSingle(
359359
tlv_stream_name='onionmsg_tlv',
360-
payload=MappingProxyType(destination_payload),
360+
payload=destination_payload,
361361
)
362362

363363
hops_data.append(final_hop)

electrum/trampoline.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ def create_trampoline_onion(
324324
"payment_secret": payment_secret,
325325
"total_msat": total_msat
326326
}
327-
hops_data[i] = dataclasses.replace(hops_data[i], payload=MappingProxyType(payload))
327+
hops_data[i] = dataclasses.replace(hops_data[i], payload=payload)
328328

329329
if (index := routing_info_payload_index) is not None:
330330
# fill the remaining payload space with available routing hints (r_tags)
@@ -344,7 +344,7 @@ def create_trampoline_onion(
344344
remaining_payload_space -= r_tag_size
345345
# add the chosen r_tags to the payload
346346
payload["invoice_routing_info"] = {"invoice_routing_info": b''.join(routing_info_to_use)}
347-
hops_data[index] = dataclasses.replace(hops_data[index], payload=MappingProxyType(payload))
347+
hops_data[index] = dataclasses.replace(hops_data[index], payload=payload)
348348
_logger.debug(f"Using {len(routing_info_to_use)} of {len(invoice_routing_info)} r_tags")
349349

350350
trampoline_session_key = os.urandom(32)

tests/test_lnrouter.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -430,26 +430,26 @@ def test_process_onion_packet(self):
430430
session_key = bfh('4141414141414141414141414141414141414141414141414141414141414141')
431431
associated_data = bfh('4242424242424242424242424242424242424242424242424242424242424242')
432432
hops_data = [
433-
OnionHopsDataSingle(payload=MappingProxyType({
433+
OnionHopsDataSingle(payload={
434434
'amt_to_forward': {'amt_to_forward': 15000},
435435
'outgoing_cltv_value': {'outgoing_cltv_value': 1500},
436-
'short_channel_id': {'short_channel_id': bfh('0000000000000001')}})),
437-
OnionHopsDataSingle(payload=MappingProxyType({
436+
'short_channel_id': {'short_channel_id': bfh('0000000000000001')}}),
437+
OnionHopsDataSingle(payload={
438438
'amt_to_forward': {'amt_to_forward': 14000},
439439
'outgoing_cltv_value': {'outgoing_cltv_value': 1400},
440-
'short_channel_id': {'short_channel_id': bfh('0000000000000002')}})),
441-
OnionHopsDataSingle(payload=MappingProxyType({
440+
'short_channel_id': {'short_channel_id': bfh('0000000000000002')}}),
441+
OnionHopsDataSingle(payload={
442442
'amt_to_forward': {'amt_to_forward': 12500},
443443
'outgoing_cltv_value': {'outgoing_cltv_value': 1250},
444-
'short_channel_id': {'short_channel_id': bfh('0000000000000003')}})),
445-
OnionHopsDataSingle(payload=MappingProxyType({
444+
'short_channel_id': {'short_channel_id': bfh('0000000000000003')}}),
445+
OnionHopsDataSingle(payload={
446446
'amt_to_forward': {'amt_to_forward': 10000},
447447
'outgoing_cltv_value': {'outgoing_cltv_value': 1000},
448-
'short_channel_id': {'short_channel_id': bfh('0000000000000004')}})),
449-
OnionHopsDataSingle(payload=MappingProxyType({
448+
'short_channel_id': {'short_channel_id': bfh('0000000000000004')}}),
449+
OnionHopsDataSingle(payload={
450450
'amt_to_forward': {'amt_to_forward': 10000},
451451
'outgoing_cltv_value': {'outgoing_cltv_value': 1000},
452-
'payment_data': {'payment_secret': bfh('24a33562c54507a9334e79f0dc4f17d407e6d7c61f0e2f3d0d38599502f61704'), 'total_msat': 10000}})),
452+
'payment_data': {'payment_secret': bfh('24a33562c54507a9334e79f0dc4f17d407e6d7c61f0e2f3d0d38599502f61704'), 'total_msat': 10000}}),
453453
]
454454
packet = new_onion_packet(payment_path_pubkeys, session_key, hops_data, associated_data=associated_data)
455455
self.assertEqual(bfh('0002eec7245d6b7d2ccb30380bfbe2a3648cd7a942653f5aa340edcea1f283686619f7f3416a5aa36dc7eeb3ec6d421e9615471ab858ba970cd3cceb768b44e692be2f390c0b7fe70122abae84d7801db070dfb1638cd8d263072206dbed0234f6505e21e282abd8587124c572aad8de04610a136d6c71a7648c0ef66f1b3655d8a9eea1f92349132c93befbd6c37dbfc55615814ae09e4cbef721c01b487007811bbbfdc1fc7bd869aeb70eb08b4140ff5f501394b3653ada2a3b36a263535ea421d26818afb278df46abcec093305b715cac22b0b03645f8f4797cf2987b1bf4bfdd9ed8648ed42ed1a831fc36ccd45416a132580281ddac4e7470e4d2afd675baad9282ec6335403a73e1391427e330996c834db93848b4ae29dd975f678b2f5155ad6865ca23190725d4b7238fb44f0e3762dd59091b45c97d45df8164a15d9ca0329ec76f957b0a0e49ae372154620708df5c0fa991f0dd12b6bff1ebaf9e2376bb64bc24713f7c57da569bcd9c43a50c088416564b786a87d1f40936a051a3dbfe023bd867a5e66148b61cdd24a79f8c18682150e55aa6969ce9becf51f7c69e72deafcd0659f6be4f78463eaef8716e56615c77b3fbea8190806359909dcbec13c1592523b3d2985ec3e83d42cb7286a66a22f58704ddf6979ceb6883ab4ad8ac99d30251035189ffd514e03ce1576844513d66965d4adfc2523f4eee0dede229ab96303e31348c72bc0c8c816c666a904e5ccbabadf5a919720438f4a14dbd4a802f8d4b942f0ca8572f59644c9ac1912c8c8efefc4afa7f19e27411d46b7541c55985e28ce5cd7620b335fea51de55fa00ef977e8522181ad19e5e04f93bcfc83a36edd7e96fe48e846f2e54fe7a7090fe8e46ba72123e1cdee0667777c38c4930e50401074d8ab31a9717457fcefaa46323003af553bee2b49ea7f907eb2ff3301463e64a8c53975c853bbdd2956b9001b5ce1562264963fce84201daaf752de6df7ca31291226969c9851d1fc4ea88ca67d38c38587c2cdd8bc4d3f7bdf705497a1e054246f684554b3b8dfac43194f1eadec7f83b711e663b5645bde6d7f8cefb59758303599fed25c3b4d2e4499d439c915910dd283b3e7118320f1c6e7385009fbcb9ae79bab72a85e644182b4dafc0a173241f2ae68ae6a504f17f102da1e91de4548c7f5bc1c107354519077a4e83407f0d6a8f0975b4ac0c2c7b30637a998dda27b56b56245371296b816876b859677bcf3473a07e0f300e788fdd60c51b1626b46050b182457c6d716994847aaef667ca45b2cede550c92d336ff29ce6effd933b875f81381cda6e59e9727e728a58c0b3e74035beeeb639ab7463744322bf40138b81895e9a8e8850c9513782dc7a79f04380c216cb177951d8940d576486b887a232fcd382adcbd639e70af0c1a08bcf1405496606fce4645aef10d769dc0c010a8a433d8cd24d5943843a89cdbc8d16531db027b312ab2c03a7f1fdb7f2bcb128639c49e86705c948137fd42d0080fda4be4e9ee812057c7974acbf0162730d3b647b355ac1a5adbb2993832eba443b7c9b5a0ae1fc00a6c0c2b0b65b9019690565739d6439bf602066a3a9bd9c67b83606de51792d25ae517cbbdf6e1827fa0e8b2b5c6023cbb1e9f0e10b786dc6fa154e282fd9c90b8d46ca685d0f4434760035073c92d131564b6845ef57457488add4f709073bbb41f5f31f8226904875a9fd9e1b7a2901e71426104d7a298a05af0d4ab549fbd69c539ebe64949a9b6088f16e2e4bc827c305cb8d64536b8364dc3d5f7519c3b431faa38b47a958cf0c6dcabf205280693abf747c262f44cd6ffa11b32fc38d4f9c3631d554d8b57389f1390ac65c06357843ee6d9f289bb054ef25de45c5149c090fe6ddcd4095696dcc9a5cfc09c8bdfd5b83a153'),

tests/test_onion_message.py

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -74,34 +74,34 @@ def test_path_pubkeys_blinded_path_appended(self):
7474
hops_data = [
7575
OnionHopsDataSingle(
7676
tlv_stream_name='onionmsg_tlv',
77-
blind_fields=MappingProxyType({
77+
blind_fields={
7878
'next_node_id': {'node_id': bfh(ALICE_TLVS['next_node_id'])},
7979
'next_path_key_override': {'path_key': bfh(ALICE_TLVS['next_path_key_override'])},
80-
}
81-
)),
80+
},
81+
),
8282
OnionHopsDataSingle(
8383
tlv_stream_name='onionmsg_tlv',
84-
blind_fields=MappingProxyType({
84+
blind_fields={
8585
'next_node_id': {'node_id': bfh(BOB_TLVS['next_node_id'])},
8686
'unknown_tag_561': {'data': bfh(BOB_TLVS['unknown_tag_561'])},
87-
}
88-
)),
87+
},
88+
),
8989
OnionHopsDataSingle(
9090
tlv_stream_name='onionmsg_tlv',
91-
blind_fields=MappingProxyType({
91+
blind_fields={
9292
'padding': {'padding': bfh(CAROL_TLVS['padding'])},
9393
'next_node_id': {'node_id': bfh(CAROL_TLVS['next_node_id'])},
94-
}
95-
)),
94+
},
95+
),
9696
OnionHopsDataSingle(
9797
tlv_stream_name='onionmsg_tlv',
98-
payload=MappingProxyType({'message': {'text': bfh(test_vectors['onionmessage']['unknown_tag_1'])}}),
99-
blind_fields=MappingProxyType({
98+
payload={'message': {'text': bfh(test_vectors['onionmessage']['unknown_tag_1'])}},
99+
blind_fields={
100100
'padding': {'padding': bfh(DAVE_TLVS['padding'])},
101101
'path_id': {'data': bfh(DAVE_TLVS['path_id'])},
102102
'unknown_tag_65535': {'data': bfh(DAVE_TLVS['unknown_tag_65535'])},
103-
}
104-
))
103+
},
104+
)
105105
]
106106

107107
encrypt_onionmsg_tlv_hops_data(hops_data, hop_shared_secrets)
@@ -119,11 +119,11 @@ def hops_data_for_message(message):
119119
return [
120120
OnionHopsDataSingle(
121121
tlv_stream_name='onionmsg_tlv',
122-
payload=MappingProxyType({'message': {'text': message.encode('utf-8')}}),
123-
blind_fields=MappingProxyType({
122+
payload={'message': {'text': message.encode('utf-8')}},
123+
blind_fields={
124124
'path_id': {'data': bfh('deadbeefbadc0ffeedeadbeefbadc0ffeedeadbeefbadc0ffeedeadbeefbadc0')},
125-
}
126-
))
125+
},
126+
),
127127
]
128128
hops_data = hops_data_for_message('short_message') # fit in HOPS_DATA_SIZE
129129
encrypt_onionmsg_tlv_hops_data(hops_data, hop_shared_secrets)
@@ -234,18 +234,18 @@ def test_create_onionmessage_to_blinded_path_via_alice(self):
234234
hops_data = [
235235
OnionHopsDataSingle(
236236
tlv_stream_name='onionmsg_tlv',
237-
blind_fields=MappingProxyType({
237+
blind_fields={
238238
'next_node_id': {'node_id': BOB_PUBKEY},
239239
'next_path_key_override': {'path_key': bfh(ALICE_TLVS['next_path_key_override'])},
240-
}
241-
)),
240+
},
241+
),
242242
]
243243
# encrypt encrypted_data_tlv here
244244
for i in range(len(hops_data)):
245245
encrypted_recipient_data = encrypt_onionmsg_data_tlv(shared_secret=hop_shared_secrets[i], **hops_data[i].blind_fields)
246246
new_payload = dict(hops_data[i].payload)
247247
new_payload['encrypted_recipient_data'] = {'encrypted_recipient_data': encrypted_recipient_data}
248-
hops_data[i] = dataclasses.replace(hops_data[i], payload=MappingProxyType(new_payload))
248+
hops_data[i] = dataclasses.replace(hops_data[i], payload=new_payload)
249249

250250
blinded_path_blinded_ids = []
251251
for i, x in enumerate(blinded_path_to_dave.get('path')):
@@ -257,7 +257,7 @@ def test_create_onionmessage_to_blinded_path_via_alice(self):
257257
hops_data.append(
258258
OnionHopsDataSingle(
259259
tlv_stream_name='onionmsg_tlv',
260-
payload=MappingProxyType(payload))
260+
payload=payload),
261261
)
262262
payment_path_pubkeys = blinded_node_ids + blinded_path_blinded_ids
263263
hop_shared_secrets, _ = get_shared_secrets_along_route(payment_path_pubkeys, SESSION_KEY)

0 commit comments

Comments
 (0)