code: public void requestPubkey(final BitmessageAddress contact) {
          BitmessageAddress stored = addressRepository.getAddress(contact.getAddress());
  
          tryToFindMatchingPubkey(contact);
          if (contact.getPubkey() != null) {
              if (stored != null) {
                  stored.setPubkey(contact.getPubkey());
                  addressRepository.save(stored);
              } else {
                  addressRepository.save(contact);
              }
              return;
          }
  
          if (stored == null) {
              addressRepository.save(contact);
          }
  
          long expires = UnixTime.now(TTL.getpubkey());
          LOG.info("Expires at " + expires);
          final ObjectMessage request = new ObjectMessage.Builder()
              .stream(contact.getStream())
              .expiresTime(expires)
              .payload(new GetPubkey(contact))
              .build();
          proofOfWorkService.doProofOfWork(request);
      }
docs: Be aware that if the pubkey already exists in the inventory, the metods will not request it and the callback
  for freshly received pubkeys will not be called. Instead the pubkey is added to the contact and stored on DB.