# MeshService — Agent Notes ## Purpose Generic decentralized service layer. Any P2P service following Announce→Query→Response→Reserve can be built on this. ## Quick Commands ```bash # Run tests cargo test # Run examples cargo run --example fapp_service cargo run --example housing_service cargo run --example multi_service ``` ## Key Files | File | Purpose | |------|---------| | `src/router.rs` | Main entry point, `ServiceRouter` | | `src/message.rs` | `ServiceMessage` struct | | `src/services/fapp.rs` | FAPP implementation (reference) | | `src/services/housing.rs` | Housing (second service example) | ## Adding a New Service 1. Create `src/services/myservice.rs` 2. Define payload structs with serde 3. Implement `ServiceHandler` 4. Add to `src/services/mod.rs` 5. Add service ID to `lib.rs` ## Wire Format 64-byte header (fixed) + signature (64 bytes) + payload (CBOR) + optional verifications. See `src/wire.rs` for encoding/decoding. ## Integration with quicprochat-p2p The `ServiceRouter` is transport-agnostic. To integrate: ```rust // Receive from transport let msg = wire::decode(&incoming_bytes)?; let action = router.handle(msg, Some(sender_pubkey))?; // Handle action match action { ServiceAction::StoreAndForward => { // Re-broadcast msg.forwarded() via transport } ServiceAction::Respond(response) => { // Send response back } _ => {} } ``` ## Costs - No external API calls - Pure Rust, runs locally - Memory: Store grows with cached announces (configurable limits)