基于区块链的金融凭证应用开发

news2024/11/14 5:34:22

基于区块链的金融凭证应用开发

这个项目旨在开发一个基于区块链技术的金融凭证应用平台,用于提升供应链金融中应收账款管理的效率和透明度。通过将应收账款资产上链,并利用智能合约实现债权凭证的转让与拆分,项目目标是降低融资成本、增强信用分析能力,并推动供应链金融的数字化转型。核心功能包括资产上链、凭证管理、信用分析与报告以及确保安全与合规性。

任务一:环境准备

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 = 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2039055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

昂科烧录器支持Cmsemicon中微半导体的8位微控制器CMS79F1239

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表,其中Cmsemicon中微半导体的8位微控制器CMS79F1239已经被昂科的通用烧录平台AP8000所支持。 CMS79F1239为中微半导体自主8位RISC内核单片机,工作电压1.8V~5.5V&#xff…

JSONP解决前端跨域学习案例

JSONP 的工作原理 JSONP利用的是 前端代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><ti…

性能测试-性能测试工具wrk,Apache ab,ngrinder,locust,jmeter和loadrunner

性能测试工具&#xff1a; 企业中主流性能测试工具&#xff1a; jmeter jmeter&#xff1a; java开发的开源&#xff0c;线程、学习很低&#xff0c;接口、自动化、性能测试、第三方性能测试从jmeter扩展 loadrunner&#xff1a; 商业 loadrunner&#xff08;录播&#xff09;…

商业环境洞察:PEST分析法全解析

PEST 分析法是什么 PEST 分析作为一种企业战略规划中的关键工具&#xff0c;主要用于评估企业所处的宏观环境。"P"代表政治因素&#xff0c;涉及政府政策、法律法规及其对企业运营的潜在影响。"E"指的是经济环境&#xff0c;包括经济增长、汇率波动、通货…

[ Python 原理分析 ]如何实现用户实现博客文章点赞-物联网Python

目录 一、前言 二、Python爬虫 三、详细操作 3.1 建立基本工程 3.2 获取文章列表 3.2.1 找到获取文章请求 3.2.2 分析获取请求 3.2.3 构建获取请求 3.2.4 调试打印 3.3 实现点赞操作 3.3.1 判断点赞状态 3.3.2 找到点赞请求 3.2.3 分析点赞请求 3.2.4 构建点赞请…

linxu命令diff:比较两个或多个文件的内容差异的工具diff详解

目录 一、概述 二、用法 1、基本语法 2、基本用法 3、常用选项 4、获取帮助 三、输出格式 1、正常格式&#xff08;normal diff&#xff09; 2、上下文格式&#xff08;context diff&#xff09; 3、合并格式&#xff08;unified diff&#xff09; 四、示例…

【面试宝典】java多线程面试题总结(中)

::: tip 这个里面的内容对应 Java并发编程基础知识 书籍中的内容。需要的画私聊我哈&#xff01;&#xff01;&#xff01; ::: 一、简介 Java内存模型&#xff08;Java Memory Model&#xff0c;简称JMM&#xff09;是一种抽象的概念&#xff0c;它定义了Java程序中各个变量…

《计算机组成原理》(第3版)第7章 指令系统 复习笔记

第7章 指令系统 一、机器指令 机器语言是由一条条语句构成的&#xff0c;每一条语句又能准确表达某种语义。计算机就是连续执行每一条机器语句而实现全自动工作的&#xff0c;人们习惯把每一条机器语言的语句称为机器指令&#xff0c;而又将全部机器指令的集合称为机器的指令…

C语言--不可不学的指针

1. 指针是什么 内存是什么&#xff1f; 内存是电脑上特别重要的存储器&#xff0c;计算机中的程序的运行都是在内存中进行的&#xff0c;为了有效使用内存&#xff0c;我们会把内存划分为一个个小的内存单元&#xff0c;比如把4G/8G/16G/32G的内存划分为一个个以字节为单位的空…

vulnhub系列:Momentum2

vulnhub系列&#xff1a;Momentum2 靶机下载 一、信息收集 nmap扫描C段存活 nmap 192.168.23.0/24目标地址为192.168.23.132 nmap扫描端口 nmap 192.168.23.132发现开放端口&#xff1a;22、80 目录扫描 python3 dirsearch.py -u http://192.168.23.132扫描发现目录&…

【OCR 学习笔记】二值化——全局阈值方法

二值化——全局阈值方法 固定阈值方法Otsu算法在OpenCV中的实现固定阈值Otsu算法 图像二值化&#xff08;Image Binarization&#xff09;是指将像素点的灰度值设为0或255&#xff0c;使图像呈现明显的黑白效果。二值化一方面减少了数据维度&#xff0c;另一方面通过排除原图中…

MyBatis--XML映射文件

MyBatis–XML映射文件 lombok工具包 为了解决声明实体类的get()和set()函数臃肿的问题&#xff0c;我们使用lombok工具包。 我们看一下lombok工具包为我们提供的注解&#xff1a; XML映射文件 我们需要遵守下面的规则&#xff1a; 首先XML映射文件和Mapper接口包应该在同…

用栈访问最后若干元素——682、71、388

682. 棒球比赛&#xff08;简单&#xff09; 你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成&#xff0c;过去几回合的得分可能会影响以后几回合的得分。 比赛开始时&#xff0c;记录是空白的。你会得到一个记录操作的字符串列表 ops&#xff0c;其中 ops[…

2024 Studio One6.6.1最新版中文版图文破解版教程

在数字音频工作站&#xff08;DAW&#xff09;的浩瀚宇宙中&#xff0c;Studio One始终以其独特的魅力和强大的功能脱颖而出。随着6.6.1版本的发布&#xff0c;这款由PreSonus精心打造的音乐制作软件再次迈上了一个全新的台阶&#xff0c;为音乐创作者们带来了前所未有的创作体…

【C++】vector及模拟实现

&#x1f680;个人主页&#xff1a;奋斗的小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 &#x1f4a5;1、vector的主要函数接口&#x1f4a5;2、vector的模拟实现&#x1f4a5;2.1 构造和析构&…

Python 3 入门基础知识【1】数据类型 安装下载 推荐

Python的重要性这里不多说了&#xff0c;是一门面向对象的解释型语言&#xff0c;使用缩进作为逻辑层次&#xff0c;功能强大且容易上手&#xff0c;其受欢迎程度也在逐年上升的。这里回顾一下python的基础知识&#xff0c;以便自己查看&#xff0c;欢迎正在学习python的同学参…

ArcGIS10.8 安装教程

目录 一、环境及安装包准备 二、安装流程 1、解压安装包ArcGIS_108.rar 2、安装 三、汉化 四、激活 五、自定义菜单&#xff08;可选&#xff09; 六、打开软件按查看 七、安装过程中出现的报错 八、其他 一、环境及安装包准备 安装环境&#xff1a;win7 安装包下载…

[FBCTF2019]RCEService1

打开题目 它给出了提示要求json格式&#xff0c;先尝试一下{"cmd":"ls"} 的确可以执行。接下来就记录过滤了那些关键字。发现键盘上有的特殊符号好像都被过滤。 flag在home目录下&#xff0c;不知道为什么find命令返回为空。。。 cat在这里仍然不能用。…