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

昆明的房产网站建设百度网站打不开

昆明的房产网站建设,百度网站打不开,私募基金网站开发流程图,加强政府网站建设管理工作讲话Web3j 继承StaticStruct的类所有属性必须为Public,属性的顺序和数量必须和solidity 里面的struct 属性相同,否则属性少了或者多了的时候会出现错位 Web3j 继承StaticStruct的类所有属性不能为private,因为web3j 是通过长度去截取返回值解析成…

Web3j 继承StaticStruct的类所有属性必须为Public,属性的顺序和数量必须和solidity 里面的struct 属性相同,否则属性少了或者多了的时候会出现错位

Web3j 继承StaticStruct的类所有属性不能为private,因为web3j 是通过长度去截取返回值解析成对应的属性进行赋值的。要获取一个list对象时,web3j是按一个类的所有public属性个数去截取总长度的,再进行解析赋值到没一个属性里

StaticStruct类

import lombok.Data;
import org.web3j.abi.datatypes.Address;
import org.web3j.abi.datatypes.StaticStruct;
import org.web3j.abi.datatypes.Type;
import org.web3j.abi.datatypes.generated.Uint256;@Data
public class ChildStaticStruct extends StaticStruct {public Uint256 attr1;public Uint256 attr2;public Address attr3;public ChildStaticStruct(Uint256 attr1, Uint256 attr2, Address attr3) {super(new Type[]{attr1,attr2,attr3});}
}
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.web3j.abi.FunctionEncoder;
import org.web3j.abi.FunctionReturnDecoder;
import org.web3j.abi.TypeReference;
import org.web3j.abi.datatypes.Address;
import org.web3j.abi.datatypes.DynamicArray;
import org.web3j.abi.datatypes.Function;
import org.web3j.abi.datatypes.Type;
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 java.io.IOException;
import java.util.Arrays;
import java.util.List;public class TestContract {private static final Logger logger = LoggerFactory.getLogger(TestContract.class);private String address;private Web3j web3j;public TestContract(String address, Web3j web3j) {this.address = address;this.web3j = web3j;}public List<ChildStaticStruct> getStaticStructList(String address) throws IOException {List<Type> inputParameters = Arrays.asList( new Address(address));List<TypeReference<?>> outputParameters = Arrays.asList(new TypeReference<DynamicArray<ChildStaticStruct>>(){});Function function = new Function("getStaticStructList",inputParameters,outputParameters);Transaction transaction = Transaction.createEthCallTransaction(null,address, FunctionEncoder.encode(function));EthCall response = web3j.ethCall(transaction, DefaultBlockParameterName.LATEST).send();List<Type> output = FunctionReturnDecoder.decode(response.getValue(),function.getOutputParameters());List<ChildStaticStruct> results = (List<ChildStaticStruct>)output.get(0).getValue();return results;}
}

web3j的TypeDecoder 里的decodeArrayElements 验证了是否为StructType子类,

在currOffset += getSingleElementLength(input, currOffset, cls) * 64)判断了截取的长度

if (StructType.class.isAssignableFrom(cls)) {elements = new ArrayList(length);currOffset = 0;for(currOffset = offset; currOffset < length; currOffset += getSingleElementLength(input, currOffset, cls) * 64) {if (DynamicStruct.class.isAssignableFrom(cls)) {value = decodeDynamicStruct(input, offset + DefaultFunctionReturnDecoder.getDataOffset(input, currOffset, typeReference), TypeReference.create(cls));} else {value = decodeStaticStruct(input, currOffset, TypeReference.create(cls));}elements.add(value);++currOffset;}String typeName = Utils.getSimpleTypeName(cls);return (Type)consumer.apply(elements, typeName);} 

getSingleElementLength 验证了截取长度是根据public属性数量去截取Utils.staticStructNestedPublicFieldsFlatList(type).size(),pirvate计算长度

static <T extends Type> int getSingleElementLength(String input, int offset, Class<T> type) {if (input.length() == offset) {return 0;} else if (!DynamicBytes.class.isAssignableFrom(type) && !Utf8String.class.isAssignableFrom(type)) {return StaticStruct.class.isAssignableFrom(type) ? Utils.staticStructNestedPublicFieldsFlatList(type).size() : 1;} else {return decodeUintAsInt(input, offset) / 32 + 2;}}

 staticStructNestedPublicFieldsFlatList方面里面通过Modifier.isPublic(field.getModifiers())过滤了public  

public static List<Field> staticStructNestedPublicFieldsFlatList(Class<Type> classType) {return (List)staticStructsNestedFieldsFlatList(classType).stream().filter((field) -> {return Modifier.isPublic(field.getModifiers());}).collect(Collectors.toList());}

Modifier 里面比较了Public

public static boolean isPublic(int mod) {return (mod & PUBLIC) != 0;}

http://www.hengruixuexiao.com/news/13142.html

相关文章:

  • 做爰视频网站有吗开发做一个网站需要多少钱
  • 哪些网站有web做seo入门教程
  • axure 做网站原型搜索引擎
  • 广东珠海网站建设网站seo哪家好
  • 营销型网站有哪些建设流程自媒体推广
  • 大鹏网站建设友情链接工具
  • 网络认证网站百度热搜广告设计公司
  • 大鹏网络网站建设seo网络营销推广排名
  • 百度不收录网站吗搜外滴滴友链
  • wordpress 后台密码错误淘宝seo搜索引擎原理
  • 网站开发毕业论文结论旅游网站的网页设计
  • wordpress 备案号关键词营销优化
  • 医学分类手机网站模版域名注册价格及续费
  • 鸡西网站建设刚开的店铺怎么做推广
  • 做企业网站进行推广要多少钱北京优化推广公司
  • 加强和改进校园网站内容建设seo案例模板
  • 安阳做网站的公司网络推广团队哪家好
  • 网站制作平台有哪些线上拓客渠道有哪些
  • 东莞公司官网建站百度云网盘入口
  • 定制开发app百度seo通科
  • 网站开发框架 Wordpress抖音优化排名
  • 多语言社交网站开发网络营销专业如何
  • 三台网站建设哪家专业网络营销推广策划的步骤是什么
  • h5浏览器专业seo站长工具全面查询网站
  • 网站建设 常州哈尔滨百度网站快速优化
  • 石家庄网站小程序windows优化大师最新版本
  • 政务网站网上调查怎么做免费建站有哪些
  • 鲜花网站的网络营销与策划书合肥网站排名提升
  • 武汉网站建设需要多少钱百度竞价品牌广告
  • 用c 做网站优化大师的作用