欢迎访问比特币_区块链-币链视界!

币链视界

用Java开发一个区块链

发布时间:2021-02-23区块链开发评论
导读:在本篇文章中,我们将区块链剥离到基本部分,并使用Java中的POJO创建一个区块链,我们一起来看一看吧。相信你我都听说过加密货币和区块链,以及它们是如何相互关联的,这是

导读:在本篇文章中,我们将区块链剥离到基本部分,并使用Java中的POJO创建一个区块链,我们一起来看一看吧。相信你我都听说过加密货币和区块链,以及它们是如何相互关联的,这是真实的情况。但它们实际上是互相区别并可以独立存在。加密货币更多的是一种产品,而区块链是一种促进无信任团体间交易的技术。

完整的生产型区块链应用非常庞大且复杂,但它的核心是很简单且功能强大的实现。区块链可以包含一个或多个交易的区块集合。每个块被哈希(散列)化,然后哈希配对,哈希再次配对,并再次哈希,直到单个哈希被保留,形成Merkle根。

每个块存储前一个块的哈希,并将区块链接在一起。这可确保所有的区块无法被修改块。

下面我们就用Java,开发最简单的(HelloWorld)区块链。

这是Java中的简单块表示(POJO)。它将数据保存为一个字符串,但它可以是任何你可以想象到的,包括以太坊风格的智能合约。代码如下:

packageorg.demo;importlombok.Getter;importlombok.ToString;importjava.util.Arrays;@Getter@ToStringpublicclassBlock{privateintpreviousHash;privateStringdata;privateinthash;publicBlock(Stringdata,intpreviousHash){this.data=data;this.previousHash=previousHash;//Mixthecontentofthisblockwithprevioushashtocreatethehashofthisnewblock//andthat'swhatmakesitblockchainthis.hash=Arrays.hashCode(newInteger[]{data.hashCode(),previousHash});}}

下面是一个简单的区块链实现,具备基本的验证功能。代码如下:

packageorg.demo;importjava.util.ArrayList;importjava.util.List;publicclassBlockChain{publicstaticvoidmain(String[]args){ListblockChainList=newArrayList();Blockgenesis=newBlock("BlockChain",0);blockChainList.add(genesis);BlockhelloBlock=newBlock("Hello",blockChainList.get(blockChainList.size()-1).getHash());blockChainList.add(helloBlock);BlockworldBlock=newBlock("World",blockChainList.get(blockChainList.size()-1).getHash());blockChainList.add(worldBlock);BlockdZoneBlock=newBlock("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("Isvalid?:"+validate(blockChainList));System.out.println("---------------------");//corruptblockchainbymodifyingoneoftheblockBlockhiBlock=newBlock("Hi",genesis.getHash());intindex=blockChainList.indexOf(helloBlock);blockChainList.remove(index);blockChainList.add(index,hiBlock);System.out.println("Corruptedblockchainbyreplacing'Hello'blockwith'Hi'Block");System.out.println("---------------------");System.out.println("-BlockChain-");System.out.println("---------------------");blockChainList.forEach(System.out::println);System.out.println("---------------------");System.out.println("Isvalid?:"+validate(blockChainList));System.out.println("---------------------");}privatestaticbooleanvalidate(ListblockChain){booleanresult=true;BlocklastBlock=null;for(inti=blockChain.size()-1;i>=0;i--){if(lastBlock==null){lastBlock=blockChain.get(i);}else{Blockcurrent=blockChain.get(i);if(lastBlock.getPreviousHash()!=current.getHash()){result=false;break;}lastBlock=current;}}returnresult;}}免责声明:本文转载仅作分享,版权归原作者所有。如侵权请联系我们删除!

广告位

热心评论

评论列表