Skip to content

Commit 78840c6

Browse files
committed
#68 Allow custom network ID
1 parent 7c72129 commit 78840c6

6 files changed

Lines changed: 69 additions & 26 deletions

File tree

src/main/java/org/unicitylabs/sdk/api/NetworkId.java

Lines changed: 52 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,44 @@
33
/**
44
* Unicity network identifier ({@code α}). Used to scope token ids and other
55
* network-bound values so they cannot be replayed across networks.
6-
*
7-
* <p>{@code 0} is reserved as an uninitialized sentinel and is rejected by
8-
* {@link #fromId(short)}.
96
*/
10-
public enum NetworkId {
11-
MAINNET((short) 1),
12-
TESTNET((short) 2),
13-
LOCAL((short) 3);
7+
public final class NetworkId {
8+
9+
public static final NetworkId MAINNET = new NetworkId((short) 1, "MAINNET");
10+
public static final NetworkId TESTNET = new NetworkId((short) 2, "TESTNET");
11+
public static final NetworkId LOCAL = new NetworkId((short) 3, "LOCAL");
1412

1513
private final short id;
14+
private final String name;
1615

17-
NetworkId(short id) {
16+
private NetworkId(short id, String name) {
1817
this.id = id;
18+
this.name = name;
19+
}
20+
21+
private NetworkId(short id) {
22+
this(id, null);
23+
}
24+
25+
/**
26+
* Resolve a NetworkId from its numeric identifier. Returns the registered
27+
* singleton for known ids; constructs a new (unnamed) instance for any
28+
* other 16-bit value.
29+
*
30+
* @param id numeric network identifier
31+
* @return NetworkId for the given identifier
32+
*/
33+
public static NetworkId fromId(short id) {
34+
if (id == MAINNET.id) {
35+
return MAINNET;
36+
}
37+
if (id == TESTNET.id) {
38+
return TESTNET;
39+
}
40+
if (id == LOCAL.id) {
41+
return LOCAL;
42+
}
43+
return new NetworkId(id);
1944
}
2045

2146
/**
@@ -27,19 +52,24 @@ public short getId() {
2752
return this.id;
2853
}
2954

30-
/**
31-
* Look up a NetworkId by its numeric identifier.
32-
*
33-
* @param id numeric network identifier
34-
* @return matching network identifier
35-
* @throws IllegalArgumentException if {@code id} is not a registered network
36-
*/
37-
public static NetworkId fromId(short id) {
38-
for (NetworkId network : NetworkId.values()) {
39-
if (network.id == id) {
40-
return network;
41-
}
55+
@Override
56+
public boolean equals(Object o) {
57+
if (this == o) {
58+
return true;
4259
}
43-
throw new IllegalArgumentException("Unknown network identifier: " + id);
60+
if (!(o instanceof NetworkId)) {
61+
return false;
62+
}
63+
return this.id == ((NetworkId) o).id;
64+
}
65+
66+
@Override
67+
public int hashCode() {
68+
return Short.hashCode(this.id);
69+
}
70+
71+
@Override
72+
public String toString() {
73+
return "NetworkId[" + (this.name != null ? this.name : this.id) + "]";
4474
}
45-
}
75+
}

src/main/java/org/unicitylabs/sdk/api/bft/verification/UnicityCertificateVerification.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public static UnicityCertificateVerificationResult verify(RootTrustBase trustBas
2929
InclusionProof inclusionProof) {
3030
ArrayList<VerificationResult<?>> results = new ArrayList<>();
3131

32-
if (inclusionProof.getUnicityCertificate().getUnicitySeal().getNetworkId() != trustBase.getNetworkId()) {
32+
if (!inclusionProof.getUnicityCertificate().getUnicitySeal().getNetworkId().equals(trustBase.getNetworkId())) {
3333
results.add(new VerificationResult<>("UnicitySealNetworkMatchesTrustBaseRule", VerificationStatus.FAIL));
3434
return UnicityCertificateVerificationResult.fail(results);
3535
}

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.unicitylabs.sdk.payment;
22

3+
import org.unicitylabs.sdk.api.NetworkId;
34
import org.unicitylabs.sdk.api.bft.RootTrustBase;
45
import org.unicitylabs.sdk.crypto.hash.DataHash;
56
import org.unicitylabs.sdk.payment.asset.Asset;
@@ -69,6 +70,19 @@ public VerificationResult<VerificationStatus> verify(CertifiedMintTransaction tr
6970
);
7071
}
7172

73+
NetworkId sourceNetworkId = justification.getToken().getGenesis().getNetworkId();
74+
if (!transaction.getNetworkId().equals(sourceNetworkId)) {
75+
return new VerificationResult<>(
76+
"SplitMintJustificationVerificationRule",
77+
VerificationStatus.FAIL,
78+
String.format(
79+
"Network identifier mismatch: mint is on %s, source token is on %s.",
80+
transaction.getNetworkId(),
81+
sourceNetworkId
82+
)
83+
);
84+
}
85+
7286
VerificationResult<VerificationStatus> verificationResult = justification.getToken()
7387
.verify(trustBase, predicateVerifier, mintJustificationVerifier);
7488
if (verificationResult.getStatus() != VerificationStatus.OK) {

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import java.security.SecureRandom;
2121
import java.util.ArrayList;
2222
import java.util.HashMap;
23-
import java.util.HashSet;
2423
import java.util.LinkedHashMap;
2524
import java.util.List;
2625
import java.util.Map;

src/main/java/org/unicitylabs/sdk/transaction/verification/CertifiedMintTransactionVerificationRule.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public static VerificationResult<VerificationStatus> verify(
4444
) {
4545
List<VerificationResult<?>> results = new ArrayList<>();
4646

47-
if (transaction.getNetworkId() != trustBase.getNetworkId()) {
47+
if (!transaction.getNetworkId().equals(trustBase.getNetworkId())) {
4848
results.add(new VerificationResult<>("MintNetworkMatchesTrustBaseRule", VerificationStatus.FAIL));
4949
return new VerificationResult<>("CertifiedMintTransactionVerificationRule",
5050
VerificationStatus.FAIL, "Mint network does not match trust base.", results);

src/test/java/org/unicitylabs/sdk/utils/TokenUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public static Token mintToken(
3333
Predicate recipient
3434
) throws Exception {
3535
return TokenUtils.mintToken(client, trustBase, predicateVerifier, mintJustificationVerifier,
36-
recipient, null);
36+
recipient, (byte[]) null);
3737
}
3838

3939
public static Token mintToken(

0 commit comments

Comments
 (0)