Fisco-Bcos-java-SDK 利用java与fisco-Bcos区块链上的智能合约交互(以HelloWorld为例)
Fisco-Bcos-java-SDK 利用java与fisco-Bcos区块链上的智能合约交互(以HelloWorld为例)
一、部署智能合约
1、编写智能合约
此处用最简单的HelloWorld合约作为例子 包含两个方法和一个构造函数
- 构造函数:当合约部署的时候 执行构造函数 将
name赋值为Hello, World! get()方法:获取当前name的值set()方法:设置当前name的值 参数类型为string
pragma solidity >=0.4.25 <0.6.11;contract HelloWorld {string name;constructor() public{name = "Hello, World!";}function get() public view returns (string memory){return name;}function set(string memory n) public {name = n;}
}
2、通过WeBASE-Front平台将合约进行部署
将写好的合约复制到WeBASE-Front节点控制台中

-
将合约进行编译后 创建测试用户进行部署 可以生成出当前合约的合约地址 这个很重要
-
可以在这里进行图形化的合约调用进行测试
调用
get方法 可以看到我们部署合约后执行的构造函数所赋的值


同样调用set方法进行赋值,再调用get方法 ,可以看到我们所赋的值

返回交易回执
{
transactionHash: "0x488efbe3507e36c703575ebf678d05664e7ad2d0529e463f1ba2ec7606cb5828"
transactionIndex: "0x0"
root: "0xd318298686d387c9f6e3122e836b3c4ab2c0b093fc701c083a263e60d696b821"
blockNumber: "33"
blockHash: "0xbcc1f9f372849b0f7a78fed8c612032605f0a8696d7aea654fa330d909c290f8"
from: "0x96bf2ac80e9428068db9a544ff974bc32a1a2e4f"
to: "0x8002b168b1f81d6c6d1148f579370648cd28dde8"
gasUsed: "29813"
remainGas: "0x0"
contractAddress: "0x0000000000000000000000000000000000000000"
logs: []
logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
status: 0x0
statusMsg: "None"
input:
function set( string n)
data:
n
stringhello,Fisco-Bcos!
output: "0x"
txProof: null
receiptProof: null
message: "Success"
statusOK: true
}
可以看到 交易成功 并且 值赋值为hello,Fisco-Bcos!
再次调用get方法获取当前合约name的值

发现name的值已经发生了变化
那我如何利用java语言来进行这样的操作呢?接着往下看
二、导出HelloWorld合约的java文件和SDK证书文件
Fisco-Bcos提供了合约转义JAVA的功能 我们可以直接通过下载
**同样提供了SDK证书文件的下载 **


这里可以随便填写 我们到idea用的时候 进行修改就行
下载完成后是一个java文件和一个zip文件

包含生成的转义后的java文件和SDK证书
三、Springboot集成HelloWorld.sol–java文件
1、添加Fisco-Bcos依赖

<dependency><groupId>org.fisco-bcos.java-sdk</groupId><artifactId>fisco-bcos-java-sdk</artifactId><version>2.9.1</version></dependency>

这里直接用2.9.1版本的就行 反正博主用了很好用[doge]
2、对Fisco-Bcos-java-sdk进行配置;将生成的文件放入项目中
1.导入文件

在resources目录下创建conf目录 将我们前面下载好的那个压缩包中的三个证书文件放到这个目录下
再将生成的HelloWorld.java放入自己的包下
这里我的包名是com.webase 再将java文件中的包名进行修改就行 修改成自己的包名

2.配置证书
同样在resources目录下创建config-example.toml文件
修改的内容为

