Qilin-Evidence 可信存证服务平台

一、设计概述

可信存证服务平台是链服生态中由域乎官方提供的可信存证服务,底层使用的是域乎开放联盟链,是直接提供给外部机构使用的业务产品,承担着公司创收的⽬标任务。

业务流程

../../_images/evid.png存证业务流程

功能概述

系统主要功能包括:

  • 文件(PDF等等)、文本(文字内容)、摘要(文件、文本的hash值)的上链存证
  • 存证内容的核验

使⽤者包括:

  • 直接使用存证服务的企业用户
  • 进行系统对接的企业系统

⾮功能约束

……系统未来预计⼀年⽤户量达到……, ⽇订单量达到……, ⽇PV达到……, 图⽚数量达到 ……。

  1. 查询性能⽬标:平均响应时间<300ms,95%响应时间<500ms,单机TPS>100; 2. 下单性能⽬标:平均响应时间<800ms,95%响应时间<1000ms,单机TPS>30;
  2. ……性能⽬标:平均响应时间<800ms,95%响应时间<1000ms,单机TPS>30;
  3. 系统核⼼功能可⽤性⽬标:>99.97%;
  4. 系统安全性⽬标:系统可拦截…… 、……、……攻击, 密码数据散列加密, 客户端数据 HTTPS加密,外部系统间通信对称加密;
  5. 数据持久化⽬标:>99.99999%。

二、详细设计

系统上线时预计部署在公司标准K8S集群中,包含2个deployment服务,1个job服务,占用5~7个pod资源,RDS-MYSQL中占用1个数据库,RDS-REDIS中占用1个数据库,部署2个存证⼦系统,和链服生态系统中的账户服务、钱包服务、交易服务交互,和外部第三⽅(识蛛)的可信时间戳服务交互。

系统架构

../../_images/structure.png存证系统架构图

1. platform admin 创建一个普通用户(iam aggr CreateUser)

2. platform admin 创建一个租户企业,并将刚才创建的普通用户设为 tenant admin(iam aggr CreateTenant)

3. tenant admin 进入租户空间,在基本信息中进行实名认证(iam aggr CreateTenantMeKYC)

4. tenant admin 使用创建存证功能(evid aggr CreateEvidence)

5. 后端 cron job 进行区块链交易状态的确认(evid cron ConfirmEvidence)

6. tenant admin 可以查看到存证记录(evid aggr ListEvidence)

7. 普通用户核验存证记录(evid aggr VerifyEvidence)

创建存证场景系统流程

../../_images/evid-bpmn.png存证系统流程

tenant admin 使用创建存证功能(evid aggr CreateEvidence)

4.1. 获取 tenant admin 默认钱包(wallet service GetWalletMe)

4.2. 获取 tenant admin 企业认证信息(iam service ListTenantsKYC)

4.3. 创建存证事务,附带上企业认证信息,注:4.4存证创建失败,则存证事务作为脏数据存储在数据库中(evid service)

    4.3.1.(二阶段)后续增加识蛛的实名认证,并获取认证的时间戳

4.4. 创建存证,状态(builded)(evid service)

4.5. 调用交易服务发送交易,传入 outTradeId 作为幂等号(transaction service CreateTransaction)

    4.5.1. 创建交易任务,由于存证 outTradeId,所以可以 retry(transaction service CreateTransaction)

    4.5.2. 后台发送交易任务(transaction cron SendTransaction)

        4.5.2.1. Build交易

        4.5.2.2. 交易签名(wallet service Sign)

        4.5.2.3. 发送交易

    4.5.3. 后台确认交易任务(transaction cron ConfirmTransaction)

        4.5.3.1. 后台确认完成后,修改 Record 交易状态。

        4.5.3.2.(后续考虑的性能优化方案)将 outTradeId 已经被确认的消息发送到消息队列,让调用方更实时的获取到交易结果数据。

存证状态确认场景系统流程

