当前位置: 首页 > article >正文

【fisco bcos】基于ABI调用智能合约

参考官方文档:https://fisco-bcos-documentation.readthedocs.io/zh-cn/latest/docs/sdk/java_sdk/assemble_transaction.html


先放一下智能合约:
(就是一个很简单的插入和查找嗯)

pragma solidity ^0.4.25;
pragma experimental ABIEncoderV2;import "./Table.sol";contract record {event AddRecordResult(int256 count);event GetRecordResult(string description, string remark);TableFactory tableFactory;string constant TABLE_NAME = "record";constructor() public {tableFactory = TableFactory(0x1001); //The fixed address is 0x1001 for TableFactorytableFactory.createTable(TABLE_NAME, "recordid", "description,remark");}// add record to the tablefunction addRecord(string memory recordid, string memory description, string memory remark)publicreturns (int256){Table table = tableFactory.openTable(TABLE_NAME);Entry entry = table.newEntry();entry.set("recordid", recordid);entry.set("description", description);entry.set("remark", remark);int256 count = table.insert(recordid, entry);emit AddRecordResult(count);return count;}// get record by recordidfunction getRecord(string memory recordid)publicreturns (string memory, string memory){Table table = tableFactory.openTable(TABLE_NAME);Condition condition = table.newCondition();condition.EQ("recordid", recordid);Entries entries = table.select(recordid, condition);require(entries.size() > 0, "Record does not exist");Entry entry = entries.get(0);string memory description = entry.getString("description");string memory remark = entry.getString("remark");emit GetRecordResult(description, remark);return (description, remark);}
}

然后是Java后端的代码:

(也就是一个很简单的例子)

import org.fisco.bcos.sdk.BcosSDK;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.transaction.manager.AssembleTransactionProcessor;
import org.fisco.bcos.sdk.transaction.manager.TransactionProcessorFactory;
import org.fisco.bcos.sdk.transaction.model.dto.TransactionResponse;
import org.junit.jupiter.api.Test;import java.util.ArrayList;
import java.util.List;public class RecordTest {// 获取配置文件路径public final String configFile = "src/main/resources/config-example.toml";@Testpublic void test() throws Exception {// 初始化BcosSDK对象BcosSDK sdk = BcosSDK.build(configFile);// 获取Client对象,此处传入的群组ID为1Client client = sdk.getClient(Integer.valueOf(1));// 构造AssembleTransactionProcessor对象,需要传入client对象,CryptoKeyPair对象和abi、binary文件存放的路径。abi和binary文件需要在上一步复制到定义的文件夹中。CryptoKeyPair keyPair = client.getCryptoSuite().createKeyPair();AssembleTransactionProcessor transactionProcessor = TransactionProcessorFactory.createAssembleTransactionProcessor(client, keyPair, "src/main/resources/abi/", "");// 同步方式发送交易// 创建调用交易函数的参数String recordId = "1";String description = "description";String remark = "remark";List<Object> params = new ArrayList<>();params.add(recordId);params.add(description);params.add(remark);// 调用record合约,调用函数名为『addRecord』,函数参数类型为paramsTransactionResponse transactionResponse = transactionProcessor.sendTransactionAndGetResponseByContractLoader("record", "0xc0c669591f444b440b8c053ff977df2f34c2681f", "addRecord", params);// 打印返回值List<Object> returnValues = transactionResponse.getReturnObject();if (returnValues != null) {for (Object value : returnValues) {System.out.println("上链返回值:"+value.toString());}}// 调用合约查询接口List<Object> params2 = new ArrayList<>();params2.add("1");// 调用record合约的『getRecord』函数,参数为recordidTransactionResponse transactionResponse2 = transactionProcessor.sendTransactionAndGetResponseByContractLoader("record", "0xc0c669591f444b440b8c053ff977df2f34c2681f", "getRecord", params2);// 打印返回值List<Object> returnValues2 = transactionResponse2.getReturnObject();if (returnValues2 != null) {// 检查返回值的长度是否正确if (returnValues2.size() == 2) {String description2 = (String) returnValues2.get(0);String remark2 = (String) returnValues2.get(1);System.out.println("Description: " + description2);System.out.println("Remark: " + remark2);} else {System.out.println("返回值长度不正确");}}}
}

相关文章:

【fisco bcos】基于ABI调用智能合约

参考官方文档&#xff1a;https://fisco-bcos-documentation.readthedocs.io/zh-cn/latest/docs/sdk/java_sdk/assemble_transaction.html 先放一下智能合约&#xff1a; &#xff08;就是一个很简单的插入和查找嗯&#xff09; pragma solidity ^0.4.25; pragma experimental…...

Delphi Ini文件对UTF8支持不爽的极简替代方案

如题&#xff0c;没太多废话&#xff0c;直接复制走即可。 unit uConfig;interfaceuses classes, Sysutils;typeTConfig class privateFFileName: String;FConfig:TStringList; protectedpublicconstructor Create(ConfigFile:String);destructor Destroy;property FileName…...

【LangChain实战】构建下一代智能问答系统:从RAG架构到生产级优化

打破传统问答系统的次元壁 当ChatGPT在2022年掀起AI革命时&#xff0c;开发者们很快发现一个残酷现实&#xff1a;通用大模型在专业领域的表现如同拿着地图的盲人&#xff0c;既无法理解企业私有数据&#xff0c;也无法保证事实准确性。这催生了RAG&#xff08;检索增强生成&a…...

C++编译与链接:从源码到可执行文件的魔法之旅(Visual Studio实践)

文章目录 **C++编译与链接:从源码到可执行文件的魔法之旅(Visual Studio实践)****一、C++编译器的工作流程****二、Visual Studio环境配置实战****三、示例项目:Hello World全流程解析****四、高级技巧与工具链****五、总结与参考资料**C++编译与链接:从源码到可执行文件的…...

RL中的rollout和episode的区别请问是啥

很好的问题兄弟&#xff0c;rollout 和 episode 在强化学习&#xff08;RL&#xff09;里经常一起出现&#xff0c;虽然有重叠&#xff0c;但含义和使用语境还是有区别的&#xff1a; ✅ 一句话总结&#xff1a; Episode 是一个完整的任务过程&#xff08;从起点到终点&#xf…...

个人博客系统后端 - 用户信息管理功能实现指南(上)

本文记录了如何实现用获取户信息&#xff0c;用户信息更新&#xff0c;用户头像上传三大基础功能 先上接口实现截图&#xff1a; 一、项目结构概览 先介绍一下 个人博客系统采用了标准的 Spring Boot 项目结构&#xff0c;用户功能相关的文件主要分布在以下几个目录&#xff1a…...

判断一个整数是否为素数

#include <stdio.h> #include <stdbool.h> // 引入布尔类型// 函数声明&#xff1a;判断一个整数是否为素数 bool isPrime(int num);int main() {int number;// 提示用户输入一个整数printf("请输入一个整数&#xff1a;");scanf("%d", &n…...

具身智能机器人学习路线全解析

一、引言 具身智能机器人作为融合了机器人学、人工智能、认知科学等多领域知识的前沿技术&#xff0c;正逐渐改变着我们的生活和工作方式。从工业制造到家庭服务&#xff0c;从医疗护理到太空探索&#xff0c;具身智能机器人都展现出了巨大的潜力。对于想要深入了解和学习这一…...

虚幻基础:ue引擎的碰撞

文章目录 碰撞&#xff1a;碰撞体间 运动后 产生碰撞的行为——由引擎负责&#xff0c;并向各自发送事件忽略重叠阻挡 碰撞体类型模式纯查询&#xff1a;不清楚具体作用可以阻挡 actor碰撞(武器&#xff1a;刀/子弹)子组件可以产生阻挡 角色的碰撞只有根组件可以阻挡&#xff0…...

写项目时一些疑惑:组件间的通信、createDownloadUrl和DownloadUrl,ArrayBuffer与Blob等

目录 一、[vite] Internal server error: No known conditions for "./lib/locale/lang/zh-cn" specifier in "element-plus" package 二、可以用vue和JS的代码片段,但是用不了html的代码片段 三、meta是什么东西 四、为什么代码保持一致,但是时间轴始…...

TAS启动与卸载

3. 启动TAS&#xff08;Thin-Agent服务&#xff09; TAS在安装完成后通常会自动启动&#xff0c;并在系统重启时自启。如需手动启动&#xff0c;请按以下步骤操作&#xff1a; &#xfffc; 3.1 在Windows上启动TAS 1. 打开 Windows服务管理器&#xff1a; ◦ 按下 Win R&…...

对抗生成进化:基于DNA算法的AIGC检测绕过——让AI创作真正“隐形“

一、技术背景与核心思想 2025年&#xff0c;AIGC检测工具&#xff08;如Originality.AI 5.0&#xff09;的识别准确率已达99.3%。本研究提出基于染色体编码的对抗进化框架&#xff08;CAEF&#xff09;&#xff0c;通过模拟生物进化过程动态优化生成模型&#xff0c;成功将检测…...

手动关闭ArcGIS与ArcGIS Online连接的方法

【关闭软件启动时ArcGIS与ArcGIS Online连接方法】 打开C盘找到文件夹“C:\Program Files (x86)\Common Files\ArcGIS\bin”&#xff0c;如下图&#xff0c;删除“ArcGISConnection.exe”与“ArcGISConnectionTest.exe”文件&#xff0c;软件下次启动的时候就不会建立与ArcGIS …...

SpringBoot条件注解全解析:核心作用与使用场景详解

目录 引言一、条件注解的核心机制二、SpringBoot内置条件注解详解1、ConditionalOnClass和ConditionalOnMissingClass2、ConditionalOnBean和ConditionalOnMissingBean3、ConditionalOnProperty4、ConditionalOnWebApplication和ConditionalOnNotWebApplication5、ConditionalO…...

android11通过白名单卸载安装应用

目录 1.源码路径: 2.准备文件package.conf: 3.安装方法installPackagesLI 4.卸载方法deletePackageX 1.源码路径: frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java public static final String WHITELIST_PATH="/data/misc/pa…...

大M法处理非线性约束线性化

在电力系统优化问题中&#xff0c;大M法&#xff08;Big M Method&#xff09;是一种经典的处理非线性约束线性化的技术&#xff0c;尤其适用于混合整数线性规划&#xff08;MILP&#xff09;问题。 其核心思想是通过引入足够大的常数M和辅助变量&#xff08;如二元变量或松弛…...

【网络安全】谁入侵了我的调制解调器?(一)

文章目录 我被黑了159.65.76.209,你是谁?黑客攻击黑客?交出证据三年后我被黑了 两年前,在我家里使用家庭网络远程办公时,遇到了一件非常诡异的事情。当时,我正在利用一个“盲 XXE 漏洞”,这个漏洞需要借助一个外部 HTTP 服务器来“走私”文件。为了实现这一点,我在 AW…...

【Nokia 7360 ISAM局端】7360局端升级步骤

引言 Nokia 7360 ISAM局端是当前主流的OLT局端之一,在测试ONT产品中经常需要对接7360局端,特别是欧美等海外运营商。测试过程中经常需要升级OLT版本,以便对齐前方客户的现网环境。本文介绍将Nokia 7360 ISAM局端升级到L6GPAA65.669版本的详细步骤。 连接带外管理口 将维护…...

await 在多线程,子线程中的使用

await 在多线程,子线程中的使用 await self.send_reply(user, user, user, auto_content, reply) 这行代码是在一个异步函数里调用类的实例方法 send_reply 代码含义 1. await 关键字 在 Python 的异步编程里,await 关键字的作用是暂停当前异步函数的执行,直到 await 后…...

主数据管理:企业数字化转型的 “数据基石“ 如何为 AI 筑基?

引言&#xff1a;当数据成为新石油&#xff0c;谁在炼制 "高纯度燃料"&#xff1f; 在数字化转型的浪潮中&#xff0c;企业宛如行驶在数据海洋中的巨轮&#xff0c;AI 则是驱动巨轮破浪前行的引擎。但引擎能否高效运转&#xff0c;取决于燃料的纯度 —— 这正是主数…...

使用源码编译安装golang的docker版

编译规则 1.4之前用C写的&#xff0c;1.4可编译后续一直到1.9版本&#xff0c;后续版本实现了自举&#xff0c;后续版本是go写的&#xff0c;基本上相互低2个版本能编译出新版本。 Go < 1.4&#xff1a;C 工具链。 1.5 < Go < 1.19&#xff1a;Go 1.4 编译器。 1.20…...

使用 chromedriver 实现网络爬虫【手抄】

1、引用 selenium 包 <dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.29.0</version> </dependency> <dependency><groupId>org.seleniumhq.seleniu…...

Linux之 grep、find、ls、wc 命令

Linux之 grep、find、ls、wc 命令 “ 在 Linux 世界中&#xff0c;命令行是不可或缺的一部分&#xff0c;而掌握一些常用的命令可以帮助你更有效率地管理文件和系统。本文将为你介绍四個基礎而强大的 Linux 命令&#xff1a;grep、find、ls 和 wc&#xff0c;带你开启高效文件…...

AI 模型高效化:推理加速与训练优化的技术原理与理论解析

AI 模型高效化&#xff1a;推理加速与训练优化的技术原理与理论解析 文章目录 AI 模型高效化&#xff1a;推理加速与训练优化的技术原理与理论解析一、推理加速&#xff1a;让模型跑得更快的“程序员魔法”&#xff08;一&#xff09;动态结构自适应推理&#xff1a;像人类一样…...

c++STL——vector的使用和模拟实现

文章目录 vector的使用和模拟实现vector的使用vector介绍重点接口的讲解迭代器部分默认成员函数空间操作增删查改操作迭代器失效问题(重要)调整迭代器 vector的模拟实现实现的版本模拟实现结构预先处理的函数尾插函数push_backswap函数赋值重载size函数reserve函数 迭代器默认成…...

git更新的bug

文章目录 1. 问题2. 分析 1. 问题 拉取了一个项目后遇到了这个问题&#xff0c; nvocation failed Server returned invalid Response. java.lang.RuntimeException: Invocation failed Server returned invalid Response. at git4idea.GitAppUtil.sendXmlRequest(GitAppUtil…...

github | 仓库权限管理 | 开权限

省流版总结&#xff1a; github 给别人开权限&#xff1a;仓库 -> Setting -> Cllaborate -> Add people GitHub中 将公开仓库改为私有&#xff1a;仓库 -> Setting -> Danger Zone&#xff08;危险区&#xff09; ->Change repository visibility( 更改仓…...

MQTT客户端核心架构解析:clients.h源码深度解读

MQTT客户端核心架构解析&#xff1a;clients.h源码深度解读 一、头文件概览与设计哲学 clients.h作为MQTT客户端核心数据结构定义文件&#xff0c;体现了以下设计原则&#xff1a; 分层架构&#xff1a;网络层/协议层/业务层解耦状态管理&#xff1a;通过状态机实现复杂协议…...

uniapp自定义底部导航栏,解决下拉时候顶部空白的问题

一、背景 最近使用uniapp开发微信小程序&#xff0c;因为使用了自定义的顶部导航栏&#xff0c;所以在ios平台上&#xff08;Android未测试&#xff09;测试的时候&#xff0c;下拉的时候会出现整个页面下拉并且顶部留下大片空白的问题 二、任务&#xff1a;解决这个问题 经…...

C++学习之密码学知识

目录 1.文档介绍 2.知识点概述 3.项目准备 4.序列化介绍 5.项目中基础组件介绍 6.基础模块在项目中作用 7.项目中其他模块介绍 8.加密三要素 9.对称加密和非堆成加密 10.对称和非对称加密特点 11.堆成加密算法des 12.des对称加密算法 13.对称加密算法aes 14.知识点…...