code: func (pssapi *API) Receive(ctx context.Context, topic Topic, raw bool, prox bool) (*rpc.Subscription, error) {
  	notifier, supported := rpc.NotifierFromContext(ctx)
  	if !supported {
  		return nil, fmt.Errorf("Subscribe not supported")
  	}
  
  	psssub := notifier.CreateSubscription()
  
  	hndlr := NewHandler(func(msg []byte, p *p2p.Peer, asymmetric bool, keyid string) error {
  		apimsg := &APIMsg{
  			Msg:        hexutil.Bytes(msg),
  			Asymmetric: asymmetric,
  			Key:        keyid,
  		}
  		if err := notifier.Notify(psssub.ID, apimsg); err != nil {
  			log.Warn(fmt.Sprintf("notification on pss sub topic rpc (sub %v) msg %v failed!", psssub.ID, msg))
  		}
  		return nil
  	})
  	if raw {
  		hndlr.caps.raw = true
  	}
  	if prox {
  		hndlr.caps.prox = true
  	}
  
  	deregf := pssapi.Register(&topic, hndlr)
  	go func() {
  		defer deregf()
  		select {
  		case err := <-psssub.Err():
  			log.Warn(fmt.Sprintf("caught subscription error in pss sub topic %x: %v", topic, err))
  		case <-notifier.Closed():
  			log.Warn(fmt.Sprintf("rpc sub notifier closed"))
  		}
  	}()
  
  	return psssub, nil
  }
docs: // Creates a new subscription for the caller. Enables external handling of incoming messages.
  //
  // A new handler is registered in pss for the supplied topic
  //
  // All incoming messages to the node matching this topic will be encapsulated in the APIMsg
  // struct and sent to the subscriber