Go to the URL http://wwww.crowdcomputer.com and become a part of a global computer. This is the target of this project.
Everything should work in the browser, so we use
- IndexedDB
- WebRTC
- JavaScript
So we can save things, can compute things and can talk to each other.
If you connect to the network the first time, you have to create a asymetric keypair, so you can sign, what did you compute and nobody can manipulate it. And you upload you computations, so that everybody can verify it.
So, a full dataset consists of:
- ID
- Type (data upload, has to be executed, was executed)
- entry state
- algorithm
- output state
- timestamp
- signature
- public key
If you just want to upload data, the algorithm and output state is not needed, if you want to execute something, the output state is empty.
Now, somebody could upload an endless computation or many data. To prevent this, everybody shall log the actions of the others. And if I compute x for you, than you compute y for me later. This is like a credit, connected with you public key. And even if someone wants to spam the network, he has to calculate usefull things. And to save data, is another category than to calculate something. So there are 2 currencies.
[ ] Generation of key pair in the browser
[ ] Protocols for communication
[ ] Behavior of a node
[ ] Definition of "how much is a calculation-Cent?"
Git Introduction: https://git-scm.com/book/en/v2/Getting-Started-Git-Basics
JavaScript Succinctly: https://www.syncfusion.com/content/downloads/ebook/JavaScript_Succinctly.pdf
For asymetric encryption and signing: pls google "introduction to modern cryptography"
For using IndexedDB: http://pouchdb.com/ or https://github.com/aaronpowell/db.js
→ We have to ask the user for persistent storage: https://developer.chrome.com/apps/offline_storage
For WebRTC: http://peerjs.com/ (more research needed)