---
# System prepended metadata

title: DID Messaging Service

---

# DID Messaging Service

## Use Cases

- did:xxx to did:nft communication
- did:nft to did:xxx communication
- did:nft to did:nft communication

did:xxx always refers to the DID of the controller of the did:nft.

## Requirements

- Easy onboarding without updating did:xxx to add encryption keys and service endpoints
- 

## Staged Solution

### Phase 1

Assumptions:
- Centralized Messaging Service acting as an Inbox
- did:nft resolving to an Blockchain Account ID (e.g., Ethereum account) with no service endpoints and no encryption key

Communication types:
- did:xxx to did:xxx communication
- did:xxx to did:nft communication

How to send a message to a did:nft/did:xxx:
- Anyone can send non-encrypted messages to the did:xxx or did:nft
- Message is signed and sent by the did:xxx/did:nft to the recipient Ethereum account or did:xxx/did:nft (if available)
- Message is sent to a static centralized messaging endpoint in case of an Ethereum Account. If it is a DID, the service endpoint will be resolved and used to send the message to. If there is a DID but no service endpoint, the message will be sent to the centralized messaging endpoint.
- If recipient is an Ethereum account, Messaging Service will use any of the outlined options to establish mapping from Ethereum account to DID
**FIXME: why using DIDs for this option at all?**
- Messaging Service keeps messages until they are pulled from the owner of the NFT

How to obtain messages:
- Recipient goes to Messaging Service and connects with their MetaMask
- dApp asks Messaging Service if any messages were received. 
- dApp receives challenge from Messaging Service
- dApp asks MetaMask to sign challenge that will act as an authorization token to obtain messages
- dApp receives messages from Messaging service

**FIXME: cannot become DIDComm v1/v2 compliant**
### Phase 2

- When the recipient goes to the Messaging Service, they can provide their email/phone number to receive updates about new messages.

**FIXME: cannot become DIDComm v1/v2 compliant**

### Phase 3

- When the recipient goes to the Messaging Service, they have the option to create a DID and register the mapping between Eth account and DID.
- The mapping is useful for did:nft and did:xxx recipients. 
- In that manner, the public encryption key will be also registered to allow to receive encrypted messages.
- This approach can become DIDComm compliant if MM decides to accept our PR for support for XChacha20.

### Phase 4

- When the recipient goes to the Messaging Service, they have the option to add their own service endpoint to receive message to their DID. 
- In that manner, the Messaging Service would still act as a routing service and will be added to the service section of the DID.

## Open Questions

- How to establish mapping between the Ethereum account of the owner of the NFT and thir did:xxx

  - CAIP-10 link (Ceramic)
  - Local mapping in the messaging service
  - Serto Search
  - Custom smart contract on Ethereum, e.g., ERC1056