Blockchain Java

2025 年 5 月 7 日 | 阅读 8 分钟

区块链是一项新兴技术,在未来几年具有巨大的发展前景。在本教程中,我们将简要介绍区块链的基本概念。我们还将创建一个基本的 Java 区块链程序,以了解其在编程世界中的工作原理。

什么是区块链?

区块链是记录的不断增长的列表,称为块,它们使用密码学进行链接和保护。

区块链是现代技术,以通过密码学和加密货币(如比特币)连接的块数据的形式存储数据。它由Stuart Haber 和 W. Scott Tornetta 于 1991 年推出。它是一个链表,其中节点是区块链中的块,引用是链中前一个块的哈希。在处理链表时,引用是加密哈希。引用基本上就是对象。因此,每个节点将存储另一个节点变量,它将是下一个节点的引用。在这种情况下,引用是加密哈希。

区块链使用哈希指针来引用长列表中的前一个节点。我们为每个节点分配一个哈希,因为这是我们识别它们的方式。

生成哈希时,会使用 SHA256 算法。该算法最重要的优点之一是它是通用的,所以它是一个通用的加密哈希函数,其中输入可以是任何东西。

  1. 确定性:这意味着如果我们对相同的输入应用相同的哈希函数 (SHA256),则输出必须相同。
  2. 单向性:使用给定的哈希算法生成哈希很容易,但另一方面,恢复原始输入却很难(耗时)。它就像一个陷门函数。
  3. 无碰撞性:SHA256 没有碰撞(好吧,有,但概率极低)。这意味着没有两个不同的输入共享相同的输出哈希,这很好。我们要使这些哈希独一无二,这就是我们识别区块链中块的方式。
  4. 雪崩效应:输入的微小变化会导致输出哈希完全不同。否则,密码分析师可以完全根据输出预测输入。

区块链块图

让我们借助图表来理解区块链的概念

Blockchain Java
  • 创世块:区块链中的第一个块称为创世块。该软件构建了它。所以,例如,在处理比特币加密货币时,比特币本身创建了第一个块。该块没有关联的数据。前一个哈希值全为零。当然,它有一个哈希值。例如:哈希 = 056FH
  • 块 1:区块链中的下一个块将包含一些数据。例如,它可以包含交易数据。前一个哈希包含创世块的哈希值。因此前一个哈希 = 056FH
    每个节点都有一个哈希。因此,在这种情况下,第一个块的哈希 = HJI66
  • 块 2:下一个块也将包含其他交易的数据。前一个哈希值将是块 1 的哈希。这就是为什么我们一直在讨论引用是加密哈希。因此前一个哈希 = HJI66
    第二个块将包含其自身的哈希值。因此哈希 = ZU77F。
  • 块 3:它还将包含交易数据。前一个哈希将是前一个块的哈希。因此前一个哈希 = ZU77F。
    第二个块将包含其自身的哈希值。因此哈希 = ZU77F。

所以基本上,这就是底层数据结构。我们有各种块,它们存储数据,例如加密货币交易。每个块都有两个哈希,即前一个节点的哈希和实际块的哈希值。而这些哈希值将是前一个块的引用。

在 Java 中实现区块链

虽然我们在 Java 中实现区块链,但您也可以使用您喜欢的 OOPs(面向对象编程)语言编写代码。

步骤 1:定义常量

首先,让我们看看常量。在此程序中,我们将创建一个私有构造函数以防止此类被实例化,因为我们将存储公共、静态和最终变量,例如难度、矿工奖励以及第一个块(称为创世块)的前一个哈希值。

请参阅以下程序,在 Java 中创建常量

Costant.java

步骤 2:生成哈希

在此步骤中,我们将实现 SHA256Helper。在 Java 中实现此过程非常方便,因为我们依赖 Java 安全的内置方法和类。

首先,我们将导入 MessageDigest,然后为我们的区块链生成哈希。

问题:有多少个 SHA256 哈希?

答案:一个哈希在内存中占用 256 位,值为 0 和 1。因此,我们可以得出结论,哈希的总数为 2^256。如果您处理十六进制值,则有 64 个十六进制字符;因此,它产生 16^64 个哈希值。

请参阅以下程序,在 Java 中生成区块链哈希

SHA256Helper.java

步骤 3:创建块

块是区块链的基本构建块。这些块根据哈希值以加密方式链接在一起。要创建一个块,我们会实现一个 Block 类,并在该类中定义几个变量,例如块的 ID、时间戳、块的哈希、区块链中的前一个哈希、交易和随机数。

请参阅以下程序,在 Java 中创建块

Block.java

步骤 4:实现区块链

在此程序中,我们将生成的块存储在 ArrayList 中。

BlockChain.java

步骤 5:矿工程序

挖矿是区块链和加密货币(如比特币)中最重要的概念。挖矿意味着找到正确的哈希以获得给定块的奖励。但关于难度有一些限制。尽管如此,每个矿工都会获得奖励,因为他们正在验证给定的交易。

在 Constant 类中,我们已经将难度定义为 '5',这意味着每个哈希的开头必须有五个前导零。因此,矿工将生成哈希值,直到找到正确的哈希。

问题:在分布式系统中,谁将处理交易?

答案:在分布式系统中,矿工将处理所有交易。

  • 获得奖励并非挖矿的唯一目的;它只是副产品。
  • 挖矿是使区块链成为分布式安全性的机制。
  • 它是关于找到块的正确哈希值并将这些块添加到区块链中。
  • 矿工还负责将块附加或添加到区块链中。

请参阅以下程序,在 Java 中启动挖矿代码

Miner.java

步骤 6:主程序

请参阅以下程序,在 Java 中运行主区块链程序

MainProgram.java

输出

运行主程序以获得以下带有哈希值和奖励值的输出。

Blockchain Java