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 27, 2022
1 parent d183291 commit 335edbe
Show file tree
Hide file tree
Showing 6 changed files with 351 additions and 15 deletions.
8 changes: 7 additions & 1 deletion node/src/chaincodeeventsbuilder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ export class ChaincodeEventsBuilder {
return new ChaincodeEventsRequestImpl({
client: this.#options.client,
signingIdentity: this.#options.signingIdentity,
request: this.#newChaincodeEventsRequestProto(),
signedRequest: this.#newSignedChaincodeEventsRequestProto(),
});
}

Expand All @@ -51,4 +51,10 @@ export class ChaincodeEventsBuilder {
}
return result;
}

#newSignedChaincodeEventsRequestProto(): gateway.SignedChaincodeEventsRequest {
const result = new gateway.SignedChaincodeEventsRequest();
result.setRequest(this.#newChaincodeEventsRequestProto().serializeBinary());
return result;
}
}
7 changes: 3 additions & 4 deletions node/src/chaincodeeventsrequest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export interface ChaincodeEventsRequest extends Signable {
export interface ChaincodeEventsRequestOptions {
client: GatewayClient;
signingIdentity: SigningIdentity;
request: gateway.ChaincodeEventsRequest;
signedRequest: gateway.SignedChaincodeEventsRequest;
}

export class ChaincodeEventsRequestImpl implements ChaincodeEventsRequest {
Expand All @@ -50,8 +50,7 @@ export class ChaincodeEventsRequestImpl implements ChaincodeEventsRequest {
constructor(options: Readonly<ChaincodeEventsRequestOptions>) {
this.#client = options.client;
this.#signingIdentity = options.signingIdentity;
this.#signedRequest = new gateway.SignedChaincodeEventsRequest();
this.#signedRequest.setRequest(options.request.serializeBinary());
this.#signedRequest = options.signedRequest;
}

async getEvents(options?: Readonly<CallOptions>): Promise<CloseableAsyncIterable<ChaincodeEvent>> {
Expand All @@ -61,7 +60,7 @@ export class ChaincodeEventsRequestImpl implements ChaincodeEventsRequest {
}

getBytes(): Uint8Array {
return this.#signedRequest.getRequest_asU8();
return this.#signedRequest.serializeBinary();
}

getDigest(): Uint8Array {
Expand Down
111 changes: 101 additions & 10 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;

/**
* Recreate a proposal from serialized data.
* @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;

/**
* Recreate a transaction from serialized 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,13 @@ export interface Gateway {
*/
newSignedCommit(bytes: Uint8Array, signature: Uint8Array): Commit;

/**
* Recreate a commit status request from serialized data.
* @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 +202,13 @@ export interface Gateway {
*/
newSignedChaincodeEventsRequest(bytes: Uint8Array, signature: Uint8Array): ChaincodeEventsRequest;

/**
* Recreate a chaincode events request from serialized data.
* @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 +217,13 @@ export interface Gateway {
*/
newSignedBlockEventsRequest(bytes: Uint8Array, signature: Uint8Array): BlockEventsRequest;

/**
* Recreate a block events request from serialized data.
* @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 +232,13 @@ export interface Gateway {
*/
newSignedFilteredBlockEventsRequest(bytes: Uint8Array, signature: Uint8Array): FilteredBlockEventsRequest;

/**
* Recreate a filtered block events request from serialized data.
* @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 +248,21 @@ export interface Gateway {
*/
newSignedBlockAndPrivateDataEventsRequest(bytes: Uint8Array, signature: Uint8Array): BlockAndPrivateDataEventsRequest;

/**
* Recreate a block and private data events request from serialized data.
* @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 +283,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 +296,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 +336,89 @@ 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 signedRequest = gateway.SignedChaincodeEventsRequest.deserializeBinary(bytes);

const result = new ChaincodeEventsRequestImpl({
client: this.#client,
signingIdentity: this.#signingIdentity,
request,
signedRequest,
});
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 335edbe

Please sign in to comment.