WeBankBlockchain-DDCMS-Docs 技术文档¶
什么是 WeBankBlockchain-DDCMS
DDCMS(Distributed Data Collaboration Management Solution)旨在多方协作场景中,面向数据管理需求,提供一套基于区块链的、安全可信、友好易用的分布式数据管理开源方案,服务于个人数据携带、企业间数据共享。各参与方围绕数据目录展开业务协作,使得各参与方能够快速、低成本的进行数据管理和共享、确保数据安全和隐私的同时,实现数据共享全流程可追溯、可监管、可审计。
DDCMS 角色介绍 在DDCMS中包括5中角色:数据归属方、数据提供方、数据使用方、数据见证方、系统运营方。
数据归属方:在数据传输共享过程中,对数据使用方的数据请求进行数据授权,在数据提供方进行授权管理。
数据提供方:对外提供数据目录服务,负责审核数据目录使用申请及核验用户授权。
数据使用方:对数据归属者提供服务,并经过授权通过数据目录获取数据。
数据见证方:负责对数据目录的全流程进行进行审核监管,不参与具体业务。
系统运营方:负责对各参与方进行KYC,确保参与方可信可靠。
它们的关系见下图:

DDCMS功能概述
DDCMS包括三个功能模块:统一可信的数据目录管理、可追溯审计的数据传输过程管理、丰富安全的数据处理组件管理。当前仅开源统一可信的数据目录管理模块。
统一可信的数据目录管理
提供统一的数据目录管理功能,所有操作均上链存证,确保数据目录可信,提升管理和运营效率,降低接入成本。
可追溯审计的数据传输过程管理
每次数据的传输过程均会记录上链,确保数据流通的定量、定时、定场景,实现全流程可管理可追溯可监管审计。
丰富安全的数据处理组件管理
提供对各种数据处理组件的管理能力,企业可按需接入和使用,避免二次开发、降低接入和使用成本
各子工程简介
DDCMS包含三个子工程:
DDCMS-Contract
DDCMS-Contract是DDCMS的智能合约实现,对接入用户、业务、数据目录等提供链上审核及管理等能力。地址:
DDCMS-Service
DDCMS-Service是DDCMS的后端工程,采用JAVA编写,提供和DDCMS-Contract的交互能力及账户、业务、数据目录的管理能力。地址:
DDCMS-Front
DDCMS-Front是一个前端项目,采用React编写,提供可视化注册、登录、业务注册、审核、数据目录注册、审核、展示、查看及管理等功能。地址:
快速开始¶
DDCMS由三个子项目构成:DDCMS-Contract、DDCMS-Service、DDCMS-Front。
DDCMS-Contract:提供项目的智能合约,将会部署在FISCO BCOS上,它包含了数据目录管理、数据传输管理的留痕存证功能。
DDCMS-Service:项目的后台服务器,用于支持前端。
DDCMS-Front:项目的前端。
环境要求¶
依赖软件 | 说明 | 备注 |
---|---|---|
FISCO BCOS | 安装FISCO BCOS 3.0链及控制台/webase | |
Java | >= JDK1.8 | 64bit |
NodeJs | >= 14 | |
MySQL | >= mysql-community-server5.7 | |
Git | 下载安装包需要使用Git |
DDCMS-Contract¶
DDCMS-Contract用于追踪DDCMS的使用过程,数据目录生命周期中的每一个关键环节均会在链上留痕、存证,保证系统的可追溯、可监管。 它由三个模块构成:AccountContract, ProductContract, DataSchemaContract,由系统运营方部署。
AccountContract: 负责账户管理,包括机构的注册、审核等功能。系统中的数据提供方、见证机构,均需要在AccountContract中注册并审核,才能使用DDCMS。系统运营方则会在部署合约时自动注册。
ProductContract: 负责业务管理,包括业务的创建、审核等功能。其中,业务的创建由数据提供方进行,其审核由见证方进行,当票数超过半数,即通过审核。
DataSchemaContract:负责数据目录管理,包括数据目录的创建、审核等。其中,数据目录的创建由数据提供方进行,其审核由见证方进行,当票数超过半数,即通过审核。
快速开始¶
从依赖关系来讲,依赖关系如下:DataSchemaContract->ProductContract->AccountContract.因此,部署顺序需要按照相反顺序,按照AccountContract->ProductContract->DataSchemaContract的顺序部署。
链准备¶
首先需要有一条FISCO BCOS链,如果没有,可以部署一个。FISCO BCOS支持Air版、Pro版、Max版,对应不同的能力和复杂性,具体部署方式可以参考链搭建文档。
接下来需要和FISCO BCOS交互,可以使用控制台或者webase。
私钥准备¶
只有系统运营方可以部署合约,所以需要一个系统运营方私钥,可以使用webase或者控制台生成。以fisco bcos的控制台为例:
cd [控制台目录]
bash get_account.sh
执行后,在accounts目录会生成对应的pem文件;同时,控制台会打印出它对应的私钥原文。如用于生产,请妥善保存,不要泄露或丢失!
部署合约¶
然后,依次部署三个合约。
以控制台为例,首先需要以系统运营方身份来启动控制台:
cd [控制台目录]
bash start.sh [群组,默认group0] -pem xxxx.pem
先将contracts目录下的合约拷贝到控制台contracts/solidity目录下,以系统运营方身份启动控制台后执行部署:
[group0]: /apps> deploy AccountContract
transaction hash: 0xade6832deb8f9641009336b955a3637bffbbc4fc9ffadb8a9de03ab6200f6093
contract address: 0x59fc2d7bbbb013ac9fc74a4c79bd25fdce02cba2
currentAccount: 0xcbe29631c0933c4319694dafc50723093f0de937
[group0]: /apps> deploy ProductContract 0x59fc2d7bbbb013ac9fc74a4c79bd25fdce02cba2
transaction hash: 0xefcc3503414490eb28dff330b9d42701bd1359f1fc784014f109ba16212fbfac
contract address: 0x24829babadbdc5fe4205353f6a2a6a79e7eef6a5
currentAccount: 0xcbe29631c0933c4319694dafc50723093f0de937
[group0]: /apps> deploy DataSchemaContract 0x59fc2d7bbbb013ac9fc74a4c79bd25fdce02cba2 0x24829babadbdc5fe4205353f6a2a6a79e7eef6a5
transaction hash: 0x27c43f0ca480a5f349205b2dcad6cc045ce4636ee4e41fbddfebb68b60104625
contract address: 0xa085baa5914e1d082c94ce24baf49473caa33ff1
currentAccount: 0xcbe29631c0933c4319694dafc50723093f0de937
其中:
ProductContract部署参数为AccountContract地址,请替换为实际的地址
DataSchemaContract部署参数分别为AccountContract地址和ProductContract地址,请替换为实际的地址
DDCMS-Service¶
DDCMS-Service由系统运营方部署,它负责接收前端传来的请求。从功能而言,它承担了用户管理、业务管理、数据目录管理等功能。
快速开始¶
克隆代码¶
git clone https://github.com/WeBankBlockchain/DDCMS-Service.git
cd DDCMS-Service
git checkout origin/dev
链配置¶
由于后端服务需要访问区块链,因此需要先配置链信息,包括证书、sdk配置,这些信息可以直接从sdk里拷贝。
首先拷贝控制台里的证书到DDCMS-Service工程的conf目录下:
cp [控制台目录]/conf/* dist/conf
服务配置¶
编辑dist/conf/application.yml,按照下面的模板进行配置,其中打了${}的需要自己配置。
server:
port: 10880
spring:
mvc:
async:
request-timeout: 500
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
datasource:
url: ${数据库连接}
username: ${数据库用户名}
password: ${数据库密码}
driverClassName: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
defaultAutoCommit: false
initialSize: 25
maxActive: 128
maxIdle: 50
minIdle: 25
testOnBorrow: false
testOnReturn: false
testWhileIdle: true
validationQuery: SELECT 1
timeBetweenEvictionRunsMillis: 34000
minEvictableIdleTimeMillis: 34000
removeAbandoned: false
logAbandoned: true
removeAbandonedTimeout: 54
maxWait: 10000
poolPreparedStatements: false
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
mybatis:
typeAliasesPackage: com.webank.databrain.dao.entity
configuration:
map-underscore-to-camel-case: true
jwt:
secret: ${jwt secret}
expiration: 8640000
system:
bcos-cfg: "conf/config.toml"
bcos-group-id: "group0"
crypto-type: 0
admin-account: ${系统运营方账户}
admin-password: ${系统运营方密码}
admin-private-key: ${见证方私钥,例如0x11afa82f974469792aa0172931b813d4fc7dd9177f3211779efc5f955d5e480f}
admin-company: '系统运营方'
contractConfig:
account-contract: ${账户合约地址}
product-contract: ${业务合约地址}
dataSchema-contract: ${数据目录合约地址}
fileConfig:
file-dir: "tmp"
swagger:
enabled: true
auth:
permitAllApiList:
- /api/account/register
- /api/account/pageQueryCompany
- /api/account/queryCompanyByUsername
- /api/account/queryPersonByUsername
- /api/account/queryCompanyByAccountId
- /api/account/getHotCompanies
- /api/account/searchCompany
- /api/account/searchPerson
- /api/schema/pageQuerySchema
- /api/schema/querySchemaById
- /api/schema/querySchemaAccessById
- /api/file/download
- /api/file/upload
- /api/product/getHotProducts
- /api/product/pageQueryProduct
- /api/product/queryProductById
- /api/tag/getHotTags
- /v2/api-docs
- /configuration/**
- /swagger*/**
- /webjars/**
- /csrf
- /
anonymousApi: /api/account/login
roleAuth:
companyAuth:
- /api/product/createProduct
- /api/schema/createSchema
- /api/product/updateProduct
witnessAuth:
- /api/product/approveProduct
adminAuth:
- /api/account/approveAccount
需要自己配置的属性包括:
spring.datasource.url: 数据库连接url。示例: jdbc:mysql://localhost:3306/databrain?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
spring.datasource.username:数据库用户名。
spring.datasource.password:数据库密码
system.admin-account:系统运营方登陆账户名。示例:admin
system.admin-password:系统运营方登陆密码。示例:admin
system.admin-private-key:系统运营方私钥 。注意带上双引号,示例”0x11afa82f974469792aa0172931b813d4fc7dd9177f3211779efc5f955d5e480f”。
system.contractConfig.account-contract:账户合约地址。注意带上双引号,例如”0x1e0171e2f59d00a1851c5f8ca8af1b208f52627b”。
system.contractConfig.product-contract:业务合约地址。注意带上双引号,例如”0x2f45c1aac14531d8bd3269d7d2c9ffc342798dcb”。
system.contractConfig.dataSchema-contract:业务合约地址。注意带上双引号,注意带上双引号,例如”0xb426ac2d4436c051ae71a149621c76620733ede3”。
jwt.secret: 用于支持jwt,是一个base64的字符串,例如“Ok2Q0AZiRTT1N6CJ3q8ZvQOk2Q0AZiRTT1N6CJ3q8ZvQOk2Q0AZiRTT1N6CJ3q8ZvQOk2Q0AZiRTT1N6CJ3q8ZvQOk2Q0AZiRTT1N6CJ3q8ZvQ”
启动¶
在DDCMS-Service项目根目录下执行
cd dist
bash start.sh
这条指令会编译代码成springboot jar包,并执行。您可以检查nohup.out,如果出现类似字样表示启动成功:
...
2023-06-08 17:25:26.884 INFO 7287 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 10880 (http) with context path ''
2023-06-08 17:25:26.890 INFO 7287 --- [ main] com.webank.ddcms.DDCMSApplication : Started DDCMSApplication in 4.754 seconds (JVM running for 5.115)
DDCMS-Front¶
DDCMS-Front为前端操作页面,各个角色均需通过它来使用DDCMS。它包含两个核心功能:数据浏览、数据关联。
数据浏览:当进入首页后,或者点击左上角DDCMS图标,可以浏览已通过审核的数据目录和对应的产品。
数据管理:当登陆后,用户可以点击右上角的按钮,进入管理台页面,在里面将会根据不同的角色,展示不同的功能,例如:数据提供方可以创建业务、数据目录;系统运营方可以查看、审核注册请求;数据见证方可以查看、投票数据目录及归属业务。