@siglesiasg/node-red-hyperledger-fabric-gateway
Version:
Hyperledger Fabric 2.x nodes for node-red with latest fabric-gateway library
73 lines • 2.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildBlockEventModel = exports.RWSetModel = exports.TransactionModel = exports.BlockModel = void 0;
const common_1 = require("@hyperledger/fabric-protos/lib/common");
const fabric_parse_block_1 = require("../libs/fabric-parse-block");
const utf8Decoder = new TextDecoder();
class BlockModel {
}
exports.BlockModel = BlockModel;
class TransactionModel {
}
exports.TransactionModel = TransactionModel;
class RWSetModel {
}
exports.RWSetModel = RWSetModel;
function buildBlockEventModel(blockData, channelId) {
let blockProtos;
if (blockData instanceof common_1.Block) {
blockProtos = (0, fabric_parse_block_1.parseBlock)(blockData);
}
else if (blockData instanceof Uint8Array) {
blockProtos = (0, fabric_parse_block_1.parseBlock)(common_1.Block.deserializeBinary(blockData));
}
return {
blockNumber: Number(blockProtos.getNumber()),
blockHash: blockProtos.getHash(),
channelId,
transactions: getTransactions(blockProtos.getTransactions()),
};
}
exports.buildBlockEventModel = buildBlockEventModel;
function getTransactions(transactions) {
const tx = [];
let transactionIndex = 0;
for (const txProtos of transactions) {
tx.push({
transactionIndex,
transactionId: txProtos.getChannelHeader().getTxId(),
isValid: txProtos.isValid(),
rawData: getRWSet(txProtos.getNamespaceReadWriteSets())
});
transactionIndex++;
}
return tx;
}
function getRWSet(rwsetProtos) {
const rw = [];
let rwIndex = 0;
for (const rwProtos of rwsetProtos) {
for (const writeProtos of rwProtos.getReadWriteSet().getWritesList()) {
const key = writeProtos.getKey();
let data;
let isChaincodeOperation;
if (key.startsWith('namespaces/fields/') || key.startsWith('namespaces/metadata/')) {
data = undefined;
isChaincodeOperation = true;
}
else {
data = JSON.parse(utf8Decoder.decode(writeProtos.getValue_asU8()));
}
rw.push({
rwIndex,
key,
data,
isChaincodeOperation,
isDelete: writeProtos.getIsDelete() ? true : undefined,
});
rwIndex++;
}
}
return rw;
}
//# sourceMappingURL=block.model.js.map