# blockchain **Repository Path**: pymjl_0/blockchain ## Basic Information - **Project Name**: blockchain - **Description**: 一个非常非常简单的区块链实现 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-08-18 - **Last Updated**: 2022-08-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # blockchain ## 介绍 一个非常非常简单的区块链实现 > 一点屁话: > > 最近因为偶然原因开始研究区块链,以前一直对区块链不明觉厉,觉得它很高大上,和人工智能,AI算法一样都是我高攀不起的东西。这几天研究后发现,区块链确实高级,但是却并没有我想象中的那么高深。 > > 为什么这么说呢?因为感觉区块链其实就是一个分布式账本,它的很多思想,概念让我似曾相识。(你想到了什么?没错,就是微服务!)区块链目前所遇到的问题其实也是很多分布式微服务所遇到的问题,什么强一致性啊,拜占庭将军问题啊,加密解密啊,这些概念我都熟啊,不是我想象中的那样难以理解。(虽然我还是很菜就是了,这几天连入门可能都算不上,最多是从门里面挖了个同,初步的了解了下区块链的一些机制和思想) > > 至于为啥要说这么多?那是因为我希望大家别被“新技术”这几个字给唬住了(好吧,我承认之前就是被“新技术”唬住了,觉得它难到我根本入门都不可能入门的那种),新技术也是从以前的技术发展演变过来的,肯定是有一些共同之处的,我们应该耐下心来去学习这些新的思想,保持自己的技术敏感度。 至于区块链的一些概念我就不再此赘述,下面的博文我觉得写得蛮不错的 参考博文: [基于Java开发一套完整的区块链系统](https://blog.csdn.net/m0_61926454/article/details/124413808) [可能是最简单的 区块链入门教程——阮一峰 ](https://www.cnblogs.com/imsoft/p/blockchain.html) [一文弄懂区块链技术原理](https://zhuanlan.zhihu.com/p/391590407) ## 安装教程 1. git拉取 2. 下载压缩包 ## 使用说明 ### 配置节点 我们这个项目使用了`websocket` 来实现简单的节点与节点之间的通信,所以我们需要对idea进行一些额外的配置来仿造节点与节点之间的通信情景 1. 点击idea右上角的`Edit Configurations` ![image-20220821170019605](https://pymjl.oss-cn-shanghai.aliyuncs.com/picgo/image-20220821170019605.png) 2. 点击`+` 号 ![image-20220821170108770](https://pymjl.oss-cn-shanghai.aliyuncs.com/picgo/image-20220821170108770.png) 3. 点击`Main Class` 右边的三个点,然后配置自己的主启动类 ![image-20220821170210779](https://pymjl.oss-cn-shanghai.aliyuncs.com/picgo/image-20220821170210779.png) 4. 然后设置对应的参数,如图: ![image-20220821170259250](https://pymjl.oss-cn-shanghai.aliyuncs.com/picgo/image-20220821170259250.png) 参数解释: - `server.prot` :覆盖`Spring Boot` 的端口号 - `block.address` :连接的`websocket` 地址,ip地址请注意配置成你的本机ip(本机服务作为Client) - `block.port` :`webscoket` 服务端监听的端口(本机服务作为Server) 5. 启动项目 ![image-20220821170702873](https://pymjl.oss-cn-shanghai.aliyuncs.com/picgo/image-20220821170702873.png) ![image-20220821170714834](https://pymjl.oss-cn-shanghai.aliyuncs.com/picgo/image-20220821170714834.png) ### 使用ApiFox测试 1. 先设置好对应的环境 ![image-20220821170825488](https://pymjl.oss-cn-shanghai.aliyuncs.com/picgo/image-20220821170825488.png) 2. 创建对应的接口 3. 因为没有做持久化,所以必须先选一个节点创建创世节点 ![image-20220821171016693](https://pymjl.oss-cn-shanghai.aliyuncs.com/picgo/image-20220821171016693.png) 4. 使用该节点挖一次矿 ![image-20220821171130349](https://pymjl.oss-cn-shanghai.aliyuncs.com/picgo/image-20220821171130349.png) 我们看一看后台的日志输出: ![image-20220821171157454](https://pymjl.oss-cn-shanghai.aliyuncs.com/picgo/image-20220821171157454.png) 这里使用的最简单的工作量证明机制,算出的hash前四位是0就表示成功 然后挖到矿之后会将新的区块广播给其他节点 我们再来看看节点8080的日志输出: ![image-20220821171338884](https://pymjl.oss-cn-shanghai.aliyuncs.com/picgo/image-20220821171338884.png) 8080节点收到消息后会先检查自己本地的区块高度,如果自己本地区块链的高度低于新的区块或者自己本地区块链为null,那么该节点会再一次发送广播请求,请求完整的区块链 5. 接下来我们切换环境,查看节点8080的区块链 ![image-20220821171613546](https://pymjl.oss-cn-shanghai.aliyuncs.com/picgo/image-20220821171613546.png) 可以看到,8080的区块链和8090的区块链完成了同步 ## 小结 如此,最简单的区块链机制便已经实现。感兴趣的同学可以再深入完善,比如持久化,消息的加密解密等等