hyperledger fabric fabric-sdk-java 从区块中解析交易内容及读写集 (7)

官方示例其实是有完整例子的, 但是我想你可能对那几千行代码不是很感兴趣, 所以把解析读写集部分给摘出来了, 代码奉上 

 public static List<Map> getRWSetFromBlock(BlockInfo blockInfo) throws InvalidProtocolBufferException {
        List<Map> transactionList = new ArrayList<>();
        for (BlockInfo.EnvelopeInfo envelopeInfo : blockInfo.getEnvelopeInfos()) {
            String id = envelopeInfo.getCreator().getId();
            String mspid = envelopeInfo.getCreator().getMspid();

            if (envelopeInfo.getType() == TRANSACTION_ENVELOPE) {
                Date timestamp = envelopeInfo.getTimestamp();
                BlockInfo.TransactionEnvelopeInfo transactionEnvelopeInfo = (BlockInfo.TransactionEnvelopeInfo) envelopeInfo;
                String transactionID = transactionEnvelopeInfo.getTransactionID();
                boolean valid = transactionEnvelopeInfo.isValid();
                byte validationCode = transactionEnvelopeInfo.getValidationCode();
                for (BlockInfo.TransactionEnvelopeInfo.TransactionActionInfo transactionActionInfo : transactionEnvelopeInfo.getTransactionActionInfos()) {
                    Map<String, Object> transactionMap = new HashMap<>();
                    transactionMap.put("transactionID", transactionID);
                    transactionMap.put("timestamp", timestamp.getTime());
                    transactionMap.put("isValid", valid);
                    transactionMap.put("MSPID", mspid);
                    transactionMap.put("usercert", id);
                    transactionMap.put("validationCode", validationCode);
                    int index = validationCode;
                    if (index < 26) {
                        transactionMap.put("validationCodeName", TransactionValidCode.transactionValidCode[index]);
                    } else {
                        transactionMap.put("validationCodeName", "NOT_VALIDATED_VALUE");
                    }

                    int chaincodeInputArgsCount = transactionActionInfo.getChaincodeInputArgsCount();
                    String[] argus = new String[chaincodeInputArgsCount];
                    for (int i = 0; i < chaincodeInputArgsCount; i++) {
                        argus[i] = new String(transactionActionInfo.getChaincodeInputArgs(i));
                    }
                    transactionMap.put("argus", argus);
                    transactionMap.put("status", transactionActionInfo.getResponseStatus());
                    transactionMap.put("endorsementsCount", transactionActionInfo.getEndorsementsCount());
                    String chaincodeIDName = transactionActionInfo.getChaincodeIDName();
                    transactionMap.put("chaincodeName", chaincodeIDName);
                    String chaincodeIDVersion = transactionActionInfo.getChaincodeIDVersion();
                    transactionMap.put("chaincodeVersion", chaincodeIDVersion);
                    TxReadWriteSetInfo rwsetInfo = transactionActionInfo.getTxReadWriteSet();
                    if (null != rwsetInfo) {
                        List<Map> rwList = new ArrayList<Map>();

                        for (TxReadWriteSetInfo.NsRwsetInfo nsRwsetInfo : rwsetInfo.getNsRwsetInfos()) {

                            Map<String, Object> rwMap = new HashMap<>();
                            Map<String, String> writeMap = new HashMap<>();
                            KvRwset.KVRWSet rws = nsRwsetInfo.getRwset();
                            String[] readSet = new String[rws.getReadsCount()];
                            int i = 0;
                            for (KvRwset.KVRead readList : rws.getReadsList()) {
                                String key = readList.getKey();
                                readSet[i++] = key;
                            }
                            rwMap.put("read", readSet);
                            for (KvRwset.KVWrite writeList : rws.getWritesList()) {
                                String valAsString = printableString(new String(writeList.getValue().toByteArray(), UTF_8));
                                writeList.getKey();
                                writeMap.put(writeList.getKey(), valAsString);
                            }
                            rwMap.put("write", writeMap);
                            rwList.add(rwMap);

                        }
                        transactionMap.put("RWSet", rwList);
                    }
                    transactionList.add(transactionMap);
                }
            }

        }
        return transactionList;
    }

解析出来的结果: 

{
    "MSPID": "Org1MSP",
    "validationCodeName": "VALID",
    "isValid": true,
    "endorsementsCount": 2,
    "validationCode": 0,
    "usercert": "-----BEGIN CERTIFICATE-----\nMIICKzCCAdGgAwIBAgIRAIF2IpfrV1NNOxn4LvKa2wAwCgYIKoZIzj0EAwIwczEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNjE5MTI0MDAwWhcNMzAwNjE3MTI0MDAw\nWjBsMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN\nU2FuIEZyYW5jaXNjbzEPMA0GA1UECxMGY2xpZW50MR8wHQYDVQQDDBZVc2VyMUBv\ncmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEzYjdYD03\n5MyUfJMu6jXFLGBHJLYUsIUM5FbW+0x6x/6ncT921QDZKuKRvGZY9X/NmNerzAri\nf12OFnfKEhfLBaNNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYD\nVR0jBCQwIoAgIlJzB2U8NvdZvMWgATkcePQFA9u7ELRjZy66MSZLE7cwCgYIKoZI\nzj0EAwIDSAAwRQIhALSjWg1uKJkM/HseDRwbGDrrX3OnnQpx7/3eYWydz9vFAiBE\npMOUnQUtwNHb+S39qJV+6lnuaBbbYGVytcCu4KPa9Q==\n-----END CERTIFICATE-----\n",
    "transactionID": "48369bb2bedf4a404e19cde5e57566b090a524ffdc497cec709440b422847f7b",
    "RWSet": [
        {
            "read": [
                "mycc2"
            ],
            "write": {}
        },
        {
            "read": [
                "a",
                "b"
            ],
            "write": {
                "a": "142",
                "b": "413"
            }
        }
    ],
    "argus": [
        "invoke",
        "a",
        "b",
        "5"
    ],
    "chaincodeVersion": "1.0",
    "timestamp": 1593584729787,
    "status": 200,
    "chaincodeName": "mycc2"
}

猜你喜欢

转载自blog.csdn.net/qq_27348837/article/details/107252309