# Pattern α : Bob and Alice have already done the initial DMTP setup.



<figure><img src="https://4002826411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fhk2vMNItTHga72ho27Cs%2Fuploads%2FtKYPLkx3PY9c7fNfbeY0%2Fimage.png?alt=media&#x26;token=d789b9cf-e905-411c-aa5a-ff375de5ad09" alt=""><figcaption></figcaption></figure>

1. DMTP server verifies the signature and prove that DMTP key pair haven't been manipulated.
2. Alice client retrieves `Alice’s encrypted DMTP_priKey` and `Bob’s DMTP_pubKey`from the DB
3. Alice decrypts `Alice’s DMTP_priKey` with her wallet.
4. Alice generates the `combined secret` from `Alice’s DMTP_priKey` and `Bob’s DMTP_pubKey`
5. 5.Alice encrypts messages with `combined key (Alice & Bob)`
6.  Store the `encrypted message` in DB and IPFS.\
    The data to be stored will look something like this.

    ```json
    {   
      "messages":"ENCRYPTED_MESSAGE_WITH_COMBINE_KEY",  
      "sender": "SENDER_WALLET_ADDRESS",  
      "receiver": "RECEIVER_WALLET_ADDRESS",  
      "timestamp": "TIMESTAMP"
    }
    ```
7. The CID of message data is stored in `Message` table in DB and `CID` table in DB\
   【Messages Table】 ⇒ CID \
   【CIDs Table】 ⇒ \[CID, CID, CID, CID, CID, CID]
8.  Periodically, sync all data in `CID` table to IPFS and get CID\
    All CIDs are stored in this file

    <pre class="language-json"><code class="lang-json"><strong>{
    </strong>  "ROOM_ID_A": ["CID", "CID", "CID", "CID", "CID"],
      "ROOM_ID_B": ["CID", "CID", "CID", "CID", "CID"],
      "ROOM_ID_C": ["CID", "CID", "CID", "CID", "CID"],
    }
    </code></pre>
9.  This CID is stored in the blockchain (Polygon)

    ```solidity
    string[] cids;
    function storeCID(string memory _cid) public onlyOwner{
      cids.push(_cid);
    }
    ```

