用Java代码实现区块链技术

比特币很热门——这是多么轻描淡写的说法啊。虽然加密货币的未来有些不确定,但用于驱动比特币的区块链技术也非常流行。区块链的应用范围几乎无穷无尽。可以说,它还有可能破坏企业自动化。关于区块链是如何运作的,有很多信息。我们有一份免费白皮书,介绍区块链技术(无需注册)。本文将重点关注区块链体系结构,特别是演示“不可变、仅附加”分布式账本如何与简化的代码示例一起工作。作为开发人员,与简单地阅读技术文章相比,在理解代码的工作原理时,从代码中看到东西要有用得多。至少对我来说是这样。那么,让我们开始吧!简言之,区块链首先让
摘要由CSDN通过智能技术生成

比特币很热门——这是多么轻描淡写的说法啊。虽然加密货币的未来有些不确定,但用于驱动比特币的区块链技术也非常流行。

区块链的应用范围几乎无穷无尽。可以说,它还有可能破坏企业自动化。关于区块链是如何运作的,有很多信息。我们有一份免费白皮书,介绍区块链技术(无需注册)。

本文将重点关注区块链体系结构,特别是演示“不可变、仅附加”分布式账本如何与简化的代码示例一起工作。

作为开发人员,与简单地阅读技术文章相比,在理解代码的工作原理时,从代码中看到东西要有用得多。至少对我来说是这样。那么,让我们开始吧!

简言之,区块链

首先让我们快速总结一下区块链。一个块包含一些标题信息和一组或一块任何类型数据的事务。链从第一个(起源)块开始。在添加/追加事务时,将根据一个块中可以存储的事务数量创建新的块。

当超过块阈值大小时,将创建一个新的事务块。新区块与前一区块相连,因此称为区块链。

不变性

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

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

...
public class Block<T extends Tx> {
	public long timeStamp;
	private int index;
	private List<T> transactions = new ArrayList<T>();
	private String hash;
	private String previousHash;
	private String merkleRoot;
	private String nonce = "0000";
	
	// caches Transaction SHA256 hashes
    public Map<String,T> map = new HashMap<String,T>();
...

请注意,注入的泛型类型是Tx类型。这允许事务数据发生变化。此外, previousHash 属性将引用前一个块的哈希。 merkleRoot 和 nonce 属性将在稍后进行描述。

块散列

每个块可以计算一个块散列。这本质上是连接在一起的所有块属性的散列,包括前一个块的散列和由此计算出的SHA-256散列。

下面是块中定义的方法。计算散列的java类。

...
public void computeHash() {
     Gson parser = new Gson(); // probably should cache this instance
     String serializedData = parser.toJson(transactions);	  
     setHash(SHA256.generateHash(timeStamp + index + merkleRoot + serializedData + nonce + previousHash));
     }
...

块事务被序列化为JSON字符串,以便在散列之前将其附加到块属性中。

Chai

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值