用Java代码创建第一个区块链程序

用Java代码创建第一个区块链程序

我们都看到了比特币和其他加密货币的规模。尽管这种在线货币以其波动性而闻名,但其背后的技术有可能从内到外颠覆每个行业。因为区块链有无限的应用范围,它每天都以新的方式出现。

本文中,我们将讨论区块链背后的架构分布式账本工作原理。一旦你亲眼看到,你就会明白为什么这么多开发商把区块链视为一种新常态。我们还将深入学习如何创建自己的(基本)区块链序列,以及一个关于使用工作证明(挖掘)系统的简短教程

理解区块链

首先,在我们亲自尝试之前,我们都需要就区块链是什么以及它是如何工作的达成一致。有标题信息和一组或一块“块”数据。这些数据通常是加密货币世界中的一个交易,但它们是可以调整的。然后,该链从Genesis块开始,并根据存储在一个块中的事务或数据集的数量创建新的块。

一旦达到此阈值,将会创建一个新的块。这个新的链接到了前一个,这就是区块链这个术语的来源。区块链也是不可变的。这是因为每个事务或数据集都涉及SHA-256哈希。块的内容也被散列。这意味着每个块都有一个唯一的标识符,链接块的散列也存储在图中并被散列。

因为区块链是不可变的,所以它们非常安全。几乎不可能搞乱一个。试图伪造交易数据或财产是一个挑战。更重要的是,随着链条的增长,它变得更加安全。摧毁这个系统的技术还不存在,这是个好消息

区块链有三种类型

公共——公共区块链向任何人开放。和交易数据出现在分类账中,这意味着每个人都可以参与共识过程。联邦——与公共区块链相反,联邦不允许每个人都参与共识过程。相反,能够访问分类帐的节点数是有限的。Private ——最后,Private区块链主要用于公司内部。这些权限仅限于可以访问区块链和执行交易的特定成员

交易

接下来,我们来谈谈区块链内部的交易。区块链技术是分布式的。因为它们只是附加的,所以很容易网络中的节点之间复制区块链。虽然节点通常进行点对点的通信(比如比特币),但是也可以通过HTTP和API进行分发。

交易可以是任何东西。它可以有一个执行代码或者只是存储信息。随着新智能合约的推出,您可以看到这项技术正在发挥作用。本质上,这些智能合同是用于促进和验证数字合同的计算机协议。它们有可能成为制造业银行业和其他行业的主流。

我们以比特币为例。对于比特币来说,有一定数量的交易从所有者账户转移到另一个账户。该交易有一个公钥和一个帐户ID来确保其安全性。这些交易被添加到网络中并被集合在一起。虽然它们在共享网络中,但它们本身不在块或链中

这是怎么回事?归根结底,这是一种共识机制。你可能已经知道比特币使用的一种叫做挖矿的机制。共识机制不胜枚举,要一一列举需要很长时间。你需要知道的是,它们是算法模式,收集交易,构建区块,并将这些区块添加到链中进行验证。

如上所述,区块链是区块链或块列表。每个块都有自己的数字签名和前一个块的数字签名。有些还可能包含交易信息等数据。数字签名被称为哈希。每个块自己的散列是根据前一个块计算的。一个改变将影响所有后续的散列。通过计算和比较,我们可以看出区块链是否有效。

因为数据的任何变化都会导致断链,所以我们先创建一个类块,它将构成Buffic chain的基础

