-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStateTransitionClient.java
More file actions
82 lines (69 loc) · 2.99 KB
/
Copy pathStateTransitionClient.java
File metadata and controls
82 lines (69 loc) · 2.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package com.unicity.sdk;
import com.unicity.sdk.api.IAggregatorClient;
import com.unicity.sdk.api.RequestId;
import com.unicity.sdk.api.SubmitCommitmentResponse;
import com.unicity.sdk.token.Token;
import com.unicity.sdk.token.TokenState;
import com.unicity.sdk.transaction.Commitment;
import com.unicity.sdk.transaction.InclusionProof;
import com.unicity.sdk.transaction.InclusionProofVerificationStatus;
import com.unicity.sdk.transaction.MintCommitment;
import com.unicity.sdk.transaction.MintTransactionData;
import com.unicity.sdk.transaction.Transaction;
import com.unicity.sdk.transaction.TransferCommitment;
import com.unicity.sdk.transaction.TransferTransactionData;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
public class StateTransitionClient {
protected final IAggregatorClient client;
public StateTransitionClient(IAggregatorClient client) {
this.client = client;
}
public <T extends MintTransactionData<?>> CompletableFuture<SubmitCommitmentResponse> submitCommitment(
MintCommitment<T> commitment) {
return this.client.submitCommitment(
commitment.getRequestId(),
commitment.getTransactionData().calculateHash(),
commitment.getAuthenticator()
);
}
public CompletableFuture<SubmitCommitmentResponse> submitCommitment(
Token<?> token,
TransferCommitment commitment) {
if (!commitment.getTransactionData().getSourceState().getUnlockPredicate()
.isOwner(commitment.getAuthenticator().getPublicKey())) {
throw new IllegalArgumentException(
"Ownership verification failed: Authenticator does not match source state predicate.");
}
return this.client.submitCommitment(commitment.getRequestId(), commitment.getTransactionData()
.calculateHash(token.getId(), token.getType()), commitment.getAuthenticator());
}
public <T extends MintTransactionData<?>> Token<T> finalizeTransaction(
Token<T> token,
TokenState state,
Transaction<TransferTransactionData> transaction
) {
return this.finalizeTransaction(token, state, transaction, List.of());
}
public <T extends MintTransactionData<?>> Token<T> finalizeTransaction(
Token<T> token,
TokenState state,
Transaction<TransferTransactionData> transaction,
List<Token<?>> nametagTokens
) {
Objects.requireNonNull(token, "Token is null");
return token.update(state, transaction, nametagTokens);
}
public CompletableFuture<InclusionProofVerificationStatus> getTokenStatus(
Token<? extends MintTransactionData<?>> token,
byte[] publicKey) {
RequestId requestId = RequestId.create(publicKey,
token.getState().calculateHash(token.getId(), token.getType()));
return this.client.getInclusionProof(requestId)
.thenApply(inclusionProof -> inclusionProof.verify(requestId));
}
public CompletableFuture<InclusionProof> getInclusionProof(Commitment<?> commitment) {
return this.client.getInclusionProof(commitment.getRequestId());
}
}