广大读者都听说过比特币,或许还有智能合约,相信大家都非常想了解这一切是如何工作的。这篇文章就是帮助你使用 Java 语言来实现一个简单的区块链。
通过本文,我们将可以:
创建自己的区块链
理解 hash 函数是如何保持区块链的完整性的
如何创造并添加新的块
多个节点如何竞争生成块
通过浏览器来查看整个链
所有其他关于区块链的基础知识
环境准备
因为大多数区块链的产品都是用gradle作为构建工具,而且springboot也渐渐将重心转移到gradle,所以在此使用gradle作为构建部署工具
依赖jar包
jar包名 | 版本 | 用途 |
---|---|---|
spring-boot-starter-web | 2.3.0.RELEASE | 提供web端展示界面 |
knife4j-spring-boot-starter | 2.0.4 | 提供方便快捷的调试页面 |
commons-codec | 1.14 | 编解码工具 |
lombok | 1.18.12 | 简化类结构 |
UML类图
数据模型
Block
我们来定义一个Block类,它代表组成区块链的每一个块的数据模型:
@Getter
@NoArgsConstructor
@ToString
@Slf4j
public class Block implements Serializable{
//当前块下标
private int index;
//块生成时间戳
private long timestamp;
//数据
private String data;
//是这个块
private String hash;
//上一个块通过 SHA256 算法生成的散列值
private String prevHash;
//块生成的构造函数
public Block(BlockList blockList, String data){
this.index = blockList.getLastBlock().getIndex() +