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
string
 hello,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 cores

maxBlockingQueueSize = "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 {
    @Bean
    public 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 设为 1
        return 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 {
    @Autowired
    private Client client1;

    @Test
    public 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开发文档

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DearMom婴儿车:书籍点亮希望,为乡村留守儿童架起知识桥梁

近日&#xff0c;DearMom婴儿车携手中国社会福利基金会来到河南上蔡赵庄小学&#xff0c;成功举办了一场意义非凡的公益助学活动&#xff0c;这是他们第二次以实际行动诠释企业社会责任。此次活动&#xff0c;品牌方致力于以书籍为媒介&#xff0c;为乡村留守儿童开拓视野、丰富…

备赛蓝桥杯之第十五届职业院校组省赛第二题:分享点滴

提示&#xff1a;本篇文章仅仅是作者自己目前在备赛蓝桥杯中&#xff0c;自己学习与刷题的学习笔记&#xff0c;写的不好&#xff0c;欢迎大家批评与建议 由于个别题目代码量与题目量偏大&#xff0c;请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…

阿里云-银行核心系统转型之业务建模与技术建模

业务领域建模包括业务建模和技术建模&#xff0c;整体建模流程图如下&#xff1a; 业务建模包括业务流程建模和业务对象建模 业务流程建模&#xff1a;通过对业务流程现状分析&#xff0c;结合目标核心系统建设能力要求&#xff0c;参考行业建 模成果&#xff0c;形成结构化的…

吴恩达深度学习——如何实现神经网络

来自吴恩达深度学习&#xff0c;仅为本人学习所用。 文章目录 神经网络的表示计算神经网络的输出激活函数tanh选择激活函数为什么需要非激活函数双层神经网络的梯度下降法 随机初始化 神经网络的表示 对于简单的Logistic回归&#xff0c;使用如下的计算图。 如果是多个神经元…

【Rust自学】14.4. 发布crate到crates.io

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 14.4.1. 创建并设置crates.io账号 在发布任何 crate 之前&#xff0c;你需要在 crates.io并…

13 网络编程

1 网络基础 1.1 什么是网络 把分布在不同地理区域的计算机、外部硬件设备用通信线路互连成一个规模大、功能强的网络系统&#xff0c;使系统的各个终端可以方便地互相传递信息&#xff0c;共享硬件、软件、数据信息等资源。 按照覆盖范围大小&#xff0c;网络可以分为&#x…

Android系统开发(八):从麦克风到扬声器,音频HAL框架的奇妙之旅

引言&#xff1a;音浪太强&#xff0c;我稳如老 HAL&#xff01; 如果有一天你的耳机里传来的不是《咱们屯里人》&#xff0c;而是金属碰撞般的杂音&#xff0c;那你可能已经感受到了 Android 音频硬件抽象层 (HAL) 出问题的后果&#xff01;在 Android 音频架构中&#xff0c…

第18个项目:微信开发入门:获取access_token的Python源码

源码下载地址:https://download.csdn.net/download/mosquito_lover1/90301829 功能特点: 输入AppID和AppSecret,点击按钮后异步获取access_token 1、自动保存功能: 当用户输入或修改 AppID 和 AppSecret 时自动保存 获取到新的 access_token 时自动保存 所有数据都保存在…

ESP8266 MQTT服务器+阿里云

MQTT私有平台搭建&#xff08;EMQX 阿里云&#xff09; 阿里云服务器 EMQX 搭建私有MQTT平台 1、搜索EMQX开源版本 2、查看各版本EMQX支持的UBUNTU版本 3、查看服务器Ubuntu版本 4、使用APT安装模式 5、按照官网指示安装并启动 6、下载安装MQTTX测试工具 7、设置云服务…

【面试总结】FFN(前馈神经网络)在Transformer模型中先升维再降维的原因

FFN&#xff08;前馈神经网络&#xff09;在Transformer模型中先升维再降维的设计具有多方面的重要原因&#xff0c;以下是对这些原因的总结&#xff1a; 1.目标与动机 高维映射空间&#xff1a;FFN的设计目的是通过一系列线性变换来拟合一个高维的映射空间&#xff0c;而不仅…

C语言程序设计十大排序—希尔排序

文章目录 1.概念✅2.希尔排序&#x1f388;3.代码实现✅3.1 直接写✨3.2 函数✨ 4.总结✅ 1.概念✅ 排序是数据处理的基本操作之一&#xff0c;每次算法竞赛都很多题目用到排序。排序算法是计算机科学中基础且常用的算法&#xff0c;排序后的数据更易于处理和查找。在计算机发展…

mac 电脑上安装adb命令

在Mac下配置android adb命令环境&#xff0c;配置方式如下&#xff1a; 1、下载并安装IDE &#xff08;android studio&#xff09; Android Studio官网下载链接 详细的安装连接请参考 Mac 安装Android studio 2、配置环境 在安装完成之后&#xff0c;将android的adb工具所在…

Apache Hive3定位表并更改其位置

Apache Hive3表 1、Apache Hive3表概述2、Hive3表存储格式3、Hive3事务表4、Hive3外部表5、定位Hive3表并更改位置6、使用点表示法引用表7、理解CREATE TABLE行为 1、Apache Hive3表概述 Apache Hive3表类型的定义和表类型与ACID属性的关系图使得Hive表变得清晰。表的位置取决于…

【机器学习实战中阶】使用SARIMAX,ARIMA预测比特币价格,时间序列预测

数据集说明 比特币价格预测&#xff08;轻量级CSV&#xff09;关于数据集 致谢 这些数据来自CoinMarketCap&#xff0c;并且可以免费使用该数据。 https://coinmarketcap.com/ 数据集:链接: 价格预测器 源代码与数据集 算法说明 SARIMAX&#xff08;Seasonal AutoRegressive …

DDD - 整洁架构_解决技术设计困局

文章目录 Pre如何落地 DDD底层技术的更迭 整洁架构的设计主动适配器/北向适配器被动适配器/南向适配器 整洁架构的落地总结 Pre DDD - 软件退化原因及案例分析 DDD - 如何运用 DDD 进行软件设计 DDD - 如何运用 DDD 进行数据库设计 DDD - 服务、实体与值对象的两种设计思路…

HQChart使用教程30-K线图如何对接第3方数据45- DRAWRADAR数据结构

HQChart使用教程30-K线图如何对接第3方数据45- DRAWRADAR数据结构 效果图DRAWRADARHQChart代码地址后台数据对接说明示例数据数据结构说明效果图 DRAWRADAR DRAWRADAR是hqchart插件独有的绘制雷达图函数,可以通过麦语法脚本来绘制一个简单的雷达图数据。 雷达图显示的位置固定…

HarmonyOS快速入门

HarmonyOS快速入门 1、基本概念 UI框架&#xff1a; HarmonyOS提供了一套UI开发框架&#xff0c;即方舟开发框架&#xff08;ArkUI框架&#xff09;。方舟开发框架可为开发者提供应用UI开发所必需的能力&#xff0c;比如多种组件、布局计算、动画能力、UI交互、绘制等。 方…

SD/MMC驱动开发

一、介绍 MMC的全称是”MultiMediaCard”――所以也通常被叫做”多媒体卡”&#xff0c;是一种小巧大容量的快闪存储卡,特别应用于移动电话和数字影像及其他移动终端中。MMC存贮卡只有7pin&#xff0c;可以支持MMC和SPI两种工作模式。 SD卡&#xff0c;数字安全记忆卡&#xf…

Windows的docker中安装gitlab

一.Windows的docker中安装gitlab 1.通过阿里云拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/lab99/gitlab-ce-zh 2.在本地创建备份数据的目录 mkdir -p D:home/software/gitlab/etc mkdir -p D:home/software/gitlab/logs mkdir -p D:home/software/gitlab/dat…

10倍数据交付提升 | 通过逻辑数据仓库和数据编织高效管理和利用大数据

数据已经成为企业核心竞争力的关键要素。随着大数据技术的发展&#xff0c;如何高效管理和利用海量的数据&#xff0c;已成为企业在数字化转型过程中面临的重要课题。传统的数据仓库已经不能满足当今企业对数据处理的高效性、灵活性和实时性的需求。在这种背景下&#xff0c;逻…