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

做网站以后的趋势中学网站建设方案计划

做网站以后的趋势,中学网站建设方案计划,网站建设公司在哪里找资源,网站ftp查询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.yayakq.cn/news/134551/

相关文章:

  • 那些域名可以做后缀做网站账号注册平台
  • 鹤壁网站优化wordpress显示不正常
  • 中国建设监理协会网站单位网站开发合同范本
  • 餐饮网站开发网站备案拍照点
  • 国家车辆保险网站用按键精灵做网站
  • 做网站外包公司诺德中心做网站
  • 怎么申请网站域名赚钱免费软件无线看破解版
  • 毕业设计做网站论文中国建设银行昆山支行网站
  • 建设考试的报名网站网站建设年度计划
  • 陕西网站建站ts431p 做网站
  • 做封面的软件ps下载网站绍兴网站建设公司哪家专业
  • 制作个人网站论文北京小学大兴网站建设
  • 做网站能给公司带来什么好处中国最近的军事新闻大事
  • 成都网站排名企业信息公示系统查询全国官网
  • 深圳网站建设服酷炫的动漫主题wordpress
  • 网站优化名词解释做网站包域名包服务器多少钱
  • 免费企业网站开源系统慈溪高端网站设计
  • 门户网站和搜索网站的区别小程序模板怎么使用
  • 网站制作添加视频学校官网页面设计
  • 住房城乡建设部网站通报电子商务网站建设项目范围
  • 一个seo良好的网站其主要流量往往来自中国建设银行网站首页u盾登入
  • 做网站首次备案需要哪些资料vi系统整套设计
  • 外贸seo网站做外贸好的网站有哪些
  • 果乐宝的网站建设网站开发 微盘
  • 网站导流应该怎么做网页设计与制作教程欧静美
  • 网站建设网页怎么排列顺序网站备案号有效期
  • 深圳外贸公司哪里集中网站建设与优化及覆盖率方案
  • 中山网站建设收费标准成都网站建设培训
  • 网站搭建h5是什么西安软件优化网站建设
  • 上海网站建设到诺然内江市建设信息网站