Search in sources :

Example 36 with Type

use of org.fisco.bcos.web3j.abi.datatypes.Type in project web3sdk by FISCO-BCOS.

the class ResultEntity method typeToObject.

public static Object typeToObject(Type type) {
    Object obj = null;
    if (type instanceof NumericType) {
        // uint int
        obj = ((NumericType) type).getValue();
    } else if (type instanceof Bool) {
        // bool
        obj = ((Bool) type).getValue();
    } else if (type instanceof Address) {
        // address
        obj = type.toString();
    } else if (type instanceof Bytes) {
        // bytes32
        obj = new String(((Bytes) type).getValue()).trim();
    } else if (type instanceof DynamicBytes) {
        // bytes
        obj = new String(((DynamicBytes) type).getValue()).trim();
    } else if (type instanceof Utf8String) {
        // string
        obj = ((Utf8String) type).getValue();
    } else if (type instanceof Array) {
        // T[] T[k]
        List<Object> r = new ArrayList<Object>();
        List l = ((Array) type).getValue();
        for (int i = 0; i < l.size(); ++i) {
            r.add(typeToObject((Type) l.get(i)));
        }
        obj = (Object) r;
    } else {
        obj = (Object) obj;
    }
    return obj;
}
Also used : NumericType(org.fisco.bcos.web3j.abi.datatypes.NumericType) Address(org.fisco.bcos.web3j.abi.datatypes.Address) ArrayList(java.util.ArrayList) Utf8String(org.fisco.bcos.web3j.abi.datatypes.Utf8String) Array(org.fisco.bcos.web3j.abi.datatypes.Array) DynamicBytes(org.fisco.bcos.web3j.abi.datatypes.DynamicBytes) Bytes(org.fisco.bcos.web3j.abi.datatypes.Bytes) Utf8String(org.fisco.bcos.web3j.abi.datatypes.Utf8String) DynamicBytes(org.fisco.bcos.web3j.abi.datatypes.DynamicBytes) NumericType(org.fisco.bcos.web3j.abi.datatypes.NumericType) Type(org.fisco.bcos.web3j.abi.datatypes.Type) Bool(org.fisco.bcos.web3j.abi.datatypes.Bool) ArrayList(java.util.ArrayList) List(java.util.List)

Example 37 with Type

use of org.fisco.bcos.web3j.abi.datatypes.Type in project web3sdk by FISCO-BCOS.

the class SolidityFunctionWrapper method buildVariableLengthEventInitializer.

