func (s *server) CrosslinkStream(req *pb.CrosslinkStreamRequest, res pb.BlockchainRPC_CrosslinkStreamServer) error {
	cs := NewCrosslinkStream(req.ShardID, func(c *primitives.Crosslink) {
		_ = res.Send(&pb.CrosslinkMessage{
			BlockHash: c.ShardBlockHash[:],
			Slot:      c.Slot,
		})
	})
	s.chain.RegisterNotifee(cs)
	<-res.Context().Done()
	s.chain.UnregisterNotifee(cs)
	return nil
}
// CrosslinkStream creates a crosslink stream.
CrosslinkStream creates a crosslink stream.
// CrosslinkStream creates a crosslink stream .
func (s *server) CrosslinkStream(req *pb.CrosslinkStreamRequest, res pb.BlockchainRPC_CrosslinkStreamServer) error {
	cs := NewCrosslinkStream(req.ShardID, func(c *primitives.Crosslink) {
		_ = res.Send(&pb.CrosslinkMessage{
			BlockHash: c.ShardBlockHash[:],
			Slot:      c.Slot,
		})
	})
	s.chain.RegisterNotifee(cs)
	<-res.Context().Done()
	s.chain.UnregisterNotifee(cs)
	return nil
}
func ( s * server ) CrosslinkStream ( req * pb . CrosslinkStreamRequest , res pb . BlockchainRPC_CrosslinkStreamServer ) error { cs := NewCrosslinkStream ( req . ShardID , func ( c * primitives . Crosslink ) { _ = res . Send ( & pb . CrosslinkMessage { BlockHash : c . ShardBlockHash [ : ] , Slot : c . Slot , } ) } ) s . chain . RegisterNotifee ( cs ) <- res . Context ( ) . Done ( ) s . chain . UnregisterNotifee ( cs ) return nil }
CrosslinkStream creates a crosslink stream.
CrosslinkStream creates a crosslink stream .