Open
Description
We should likely return a more descriptive information when failing to parse, right now when a broken transaction such that what is in the serialized transaction does not match with what are the operations is passed to Rosetta Java /construct/parse it will fail but with a http 500 and not very descriptive error.
2025-04-02T09:06:58.756Z INFO 1 --- [nio-8082-exec-8] o.c.r.common.util.ParseConstructionUtil : [parseCertsToOperations] About to parse 1 certs
2025-04-02T09:06:58.758Z ERROR 1 --- [nio-8082-exec-8] o.c.r.c.e.GlobalExceptionHandler : An error occurred during the request
java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at java.base/java.util.ImmutableCollections$ListN.get(ImmutableCollections.java:687) ~[na:na]
at org.cardanofoundation.rosetta.common.util.ParseConstructionUtil.parseCertsToOperations(ParseConstructionUtil.java:240) ~[!/:na]
at org.cardanofoundation.rosetta.api.construction.service.OperationService.fillCertOperations(OperationService.java:121) ~[!/:na]
at org.cardanofoundation.rosetta.api.construction.service.OperationService.getOperationsFromTransactionData(OperationService.java:52) ~[!/:na]
at org.cardanofoundation.rosetta.api.construction.service.CardanoConstructionServiceImpl.parseTransaction(CardanoConstructionServiceImpl.java:91) ~[!/:na]
at org.cardanofoundation.rosetta.api.construction.service.ConstructionApiServiceImpl.constructionParseService(ConstructionApiServiceImpl.java:285) ~[!/:na]
at org.cardanofoundation.rosetta.api.construction.controller.ConstructionApiImplementation.constructionParse(ConstructionApiImplementation.java:63) ~[!/:na]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
we observed this error based on wrong input:
{
"network_identifier": {
"blockchain": "cardano",
"network": "preprod"
},
"signed": false,
"transaction": "82790180613530306439303130323831383235383230663030376335373637626466623664393530666662646436613937353536356135313630303237343936346562363237303238653638656664356265623238363036303138313832353833393030643664626661383766313035346461396434376436313262383236333465666634343837316333373135353463386536373332643533663436626330666237626633666236333231336462383136353561333364386334613763316337653462643735666333336666313736373834623161303031343366323730323161303030326134333930333161303533313930386530346439303130323831383330393832303035383163366263306662376266336662363332313364623831363535613333643863346137633163376534626437356663333366663137363738346238323030353831633033636361653739346166666265323761356635663734646136323636303032646231316461613661653434366165613738336239373264a16a6f7065726174696f6e7381a7746f7065726174696f6e5f6964656e746966696572a165696e64657800676163636f756e74a16761646472657373786c616464725f7465737431717274646837353837797a356d3277353034736a68716e72666d6c356670637578753234666a387877766b34386172746372616868756c6d7676736e6d77716b326b336e6d727a3230737738756a3768746c706e6c75746b307039736a666e64336e66616d6f756e74a26863757272656e6379a26673796d626f6c6341444168646563696d616c73066576616c7565682d313530303030306b636f696e5f6368616e6765a26f636f696e5f6964656e746966696572a16a6964656e7469666965727842663030376335373637626466623664393530666662646436613937353536356135313630303237343936346562363237303238653638656664356265623238363a366b636f696e5f616374696f6e6a636f696e5f7370656e74686d65746164617461a06673746174757360647479706565696e707574"
}
revelant code to look at:
public static List<Operation> parseCertsToOperations(
TransactionBody transactionBody,
List<Operation> certOps,
Network network)
throws CborException, CborSerializationException {
List<Operation> parsedOperations = new ArrayList<>();
List<Certificate> certs = transactionBody.getCerts();
int certsCount = getCertSize(certs);
log.info("[parseCertsToOperations] About to parse {} certs", certsCount);
if (certOps.size() != certsCount) {
log.error("[parseCertsToOperations] Certs count mismatch, this doesn't bode well");
//throw ExceptionFactory.certCountMismatchError();
}
we can't fix this issue without knowing what is the outcome of #380 investigation since in some cases the mismatch between certs and operations is expected perhaps.
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
Backlog