enum Tier1Input {
	FromNetwork {
		msg: Vec<u8>,
		from: PeerId,
	},
	FromTier2(Vec<u8>),
}

enum Tier1Output {
	ToNetwork {
		msg: Vec<u8>
		exclude: PeerId
	},
	ToTier2(Vec<u8>),
}
struct Tier1 {}

impl Tier1 {
	fn handle_inputs() {
		loop {
			let input = input_channel.recv()
			match input {
				FromNetwork(msg, from) => {
					send_to_conn_monitor(msg, from);
					
					if is_duplicate(msg) {
						continue
					}
					output_channel.send(Tier1Output::ToNetwork{msg, from});
					output_channel.send(Tier1Output::ToTier2(msg));
				}
				FromTier2(msg) => {
					enqueue_to_persistent_transmitter(msg)
				}
			}
		}
	}
}