文件内容如下:
[cryptoMaterial]certPath = "conf" # The certification path# The following configurations take the certPath by default if commented
# caCert = "conf/ca.crt" # CA cert file path
# If connect to the GM node, default CA cert path is ${certPath}/gm/gmca.crt# sslCert = "conf/sdk.crt" # SSL cert file path
# If connect to the GM node, the default SDK cert path is ${certPath}/gm/gmsdk.crt# sslKey = "conf/sdk.key" # SSL key file path
# If connect to the GM node, the default SDK privateKey path is ${certPath}/gm/gmsdk.key# enSslCert = "conf/gm/gmensdk.crt" # GM encryption cert file path
# default load the GM SSL encryption cert from ${certPath}/gm/gmensdk.crt# enSslKey = "conf/gm/gmensdk.key" # GM ssl cert file path
# default load the GM SSL encryption privateKey from ${certPath}/gm/gmensdk.key[network]
#peers=["127.0.0.1:20200", "127.0.0.1:20201"] # The peer list to connect
#修改为服务器IP地址
peers=["这里是你的区块链服务器的ip地址:20200", "这里是你的区块链服务器的ip地址:20201"] # The peer list to connect
# Configure a private topic as a topic message sender.
# [[amop]]
# topicName = "PrivateTopic1"
# publicKeys = [ "conf/amop/consumer_public_key_1.pem" ] # Public keys of the nodes that you want to send AMOP message of this topic to.# Configure a private topic as a topic subscriber.
# [[amop]]
# topicName = "PrivateTopic2"
# privateKey = "conf/amop/consumer_private_key.p12" # Your private key that used to subscriber verification.
# password = "123456"[account]
keyStoreDir = "account" # The directory to load/store the account file, default is "account"
# accountFilePath = "" # The account file path (default load from the path specified by the keyStoreDir)
accountFileFormat = "pem" # The storage format of account file (Default is "pem", "p12" as an option)# accountAddress = "" # The transactions sending account address
# Default is a randomly generated account
# The randomly generated account is stored in the path specified by the keyStoreDir# password = "" # The password used to load the account file[threadPool]
# channelProcessorThreadSize = "16" # The size of the thread pool to process channel callback
# Default is the number of cpu cores# receiptProcessorThreadSize = "16" # The size of the thread pool to process transaction receipt notification
# Default is the number of cpu coresmaxBlockingQueueSize = "102400" # The max blocking queue size of the thread pool
这是利用toml文件的配置形式进行配置 官网提供了其他的配置文件格式 如果有修改 跳转官网文档查看
Fisco-Bcos配置文件详解
3、编写测试方法和读取配置文件
1.编写SpringBoot配置类

