主页 > 问什么手机安装不了imtoken > Java用Java代码开发blockchain_blockchain实现

Java用Java代码开发blockchain_blockchain实现

Python

用Java代码实现区块链

比特币很热门——这是轻描淡写的说法。 尽管加密货币的未来不确定,但用于为比特币提供动力的技术区块链也非常受欢迎。 区块链的应用几乎是无限的。 可以说,它还有可能破坏企业自动化。 有很多关于区块链如何以及如何工作的信息。 本博客将重点关注区块链架构,特别是通过简单的代码示例演示“不可变的、只能追加”的分布式账本。 作为开发人员,在代码中查看事物比阅读技术文章更有助于理解它们的工作原理。 至少对我来说是这样。 那么,让我们开始吧!

区块链简而言之

首先简单介绍一下区块链。 一个块包含一些标头信息以及一组或任何类型数据的交易块。 该链从第一个(创世)块开始。 随着交易的添加/添加,新区块将根据一个区块中可以存储的交易数量来创建。

当超过块阈值大小时,将创建一个新的交易块。 新块链接到以前的块,因此称为区块链。

不变性

下列说法错误的是 在火车站_下列关于比特币说法错误的是_下列说法错误的是万有引力常量

区块链是不可变的,因为 SHA-256 哈希是为交易计算的。 块的内容也被散列,提供唯一标识符。 此外,来自链接的先前块的哈希值也存储在块头中并进行哈希处理。

这就是为什么试图篡改区块链块基本上是不可能的,至少在当前的计算能力下是这样。 这是显示块属性的部分 Java 类定义。

请注意,注入的泛型类型是 Tx。 这允许交易数据发生变化。 同样,previousHash 属性将引用前一个块的哈希值。 稍后将描述 merkleRoot 和 nonce 属性。

块散列

每个区块都可以计算出一个区块哈希。 这实际上是所有块属性的哈希值连接在一起,包括前一个块的哈希值和从中计算出的 SHA-256 哈希值。

这是 Block.java 类中定义的用于计算散列的方法。

下列说法错误的是 在火车站_下列说法错误的是万有引力常量_下列关于比特币说法错误的是

区块交易被序列化为 JSON 字符串,因此它们可以在散列之前附加到区块属性。

链条,链条

区块链通过接受交易来管理区块。 当达到预定阈值时,将创建一个块。 这是 SimpleBlockChain.java 的部分实现:

通知链属性包含类型为 Tx 的块列表。 此外,当创建一个没有 arg 的链时,构造函数会创建一个初始的“创世纪”块。 这就是 newBlock() 方法的来源。

这个新的块方法将创建一个新的块实例,用适当的值作为种子,并为其分配前一个块的哈希值(这将是链头的哈希值)。 然后它将返回块。

通过将新块的先前哈希与链的最后一个块(标头)进行比较以确保它们匹配,在将块添加到链之前验证块。 下面是 SimpleBlockchain.java 如何描述这个方法。

下列说法错误的是 在火车站_下列说法错误的是万有引力常量_下列关于比特币说法错误的是

整个区块链通过链的循环链进行验证,以确保该块的哈希值仍然与前一个块的哈希值匹配。

这是 SimpleBlockChain.java validate() 方法的实现。

您会发现很难以任何方式尝试捏造交易数据或任何其他属性。 而且,随着链条的增长,它继续变得非常、非常、非常困难,几乎是不可能的。直到量子计算机可用

添加交易

区块链技术的另一个重要技术点是分布式。 它们只是附属物这一事实有助于在参与区块链网络的节点之间复制区块链。 节点通常以点对点方式通信,如比特币,但不一定是这种方式。 其他区块链实施使用分散的方法,例如使用基于 HTTP 的 API。 但是,这是另一个博客的主题。

交易几乎可以代表任何东西。 交易可以包含执行(即智能合约)或存储和附加有关某种业务交易的信息的代码。

下列关于比特币说法错误的是_下列说法错误的是万有引力常量_下列说法错误的是 在火车站

智能合约:一种旨在以数字方式促进、验证或加强合同谈判或履行的计算机协议。

在比特币的情况下,交易包含所有者账户的金额和其他账户的金额(即账户之间转移的比特币金额)。 公钥和账户ID也包含在交易中,因此可以安全传输。 但这是比特币特有的。

交易被添加到网络并合并; 它们本身不是块或链。

这就是区块链共识机制发挥作用的地方。 在本博客的范围之外下列关于比特币说法错误的是,还有许多完善的共识算法和模式。

挖矿是比特币区块链使用的共识机制。 这是本博客稍后将进一步讨论的共识类型。 共识机制收集交易,用交易构建一个区块,并将该区块添加到链中。 然后,链将在将新交易块添加到链之前验证它们。

默克尔树

下列说法错误的是 在火车站_下列关于比特币说法错误的是_下列说法错误的是万有引力常量

交易被散列并添加到块中。 创建一个 Merkle Tree 数据结构来计算 Merkle Root 哈希。 每个块将存储 Merkle 树的根,Merkle 树是哈希的平衡二叉树,其中内部节点是两个子哈希的哈希下列关于比特币说法错误的是,一直到根哈希(即 Merkle 根)。

这棵树是用来验证大块交易的,如果在任何交易中改变了一位信息,默克尔根就会失效。 此外,它们还可以帮助以分布式方式传输区块,因为该结构只允许添加和验证整个交易区块所需的交易哈希的单个分支。

这是 Block.java 类中的方法,它从交易列表中创建一个 Merkle 树。

该方法用于计算块的 Merkle 树根。 配套项目有一个 Merkle Tree 单元测试,它尝试将事务添加到块并验证 Merkle 根是否已更改。 这是单元测试的源代码。

该单元测试模拟验证交易,然后在共识机制之外的块中更改交易,即如果有人试图更改交易数据。

千羽凡尘

2019.11.26

7455