To make explanations short, only the main properties that are interesting for our application are explained here.
- blockchain: blockchain is an Internet protocol that shares the same information and the same calculation logic among ALL participating computers. This makes it super resilient to network failures, storage failures and hacks that destroy the data and the process logic. Because blockchain protects both data and logic, it is best when handling small amounts of data.
- IPFS: IPFS is an Internet protocol for decentralized file storage of any size where a file is not referenced by its location but by its content (more exactly the hash of its content). By comparison, instead of saying "the car that is on the leftmost lane of the traffic jam" you say "the red Ford Mustang with the license plate XXX-1234-AA". Being agnostic of file location makes it super resilient to network failures and storage failures. Using the cryptographic hash makes the file impossible to falsify.
- hash: hashing is a cryptographic algorithm that associates a string of binary data of unlimited size to another string of data of fixed size (a hash) in a manner that any change of one bit in the first set of data produces a completely different hash result. This makes it impossible to falsify a document.
- dApp: a dApp is a "client-server" application that uses as server a blockchain to store the application logic that needs to be protected from falsification and hacks. The client side is in any language. In this simple demo the language is JavaScript and the user interface framework is React.
- VirtualBox: VirtualBox is a free software that creates a virtual machine inside your computer. It is good for development because any crash is limited to the virtual machine. We use it in this demo because we build a dApp that will be run by public servers, regardless how the dApp was developed.
- Remix: Remix is a web-based blockchain development environment. It lacks the automated test function of Truffle (another blockchain development environment) but it makes much simpler public deployment of smart contracts.
- smart contract: smart contract is the jargon name of a program that runs the logic that is protected by the blockchain.
- testnet: a testnet is a blockchain that executes like a true and trusted blockchain, with the difference that it costs nothing to use because it is less resilient to hacks and falsification of the contents. This demo is on a public testnet.
- node: a blockchain node analyses and validates each new block of the blockchain, along with its peers. A block contains transactions. The consensus on the blocks, shared by a large number of nodes, makes the transactions (data + process) very difficult to falsify.
- nodeJS: nodeJS is a high-performance JavaScript runtime that supports multi-user web applications. The package manager of nodeJS is named npm and is used to incorporate the desired functions in the React scaffold generic application. The name "node" is unfortunate because it collides with a lot of other programming concepts, in particular with a blockchain "node". Unfortunately we have to live with it.
- Infura: Infura is a service from ConsenSys. It runs a large number of nodes with load-balancing that are connected to the Internet. It takes over the hurdle of having to run a node to interact with the blockchain.