../../_images/cron.png存证确认流程图

后端 cron job 进行区块链交易状态的确认(evid cron ConfirmEvidence)

5.1. 查询交易状态(transaction service)

    5.1.1. 存证状态更新(发送中->忽略更新、成功->succeed、失败->failed)。

    5.1.2. 如果查询到的状态为「未找到」,则需要判断数据库中存证创建时间距离当下时间,是否已经超过两分钟,如果超过两分钟则将存证状态更新为 failed,否则忽略更新。

三、子系统1设计(存证聚合子系统)

⼦系统1作为数据存证平台,所有外部请求的服务编排者,与内外部服务交互及数据聚合,最终将数据返回给请求方,其中只包含1个业务聚合组件。

四、子系统2设计(存证基础子系统)

⼦系统2主要的职责是提供中心化的数据存证服务,其中主要包含了4组件。

子系统组件结构关系

../../_images/Component.png组件结构关系

⼦系统2包含4个组件:

  • 组件1(Service)的功能主要是提供业务逻辑处理, 需要依赖组件3、4完成数据持久化的工作, 是⼦系统2的核⼼组件。
  • 组件2(Cron)的功能主要是提供定时任务处理, 需要依赖组件3、4完成数据持久化的工作, 同时还会依赖其他服务service client,来调用其他服务的业务逻辑。
  • 组件3(Model)的功能主要是提供贫血模式的业务数据模型, 不依赖其他组件。
  • 组件4(Data)的功能主要是数据的获取和持久化,其内部分装各种持久化方式,如:mysql、redis、local_cache。

创建存证事务功能组件流程

../../_images/trans.png存证事务

创建存证功能组件流程

../../_images/operation-flow.png存证功能组件流程

组件1类图

../../_images/service.pngservice类图

EvidenceService interface

type EvidenceServiceClient interface {
	CreateEVIDTrans(ctx context.Context, in *CreateEVIDTransRequest, opts ...grpc.CallOption) (*CreateEVIDTransResponse, error)
	CreateDigestEvidence(ctx context.Context, in *CreateDigestEvidenceRequest, opts ...grpc.CallOption) (*CreateDigestEvidenceResponse, error)
	CreateFileEvidence(ctx context.Context, in *CreateFileEvidenceRequest, opts ...grpc.CallOption) (*CreateFileEvidenceResponse, error)
	CreateTextEvidence(ctx context.Context, in *CreateTextEvidenceRequest, opts ...grpc.CallOption) (*CreateTextEvidenceResponse, error)
	GetEvidence(ctx context.Context, in *GetEvidenceRequest, opts ...grpc.CallOption) (*GetEvidenceResponse, error)
	ListEvidences(ctx context.Context, in *ListEvidencesRequest, opts ...grpc.CallOption) (*ListEvidencesResponse, error)
	CreateVerify(ctx context.Context, in *CreateVerifyRequest, opts ...grpc.CallOption) (*empty.Empty, error)
}

组件2类图

../../_images/cron-uml.pngcron类图

组件3类图

../../_images/model.pngmodel类图

Evidence model

type Evidence struct {
	EvidenceId  string    `gorm:"column:evidence_id;primary_key"`
	CreateTime  time.Time `gorm:"column:create_time;default:CURRENT_TIMESTAMP;NOT NULL"`
	EvidtransId string    `gorm:"column:evidtrans_id;NOT NULL"`
	WalletId    string    `gorm:"column:wallet_id;NOT NULL"`
	Title       string    `gorm:"column:title;NOT NULL"`
	EvidType    string    `gorm:"column:evid_type;NOT NULL"` // text,digest,file
	Digest      string    `gorm:"column:digest"`
	Txhash      *string   `gorm:"column:txhash;unique"`
	Status      string    `gorm:"column:status;NOT NULL"` // builded,succeed,failed
	PushTime    time.Time `gorm:"column:push_time"`
	Tsr         int       `gorm:"column:tsr;NOT NULL"`
	Owner       string    `gorm:"column:owner"`
	GroupId     string    `gorm:"column:group_id"`
	TenantId    string    `gorm:"column:tenant_id"`
	VerifyCount int       `gorm:"column:verify_count;default:0;NOT NULL"`
	Extra       string    `gorm:"column:extra"`
}

