World Journeys
Going Around the World
Section titled “Going Around the World”A message that travels from nara to nara, collecting signatures and stamps along the way, until it returns home.
Overview
Section titled “Overview”“Going Around the World” is a collaborative feature where a nara sends a message that hops through the mesh network, visiting other naras one by one based on social affinity (clout), until it completes a full circle back to the originator.
How It Works
Section titled “How It Works”1. Starting the Journey
Section titled “1. Starting the Journey”A nara initiates a world journey with a message:
"Hello from the other side!"The originator creates a WorldMessage containing:
- The original message
- Their name as originator
- A unique journey ID
- An empty list of hops (to be filled as it travels)
2. Routing by Vibes
Section titled “2. Routing by Vibes”At each stop, the current nara chooses the next destination based on clout (social affinity):
- Look at all known online naras
- Exclude naras that have already been visited (check the hops list)
- Pick the one with the highest clout score
- If no unvisited naras remain, return to the originator
3. Signing and Stamping
Section titled “3. Signing and Stamping”When a nara receives the world message, they:
- Verify all existing signatures in the chain
- Sign the current state of the message with their Ed25519 private key
- Add a stamp - an emoji as a token of appreciation and acknowledgement
- Record the timestamp of their participation
Each hop entry contains:
type WorldHop struct { Nara string // Name of the nara Timestamp int64 // When they received it Signature string // Ed25519 signature (Base64) Stamp string // Emoji stamp}4. Verification
Section titled “4. Verification”Every nara in the chain verifies:
- All previous signatures are valid
- The chain is unbroken (each signature covers all previous hops)
- No hop has been tampered with
If verification fails, the message is rejected.
5. Completion
Section titled “5. Completion”When the message returns to the originator:
- The originator verifies the complete chain
- Broadcasts a lightweight completion signal via MQTT (
nara/plaza/journey_complete) - Records a
journey-completeobservation event (see /concepts/events/) - Clout rewards are distributed
Each nara that participated:
- Receives the completion signal
- Records their own
journey-completeobservation - Resolves the journey from their pending list (good vibe!)
If the journey never completes (5 minute timeout):
- Participating naras record a
journey-timeoutobservation (bad vibe)
6. Rewards
Section titled “6. Rewards”Completing a world journey awards clout:
- Originator: +10 clout for successfully completing the journey
- Each participant: +2 clout for being part of the chain
Message Format
Section titled “Message Format”type WorldMessage struct { ID string `json:"id"` // Unique journey identifier OriginalMessage string `json:"message"` // The message being carried Originator string `json:"originator"` // Who started the journey Hops []WorldHop `json:"hops"` // Chain of signatures and stamps}
type WorldHop struct { Nara string `json:"nara"` // Nara name Timestamp int64 `json:"timestamp"` // Unix timestamp Signature string `json:"signature"` // Base64 Ed25519 signature Stamp string `json:"stamp"` // Emoji stamp}Cryptographic Details
Section titled “Cryptographic Details”Ed25519 Keypair
Section titled “Ed25519 Keypair”Each nara derives an Ed25519 keypair deterministically from their soul:
- The soul’s 32-byte seed is used directly as the Ed25519 seed
- Same soul = same keypair (portable identity)
- Public keys are shared as part of
NaraStatus
What Gets Signed
Section titled “What Gets Signed”Each nara signs:
SHA256(message_id + original_message + originator + serialized_previous_hops)This ensures:
- The message hasn’t been altered
- The hop chain is intact
- The order is preserved
Transport
Section titled “Transport”World messages travel over the mesh network (tsnet/Headscale), not MQTT:
- Direct nara-to-nara connections
- More reliable for chain-of-custody
- MQTT only used for lightweight coordination signals
See /concepts/events/ for details on the MQTT + Mesh architecture.
Example Journey
Section titled “Example Journey”1. Alice starts: "Hello world!" Hops: []
2. Alice -> Bob (highest clout) Hops: [{Bob, 1234567890, "sig...", "🌟"}]
3. Bob -> Carol (highest unvisited clout) Hops: [{Bob, ..., "🌟"}, {Carol, 1234567895, "sig...", "🎉"}]
4. Carol -> Dave Hops: [{Bob, ..., "🌟"}, {Carol, ..., "🎉"}, {Dave, 1234567900, "sig...", "🚀"}]
5. Dave -> Alice (only unvisited is originator = complete!) Final hop added, journey complete
6. Alice posts to MQTT: "World journey complete! 🌍" Shows full chain with all stamps and timingFailure Cases
Section titled “Failure Cases”- Nara offline: Skip and try next highest clout
- Signature invalid: Reject message, log warning
- No path back: Journey fails if all naras visited but can’t reach originator
- Timeout: Participating naras consider journey failed after 5 minutes without completion signal
Future Enhancements
Section titled “Future Enhancements”- Minimum hop count requirement
- Theme journeys (message must relate to a topic)
- Journey racing (multiple concurrent journeys)
- Visual map of the journey path