private static CodeBlock buildVariableLengthEventInitializer(String eventName, List<NamedTypeName> parameterTypes) {
    List<Object> objects = new ArrayList<>();
    objects.add(Event.class);
    objects.add(eventName);
    objects.add(Arrays.class);
    objects.add(TypeReference.class);
    for (NamedTypeName parameterType : parameterTypes) {
        objects.add(TypeReference.class);
        objects.add(parameterType.getTypeName());
    }
    String asListParams = parameterTypes.stream().map(type -> {
        if (type.isIndexed()) {
            return "new $T<$T>(true) {}";
        } else {
            return "new $T<$T>() {}";
        }
    }).collect(Collectors.joining(", "));
    return CodeBlock.builder().addStatement("new $T($S, \n" + "$T.<$T<?>>asList(" + asListParams + "))", objects.toArray()).build();
}
Also used : Arrays(java.util.Arrays) DynamicBytes(org.fisco.bcos.web3j.abi.datatypes.DynamicBytes) Strings(org.fisco.bcos.web3j.utils.Strings) Modifier(javax.lang.model.element.Modifier) TransactionDecoder(org.fisco.bcos.web3j.tx.txdecode.TransactionDecoder) LoggerFactory(org.slf4j.LoggerFactory) ClassName(com.squareup.javapoet.ClassName) StaticArray(org.fisco.bcos.web3j.abi.datatypes.StaticArray) Web3j(org.fisco.bcos.web3j.protocol.Web3j) TransactionReceipt(org.fisco.bcos.web3j.protocol.core.methods.response.TransactionReceipt) Matcher(java.util.regex.Matcher) Map(java.util.Map) Utf8String(org.fisco.bcos.web3j.abi.datatypes.Utf8String) BigInteger(java.math.BigInteger) Address(org.fisco.bcos.web3j.abi.datatypes.Address) DynamicArray(org.fisco.bcos.web3j.abi.datatypes.DynamicArray) RemoteCall(org.fisco.bcos.web3j.protocol.core.RemoteCall) AbiDefinition(org.fisco.bcos.web3j.protocol.core.methods.response.AbiDefinition) ParameterSpec(com.squareup.javapoet.ParameterSpec) EventEncoder(org.fisco.bcos.web3j.abi.EventEncoder) Set(java.util.Set) Credentials(org.fisco.bcos.web3j.crypto.Credentials) Collectors(java.util.stream.Collectors) SourceVersion(javax.lang.model.SourceVersion) Collection(org.fisco.bcos.web3j.utils.Collection) List(java.util.List) Type(org.fisco.bcos.web3j.abi.datatypes.Type) TypeName(com.squareup.javapoet.TypeName) Pattern(java.util.regex.Pattern) NamedType(org.fisco.bcos.web3j.protocol.core.methods.response.AbiDefinition.NamedType) FunctionReturnDecoder(org.fisco.bcos.web3j.abi.FunctionReturnDecoder) FieldSpec(com.squareup.javapoet.FieldSpec) Log(org.fisco.bcos.web3j.protocol.core.methods.response.Log) Callable(java.util.concurrent.Callable) Bool(org.fisco.bcos.web3j.abi.datatypes.Bool) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Event(org.fisco.bcos.web3j.abi.datatypes.Event) AbiTypes(org.fisco.bcos.web3j.abi.datatypes.generated.AbiTypes) ContractGasProvider(org.fisco.bcos.web3j.tx.gas.ContractGasProvider) Function(org.fisco.bcos.web3j.abi.datatypes.Function) CodeBlock(com.squareup.javapoet.CodeBlock) EncryptType(org.fisco.bcos.web3j.crypto.EncryptType) Version(org.fisco.bcos.web3j.utils.Version) TypeVariableName(com.squareup.javapoet.TypeVariableName) Logger(org.slf4j.Logger) FunctionEncoder(org.fisco.bcos.web3j.abi.FunctionEncoder) TransactionManager(org.fisco.bcos.web3j.tx.TransactionManager) MethodSpec(com.squareup.javapoet.MethodSpec) ObjectMapperFactory(org.fisco.bcos.web3j.protocol.ObjectMapperFactory) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) ParameterizedTypeName(com.squareup.javapoet.ParameterizedTypeName) IOException(java.io.IOException) TypeSpec(com.squareup.javapoet.TypeSpec) Contract(org.fisco.bcos.web3j.tx.Contract) TypeReference(org.fisco.bcos.web3j.abi.TypeReference) AnnotationSpec(com.squareup.javapoet.AnnotationSpec) Collections(java.util.Collections) ArrayList(java.util.ArrayList) Utf8String(org.fisco.bcos.web3j.abi.datatypes.Utf8String)

Example 38 with Type

use of org.fisco.bcos.web3j.abi.datatypes.Type in project web3sdk by FISCO-BCOS.

the class SolidityFunctionWrapper method createMappedParameterTypes.

private String createMappedParameterTypes(AbiDefinition.NamedType namedType) {
    String name = namedType.getName();
    String type = namedType.getType();
    AbiDefinition.NamedType.Type innerType = new AbiDefinition.NamedType.Type(type);
    ParameterSpec parameterSpec = ParameterSpec.builder(buildTypeName(type), name).build();
    if (parameterSpec.type instanceof ParameterizedTypeName) {
        List<TypeName> typeNames = ((ParameterizedTypeName) parameterSpec.type).typeArguments;
        if (typeNames.size() != 1) {
            throw new UnsupportedOperationException("Only a single parameterized type is supported");
        } else {
            String parameterSpecType = parameterSpec.type.toString();
            TypeName typeName = typeNames.get(0);
            String typeMapInput = typeName + ".class";
            if (typeName instanceof ParameterizedTypeName) {
                List<TypeName> typeArguments = ((ParameterizedTypeName) typeName).typeArguments;
                if (typeArguments.size() != 1) {
                    throw new UnsupportedOperationException("Only a single parameterized type is supported");
                }
                TypeName innerTypeName = typeArguments.get(0);
                parameterSpecType = ((ParameterizedTypeName) parameterSpec.type).rawType.toString();
                typeMapInput = ((ParameterizedTypeName) typeName).rawType + ".class, " + innerTypeName + ".class";
            }
            if (innerType.dynamicArray()) {
                // dynamic array
                return parameterSpec.name + ".isEmpty()?org.fisco.bcos.web3j.abi.datatypes.DynamicArray.empty" + "(\"" + type + "\"):" + "new " + parameterSpecType + "(\n" + "        org.fisco.bcos.web3j.abi.Utils.typeMap(" + parameterSpec.name + ", " + typeMapInput + "))";
            } else {
                // static array
                return "new " + parameterSpecType + "(\n" + "        org.fisco.bcos.web3j.abi.Utils.typeMap(" + parameterSpec.name + ", " + typeMapInput + "))";
            }
        }
    } else {
        return "new " + parameterSpec.type + "(" + parameterSpec.name + ")";
    }
}
Also used : Type(org.fisco.bcos.web3j.abi.datatypes.Type) NamedType(org.fisco.bcos.web3j.protocol.core.methods.response.AbiDefinition.NamedType) EncryptType(org.fisco.bcos.web3j.crypto.EncryptType) TypeName(com.squareup.javapoet.TypeName) ParameterizedTypeName(com.squareup.javapoet.ParameterizedTypeName) AbiDefinition(org.fisco.bcos.web3j.protocol.core.methods.response.AbiDefinition) ParameterSpec(com.squareup.javapoet.ParameterSpec) NamedType(org.fisco.bcos.web3j.protocol.core.methods.response.AbiDefinition.NamedType) Utf8String(org.fisco.bcos.web3j.abi.datatypes.Utf8String) ParameterizedTypeName(com.squareup.javapoet.ParameterizedTypeName)

