mirror of
https://github.com/logos-blockchain/logos-blockchain-specs.git
synced 2026-01-10 17:13:08 +00:00
fix observing final msg
This commit is contained in:
parent
c16ed046ba
commit
425a3e2684
@ -33,14 +33,9 @@ class Adversary:
|
||||
def inspect_message_size(self, msg: SphinxPacket | bytes):
|
||||
self.message_sizes.append(len(msg))
|
||||
|
||||
def observe_receiving_node(self, sender: "Node", receiver: "Node", msg: SphinxPacket | bytes):
|
||||
cur_window = len(self.msg_pools_per_window) - 1
|
||||
self.msg_pools_per_window[cur_window][receiver].append(self.env.now)
|
||||
self.msgs_received_per_window[cur_window][receiver].add(sender)
|
||||
|
||||
origin_id = receiver.inspect_message(msg)
|
||||
if origin_id is not None:
|
||||
self.final_msgs_received[receiver][cur_window].append((sender, origin_id))
|
||||
def observe_receiving_node(self, sender: "Node", receiver: "Node"):
|
||||
self.msg_pools_per_window[-1][receiver].append(self.env.now)
|
||||
self.msgs_received_per_window[-1][receiver].add(sender)
|
||||
# if node not in self.node_states[self.env.now]:
|
||||
# self.node_states[self.env.now][node] = NodeState.RECEIVING
|
||||
|
||||
@ -53,6 +48,12 @@ class Adversary:
|
||||
self.senders_around_interval.update({sender})
|
||||
# self.node_states[self.env.now][node] = NodeState.SENDING
|
||||
|
||||
def observe_if_final_msg(self, sender: "Node", receiver: "Node", msg: SphinxPacket | bytes):
|
||||
origin_id = receiver.inspect_message(msg)
|
||||
if origin_id is not None:
|
||||
cur_window = len(self.msgs_received_per_window) - 1
|
||||
self.final_msgs_received[receiver][cur_window].append((sender, origin_id))
|
||||
|
||||
def is_around_message_interval(self, time: SimTime):
|
||||
return time % self.config.mixnet.message_interval <= self.config.mixnet.max_message_prep_time
|
||||
|
||||
|
||||
@ -52,7 +52,7 @@ class P2P(ABC):
|
||||
yield self.env.timeout(self.config.p2p.random_network_latency())
|
||||
|
||||
self.measurement.measure_ingress(receiver, msg)
|
||||
self.adversary.observe_receiving_node(sender, receiver, msg)
|
||||
self.adversary.observe_receiving_node(sender, receiver)
|
||||
self.receive(msg, hops_traveled + 1, sender, receiver)
|
||||
|
||||
@abstractmethod
|
||||
@ -80,6 +80,7 @@ class NaiveBroadcastP2P(P2P):
|
||||
def receive(self, msg: SphinxPacket | bytes, hops_traveled: int, sender: "Node", receiver: "Node"):
|
||||
msg_hash = hashlib.sha256(bytes(msg)).digest()
|
||||
self.measurement.update_message_hops(msg_hash, hops_traveled)
|
||||
self.adversary.observe_if_final_msg(sender, receiver, msg)
|
||||
self.env.process(receiver.receive_message(msg))
|
||||
|
||||
|
||||
@ -134,6 +135,7 @@ class GossipP2P(P2P):
|
||||
if msg_hash not in self.message_cache[receiver]:
|
||||
self.message_cache[receiver][msg_hash] = sender
|
||||
self.measurement.update_message_hops(msg_hash, hops_traveled)
|
||||
self.adversary.observe_if_final_msg(sender, receiver, msg)
|
||||
|
||||
# Receive and gossip
|
||||
self.env.process(receiver.receive_message(msg))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user