{"id":246157,"date":"2022-02-01T07:06:57","date_gmt":"2022-01-31T23:06:57","guid":{"rendered":"https:\/\/www.idc.net\/help\/246157\/"},"modified":"2022-02-01T07:06:57","modified_gmt":"2022-01-31T23:06:57","slug":"hyperledger-fabric-2-x-java%e5%8c%ba%e5%9d%97%e9%93%be%e5%ba%94%e7%94%a8","status":"publish","type":"post","link":"https:\/\/idc.net\/help\/246157\/","title":{"rendered":"Hyperledger Fabric 2.x Java\u533a\u5757\u94fe\u5e94\u7528"},"content":{"rendered":"<h2>\u4e00\u3001\u8bf4\u660e<\/h2>\n<p>\u5728\u4e0a\u4e00\u7bc7\u6587\u7ae0\u4e2d \u300aHyperledger Fabric 2.x \u81ea\u5b9a\u4e49\u667a\u80fd\u5408\u7ea6\u300b \u5206\u4eab\u4e86\u667a\u80fd\u5408\u7ea6\u7684\u5b89\u88c5\u5e76\u4f7f\u7528 cli \u5ba2\u6237\u7aef\u8fdb\u884c\u5408\u7ea6\u7684\u8c03\u7528;\u672c\u6587\u5c06\u4f7f\u7528 Java \u4ee3\u7801\u57fa\u4e8e fabric-gateway-java \u8fdb\u884c\u533a\u5757\u94fe\u7f51\u7edc\u7684\u8bbf\u95ee\u4e0e\u4ea4\u6613\uff0c\u5e76\u96c6\u6210 SpringBoot \u6846\u67b6\u3002<\/p>\n<p>Fabric Gateway SDK \u5b9e\u73b0Fabric\u7684\u7f16\u7a0b\u6a21\u578b\uff0c\u63d0\u4f9b\u4e86\u4e00\u7cfb\u5217\u7b80\u5355\u7684API\u7ed9\u5e94\u7528\u7a0b\u5e8f\u4e0eFabric\u533a\u5757\u94fe\u7f51\u7edc\u8fdb\u884c\u4ea4\u4e92;<\/p>\n<p>\u7f51\u7edc\u62d3\u6251\u56fe\uff1a<\/p>\n<p style=\"text-align: center\">\n<p>file<\/p>\n<p>\u5e94\u7528\u7a0b\u5e8f\u5c06\u5404\u81ea\u7684\u7f51\u7edc\u4ea4\u4e92\u59d4\u6258\u7ed9\u5176\u7f51\u5173\uff0c\u6bcf\u4e2a\u7f51\u5173\u90fd\u4e86\u89e3\u7f51\u7edc\u4fe1\u9053\u62d3\u6251\uff0c\u5305\u62ec\u7ec4\u7ec7\u7684\u591a\u4e2aPeer\u8282\u70b9\u548c\u6392\u5e8f\u8282\u70b9\uff0c\u4f7f\u5e94\u7528\u7a0b\u5e8f\u4e13\u6ce8\u4e8e\u4e1a\u52a1\u903b\u8f91;Peer\u8282\u70b9\u53ef\u4ee5\u4f7f\u7528gossip\u534f\u8bae\u5728\u7ec4\u7ec7\u5185\u90e8\u548c\u7ec4\u7ec7\u4e4b\u95f4\u76f8\u4e92\u901a\u4fe1\u3002<\/p>\n<h2>\u4e8c\u3001Mavn\u4f9d\u8d56<\/h2>\n<p>\u6dfb\u52a0\u7f51\u5173sdk\u7684\u4f9d\u8d56\uff1a<\/p>\n<pre><span style=\"margin: 0px;padding: 0px\">&lt;<\/span>dependency<span style=\"margin: 0px;padding: 0px\">&gt;<\/span><br>  <span style=\"margin: 0px;padding: 0px\">&lt;<\/span>groupId<span style=\"margin: 0px;padding: 0px\">&gt;<\/span>org<span style=\"margin: 0px;padding: 0px\">.hyperledger<\/span><span style=\"margin: 0px;padding: 0px\">.fabric<\/span><span style=\"margin: 0px;padding: 0px\">&lt;\/<\/span>groupId<span style=\"margin: 0px;padding: 0px\">&gt;<\/span><br>  <span style=\"margin: 0px;padding: 0px\">&lt;<\/span>artifactId<span style=\"margin: 0px;padding: 0px\">&gt;<\/span>fabric<span style=\"margin: 0px;padding: 0px\">-<\/span>gateway<span style=\"margin: 0px;padding: 0px\">-<\/span>java<span style=\"margin: 0px;padding: 0px\">&lt;\/<\/span>artifactId<span style=\"margin: 0px;padding: 0px\">&gt;<\/span><br>  <span style=\"margin: 0px;padding: 0px\">&lt;<\/span>version<span style=\"margin: 0px;padding: 0px\">&gt;<\/span><span style=\"margin: 0px;padding: 0px\">2.2<\/span><span style=\"margin: 0px;padding: 0px\">.3<\/span><span style=\"margin: 0px;padding: 0px\">&lt;\/<\/span>version<span style=\"margin: 0px;padding: 0px\">&gt;<\/span><br><span style=\"margin: 0px;padding: 0px\">&lt;\/<\/span>dependency<span style=\"margin: 0px;padding: 0px\">&gt;<\/span><br><\/pre>\n<h2>\u4e09\u3001\u51c6\u5907\u914d\u7f6e\u6587\u4ef6<\/h2>\n<p>\u5de5\u7a0b\u7684\u76ee\u5f55\u7ed3\u6784\u5982\u4e0b\u56fe\u6240\u793a\uff1a<\/p>\n<p style=\"text-align: center\">\n<h3>3.1. \u51c6\u5907\u7f51\u7edc\u8bc1\u4e66<\/h3>\n<p>\u521b\u5efa\u76ee\u5f55 crypto-config \u628a orderer \u548c peer \u8282\u70b9\u7684\u8bc1\u4e66\u6587\u4ef6\u590d\u5236\u8fdb\u6765\u3002<\/p>\n<p>\u8bc1\u4e66\u6587\u4ef6\u4ece fabric-samples \u7684 test-network \u76ee\u5f55\u4e2d\u590d\u5236 ordererOrganizations \u4e0e peerOrganizations \u6587\u4ef6\u5939\uff1a<\/p>\n<p style=\"text-align: center\">\n<p style=\"text-align: center\"><\/p>\n<h3>3.2. \u521b\u5efa\u7f51\u7edc\u914d\u7f6e<\/h3>\n<p>\u521b\u5efa\u6587\u4ef6 connection.json \u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n<pre><span style=\"margin: 0px;padding: 0px\">{<\/span><br>    <span style=\"margin: 0px;padding: 0px\">\"name\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"basic-network\"<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>    <span style=\"margin: 0px;padding: 0px\">\"version\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"1.0.0\"<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>    <span style=\"margin: 0px;padding: 0px\">\"client\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>        <span style=\"margin: 0px;padding: 0px\">\"organization\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"Org1\"<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>        <span style=\"margin: 0px;padding: 0px\">\"connection\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"timeout\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"peer\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                    <span style=\"margin: 0px;padding: 0px\">\"endorser\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"300\"<\/span><br>                <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"orderer\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"300\"<\/span><br>            <span style=\"margin: 0px;padding: 0px\">}<\/span><br>        <span style=\"margin: 0px;padding: 0px\">}<\/span><br>    <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>    <span style=\"margin: 0px;padding: 0px\">\"channels\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>        <span style=\"margin: 0px;padding: 0px\">\"mychannel\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"orderers\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">[<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"orderer.example.com\"<\/span><br>            <span style=\"margin: 0px;padding: 0px\">]<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"peers\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"peer0.org1.example.com\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                    <span style=\"margin: 0px;padding: 0px\">\"endorsingPeer\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">true<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>                    <span style=\"margin: 0px;padding: 0px\">\"chaincodeQuery\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">true<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>                    <span style=\"margin: 0px;padding: 0px\">\"ledgerQuery\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">true<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>                    <span style=\"margin: 0px;padding: 0px\">\"eventSource\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">true<\/span><br>                <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"peer0.org2.example.com\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                    <span style=\"margin: 0px;padding: 0px\">\"endorsingPeer\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">true<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>                    <span style=\"margin: 0px;padding: 0px\">\"chaincodeQuery\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">true<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>                    <span style=\"margin: 0px;padding: 0px\">\"ledgerQuery\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">true<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>                    <span style=\"margin: 0px;padding: 0px\">\"eventSource\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">true<\/span><br>                <span style=\"margin: 0px;padding: 0px\">}<\/span><br>            <span style=\"margin: 0px;padding: 0px\">}<\/span><br>        <span style=\"margin: 0px;padding: 0px\">}<\/span><br>    <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>    <span style=\"margin: 0px;padding: 0px\">\"organizations\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>        <span style=\"margin: 0px;padding: 0px\">\"Org1\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"mspid\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"Org1MSP\"<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"peers\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">[<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"peer0.org1.example.com\"<\/span><br>            <span style=\"margin: 0px;padding: 0px\">]<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"certificateAuthorities\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">[<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"ca-org1\"<\/span><br>            <span style=\"margin: 0px;padding: 0px\">]<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"adminPrivateKeyPEM\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"path\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"src\/main\/resources\/crypto-config\/peerOrganizations\/org1.example.com\/users\/Admin@org1.example.com\/msp\/keystore\/priv_sk\"<\/span><br>            <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"signedCertPEM\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"path\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"src\/main\/resources\/crypto-config\/peerOrganizations\/org1.example.com\/users\/Admin@org1.example.com\/msp\/signcerts\/Admin@org1.example.com-cert.pem\"<\/span><br>            <span style=\"margin: 0px;padding: 0px\">}<\/span><br>        <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>        <span style=\"margin: 0px;padding: 0px\">\"Org2\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"mspid\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"Org2MSP\"<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"peers\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">[<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"peer0.org2.example.com\"<\/span><br>            <span style=\"margin: 0px;padding: 0px\">]<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"certificateAuthorities\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">[<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"ca-org2\"<\/span><br>            <span style=\"margin: 0px;padding: 0px\">]<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"adminPrivateKeyPEM\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"path\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"src\/main\/resources\/crypto-config\/peerOrganizations\/org2.example.com\/users\/Admin@org2.example.com\/msp\/keystore\/priv_sk\"<\/span><br>            <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"signedCertPEM\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"path\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"src\/main\/resources\/crypto-config\/peerOrganizations\/org2.example.com\/users\/Admin@org2.example.com\/msp\/signcerts\/Admin@org2.example.com-cert.pem\"<\/span><br>            <span style=\"margin: 0px;padding: 0px\">}<\/span><br>        <span style=\"margin: 0px;padding: 0px\">}<\/span><br>    <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>    <span style=\"margin: 0px;padding: 0px\">\"orderers\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>        <span style=\"margin: 0px;padding: 0px\">\"orderer.example.com\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"url\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"grpcs:\/\/192.168.28.134:7050\"<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"mspid\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"OrdererMSP\"<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"grpcOptions\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"ssl-target-name-override\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"orderer.example.com\"<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"hostnameOverride\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"orderer.example.com\"<\/span><br>            <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"tlsCACerts\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"path\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"src\/main\/resources\/crypto-config\/ordererOrganizations\/example.com\/orderers\/orderer.example.com\/tls\/ca.crt\"<\/span><br>            <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"adminPrivateKeyPEM\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"path\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"src\/main\/resources\/crypto-config\/ordererOrganizations\/example.com\/users\/Admin@example.com\/msp\/keystore\/priv_sk\"<\/span><br>            <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"signedCertPEM\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"path\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"src\/main\/resources\/crypto-config\/ordererOrganizations\/example.com\/users\/Admin@example.com\/msp\/signcerts\/Admin@example.com-cert.pem\"<\/span><br>            <span style=\"margin: 0px;padding: 0px\">}<\/span><br>        <span style=\"margin: 0px;padding: 0px\">}<\/span><br>    <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>    <span style=\"margin: 0px;padding: 0px\">\"peers\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>        <span style=\"margin: 0px;padding: 0px\">\"peer0.org1.example.com\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"url\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"grpcs:\/\/192.168.28.134:7051\"<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"grpcOptions\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"ssl-target-name-override\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"peer0.org1.example.com\"<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"hostnameOverride\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"peer0.org1.example.com\"<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"request-timeout\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">120001<\/span><br>            <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"tlsCACerts\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"path\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"src\/main\/resources\/crypto-config\/peerOrganizations\/org1.example.com\/peers\/peer0.org1.example.com\/tls\/ca.crt\"<\/span><br>            <span style=\"margin: 0px;padding: 0px\">}<\/span><br>        <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>        <span style=\"margin: 0px;padding: 0px\">\"peer0.org2.example.com\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"url\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"grpcs:\/\/192.168.28.134:9051\"<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"grpcOptions\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"ssl-target-name-override\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"peer0.org2.example.com\"<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"hostnameOverride\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"peer0.org2.example.com\"<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"request-timeout\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">120001<\/span><br>            <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"tlsCACerts\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"path\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"src\/main\/resources\/crypto-config\/peerOrganizations\/org2.example.com\/peers\/peer0.org2.example.com\/tls\/ca.crt\"<\/span><br>            <span style=\"margin: 0px;padding: 0px\">}<\/span><br>        <span style=\"margin: 0px;padding: 0px\">}<\/span><br>    <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>    <span style=\"margin: 0px;padding: 0px\">\"certificateAuthorities\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>        <span style=\"margin: 0px;padding: 0px\">\"ca-org1\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"url\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"https:\/\/192.168.28.134:7054\"<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"grpcOptions\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"verify\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">true<\/span><br>            <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"tlsCACerts\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"path\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"src\/main\/resources\/crypto-config\/peerOrganizations\/org1.example.com\/ca\/ca.org1.example.com-cert.pem\"<\/span><br>            <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"registrar\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">[<\/span><br>                <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                    <span style=\"margin: 0px;padding: 0px\">\"enrollId\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"admin\"<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>                    <span style=\"margin: 0px;padding: 0px\">\"enrollSecret\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"adminpw\"<\/span><br>                <span style=\"margin: 0px;padding: 0px\">}<\/span><br>            <span style=\"margin: 0px;padding: 0px\">]<\/span><br>        <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>        <span style=\"margin: 0px;padding: 0px\">\"ca-org2\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"url\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"https:\/\/192.168.28.134:8054\"<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"grpcOptions\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"verify\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">true<\/span><br>            <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"tlsCACerts\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                <span style=\"margin: 0px;padding: 0px\">\"path\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"src\/main\/resources\/crypto-config\/peerOrganizations\/org2.example.com\/ca\/ca.org2.example.com-cert.pem\"<\/span><br>            <span style=\"margin: 0px;padding: 0px\">}<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>            <span style=\"margin: 0px;padding: 0px\">\"registrar\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">[<\/span><br>                <span style=\"margin: 0px;padding: 0px\">{<\/span><br>                    <span style=\"margin: 0px;padding: 0px\">\"enrollId\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"admin\"<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>                    <span style=\"margin: 0px;padding: 0px\">\"enrollSecret\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"adminpw\"<\/span><br>                <span style=\"margin: 0px;padding: 0px\">}<\/span><br>            <span style=\"margin: 0px;padding: 0px\">]<\/span><br>        <span style=\"margin: 0px;padding: 0px\">}<\/span><br>    <span style=\"margin: 0px;padding: 0px\">}<\/span><br><span style=\"margin: 0px;padding: 0px\">}<\/span><br><\/pre>\n<p>\u9700\u6309\u5b9e\u9645\u60c5\u51b5\u4fee\u6539url\u4e2d\u7684\u5730\u5740\uff0c\u5185\u5bb9\u4e2d\u5206\u522b\u5305\u542b\u4e86channels\u3001organizations\u3001orderers\u3001peers\u3001ca \u7684\u914d\u7f6e<\/p>\n<h3>3.3. SpringBoot\u914d\u7f6e<\/h3>\n<p>\u5728 application.yml \u4e2d\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff0c\u7528\u4e8e\u8bbf\u95ee\u7f51\u5173\u7684\u76f8\u5173\u914d\u7f6e\uff1a<\/p>\n<pre>fabric<span style=\"margin: 0px;padding: 0px\">:<\/span><br>  # wallet\u6587\u4ef6\u5939\u8def\u5f84<span style=\"margin: 0px;padding: 0px\">(<\/span>\u81ea\u52a8\u521b\u5efa<span style=\"margin: 0px;padding: 0px\">)<\/span><br>  walletDirectory<span style=\"margin: 0px;padding: 0px\">:<\/span> wallet<br>  # \u7f51\u7edc\u914d\u7f6e\u6587\u4ef6\u8def\u5f84<br>  networkConfigPath<span style=\"margin: 0px;padding: 0px\">:<\/span> connection<span style=\"margin: 0px;padding: 0px\">.json<\/span><br>  # \u7528\u6237\u8bc1\u4e66\u8def\u5f84<br>  certificatePath<span style=\"margin: 0px;padding: 0px\">:<\/span> crypto<span style=\"margin: 0px;padding: 0px\">-<\/span>config<span style=\"margin: 0px;padding: 0px\">\/<\/span>peerOrganizations<span style=\"margin: 0px;padding: 0px\">\/<\/span>org1<span style=\"margin: 0px;padding: 0px\">.example<\/span><span style=\"margin: 0px;padding: 0px\">.com<\/span><span style=\"margin: 0px;padding: 0px\">\/<\/span>users<span style=\"margin: 0px;padding: 0px\">\/<\/span>User1@org1<span style=\"margin: 0px;padding: 0px\">.example<\/span><span style=\"margin: 0px;padding: 0px\">.com<\/span><span style=\"margin: 0px;padding: 0px\">\/<\/span>msp<span style=\"margin: 0px;padding: 0px\">\/<\/span>signcerts<span style=\"margin: 0px;padding: 0px\">\/<\/span>User1@org1<span style=\"margin: 0px;padding: 0px\">.example<\/span><span style=\"margin: 0px;padding: 0px\">.com<\/span><span style=\"margin: 0px;padding: 0px\">-<\/span>cert<span style=\"margin: 0px;padding: 0px\">.pem<\/span><br>  # \u7528\u6237\u79c1\u94a5\u8def\u5f84<br>  privateKeyPath<span style=\"margin: 0px;padding: 0px\">:<\/span> crypto<span style=\"margin: 0px;padding: 0px\">-<\/span>config<span style=\"margin: 0px;padding: 0px\">\/<\/span>peerOrganizations<span style=\"margin: 0px;padding: 0px\">\/<\/span>org1<span style=\"margin: 0px;padding: 0px\">.example<\/span><span style=\"margin: 0px;padding: 0px\">.com<\/span><span style=\"margin: 0px;padding: 0px\">\/<\/span>users<span style=\"margin: 0px;padding: 0px\">\/<\/span>User1@org1<span style=\"margin: 0px;padding: 0px\">.example<\/span><span style=\"margin: 0px;padding: 0px\">.com<\/span><span style=\"margin: 0px;padding: 0px\">\/<\/span>msp<span style=\"margin: 0px;padding: 0px\">\/<\/span>keystore<span style=\"margin: 0px;padding: 0px\">\/<\/span>priv_sk<br>  # \u8bbf\u95ee\u7684\u7ec4\u7ec7\u540d<br>  mspid<span style=\"margin: 0px;padding: 0px\">:<\/span> Org1MSP<br>  # \u7528\u6237\u540d<br>  username<span style=\"margin: 0px;padding: 0px\">:<\/span> user1<br>  # \u901a\u9053\u540d\u5b57<br>  channelName<span style=\"margin: 0px;padding: 0px\">:<\/span> mychannel<br>  # \u94fe\u7801\u540d\u5b57<br>  contractName<span style=\"margin: 0px;padding: 0px\">:<\/span> mycc<br><\/pre>\n<h2>\u56db\u3001\u8fde\u63a5\u5408\u7ea6<\/h2>\n<p>\u5206\u522b\u6784\u5efa\u7f51\u5173\u3001\u901a\u9053\u548c\u5408\u7ea6\u7684Bean\u5bf9\u8c61\uff0c\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<pre><span style=\"margin: 0px;padding: 0px\">\/**<\/span><br><span style=\"margin: 0px;padding: 0px\"> * \u8fde\u63a5\u7f51\u5173<\/span><br><span style=\"margin: 0px;padding: 0px\"> *\/<\/span><br>@Bean<br>public Gateway connectGateway<span style=\"margin: 0px;padding: 0px\">(<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span> throws IOException<span style=\"margin: 0px;padding: 0px\">,<\/span> InvalidKeyException<span style=\"margin: 0px;padding: 0px\">,<\/span> CertificateException <span style=\"margin: 0px;padding: 0px\">{<\/span><br>  <span style=\"margin: 0px;padding: 0px\">\/\/<\/span>\u4f7f\u7528org1\u4e2d\u7684user1\u521d\u59cb\u5316\u4e00\u4e2a\u7f51\u5173wallet\u8d26\u6237\u7528\u4e8e\u8fde\u63a5\u7f51\u7edc<br>  Wallet wallet <span style=\"margin: 0px;padding: 0px\">=<\/span> Wallets<span style=\"margin: 0px;padding: 0px\">.newFileSystemWallet<\/span><span style=\"margin: 0px;padding: 0px\">(<\/span>Paths<span style=\"margin: 0px;padding: 0px\">.get<\/span><span style=\"margin: 0px;padding: 0px\">(<\/span>this<span style=\"margin: 0px;padding: 0px\">.walletDirectory<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><span style=\"margin: 0px;padding: 0px\">;<\/span><br>  X509Certificate certificate <span style=\"margin: 0px;padding: 0px\">=<\/span> readX509Certificate<span style=\"margin: 0px;padding: 0px\">(<\/span>Paths<span style=\"margin: 0px;padding: 0px\">.get<\/span><span style=\"margin: 0px;padding: 0px\">(<\/span>this<span style=\"margin: 0px;padding: 0px\">.certificatePath<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><span style=\"margin: 0px;padding: 0px\">;<\/span><br>  PrivateKey privateKey <span style=\"margin: 0px;padding: 0px\">=<\/span> getPrivateKey<span style=\"margin: 0px;padding: 0px\">(<\/span>Paths<span style=\"margin: 0px;padding: 0px\">.get<\/span><span style=\"margin: 0px;padding: 0px\">(<\/span>this<span style=\"margin: 0px;padding: 0px\">.privateKeyPath<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><span style=\"margin: 0px;padding: 0px\">;<\/span><br>  wallet<span style=\"margin: 0px;padding: 0px\">.put<\/span><span style=\"margin: 0px;padding: 0px\">(<\/span>username<span style=\"margin: 0px;padding: 0px\">,<\/span> Identities<span style=\"margin: 0px;padding: 0px\">.newX509Identity<\/span><span style=\"margin: 0px;padding: 0px\">(<\/span>this<span style=\"margin: 0px;padding: 0px\">.mspid<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span> certificate<span style=\"margin: 0px;padding: 0px\">,<\/span> privateKey<span style=\"margin: 0px;padding: 0px\">)<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><span style=\"margin: 0px;padding: 0px\">;<\/span><br><br>  <span style=\"margin: 0px;padding: 0px\">\/\/<\/span>\u6839\u636econnection<span style=\"margin: 0px;padding: 0px\">.json<\/span> \u83b7\u53d6Fabric\u7f51\u7edc\u8fde\u63a5\u5bf9\u8c61<br>  Gateway<span style=\"margin: 0px;padding: 0px\">.Builder<\/span> builder <span style=\"margin: 0px;padding: 0px\">=<\/span> Gateway<span style=\"margin: 0px;padding: 0px\">.createBuilder<\/span><span style=\"margin: 0px;padding: 0px\">(<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><br>      <span style=\"margin: 0px;padding: 0px\">.identity<\/span><span style=\"margin: 0px;padding: 0px\">(<\/span>wallet<span style=\"margin: 0px;padding: 0px\">,<\/span> username<span style=\"margin: 0px;padding: 0px\">)<\/span><br>      <span style=\"margin: 0px;padding: 0px\">.networkConfig<\/span><span style=\"margin: 0px;padding: 0px\">(<\/span>Paths<span style=\"margin: 0px;padding: 0px\">.get<\/span><span style=\"margin: 0px;padding: 0px\">(<\/span>this<span style=\"margin: 0px;padding: 0px\">.networkConfigPath<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><span style=\"margin: 0px;padding: 0px\">;<\/span><br><br>  <span style=\"margin: 0px;padding: 0px\">\/\/<\/span>\u8fde\u63a5\u7f51\u5173<br>  return builder<span style=\"margin: 0px;padding: 0px\">.connect<\/span><span style=\"margin: 0px;padding: 0px\">(<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><span style=\"margin: 0px;padding: 0px\">;<\/span><br><span style=\"margin: 0px;padding: 0px\">}<\/span><br><br><span style=\"margin: 0px;padding: 0px\">\/**<\/span><br><span style=\"margin: 0px;padding: 0px\"> * \u83b7\u53d6\u901a\u9053<\/span><br><span style=\"margin: 0px;padding: 0px\"> *\/<\/span><br>@Bean<br>public Network network<span style=\"margin: 0px;padding: 0px\">(<\/span>Gateway gateway<span style=\"margin: 0px;padding: 0px\">)<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>  return gateway<span style=\"margin: 0px;padding: 0px\">.getNetwork<\/span><span style=\"margin: 0px;padding: 0px\">(<\/span>this<span style=\"margin: 0px;padding: 0px\">.channelName<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><span style=\"margin: 0px;padding: 0px\">;<\/span><br><span style=\"margin: 0px;padding: 0px\">}<\/span><br><br><span style=\"margin: 0px;padding: 0px\">\/**<\/span><br><span style=\"margin: 0px;padding: 0px\"> * \u83b7\u53d6\u5408\u7ea6<\/span><br><span style=\"margin: 0px;padding: 0px\"> *\/<\/span><br>@Bean<br>public Contract contract<span style=\"margin: 0px;padding: 0px\">(<\/span>Network network<span style=\"margin: 0px;padding: 0px\">)<\/span> <span style=\"margin: 0px;padding: 0px\">{<\/span><br>  return network<span style=\"margin: 0px;padding: 0px\">.getContract<\/span><span style=\"margin: 0px;padding: 0px\">(<\/span>this<span style=\"margin: 0px;padding: 0px\">.contractName<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><span style=\"margin: 0px;padding: 0px\">;<\/span><br><span style=\"margin: 0px;padding: 0px\">}<\/span><br><\/pre>\n<h2>\u4e94\u3001\u5408\u7ea6\u8c03\u7528<\/h2>\n<p>\u521b\u5efacontroller\u7c7b\uff0c\u6ce8\u5165Contract\u5bf9\u8c61\u8c03\u7528\u5408\u7ea6\u65b9\u6cd5\uff1a<\/p>\n<pre>@Resource<br>private Contract contract<span style=\"margin: 0px;padding: 0px\">;<\/span><br><br>@Resource<br>private Network network<span style=\"margin: 0px;padding: 0px\">;<\/span><br><br>@GetMapping<span style=\"margin: 0px;padding: 0px\">(<\/span><span style=\"margin: 0px;padding: 0px\">\"\/getUser\"<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><br>public String getUser<span style=\"margin: 0px;padding: 0px\">(<\/span>String userId<span style=\"margin: 0px;padding: 0px\">)<\/span> throws ContractException <span style=\"margin: 0px;padding: 0px\">{<\/span><br>  byte<span style=\"margin: 0px;padding: 0px\">[<\/span><span style=\"margin: 0px;padding: 0px\">]<\/span> queryAResultBefore <span style=\"margin: 0px;padding: 0px\">=<\/span> contract<span style=\"margin: 0px;padding: 0px\">.evaluateTransaction<\/span><span style=\"margin: 0px;padding: 0px\">(<\/span><span style=\"margin: 0px;padding: 0px\">\"getUser\"<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span>userId<span style=\"margin: 0px;padding: 0px\">)<\/span><span style=\"margin: 0px;padding: 0px\">;<\/span><br>  return new String<span style=\"margin: 0px;padding: 0px\">(<\/span>queryAResultBefore<span style=\"margin: 0px;padding: 0px\">,<\/span> StandardCharsets<span style=\"margin: 0px;padding: 0px\">.UTF_8<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><span style=\"margin: 0px;padding: 0px\">;<\/span><br><span style=\"margin: 0px;padding: 0px\">}<\/span><br><br>@GetMapping<span style=\"margin: 0px;padding: 0px\">(<\/span><span style=\"margin: 0px;padding: 0px\">\"\/addUser\"<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><br>public String addUser<span style=\"margin: 0px;padding: 0px\">(<\/span>String userId<span style=\"margin: 0px;padding: 0px\">,<\/span> String userName<span style=\"margin: 0px;padding: 0px\">,<\/span> String money<span style=\"margin: 0px;padding: 0px\">)<\/span> throws ContractException<span style=\"margin: 0px;padding: 0px\">,<\/span> InterruptedException<span style=\"margin: 0px;padding: 0px\">,<\/span> TimeoutException <span style=\"margin: 0px;padding: 0px\">{<\/span><br>  byte<span style=\"margin: 0px;padding: 0px\">[<\/span><span style=\"margin: 0px;padding: 0px\">]<\/span> invokeResult <span style=\"margin: 0px;padding: 0px\">=<\/span> contract<span style=\"margin: 0px;padding: 0px\">.createTransaction<\/span><span style=\"margin: 0px;padding: 0px\">(<\/span><span style=\"margin: 0px;padding: 0px\">\"addUser\"<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><br>      <span style=\"margin: 0px;padding: 0px\">.setEndorsingPeers<\/span><span style=\"margin: 0px;padding: 0px\">(<\/span>network<span style=\"margin: 0px;padding: 0px\">.getChannel<\/span><span style=\"margin: 0px;padding: 0px\">(<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><span style=\"margin: 0px;padding: 0px\">.getPeers<\/span><span style=\"margin: 0px;padding: 0px\">(<\/span>EnumSet<span style=\"margin: 0px;padding: 0px\">.of<\/span><span style=\"margin: 0px;padding: 0px\">(<\/span>Peer<span style=\"margin: 0px;padding: 0px\">.PeerRole<\/span><span style=\"margin: 0px;padding: 0px\">.ENDORSING_PEER<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><br>      <span style=\"margin: 0px;padding: 0px\">.submit<\/span><span style=\"margin: 0px;padding: 0px\">(<\/span>userId<span style=\"margin: 0px;padding: 0px\">,<\/span> userName<span style=\"margin: 0px;padding: 0px\">,<\/span> money<span style=\"margin: 0px;padding: 0px\">)<\/span><span style=\"margin: 0px;padding: 0px\">;<\/span><br>  String txId <span style=\"margin: 0px;padding: 0px\">=<\/span> new String<span style=\"margin: 0px;padding: 0px\">(<\/span>invokeResult<span style=\"margin: 0px;padding: 0px\">,<\/span> StandardCharsets<span style=\"margin: 0px;padding: 0px\">.UTF_8<\/span><span style=\"margin: 0px;padding: 0px\">)<\/span><span style=\"margin: 0px;padding: 0px\">;<\/span><br>  return txId<span style=\"margin: 0px;padding: 0px\">;<\/span><br><span style=\"margin: 0px;padding: 0px\">}<\/span><br><\/pre>\n<h2>\u516d\u3001\u6d4b\u8bd5\u63a5\u53e3<\/h2>\n<p>\u8c03\u7528\u63a5\u53e3 getUser\uff1a<\/p>\n<p>\u200b\u200bhttp:\/\/127.0.0.1:9001\/getUser?userId=1\u200b\u200b<\/p>\n<p>\u8fd4\u56de\uff1a<\/p>\n<pre><span style=\"margin: 0px;padding: 0px\">{<\/span><br>  <span style=\"margin: 0px;padding: 0px\">\"money\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">300<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>  <span style=\"margin: 0px;padding: 0px\">\"name\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"zlt\"<\/span><span style=\"margin: 0px;padding: 0px\">,<\/span><br>  <span style=\"margin: 0px;padding: 0px\">\"userId\"<\/span><span style=\"margin: 0px;padding: 0px\">:<\/span> <span style=\"margin: 0px;padding: 0px\">\"1\"<\/span><br><span style=\"margin: 0px;padding: 0px\">}<\/span><br><\/pre>\n<p>\u8c03\u7528\u63a5\u53e3 addUser\uff1a<\/p>\n<p>\u200b\u200bhttp:\/\/127.0.0.1:9001\/addUser?userId=6&amp;userName=test6&amp;money=600\u200b\u200b<\/p>\n<p>\u8fd4\u56de\uff1a<\/p>\n<pre><span style=\"margin: 0px;padding: 0px\">2<\/span>ae291bb6a366b5ba01ad49e4237da8def9e9828cc2c982e8c49d4b763af0157<br><\/pre>\n<h2>\u4e03\u3001\u4ee3\u7801\u4e0b\u8f7d<\/h2>\n<p>gitee\uff1ahttps:\/\/gitee.com\/zlt2000\/my-fabric-application-java<\/p>\n<p>github\uff1ahttps:\/\/github.com\/zlt2000\/my-fabric-application-java<\/p>\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u3001\u8bf4\u660e \u5728\u4e0a\u4e00\u7bc7\u6587\u7ae0\u4e2d \u300aHyperledger Fabric 2.x \u81ea\u5b9a\u4e49\u667a\u80fd\u5408\u7ea6\u300b \u5206\u4eab\u4e86\u667a\u80fd\u5408\u7ea6\u7684\u5b89 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":246158,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[200988],"tags":[],"class_list":["post-246157","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-200988"],"_links":{"self":[{"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/posts\/246157","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/comments?post=246157"}],"version-history":[{"count":0,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/posts\/246157\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/media\/246158"}],"wp:attachment":[{"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/media?parent=246157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/categories?post=246157"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/tags?post=246157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}