From 4109e741e4e4366f0b8d39568891b4d3ad1b3a67 Mon Sep 17 00:00:00 2001 From: "Mark S. Lewis" Date: Tue, 13 Dec 2022 13:18:50 +0000 Subject: [PATCH] Parse transaction creator to Identity in off_chain_data samples (#883) Signed-off-by: Mark S. Lewis Signed-off-by: Mark S. Lewis --- .../main/java/parser/ParsedTransaction.java | 18 ++++++++++++++++-- .../app/src/main/java/parser/Transaction.java | 3 ++- .../application-typescript/src/blockParser.ts | 14 +++++++++++--- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/off_chain_data/application-java/app/src/main/java/parser/ParsedTransaction.java b/off_chain_data/application-java/app/src/main/java/parser/ParsedTransaction.java index 13c51936..9c73839b 100644 --- a/off_chain_data/application-java/app/src/main/java/parser/ParsedTransaction.java +++ b/off_chain_data/application-java/app/src/main/java/parser/ParsedTransaction.java @@ -7,8 +7,10 @@ package parser; import com.google.protobuf.InvalidProtocolBufferException; +import org.hyperledger.fabric.client.identity.Identity; import org.hyperledger.fabric.protos.common.ChannelHeader; import org.hyperledger.fabric.protos.common.Payload; +import org.hyperledger.fabric.protos.msp.SerializedIdentity; import org.hyperledger.fabric.protos.peer.TxValidationCode; import java.util.ArrayList; @@ -30,8 +32,20 @@ final class ParsedTransaction implements Transaction { } @Override - public byte[] getCreator() throws InvalidProtocolBufferException { - return payload.getSignatureHeader().getCreator().toByteArray(); + public Identity getCreator() throws InvalidProtocolBufferException { + var creator = SerializedIdentity.parseFrom(payload.getSignatureHeader().getCreator()); + + return new Identity() { + @Override + public String getMspId() { + return creator.getMspid(); + } + + @Override + public byte[] getCredentials() { + return creator.getIdBytes().toByteArray(); + } + }; } @Override diff --git a/off_chain_data/application-java/app/src/main/java/parser/Transaction.java b/off_chain_data/application-java/app/src/main/java/parser/Transaction.java index 22513a4e..57bdf3e6 100644 --- a/off_chain_data/application-java/app/src/main/java/parser/Transaction.java +++ b/off_chain_data/application-java/app/src/main/java/parser/Transaction.java @@ -7,6 +7,7 @@ package parser; import com.google.protobuf.InvalidProtocolBufferException; +import org.hyperledger.fabric.client.identity.Identity; import org.hyperledger.fabric.protos.common.ChannelHeader; import org.hyperledger.fabric.protos.common.Payload; import org.hyperledger.fabric.protos.peer.TxValidationCode; @@ -15,7 +16,7 @@ import java.util.List; public interface Transaction { ChannelHeader getChannelHeader() throws InvalidProtocolBufferException; - byte[] getCreator() throws InvalidProtocolBufferException; + Identity getCreator() throws InvalidProtocolBufferException; TxValidationCode getValidationCode(); boolean isValid(); List getNamespaceReadWriteSets() throws InvalidProtocolBufferException; diff --git a/off_chain_data/application-typescript/src/blockParser.ts b/off_chain_data/application-typescript/src/blockParser.ts index b49acf2a..8bde481c 100644 --- a/off_chain_data/application-typescript/src/blockParser.ts +++ b/off_chain_data/application-typescript/src/blockParser.ts @@ -4,7 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { common, ledger, peer } from '@hyperledger/fabric-protos'; +import { Identity } from '@hyperledger/fabric-gateway'; +import { common, ledger, msp, peer } from '@hyperledger/fabric-protos'; import { assertDefined, cache } from './utils'; export interface Block { @@ -15,7 +16,7 @@ export interface Block { export interface Transaction { getChannelHeader(): common.ChannelHeader; - getCreator(): Uint8Array; + getCreator(): Identity; getValidationCode(): number; isValid(): boolean; getNamespaceReadWriteSets(): NamespaceReadWriteSet[]; @@ -106,7 +107,14 @@ function newTransaction(payload: Payload): Transaction { return { getChannelHeader: () => payload.getChannelHeader(), - getCreator: () => payload.getSignatureHeader().getCreator_asU8(), + getCreator: () => { + const creatorBytes = payload.getSignatureHeader().getCreator_asU8(); + const creator = msp.SerializedIdentity.deserializeBinary(creatorBytes); + return { + mspId: creator.getMspid(), + credentials: creator.getIdBytes_asU8(), + }; + }, getNamespaceReadWriteSets: () => transaction.getReadWriteSets() .flatMap(readWriteSet => readWriteSet.getNamespaceReadWriteSets()), getValidationCode: () => payload.getTransactionValidationCode(),