Skip to content

Commit bc216e0

Browse files
committed
chore: fixed assets and multi assets removal in case of a non modifiable list
1 parent 288173c commit bc216e0

File tree

2 files changed

+24
-11
lines changed
  • transaction-spec/src

2 files changed

+24
-11
lines changed

transaction-spec/src/main/java/com/bloxbean/cardano/client/transaction/spec/Value.java

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import java.util.Collections;
1717
import java.util.HashMap;
1818
import java.util.List;
19+
import java.util.stream.Collectors;
20+
import java.util.stream.Stream;
1921

2022
import static com.bloxbean.cardano.client.common.CardanoConstants.LOVELACE;
2123

@@ -214,13 +216,24 @@ public Value subtract(Value that) {
214216
BigInteger sumCoin = (getCoin() == null ? BigInteger.ZERO.subtract(that.getCoin()) : getCoin().subtract(that.getCoin()));
215217
List<MultiAsset> difMultiAssets = MultiAsset.subtractMultiAssetLists(getMultiAssets(), that.getMultiAssets());
216218

217-
//Remove all asset with value == 0
218-
difMultiAssets.forEach(multiAsset ->
219-
multiAsset.getAssets().removeIf(asset -> BigInteger.ZERO.equals(asset.getValue())));
220-
//Remove multiasset if there's no asset
221-
difMultiAssets.removeIf(multiAsset -> multiAsset.getAssets() == null || multiAsset.getAssets().isEmpty());
222-
223-
return Value.builder().coin(sumCoin).multiAssets(difMultiAssets).build();
219+
List<MultiAsset> filteredMultiAssets = difMultiAssets
220+
.stream()
221+
.flatMap(multiAsset -> {
222+
List<Asset> assets = multiAsset
223+
.getAssets()
224+
.stream()
225+
.filter(asset -> !asset.getValue().equals(BigInteger.ZERO))
226+
.collect(Collectors.toList());
227+
if (!assets.isEmpty()) {
228+
multiAsset.setAssets(assets);
229+
return Stream.of(multiAsset);
230+
} else {
231+
return Stream.empty();
232+
}
233+
})
234+
.collect(Collectors.toList());
235+
236+
return Value.builder().coin(sumCoin).multiAssets(filteredMultiAssets).build();
224237
}
225238

226239
/**

transaction-spec/src/test/java/com/bloxbean/cardano/client/transaction/spec/ValueSpecTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ public void addSingleTokenUnit() {
519519
String policyId = "ef76f6f0b3558ea0aaad6af5c9a5f3e5bf20b393314de747662e8ce9";
520520
BigInteger hundredMil = BigInteger.valueOf(100_000_000L);
521521
Value value = Value.builder().coin(BigInteger.valueOf(10_000_000L)).build();
522-
Value actual = value.add("ef76f6f0b3558ea0aaad6af5c9a5f3e5bf20b393314de747662e8ce9.506f6c795065657237353436", hundredMil);
522+
Value actual = value.add("ef76f6f0b3558ea0aaad6af5c9a5f3e5bf20b393314de747662e8ce9506f6c795065657237353436", hundredMil);
523523

524524
Value expected = value
525525
.toBuilder()
@@ -679,7 +679,7 @@ public void amountOfMissingTokenFromUnitIsZero() {
679679
value = value.add(policyId, "0x506f6c795065657237353436", hundredMil);
680680
String assetName = new String(HexUtil.decodeHexString("506f6c795065657237353436"));
681681
value = value.add(policyId, assetName, hundredMil);
682-
BigInteger actual = value.amountOf("4247d5091db82330100904963ab8d0850976c80d3f1b927e052e07bd.546f6b68756e");
682+
BigInteger actual = value.amountOf("4247d5091db82330100904963ab8d0850976c80d3f1b927e052e07bd546f6b68756e");
683683
Assertions.assertEquals(BigInteger.ZERO, actual);
684684
}
685685

@@ -724,10 +724,10 @@ public void isPositiveAdaOnlyParametric(String amount, boolean outcome) {
724724

725725
@ParameterizedTest
726726
@CsvSource({
727-
"0,4247d5091db82330100904963ab8d0850976c80d3f1b927e052e07bd.546f6b68756e,1000000,true",
727+
"0,4247d5091db82330100904963ab8d0850976c80d3f1b927e052e07bd546f6b68756e,1000000,true",
728728
"0,4247d5091db82330100904963ab8d0850976c80d3f1b927e052e07bd546f6b68756e,-1000000,false",
729729
"-1000000,4247d5091db82330100904963ab8d0850976c80d3f1b927e052e07bd546f6b68756e,1000000,false",
730-
"-1000000,4247d5091db82330100904963ab8d0850976c80d3f1b927e052e07bd.546f6b68756e,-1000000,false",
730+
"-1000000,4247d5091db82330100904963ab8d0850976c80d3f1b927e052e07bd546f6b68756e,-1000000,false",
731731
"1000000,4247d5091db82330100904963ab8d0850976c80d3f1b927e052e07bd546f6b68756e,0,true",
732732
})
733733
public void isPositiveParametric(String lovelace, String unit, String tokenAmount, boolean outcome) {

0 commit comments

Comments
 (0)