/blockchainj

java区块链,实现联盟链溯源系统

Primary LanguageJava

java实现区块链溯源系统

关系型数据库操作太过复杂,希望可以模仿Hyledger Fabric使用非关系新数据库作为状态数据库

使用技术:spring,springboot,websocket,springmvc,mybatis,sqlite,levelDB,

开发目的

实现分布式存诸,联盟角色共同维护一个数据库

区块链

区块中包含指令,指令是对数据库操作称为HXSQL(对sql语句的封装)

智能合约

解析并执行HXQL

HXQL对象(执行操作,操作对象,操作类容)

存在问题:HXQL并不能完全解析成sql,只能转化成对应的ORM操作

共识机制

pbft 算法

所有角色=3f+1(f为最大容错率)

存诸层

​ 采用两个本地轻量级数据库分别存储,区块链和共同维护的数据库

  1. levelDB(键值对存储)

    存储区块信息,以及最后一个区块的hash

  2. sqlite(关系型数据库)//应用层数据区

    1. 角色 (公钥(id),权限列表,状态,内容) 权限 商品(hash,描述(content),) 交易

网络传输

​ 创建NodeSeedServer(节点种子服务器) 节点注册,监听节点变化,通知各节点,实现P2P(端对端,节点与每个节点建立websocket长连接实现网状模型)网络

​ 执行流程:

  1. 节点携带局域网IP 连接种子服务器(websocket长连接),服务器记录IP

  2. 种子服务器响应当前所有几点给连接节点

  3. 连接节点与服务器返回的所有节点相连(与自身也相连)

  4. 监听服务器几点变化

    TODO(未做):

    客户端下线重连

商品流程(交易)

  1. 生产
  2. 检验
  3. 出厂 --> 出现分支(商品与批次分离)
  4. 销售
  5. 运输
  6. 使用 ##用户查询商品交易信息(流程)

开发记录

区块链就是将区块链起来保存在sqlite数据库中 通过公钥(数字身份证书)连接服务器获取权限信息 1.注册当前节点ip(方便广播) 广播有新节点加入

各节点运行 -- 创世块内容绝对可信 有以下几个角色

联盟角色

  1. CA(颁发证书)

在创世块中注册ca,建初始化表

CA权限,对 role 新增 (颁发数字身份证书),修改

角色注册,填写信息(申请证书->与ca产生交易记录区块指令中)

  1. 厂家 发布产品(新增数据)-> output 商品ID 厂家送检测 -> 与检查机构产生一次交易
  2. 检测机构 (产生检测信息)
  3. 商家 以上是节点
  4. 用户