java开发区块链_用Java代码实现区块链

Python

用Java代码实现区块链

比特币很热-这是一种轻描淡写的说法。尽管加密货币的未来不确定,但用于驱动比特币的技术区块链也非常受欢迎。区块链的应用范围几乎无限。可以说,它也有可能破坏企业自动化。有很多信息可以覆盖区块链的工作方式和工作方式。该博客将专注于区块链架构,特别是通过简单的代码示例演示“不变的,仅追加的”分布式分类帐。作为开发人员,与仅阅读技术文章相比,在代码中看到事物对于理解其工作原理可能会更加有用。至少我是这种情况。所以,让我们开始吧!

简而言之的区块链

首先让我们简要介绍一下区块链。块包含一些头信息以及任何类型的数据的交易集或块。该链从第一个(Genesis)块开始。在添加/添加事务时,将基于一个块中可以存储多少个事务来创建新块。

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

不变性

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

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

请注意,注入的泛型类型为Tx。这允许交易数据变化。同样,该previousHash属性将引用前一个块的哈希。的merkleRoot和nonce特性将在一个位进行说明。

区块哈希

每个块可以计算一个块哈希。这实际上是所有块属性串联在一起的散列,包括前一个块的散列和从中计算出的SHA-256散列。

这是在Block.java类中定义的用于计算哈希的方法。

区块交易被序列化为JSON字符串,因此可以在哈希之前将其附加到区块属性中。

连锁,链条

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

通知链属性包含使用类型键入的块的列表Tx。同样,在no arg创建链时,构造函数会创建一个初始的“ genesis”块。这是该newBlock()方法的来源。

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

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

整个区块链通过链的循环验证,以确保区块的哈希仍与先前区块的哈希匹配。

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

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

添加交易

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

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

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

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

交易被添加到网络并合并;他们不是一个障碍或链本身。

这就是区块链共识机制发挥作用的地方。除了本博客的范围之外,还有许多行之有效的共识算法和模式。

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

默克尔树

交易被散列并添加到块中。创建Merkle Tree数据结构以计算Merkle Root哈希。每个块都将存储Merkle树的根,该树是哈希的平衡二进制树,其中内部节点是两个子哈希的哈希,一直到根哈希(即Merkle根)。

该树用于验证大宗交易,如果在任何交易中更改了一点信息,则默克尔根将无效。同样,它们可以帮助以分布式方式传输块,因为该结构仅允许添加和验证整个交易块所需的交易哈希的单个分支。

这是Block.java类中的方法,该方法可在事务列表之外创建Merkle树。

此方法用于计算块的Merkle树根。伴随项目具有Merkle Tree单元测试,该测试试图将事务添加到块中并验证Merkle根是否已更改。这是单元测试的源代码。

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

千羽凡尘

2019.11.26

7455

收藏

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值