Java程序员也能迅速读懂区块链工作原理,以开源的区块链项目为例

createh52个月前 (02-01)技术教程10

开篇

我关注区块链相关的知识比较多,本身也是出身java的,但市面上的java区块链项目很少,除了新经币是java的,但开源不彻底。所以学java的同学很多人不知道区块链原理。那么今天来调试个简单的区块链开源项目,当然,此区块链项目不能实际区块链项目中哦,很多性能和其他方面有待商榷,但看这个开源项目,区块链原理,你应该是能懂了。需要开源区块链地址源码的,请移步至文章尾部。但运行代码之前,请先把概念看一下。觉得有用就关注转发收藏吧。

概念(开源调试在下面,先介绍概念)

1、区块是区块链的基础单元

2、区块链中区块的基本属性

区块6个属性的说明-Index 区块的索引值,区块链中的唯一键
区块6个属性的说明-Timestamp 区块的时间戳,用于区分区块的产生时间
区块6个属性的说明-Hash 区块的hash值是整个区块各个内容整体计算出的hash值
区块6个属性的说明-Previous Hash 前一个区块的hash值
区块6个属性的说明-Data 区块链的数据存储部分,例如比特币是用来存储交易数据
区块6个属性的说明-Nonce(挖矿原理,比特币难度举例) nonce值是形成有效hash的计算出来的

3、一个java简易区块如下

package cn.wenwuyi.blockchain.pojo;

/**
 * 
 * 类名:Block.java
 * 描述:区块实体类
 * 时间:2018年3月12日 下午7:03:50 
 * @author cn.wenwuyi
 * @version 1.0
 */
public class Block {
 /**
 * 索引
 */
 private int index;
 /**
 * 前一个区块的hash值
 */
 private String previousHash;
 /**
 * 时间戳
 */
 private long timestamp;
 /**
 * 数据,交易数据等
 */
 private String data;
 /**
 * hash值
 */
 private String hash;
 /**
 * nonce值(难度系数)
 */
 private long nonce;

 public Block() {
 }

 public Block(int index, String previousHash, long timestamp, String data, String hash,long nonce) {
 this.index = index;
 this.previousHash = previousHash;
 this.timestamp = timestamp;
 this.data = data;
 this.hash = hash;
 this.nonce = nonce;
 }

 public int getIndex() {
 return index;
 }

 public void setIndex(int index) {
 this.index = index;
 }

 public String getPreviousHash() {
 return previousHash;
 }

 public void setPreviousHash(String previousHash) {
 this.previousHash = previousHash;
 }

 public long getTimestamp() {
 return timestamp;
 }

 public void setTimestamp(long timestamp) {
 this.timestamp = timestamp;
 }

 public String getData() {
 return data;
 }

 public void setData(String data) {
 this.data = data;
 }

 public String getHash() {
 return hash;
 }

 public void setHash(String hash) {
 this.hash = hash;
 }

 public long getNonce() {
 return nonce;
 }

 public void setNonce(long nonce) {
 this.nonce = nonce;
 }

}

4、区块链6层模型如下,币层属于区块奖励层

5、去中心化节点概念

节点其实就是记录各个区块的服务器而已,没那么复杂,唯一不同的是,节点属性基本一致,可做到数据防止抵赖。简单的讲:两个人借钱,有一张借条,借条掉了,其实欠钱那一方完全可以抵赖,但是你把这个借条复制了多份,给你的亲戚朋友,那么欠钱的那个人想抵赖也就抵赖不了了。去中心化服务器也是这个原理。你不能保证某个节点会挂,但是如果节点多了,谁挂都无所谓。

开源区块链项目核心调试

此开源项目是基于spring boot的,从开源地址导入可以直接运行,下面我来演示如何导入和运行的

1、idea导入开源区块链项目

下载完成是这个样子的

2、配置节点信息,注意刚刚down下来的开源项目是默认有三个节点配置的,如下图

此时配置,idea节点相关,然后启动,如下图

节点1配置,把另外两个也配置了,node1,node2和node3,然后启动吧

3、启动 把3个节点全部启动,然后

4、访问localhost:8081查看相应的接口,然后就开始按着接口研究区块链是怎么运行的吧。有挖矿,有转账等。

结语

区块链已经从国家政策层面已经开始全面支持了,如果不了解区块链有可能会被一个时代抛弃,有需要区块链源码的同学,关注,关注,转发收藏吧,然后回复"20191117",我把我调试的开源区块链项目开源开源地址发你。

当然我还调试了其他很多开源项目,感兴趣的可以看看

Java 搭建的开源的spring boot商城系统实战

基于Java spring boot 的区块链开源系统调试实战

Blockchain 区块链技术开发开源教程合集

Java 开源的Springboot 即时通讯 IM 聊天系统调试实战

基于 Java Spring cloud的开源在线教育系统调试实战

前端牛人写的开源的CMS系统调试实战,流体布局兼容手机端浏览器

当然不止这些.....

喜欢开源软件的同学,关注我,准没错

相关文章

一些可以显著提高大型 Java 项目启动速度的尝试

我们线上的业务 jar 包基本上普遍比较庞大,动不动一个 jar 包上百 M,启动时间在分钟级,拖慢了我们在故障时快速扩容的响应。于是做了一些分析,看看 Java 程序启动慢到底慢在哪里,如何去优化,...

有了它、就可以开始做一个简单的Java项目了

今天是刘小爱自学Java的第98天。感谢你的观看,谢谢你。话不多说,开始今天的学习:经过97天的学习,对于JavaSE、数据库以及前端的基本知识,都有了一个大致的了解。在有了这些基础后,就可以开始做J...

javaSSM商城实战项目教程(java商城秒杀思路)

技术准备为了完成这个J2ee项目,需要掌握如下技术,当然也可以以本项目为驱动,哪里不懂,学哪里,其实这也是最好的学习方式(带着目标去学习)JavaJava基础 和 Java中级 的大部分内容前端:HT...

公司使用了6年的Spring Boot项目部署方案 打包 + 一键部署,稳得一批

云服务器我们需要一台云服务器,我之前白嫖过一台丐版的,1 核1G 内存,并且已经安装了宝塔面板。这是从宝塔面板首页看到的服务器配置详情。MySQL登录宝塔面板,点击「数据库」→「添加数据库」,填写数据...

Java实战项目教程:《锋迷商城》项目实战课程500集大戏杀青

威哥昨天的倾盆大雨仿佛在洗刷心灵的创伤是的没有人可以理解 自己心中的痛苦任何人都不是别人的蛔虫错过了金三银四生活还是依旧没有改变我不想再错过金九银十于是乎 我作了一个艰难的决定亲爱的涛哥我要给你生猴子...

京东顶尖架构师手撸Vue+SpringBoot神级项目实战手册,传疯啦

前言:不同终端的兴起,对开发人员的要求越来越高,纯浏览器端的响应式页面已经不能满足用户体验的要求,需要针对不同的终端开发不同的定制版本;为了提升开发效率,前后端分离的需求越来越被重视。内容简介本书以实...