# blockchainj **Repository Path**: dong-jun/blockchainj ## Basic Information - **Project Name**: blockchainj - **Description**: java区块链,实现联盟链溯源系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2021-06-01 - **Last Updated**: 2023-09-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 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产生交易记录区块指令中) 2. 厂家 发布产品(新增数据)-> output 商品ID 厂家送检测 -> 与检查机构产生一次交易 3. 检测机构 (产生检测信息) 4. 商家 以上是节点 5. 用户