Skip to content

Commit 7c72129

Browse files
committed
#68 Fix code review issues
1 parent 11092fb commit 7c72129

4 files changed

Lines changed: 18 additions & 14 deletions

File tree

src/main/java/org/unicitylabs/sdk/payment/SplitMintJustification.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
import org.unicitylabs.sdk.serializer.cbor.CborSerializer;
66
import org.unicitylabs.sdk.transaction.Token;
77

8+
import java.util.HashSet;
89
import java.util.List;
910
import java.util.Objects;
10-
import java.util.Set;
1111
import java.util.stream.Collectors;
1212

1313
/**
@@ -54,14 +54,18 @@ public List<SplitAssetProof> getProofs() {
5454
*
5555
* @return split mint justification
5656
*/
57-
public static SplitMintJustification create(Token token, Set<SplitAssetProof> proofs) {
57+
public static SplitMintJustification create(Token token, List<SplitAssetProof> proofs) {
5858
Objects.requireNonNull(token, "token cannot be null");
5959
Objects.requireNonNull(proofs, "proofs cannot be null");
6060

6161
if (proofs.isEmpty()) {
6262
throw new IllegalArgumentException("proofs cannot be empty");
6363
}
6464

65+
if (new HashSet<>(proofs).size() != proofs.size()) {
66+
throw new IllegalArgumentException("proofs contain duplicate asset ids");
67+
}
68+
6569
return new SplitMintJustification(token, List.copyOf(proofs));
6670
}
6771

@@ -80,7 +84,9 @@ public static SplitMintJustification fromCbor(byte[] bytes) {
8084
List<byte[]> data = CborDeserializer.decodeArray(tag.getData(), 2);
8185
return SplitMintJustification.create(
8286
Token.fromCbor(data.get(0)),
83-
CborDeserializer.decodeArray(data.get(1)).stream().map(SplitAssetProof::fromCbor).collect(Collectors.toSet())
87+
CborDeserializer.decodeArray(data.get(1)).stream()
88+
.map(SplitAssetProof::fromCbor)
89+
.collect(Collectors.toList())
8490
);
8591
}
8692

src/main/java/org/unicitylabs/sdk/payment/TokenSplit.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ public static SplitResult split(
144144
for (Entry<TokenId, SplitTokenRequest> entry : requestsByTokenId.entrySet()) {
145145
SplitTokenRequest request = entry.getValue();
146146
BigInteger tokenIdPath = entry.getKey().toBitString().toBigInteger();
147-
Set<Asset> requestAssets = new HashSet<>(request.getAssets());
147+
Set<Asset> requestAssets = request.getAssets();
148148
List<SplitAssetProof> proofs = requestAssets.stream()
149149
.map(asset -> SplitAssetProof.create(
150150
asset.getId(),

src/test/java/org/unicitylabs/sdk/functional/payment/SplitBuilderTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424

2525
import java.math.BigInteger;
2626
import java.nio.charset.StandardCharsets;
27-
import java.util.LinkedHashSet;
2827
import java.util.List;
2928
import java.util.Set;
3029

@@ -81,7 +80,7 @@ public void buildAndVerifySplitToken() throws Exception {
8180
SplitToken splitResult = split.getTokens().get(0);
8281
SplitMintJustification justification = SplitMintJustification.create(
8382
burnToken,
84-
new LinkedHashSet<>(splitResult.getProofs())
83+
splitResult.getProofs()
8584
);
8685

8786
Token splitToken = TokenUtils.mintToken(

src/test/java/org/unicitylabs/sdk/functional/payment/SplitMintJustificationVerifierTest.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import java.util.ArrayList;
4141
import java.util.Arrays;
4242
import java.util.Iterator;
43-
import java.util.LinkedHashSet;
4443
import java.util.List;
4544
import java.util.Set;
4645
import java.util.stream.Collectors;
@@ -111,7 +110,7 @@ public void setupFixture() throws Exception {
111110
SplitToken splitResult = split.getTokens().get(0);
112111
this.splitJustification = SplitMintJustification.create(
113112
burnToken,
114-
new LinkedHashSet<>(splitResult.getProofs())
113+
splitResult.getProofs()
115114
);
116115

117116
this.splitToken = TokenUtils.mintToken(
@@ -218,7 +217,7 @@ public void verifyFailsWhenAggregationPathVerificationFails() throws Exception {
218217
);
219218

220219
SplitMintJustification mutated = SplitMintJustification.create(
221-
this.splitJustification.getToken(), new LinkedHashSet<>(proofs));
220+
this.splitJustification.getToken(), proofs);
222221

223222
VerificationResult<VerificationStatus> result = verifyWith(mutated.toCbor(), originalDataBytes());
224223
assertFailWithMessage(result,
@@ -240,7 +239,7 @@ public void verifyFailsWhenAssetTreePathVerificationFails() throws Exception {
240239
proofs.set(0, mutatedProof);
241240

242241
SplitMintJustification mutated = SplitMintJustification.create(
243-
this.splitJustification.getToken(), new LinkedHashSet<>(proofs));
242+
this.splitJustification.getToken(), proofs);
244243

245244
VerificationResult<VerificationStatus> result = verifyWith(mutated.toCbor(), originalDataBytes());
246245
assertFailWithMessage(result,
@@ -267,7 +266,7 @@ public void verifyFailsWhenProofsUseDifferentAssetTrees() throws Exception {
267266
));
268267

269268
SplitMintJustification mutated = SplitMintJustification.create(
270-
this.splitJustification.getToken(), new LinkedHashSet<>(proofs));
269+
this.splitJustification.getToken(), proofs);
271270

272271
VerificationResult<VerificationStatus> result = verifyWith(mutated.toCbor(), originalDataBytes());
273272
assertFailWithMessage(result, "Current proof is not derived from the same asset tree as other proofs.");
@@ -295,7 +294,7 @@ public void verifyFailsWhenAssetTreeRootDoesNotMatchAggregationLeaf() throws Exc
295294
proofs.set(0, mutatedProof);
296295

297296
SplitMintJustification mutated = SplitMintJustification.create(
298-
this.splitJustification.getToken(), new LinkedHashSet<>(proofs));
297+
this.splitJustification.getToken(), proofs);
299298

300299
VerificationResult<VerificationStatus> result = verifyWith(mutated.toCbor(), originalDataBytes());
301300
assertFailWithMessage(result, "Asset tree root does not match aggregation path leaf.");
@@ -310,7 +309,7 @@ public void verifyFailsWhenProofAssetIdIsMissingFromAssetData() {
310309
.collect(Collectors.toSet());
311310

312311
SplitMintJustification mutated = SplitMintJustification.create(
313-
this.splitJustification.getToken(), new LinkedHashSet<>(proofs));
312+
this.splitJustification.getToken(), proofs);
314313
byte[] data = new TestPaymentData(assets).encode();
315314

316315
VerificationResult<VerificationStatus> result = verifyWith(mutated.toCbor(), data);
@@ -360,7 +359,7 @@ public void verifyFailsWhenAggregationRootDoesNotMatchBurnPredicate() throws Exc
360359
}
361360

362361
SplitMintJustification mutated = SplitMintJustification.create(
363-
this.splitJustification.getToken(), new LinkedHashSet<>(mutatedProofs));
362+
this.splitJustification.getToken(), mutatedProofs);
364363

365364
VerificationResult<VerificationStatus> result = verifyWith(mutated.toCbor(), originalDataBytes());
366365
assertFailWithMessage(result, "Aggregation path root does not match burn predicate.");

0 commit comments

Comments
 (0)