From b14ae5f8928ce7c24caace36d06ed0d0b848174f Mon Sep 17 00:00:00 2001 From: Satya <35016438+satran004@users.noreply.github.com> Date: Mon, 6 Jan 2025 20:54:25 +0800 Subject: [PATCH 1/3] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d043089a..65eb2c13 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ previous blocks, query information from a local node, monitor the local mempool, - [0.2.5](https://github.com/bloxbean/yaci/releases/tag/v0.2.5) (Compatible with Cardano Client Lib 0.5.0) **Latest Release :** -- [0.3.3](https://github.com/bloxbean/yaci/releases/tag/v0.3.3) (Supports Conway era) +- [0.3.4.1](https://github.com/bloxbean/yaci/releases/tag/v0.3.4.1) (Supports Conway era) **Development Branch:** main From e15d0ad35fbc5b3f6919d42bd9be8976db6fabb1 Mon Sep 17 00:00:00 2001 From: Satya <35016438+satran004@users.noreply.github.com> Date: Mon, 13 Jan 2025 20:24:15 +0800 Subject: [PATCH 2/3] fix: Handle edge cases in redeemer parsing when second byte is length (uint) (#105) --- .../core/model/serializers/BlockSerializer.java | 17 +++++++++++++++-- .../model/serializers/util/WitnessUtil.java | 7 +++++++ .../core/model/serializers/WitnessUtilTest.java | 10 ++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/bloxbean/cardano/yaci/core/model/serializers/BlockSerializer.java b/core/src/main/java/com/bloxbean/cardano/yaci/core/model/serializers/BlockSerializer.java index c8b3a946..7a9ad13b 100644 --- a/core/src/main/java/com/bloxbean/cardano/yaci/core/model/serializers/BlockSerializer.java +++ b/core/src/main/java/com/bloxbean/cardano/yaci/core/model/serializers/BlockSerializer.java @@ -80,7 +80,13 @@ private Block deserializeBlock(DataItem di, byte[] blockBody) { //To fix #37 incorrect redeemer & datum hash due to cbor serialization <--> deserialization issue //Get redeemer and datum bytes directly without full deserialization - handleWitnessDatumRedeemer(blockHeader.getHeaderBody().getBlockNumber(), witnessesSet, blockBody); + try { + handleWitnessDatumRedeemer(blockHeader.getHeaderBody().getBlockNumber(), witnessesSet, blockBody); + } catch (Exception e) { + //If extraction fails due to some reason + log.error("Extraction of redeemer and datum bytes without serialization/deserialization failed for block : " + blockHeader.getHeaderBody().getBlockNumber()); + } + blockBuilder.transactionWitness(witnessesSet); //auxiliary data @@ -175,7 +181,14 @@ private void handleWitnessDatumRedeemer(long block, List witnesses, b var majorType = MajorType.ofByte(redeemersBytes[0] & 0xe0); if (majorType == MajorType.ARRAY) { - var redeemerArrayBytes = getArrayBytes(redeemersBytes); + List redeemerArrayBytes = null; + try { + redeemerArrayBytes = getArrayBytes(redeemersBytes); + } catch (Exception e) { + log.error("Error parsing redeemer array bytes", e); + redeemerArrayBytes = new ArrayList<>(); + } + if (redeemerArrayBytes.size() != redeemers.size()) { log.error("block: {} redeemer does not have the same size", block); } else { diff --git a/core/src/main/java/com/bloxbean/cardano/yaci/core/model/serializers/util/WitnessUtil.java b/core/src/main/java/com/bloxbean/cardano/yaci/core/model/serializers/util/WitnessUtil.java index d52cbbe2..6e709e80 100644 --- a/core/src/main/java/com/bloxbean/cardano/yaci/core/model/serializers/util/WitnessUtil.java +++ b/core/src/main/java/com/bloxbean/cardano/yaci/core/model/serializers/util/WitnessUtil.java @@ -97,8 +97,15 @@ public static List> getRedeemerMapBytes(byte[] redeemerByt ByteArrayInputStream stream = new ByteArrayInputStream(redeemerBytes); CborDecoder decoder = new CborDecoder(stream); + //Skip the first byte which represents major type stream.read(); + //Check the type of second byte. If uint, then skip + //The map content should start with an array tag + var secondByte = MajorType.ofByte(redeemerBytes[1]); + if (secondByte == MajorType.UNSIGNED_INTEGER) + stream.read(); + while (stream.available() > 0) { int keyStartFrom = redeemerBytes.length - stream.available(); int previousAvailable = stream.available(); diff --git a/core/src/test/java/com/bloxbean/cardano/yaci/core/model/serializers/WitnessUtilTest.java b/core/src/test/java/com/bloxbean/cardano/yaci/core/model/serializers/WitnessUtilTest.java index ee156c00..cf64a780 100644 --- a/core/src/test/java/com/bloxbean/cardano/yaci/core/model/serializers/WitnessUtilTest.java +++ b/core/src/test/java/com/bloxbean/cardano/yaci/core/model/serializers/WitnessUtilTest.java @@ -158,4 +158,14 @@ public void parseDatumArrayBytesWithTag() { //Conway assertThat(datums.size()).isEqualTo(12); } + + @Test + @SneakyThrows + public void parseRedeemerMapBytes_withExtraUintInSecondByte() { + String redeemerHex = "b81e82000082d87d80821a00020ec31a025a2f7982000182d87d80821a000223711a028698fa82000282d87d80821a0002381f1a02b3027b82000382d87d80821a00024ccd1a02df6bfc82000482d87d80821a0002617b1a030bd57d82000582d87d80821a000276291a03383efe82000682d87d80821a00028ad71a0364a87f82000782d87d80821a00029f851a0391120082000882d87d80821a0002b4331a03bd7b8182000982d87d80821a0002c8e11a03e9e50282000a82d87d80821a0002dd8f1a04164e8382000b82d87d80821a0002f23d1a0442b80482000c82d87d80821a000306eb1a046f218582000d82d87d80821a00031b991a049b8b0682000e82d87d80821a000330471a04c7f48782000f82d87d80821a000344f51a04f45e0882001082d87d80821a000359a31a0520c78982001182d87d80821a00036e511a054d310a82001282d87d80821a000382ff1a05799a8b82001382d87d80821a000397ad1a05a6040c82001482d87d80821a0003ac5b1a05d26d8d82001582d87d80821a0003c1091a05fed70e82001682d87d80821a0003d5b71a062b408f82001782d87d80821a0003ea651a0657aa108200181882d87d80821a0003ff131a068413918200181982d87d80821a000413c11a06b07d128200181a82d87d80821a0004286f1a06dce6938200181b82d87d80821a00043d1d1a070950148200181c82d87d80821a000451cb1a0735b9958200181d82d87d80821a000466791a07622316"; + + var redeemers = WitnessUtil.getRedeemerMapBytes(HexUtil.decodeHexString(redeemerHex)); + + assertThat(redeemers).hasSize(30); + } } From 75d657b5d3e872f79ac77438e51b3d5b77639bee Mon Sep 17 00:00:00 2001 From: Satya Date: Mon, 20 Jan 2025 12:02:20 +0800 Subject: [PATCH 3/3] Bump version for next release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 2c8a4ecd..06c151bf 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ group = com.bloxbean.cardano artifactId = yaci -version = 0.3.4.1 +version = 0.3.5