Example 39 with Type

use of org.fisco.bcos.web3j.abi.datatypes.Type in project web3sdk by FISCO-BCOS.

the class Ok method getTransInput.

public Tuple1<BigInteger> getTransInput(TransactionReceipt transactionReceipt) {
    String data = transactionReceipt.getInput().substring(10);
    final Function function = new Function(FUNC_TRANS, Arrays.<Type>asList(), Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {
    }));
    List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
    ;
    return new Tuple1<BigInteger>((BigInteger) results.get(0).getValue());
}
Also used : Function(org.fisco.bcos.web3j.abi.datatypes.Function) EncryptType(org.fisco.bcos.web3j.crypto.EncryptType) Type(org.fisco.bcos.web3j.abi.datatypes.Type) Tuple1(org.fisco.bcos.web3j.tuples.generated.Tuple1) TypeReference(org.fisco.bcos.web3j.abi.TypeReference)

Example 40 with Type

use of org.fisco.bcos.web3j.abi.datatypes.Type in project web3sdk by FISCO-BCOS.

the class FunctionEncoder method encodeParameters.

public static String encodeParameters(List<Type> parameters, StringBuilder result) {
    int dynamicDataOffset = Utils.getLength(parameters) * Type.MAX_BYTE_LENGTH;
    StringBuilder dynamicData = new StringBuilder();
    for (Type parameter : parameters) {
        String encodedValue = TypeEncoder.encode(parameter);
        if (parameter.dynamicType()) {
            String encodedDataOffset = TypeEncoder.encodeNumeric(new Uint(BigInteger.valueOf(dynamicDataOffset)));
            result.append(encodedDataOffset);
            dynamicData.append(encodedValue);
            dynamicDataOffset += (encodedValue.length() >> 1);
        } else {
            result.append(encodedValue);
        }
    }
    result.append(dynamicData);
    return result.toString();
}
Also used : Type(org.fisco.bcos.web3j.abi.datatypes.Type) Uint(org.fisco.bcos.web3j.abi.datatypes.Uint) Uint(org.fisco.bcos.web3j.abi.datatypes.Uint)

Aggregations

Type (org.fisco.bcos.web3j.abi.datatypes.Type)59 Utf8String (org.fisco.bcos.web3j.abi.datatypes.Utf8String)52 TypeReference (org.fisco.bcos.web3j.abi.TypeReference)46 Function (org.fisco.bcos.web3j.abi.datatypes.Function)42 Tuple1 (org.fisco.bcos.web3j.tuples.generated.Tuple1)26 DynamicBytes (org.fisco.bcos.web3j.abi.datatypes.DynamicBytes)16 NamedType (org.fisco.bcos.web3j.protocol.core.methods.response.AbiDefinition.NamedType)16 Bool (org.fisco.bcos.web3j.abi.datatypes.Bool)15 ArrayList (java.util.ArrayList)14 Address (org.fisco.bcos.web3j.abi.datatypes.Address)14 EncryptType (org.fisco.bcos.web3j.crypto.EncryptType)14 Int256 (org.fisco.bcos.web3j.abi.datatypes.generated.Int256)13 Bytes32 (org.fisco.bcos.web3j.abi.datatypes.generated.Bytes32)11 Uint256 (org.fisco.bcos.web3j.abi.datatypes.generated.Uint256)11 Test (org.junit.Test)10 AbiDefinition (org.fisco.bcos.web3j.protocol.core.methods.response.AbiDefinition)9 List (java.util.List)8 Tuple2 (org.fisco.bcos.web3j.tuples.generated.Tuple2)7 DynamicArray (org.fisco.bcos.web3j.abi.datatypes.DynamicArray)6 Event (org.fisco.bcos.web3j.abi.datatypes.Event)6