相信大家都听说过加密货币和区块链,以及它们是如何相互关联的,这是真实的情况。但它们实际上是互相区别并可以独立存在。加密货币更多的是一种产品,而区块链是一种促进无信任团体间交易的技术。

完整的生产型区块链应用非常庞大且复杂,但它的核心是很简单且功能强大的实现。区块链可以包含一个或多个交易的区块集合。每个块被哈希(散列)化,然后哈希配对,哈希再次配对,并再次哈希,直到单个哈希被保留,形成Merkle根。

每个块存储前一个块的哈希,并将区块链接在一起。这可确保所有的区块无法被修改块。

下面我们就用Java,开发最简单的(Hello World)区块链。

这是Java中的简单块表示(POJO)。它将数据保存为一个字符串,但它可以是任何你可以想象到的,包括以太坊风格的智能合约。代码如下:

package org.demo;

import lombok.Getter;

import lombok.ToString;

import java.util.Arrays;

@Getter@ToString

public class Block {

private int previousHash;

private String data;

private int hash;

public Block(String data, int previousHash) {

this.data = data;

this.previousHash = previousHash;

// Mix the content of this block with previous hash to create the hash of this new block

// and that's what makes it block chain

this.hash  = Arrays.hashCode(new Integer[]{data.hashCode(), previousHash});

}

}

下面是一个简单的区块链实现,具备基本的验证功能。代码如下:

package org.demo;

import java.util.ArrayList;

import java.util.List;

public class BlockChain {

public static void main(String[] args) {

List blockChainList =  new ArrayList<>();

Block genesis = new Block("BlockChain", 0);

blockChainList.add(genesis);

Block helloBlock = new Block("Hello", blockChainList.get(blockChainList.size()-1).getHash());

blockChainList.add(helloBlock);

Block worldBlock = new Block("World", blockChainList.get(blockChainList.size()-1).getHash());

blockChainList.add(worldBlock);

Block dZoneBlock = new Block("DZone", blockChainList.get(blockChainList.size()-1).getHash());

blockChainList.add(dZoneBlock);

System.out.println("---------------------");

System.out.println("- BlockChain -");

System.out.println("---------------------");

blockChainList.forEach(System.out::println);

System.out.println("---------------------");

System.out.println("Is valid?: " + validate(blockChainList));

System.out.println("---------------------");

// corrupt block chain by modifying one of the block

Block hiBlock = new Block("Hi", genesis.getHash());

int index = blockChainList.indexOf(helloBlock);

blockChainList.remove(index);

blockChainList.add(index, hiBlock);

System.out.println("Corrupted block chain by replacing 'Hello' block with 'Hi' Block");

System.out.println("---------------------");

System.out.println("- BlockChain -");

System.out.println("---------------------");

blockChainList.forEach(System.out::println);

System.out.println("---------------------");

System.out.println("Is valid?: " + validate(blockChainList));

System.out.println("---------------------");

}

private static boolean validate(List blockChain) {

boolean result = true;

Block lastBlock = null;

for(int i = blockChain.size() -1; i >= 0; i--) {

if(lastBlock == null) {

lastBlock = blockChain.get(i);

}

else {

Block current = blockChain.get(i);

if(lastBlock.getPreviousHash() != current.getHash()) {

result = false;

break;

}

lastBlock = current;

}

}

return result;

}

}

希望本文能帮到你,编码愉快。

