Skip to content

Commit

Permalink
Node JS changes for Persistance
Browse files Browse the repository at this point in the history
Contributes to  hyperledger#394

Signed-off-by: sapthasurendran <[email protected]>
  • Loading branch information
sapthasurendran committed May 25, 2022
1 parent d183291 commit b938e89
Show file tree
Hide file tree
Showing 4 changed files with 343 additions and 9 deletions.
112 changes: 103 additions & 9 deletions node/src/gateway.ts
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,13 @@ export interface Gateway {
*/
newSignedProposal(bytes: Uint8Array, signature: Uint8Array): Proposal;

/**
* Create a proposal from a serialized proposal.
* @param bytes - Serialized proposal.
* @returns A proposal.
*/
newProposal(bytes: Uint8Array): Proposal;

/**
* Create a transaction with the specified digital signature. Supports off-line signing flow.
* @param bytes - Serialized proposal.
Expand All @@ -164,6 +171,13 @@ export interface Gateway {
*/
newSignedTransaction(bytes: Uint8Array, signature: Uint8Array): Transaction;

/**
* Create a transaction from a serialized transaction data.
* @param bytes - Serialized proposal.
* @returns A transaction.
*/
newTransaction(bytes: Uint8Array): Transaction;

/**
* Create a commit with the specified digital signature, which can be used to access information about a
* transaction that is committed to the ledger. Supports off-line signing flow.
Expand All @@ -173,6 +187,14 @@ export interface Gateway {
*/
newSignedCommit(bytes: Uint8Array, signature: Uint8Array): Commit;

/**
* Create a commit from a serialized commit status request, which can be used to access information about a
* transaction that is committed to the ledger.
* @param bytes - Serialized commit status request.
* @returns A commit status request.
*/
newCommit(bytes: Uint8Array): Commit;

/**
* Create a chaincode events request with the specified digital signature. Supports off-line signing flow.
* @param bytes - Serialized chaincode events request.
Expand All @@ -181,6 +203,13 @@ export interface Gateway {
*/
newSignedChaincodeEventsRequest(bytes: Uint8Array, signature: Uint8Array): ChaincodeEventsRequest;

/**
* Create a chaincode events request.
* @param bytes - Serialized chaincode events request.
* @returns A chaincode events request.
*/
newChaincodeEventsRequest(bytes: Uint8Array): ChaincodeEventsRequest;

/**
* Create a block events request with the specified digital signature. Supports off-line signing flow.
* @param bytes - Serialized block events request.
Expand All @@ -189,6 +218,13 @@ export interface Gateway {
*/
newSignedBlockEventsRequest(bytes: Uint8Array, signature: Uint8Array): BlockEventsRequest;

/**
* Create a block events request.
* @param bytes - Serialized block events request.
* @returns A block events request.
*/
newBlockEventsRequest(bytes: Uint8Array): BlockEventsRequest;

/**
* Create a filtered block events request with the specified digital signature. Supports off-line signing flow.
* @param bytes - Serialized filtered block events request.
Expand All @@ -197,6 +233,13 @@ export interface Gateway {
*/
newSignedFilteredBlockEventsRequest(bytes: Uint8Array, signature: Uint8Array): FilteredBlockEventsRequest;

/**
* Create a filtered block events request.
* @param bytes - Serialized filtered block events request.
* @returns A filtered block events request.
*/
newFilteredBlockEventsRequest(bytes: Uint8Array): FilteredBlockEventsRequest;

/**
* Create a block and private data events request with the specified digital signature. Supports off-line signing
* flow.
Expand All @@ -206,14 +249,22 @@ export interface Gateway {
*/
newSignedBlockAndPrivateDataEventsRequest(bytes: Uint8Array, signature: Uint8Array): BlockAndPrivateDataEventsRequest;

/**
* Create a block and private data events request.
* flow.
* @param bytes - Serialized block and private data events request.
* @returns A block and private data events request.
*/
newBlockAndPrivateDataEventsRequest(bytes: Uint8Array): BlockAndPrivateDataEventsRequest;

/**
* Close the gateway when it is no longer required. This releases all resources associated with networks and
* contracts obtained using the Gateway, including removing event listeners.
*/
close(): void;
}

class GatewayImpl {
class GatewayImpl implements Gateway {
readonly #client: GatewayClient;
readonly #signingIdentity: SigningIdentity;

Expand All @@ -234,7 +285,7 @@ class GatewayImpl {
});
}

