I鈥檓 sure we all have heard about cryptocurrency and blockchain and how interrelated they are, which is true too, but they are actually very different and can exist independently. Cryptocurrency is more of a product, while blockchain is a technology to facilitate transactions among trust-less parties.
A complete production-ready blockchain application could be large and complicated, but, at its聽heart, it鈥檚 a very simple but powerful concept.聽A blockchain is a collection of blocks which can contain one or more transactions. Each block is hashed, and the hashes are then paired, hashed, paired again, and hashed again until a single hash remains, the Merkle root of a Merkle tree.
Each block stores the hash of the previous block, chaining the blocks together. This ensures a block cannot be modified without modifying all the following blocks. Below is the probably simplest (Hello World) blockchain in Java.
This is a simple block representation (POJO) in Java. It holds data as a聽string but it could be anything that you can imagine, including Ethereum style smart contracts.
package org.demo;
import lombok.Getter;
import lombok.ToString;
import java.util.Arrays;
@Getter
@ToString
public class Block {
private int previousHash;
private String data;
private int hash;
public Block(String data, int previousHash) {
this.data = data;
this.previousHash = previousHash;
// Mix the content of this block with previous hash to create the hash of this new block
// and that's what makes it block chain
this.hash = Arrays.hashCode(new Integer[]{data.hashCode(), previousHash});
}
}
And below is a simple blockchain implementation with very basic validation functionality.
package org.demo;
import java.util.ArrayList;
import java.util.List;
public class BlockChain {
public static void main(String[] args) {
List blockChainList = new ArrayList();
Block genesis = new Block("BlockChain", 0);
blockChainList.add(genesis);
Block helloBlock = new Block("Hello", blockChainList.get(blockChainList.size()-1).getHash());
blockChainList.add(helloBlock);
Block worldBlock = new Block("World", blockChainList.get(blockChainList.size()-1).getHash());
blockChainList.add(worldBlock);
Block dZoneBlock = new Block("DZone", blockChainList.get(blockChainList.size()-1).getHash());
blockChainList.add(dZoneBlock);
System.out.println("---------------------");
System.out.println("- BlockChain -");
System.out.println("---------------------");
blockChainList.forEach(System.out::println);
System.out.println("---------------------");
System.out.println("Is valid?: " + validate(blockChainList));
System.out.println("---------------------");
// corrupt block chain by modifying one of the block
Block hiBlock = new Block("Hi", genesis.getHash());
int index = blockChainList.indexOf(helloBlock);
blockChainList.remove(index);
blockChainList.add(index, hiBlock);
System.out.println("Corrupted block chain by replacing 'Hello' block with 'Hi' Block");
System.out.println("---------------------");
System.out.println("- BlockChain -");
System.out.println("---------------------");
blockChainList.forEach(System.out::println);
System.out.println("---------------------");
System.out.println("Is valid?: " + validate(blockChainList));
System.out.println("---------------------");
}
private static boolean validate(List blockChain) {
boolean result = true;
Block lastBlock = null;
for(int i = blockChain.size() -1; i >= 0; i--) {
if(lastBlock == null) {
lastBlock = blockChain.get(i);
}
else {
Block current = blockChain.get(i);
if(lastBlock.getPreviousHash() != current.getHash()) {
result = false;
break;
}
lastBlock = current;
}
}
return result;
}
}
That鈥檚 it for now. Hope it helps. Happy Coding!
文章来源于互联网:A Simple Blockchain in Java
发布者:小站,转转请注明出处:http://blog.gzcity.top/4243.html
评论列表(4条)
Your point of view caught my eye and was very interesting. Thanks. I have a question for you.
Thank you for your sharing. I am worried that I lack creative ideas. It is your article that makes me full of hope. Thank you. But, I have a question, can you help me?
Лучшие 10 программ https://www.cctvfocus.ru для видеонаблюдения. Программное обеспечение для видеонаблюдения. При выборе программного обеспечения важно учитывать наличие функции обнаружения объектов с использованием искусственного интеллекта.
Лучшие 10 программ https://www.cctvfocus.ru для видеонаблюдения. Программное обеспечение для видеонаблюдения. При выборе программного обеспечения важно учитывать наличие функции обнаружения объектов с использованием искусственного интеллекта.