1.What Encryption is used in Blockchain ?
2. What is Asymmetric Encryption ?
It’s an encryption technique which uses public key and private key to encrypt /decrypt data. It’s also called Public Key cryptography.
3. How does Asymmetric Encryption works ?
Assume there are two participants A and B , where A wants to share a message to B . To encrypt and share the message over the network the following happens.
a) Both A and B creates their own public key and private key .
b) Generated public key is shared between two parties , i.e A knows B Public key and B knows A Public key.
c) When A wants to encrypt the message , then A encrypts the message with B Public key(message + B Public key) , which can be only decrypted by B with it’s private key.
4) How is Asymmetric Encryption / Public key cryptography used in Blockchain ?
Whenever a transaction is recorded between two parties A and B ,then following rule applies
Encrypted message = F(M, Privatekey (A)) will always be equal to F( Encrypted message, publickey(A)).
5) How are Public / Private Key generated ?
It’s generated via RSA Algorithm , In specific ECDSA algorithm is used to generate random prime numbers that influences decision making of RSA.
It’s a light-weight protocol that can be used to communicate between D-Apps. It’s ideal for limited message transfer that would last long for limited time and it also provides encryption during message transfer.
Configuring Whisper is only available via geth console(consumable via Web3) ,but not with solidity (might come up in future ).
Usage : https://github.com/ethereum/wiki/wiki/Whisper-Overview
It’s a distributed de-centralized storage mechanism. Storing large piece of data is always costly in blockchain and Swarm provides a decentralized network where you could store all the large piece of information and get back the hash and push the hash to blockchain instead dumping all of the data to the blockchain. IPFS and Filecoin are other example of system like swarm.
Usage : https://swarm-guide.readthedocs.io/en/latest/installation.html
Fixed point numbers is not fully supported in solidity , but the fixed point numbers or fractions are used frequently in contract. For instance when writing a ERC20 Token,you would value 1 token to 0.5 ether and you may have to value token based upon ether paid to the contract as well return excess ethers in fractions. In such cases converting all of your units to “wei(1 ether =1,000,000,000,000,000,000 wei)” ,would ease arithmetic operations .
Assume a case where we want to have a payable function that accepts 0.5 ether or more and all ethers less than 0.5 should get reverted.
Note : ufixed can only be declared and it cannot be either returned or assigned in contract, its not an ideal solution for the problem.
If you use uint types,you would land no where as decimals would be truncated , Instead we can use wei (denomination of ether – 1 ether =1,000,000,000,000,000,000 wei). All of the ethers supplied to the contract defaults to wei, we could take advantage of this and represent our value of token condition in wei as below
|var reqfraction= (1 ether * minvaltoken) / mintokendenomination;
What is Consensus ?
Consensus is a mechanism by which all nodes participating in a network agree upon proposed value by a node.
Most common types of Consensus algorithm in blockchain :
1.Proof of work – Bitcoin
2.Proof of stake – Ethereum
3. Proof of Authority – Ropsten/ Kovan network.
4. PBFT (Byzantie Fault tolerant systems) – Consensus is achieved by selecting node leaders by voting,round robin fashions etc.. (Corda ,Hyperledger).
Explanation of each of consensus algorithm above would be shared as a separate post.
A blockchain is simply a shared ledger that holds transactions and every transactions fits in a block which is of following structure
a) Previous Hash : A Hashpointer that points to previous block ,its null if its genesis block(starting block).
b)Transactions : List of transactions that pertains to current block.
This is generic structure that is used upon various blockchains like bitcoin,ethereum, but they use various parameters along with transactions which would be listed separately in other post.
A node which misbehaves in a distributed decentralized network is called as Byzantine node. All nodes participating in distributed network should be fault tolerant to such Byzantine nodes and the fault tolerance is achieved via various Practical Byzantine Fault tolerance algorithm(POW,POA,POS etc..) .