Hyperledger区块数据的访问

本文介绍了使用Hyperledger REST和Java Client API访问Hyperledger区块数据的方法。

attachments-2018-03-9MDlTgOS5aa74ab46b850.png

作者:克兰布鲁克

来源:博客园

原文链接:http://t.cn/E28lZ1I

本文约3500字+,阅读(观看)需要20分钟

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


简介

本文介绍了访问Hyperledger区块数据的几种方法。

REST API

Hyperledger提供了多个REST API (https://hyperledger-fabric.readthedocs.io/en/latest/API/CoreAPI/#rest-api) 用于访问Hyperledger区块数据。

示例1: 获取区块链长度

请求

http://192.168.99.100:7050/chain/

响应

{    "height": 5,    "currentBlockHash": "9UIs99F9Qq0RvwOzCEDG0SHvBrdoOHy0rexOICJ56aiIQbnszEO9y2QpjbMnrzIp3ehGh6W8FWY8eqbBFqaOVA==",    "previousBlockHash": "AABHooEnVMuv4JO4roHqgcNAOf3mcUqOV6sTrCWeuPcKf/ji4tYXJ5cONgcQTwoIowf1wAqhZObFmjkT1QLmsQ=="}

示例2: 获取区块数据

请求

http://192.168.99.100:7050/chain/blocks/4

响应

{    "transactions": [
        {            "type": 2,            "chaincodeID": "EgRteWNj",            "payload": "CigIARIGEgRteWNjGhwKBmludm9rZQoHdGVzdEtleQoJdGVzdFZhbHVl",            "txid": "4a05fbd2-f17d-46eb-abec-a6218b404117",            "timestamp": {                "seconds": 1476704491,                "nanos": 740300402
            },            "nonce": "jYFNo67ks3JhWh3PwxCJG0qK0rnBojwe",            "cert": "MIICQTCCAeegAwIBAgIQMQ6RNvEkQKqWqqMx6vVJujAKBggqhkjOPQQDAzAxMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLSHlwZXJsZWRnZXIxDDAKBgNVBAMTA3RjYTAeFw0xNjEwMDUxMTE5MjdaFw0xNzAxMDMxMTE5MjdaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKEwtIeXBlcmxlZGdlcjEgMB4GA1UEAxMXVHJhbnNhY3Rpb24gQ2VydGlmaWNhdGUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASzqDkDtyveHNTcz0tD73PV5xvXFU0JpDxVvN8LEAAKtnP+TfkPT42EmERcSP+oOlzpfjBD8iGaOq4wQGbPckWKo4HMMIHJMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMA0GA1UdDgQGBAQBAgMEMA8GA1UdIwQIMAaABAECAwQwTQYGKgMEBQYHAQH/BECqjFoEQcSb6N1SGRE8uc03WMz4ccjSFfplLUrSXxdUUA81LciUswvKeDz8m3abk8z/pVc06nNFAcRWXkHfqzEJMDoGBioDBAUGCAQwN90tistCDXKOkUCQUjzKbZsrEy2A/iOgGtiHru7yVoIawPIeHfnfdfP+LEtCgMrkMAoGCCqGSM49BAMDA0gAMEUCIQC5ClRb0pPCdL+peOq/Cc6Z+Wy+KTq0mIB6FAEvy5gMcwIgFI1HWhlGGGjeqLTrLvcIeWamck2ISYImcIBZIfE+xlI=",            "signature": "MEUCIHRnWCQmt+4QoiY01aiDU+0567xUgaiEZ6zZr+gDg8D2AiEA+OgCGGxWbQTkmC0IB4nJoiU65Dv/pR27XDirhtXgStU="
        }
    ],    "stateHash": "cxUZAjaQar85ZGvgt4z3soRMpQjJpDrpLBkFbwqQSVb1rebXcMT1kMzNA45MX9ybB/sILXCslN1C9yprmhAVng==",    "previousBlockHash": "9UIs99F9Qq0RvwOzCEDG0SHvBrdoOHy0rexOICJ56aiIQbnszEO9y2QpjbMnrzIp3ehGh6W8FWY8eqbBFqaOVA==",    "nonHashData": {        "localLedgerCommitTimestamp": {            "seconds": 1476704492,            "nanos": 779081508
        },        "chaincodeEvents": [
            {}
        ]
    }

Java Client API

Hyperledger Java Client API (https://github.com/hyperledger/fabric-api)提供较为底层的接口来访问Hyperledger区块数据. 以下示例代码显示如何解析Invocation类的区块中的payload。

private void decodeChaincodeInvocationSpec() {    try {
        String base64String = "CigIARIGEgRteWNjGhwKBmludm9rZQoHdGVzdEtleQoJdGVzdFZhbHVl";        byte[] decoded = javax.xml.bind.DatatypeConverter.parseBase64Binary(base64String);

        Chaincode.ChaincodeInvocationSpec invocationSpec =
                Chaincode.ChaincodeInvocationSpec.parseFrom(decoded);

        Map fields = invocationSpec.getAllFields();        for (Descriptors.FieldDescriptor key : fields.keySet()) {
            Chaincode.ChaincodeSpec value = (Chaincode.ChaincodeSpec) fields.get(key);
            System.out.println("key:" + key);
            System.out.println("value:" + value);
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

相应的输出为:

key:protos.ChaincodeInvocationSpec.chaincodeSpecvalue:type: GOLANGchaincodeID {  name: "mycc"}ctorMsg {  args: "invoke"
  args: "testKey"
  args: "testValue"}

总结

本文介绍了使用Hyperledger REST和Java Client API访问Hyperledger区块数据的方法。


文章发布只为分享区块链技术内容,版权归原作者所有,观点仅代表作者本人,绝不代表区块链兄弟赞同其观点或证实其描述。

attachments-2018-02-kL1zBfXx5a7ffd0b78798.jpg

  • 发表于 2018-12-05 10:40
  • 阅读 ( 237 )
  • 分类:hyperledger

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
不写代码的码农
社区运营-小以

556 篇文章

作家榜 »

  1. 社区运营-小以 556 文章
  2. 社区运营-小链 244 文章
  3. 于中阳Mercina-zy 79 文章
  4. 涂晶 75 文章
  5. 李晓琼 44 文章
  6. 兄弟连区块链培训 42 文章
  7. 吴寿鹤 36 文章
  8. John-smith 25 文章