Sprinkles are cute, real-world, verifiable and electronic picture frames which are themselves an NFT worthy of display.
Each Sprinkle is a tiny photo frame, each meant to be super cute and something to show off. A Sprinkle is itself is tracked as an on-chain NFT, of which the owner can select any other NFT which they also own (must be the same owning address) to display on it. Each also includes a Secure Enclave (ATECC608A) which allows it to attest it is an official Sprinkle and verify that the photo shown is in fact owned by the owner of the Sprinkle. Currently we only managed to finish "The Cube" (it takes 24 hours for the potting to complete, which we started 24 hours before judging begins, so it remains to be seen even if it will work ;)) and is powered by Qi wireless charging. When placed on a Qi charging pad, the NFT fetches its image from the internet, and shows it with pride. There is also a dev-board version, which looks like a bunch of wires. This will be the focus of the demo, since once "The Cube" was potted, it was no longer able to accept firmware updates. :) The original idea fell through, as some parts we needed didn't arrive in time. It was to be a 6" square tile, solar powered to decorate your bathroom floor or kitchen backsplash with your lovely NFTs. It's still in the works. ;)
How it's made
There are several components: Hardware: - ESP32-WROOM-32 (MCU) - ATECC806A (Secure Enclave) - 240x240 IPS "Retina" display - Qi Charging power system - Acrylic Resin for potting Firmware - C/C++ - Arduino IDE Server Infrastructure - Heroku - The Graph Contract - Solidity - OpenZeppelin's ERC-721 - Hardhat - ethers.js The firmware on the hardware on start-up connects to the server, signing a message with the P-256 private key in the Secure Enclave. The server can then determine which image the device has been configured for, and returns the bytes, which the device converts from RGB8 to RGB565 to show. The device currently phones-home every 10s to see if a new photo has been configured. To configure a device, MetaMask is used to signer a message which allows the app to determine all Sprinkles owned by that account. After selecting a Sprinkle to configure, all NFTs owned by that user are shown so that one may be selected, which is stored in a database used for the next time the device phones home. One goal was to keep the configuration off-chain. Once you own a Sprinkle, you don't need to spend any further gas to use it as you'd like. If you transfer a Sprinkle, but not the accompanying NFT, the next time it phones home, the image will be wiped from it, since the owner no longer matches, and the new owner will need to set up an NFT that they own. There is still a lot we have to learn about potting. We had a pretty big boil-over in the vacuum chamber while removing bubbles. And we don't even currently know whether it will work, since there is a minimum curing time of 24 hours (for a full cure, 72 hours) and there is still about 10 hours left as we write this. We will find out around noon on Sunday, which is when the first 24-ish hours are up. :)Technologies used