公共类块{

公共字符串哈希;

公共字符串前一个哈希

私有字符串数据;

私有长时间戳;

//块构造函数

公共块(字符串数据,字符串previousHash ) {

this.data=数据

这个。前一个哈希=前一个哈希;

this.timeStamp=新日期()。getTime();

}上面的代码以字符串哈希开头,这就是我们制作数字签名的地方。如您所见,前一个哈希将保存最后一个块的哈希,字符串数据将保存整个块数据。因为我们有基础,所以现在我们可以生成一个数字签名。这意味着您必须选择加密算法。对于本例,我们将使用SHA256。为了得到这个结果,我们将导入java.security.MessageDigest。

导入Java。安全。消息摘要;

公共类StringUtil {

公共静态字符串applySha256(字符串输入){

尝试{

消息摘要=消息摘要。getinstance(“SHA-256”);

byte[]hash=摘要。摘要(输入。getbytes(\" UTF-8 \"));

string buffer hex string=new string buffer();//这将包含十六进制的哈希

for(int I=0;我哈希.长度){

字符串十六进制=整数。to hex string(0x ff hash[I]);

如果(十六进制。length()==1)十六进制字符串。追加(“0”);

hexString.append(十六进制);

}

返回十六进制字符串。tostring();

}

捕捉(异常e) {

抛出新的运行时异常(e);

}

}

}这将创建一个字符串操作工具集实用程序类,稍后我们将使用该类。这将获取一个字符串并应用SHA256算法返回生成的签名。有了新的助手,我们可以计算块类中的哈希值。为了计算散列,我们需要使用块的所有部分,我们不想被弄乱。

公共字符串calculateHash() {

字符串计算哈希=字符串实用程序。应用sha 256(

前一个哈希

Long.toString(时间戳)

数据

);

返回计算出的哈希

}

公共块(字符串数据,字符串previousHash ) {

this.data=数据

这个。前一个哈希=前一个哈希;

this.timeStamp=新日期()。getTime();

这个。hash=计算hash();/

}完美的现在是进行测试的时候了。我们需要创建一些块并在屏幕上显示哈希值。这样,我们就知道一切都在正常工作。因为创世纪(第一部)块中没有上一个块,所以我们将输入\" 0 \"作为上一个散列的值。

公共类测试{

公共静态void main(String[] args) {

块基因块=新块(“genesisBlock”,“0”);

System.out.println(\"块一的哈希创世纪街区:号。哈希);

Block Second Block=new Block(“第二块”,创世纪块)。哈希);

系统。出去。println(\" block 2的哈希第二块:英寸。哈希);

Block thirdBlock=新块(\"第三块“,第二块。哈希);

系统。出去。println(\" block 3的哈希第三街区:号。哈希);

}

}您的输出应该有三个块,每个块都有自己的数字签名。您的数字签名将具有不同的值,具体取决于您的唯一时间戳,但您正在取得进展。现在,是将块存储在数组列表中的时候了。同时,我们将输入开源项目并将其视为Json。

导入Java。util。ArrayList

导入com。谷歌。gson。gson builder

公共类测试{

公共静态数组列表块区块链=new ArrayList block();

公共静态void main(String[] args) {

blockchain.add(新块(“创世纪块\",\" 0 \"));

blockchain.add(新块(“第二块“,区块链。得到(区块链。尺寸()-1).哈希));

blockchain.add(新块(“第三块“,区块链。得到(区块链。尺寸()-1).哈希));

字符串区块链JSON=new GsonBuilder().setPrettyPrinting().创建()。托吉森(区块链);

系统。出去。println(blockchainJson);

}

}现在我们在做更多流程。您的输出更接近区块链的预期外观。最后,我们将检查我们的区块链的有效性。我们将在测试类中创建一个ischainvalid()布尔方法。这将遍历到目前为止我们已经创建的所有块,并将比较散列以查看它是否等于计算的散列,等等。

公共静态布尔is cavalid(){

Block当前Block

Block previousBlock

for(int I=1;I block chain . size();i ) {

current block=block chain . get(I);

previous block=block chain . get(I-1);

如果(!current block . hash . equals(current block . calculate hash())){

System.out.println(\"当前哈希不相等\");

返回false

}

如果(!previous block . hash . equals(current block . previous hash)){

System.out.println(\"以前的哈希不相等\");

返回false

}

}

返回true

}使用这段代码,如果对块进行了任何更改,那么您将得到一个错误返回。如果你得到了真实答案,你就成功了。您用唯一的数字签名将所有存储的数据块连接在一起。你可以开始挖掘了。

开始

因为区块链是去中心化的,没有权力机构来制定可接受交易的规则。区块链涉及到一定程度的信任,因为这些交易都存储在一个开放的网络上。虽然这项技术有很多困惑,但正如你在上面看到的,它并没有很多人想象的那么复杂。

随着越来越多的开发者试图解决他们自己的挖掘问题,我们看到更多的工具来帮助他们。Loggly和微软Azure等软件旨在让区块链变得更容易访问。开发人员探索区块链世界有很多原因。首先,上面你也看到了,相对简单易学,在不久的将来会成为一个热门职业。

虽然区块链不是云中的神奇数据库,但它是复杂技术交易的现代解决方案。毫无疑问,这项技术将继续存在。只有时间能告诉我们它在未来将如何继续应用。

原文链接:https://javakk.com/2478.html

版权声明:区块链安全 发表于 2022-07-05 8:53:47。
转载请注明:用Java代码创建第一个区块链程序 | 零零洞洞

暂无评论

暂无评论...