Skip to content

Commit 79e2a00

Browse files
committed
syncing with ts SDK. e2e passes
1 parent c1a7f22 commit 79e2a00

51 files changed

Lines changed: 3725 additions & 642 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/main/java/com/unicity/sdk/OfflineStateTransitionClient.java

Lines changed: 0 additions & 107 deletions
This file was deleted.

src/main/java/com/unicity/sdk/StateTransitionClient.java

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.unicity.sdk.api.AggregatorClient;
66
import com.unicity.sdk.api.Authenticator;
77
import com.unicity.sdk.api.RequestId;
8+
import com.unicity.sdk.api.SubmitCommitmentResponse;
89
import com.unicity.sdk.api.SubmitCommitmentStatus;
910
import com.unicity.sdk.shared.hash.DataHash;
1011
import com.unicity.sdk.shared.hash.HashAlgorithm;
@@ -52,7 +53,7 @@ public CompletableFuture<Commitment<TransactionData>> submitTransaction(
5253
public <T extends ISerializable> CompletableFuture<Transaction<T>> createTransaction(
5354
Commitment<T> commitment,
5455
InclusionProof inclusionProof) {
55-
return inclusionProof.verify(commitment.getRequestId().toBigInt())
56+
return inclusionProof.verify(commitment.getRequestId())
5657
.thenCompose(status -> {
5758
if (status != InclusionProofVerificationStatus.OK) {
5859
return CompletableFuture.failedFuture(new Exception("Inclusion proof verification failed."));
@@ -126,10 +127,9 @@ public CompletableFuture<InclusionProofVerificationStatus> getTokenStatus(
126127
byte[] publicKey) {
127128
return RequestId.create(publicKey, token.getState().getHash())
128129
.thenCompose(requestId -> aggregatorClient.getInclusionProof(requestId))
129-
.thenCompose(inclusionProof -> inclusionProof.verify(
130+
.thenCompose(inclusionProof ->
130131
RequestId.create(publicKey, token.getState().getHash())
131-
.thenApply(RequestId::toBigInt)
132-
.join()));
132+
.thenCompose(inclusionProof::verify));
133133
}
134134

135135
public CompletableFuture<InclusionProof> getInclusionProof(Commitment<?> commitment) {
@@ -192,6 +192,26 @@ private <TD extends ISerializable> CompletableFuture<Commitment<TD>> sendTransac
192192
);
193193
}
194194

195+
public CompletableFuture<SubmitCommitmentResponse> submitCommitment(Commitment<?> commitment) {
196+
DataHash txHash = null;
197+
ISerializable transactionData = commitment.getTransactionData();
198+
if (transactionData instanceof TransactionData) {
199+
txHash = ((TransactionData) transactionData).getHash();
200+
} else if (transactionData instanceof MintTransactionData) {
201+
txHash = ((MintTransactionData<?>) transactionData).getHash();
202+
}
203+
204+
if (txHash == null) {
205+
return CompletableFuture.failedFuture(new IllegalArgumentException("Cannot get hash from transaction data"));
206+
}
207+
208+
return aggregatorClient.submitTransaction(
209+
commitment.getRequestId(),
210+
txHash,
211+
commitment.getAuthenticator()
212+
);
213+
}
214+
195215
public AggregatorClient getAggregatorClient() {
196216
return aggregatorClient;
197217
}

src/main/java/com/unicity/sdk/api/Authenticator.java

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
import com.fasterxml.jackson.databind.ObjectMapper;
66
import com.fasterxml.jackson.databind.node.ObjectNode;
77
import com.unicity.sdk.ISerializable;
8+
import com.unicity.sdk.shared.cbor.CborDecoder;
89
import com.unicity.sdk.shared.cbor.CborEncoder;
10+
import com.unicity.sdk.shared.cbor.CustomCborDecoder;
911
import com.unicity.sdk.shared.hash.DataHash;
1012
import com.unicity.sdk.shared.signing.ISignature;
1113
import com.unicity.sdk.shared.signing.ISigningService;
@@ -16,6 +18,7 @@
1618
import com.unicity.sdk.shared.util.HexConverter;
1719

1820
import java.util.Arrays;
21+
import java.util.List;
1922
import java.util.concurrent.CompletableFuture;
2023

2124
/**
@@ -40,7 +43,7 @@ public static CompletableFuture<Authenticator> create(
4043
DataHash stateHash) {
4144

4245
// TypeScript SDK signs only the transactionHash, not the concatenation
43-
return signingService.sign(transactionHash.getHash())
46+
return signingService.sign(transactionHash)
4447
.thenApply(signature -> new Authenticator(signature, transactionHash, stateHash, signingService.getPublicKey()));
4548
}
4649

@@ -140,4 +143,38 @@ public byte[] toCBOR() {
140143
stateHash.toCBOR()
141144
);
142145
}
146+
147+
/**
148+
* Deserialize Authenticator from CBOR.
149+
* @param cbor The CBOR-encoded bytes
150+
* @return An Authenticator instance
151+
*/
152+
public static Authenticator fromCBOR(byte[] cbor) {
153+
try {
154+
CustomCborDecoder.DecodeResult result = CustomCborDecoder.decode(cbor, 0);
155+
if (!(result.value instanceof List)) {
156+
throw new RuntimeException("Expected array for Authenticator");
157+
}
158+
159+
List<?> array = (List<?>) result.value;
160+
if (array.size() < 3) {
161+
throw new RuntimeException("Invalid Authenticator array size");
162+
}
163+
164+
// Deserialize signature
165+
Signature signature = Signature.fromCBOR((byte[]) array.get(0));
166+
167+
// Deserialize transaction hash
168+
DataHash transactionHash = DataHash.fromCBOR((byte[]) array.get(1));
169+
170+
// Deserialize state hash
171+
DataHash stateHash = DataHash.fromCBOR((byte[]) array.get(2));
172+
173+
// Note: address is not stored in CBOR format, it needs to be recovered
174+
// from signature if needed
175+
return new Authenticator(signature, transactionHash, stateHash, new byte[0]);
176+
} catch (Exception e) {
177+
throw new RuntimeException("Failed to deserialize Authenticator from CBOR", e);
178+
}
179+
}
143180
}

0 commit comments

Comments
 (0)