MINE: coordinating the mesh through the hardware we already own
As a child of the 90’s, I find it remarkable how unfazed I’ve become by the proliferation of technology my younger self would have considered belonging to “the future”. The smartphone, a device that the children of today have never not known, being the primary example. This piece of technology, in its many forms, has exploded in its dissemination around the world in the past two decades, expanding so rapidly that more than 5.7 billion individuals (about seventy percent of the world’s population), now own this piece of tech.
In these past two decades, we have also witnessed the rise of the global tech company and its pursuit to establish a dense and highly connected network of users through both hardware and the software their hardware runs. And, in recent years, we have seen these companies build their biggest networks by activating hardware already owned by the users they hope to participate in their networks.
Tesla built a full camera suite on every car in 2016, years before the self driving software was ready to be used. Apple embedded Ultra-Wideband chips in the iPhone starting in 2019, allowing them to simply turn on “Find My” in 2021. Amazon put BLE and LoRa radios into Echos and Ring doorbells for years, so that in 2021 they were able to push a firmware update and turn them into the Amazon Sidewalk network overnight. In these cases, users didn’t need to buy new hardware to participate in these networks; the networks were able to be activated through existing hardware.
Offline Protocol is making a wager we can do the same with Bluetooth Low Energy, and the billions of smartphones (and other Bluetooth enabled devices) that are already in the hands of billions of people. Our mesh SDK can turn these phones from isolated devices into mesh routing nodes. Any application built on top of our SDK turns the device into a hop in a peer-to-peer network that works without the internet, over BLE and Wi-Fi Direct, with MLS end-to-end encryption, chunked file transfer, service discovery and CRDT sync. Identities for these devices being solved by our OfflineID SDK, tying the device to a unique cryptographic identity.
The difficulty in achieving a union of this pre-existing hardware with our software and delivering a useful mesh network is the same difficulty faced by every growing network. The mesh is only useful once enough devices participate to make the network dense, simultaneously only a dense network is attractive enough to make users want to participate. What we are faced with is no longer a problem of hardware or software, but a problem of coordination.
Our app MINE is our first attempt at solving this coordination problem. It is a mining and rewards app on iOS, Google Play and the Solana dApp Store, which allows users to participate as a node in the network, and earn points for this participation. Through the use of our SDKs we are attempting to incentivize the desired behavior to create mesh hotspots and slowly but certainly establish a massive and dense mesh network that would seemingly belong to “the future”, but is ready to exist today.
The incentives
Tied to each user’s OfflineID are Offline Points, which exist outside of MINE, and are tracked across the entire Offline Protocol ecosystem. In order to earn these points through MINE we check for two things. First, that a user is a genuinely discoverable peer by others. We derive this from a combination of neighbor_discovered events firing on their device, getBLePeerCount() increasing and getTransportMetrics('ble') reporting real BLE traffic flowing through their phone. Together, these signals make spoofing a user’s location impossible without an actual physical device at the broadcasted location.
The second check is a signed location claim derived from Offline Protocol’s Proof of Location service, which reads the current coordinates from the device and commits them to our backend along with the user’s cryptographic identity.
const { registerLocation } = useProofOfLocation();
const { success, location } = await registerLocation(username);
Once the claim is committed, our backend responds with a set of witness operators, which are network-run servers whose role is to independently verify location claims. A few seconds after the initial submission, the client opens a WebSocket to each of these witnesses and sends a ping carrying the claimed coordinates. The witnesses respond with a pong, the client acknowledges, and the round-trip timing of that exchange, together with what each witness can see about where the connection came from, is what allows them to decide whether the client is plausibly where it says it is. Because the client cannot pick its own witnesses, and because it has to actually reach the ones the backend gives it, a location spoofed from somewhere else cannot pass this final check.
Geo Missions and the mesh zone gradient
Geo Missions are how we actually direct users toward the places the mesh needs them most. Every area of the map gets a classification based on the density of Offline Protocol nodes it already has, and the points earned for a mission in that area are assigned accordingly. Zones with less coverage earn more points.
| Zone | What we see | Multiplier |
|---|---|---|
DEAD_ZONE | no coverage | × 5 |
WEAK_ZONE | some, needs more | × 3 |
EMERGING_ZONE | growing | × 2 |
BUSY_ZONE | dense, needs support | × 1.5 |
STRONG_ZONE | well-covered | × 1 |
Two additional multipliers stack on top of the base zone reward. The first is distance from the user, which scales the payout up to 2.5× for missions in the far ring. The second is convergence, which adds a 1.5× bonus when a mission is in an emerging or busier zone and the mesh has picked up on multiple users heading toward the same coordinate.
For example, a mission in a growing area a couple of kilometers away, with someone else converging on it:
Mission: "Strengthen Prospect Heights"
--------------------------------
Base reward 100
Zone: EMERGING_ZONE × 2
Distance: 2.1km (FAR) × 2.5
Convergence × 1.5
--------------------------------
Payout 750 points
That same mission in a well-covered zone, that is close to you and you show up to alone would only earn 100 points. The gradient does most of the work. It pushes users toward the gaps in the mesh, and rewards them for coordinating with each other rather than showing up alone.
Zone classification runs on a local cache that the mesh SDK maintains, populated with the coordinates of nodes it has discovered over BLE or has had shared with it through the mesh. The zone generator takes those coordinates, snaps them to a 0.006° global grid (each cell about 0.33 kilometers across), and counts how many nodes fall inside each cell. Cells then classify based on the count.
peers ≤ 0 → DEAD_ZONE
peers ≤ 3 → WEAK_ZONE
peers ≤ 10 → EMERGING_ZONE
peers ≤ 50 → BUSY_ZONE
peers > 50 → STRONG_ZONE
The full set of mission types covers the range of behavior we want to reward. Pioneering a dead zone, expanding coverage into weak ones, strengthening emerging ones, maintaining strong ones. Mine duration and uptime, for keeping the app running as an active node. Connecting to peers and maintaining those connections over a window of time. Referring new users and relaying data.
What can be built
The mesh SDK and the OfflineID SDK are both publicly available, and MINE is only one of the multitude of products that can be built on top of them. A partial list of what else could exist on a dense enough mesh network:
- A restaurant broadcasting today’s menu to nearby phones
- A parallel communication layer for a city under internet shutdown
- Live wait times at a taco truck from the people already in line
- Election monitoring where every observation is signed and location-attested
- Reviews of a coffee shop that unlock only if you’ve actually been there
- Off-grid connectivity for towns cellular never reached
- Concert tickets that scan at the gate without the internet
If you’d like to start contributing as a peer in our ever growing mesh network, the fastest way to be part of what we’re building is to download MINE and start earning points today. Every install is another node in the mesh, and every user showing up in an area that doesn’t yet have coverage, brings us a little bit closer to the future of a global and dense mesh network available to us all.