区块链与java的应用开发_用 Java 开发一个区块链相关推荐

  1. 以太坊开发入门,如何搭建一个区块链DApp投票系统

    点击关注异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识 第一节 概述 对于初学者,需要了解以太坊开发相关的基本概念,另外就是如何构建一个基于以太坊的完整去中心化应用例如一个区块链投票 ...

  2. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  3. 北京java研发平均工资_各地java开发工程师平均工资 北京高级java开发工程师工资2万多...

    原标题:各地java开发工程师平均工资 北京高级java开发工程师工资2万多 java开发工程师工资水平一直都是程序员们比较关注的话题,毕竟java是最热门的编程的语言.每个城市的由于经济水平的差距, ...

  4. java智能卡开发_《Java智能卡原理与应用开发》PDF 下载

    图书目录: 封面 扉页 版权页 内容简介 出版说明 前言 序 目录 第一部分 Java智能卡编程基础 第1章 绪言 1.1 智能卡简介 1.2 Java智能卡简介 1.3 发展前景 1.3.1 智能卡 ...

  5. java发展前景选兄弟连_对于Java你了解多少 兄弟连带你了解Java开发工程师现状...

    Java作为现在最受欢迎的编程语言之一,在互联网行业甚至其他各行各业都应用广泛.正是因为这样,市场对Java工程师的需求量就很高.那么,对于Java编程语言,你了解多少?什么是Java开发工程师你又知 ...

  6. java后台转前端_从后端开发转职前端开发,我都经历了些什么?

    原标题:从后端开发转职前端开发,我都经历了些什么? 从前端转行后端 从后端开发转职到前端开发真的不容易. 特别是当你已经习惯了后端开发的工作模式,习惯了构建数据结构,编写类似于测试驱动开发的测试,习惯 ...

  7. java注解的开发_使用Java注解开发自动生成SQL

    使用注解开发的好处就是减少配置文件的使用.在实际过程中,随着项目越来越复杂,功能越来越多,会产生非常多的配置文件.但是,当配置文件过多,实际维护过程中产生的问题就不容易定位,这样就会徒劳的增加工作量. ...

  8. java中间件源码_《Java中间件技术及其应用开发》PDF下载

    资源名称:<Java中间件技术及其应用开发>PDF 下载 < 内容简介······ 本书使用丰富的案例介绍了使用Java技术进行中间件编程的方法及技巧,包括JSP.Java serV ...

  9. 虚拟机 java 开发_深入浅出 Java 虚拟机 · 通往高级 Java 开发的必经之路

    第一章 JVM 内存模型 Java 虚拟机(Java Virtual Machine=JVM)的内存空间分为五个部分,分别是:程序计数器 Java 虚拟机栈 本地方法栈 堆 方法区. 下面对这五个区域 ...

  10. 美国道富java开发面试题_从事Java开发五年,面试9家拿到7家offer,1096面试+67笔试题...

    个人情况 时间总是在不经意间流逝,我们也在人生的旅途上不断前行,转眼间在微软的美国总部工作近两年了.生活总给我们带来新的挑战,同时也有新的惊喜.这两年在陌生的国度里用着不太流利的英语和各种肤色的人交流 ...

最新文章

  1. appium: adb server is out of date.killing
  2. 拉勾启源老师mysql讲义,【拉勾教育数据分析实战训练营】--Tableau学习笔记-重点回顾1...
  3. android使组件居中,Android图文居中显示控件使用方法详解
  4. java贪吃蛇_如何用Java还原童年回忆?在线教你完成贪吃蛇小游戏
  5. 20165313 《Java程序设计》第七周学习总结
  6. Linux系统编程--1(进程和程序,CPU和MMU,PCB,进程状态)
  7. 为什么大厂都在造车?原因找到了
  8. Android开发笔记(八十七)几个修饰关键字
  9. 【bzoj3676】
  10. 【Beam Search】seq2seq中的beam search算法过程
  11. 【KG】知识图谱基本概念工程落地常见问题
  12. pythonidechart_django+echart数据动态显示的例子
  13. php生成缩略图实例,(实用篇)PHP生成缩略图的方法实例
  14. Python语言的适用范围
  15. 垃圾回收器CMS和G1
  16. Excel基础(14)条件格式与公式
  17. linux中i的英文单词,i的发音有几种
  18. imfindcircles
  19. Orcal数据库中ORA-01861: 文字与格式字符串不匹配
  20. Redis中“万金油“的string,为什么不好用了

热门文章

  1. 关于linux下anaconda的pip包及其他包的本地更新方法
  2. 三维重建-立体校正(Recitification)
  3. 轻量化、松耦合的手持RGB-D室内环境实时重建系统
  4. 4、vueJs基础知识04
  5. 【转】HEIF图片存储格式探秘
  6. DevExpress 隐藏Ribbon中barbuttonItem的SuperTip(2)
  7. (转)FTP操作类,从FTP下载文件
  8. MFC学习笔记(1)
  9. 知识图谱中的结构信息建模
  10. Python批处理MODIS数据并计算NDVI