code: func (c *Controller) Subscribe(name string, pubkey *ecdsa.PublicKey, address pss.PssAddress, handler func(string, []byte) error) error {
  	c.mu.Lock()
  	defer c.mu.Unlock()
  	msg := NewMsg(MsgCodeStart, name, c.pss.BaseAddr())
  	c.pss.SetPeerPublicKey(pubkey, controlTopic, address)
  	pubkeyId := hexutil.Encode(crypto.FromECDSAPub(pubkey))
  	smsg, err := rlp.EncodeToBytes(msg)
  	if err != nil {
  		return err
  	}
  	err = c.pss.SendAsym(pubkeyId, controlTopic, smsg)
  	if err != nil {
  		return err
  	}
  	c.subscriptions[name] = &subscription{
  		pubkeyId: pubkeyId,
  		address:  address,
  		handler:  handler,
  	}
  	return nil
  }
docs: // Subscribe is used by a client to request notifications from a notification service provider
  // It will create a MsgCodeStart message and send asymmetrically to the provider using its public key and routing address
  // The handler function is a callback that will be called when notifications are received
  // Fails if the request pss cannot be sent or if the update message could not be serialized