Part of the Tappy team works for a decentralized social finance startup called Alice (www.alice.si). Alice's mission is to create incentives for nonprofits to be transparent about their impact. Verifying impact is costly however, so we wanted to build a simple way for beneficiaries themselves to verify that a nonprofit is achieving its goals.
The problem is that interacting with the the blockchain is much too complex for "normal" people. Especially vulnerable people supported by nonprofits.
So we decided to create an ultra simple NFC wallet that even a child can use. And we applied it to a charity project providing free school lunches for kids.
What it does
Tappy makes it easy to load and unload crypto assets into any object equipped with an NFC tag: a card, a pin, a bracelet, a sticker, etc. Using Tappy doesn't require any technical skills whatsover. Simply tap a device to load the wallet with assets, and tap again to spend them. No smartphone, no gas payment, no metamask, no browser-cached keys, no QR code scan...users don't even need the Internet.
Our use case: we wanted to allow donors to give to a school lunch programme with full, immutable transparency, and with the children themselves validating that they've received their meal. Here's how it works:
- Donors load up the project wallet with lunch money
- Each kid is given an NFC card or pin which is registered with the project smart contract
- Every morning, kids "Tapp in" at the school gates on their teacher's smartphone. This automatically loads their wallet with the money needed to pay for lunch
- For added security, kids also use a "Kitty Key" to secure their lunch. After tapping in at the gate, they are given a choice of 9 random images (we use pictures of cryptokitties for the demo - these are not actual NFTs!) and choose one as their Kitty Key.
- At lunch time, each pupil uses their card to "Tapp in" at the cafeteria on another smartphone, and use their KittyKey to verify they are the card's rightful owner. This automatically unloads the lunch money from their wallet to the charity.
- Donors can see in real time how many kids are attending school and claiming their lunch with full data privacy.
The cycle starts over the following day.
How we built it
Tappy is a simple app that can be downloaded by teachers to register the presence of pupils at school. The same app can be downloaded by the charity providing lunch. These are the only two people who need a smartphone and an Internet connection. Pupils only need their NFC object.
Donors make donations with their debit cards via Wyre, which converts the fiat into Dai and sends it to an account on the Kovan network. To ensure fast execution and smooth user experience, a bridge to the SKALE side-chain sends instructions to mint the corresponding sDai and sends it to the charity project wallet.
Each NFC tag is registered on the smart contract on SKALE and then stuck to an object (e.g. a pin) and one is given to each child eligible for free school meals. When kids "Tapp in" at school in the morning, the smart contract stores the hash of their combined NFC tag ID and their KittyKey secret. When kids "Tapp in" at the cafeteria, the money is only unloaded and transferred to the charity if the NFC / KittyKey hash matches that morning's Tapp.
Challenges we ran into
We had issues with the Wyre integration which was initially unstable, but the Wyre team fixed it quickly. It was also difficult to connect the Ethers library to React-Native.
Accomplishments that we're proud of
We're proud of several things: our team dynamic was amazing. The solution we implemented pretty much followed exactly the plan we'd laid out at the beginning. We finished our hack at a reasonable hour for once.
What we learned
We explored NFC infrastructure for the first time. We also learnt how to build a mobile light client for Ethereum.
What's next for Tappy
Tappy will be integrated with the Alice network so that it can be used by charities in real world conditions. We will develop it further so that it can:
- make partial payments (not just a binary load/unload)
- store multiple assets and even store transaction (e.g. the missing signature for a multisig operation)
- assets on lost or damaged cards can be restored with a master/proxy swap contract
- integrate with the smart card standard for extra security
- integration with SSID
- Use actual NFTs as Kitty Keys