solidity的struct对象,web3j java解析输出参数

embedded/2024/10/31 13:50:35/

soliditystructweb3j_java_0">solidity的struct对象,web3j java解析输出参数

  • 先决条件
solidity">// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;contract StructDemo {struct Student {uint256 id;string name;}// 初始化一个结构体Student public student;function initStudent5(Student memory _stu) public  {student = _stu;}
}
<dependency><groupId>org.web3j</groupId><artifactId>core</artifactId><version>4.12.0</version>
</dependency>
  • 使用Java进行输出参数的解析
java">package com.kevin;import org.junit.Before;
import org.junit.Test;
import org.web3j.abi.FunctionEncoder;
import org.web3j.abi.FunctionReturnDecoder;
import org.web3j.abi.TypeReference;
import org.web3j.abi.datatypes.Function;
import org.web3j.abi.datatypes.Type;
import org.web3j.abi.datatypes.Utf8String;
import org.web3j.abi.datatypes.generated.Uint256;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.core.DefaultBlockParameterName;
import org.web3j.protocol.core.methods.request.Transaction;
import org.web3j.protocol.core.methods.response.EthCall;
import org.web3j.protocol.http.HttpService;import java.io.IOException;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;public class StructDemoTest2 {private Web3j web3jClint;private Long chainId = 5777L;@Beforepublic void init(){web3jClint = Web3j.build(new HttpService("http://127.0.0.1:8545", true));}@Testpublic void getStudent() throws IOException, ExecutionException, InterruptedException {// 构建输入参数List<TypeReference<?>> outputParameters = new ArrayList<>();outputParameters.add(new TypeReference<Uint256>() {});outputParameters.add(new TypeReference<Utf8String>() {});Function newStu = new Function("student", Collections.emptyList(), outputParameters);String encode = FunctionEncoder.encode(newStu);String from = "0x148F0cF0d183027D3f35dF8553012bD980F99ae5";String contractAddress = "0x57BF94B4Cca86d6e83347F520Ba2cDfC4FA318F9";Transaction ethCallTransaction = Transaction.createEthCallTransaction(from, contractAddress, encode);CompletableFuture<EthCall> ethCallCompletableFuture = web3jClint.ethCall(ethCallTransaction, DefaultBlockParameterName.LATEST).sendAsync();EthCall ethCall = ethCallCompletableFuture.get();String input = ethCall.getValue();System.out.println(input);List<Type> decode = FunctionReturnDecoder.decode(ethCall.getValue(), newStu.getOutputParameters());Student stu = new Student(((BigInteger) decode.get(0).getValue()).longValue(), (String) decode.get(1).getValue());System.out.println("stu-->" + stu);}}

http://www.ppmy.cn/embedded/133880.html

相关文章

Redis主从复制入门

文章目录 配置主服务器配置从服务器常用命令使用示例 Redis 主从复制是一种数据复制机制&#xff0c;它允许将一个 Redis 服务器的数据复制到多个其他 Redis 服务器。这种机制可以用来实现读写分离、提高系统的可用性和容错性。以下是与 Redis 主从复制相关的命令及其使用方法&…

RHCE http作业

配置nginx服务通过ip访问多网站 1.前提配置 关防火墙 关selinux 2.安装web服务程序nginx 保存并退出 #ip a 3.当前主机添加多地址 4.自定义nginx配置文件通过多地址区分多网站 /etc/nginx/conf.d/test_ip.conf server { #标记为一个虚拟主机 } 5.根据配置在主机创建数据文件 …

微服务设计模式 - 大使模式(Ambassador Pattern)

微服务设计模式 - 大使模式&#xff08;Ambassador Pattern&#xff09; 微服务设计模式 - 大使模式&#xff08;Ambassador Pattern&#xff09; 定义结构工作过程优点使用场景示例代码总结 定义 Ambassador Pattern 是一种常见的微服务设计模式&#xff0c;通常用于在微服…

队列的介绍

队列的定义 队列&#xff08;Queue&#xff09;是一种特殊的线性表&#xff0c;它遵循先进先出&#xff08;First In First Out&#xff0c;FIFO&#xff09;的原则。就像人们在排队等候一样&#xff0c;先进入队列的元素先被处理。队列有两个基本操作端&#xff1a;队头&…

NFS服务器

一.NFS简介 NFS&#xff08;Network File System&#xff0c;网络文件系统&#xff09;是FreeBSD支持的文件系统中的一种&#xff0c;它允许网络中的计算机&#xff08;不同的计算机、不同的操作系统&#xff09;之间通过TCP/IP网络共享资源.本地NFS的客户端应用可以透明地读写…

Python小游戏17——飞机大战

运行结果 首先&#xff0c;你需要安装Pygame库。如果你还没有安装它&#xff0c;可以使用以下命令来安装&#xff1a; bash pip install pygame 代码&#xff1a; python import pygame import random # 初始化Pygame pygame.init() # 屏幕大小 SCREEN_WIDTH 800 SCREEN_HEIGH…

【Linux】mnt命名空间-操作

先来认识一个命令行工具 unshare。unshare 是 util-linux 工具包中的一个工具&#xff0c;CentOS 7 系统默认已经集成了该工具&#xff0c;使用 unshare 命令可以实现创建并访问不同类型的 Namespace。 查看所有命名空间&#xff0c;type是命名空间类型 Mnt命名空间 创建一个mn…

python网络爬虫基础:URL的组成与结构

URL&#xff08;Uniform Resource Locator&#xff0c;统一资源定位符&#xff09;&#xff0c;常被称为网页链接、网址&#xff0c;用于在互联网中唯一标识资源的位置。一个典型的 URL 包含以下几部分&#xff1a; 1. 协议&#xff08;Protocol&#xff09; 协议指定了访问资…