This is the technical proof of a modular e2ee chat protocol using Waku. You can find discussion and details here
See EchoBot for a minimal client side usage example.
# Build Dependencies and link libraries
make update
# Build executables
make all
# Run the Text Interface
./build/tui --name=<unique_id>
Current state of the ChatSDK FURPS
| ID | Feature | Status | Notes |
|---|---|---|---|
| F1 | Permissionless Accounts | ✅ | |
| F2 | 1:1 Messaging | ✅ | |
| F3 | FS + PCS | 🟡 | PCS in place — strong FS needs initial key exchange |
| F4 | Delivery Receipts | ✅ | |
| F5 | Basic Content Types | ✅ | Types need formal definition; plugin system prototyped |
| F6 | Default Message Store | ⚪ | |
| F7 | Default Secrets Store | ⚪ | |
| U1 | Non-interactive Initiation | ✅ | |
| U2 | Invite Links | ✅ | |
| U3 | 25 Lines of Code | 🟡 | |
| R1 | Dropped Message Detection | ⚪ | |
| P1 | 10K Active Clients | ⚪ | |
| S1 | RLN Compatible | 🟡 | RLN supported, but not implemented yet |
| S2 | Future Proof | 🟡 | |
| S3 | Go Bindings | ⚪ | |
| S4 | Rust Bindings | ⚪ | |
| +1 | Sender Privacy | 🟡 | Needs verification |
| +2 | Membership Privacy | 🟡 | Needs verification |
| +3 | User Activity Privacy | 🟡 | Needs verification |
| +4 | Nimble Compatible | ⛔ | Blocked — upstream dependency conflicts |
To establish a secure conversation, Saro and Raya need to:
- Find each others identityKeys
- Agree on a secret key, and location to communicate
For this technical proof, recipient identity keys are exchanged out of bound via an invite link. More complex identity systems will be explored in the future. ..
sequenceDiagram
participant S as Saro
participant R as Raya
Note over R,S: Discovery
R -->> S: Send Invite Link via established channel
Note over R,S: Initialization
S ->> R: PrivateV1 Invite
Note over R,S: Operation
loop
par
R->> S: Send Message
and
S->> R: Send Message
end
end
.protofiles are included in this repo due to complications in importing nested packages using?subdir=. Once resolved there will be a single definition of protocol types.- Messages are sent using waku, however wakunode discovery has not been implemented. As a stopgap a manual discovery process based on staticpeers is used.