newSignedProposal(bytes: Uint8Array, signature: Uint8Array): Proposal {
newProposal(bytes: Uint8Array): ProposalImpl {
const proposedTransaction = gateway.ProposedTransaction.deserializeBinary(bytes);
const signedProposal = assertDefined(proposedTransaction.getProposal(), 'Missing signed proposal');
const proposal = peer.Proposal.deserializeBinary(signedProposal.getProposalBytes_asU8());
Expand All @@ -247,25 +298,37 @@ class GatewayImpl {
channelName: channelHeader.getChannelId(),
proposedTransaction,
});

return result;
}

newSignedProposal(bytes: Uint8Array, signature: Uint8Array): Proposal {
const result = this.newProposal(bytes);
result.setSignature(signature);

return result;
}

newSignedTransaction(bytes: Uint8Array, signature: Uint8Array): Transaction {
newTransaction(bytes: Uint8Array): TransactionImpl {
const preparedTransaction = gateway.PreparedTransaction.deserializeBinary(bytes);

const result = new TransactionImpl({
client: this.#client,
signingIdentity: this.#signingIdentity,
preparedTransaction,
});

return result;
}

newSignedTransaction(bytes: Uint8Array, signature: Uint8Array): Transaction {
const result = this.newTransaction(bytes);
result.setSignature(signature);

return result;
}

newSignedCommit(bytes: Uint8Array, signature: Uint8Array): Commit {
newCommit(bytes: Uint8Array): CommitImpl {
const signedRequest = gateway.SignedCommitStatusRequest.deserializeBinary(bytes);
const request = gateway.CommitStatusRequest.deserializeBinary(signedRequest.getRequest_asU8());

Expand All @@ -275,59 +338,90 @@ class GatewayImpl {
transactionId: request.getTransactionId(),
signedRequest: signedRequest,
});

return result;
}

newSignedCommit(bytes: Uint8Array, signature: Uint8Array): Commit {
const result = this.newCommit(bytes);
result.setSignature(signature);

return result;
}

newSignedChaincodeEventsRequest(bytes: Uint8Array, signature: Uint8Array): ChaincodeEventsRequest {
const request = gateway.ChaincodeEventsRequest.deserializeBinary(bytes);
const result = this.newChaincodeEventsRequest(bytes);
result.setSignature(signature);

return result;
}

newChaincodeEventsRequest(bytes: Uint8Array): ChaincodeEventsRequestImpl {
const request = gateway.ChaincodeEventsRequest.deserializeBinary(bytes);
const result = new ChaincodeEventsRequestImpl({
client: this.#client,
signingIdentity: this.#signingIdentity,
request,
});
result.setSignature(signature);


return result;
}

newSignedBlockEventsRequest(bytes: Uint8Array, signature: Uint8Array): BlockEventsRequest {
const result = this.newBlockEventsRequest(bytes);
result.setSignature(signature);

return result;
}

newBlockEventsRequest(bytes: Uint8Array): BlockEventsRequestImpl {
const request = common.Envelope.deserializeBinary(bytes);

const result = new BlockEventsRequestImpl({
client: this.#client,
signingIdentity: this.#signingIdentity,
request,
});
result.setSignature(signature);

return result;
}

newSignedFilteredBlockEventsRequest(bytes: Uint8Array, signature: Uint8Array): FilteredBlockEventsRequest {
const result = this.newFilteredBlockEventsRequest(bytes);
result.setSignature(signature);

return result;
}

newFilteredBlockEventsRequest(bytes: Uint8Array): FilteredBlockEventsRequestImpl {
const request = common.Envelope.deserializeBinary(bytes);

const result = new FilteredBlockEventsRequestImpl({
client: this.#client,
signingIdentity: this.#signingIdentity,
request,
});
result.setSignature(signature);

return result;
}

newSignedBlockAndPrivateDataEventsRequest(bytes: Uint8Array, signature: Uint8Array): BlockAndPrivateDataEventsRequest {
const result = this.newBlockAndPrivateDataEventsRequest(bytes);

result.setSignature(signature);

return result;
}

newBlockAndPrivateDataEventsRequest(bytes: Uint8Array): BlockAndPrivateDataEventsRequestImpl {
const request = common.Envelope.deserializeBinary(bytes);

const result = new BlockAndPrivateDataEventsRequestImpl({
client: this.#client,
signingIdentity: this.#signingIdentity,
request,
});
result.setSignature(signature);

return result;
}
Expand Down
Loading

0 comments on commit b938e89

Please sign in to comment.