The problem Formsify solves
"Online Survey Services" being currently used by people are centralized and lead to integrity, transparency and accessibility problems. We are proposing a solution, named as "Formsify" which using Web3 technologies in order to solve them and make the overall system decentralized & trustless.
Problems with Online Survey Services currently offered like Google Forms, TypeForm, etc. 📌
- Integrity : Since these services are centralized, there is no way to actually verify that form data was not tampered.
- Transparency : There isn't any transparent way of verifying or tracing back the submitted response, because data can always be changed while passing it forward.
- Accessibility : If the server goes down, there isn't any way to access the data or interact with the forms.
Ways by which our proposed solution (Formsify) solves the above problems 📍
- Integrity : Since all the data is stored on-chain, the blockchain ledger serves the ultimate proof that data was not tamepred.
- Transparency : All the form submissions will be recorded as transactions and those transactions can be independently verified by anyone.
- Accessibility : There is no central server on which our solution is dependent. Therefore, data can always be accessed and forms be interacted with.
Added Advantages ✅
- Independent : Our solution acts an interface between the blockchain and the end-user. But, that interface can be rebuilt by the end-user and is not dependent on any single entity in order to access data or interact with their data.
- Accountability : Since each form submit is backed by gas, it makes the person submitting the form accountable towards their submission. They can't deny, once a submission has been recorded as a transaction.
- Spam Infeasibiliy : It becomes infeasible for anyone to submit fake responses as they will eventually lose crypto assets in the process of doing so because each fake response is going to cost them gas fees.
Challenges I ran into
One of the main challenges which I had run into was, setting the time locally and synchronizing that with the blockchain time.
- I had used local date-time as the input for setting form's opening and closing times.
- But then, those local times would be fetched as numbers (like UNIX timestamps) and not as strings. Moreover, they do not include the timezone.
- So, I created an alternate date object. Since date object gives the complete string, I had to convert that to UNIX, so that it can be inferred by chain. I wrote a function to separate date object specifications (year, month, date, hours, minutes), pad zeroes and convert the date object to UNIX based.
- Ethereum timestamps are in seconds and not milliseconds which we actually get. So, I had to remove the padding from my locally converted timestamp, in order to make it compatible with that of on-chain timestamps.
- Finally, I was able to sync my local time with block time and hence, mimic the form start and deadline functionality.