type EvidenceContent struct {
	EvidenceId string `gorm:"column:evidence_id;primary_key"`
	RawText    string `gorm:"column:raw_text"`
	FilePath   string `gorm:"column:file_path"`
}

Evidtrans model

type Evidtrans struct {
	EvidtransId    string    `gorm:"column:evidtrans_id;primary_key"`
	CreateTime     time.Time `gorm:"column:create_time;default:CURRENT_TIMESTAMP;NOT NULL"`
	OrgName        string    `gorm:"column:org_name;NOT NULL"`
	OrgCode        string    `gorm:"column:org_code;NOT NULL"`
	LegalRepName   string    `gorm:"column:legal_rep_name;NOT NULL"`
	LegalRepIdCard string    `gorm:"column:legal_rep_id_card;NOT NULL"`
	Status         string    `gorm:"column:status;NOT NULL"` // builded,succeed,failed
	Owner          string    `gorm:"column:owner"`
	GroupId        string    `gorm:"column:group_id"`
	TenantId       string    `gorm:"column:tenant_id"`
	Extra          string    `gorm:"column:extra"`
}

type EvidenceTransBinding struct {
	BindId      string    `gorm:"column:bind_id;primary_key"`
	EvidenceId  string    `gorm:"column:evidence_id;NOT NULL"`
	EvidtransId string    `gorm:"column:evidtrans_id;NOT NULL"`
	CreateTime  time.Time `gorm:"column:create_time;default:CURRENT_TIMESTAMP;NOT NULL"`
}

组件4类图

../../_images/dataInterface.pngEvidenceData interface

EvidenceData interface

type EvidenceInterface interface {
	CreateEvidence(*evidence.Evidence) error
	UpdateEvidence(*evidence.Evidence, *db.Filter) error
	SearchEvidence(*db.Filter) ([]*evidence.Evidence, error)
	GetEvidence(evidenceId string) (*evidence.Evidence, error)
	GetEvidenceByTxHash(txHash string) (*evidence.Evidence, error)
	SearchEvidencePaged(filter *db.Filter, limit uint32, offset uint32) ([]*evidence.Evidence, error)

	CreateEvidTrans(*evidence.Evidtrans) error

	CreateEvidContent(*evidence.EvidenceContent) error
	GetEvidContent(evidenceId string) (*evidence.EvidenceContent, error)

	CreateEvidTransBind(*evidence.EvidenceTransBinding) error

	CreateVerify(*evidence.EvidenceVerifyRecord) error
}

五、聚合层接口文档

1.创建可信存证

接口描述:创建存证

接口地址:http://119.3.106.151:10100/v1/app/evidences

请求类型:POST

请求参数:

编号 名称 类型 是否必须 描述
1 tenant_id string 用户的租户id
2 title string 若为文件存证,则此字段为文件名,否则为本次存证的标题
3 content byte 为文件存证或原文存证时必传,要求转为base64格式,摘要存证时不使用本参数
4 digest string 摘要存证时必填
5 evidence_type string 存证类型,文件存证:file, 原文存证:text, 摘要存证:digest, 摘要存证:digest
6 tsr bool 是否使用可信时间戳

响应参数

编号 名称 类型 描述
1 evidence_id string 存证编号

请求实例:

