Contacts are stored in RoomStateEvents of a designated “contacts” room. The content of the StateEvent is a json document that stores contact details for each contact.
Contact requests are sent as an invitation to join the users contact room. Being kicked from the room constitutes terminating the contact relationship.