Companies often require a verifiable Proof of Location, but traditional metrics like GPS are easy to spoof. We built Geo to provide a protocol which allows anyone to easily distribute and verify Proofs of Location in a decentralized network without a need for massive overhead.
What it does
Geo is centered around Nodes, which are devices set at a fixed physical location. Using the Geo universal mobile app, users can connect to nodes via Bluetooth and receive a Proof of Location signature. This signature is unique in that it requires the user to be physically present at the location, which can be used to demonstrate presence at a certain time.
Geo has two pathways for distributing signatures. In the first case, users can opt to keep their signatures private and stored on their device. When a user wants to provide the Proof of Location, the validator can invoke a Smart Contract which verifies the Proof of Location (i.e. that the user was at the specified location at the specified time).
The second case is intended for public systems, such as a Geocaching game. Proof of Location signatures are stored on a server, providing a queryable API for Smart Contracts via Oraclize. In doing so, it is possible for a Smart Contract to verify the past location of a user.
How we built it
Geo is multi-platform in order to accommodate for a global market. Nodes are written in Node.js and can be run on any Bluetooth-enabled device, such as a desktop, tablet, or Arduino.
The Geo mobile app is written universally in Ionic, which allows it to be deployed on any mobile operating system.
The mobile app and node communicate via Bluetooth, with the node ultimately returning the Proof of Location signature.
Challenges we ran into
In creating Geo, it was necessary to build a comprehensive protocol that could be trusted as a Proof of Location. We wanted a way that it could be certain that a user visited a certain location at a time without compromising user privacy. Though there may still be some limited potential for exploits, the model we created ensures that it is only possible to obtain a valid signature by physically visiting a node.
In terms of development, the most difficult feature to integrate was Bluetooth communication between the node and user. After some rather agonizing moments, we were able to successfully implement Bluetooth.
Accomplishments that we're proud of
- Created a functional mobile app that connects to the Geo Node.
- Got Bluetooth working in communicating between users and nodes.
- Created a Smart Contract model for probabilistic Proofs of Location in order to protect user privacy
- Created a queryable API which allows others to interact with public Proofs of Location.
What we learned
- Planning is central for systems built around cryptography
- Bluetooth can be tricky to integrate!
What's next for Geo
There's many potential applications that can be built utilizing Geo, whether loyalty rewards for companies or a decentralized Geocaching game. We're excited to see where Geo will go from here, and will continue building applications on top of the protocol.