web3j icon indicating copy to clipboard operation
web3j copied to clipboard

Invalid type provided exception during event encoding

Open fextr opened this issue 2 years ago • 2 comments

Hey! I have exception when I try to encode event, that has been generated with the help of Web3j CLI Exception:

Caused by: java.lang.UnsupportedOperationException: Invalid type provided org.web3j.abi.datatypes.generated.StaticArray3
	at org.web3j.abi.Utils.getParameterizedTypeName(Utils.java:95) ~[abi-4.8.8.jar:na]
	at org.web3j.abi.Utils.getTypeName(Utils.java:50) ~[abi-4.8.8.jar:na]
	at org.web3j.abi.EventEncoder.lambda$buildMethodSignature$0(EventEncoder.java:45) ~[abi-4.8.8.jar:na]
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na]
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655) ~[na:na]
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na]
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na]
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na]
	at org.web3j.abi.EventEncoder.buildMethodSignature(EventEncoder.java:45) ~[abi-4.8.8.jar:na]
	at org.web3j.abi.EventEncoder.encode(EventEncoder.java:33) ~[abi-4.8.8.jar:na]

Example:

public static final Event BADDEPOSIT_EVENT = new Event("BadDeposit", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<StaticArray3<Uint256>>() {}, new TypeReference<Uint256>() {}));

EventEncoder.encode(BADDEPOSIT_EVENT);

Version of web3j is 4.8.8

fextr avatar Mar 23 '22 18:03 fextr

I would like to add that I run into a very similar issue if I try to decode a multi dimensional dynamic array:

java.lang.UnsupportedOperationException: Invalid class reference provided
	at org.web3j.abi.Utils.getParameterizedTypeName(Utils.java:98)
	at org.web3j.abi.Utils.getTypeName(Utils.java:50)
	at org.web3j.abi.EventEncoder.lambda$buildMethodSignature$0(EventEncoder.java:45)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
	at org.web3j.abi.EventEncoder.buildMethodSignature(EventEncoder.java:45)
	at org.web3j.abi.EventEncoder.encode(EventEncoder.java:33)

Example:

    public static final Event TESTEVENT_EVENT = new Event("TestEvent", 
            Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<DynamicArray<Uint256>>>() {}));

    EventEncoder.encode(TESTEVENT_EVENT);

robbanw avatar Jun 09 '22 12:06 robbanw

Same here

Caused by: java.lang.UnsupportedOperationException: Invalid type provided org.web3j.abi.datatypes.generated.StaticArray2
	at org.web3j.abi.Utils.getParameterizedTypeName(Utils.java:95)
	at org.web3j.abi.Utils.getTypeName(Utils.java:50)
	at org.web3j.abi.EventEncoder.lambda$buildMethodSignature$0(EventEncoder.java:45)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
	at org.web3j.abi.EventEncoder.buildMethodSignature(EventEncoder.java:45)
	at org.web3j.abi.EventEncoder.encode(EventEncoder.java:33)
	at org.web3j.tx.Contract.staticExtractEventParameters(Contract.java:742)
	at org.web3j.tx.Contract.staticExtractEventParametersWithLog(Contract.java:782)
	at org.web3j.tx.Contract.extractEventParametersWithLog(Contract.java:778)

Example:

public static final Event TESTEVENT_EVENT = new Event("TestEvent", 
            Arrays.<TypeReference<?>>asList(new TypeReference<StaticArray2<Uint256>>() {}));

EventEncoder.encode(TESTEVENT_EVENT);

web3j version: 4.9.4

maxsuelmarinho avatar Mar 21 '23 19:03 maxsuelmarinho