mirror of
https://gitee.com/BTAJL/repchain.git
synced 2024-11-30 02:38:24 +08:00
Migrated repository
_windows | ||
api_req | ||
codestyles | ||
conf | ||
custom_lib | ||
docs | ||
jks | ||
jks_ca | ||
json | ||
licenses | ||
pfx | ||
project | ||
shell | ||
src | ||
.gitignore | ||
assembly.sbt | ||
build.sbt | ||
debugger.renderers.xml | ||
dependencyLicenseInfo.txt | ||
FQA.md | ||
LICENSE | ||
NOTICE | ||
README.md | ||
swagger-ui.png | ||
TODO.md | ||
usageView.xml |
RepChain
参考阅读
- akka ——系统内部模块采用akka actor实现
- akka remoting security ——节点之间安全通信采用akka Remote支持的TLS
- akka serialization——节点之间消息交互采用protobuf序列化
- scalaPB——从proto定义生成Scala类的工具
- protobufjs——在web端根据proto定义,反序列化protobuf字节流
- swagger-scala——API支持Swagger UI
- json4s——在API层提供输入对象的json反序列化,返回结果的json序列化
- d3.js-force layout——入/离网节点的自动布局
- leveldb for java——存取Blocks、Transactions索引
- java security——hash、签名、密钥对及证书管理均采用jdk内置方法
安装
- install zuluJdk11+
- install Python
- install Scala
- install SBT
- install Idea IDE
- install keystore-explorer ——用于生成密钥对的工具,非必须
- install protobuf editor——编辑protobuf定义工具,非必须
分层架构
- 数据层:负责数据格式定义,数据结构采用Protocol Buffers定义文件,并以此为基础实现数据的交换、验证、存储、读取及检索
- 网络层:采用JDK内置的TLS实现,支持入网许可验证,在此基础上进行去中心化的gossip组网,网络传播支持P2P和Pub/Sub两种方式
- 共识层:完成区块的输入共识和输出共识。采用兼顾实时性和安全性的CFRD算法,既照顾到交易的实时性要求,又能在一定程度防止节点串通作弊;输入共识对入块的交易顺序达成一致,输出共识对交易顺序执行的结果达成一致
- 合约层:为合约执行提供上下文环境,支持合约的动态部署、运行时加载和编译执行
- API层:提供外部接口,允许第三方应用以Restful的形式与系统交互,并允许开发者通过Swagger UI进行在线测试。API层提供交易签名提交、区块和交易检索等基本功能
- 监控层:在区块链网络中收集事件/日志,并将其以Protocol Buffers的格式推送至Web端,以H5图形技术进行实时状态的可视化展示和日志回放
运行
下载项目到本地
- git clone https://gitee.com/BTAJL/repchain.git
导入
- 打开Idea IDE,File->New->Project or Project from VersionControl
- 使用Idea的sbt插件导入
- 使用sbt shell 进行compile
- 右键单击 rep.app.Repchain.scala,Run 'RepChain'(单机组网4个节点)
- 运行配置VM参数 -Dlogback.configurationFile=conf/logback.xml (使logback配置生效)
- 查看实时图 http://localhost:8081/web/g1.html
- 查看API http://localhost:8081/swagger/index.html
修改配置
- 生成RepChain节点密钥对及信任证书列表(见《RepChain开发者指南》 2.1.5)
- 制作创世区块(见《RepChain开发者指南》 2.1.6)
- 调整系统配置参数(见《RepChain开发者指南》 2.1.7)
打包
- assembly
- 打包成jar包,进行分布式部署