This project allows users to send files to anyone around the world without limitations. Rather than using platforms like Wetransfer that force users to pay for larger file transfers & also does not persist storage, we offer a way for anyone to send files with no file size limits & have their data persisted for long-term storage. More importantly, we allow users to sign the transfer of a file with their decentralized identity (any blockchain wallet). Thus, providing a way to authenticate the file provenance!
We give our users two choices when sending files:
Users can also upload multiple files, which will be zipped into an archive when downloading later. Users can also view their history, to look at previous files they have sent before.
Another note: Non-crypto users can use our platform as well! They just won't have access to upload histories & upload personalization!
Our future plans are to use ENS for the domain name and allow users to get their own ENS names also, allowing for easier transfers to specific recipients.
This project uses Web3.storage, Ceramic & IDX. When users upload their files, the files are packaged into a CAR file and saved in Web3.storage. The CID of the archive is then used to create a TileDocument stream using Ceramic so we can keep track of the metadata of the upload. We save data such as the title, message, recipient & uploader address as well as the ceramic link for proof. The stream ID & CID is then encrypted and saved in the URL.
Therefore, when a user clicks on the link, the URL is then decrypted so we can retrieve the Ceramic stream, where we can load the metadata & check if the upload is locked for specific users, and also get the CID to retrieve the files. IDX is used to authenticate and create the ceramic stream, as well as to unlock the file given they own the correct recipient address.
The encryption right now is done via AES encryption, which means we need to store a key. However, this can be easily overcome by using ECIES (Elliptic Curve Integrated Encryption Scheme) to generate a key to encrypt the URL. That means we don't need to hold any keys and each encryption will be unique per address.
The frontend is build with React & is deployed via Fleek.