代码如下:
package com.webase.config;import org.fisco.bcos.sdk.BcosSDK;
import org.fisco.bcos.sdk.client.Client;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @Project: emr* @Package: com.webase.config* @Description:* @author: xiaoMa* @Email:17320080198@163.com* @date: 2024年10月25日 16:30*/
@Configuration
public class BcosClientConfig {@Beanpublic Client client() throws Exception {String path = getClass().getClassLoader().getResource("config-example.toml").getPath();if (path == null) {throw new IllegalArgumentException("找不到配置文件。");}BcosSDK bcosSDK = BcosSDK.build(path);// groupId 设为 1return bcosSDK.getClient(1);}
}
这里是一个Spring配置类,用于配置BcosSDK客户端。这个类通过读取config-example.toml配置文件来初始化BcosSDK,并返回一个Client实例。后面我们测试类会用到
2.编写测试方法 测试合约方法

在test下创建测试类 注意包名 这里的测试集成了springboot测试
代码如下:
package com.webase;import com.webase.config.BcosClientConfig;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;/*** @Project: emr* @Package: com.webase* @Description:* @author: xiaoMa* @Email:17320080198@163.com* @date: 2024年10月25日 16:09*/@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = BcosClientConfig.class)
public class HelloWorldDemoTest {@Autowiredprivate Client client1;@Testpublic void testHello() throws Exception {// 合约地址String contractAddress = "0x8002b168b1f81d6c6d1148f579370648cd28dde8";// 创建一个私钥对CryptoKeyPair keyPair = client1.getCryptoSuite().createKeyPair();// 加载HelloWorld合约HelloWorld helloWorld = HelloWorld.load(contractAddress, client1, keyPair);// 调用HelloWorld合约set方法//TransactionReceipt receipt = helloWorld.set("Hello sent from Java!——10.26");// 打印交易回执的交易哈希//System.out.println(receipt.getTransactionHash());// 调用HelloWorld合约get方法String s = helloWorld.get();// 打印get方法的返回值System.out.println(s);}
}
这里的contractAddress 必须要和前面部署的时候生成的合约地址保存一致!

1·测试合约的get方法

可以看出 这个值是咱们之前在WeBASE-Front平台中通过图形化方式进行合约调用所设置的值 没错
2·测试合约的set方法

测试跑通了 并且返回了交易哈希
我们可以再次调用get方法测试是不是真的成功赋值

可以看到没有问题 是我们赋的值没错
更多功能接口请移步Fisco-Bcos官网开发文档!
Fisco-Bcos开发文档
相关文章:
Fisco-Bcos-java-SDK 利用java与fisco-Bcos区块链上的智能合约交互(以HelloWorld为例)
Fisco-Bcos-java-SDK 利用java与fisco-Bcos区块链上的智能合约交互(以HelloWorld为例) 一、部署智能合约 1、编写智能合约 此处用最简单的HelloWorld合约作为例子 包含两个方法和一个构造函数 构造函数:当合约部署的时候 执行构造函数 将…...
OpenHarmony-3.HDF Display子系统(6)
Display 子系统 1.Display驱动模型介绍 当前操作系统和 SOC 种类繁多,各厂商的显示屏器件也各有不同,随之针对器件的驱动代码也不尽相同,往往是某一款器件驱动,只适用于某单一内核系统或 SOC,如果要迁移到其他内核或者…...
Nginx中Server块配置的详细解析
Nginx中Server块配置的详细解析 一、Server块简介 在Nginx配置文件中,server块是非常关键的部分。它用于定义虚拟主机,一个server块就代表一个虚拟主机。这使得我们可以在一台Nginx服务器上通过不同的配置来处理多个域名或者基于不同端口的服务请求。 …...
php学习资料分享
php学习资料分享:夸克网盘分享...
EE308FZ_Sixth Assignment_Beta Sprint_Sprint Essay 3
Assignment 6Beta SprintCourseEE308FZ[A] — Software EngineeringClass Link2401_MU_SE_FZURequirementsTeamwork—Beta SprintTeam NameFZUGOObjectiveSprint Essay 3_Day5-Day6 (12.15-12.16)Other Reference1. WeChat Mini Program Design Guide 2. Javascript Style Guid…...
Eureka学习笔记-服务端
Eureka学习笔记 服务端 模块设计 Resources :这部分对外暴露了一系列的 Restful 接口。Eureka Client 的注册、心跳、获取服务列表等操作都需要调用这些接口。另外,其他的 Server 在同步 Registry 时也需要调用这些接口。Controller :这里提…...
无限次使用 cursor pro
github地址 cursor-vip 使用方式 在 MacOS/Linux 中,请打开终端; 在 Windows 中,请打开 Git Bash。 然后执行以下命令来安装: 部分电脑可能会误报毒,需要关闭杀毒软件/电脑管家/安全防护再进行 方式1:通过…...
网站运维之整站同步
网站运维之整站同步 1、使用rsync安装rsync工具子服务器生成密钥子服务器发送公钥到服务端(需要root允许ssh登录)服务端添加密钥子服务器尝试免密登录子服务器添加任务计划 2、开启root用户远程ssh3、ubuntu开启root用户 1、使用rsync 很多时候由于访问…...
【机器人】Graspness 端到端 抓取点估计 | 论文解读
在复杂场景中实现抓取检测,Graspness是一种端到端的方法; 输入点云数据,输出抓取角度、抓取深度、夹具宽度等信息。 开源地址:GitHub - rhett-chen/graspness_implementation: My implementation of Graspnet Graspness. 论文地…...
力扣2300.咒语和药水的成功对数(二分法)
根据 灵茶山艾府 题解所写 题目描述: 给你两个正整数数组 spells 和 potions ,长度分别为 n 和 m ,其中 spells[i] 表示第 i 个咒语的能量强度,potions[j] 表示第 j 瓶药水的能量强度。 同时给你一个整数 success 。一个咒语和药…...
WEB开发: 全栈工程师起步 - Python Flask +SQLite的管理系统实现
一、前言 罗马不是一天建成的。 每个全栈工程师都是从HELLO WORLD 起步的。 之前我们分别用NODE.JS 、ASP.NET Core 这两个框架实现过基于WebServer的全栈工程师入门教程。 今天我们用更简单的来实现: Python。 我们将用Python来实现一个学生管理应用࿰…...
云原生周刊:Kubernetes v1.32 正式发布
开源项目推荐 Helmper Helmper 简化了将 Helm Charts导入OCI(开放容器倡议)注册表的过程,并支持可选的漏洞修复功能。它确保您的 Helm Charts不仅安全存储,还能及时应用最新的安全修复。该工具完全兼容 OCI 标准,能够…...
京准电钟:电厂自控NTP时间同步服务器技术方案
京准电钟:电厂自控NTP时间同步服务器技术方案 京准电钟:电厂自控NTP时间同步服务器技术方案 随着计算机和网络通信技术的飞速发展,火电厂热工自动化系统数字化、网络化的时代已经到来。一方面它为控制和信息系统之间的数据交换、分析和应用…...
深入探索Flink的复杂事件处理CEP
深入探索Flink的复杂事件处理CEP 引言 在当今大数据时代,实时数据处理变得愈发关键。Apache Flink作为一款强大的流处理框架,其复杂事件处理(CEP)组件为我们从海量实时数据中提取有价值信息提供了有力支持。本文将详细介绍Flink…...
clickhouse-数据库引擎
1、数据库引擎和表引擎 数据库引擎默认是Ordinary,在这种数据库下面的表可以是任意类型引擎。 生产环境中常用的表引擎是MergeTree系列,也是官方主推的引擎。 MergeTree是基础引擎,有主键索引、数据分区、数据副本、数据采样、删除和修改等功…...
力扣hot100——哈希
1. 两数之和 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> ans;map<int, int> mp;for (int i 0; i < nums.size(); i) {if (mp.count(target - nums[i])) {ans.push_back(mp[target - nums[i]])…...
少样本学习之CAML算法
上下文感知元学习(Context-Aware Meta-Learning, CAML) 概述 在机器学习和深度学习领域,元学习(Meta-Learning)旨在通过学习如何学习,使模型能够在面对新任务时快速适应。传统的元学习方法通常需要在特定…...
C# 中的闭包
文章目录 前言一、闭包的基本概念二、匿名函数中的闭包1、定义和使用匿名函数2、匿名函数捕获外部变量3、闭包的生命周期 三、Lambda 表达式中的闭包1、定义和使用 Lambda 表达式2、Lambda 表达式捕获外部变量3、闭包的作用域 四、闭包的应用场景1、事件处理2、异步编程3、迭代…...
网络编程 03:端口的定义、分类,端口映射,通过 Java 实现了 IP 和端口的信息获取
一、概述 记录时间 [2024-12-19] 前置文章: 网络编程 01:计算机网络概述,网络的作用,网络通信的要素,以及网络通信协议与分层模型 网络编程 02:IP 地址,IP 地址的作用、分类,通过 …...
制作项目之前的分析
对网页的分析可以从多个角度入手,具体包括内容分析、技术分析、用户体验分析。 以下是对网页分析的详细步骤,帮助你从不同维度评估一个网页的效果与质量: 1. 内容分析 内容是网页最核心的部分,确保其符合用户需求是网页设计的首…...
conda 注册环境 笔记
查看conda根目录:conda info --base收到:/home/chajing/miniconda3注册路径为名字:ln -s /data/lbg/envs/py12 /home/chajing/miniconda3/envs/py12conda activate py12conda activate /data/lbg/envs/py12...
告别编译报错!手把手教你用Keil MDK5搭建GD32F103开发环境(含AC5编译器配置)
告别编译报错!手把手教你用Keil MDK5搭建GD32F103开发环境(含AC5编译器配置) 嵌入式开发新手在初次接触GD32F103时,往往会被各种编译报错搞得焦头烂额。特别是从STM32转过来的开发者,本以为操作流程相似,结…...
突破Windows限制:告别模拟器烦恼的安卓应用高效工具
突破Windows限制:告别模拟器烦恼的安卓应用高效工具 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在数字化办公与娱乐融合的今天,Windows用户…...
qstock量化分析:3行代码实现多市场数据获取与可视化
qstock量化分析:3行代码实现多市场数据获取与可视化 【免费下载链接】qstock qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析包,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测&…...
揭秘C++多态:动态行为的核心奥秘
C 多态:面向对象的动态行为核心机制多态性是面向对象编程(OOP)的核心概念之一,它允许对象在运行时根据其实际类型表现出不同的行为。在C中,多态性主要通过虚函数(virtual functions)和继承机制实…...
Cadence Allegro 17.4进阶技巧:PCB Editor中高效调整丝印的三大步骤
1. 丝印调整的核心价值与准备工作 在PCB设计流程中,丝印调整往往被新手工程师视为"收尾环节",但实际它直接影响着后续生产的可制造性和产品维护的便利性。Cadence Allegro 17.4的PCB Editor模块提供了完整的丝印处理工具链,我经手…...
保姆级教程:用Docker Compose一键部署Dify AI平台(附国内镜像加速与端口冲突解决)
零门槛部署Dify AI开发平台:Docker Compose全流程指南与避坑手册 在AI应用开发领域,快速搭建一个稳定可靠的开发环境往往是项目成功的第一步。Dify作为一款面向开发者的AI应用开发平台,通过可视化编排和低代码方式大大降低了构建基于大语言模…...
构建智能体的专业技能树 - Agent Skills生态全析(中篇)
一、概述 这篇文章我们将围绕Skills、Tools、MCP、Subagents 四个组件有什么区别、Anthropic 官方做好了哪些现成 Skills、如何从零创建一个自定义 Skill 的完整流程 这些四个方面来进行讲解。 二、智能体生态系统概览 在 Anthropic 构建的智能体生态中,多种技术组件…...
XposedRimetHelper:突破地理限制的系统级定位解决方案
XposedRimetHelper:突破地理限制的系统级定位解决方案 【免费下载链接】XposedRimetHelper Xposed 钉钉辅助模块,暂时实现模拟位置。 项目地址: https://gitcode.com/gh_mirrors/xp/XposedRimetHelper 一、移动办公的地理枷锁:企业考勤…...
视频号推客模式系统小程序开发
开发一个基于微信视频号的推客模式系统小程序,需要结合微信生态的开放能力和推客(分销)模式的业务逻辑。以下是关键开发要点:微信小程序与视频号打通通过微信开放平台的JS-SDK实现小程序与视频号的互联互通。调用wx.openChannelsA…...
