At least the private contact discovery is not very private:
The client calculates the truncated SHA256 hash of each phone number in the device’s address book.
The client transmits those truncated hashes to the service.
Phone numbers are so not-sparse that there even was a game to text your "number neighbor". I can probably build a pretty effective rainbow table for this with my current hardware.