type GrandpaLinkHalf<Client> = LinkHalf<Block, Client, LongestChain<TFullBackend<Block>, Block>>;
struct GrandpaLinkHalf<Client> {
pub(crate) client: Arc<Client>,
pub(crate) select_chain: LongestChain<Backend<Block<Header<u32, BlakeTwo256>, OpaqueExtrinsic>>, Block<Header<u32, BlakeTwo256>, OpaqueExtrinsic>>,
pub(crate) persistent_data: PersistentData<Block<Header<u32, BlakeTwo256>, OpaqueExtrinsic>>,
pub(crate) voter_commands_rx: TracingUnboundedReceiver<VoterCommand<H256, u32>>,
pub(crate) justification_sender: NotificationSender<GrandpaJustification<Block<Header<u32, BlakeTwo256>, OpaqueExtrinsic>>>,
pub(crate) justification_stream: NotificationStream<GrandpaJustification<Block<Header<u32, BlakeTwo256>, OpaqueExtrinsic>>, GrandpaJustificationsTracingKey>,
pub(crate) telemetry: Option<TelemetryHandle>,
}
§voter_commands_rx: TracingUnboundedReceiver<VoterCommand<H256, u32>>