/LedgerYi

A user-friendly distributed ledger platform.

Primary LanguageJavaGNU Lesser General Public License v3.0LGPL-3.0

CodeFactor tokei

LedgerYi

LedgerYi是一个灵活、极简、开箱即用的开源分布式账本框架,可用于私有链、公有链、联盟链各个场景的区块链平台构建。

LedgerYi 具有以下特性:

  1. 开箱即用,2分钟一键启动
  2. 极简易用,10分钟上手,快速进入业务开发。
  3. 开源开放,社区开源共建,链改零门槛。
  4. 生态互联,解构局域网式的”区块链孤岛”,生态开放、价值互联。

RoadMap

LedgerYi版本规划分为五个阶段:Incubation、Workable、Harmony、Autonomy、Rebirth,各版本核心功能如下:

网络和部署说明

网络结构

LedgerYi网络采用Peer-to-Peer(P2P)的网络架构,网络中的节点地位对等。 网络中的节点有MasterNode、FollowerNode两个种类型,MasterNode作为共识节点,主要用于生成区块,FollowerNode用于同步区块、广播交易。

环境准备

  • 开放UDP端口号,安装Docker
  • 服务器最低配置要求,CPU:2核 内存:4G 硬盘:50G
  • 安装Oracle JDK1.8,暂不支持JDK1.9+,且不支持Open JDK

使用镜像快速部署

拉取镜像

docker pull ledgeryi/ledgeryi:alpha

准备config.conf文件

  • 在node模块中获取config.conf配置文件,修改创世块内容、网络链接信息、签名算法等配置信息。
  • 将修改好的config.conf文件拷贝到'/opt/ledgeryi/data'路径下(路径可自定义)。

启动容器

docker run --rm --name="ledgeryi-master" -d \
      -p 6667:6666 -p 50052:50051 -p 8081:8080 \
      -v /opt/ledgeryi/data:/ledgeryi/data \
      ledgeryi/ledgeryi:alpha -m -c /ledgeryi/data/config.conf

命令行参数说明:

  • -m用来指定该节点是否是超级(共识)节点,默认为false,即FollowerNode
  • -c用来指定自定义配置文件路径

使用JAR包部署

克隆代码

1.克隆最新代码

git clone https://github.com/chainboard/LedgerYi.git

2.切换到master分支

cd LegerYi
git checkout -t origin/master

3.编译代码

mvn clean package -DskipTests

启动节点

1.启动MasterNode

(1)在node模块中获取config.conf配置文件

(2)在localMaster中添加自己的私钥,并在localMasterAccountAddress中设置私钥对应的地址

(3)设置genesis.block.masters中的MasterNode的地址等信息

(4)第1个MasterNode设置needSyncCheck为false,其他可以设置为true

(5)设置node.discovery.enable为true

(6)使用以下命令运行MasterNode

java -Xms128m -Xmx2048m -jar node-1.0-SNAPSHOT.jar --master -c config.conf

命令行参数说明:

  • --master用来指定该节点是否是超级(共识)节点,默认为false,即FollowerNode
  • -c用来指定配置文件路径

2.启动FollowerNode

(1)在node模块中获取config.conf配置文件

(2)设置seed.node.ip.list为MasterNode的地址和端口

(3)设置genesis.block与MasterNode中的genesis.block配置一致

(4)设置needSyncCheck为true

(5)设置node.discovery.enable为true

(6)使用以下命令运行FollowerNode

java -jar node-1.0-SNAPSHOT.jar -c config.conf

使用IDEA运行MasterNode节点

首先克隆代码到本地,然后切换到master分支。

配置IDEA开发环境

  • 安装Oracle JDK1.8,暂时不支持Open JDK
  • 安装Lombok插件

使用步骤

1.克隆最新代码

git clone https://github.com/ledgeryi/LedgerYi.git

2.切换到master分支

cd LedgerYi
git checkout -t origin/master

3.编译代码

mvn clean compile -DskipTests

4.启动MasterNode节点

编译成功后,通过cn.ledgeryi.framework.start.LedgerYiNodeApplication.java路径找到主函数文件,启动一个全节点。

如果需要启动一个共识节点,可手动修改Args.java类的字段private boolean master = true;,master默认为false。

