Inspiration

We were inspired to create a service that enables people to send meaningful messages to loved ones on special occasions like Christmas, while also prioritizing privacy and security.

By leveraging TLS Notary and Merkle Tree, we wanted to create a trustworthy way to verify relationships and provide a platform for heartfelt Christmas messages.

The advantage of Web Proofs generated by TLS Notary is the diversity of sources. If you can prove you're friends through a variety of paths, anyone can send you a message.

What it does

Utilizes proof of ownership of your social media account to obtain consent to create your tree. To write a message to a friend's tree, we utilize proof of mutual followership of the SNS account. Each proof can be generated by running a custom plugin on the TLS Notary extension.

Christmas Merkle Tree lets users verify their friendship through TLS Notary, allowing them to craft custom Christmas cards based on authenticated relationships. Each message and proof is stored as a Merkle Tree, ensuring security and data integrity. Users can send genuinely meaningful messages backed by verifiable connections.

Tree Creation

  1. Use TLS Notary to create proof of ownership of your SNS account and submit it to the server to generate a tree.
  2. Share the tree with your friends.

Message Writing

  1. Use TLS Notary to create proof that you and your friends are following each other on SNS.
  2. Prove your friendship by adding decorations to your friend's tree and leaving an anonymous card. The message can be opened on Christmas Day.
  3. All trees are Merkle Trees. The messages sent will be hashed and included in the Merkle Tree. Use Merkle proof to verify that the message you sent is included in the tree.

How we built it

  • Backend: We built the server with Rust(Axum), using TLS Notary to verify each user’s relationships. Each message and its proof are hashed and added to a Merkle Tree. Proofs are privately managed using the Pinata File API, act as a DA layer for Proof.

  • Frontend: React, Next.js, Zustand

  • TLS Notary Extension Plugin: We created a custom TLSNotary plugin in TypeScript to verify mutual follow status and profile ownership on Twitter. Using Extism, the plugin builds as a WASM binary. Once installed, it verifies Twitter profiles and mutual follows while preserving user anonymity.

Architecture Link

Challenges we ran into

Reducing the time to generate proofs was a challenge.

We realized that proof generation time is highly dependent on the hardware specifications of the TLS Notary server, so we utilized our own server to speed up proof generation time. We also applied optimistic UI transitions so that you can do other things on the frontend while generating proofs.

Also extension's plugins run as WASM, which made debugging difficult.

Accomplishments that we're proud of

Creating a popular and friendly use case rather than a rigid use case. A combination of Proof-of-Friendship and Proof-of-Inclusion.

We’re proud to have built a service that protects privacy while proving relationships and guaranteeing message integrity. A key achievement is enabling users to manage their relationships with a level of autonomy, backed by TLS Notary & Merkle Tree verification.

What we learned

Realizing the endless possibilities of TLS Notary.

That Web Proof is strongly portable and will greatly improve interoperability when dealing with personal information.

But we also found limitations: The extension is inconvenient and generating proofs are resource-intensive. → We will be putting a lot of effort into overcoming these two challenges in the future.

What's next for Christmas Merkle Tree

  • To make Proof generation time faster and handle different edge cases so that it can actually be used for Christmas.
  • Expand support to various social networks such as Instagram, Farcaster, etc.
  • Mobile support
  • To prove that trustless can be achieved without a blockchain, and that users can be created without tokenomics.
  • To make TLS Notary more known to the world.

About us

built with ❤️ by CURG members

Built With

Share this project:

Updates

Submission history