基于区块链的金融凭证应用开发
这个项目旨在开发一个基于区块链技术的金融凭证应用平台,用于提升供应链金融中应收账款管理的效率和透明度。通过将应收账款资产上链,并利用智能合约实现债权凭证的转让与拆分,项目目标是降低融资成本、增强信用分析能力,并推动供应链金融的数字化转型。核心功能包括资产上链、凭证管理、信用分析与报告以及确保安全与合规性。
任务一:环境准备
1. 搭建并启动区块链网络
目录:/root/tools/ 搭建区块链网络
bash buil_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545 -e /root/tools/fisco-bcos
启动区块链网络
bash nodes/127.0.0.1/start_all.sh
配置前置平台环境变量
目录:/root/tools/webase-front
配置环境变量
cp nodes/127.0.0.1/sdk/* webase-front/conf/
echo "export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/" >> /etc/profile
source /etc/profile
启动webase平台
bash start.sh
在浏览器访问webase-front 地址为:http://127.0.0.1:5002/WeBASE-Front
2.编译合约文件
新建user、bank、company用户
上传合约
编译SupplyChainFin合约
部署SupplyChainFin合约,参数随便填,得到合约地址
部署成功得到合约地址
任务二:前端工程编码
1.下载前端工程
目录:/root/Desktop
wget http://res.zhonghui.vip/blockchain-3/综合实训2/front.zip
2.解压前端工程
unzip front.zip
3.打开前端工程
将front工程拖入vscod
4.下载依赖包
打开终端Terminal
npm install
5.启动前端工程
在vue.config,js中修改后端代理接口地址target为:http://localhost:8080/并保存
启动项目
npm run serve
6.访问项目地址
http://localhost:8020/
任务三:编写后端程序
1.构建Java项目
打开Intellij IDEA, 点击新建项目,设置项目名为:finance,项目位置:~/Desktop,语言:Java, 构建 系统:gradle,JDK: 11, gradle版本:6.6,点击创建。
修改包路径,将[org.example]改为[org.example.finance],右键选中包名,依次选中【重构】–> 【重命名】,重命名软件包,如下图所示
可选择删除Main.java示例文件
修改gradle依赖 将项目生成的build.gradle.kts和settings.gradle.kts重构为build.gradle和settings.gradle
修改build.gradle文件内容为
buildscript {
repositories {
mavenCentral()
maven { url "https://maven.aliyun.com/nexus/content/groups/public/"}
maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
mavenLocal()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradleplugin:2.1.1.RELEASE")
}
}
plugins {
id 'org.springframework.boot' version '2.1.1.RELEASE'
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'maven-publish'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
sourceCompatibility = 1.8
targetCompatibility = 1.8
group = 'org.example'
version = '1.0.0-SNAPSHOT'
repositories {
mavenLocal()
mavenCentral()
maven { url "https://maven.aliyun.com/nexus/content/groups/public/"}
maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
maven { url "https://dl.bintray.com/ethereum/maven/" }
maven { url "https://oss.sonatype.org/service/local/staging/deploy/maven2"}
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
all {
resolutionStrategy.cacheDynamicVersionsFor 24000, 'hours'
resolutionStrategy.cacheChangingModulesFor 24000, 'hours'
}
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.slf4j:slf4j-api:1.7.5'
implementation 'org.junit.jupiter:junit-jupiter:5.7.0'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
implementation ('org.fisco-bcos.java-sdk:fisco-bcos-java-sdk:2.8.0') {
exclude group: 'org.slf4j'
}
implementation 'io.springfox:springfox-swagger2:2.6.1'
implementation 'io.springfox:springfox-swagger-ui:2.6.1'
implementation 'cn.hutool:hutool-all:5.7.9'
implementation group: 'org.springframework.boot', name: 'spring-boot-starterdata-redis', version: '2.5.3'
implementation group: 'org.freemarker', name: 'freemarker', version:
'2.3.29'
implementation 'org.apache.httpcomponents:httpclient:4.5.13'
}
sourceSets {
main {
java {
srcDir 'src/main/java'
}
resources {
srcDir 'src/main/resources'
}
}
}
test {
useJUnitPlatform()
}
bootJar {
destinationDir file('dist')
archiveName project.name + '-exec.jar'
doLast {
copy {
from file('src/main/resources')
into 'dist'
}
}
}
clean {
println "delete ${projectDir}/dist"
delete "${projectDir}/dist"
}
修改项目配置文件 /root/Desktop/finance/src/main/resources 目录下创建application.properties文件
编辑配置文件内容
### Please fill this address if you want to use related service
system.contract.supplyChainFinAddress=0xca530a7595a314d7dba921311d1263dceebe575d
### ### Springboot server config
server.port=8080
server.session.timeout=60
banner.charset=UTF-8
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
#WeBASE-Front URL
project.webase-url=http://127.0.0.1:5002/WeBASE-Front/trans/handle
在/root/Desktop/finance/src/main/resources 目录下创建conf目录
新建终端,将节点SDK证书拷贝到conf目录下
在/root/Desktop/finance/src/main/resources 目录下创建abi目录
在abi目录下创建SupplyChainFin.abi文件
编辑SupplyChainFin.abi,回到webase-front节点控制台,在SupplyChainFin合约部署界面找到abi并 复制
复制至SupplyChainFin.abi
至此,项目resource配置文件已经完成,目录结构如下:
以下代码文件路径均为/root/Desktop/finance/src/main/的相对路径,完整的项目文件结构如下图所 示
代码一
代码文件路径:/root/Desktop/finance/src/main/java/org/example/finance/model/bo/LoginBO.java
新建LoginBO.java文件,实现创建用户登录信息的业务对象,提供访问和修改用户地址和用户类型的方 法等功能
代码如下:
package org.example.finance.model.bo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ApiModel(value = "用户登录 BO")
public class LoginBO {
@ApiModelProperty(value = "用户地址")
String address;
@ApiModelProperty(value = "用户类型")
Integer orgType;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getOrgType() {
return orgType;
}
public void setOrgType(Integer orgType) {
this.orgType = orgType;
}
}
代码二
代码文件路径:/root/Desktop/finance/src/main/java/org/example/finance/model/bo/RegisterBo.java
新建RegisterBo.java文件,实现创建用于表示用户注册信息的业务对象,提供访问和修改用户名,组织 类型和区块链账户地址的方法 代码如下:
package org.example.finance.model.bo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ApiModel(value = "注册BO")
public class RegisterBO {
@ApiModelProperty(value = "用户名")
String username;
@ApiModelProperty(value = "组织类型")
Integer orgType;
@ApiModelProperty(value =