或者在Run/Debug Configurations的Application选项Program arguments添加参数--master

启动成功后,可查看日志验证是否启动成功,日志路径为/logs/node.log

API接口说明

HTTP API接口

启用HTTP API接口功能,需要在配置文件config.conf中设置node.http.ledgerYiNodeEnable = true,默认的http端口是8090。 http api接口请求格式:'http://127.0.0.1:8090/v1/listnodes'

节点

(1)getnodes

类别 说明
作用 查询P2P对等节点
示例 curl -X POST http://127.0.0.1:8090/v1/getnodes
参数说明
返回值 节点列表

(2)getnodeinfo

类别 说明
作用 查看当前节点的信息
示例 curl http://127.0.0.1:8090/v1/getnodeinfo
返回值 节点当前状态的相关信息(省略)

(3)getmasters

类别 说明
作用 查询Master节点列表
示例 curl -X POST http://127.0.0.1:8090/v1/getmasters
参数说明
返回值 所有Master节点列表

区块

(1)getnowblock

类别 说明
作用 查询最新block
示例 curl -X POST http://127.0.0.1:8090/v1/getnowblock
参数说明
返回值 该节点账本的最新block

(2)getblockbynum

类别 说明
作用 按照高度查询block
示例 curl -X POST http://127.0.0.1:8090/v1/getblockbynum -d '{"num" : 100}'
参数说明 num是块的高度
返回值 指定高度的block

(3)getblockbylimitnext

类别 说明
作用 按照范围查询block
示例 curl -X POST http://127.0.0.1:8090/v1/getblockbylimitnext -d '{"startNum": 1, "endNum": 2}'
参数说明 startNum:起始块高度,包含此块;endNum:截止块高度,不包含此此块
返回值 指定范围的block列表

交易

(1)gettransactionbyid

类别 说明
作用 通过ID查询交易
示例 curl -X POST http://127.0.0.1:8090/v1/gettransactionbyid -d
'{"value": "d5ec749ecc2a615399d8a6c864ea4c74ff9f523c2be0e341ac9be5d47d7c2d62"}'
参数说明 交易ID
返回值 交易信息

(2)gettransactioninfobyid

类别 说明
作用 通过ID查询交易信息
示例 curl -X POST http://127.0.0.1:8090/v1/gettransactioninfobyid -d
'{"value": "d5ec749ecc2a615399d8a6c864ea4c74ff9f523c2be0e341ac9be5d47d7c2d62"}'
参数说明 交易ID
返回值 交易信息

RPC API接口

1.区块

(1)getNowBlock

作用:查询最新区块

rpc GetNowBlock (EmptyMessage) returns (Block) {}

(2)getBlockByNum

作用:查询指定高度的区块

rpc GetBlockByNum (NumberMessage) returns (Block) {}

(3)getBlockByLimitNext

rpc GetBlockByLimitNext (BlockLimit) returns (BlockListExtention) {}

2.交易

(1)getTransactionCountByBlockNum

作用:查询指定区块高度的区块中包含的交易数

rpc GetTransactionCountByBlockNum (NumberMessage) returns (NumberMessage) {}

(2)getTransactionById

作用:查询指定交易hash的交易

rpc GetTransactionById (BytesMessage) returns (Transaction) {}

(3)getTransactionInfoById

作用:查询指定交易hash的交易

rpc getTransactionInfoById (BytesMessage) returns (TransactionInfo) {}

(4)createTransaction

作用:创建交易

rpc CreateTransaction (SystemContract) returns (TransactionExtention) {}

(5)broadcastTransaction

作用:广播交易

rpc BroadcastTransaction (Transaction) returns (Return) {}

3.账户

(1)getMasters

作用:查询MasterNode列表

rpc rpc GetMasters (EmptyMessage) returns (MastersList) {}

5.节点

(1)listNodes

作用:查询api所在机器连接的节点

rpc ListNodes (EmptyMessage) returns (NodeList) {}

(2)getNodeInfo

作用:查看节点的信息

rpc GetNodeInfo (EmptyMessage) returns (NodeInfo) {}

License

LedgerYi的开源协议为LGPL-V3.0,详情参见LICENSE