curl -X POST "http://119.3.106.151:10100/v1/app/evidences" \
	-H "accept: application/json" \
	-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2Mjc2MjAwODUsImlhdCI6MTYyNzYxMjg4NSwianRpIjoicXd6bHczeTgyMDduN2wiLCJzdWIiOiJ1aWQtdGVuYW50In0.eNEuMd4A9IWC4tnFOHXIpgknde-Kgt3P_Hpipj9DtGl6kcXj_lhD07En1lXR-AQH1h5faAm9wNrBY50HvlV9Cw" \
	-H "Content-Type: application/json" \
	-d "{ \"tenant_id\": \"tid-yuhu1\", \"title\": \"evidence\", \"content\": \"ZXZpZGVuY2U=\", \"evidence_type\": \"text\", \"tsr\": true}"
{
  "tenant_id": "tid-yuhu1",
  "title": "test-evidence",
  "content": "dGVzdC1ldmlkZW5jZQ==",
  "evidence_type": "text",
  "tsr": true
}

响应示例:

{
  "evidence_id": "evid-testEvid"
}

2.获取存证列表

接口描述:获取我的存证列表

接口地址:http://119.3.106.151:10100/v1/app/evidences

请求类型:GET

请求参数:

编号 名称 类型 是否必须 描述
1 limit uint32 本次查询的限制数量,默认为10
2 offset uint32 本次查询的偏移量,默认为0
3 sort_key string 以什么字段排序,默认create_time
4 reverse bool 倒序还是正序
5 tenant_id uint32 用户的租户id
6 evidence_ids string 存证ids

响应参数

编号 名称 类型 描述
1 evidences array 存证数组
1.1 evidence_id string 存证编号
1.2 txhash string 存证交易哈希
1.3 status string 存证状态,交易已发送:builded, 成功:succeed,失败:failed
1.4 title string 存证标题,若为文件存证则为文件名
1.5 push_time timestamp 存证上链时间
1.6 digest string 存证摘要
1.7 evid_type string 存证类型

请求示例:

curl -X GET "http://119.3.106.151:10100/v1/app/evidences?limit=10&offset=0&tenant_id=tid-yuhu1" \
	-H "accept: application/json" \
	-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2Mjc2MjAwODUsImlhdCI6MTYyNzYxMjg4NSwianRpIjoicXd6bHczeTgyMDduN2wiLCJzdWIiOiJ1aWQtdGVuYW50In0.eNEuMd4A9IWC4tnFOHXIpgknde-Kgt3P_Hpipj9DtGl6kcXj_lhD07En1lXR-AQH1h5faAm9wNrBY50HvlV9Cw"

响应示例:

{
  "evidences": [
    {
      "evidence_id": "evid-testEvid",
      "txhash": "0x58f421bfc90ee6f2b9a3cfe54824dbb7d5b16df59cd972033147936cf86154f7",
      "status": "succeed",
      "title": "test-evidence",
      "push_time": "2021-07-27T08:09:07Z",
      "digest": "http://consoletest.yuhu.tech/data/evidence/12/5/12/evidence_rlV6yYx7JE8g",
	  "evid_type": "text"
    }
  ]
}

3.存证核验

接口描述:核验存证

接口地址:http://119.3.106.151:10100/v1/app/evidences:verify

请求类型:POST

请求参数:

编号 名称 类型 是否必须 描述
1 txhash string 存证的交易hash
2 content byte 存证内容,base64格式,为文件存证或原文存证时必传
3 digest string 存证摘要,为摘要存证时必传
4 evidence_type string 存证类型,文件存证:file, 原文存证:text, 摘要存证:digest

响应参数:

编号 名称 类型 描述
1 verify_result string 存证核验结果, 成功:succeed, 失败:failed
2 push_time timestamp 存证上链时间
3 block_number string 区块高度
4 block_hash string 区块hash
5 txhash string 交易hash

请求示例:

curl -X POST "http://119.3.106.151:10100/v1/app/evidences:verify" \
	-H "accept: application/json" \
	-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2Mjc2MjA2MzQsImlhdCI6MTYyNzYxMzQzNCwianRpIjoiNDR6cDN4MDE0cG45bnoiLCJzdWIiOiJ1aWQtdGVuYW50In0.QLuUBa6oZQ1GjtzT4iXWc20CkRdG2AUTfeDfoM9mr8A--BIFRjHS11aRWynNAwr7O5bXNcg02GYMIHEWsyitVw" \
	-H "Content-Type: application/json" \
	-d "{ \"txhash\": \"0x58f421bfc90ee6f2b9a3cfe54824dbb7d5b16df59cd972033147936cf86154f7\", \"content\": \"dGVzdC1ldmlkZW5jZQ==\", \"evidence_type\": \"text\"}"
{
  "txhash": "0x58f421bfc90ee6f2b9a3cfe54824dbb7d5b16df59cd972033147936cf86154f7",
  "content": "dGVzdC1ldmlkZW5jZQ==",
  "evidence_type": "text"
}

响应示例:

{
  "verify_result": "succeed",
  "push_time": "2021-07-27T08:09:07Z",
  "block_number": "225",
  "block_hash": "0x5045f61eb8c99b4706df52c560a490abe4a9e9df0fc0a62d1af4cf030ecb1146",
  "txhash": "0x58f421bfc90ee6f2b9a3cfe54824dbb7d5b16df59cd972033147936cf86154f7"
}

4.新存证核验

接口描述:核验存证

接口地址:http://119.3.106.151:10100/v1/app/evidences:new_verify

请求类型:POST

请求参数:

编号 名称 类型 是否必须 描述
1 brief_content string 交易hash,存证id,存证摘要
2 content byte 存证内容,base64格式,为文件存证或原文存证时必传
3 verify_type string 存证类型,文件存证:file, 原文存证:text, 摘要存证:digest

响应参数:

编号 名称 类型 描述
1 verify_result string 存证核验结果, 成功:succeed, 失败:failed
2 push_time timestamp 存证上链时间
3 block_number string 区块高度
4 evidence_id string 存证ID
5 block_hash string 区块hash
6 txhash string 交易hash
7 digest string 存证摘要

请求示例:

curl -X POST "http://119.3.106.151:10100/v1/app/evidences:new_verify" \
	-H "accept: application/json" \
	-H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2Mjc2MjA2MzQsImlhdCI6MTYyNzYxMzQzNCwianRpIjoiNDR6cDN4MDE0cG45bnoiLCJzdWIiOiJ1aWQtdGVuYW50In0.QLuUBa6oZQ1GjtzT4iXWc20CkRdG2AUTfeDfoM9mr8A--BIFRjHS11aRWynNAwr7O5bXNcg02GYMIHEWsyitVw" \
	-H "Content-Type: application/json" \
	-d "{ \"brief_content\": \"0x6712f222ec02c7efec56bacd2358d84495e26691db3521c67f4c120dbe9dd4ca\", \"content\": \"\", \"verify_type\": \"text\"}"
{
  "brief_content": "0x6712f222ec02c7efec56bacd2358d84495e26691db3521c67f4c120dbe9dd4ca",
  "content": "",
  "verify_type": "text"
}

响应示例:

{
  "verify_result": "succeed",
  "push_time": "2021-09-27T06:10:30.429Z",
  "block_number": "1",
  "evidence_id": "11ea21d324c64b12a413d8ebcdc321be",
  "txhash": "0x6712f222ec02c7efec56bacd2358d84495e26691db3521c67f4c120dbe9dd4ca",
  "digest": "40e1f00a839aad430109e2536de4576ce8bcf80c17b0c9ee6bb2b329c451f56f",
  "block_hash": "0x5045f61eb8c99b4706df52c560a490abe4a9e9df0fc0a62d1af4cf030ecb1146"
}

5.获取存证内容

接口描述:获取存证内容

接口地址:http://119.3.106.151:10100/v1/app/evidences:content

请求类型:get

请求参数:

编号 名称 类型 是否必须 描述
1 evidence_id string 存证id

响应参数:

编号 名称 类型 描述
1 evidence_title string 存证标题
2 evidence_type string 存证类型
3 content bytes 存证内容

请求示例:

curl -X GET "http://119.3.106.151:10100/v1/app/evidences:content?evidence_id=00229959262a4fbfa8e2700b2400bd01" -H "accept: application/json" -H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2NDA3NTQ0MzEsImlhdCI6MTY0MDc0NzIzMSwianRpIjoiNWo5amw1NzN5d2w1a3ciLCJzdWIiOiJ1aWQtYWRtaW4ifQ.yCp0YBPa4-gzfXRxyPvDuvLFnQW05xcm39hn0lBAJRgHUaC859GrW6hwMg2zHp2jyNNf0nspzVZMbYf_12mXrw"

响应示例:

{
  "evidence_title": "芒果基地物联网数据",
  "evidence_type": "text",
  "content": "W3sidW5pdCI6Im0vcyIsInNlbnNvcnNJZCI6IjEwNyIsImRhdGFUaW1lIjoxNjM0MDc2MTEyMDAwLCJ2YWx1ZSI6MS40LCJzZW5zb3JzTmFtZSI6IumjjumAnyJ9LHsidW5pdCI6IktQYSIsInNlbnNvcnNJZCI6IjExNSIsImRhdGFUaW1lIjoxNjM0MDc2MTEyMDAwLCJ2YWx1ZSI6OTkuNDIsInNlbnNvcnNOYW1lIjoi5aSn5rCU5Y6L5YqbIn0seyJ1bml0IjoibW0iLCJzZW5zb3JzSWQiOiIxMTQiLCJkYXRhVGltZSI6MTYzNDA3NjExMjAwMCwidmFsdWUiOjAuMCwic2Vuc29yc05hbWUiOiLpm6jph48ifSx7InVuaXQiOiLCsCIsInNlbnNvcnNJZCI6IjEwOCIsImRhdGFUaW1lIjoxNjM0MDc2MTEyMDAwLCJ2YWx1ZSI6MzM3LjUsInNlbnNvcnNOYW1lIjoi6aOO5ZCRIn0seyJ1bml0IjoiJSIsInNlbnNvcnNJZCI6Ijc2OSIsImRhdGFUaW1lIjoxNjM0MDc2MTEyMDAwLCJ2YWx1ZSI6ODMuMTEsInNlbnNvcnNOYW1lIjoi56m65rCU5rm/5bqmIn0seyJ1bml0Ijoi4oSDIiwic2Vuc29yc0lkIjoiNzcwIiwiZGF0YVRpbWUiOjE2MzQwNzYxMTIwMDAsInZhbHVlIjoyMi4zNSwic2Vuc29yc05hbWUiOiLnqbrmsJTmuKnluqYifSx7InVuaXQiOiJMdXgiLCJzZW5zb3JzSWQiOiI1Mzc3IiwiZGF0YVRpbWUiOjE2MzQwNzYxMTIwMDAsInZhbHVlIjowLjAsInNlbnNvcnNOYW1lIjoi5YWJ54Wn5by65bqmIn1d"
}

6.下载存证证书

接口描述:下载存证证书

接口地址:http://119.3.106.151:10100/v1/app/evidences:certification

请求类型:get

请求参数:

编号 名称 类型 是否必须 描述
1 evidence_id string 存证id
2 tenant_id string 租户id

响应参数:

编号 名称 类型 描述
1 title string 证书文件名称
2 certificate_type 证书格式
3 content string 证书文件本身

请求示例:

curl -X GET "http://119.3.106.151:10100/v1/app/evidences:certification?evidence_id=00229959262a4fbfa8e2700b2400bd01&tenant_id=tid-yuhu1" -H "accept: application/json" -H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2NDA3NTQ0MzEsImlhdCI6MTY0MDc0NzIzMSwianRpIjoiNWo5amw1NzN5d2w1a3ciLCJzdWIiOiJ1aWQtYWRtaW4ifQ.yCp0YBPa4-gzfXRxyPvDuvLFnQW05xcm39hn0lBAJRgHUaC859GrW6hwMg2zHp2jyNNf0nspzVZMbYf_12mXrw"

响应示例:

{
  "title": "evidence_certification_00229959262a4fbfa8e2700b2400bd01.pdf",
  "certificate_type": "pdf",
  "content": "JVBERi0xLjcKCjEgMCBvYmoKPDwKICAvVHlwZSAvQ2F0YWxvZwogIC9QYWdlcyAyIDAgUgo+PgplbmRvYmoKCjIgMCBvYmoKPDwKICAvVHlwZSAvUGFnZXMKICAvTWVkaWFCb3ggWyAwIDAgNTk1LjI4IDg0MS44OSBdCiAgL0NvdW50IDEKICAvS2lkcyBbICA1IDAgUiAgXQo+PgplbmRvYmoKCjMgMCBvYmoKPDwKCS9UeXBlIC9PdXRsaW5lcwoJL0NvdW50IDAKPj4KZW5kb2JqCgo0IDAgb2JqCjw8CgkvUHJvY1NldCBbL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSV0KCS9Gb250IDw8CgkJL0YxIDE1IDAgUgoJCS9GMiAyMCAwIFIKCT4+CgkvWE9iamVjdCA8PAoJCS9JMTAgMTAgMCBSCgkJL0kyMSAyMSAwIFIKCQkvR09GUERJVFBMMCA2IDAgUgoJPj4KCS9FeHRHU3RhdGUgPDwKCT4+Cj4+CmVuZG9iagoKNSAwIG9iago8PAogIC9UeXBlIC9QYWdlCiAgL1BhcmVudCAyIDAgUgogIC9SZXNvdXJjZXMgNCAwIFIKICAvQ29udGVudHMgIDkgMCBSIAo+PgplbmRvYmoKCjYgMCBvYmoKPDwvRmlsdGVyIC9GbGF0ZURlY29kZSAvVHlwZSAvWE9iamVjdAovU3VidHlwZSAvRm9ybQovRm9ybVR5cGUgMQovQkJveCBbMC4wMCAwLjAwIDU5NC4zNiA4NDIuOThdCi9SZXNvdXJjZXMgCjw8L1hPYmplY3QgPDwvWDAgNyAwIFIgPj4+Pi9MZW5ndGggNTkgPj4Kc3RyZWFtCnicKuQ"}

六、服务层接口文档

1.创建事务

接口描述:

接口地址:qilin.basic.evidence.v1.CreateEVIDTrans

2.创建摘要存证

接口描述:摘要形式存证,可以用于电子文本、文件数据摘要的存证。包含存证元数据、摘要数据。

接口地址:qilin.basic.evidence.v1.CreateDigestEvidence

3.创建原文本存证

接口描述:文本形式存证,可以用户电子文本数据的存证。包含存证元数据,存证文本。

接口地址:qilin.basic.evidence.v1.CreateTextEvidence

4.创建原文件存证

接口描述:文件形式存证,可以用户电子文件数据的存证。包含存证元数据,存证文件。

接口地址:qilin.basic.evidence.v1.CreateFileEvidence

5.获取摘要存证

接口描述:获取存证摘要数据。

接口地址:

6.获取原文本存证

接口描述:获取存文本要数据。

接口地址:

7.获取原文件存证

接口描述:获取存证文件数据。

接口地址:

8.获取区块链存证信息

接口描述:获取区块链交易数据。

接口地址:

9.创建核验令牌

接口描述:

接口地址:

10.存证摘要核验

接口描述:核验文本摘要数据。

接口地址:qilin.basic.evidence.v1.GetEvidence

11.存证原文本核验

接口描述:核验存证文本要数据。

接口地址:qilin.basic.evidence.v1.GetEvidence