├── .gitattributes ├── .idea ├── codeStyles │ └── codeStyleConfig.xml ├── hyperledger-simple-app-master.iml ├── misc.xml ├── modules.xml └── workspace.xml ├── .travis.yml ├── README.md ├── basic-network ├── .env ├── README.md ├── config │ ├── channel.tx │ └── genesis.block ├── configtx.yaml ├── crypto-config.yaml ├── crypto-config │ ├── ordererOrganizations │ │ └── example.com │ │ │ ├── ca │ │ │ ├── a0606a4a860a1e31c90a23788da6f3b6b74925ed0d23061af4899409ba46ae6a_sk │ │ │ └── ca.example.com-cert.pem │ │ │ ├── msp │ │ │ ├── admincerts │ │ │ │ └── Admin@example.com-cert.pem │ │ │ ├── cacerts │ │ │ │ └── ca.example.com-cert.pem │ │ │ └── tlscacerts │ │ │ │ └── tlsca.example.com-cert.pem │ │ │ ├── orderers │ │ │ └── orderer.example.com │ │ │ │ ├── msp │ │ │ │ ├── admincerts │ │ │ │ │ └── Admin@example.com-cert.pem │ │ │ │ ├── cacerts │ │ │ │ │ └── ca.example.com-cert.pem │ │ │ │ ├── keystore │ │ │ │ │ └── 4d2f776c0fef8eac3f460a7c3558dc7859c4fe458e262e674a6c23f242ea33d1_sk │ │ │ │ ├── signcerts │ │ │ │ │ └── orderer.example.com-cert.pem │ │ │ │ └── tlscacerts │ │ │ │ │ └── tlsca.example.com-cert.pem │ │ │ │ └── tls │ │ │ │ ├── ca.crt │ │ │ │ ├── server.crt │ │ │ │ └── server.key │ │ │ ├── tlsca │ │ │ ├── 8d2186556c85d515e737d0c0da8d0d7672785b685cb503bcb95e53dcc279fba7_sk │ │ │ └── tlsca.example.com-cert.pem │ │ │ └── users │ │ │ └── Admin@example.com │ │ │ ├── msp │ │ │ ├── admincerts │ │ │ │ └── Admin@example.com-cert.pem │ │ │ ├── cacerts │ │ │ │ └── ca.example.com-cert.pem │ │ │ ├── keystore │ │ │ │ └── 1deeab5433fa6e5f045eb763109d6165268fba153211af1281f00d45f54b1022_sk │ │ │ ├── signcerts │ │ │ │ └── Admin@example.com-cert.pem │ │ │ └── tlscacerts │ │ │ │ └── tlsca.example.com-cert.pem │ │ │ └── tls │ │ │ ├── ca.crt │ │ │ ├── server.crt │ │ │ └── server.key │ └── peerOrganizations │ │ └── org1.example.com │ │ ├── ca │ │ ├── 4239aa0dcd76daeeb8ba0cda701851d14504d31aad1b2ddddbac6a57365e497c_sk │ │ ├── ca.org1.example.com-cert.pem │ │ └── org1.example.com-cert.pem │ │ ├── msp │ │ ├── admincerts │ │ │ └── Admin@org1.example.com-cert.pem │ │ ├── cacerts │ │ │ └── ca.org1.example.com-cert.pem │ │ └── tlscacerts │ │ │ └── tlsca.org1.example.com-cert.pem │ │ ├── peers │ │ └── peer0.org1.example.com │ │ │ ├── msp │ │ │ ├── admincerts │ │ │ │ └── Admin@org1.example.com-cert.pem │ │ │ ├── cacerts │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ ├── keystore │ │ │ │ └── 46be1d569fe68f33e517c9e0072a0ccfbfb42727480fb8c8d0223af321a7893d_sk │ │ │ ├── signcerts │ │ │ │ └── peer0.org1.example.com-cert.pem │ │ │ └── tlscacerts │ │ │ │ └── tlsca.org1.example.com-cert.pem │ │ │ └── tls │ │ │ ├── ca.crt │ │ │ ├── server.crt │ │ │ └── server.key │ │ ├── tlsca │ │ ├── ed3fd82393e95fc2c475afc113c8d2c591f745d1babc4d6d9cce0a1acc168acb_sk │ │ └── tlsca.org1.example.com-cert.pem │ │ └── users │ │ ├── Admin@org1.example.com │ │ ├── msp │ │ │ ├── admincerts │ │ │ │ └── Admin@org1.example.com-cert.pem │ │ │ ├── cacerts │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ ├── keystore │ │ │ │ └── cd96d5260ad4757551ed4a5a991e62130f8008a0bf996e4e4b84cd097a747fec_sk │ │ │ ├── signcerts │ │ │ │ └── Admin@org1.example.com-cert.pem │ │ │ └── tlscacerts │ │ │ │ └── tlsca.org1.example.com-cert.pem │ │ └── tls │ │ │ ├── ca.crt │ │ │ ├── server.crt │ │ │ └── server.key │ │ └── User1@org1.example.com │ │ ├── msp │ │ ├── admincerts │ │ │ └── User1@org1.example.com-cert.pem │ │ ├── cacerts │ │ │ └── ca.org1.example.com-cert.pem │ │ ├── keystore │ │ │ └── c75bd6911aca808941c3557ee7c97e90f3952e379497dc55eb903f31b50abc83_sk │ │ ├── signcerts │ │ │ └── User1@org1.example.com-cert.pem │ │ └── tlscacerts │ │ │ └── tlsca.org1.example.com-cert.pem │ │ └── tls │ │ ├── ca.crt │ │ ├── server.crt │ │ └── server.key ├── docker-compose.yml ├── generate.sh ├── init.sh ├── start.sh ├── stop.sh └── teardown.sh ├── chaincode └── source-app │ └── source-app.go └── source-app ├── controller.js ├── package-lock.json ├── package.json ├── public ├── css │ ├── business_search.css │ ├── business_search.jpg │ ├── detail.css │ ├── detail.jpg │ ├── form.css │ ├── index.css │ ├── index.jpg │ ├── search.css │ ├── search.jpg │ └── transit_form.jpg ├── images │ ├── batching.jpg │ ├── business.png │ ├── part_of_food.jpg │ ├── submit.png │ ├── transit.png │ └── user-food.jpg └── js │ └── app.js ├── registerAdmin.js ├── registerUser.js ├── routes.js ├── server.js ├── startFabric.sh └── views ├── business_search.ejs ├── form.ejs ├── index.ejs ├── part_form.ejs ├── part_search.ejs ├── search.ejs └── transit_form.ejs /.gitattributes: -------------------------------------------------------------------------------- 1 | *.ejs linguist-language=javascript 2 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/hyperledger-simple-app-master.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 13 | 14 | 15 | 17 | 18 | 19 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 1622028155033 40 | 47 | 48 | 49 | 50 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "8" 4 | script: 5 | - echo "Hello World" 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # fabric-tea 2 | 3 | [![Build Status](https://travis-ci.org/zhazhalaila/hyperledger-simple-app.svg?branch=master)](https://travis-ci.org/zhazhalaila/hyperledger-simple-app) ![](https://img.shields.io/badge/language-javascript-blue.svg) 4 | 5 | 基于Hyperledger Fabric 6 | 7 | 8 | 本项目实现茶叶生产、加工、运输全流程溯源 9 | 10 | chaincode 由@[DevilExileSu](https://github.com/DevilExileSu)所编写 11 | 12 | 在此之前请确保已安装Hyperledger Fabric(本项目基于Hyperledger Fabric v1.0) 13 | 14 | 库版本: 15 | 16 | ``` 17 | npm 5.6.0 (建议大于或等于此版本) 18 | node.js v8.11.3 (建议大于或等于此版本) 19 | angularjs 1.4.3 20 | ``` 21 | 22 | 如有Bug,欢迎提出 23 | 24 |

安装及配置

25 | 26 | Step 1: 27 | ```shell 28 | git clone git://github.com/KissFire-MT/fabric-tea.git 29 | ``` 30 | 31 | 进入source-app目录下 32 | cd fabric-tea/source-app 33 | 34 | Step 2: 35 | ```js 36 | npm install 37 | //安装时速度经常自杀,建议使用cnpm 38 | cnpm install 39 | ``` 40 | 41 | Step 3: 42 | ``` 43 | ./startFabric.sh 44 | 若遇到权限问题执行chmod a+x startFabric.sh 45 | 若仍有问题进入basic-network文件夹下执行 chmod a+x start.sh 46 | 解决ERROR: network net_basic has active endpoints 47 | service docker restart 48 | ``` 49 | 50 | Step 4: 51 | ``` 52 | 在 fabcar/registerUser.js 文件修改第56行: 53 | return fabric_ca_client.register({enrollmentID: 'user1', affiliation: 'org1.department1',role: 'client'}, admin_user); 54 | 55 | node registerAdmin.js 56 | node registerUser.js 57 | node server.js 58 | ``` 59 | 60 | 访问`http://localhost:8000` 61 | 62 | 由于没有初始化信息,因此需要先提交表单信息才可以查询出信息 63 | 64 | 在填写表单信息时,没有做过多的处理,因此每个选项都要尽量填写(配料的表单可以不填写完) 65 | 66 | 配料及食品信息对于同一个Id只能添加一次,中转信息可以添加多次 67 | 68 |

url & json 格式

69 | 70 | 获取茶叶信息 71 | 72 | `http://localhost:8000/source/:id` 73 | 74 | ```json 75 | {"FoodName":"Apple","FoodSpec":"123456","FoodMFGDate":"2018-8-24","FoodEXPDate":"10day","FoodLOT":"123","FoodQSID":"456","FoodMFRSName":"lalala","FoodProPrice":"2","FoodProPlace":"zhengzhou"} 76 | ``` 77 | 78 | 获取茶叶配料信息 79 | 80 | `http://localhost:8000/part/:id` 81 | 82 | ``` 83 | [{"IngID":"1","IngName":"a"},{"IngID":"2","IngName":"b"},{"IngID":"3","IngName":"c"},{"IngID":"4","IngName":"d"},{"IngID":"5","IngName":"e"}] 84 | ``` 85 | 86 | 获取茶叶(运输)信息 87 | 88 | `http://localhost:8000/transit/:id` 89 | 90 | ``` 91 | [{"LogDepartureTm":"14:20","LogArrivalTm":"16:40","LogMission":"Store","LogDeparturePl":"zhengzhou","LogDest":"wuhan","LogToSeller":"lalala","LogStorageTm":"1day","LogMOT":"truck","LogCopName":"shunfeng","LogCost":"10"},{"LogDepartureTm":"16:50","LogArrivalTm":"18:50","LogMission":"Store","LogDeparturePl":"wuhan","LogDest":"guangzhou","LogToSeller":"lalala","LogStorageTm":"1day","LogMOT":"truck","LogCopName":"shunfeng","LogCost":"10"}] 92 | ``` 93 | 94 |

部署在服务器上

95 | 96 | 仅需修改server.js文件最后几行代码 97 | 98 | ```javascript 99 | var port = process.env.PORT || 3389; //端口修改为服务器的安全组端口 100 | 101 | app.listen(port, '0.0.0.0', function(){ 102 | console.log("Live on port: " + port); 103 | }); 104 | ``` 105 | 106 |

重要的文件说明(basic-network文件夹不必要搞懂,因为我自己也不懂,但是这并不影响写项目):

107 | 108 | ``` 109 | source-app 110 | server.js 启动 111 | routes.js 定义路由 112 | controller.js 路由 113 | chaincode 114 | source-app 115 | source-app.go chaincode 116 | ``` 117 | 118 | 一般来说,路由会在routes.js文件中定义,但是这样不方便路由复用,因此分为两个脚本 119 | 120 |

参考链接

121 | 122 | [Education](https://github.com/hyperledger/education/tree/master/LFS171x) 123 | 124 | [Writing Your First Application](https://hyperledger-fabric.readthedocs.io/en/release-1.1/write_first_app.html) 125 | 126 | 127 |

注释说明:

128 | 129 | 除了chaincode,其余大部分.js文件都是参照以上参考链接所写,因此注释为英文 130 | -------------------------------------------------------------------------------- /basic-network/.env: -------------------------------------------------------------------------------- 1 | COMPOSE_PROJECT_NAME=net 2 | -------------------------------------------------------------------------------- /basic-network/README.md: -------------------------------------------------------------------------------- 1 | ## Basic Network Config 2 | 3 | Note that this basic configuration uses pre-generated certificates and 4 | key material, and also has predefined transactions to initialize a 5 | channel named "mychannel". 6 | 7 | To regenerate this material, simply run ``generate.sh``. 8 | 9 | To start the network, run ``start.sh``. 10 | To stop it, run ``stop.sh`` 11 | To completely remove all incriminating evidence of the network 12 | on your system, run ``teardown.sh``. 13 | 14 | Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License 15 | -------------------------------------------------------------------------------- /basic-network/config/channel.tx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KissFire-MT/fabric-tea/fc886b987844e8328c8f6682f6a759722fdafacc/basic-network/config/channel.tx -------------------------------------------------------------------------------- /basic-network/config/genesis.block: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KissFire-MT/fabric-tea/fc886b987844e8328c8f6682f6a759722fdafacc/basic-network/config/genesis.block -------------------------------------------------------------------------------- /basic-network/configtx.yaml: -------------------------------------------------------------------------------- 1 | # Copyright IBM Corp. All Rights Reserved. 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | # 5 | 6 | --- 7 | ################################################################################ 8 | # 9 | # Profile 10 | # 11 | # - Different configuration profiles may be encoded here to be specified 12 | # as parameters to the configtxgen tool 13 | # 14 | ################################################################################ 15 | Profiles: 16 | 17 | OneOrgOrdererGenesis: 18 | Orderer: 19 | <<: *OrdererDefaults 20 | Organizations: 21 | - *OrdererOrg 22 | Consortiums: 23 | SampleConsortium: 24 | Organizations: 25 | - *Org1 26 | OneOrgChannel: 27 | Consortium: SampleConsortium 28 | Application: 29 | <<: *ApplicationDefaults 30 | Organizations: 31 | - *Org1 32 | 33 | ################################################################################ 34 | # 35 | # Section: Organizations 36 | # 37 | # - This section defines the different organizational identities which will 38 | # be referenced later in the configuration. 39 | # 40 | ################################################################################ 41 | Organizations: 42 | 43 | # SampleOrg defines an MSP using the sampleconfig. It should never be used 44 | # in production but may be used as a template for other definitions 45 | - &OrdererOrg 46 | # DefaultOrg defines the organization which is used in the sampleconfig 47 | # of the fabric.git development environment 48 | Name: OrdererOrg 49 | 50 | # ID to load the MSP definition as 51 | ID: OrdererMSP 52 | 53 | # MSPDir is the filesystem path which contains the MSP configuration 54 | MSPDir: crypto-config/ordererOrganizations/example.com/msp 55 | 56 | - &Org1 57 | # DefaultOrg defines the organization which is used in the sampleconfig 58 | # of the fabric.git development environment 59 | Name: Org1MSP 60 | 61 | # ID to load the MSP definition as 62 | ID: Org1MSP 63 | 64 | MSPDir: crypto-config/peerOrganizations/org1.example.com/msp 65 | 66 | AnchorPeers: 67 | # AnchorPeers defines the location of peers which can be used 68 | # for cross org gossip communication. Note, this value is only 69 | # encoded in the genesis block in the Application section context 70 | - Host: peer0.org1.example.com 71 | Port: 7051 72 | 73 | ################################################################################ 74 | # 75 | # SECTION: Orderer 76 | # 77 | # - This section defines the values to encode into a config transaction or 78 | # genesis block for orderer related parameters 79 | # 80 | ################################################################################ 81 | Orderer: &OrdererDefaults 82 | 83 | # Orderer Type: The orderer implementation to start 84 | # Available types are "solo" and "kafka" 85 | OrdererType: solo 86 | 87 | Addresses: 88 | - orderer:7050 89 | 90 | # Batch Timeout: The amount of time to wait before creating a batch 91 | BatchTimeout: 2s 92 | 93 | # Batch Size: Controls the number of messages batched into a block 94 | BatchSize: 95 | 96 | # Max Message Count: The maximum number of messages to permit in a batch 97 | MaxMessageCount: 10 98 | 99 | # Absolute Max Bytes: The absolute maximum number of bytes allowed for 100 | # the serialized messages in a batch. 101 | AbsoluteMaxBytes: 99 MB 102 | 103 | # Preferred Max Bytes: The preferred maximum number of bytes allowed for 104 | # the serialized messages in a batch. A message larger than the preferred 105 | # max bytes will result in a batch larger than preferred max bytes. 106 | PreferredMaxBytes: 512 KB 107 | 108 | Kafka: 109 | # Brokers: A list of Kafka brokers to which the orderer connects 110 | # NOTE: Use IP:port notation 111 | Brokers: 112 | - 127.0.0.1:9092 113 | 114 | # Organizations is the list of orgs which are defined as participants on 115 | # the orderer side of the network 116 | Organizations: 117 | 118 | ################################################################################ 119 | # 120 | # SECTION: Application 121 | # 122 | # - This section defines the values to encode into a config transaction or 123 | # genesis block for application related parameters 124 | # 125 | ################################################################################ 126 | Application: &ApplicationDefaults 127 | 128 | # Organizations is the list of orgs which are defined as participants on 129 | # the application side of the network 130 | Organizations: 131 | -------------------------------------------------------------------------------- /basic-network/crypto-config.yaml: -------------------------------------------------------------------------------- 1 | # Copyright IBM Corp. All Rights Reserved. 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | # 5 | 6 | # --------------------------------------------------------------------------- 7 | # "OrdererOrgs" - Definition of organizations managing orderer nodes 8 | # --------------------------------------------------------------------------- 9 | OrdererOrgs: 10 | # --------------------------------------------------------------------------- 11 | # Orderer 12 | # --------------------------------------------------------------------------- 13 | - Name: Orderer 14 | Domain: example.com 15 | # --------------------------------------------------------------------------- 16 | # "Specs" - See PeerOrgs below for complete description 17 | # --------------------------------------------------------------------------- 18 | Specs: 19 | - Hostname: orderer 20 | # --------------------------------------------------------------------------- 21 | # "PeerOrgs" - Definition of organizations managing peer nodes 22 | # --------------------------------------------------------------------------- 23 | PeerOrgs: 24 | # --------------------------------------------------------------------------- 25 | # Org1 26 | # --------------------------------------------------------------------------- 27 | - Name: Org1 28 | Domain: org1.example.com 29 | # --------------------------------------------------------------------------- 30 | # "Specs" 31 | # --------------------------------------------------------------------------- 32 | # Uncomment this section to enable the explicit definition of hosts in your 33 | # configuration. Most users will want to use Template, below 34 | # 35 | # Specs is an array of Spec entries. Each Spec entry consists of two fields: 36 | # - Hostname: (Required) The desired hostname, sans the domain. 37 | # - CommonName: (Optional) Specifies the template or explicit override for 38 | # the CN. By default, this is the template: 39 | # 40 | # "{{.Hostname}}.{{.Domain}}" 41 | # 42 | # which obtains its values from the Spec.Hostname and 43 | # Org.Domain, respectively. 44 | # --------------------------------------------------------------------------- 45 | # Specs: 46 | # - Hostname: foo # implicitly "foo.org1.example.com" 47 | # CommonName: foo27.org5.example.com # overrides Hostname-based FQDN set above 48 | # - Hostname: bar 49 | # - Hostname: baz 50 | # --------------------------------------------------------------------------- 51 | # "Template" 52 | # --------------------------------------------------------------------------- 53 | # Allows for the definition of 1 or more hosts that are created sequentially 54 | # from a template. By default, this looks like "peer%d" from 0 to Count-1. 55 | # You may override the number of nodes (Count), the starting index (Start) 56 | # or the template used to construct the name (Hostname). 57 | # 58 | # Note: Template and Specs are not mutually exclusive. You may define both 59 | # sections and the aggregate nodes will be created for you. Take care with 60 | # name collisions 61 | # --------------------------------------------------------------------------- 62 | Template: 63 | Count: 1 64 | # Start: 5 65 | # Hostname: {{.Prefix}}{{.Index}} # default 66 | # --------------------------------------------------------------------------- 67 | # "Users" 68 | # --------------------------------------------------------------------------- 69 | # Count: The number of user accounts _in addition_ to Admin 70 | # --------------------------------------------------------------------------- 71 | Users: 72 | Count: 1 73 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/ca/a0606a4a860a1e31c90a23788da6f3b6b74925ed0d23061af4899409ba46ae6a_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgbIRfBJjk/t3HLnEz 3 | 32V4sCllmJtnliVv4UmLfrjZ+B6hRANCAASM01iiFoDgTsTd27nU+R1z7YZbqM4I 4 | Tlz13Mg+SQWsWn25IM6/IwtzNq5SSQZtJwpo7+gtS5IggDn7WJMi6Hy6 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICLjCCAdWgAwIBAgIQHuAANpa/kDL7CPyNttctRjAKBggqhkjOPQQDAjBpMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w 5 | bGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowaTELMAkGA1UE 6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz 7 | Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv 8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIzTWKIWgOBOxN3budT5HXPthluo 9 | zghOXPXcyD5JBaxafbkgzr8jC3M2rlJJBm0nCmjv6C1LkiCAOftYkyLofLqjXzBd 10 | MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB 11 | Af8wKQYDVR0OBCIEIKBgakqGCh4xyQojeI2m87a3SSXtDSMGGvSJlAm6Rq5qMAoG 12 | CCqGSM49BAMCA0cAMEQCIGShwWIKXmf3oJY3Oow7pKA0SSe89UsRLy2HMxxNzgWx 13 | AiB097hBfmM2JEZsEZfMbEM2U7edQIDyCoPOgm5ha9wDNw== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/msp/admincerts/Admin@example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICCTCCAbCgAwIBAgIQVMXz1cejr3sGgDsXuIBK3zAKBggqhkjOPQQDAjBpMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w 5 | bGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowVjELMAkGA1UE 6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz 7 | Y28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZI 8 | zj0DAQcDQgAEFufLmRXBZHc3d7HvYSU4jR4nJnzfmJlWN6Gm0Bm+NsO8lwb1TDa4 9 | cPzAOgnbIm1VFwhBd+sE3TIzIWsM2Kzv1aNNMEswDgYDVR0PAQH/BAQDAgeAMAwG 10 | A1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgoGBqSoYKHjHJCiN4jabztrdJJe0NIwYa 11 | 9ImUCbpGrmowCgYIKoZIzj0EAwIDRwAwRAIgId+xpuBHjfWvL8aAsDbmMjXAoOYy 12 | BgazcJh446kZaDACIDeyvsH5Xwes5w5Sksv7mb6/kr4ceCy00h1Vlt5bwPiu 13 | -----END CERTIFICATE----- 14 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/msp/cacerts/ca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICLjCCAdWgAwIBAgIQHuAANpa/kDL7CPyNttctRjAKBggqhkjOPQQDAjBpMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w 5 | bGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowaTELMAkGA1UE 6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz 7 | Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv 8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIzTWKIWgOBOxN3budT5HXPthluo 9 | zghOXPXcyD5JBaxafbkgzr8jC3M2rlJJBm0nCmjv6C1LkiCAOftYkyLofLqjXzBd 10 | MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB 11 | Af8wKQYDVR0OBCIEIKBgakqGCh4xyQojeI2m87a3SSXtDSMGGvSJlAm6Rq5qMAoG 12 | CCqGSM49BAMCA0cAMEQCIGShwWIKXmf3oJY3Oow7pKA0SSe89UsRLy2HMxxNzgWx 13 | AiB097hBfmM2JEZsEZfMbEM2U7edQIDyCoPOgm5ha9wDNw== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICNTCCAdugAwIBAgIQT0WLBisbcQ6AkirTJApb1TAKBggqhkjOPQQDAjBsMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4 5 | YW1wbGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowbDELMAkG 6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu 7 | Y2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5leGFt 8 | cGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGtRFSyePgHhit2JfQNn 9 | Gbda3X9Y+Eb5Ft/4L9uLsxc4zEMLt2TJZewEfO/Uoe9YH9VhFmGj/d9M0d/0HSAn 10 | K8WjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB 11 | /wQFMAMBAf8wKQYDVR0OBCIEII0hhlVshdUV5zfQwNqNDXZyeFtoXLUDvLleU9zC 12 | efunMAoGCCqGSM49BAMCA0gAMEUCIQDxLfsMRqPJuoH77vahGkE6EYMqvzjVI2Ob 13 | aV1DZJfUdwIgHuHXPvKvcoYZgAo7Xc57Uqs6hSpMs0CjzcfLXYiwoVc= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/admincerts/Admin@example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICCTCCAbCgAwIBAgIQVMXz1cejr3sGgDsXuIBK3zAKBggqhkjOPQQDAjBpMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w 5 | bGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowVjELMAkGA1UE 6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz 7 | Y28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZI 8 | zj0DAQcDQgAEFufLmRXBZHc3d7HvYSU4jR4nJnzfmJlWN6Gm0Bm+NsO8lwb1TDa4 9 | cPzAOgnbIm1VFwhBd+sE3TIzIWsM2Kzv1aNNMEswDgYDVR0PAQH/BAQDAgeAMAwG 10 | A1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgoGBqSoYKHjHJCiN4jabztrdJJe0NIwYa 11 | 9ImUCbpGrmowCgYIKoZIzj0EAwIDRwAwRAIgId+xpuBHjfWvL8aAsDbmMjXAoOYy 12 | BgazcJh446kZaDACIDeyvsH5Xwes5w5Sksv7mb6/kr4ceCy00h1Vlt5bwPiu 13 | -----END CERTIFICATE----- 14 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICLjCCAdWgAwIBAgIQHuAANpa/kDL7CPyNttctRjAKBggqhkjOPQQDAjBpMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w 5 | bGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowaTELMAkGA1UE 6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz 7 | Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv 8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIzTWKIWgOBOxN3budT5HXPthluo 9 | zghOXPXcyD5JBaxafbkgzr8jC3M2rlJJBm0nCmjv6C1LkiCAOftYkyLofLqjXzBd 10 | MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB 11 | Af8wKQYDVR0OBCIEIKBgakqGCh4xyQojeI2m87a3SSXtDSMGGvSJlAm6Rq5qMAoG 12 | CCqGSM49BAMCA0cAMEQCIGShwWIKXmf3oJY3Oow7pKA0SSe89UsRLy2HMxxNzgWx 13 | AiB097hBfmM2JEZsEZfMbEM2U7edQIDyCoPOgm5ha9wDNw== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/keystore/4d2f776c0fef8eac3f460a7c3558dc7859c4fe458e262e674a6c23f242ea33d1_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg730zOAwSLJKj9wle 3 | jbxx4d0P2Qwl314A+znW9n6070mhRANCAARQ4kbOlqzGNLkQmZsUh78a04kkCjqa 4 | EmovJhP08G9VJ1pD9NCUw2WosRmAU/rBz0K2tSn9YOdn8zbMumgM+ORy 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/signcerts/orderer.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICDDCCAbOgAwIBAgIRAK30hdRcBxQJYNPqPkiFo3IwCgYIKoZIzj0EAwIwaTEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt 5 | cGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0MzJaMFgxCzAJBgNV 6 | BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp 7 | c2NvMRwwGgYDVQQDExNvcmRlcmVyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI 8 | KoZIzj0DAQcDQgAEUOJGzpasxjS5EJmbFIe/GtOJJAo6mhJqLyYT9PBvVSdaQ/TQ 9 | lMNlqLEZgFP6wc9CtrUp/WDnZ/M2zLpoDPjkcqNNMEswDgYDVR0PAQH/BAQDAgeA 10 | MAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgoGBqSoYKHjHJCiN4jabztrdJJe0N 11 | IwYa9ImUCbpGrmowCgYIKoZIzj0EAwIDRwAwRAIgHsU1f4jzuul6zYGY/Xn/H5X5 12 | gDe7/u8dZxJfWwXOGNsCICbXt6yezSzacOFQDkvAPz5/3OYI5YKLSTl+Wilfa/qy 13 | -----END CERTIFICATE----- 14 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICNTCCAdugAwIBAgIQT0WLBisbcQ6AkirTJApb1TAKBggqhkjOPQQDAjBsMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4 5 | YW1wbGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowbDELMAkG 6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu 7 | Y2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5leGFt 8 | cGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGtRFSyePgHhit2JfQNn 9 | Gbda3X9Y+Eb5Ft/4L9uLsxc4zEMLt2TJZewEfO/Uoe9YH9VhFmGj/d9M0d/0HSAn 10 | K8WjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB 11 | /wQFMAMBAf8wKQYDVR0OBCIEII0hhlVshdUV5zfQwNqNDXZyeFtoXLUDvLleU9zC 12 | efunMAoGCCqGSM49BAMCA0gAMEUCIQDxLfsMRqPJuoH77vahGkE6EYMqvzjVI2Ob 13 | aV1DZJfUdwIgHuHXPvKvcoYZgAo7Xc57Uqs6hSpMs0CjzcfLXYiwoVc= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICNTCCAdugAwIBAgIQT0WLBisbcQ6AkirTJApb1TAKBggqhkjOPQQDAjBsMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4 5 | YW1wbGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowbDELMAkG 6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu 7 | Y2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5leGFt 8 | cGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGtRFSyePgHhit2JfQNn 9 | Gbda3X9Y+Eb5Ft/4L9uLsxc4zEMLt2TJZewEfO/Uoe9YH9VhFmGj/d9M0d/0HSAn 10 | K8WjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB 11 | /wQFMAMBAf8wKQYDVR0OBCIEII0hhlVshdUV5zfQwNqNDXZyeFtoXLUDvLleU9zC 12 | efunMAoGCCqGSM49BAMCA0gAMEUCIQDxLfsMRqPJuoH77vahGkE6EYMqvzjVI2Ob 13 | aV1DZJfUdwIgHuHXPvKvcoYZgAo7Xc57Uqs6hSpMs0CjzcfLXYiwoVc= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICWTCCAf+gAwIBAgIQLwiilHvhB1gOg5eGs5O9YDAKBggqhkjOPQQDAjBsMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4 5 | YW1wbGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowWDELMAkG 6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu 7 | Y2lzY28xHDAaBgNVBAMTE29yZGVyZXIuZXhhbXBsZS5jb20wWTATBgcqhkjOPQIB 8 | BggqhkjOPQMBBwNCAARYRRq90z+ioUM2U9OzPnvqvz9Jpza9JOEsG6UJyEzWB8R7 9 | bHr0XR1Dl8lodlLh3C5vTrb6vqtpNeVXVsd+VVyIo4GWMIGTMA4GA1UdDwEB/wQE 10 | AwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIw 11 | ADArBgNVHSMEJDAigCCNIYZVbIXVFec30MDajQ12cnhbaFy1A7y5XlPcwnn7pzAn 12 | BgNVHREEIDAeghNvcmRlcmVyLmV4YW1wbGUuY29tggdvcmRlcmVyMAoGCCqGSM49 13 | BAMCA0gAMEUCIQDwjzlscwNhuVcxF+FQy3PNwxsSRSOsQqjmFbMFNDSG6wIgfNO0 14 | Mp/QtUShzWepgh1nm8MmDNcnVOOeb4JJy6Gd3Ss= 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgH/whD1mna09pbmG6 3 | txGQVIYDx1pZdM/Bkaq1eWYUZqChRANCAARYRRq90z+ioUM2U9OzPnvqvz9Jpza9 4 | JOEsG6UJyEzWB8R7bHr0XR1Dl8lodlLh3C5vTrb6vqtpNeVXVsd+VVyI 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/tlsca/8d2186556c85d515e737d0c0da8d0d7672785b685cb503bcb95e53dcc279fba7_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg6n+vdmDFdoXHLx81 3 | 4KX5d2rChT+6peumwVy6CK6Vld6hRANCAARrURUsnj4B4YrdiX0DZxm3Wt1/WPhG 4 | +Rbf+C/bi7MXOMxDC7dkyWXsBHzv1KHvWB/VYRZho/3fTNHf9B0gJyvF 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICNTCCAdugAwIBAgIQT0WLBisbcQ6AkirTJApb1TAKBggqhkjOPQQDAjBsMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4 5 | YW1wbGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowbDELMAkG 6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu 7 | Y2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5leGFt 8 | cGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGtRFSyePgHhit2JfQNn 9 | Gbda3X9Y+Eb5Ft/4L9uLsxc4zEMLt2TJZewEfO/Uoe9YH9VhFmGj/d9M0d/0HSAn 10 | K8WjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB 11 | /wQFMAMBAf8wKQYDVR0OBCIEII0hhlVshdUV5zfQwNqNDXZyeFtoXLUDvLleU9zC 12 | efunMAoGCCqGSM49BAMCA0gAMEUCIQDxLfsMRqPJuoH77vahGkE6EYMqvzjVI2Ob 13 | aV1DZJfUdwIgHuHXPvKvcoYZgAo7Xc57Uqs6hSpMs0CjzcfLXYiwoVc= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/admincerts/Admin@example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICCTCCAbCgAwIBAgIQVMXz1cejr3sGgDsXuIBK3zAKBggqhkjOPQQDAjBpMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w 5 | bGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowVjELMAkGA1UE 6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz 7 | Y28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZI 8 | zj0DAQcDQgAEFufLmRXBZHc3d7HvYSU4jR4nJnzfmJlWN6Gm0Bm+NsO8lwb1TDa4 9 | cPzAOgnbIm1VFwhBd+sE3TIzIWsM2Kzv1aNNMEswDgYDVR0PAQH/BAQDAgeAMAwG 10 | A1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgoGBqSoYKHjHJCiN4jabztrdJJe0NIwYa 11 | 9ImUCbpGrmowCgYIKoZIzj0EAwIDRwAwRAIgId+xpuBHjfWvL8aAsDbmMjXAoOYy 12 | BgazcJh446kZaDACIDeyvsH5Xwes5w5Sksv7mb6/kr4ceCy00h1Vlt5bwPiu 13 | -----END CERTIFICATE----- 14 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/cacerts/ca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICLjCCAdWgAwIBAgIQHuAANpa/kDL7CPyNttctRjAKBggqhkjOPQQDAjBpMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w 5 | bGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowaTELMAkGA1UE 6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz 7 | Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv 8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIzTWKIWgOBOxN3budT5HXPthluo 9 | zghOXPXcyD5JBaxafbkgzr8jC3M2rlJJBm0nCmjv6C1LkiCAOftYkyLofLqjXzBd 10 | MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB 11 | Af8wKQYDVR0OBCIEIKBgakqGCh4xyQojeI2m87a3SSXtDSMGGvSJlAm6Rq5qMAoG 12 | CCqGSM49BAMCA0cAMEQCIGShwWIKXmf3oJY3Oow7pKA0SSe89UsRLy2HMxxNzgWx 13 | AiB097hBfmM2JEZsEZfMbEM2U7edQIDyCoPOgm5ha9wDNw== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/1deeab5433fa6e5f045eb763109d6165268fba153211af1281f00d45f54b1022_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgAKUK8aZ5PJMhPpx4 3 | 7mMQoJaha/3jhprXOSxj83ibaYShRANCAAQW58uZFcFkdzd3se9hJTiNHicmfN+Y 4 | mVY3oabQGb42w7yXBvVMNrhw/MA6CdsibVUXCEF36wTdMjMhawzYrO/V 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/signcerts/Admin@example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICCTCCAbCgAwIBAgIQVMXz1cejr3sGgDsXuIBK3zAKBggqhkjOPQQDAjBpMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w 5 | bGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowVjELMAkGA1UE 6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz 7 | Y28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZI 8 | zj0DAQcDQgAEFufLmRXBZHc3d7HvYSU4jR4nJnzfmJlWN6Gm0Bm+NsO8lwb1TDa4 9 | cPzAOgnbIm1VFwhBd+sE3TIzIWsM2Kzv1aNNMEswDgYDVR0PAQH/BAQDAgeAMAwG 10 | A1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgoGBqSoYKHjHJCiN4jabztrdJJe0NIwYa 11 | 9ImUCbpGrmowCgYIKoZIzj0EAwIDRwAwRAIgId+xpuBHjfWvL8aAsDbmMjXAoOYy 12 | BgazcJh446kZaDACIDeyvsH5Xwes5w5Sksv7mb6/kr4ceCy00h1Vlt5bwPiu 13 | -----END CERTIFICATE----- 14 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/tlscacerts/tlsca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICNTCCAdugAwIBAgIQT0WLBisbcQ6AkirTJApb1TAKBggqhkjOPQQDAjBsMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4 5 | YW1wbGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowbDELMAkG 6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu 7 | Y2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5leGFt 8 | cGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGtRFSyePgHhit2JfQNn 9 | Gbda3X9Y+Eb5Ft/4L9uLsxc4zEMLt2TJZewEfO/Uoe9YH9VhFmGj/d9M0d/0HSAn 10 | K8WjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB 11 | /wQFMAMBAf8wKQYDVR0OBCIEII0hhlVshdUV5zfQwNqNDXZyeFtoXLUDvLleU9zC 12 | efunMAoGCCqGSM49BAMCA0gAMEUCIQDxLfsMRqPJuoH77vahGkE6EYMqvzjVI2Ob 13 | aV1DZJfUdwIgHuHXPvKvcoYZgAo7Xc57Uqs6hSpMs0CjzcfLXYiwoVc= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICNTCCAdugAwIBAgIQT0WLBisbcQ6AkirTJApb1TAKBggqhkjOPQQDAjBsMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4 5 | YW1wbGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowbDELMAkG 6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu 7 | Y2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5leGFt 8 | cGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGtRFSyePgHhit2JfQNn 9 | Gbda3X9Y+Eb5Ft/4L9uLsxc4zEMLt2TJZewEfO/Uoe9YH9VhFmGj/d9M0d/0HSAn 10 | K8WjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB 11 | /wQFMAMBAf8wKQYDVR0OBCIEII0hhlVshdUV5zfQwNqNDXZyeFtoXLUDvLleU9zC 12 | efunMAoGCCqGSM49BAMCA0gAMEUCIQDxLfsMRqPJuoH77vahGkE6EYMqvzjVI2Ob 13 | aV1DZJfUdwIgHuHXPvKvcoYZgAo7Xc57Uqs6hSpMs0CjzcfLXYiwoVc= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICKzCCAdKgAwIBAgIQHYv3zMnbbON0eufj3s78FTAKBggqhkjOPQQDAjBsMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4 5 | YW1wbGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowVjELMAkG 6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu 7 | Y2lzY28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI 8 | KoZIzj0DAQcDQgAEZsLfeA+tjHJJOyxhJOP31uDluC6eCnMBq0LKawBugaoI3vqh 9 | T8ux5ty+ooSJk7EN3pTQa10m0qX/Y7e0J79JL6NsMGowDgYDVR0PAQH/BAQDAgWg 10 | MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMCsG 11 | A1UdIwQkMCKAII0hhlVshdUV5zfQwNqNDXZyeFtoXLUDvLleU9zCefunMAoGCCqG 12 | SM49BAMCA0cAMEQCIEcK5iAxpGN1wtC5w+590RJrLzD7DOzVCUIxAdJp80BUAiA/ 13 | XMFE+lHMJmqeoqmXG14Z/70xmHChlyHxm6lFR2I6gw== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg19ebRLtFBB+n9OCa 3 | KcXLds/nf306mSDnnrA7tlZVjaOhRANCAARmwt94D62Mckk7LGEk4/fW4OW4Lp4K 4 | cwGrQsprAG6Bqgje+qFPy7Hm3L6ihImTsQ3elNBrXSbSpf9jt7Qnv0kv 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/ca/4239aa0dcd76daeeb8ba0cda701851d14504d31aad1b2ddddbac6a57365e497c_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgYMqNZRu/I7vdcjpm 3 | Tj+O9T4AYXi3MBNW4nzWHJN8nLqhRANCAATNLYBI3trLI/wFhYf+9MpnVb1R/vBF 4 | rbu/43J+R8u4E73sCcx0nRfYCA+dHf22ceuSjq3lMXraorVev5tg4Dc7 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICRDCCAeqgAwIBAgIRAIk/1HQ6XgI0p64PQwvUA3owCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkxNDMy 6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UE 8 | AxMTY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA 9 | BM0tgEje2ssj/AWFh/70ymdVvVH+8EWtu7/jcn5Hy7gTvewJzHSdF9gID50d/bZx 10 | 65KOreUxetqitV6/m2DgNzujXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG 11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIEI5qg3NdtruuLoM2nAY 12 | UdFFBNMarRst3dusalc2Xkl8MAoGCCqGSM49BAMCA0gAMEUCIQDufxsHbxkSP/y+ 13 | oM2xZGgHL5XSTJVBqBryk1rd08Af6QIgLiAwtR7iKRbf1pKKCkt66MZzItZXC0po 14 | /45uf29T/sc= 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/ca/org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICFjCCAb2gAwIBAgIUNDCk4a9Z/oaid+BBpYAGT8A18f8wCgYIKoZIzj0EAwIw 3 | aDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMRQwEgYDVQQK 4 | EwtIeXBlcmxlZGdlcjEPMA0GA1UECxMGRmFicmljMRkwFwYDVQQDExBmYWJyaWMt 5 | Y2Etc2VydmVyMB4XDTE3MDgzMTE1MzcwMFoXDTMyMDgyNzE1MzcwMFowaDELMAkG 6 | A1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMRQwEgYDVQQKEwtIeXBl 7 | cmxlZGdlcjEPMA0GA1UECxMGRmFicmljMRkwFwYDVQQDExBmYWJyaWMtY2Etc2Vy 8 | dmVyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAExzMhy+KdVYhr6sqA32pAKwM6 9 | DrPal71NXVNzF/Mdep2jlbhSMu73gwz+q4Hy+SoPnyuIYCpCy5rJhXwEnoQJvaNF 10 | MEMwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0OBBYE 11 | FNLXRcya9ZgImWIPbPPsrdTIDuPEMAoGCCqGSM49BAMCA0cAMEQCIGL9qKSaPG6U 12 | IMvw1zolTgimpIxwulGOuQeVybPwYI3oAiBCmOSz5PfASGh8VtCUCCwE+Ef1xQGI 13 | q6Zjh87nj/eyqQ== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGDCCAb+gAwIBAgIQFSxnLAGsu04zrFkAEwzn6zAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0MzJa 6 | MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw 8 | EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEV1dfmKxsFKWo7o6DNBIaIVebCCPAM9C/ 9 | sLBt4pJRre9pWE987DjXZoZ3glc4+DoPMtTmBRqbPVwYcUvpbYY8p6NNMEswDgYD 10 | VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgQjmqDc122u64 11 | ugzacBhR0UUE0xqtGy3d26xqVzZeSXwwCgYIKoZIzj0EAwIDRwAwRAIgXMy26AEU 12 | /GUMPfCMs/nQjQME1ZxBHAYZtKEuRR361JsCIEg9BOZdIoioRivJC+ZUzvJUnkXu 13 | o2HkWiuxLsibGxtE 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICRDCCAeqgAwIBAgIRAIk/1HQ6XgI0p64PQwvUA3owCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkxNDMy 6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UE 8 | AxMTY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA 9 | BM0tgEje2ssj/AWFh/70ymdVvVH+8EWtu7/jcn5Hy7gTvewJzHSdF9gID50d/bZx 10 | 65KOreUxetqitV6/m2DgNzujXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG 11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIEI5qg3NdtruuLoM2nAY 12 | UdFFBNMarRst3dusalc2Xkl8MAoGCCqGSM49BAMCA0gAMEUCIQDufxsHbxkSP/y+ 13 | oM2xZGgHL5XSTJVBqBryk1rd08Af6QIgLiAwtR7iKRbf1pKKCkt66MZzItZXC0po 14 | /45uf29T/sc= 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAfCgAwIBAgIRALOo7o5dtcd8yGpCqowtoIUwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkx 6 | NDMyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABAftdw28/JThHyrfF4SCTjHUykfeQZ3eqSwYlkCqYF1Lwzae18o97Biz 10 | doz/BBMjisAoJESyzVOrGj7nGD7EzwWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV 11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIO0/2COT6V/C 12 | xHWvwRPI0sWR90XRurxNbZzOChrMForLMAoGCCqGSM49BAMCA0cAMEQCIGd4ZaLj 13 | 1R4C25obVTI/pWriqWlXXAV7h2ZQfD41nNMYAiAO858VYb4xyLUkF9XGtZJpux4x 14 | 0ClsWNgEp49nBBsecw== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGDCCAb+gAwIBAgIQFSxnLAGsu04zrFkAEwzn6zAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0MzJa 6 | MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw 8 | EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEV1dfmKxsFKWo7o6DNBIaIVebCCPAM9C/ 9 | sLBt4pJRre9pWE987DjXZoZ3glc4+DoPMtTmBRqbPVwYcUvpbYY8p6NNMEswDgYD 10 | VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgQjmqDc122u64 11 | ugzacBhR0UUE0xqtGy3d26xqVzZeSXwwCgYIKoZIzj0EAwIDRwAwRAIgXMy26AEU 12 | /GUMPfCMs/nQjQME1ZxBHAYZtKEuRR361JsCIEg9BOZdIoioRivJC+ZUzvJUnkXu 13 | o2HkWiuxLsibGxtE 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICRDCCAeqgAwIBAgIRAIk/1HQ6XgI0p64PQwvUA3owCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkxNDMy 6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UE 8 | AxMTY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA 9 | BM0tgEje2ssj/AWFh/70ymdVvVH+8EWtu7/jcn5Hy7gTvewJzHSdF9gID50d/bZx 10 | 65KOreUxetqitV6/m2DgNzujXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG 11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIEI5qg3NdtruuLoM2nAY 12 | UdFFBNMarRst3dusalc2Xkl8MAoGCCqGSM49BAMCA0gAMEUCIQDufxsHbxkSP/y+ 13 | oM2xZGgHL5XSTJVBqBryk1rd08Af6QIgLiAwtR7iKRbf1pKKCkt66MZzItZXC0po 14 | /45uf29T/sc= 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore/46be1d569fe68f33e517c9e0072a0ccfbfb42727480fb8c8d0223af321a7893d_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg46tw2jZtucld26uq 3 | RQAPPB1+y8BilJU2luj/OsMinWahRANCAAR4ocVupLNwdvuV3WwFatwgYMUUUWdt 4 | sc86apw/OpypM+3wRJQboZV5diuq08cmNjgTgdLbPJHqmfd8bnkRspq2 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/signcerts/peer0.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGjCCAcCgAwIBAgIRAPlwF/rUZUP9mqN4wSml4iswCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkxNDMy 6 | WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjAub3JnMS5leGFtcGxlLmNvbTBZ 8 | MBMGByqGSM49AgEGCCqGSM49AwEHA0IABHihxW6ks3B2+5XdbAVq3CBgxRRRZ22x 9 | zzpqnD86nKkz7fBElBuhlXl2K6rTxyY2OBOB0ts8keqZ93xueRGymrajTTBLMA4G 10 | A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIEI5qg3Ndtru 11 | uLoM2nAYUdFFBNMarRst3dusalc2Xkl8MAoGCCqGSM49BAMCA0gAMEUCIQD4j0Rn 12 | e1rrd0FSCzsR6u+IuuPK5dI/kR/bh7+VLf0TNgIgCfUtkJvfvzVEwZLFoFyjoHtr 13 | tvwzNUS1U0hEqIaDeo4= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAfCgAwIBAgIRALOo7o5dtcd8yGpCqowtoIUwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkx 6 | NDMyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABAftdw28/JThHyrfF4SCTjHUykfeQZ3eqSwYlkCqYF1Lwzae18o97Biz 10 | doz/BBMjisAoJESyzVOrGj7nGD7EzwWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV 11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIO0/2COT6V/C 12 | xHWvwRPI0sWR90XRurxNbZzOChrMForLMAoGCCqGSM49BAMCA0cAMEQCIGd4ZaLj 13 | 1R4C25obVTI/pWriqWlXXAV7h2ZQfD41nNMYAiAO858VYb4xyLUkF9XGtZJpux4x 14 | 0ClsWNgEp49nBBsecw== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAfCgAwIBAgIRALOo7o5dtcd8yGpCqowtoIUwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkx 6 | NDMyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABAftdw28/JThHyrfF4SCTjHUykfeQZ3eqSwYlkCqYF1Lwzae18o97Biz 10 | doz/BBMjisAoJESyzVOrGj7nGD7EzwWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV 11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIO0/2COT6V/C 12 | xHWvwRPI0sWR90XRurxNbZzOChrMForLMAoGCCqGSM49BAMCA0cAMEQCIGd4ZaLj 13 | 1R4C25obVTI/pWriqWlXXAV7h2ZQfD41nNMYAiAO858VYb4xyLUkF9XGtZJpux4x 14 | 0ClsWNgEp49nBBsecw== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICZjCCAg2gAwIBAgIQenbZk7+46tsIJy8JAgySaDAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0 6 | MzJaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDExZwZWVyMC5vcmcxLmV4YW1wbGUuY29t 8 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0AZOhWRZ4aOZeLSBioClHt5VDiNT 9 | CeIxn3rVw9oCzlDDMaIZrBG1lI4o2tXOgOGSIPBmRjy736Njc54InlHlsKOBlzCB 10 | lDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC 11 | MAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAg7T/YI5PpX8LEda/BE8jSxZH3RdG6 12 | vE1tnM4KGswWisswKAYDVR0RBCEwH4IWcGVlcjAub3JnMS5leGFtcGxlLmNvbYIF 13 | cGVlcjAwCgYIKoZIzj0EAwIDRwAwRAIgU9GgYioYa1Mdhhe5MHyZGXfr4G8gBxwe 14 | dqlWU/mGaPsCIGQpA0VoBrP3Neso3htfZnlWKcbrtCD29HBWmT7ImZT1 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgMvwKsTL9m2NygrLw 3 | dfrlMzyQlUaSPendFhF+2yLGaH2hRANCAATQBk6FZFnho5l4tIGKgKUe3lUOI1MJ 4 | 4jGfetXD2gLOUMMxohmsEbWUjija1c6A4ZIg8GZGPLvfo2NzngieUeWw 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/tlsca/ed3fd82393e95fc2c475afc113c8d2c591f745d1babc4d6d9cce0a1acc168acb_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgkcI0vNVNanWltD+I 3 | VHz5V1u01+X8VOG3a5ZTLRed0MmhRANCAAQH7XcNvPyU4R8q3xeEgk4x1MpH3kGd 4 | 3qksGJZAqmBdS8M2ntfKPewYs3aM/wQTI4rAKCREss1Tqxo+5xg+xM8F 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAfCgAwIBAgIRALOo7o5dtcd8yGpCqowtoIUwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkx 6 | NDMyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABAftdw28/JThHyrfF4SCTjHUykfeQZ3eqSwYlkCqYF1Lwzae18o97Biz 10 | doz/BBMjisAoJESyzVOrGj7nGD7EzwWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV 11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIO0/2COT6V/C 12 | xHWvwRPI0sWR90XRurxNbZzOChrMForLMAoGCCqGSM49BAMCA0cAMEQCIGd4ZaLj 13 | 1R4C25obVTI/pWriqWlXXAV7h2ZQfD41nNMYAiAO858VYb4xyLUkF9XGtZJpux4x 14 | 0ClsWNgEp49nBBsecw== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGDCCAb+gAwIBAgIQFSxnLAGsu04zrFkAEwzn6zAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0MzJa 6 | MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw 8 | EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEV1dfmKxsFKWo7o6DNBIaIVebCCPAM9C/ 9 | sLBt4pJRre9pWE987DjXZoZ3glc4+DoPMtTmBRqbPVwYcUvpbYY8p6NNMEswDgYD 10 | VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgQjmqDc122u64 11 | ugzacBhR0UUE0xqtGy3d26xqVzZeSXwwCgYIKoZIzj0EAwIDRwAwRAIgXMy26AEU 12 | /GUMPfCMs/nQjQME1ZxBHAYZtKEuRR361JsCIEg9BOZdIoioRivJC+ZUzvJUnkXu 13 | o2HkWiuxLsibGxtE 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICRDCCAeqgAwIBAgIRAIk/1HQ6XgI0p64PQwvUA3owCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkxNDMy 6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UE 8 | AxMTY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA 9 | BM0tgEje2ssj/AWFh/70ymdVvVH+8EWtu7/jcn5Hy7gTvewJzHSdF9gID50d/bZx 10 | 65KOreUxetqitV6/m2DgNzujXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG 11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIEI5qg3NdtruuLoM2nAY 12 | UdFFBNMarRst3dusalc2Xkl8MAoGCCqGSM49BAMCA0gAMEUCIQDufxsHbxkSP/y+ 13 | oM2xZGgHL5XSTJVBqBryk1rd08Af6QIgLiAwtR7iKRbf1pKKCkt66MZzItZXC0po 14 | /45uf29T/sc= 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/cd96d5260ad4757551ed4a5a991e62130f8008a0bf996e4e4b84cd097a747fec_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgRgQr347ij6cjwX7m 3 | KjzbbD8Tlwdfu6FaubjWJWLGyqahRANCAARXV1+YrGwUpajujoM0EhohV5sII8Az 4 | 0L+wsG3iklGt72lYT3zsONdmhneCVzj4Og8y1OYFGps9XBhxS+lthjyn 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGDCCAb+gAwIBAgIQFSxnLAGsu04zrFkAEwzn6zAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0MzJa 6 | MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw 8 | EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEV1dfmKxsFKWo7o6DNBIaIVebCCPAM9C/ 9 | sLBt4pJRre9pWE987DjXZoZ3glc4+DoPMtTmBRqbPVwYcUvpbYY8p6NNMEswDgYD 10 | VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgQjmqDc122u64 11 | ugzacBhR0UUE0xqtGy3d26xqVzZeSXwwCgYIKoZIzj0EAwIDRwAwRAIgXMy26AEU 12 | /GUMPfCMs/nQjQME1ZxBHAYZtKEuRR361JsCIEg9BOZdIoioRivJC+ZUzvJUnkXu 13 | o2HkWiuxLsibGxtE 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAfCgAwIBAgIRALOo7o5dtcd8yGpCqowtoIUwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkx 6 | NDMyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABAftdw28/JThHyrfF4SCTjHUykfeQZ3eqSwYlkCqYF1Lwzae18o97Biz 10 | doz/BBMjisAoJESyzVOrGj7nGD7EzwWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV 11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIO0/2COT6V/C 12 | xHWvwRPI0sWR90XRurxNbZzOChrMForLMAoGCCqGSM49BAMCA0cAMEQCIGd4ZaLj 13 | 1R4C25obVTI/pWriqWlXXAV7h2ZQfD41nNMYAiAO858VYb4xyLUkF9XGtZJpux4x 14 | 0ClsWNgEp49nBBsecw== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAfCgAwIBAgIRALOo7o5dtcd8yGpCqowtoIUwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkx 6 | NDMyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABAftdw28/JThHyrfF4SCTjHUykfeQZ3eqSwYlkCqYF1Lwzae18o97Biz 10 | doz/BBMjisAoJESyzVOrGj7nGD7EzwWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV 11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIO0/2COT6V/C 12 | xHWvwRPI0sWR90XRurxNbZzOChrMForLMAoGCCqGSM49BAMCA0cAMEQCIGd4ZaLj 13 | 1R4C25obVTI/pWriqWlXXAV7h2ZQfD41nNMYAiAO858VYb4xyLUkF9XGtZJpux4x 14 | 0ClsWNgEp49nBBsecw== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICOjCCAeGgAwIBAgIQZbszPe722f2AcfnwpG2ENDAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0 6 | MzJaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29t 8 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5ZfQwNA0oBGCr7zX4I/Ufq1Ht740 9 | RnkV+6VBceaG4x45bR0a0ZWeslPzmIRXOir9QvqLvnxGY3aJiadX65kNFKNsMGow 10 | DgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAM 11 | BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIO0/2COT6V/CxHWvwRPI0sWR90XRurxN 12 | bZzOChrMForLMAoGCCqGSM49BAMCA0cAMEQCIF2V2t75M9bgjQ3pktVEYnCS4u0S 13 | Izw6ZNSy8q/i6C6cAiB4V0ejzQYtp5C25F2xMD+JSlwrhBAOJNK1AkTzj9mgWg== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgqAuu2rihnWgQDlHI 3 | 7Gqyn+Bap3mMqbJ7UQLXIT6lwtmhRANCAATll9DA0DSgEYKvvNfgj9R+rUe3vjRG 4 | eRX7pUFx5objHjltHRrRlZ6yU/OYhFc6Kv1C+ou+fEZjdomJp1frmQ0U 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/admincerts/User1@org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGTCCAb+gAwIBAgIQPyhm+v0ZIqCo6MATzLc+5jAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0MzJa 6 | MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZVc2VyMUBvcmcxLmV4YW1wbGUuY29tMFkw 8 | EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEL/SomNVO3R5nnsemQ4im/UUZ8Ixs7/nH 9 | 3NH1ROfVJ+m7niDf1ZmhvTyiJzrUpI+n5+/OKIX/Z/VhDuAIR/QLLKNNMEswDgYD 10 | VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgQjmqDc122u64 11 | ugzacBhR0UUE0xqtGy3d26xqVzZeSXwwCgYIKoZIzj0EAwIDSAAwRQIhAJk63AHS 12 | CEvJh64Yx5CnWDgDYNoj0jsi+gGheIxbUYgMAiAi/qPG7KEuuDBL4LlZRfkeatMW 13 | ZKPD7ikt+vOYgVnqlA== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICRDCCAeqgAwIBAgIRAIk/1HQ6XgI0p64PQwvUA3owCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkxNDMy 6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UE 8 | AxMTY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA 9 | BM0tgEje2ssj/AWFh/70ymdVvVH+8EWtu7/jcn5Hy7gTvewJzHSdF9gID50d/bZx 10 | 65KOreUxetqitV6/m2DgNzujXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG 11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIEI5qg3NdtruuLoM2nAY 12 | UdFFBNMarRst3dusalc2Xkl8MAoGCCqGSM49BAMCA0gAMEUCIQDufxsHbxkSP/y+ 13 | oM2xZGgHL5XSTJVBqBryk1rd08Af6QIgLiAwtR7iKRbf1pKKCkt66MZzItZXC0po 14 | /45uf29T/sc= 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/c75bd6911aca808941c3557ee7c97e90f3952e379497dc55eb903f31b50abc83_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgJ8IrEgxfZzjGsyt+ 3 | 0o27jvhwUJE2W1PrFeZi8LwHbiuhRANCAAQv9KiY1U7dHmeex6ZDiKb9RRnwjGzv 4 | +cfc0fVE59Un6bueIN/VmaG9PKInOtSkj6fn784ohf9n9WEO4AhH9Ass 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGTCCAb+gAwIBAgIQPyhm+v0ZIqCo6MATzLc+5jAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0MzJa 6 | MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZVc2VyMUBvcmcxLmV4YW1wbGUuY29tMFkw 8 | EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEL/SomNVO3R5nnsemQ4im/UUZ8Ixs7/nH 9 | 3NH1ROfVJ+m7niDf1ZmhvTyiJzrUpI+n5+/OKIX/Z/VhDuAIR/QLLKNNMEswDgYD 10 | VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgQjmqDc122u64 11 | ugzacBhR0UUE0xqtGy3d26xqVzZeSXwwCgYIKoZIzj0EAwIDSAAwRQIhAJk63AHS 12 | CEvJh64Yx5CnWDgDYNoj0jsi+gGheIxbUYgMAiAi/qPG7KEuuDBL4LlZRfkeatMW 13 | ZKPD7ikt+vOYgVnqlA== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAfCgAwIBAgIRALOo7o5dtcd8yGpCqowtoIUwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkx 6 | NDMyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABAftdw28/JThHyrfF4SCTjHUykfeQZ3eqSwYlkCqYF1Lwzae18o97Biz 10 | doz/BBMjisAoJESyzVOrGj7nGD7EzwWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV 11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIO0/2COT6V/C 12 | xHWvwRPI0sWR90XRurxNbZzOChrMForLMAoGCCqGSM49BAMCA0cAMEQCIGd4ZaLj 13 | 1R4C25obVTI/pWriqWlXXAV7h2ZQfD41nNMYAiAO858VYb4xyLUkF9XGtZJpux4x 14 | 0ClsWNgEp49nBBsecw== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICSTCCAfCgAwIBAgIRALOo7o5dtcd8yGpCqowtoIUwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkx 6 | NDMyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABAftdw28/JThHyrfF4SCTjHUykfeQZ3eqSwYlkCqYF1Lwzae18o97Biz 10 | doz/BBMjisAoJESyzVOrGj7nGD7EzwWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV 11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIO0/2COT6V/C 12 | xHWvwRPI0sWR90XRurxNbZzOChrMForLMAoGCCqGSM49BAMCA0cAMEQCIGd4ZaLj 13 | 1R4C25obVTI/pWriqWlXXAV7h2ZQfD41nNMYAiAO858VYb4xyLUkF9XGtZJpux4x 14 | 0ClsWNgEp49nBBsecw== 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICOzCCAeGgAwIBAgIQat+rcnuTNMrNDQULaEwq7zAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0 6 | MzJaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZVc2VyMUBvcmcxLmV4YW1wbGUuY29t 8 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFcqqFuh5CXSij4Ma6/tySXB9hYZn 9 | 2oFaVJWPn0JIhqj8rl9vHuNzgwoI1ZNR9fKGmrovqaZjcSg87jxh7gZSeaNsMGow 10 | DgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAM 11 | BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIO0/2COT6V/CxHWvwRPI0sWR90XRurxN 12 | bZzOChrMForLMAoGCCqGSM49BAMCA0gAMEUCIQCWp1joCFbOhXbZ2sPW1e6gJBNG 13 | ZK+JY6Lm0bGk4vBk6QIgLQ5nzPRWHJNRaqIbigk0OLBKQtzv/Nfbsi6DnhNQoZU= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /basic-network/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgf8ybpxd0cfNqWnfX 3 | KRoa6e/hEJGs0zMCkE+5si/xuV+hRANCAAQVyqoW6HkJdKKPgxrr+3JJcH2Fhmfa 4 | gVpUlY+fQkiGqPyuX28e43ODCgjVk1H18oaaui+ppmNxKDzuPGHuBlJ5 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /basic-network/docker-compose.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright IBM Corp All Rights Reserved 3 | # 4 | # SPDX-License-Identifier: Apache-2.0 5 | # 6 | version: '2' 7 | 8 | networks: 9 | basic: 10 | 11 | services: 12 | ca.example.com: 13 | image: hyperledger/fabric-ca 14 | environment: 15 | - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server 16 | - FABRIC_CA_SERVER_CA_NAME=ca.example.com 17 | - FABRIC_CA_SERVER_CA_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem 18 | - FABRIC_CA_SERVER_CA_KEYFILE=/etc/hyperledger/fabric-ca-server-config/4239aa0dcd76daeeb8ba0cda701851d14504d31aad1b2ddddbac6a57365e497c_sk 19 | ports: 20 | - "7054:7054" 21 | command: sh -c 'fabric-ca-server start -b admin:adminpw -d' 22 | volumes: 23 | - ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config 24 | container_name: ca.example.com 25 | networks: 26 | - basic 27 | 28 | orderer.example.com: 29 | container_name: orderer.example.com 30 | image: hyperledger/fabric-orderer 31 | environment: 32 | - ORDERER_GENERAL_LOGLEVEL=debug 33 | - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 34 | - ORDERER_GENERAL_GENESISMETHOD=file 35 | - ORDERER_GENERAL_GENESISFILE=/etc/hyperledger/configtx/genesis.block 36 | - ORDERER_GENERAL_LOCALMSPID=OrdererMSP 37 | - ORDERER_GENERAL_LOCALMSPDIR=/etc/hyperledger/msp/orderer/msp 38 | working_dir: /opt/gopath/src/github.com/hyperledger/fabric/orderer 39 | command: orderer 40 | ports: 41 | - 7050:7050 42 | volumes: 43 | - ./config/:/etc/hyperledger/configtx 44 | - ./crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/:/etc/hyperledger/msp/orderer 45 | - ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/:/etc/hyperledger/msp/peerOrg1 46 | networks: 47 | - basic 48 | 49 | peer0.org1.example.com: 50 | container_name: peer0.org1.example.com 51 | image: hyperledger/fabric-peer 52 | environment: 53 | - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock 54 | - CORE_PEER_ID=peer0.org1.example.com 55 | - CORE_LOGGING_PEER=debug 56 | - CORE_CHAINCODE_LOGGING_LEVEL=DEBUG 57 | - CORE_PEER_LOCALMSPID=Org1MSP 58 | - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/peer/ 59 | - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 60 | # # the following setting starts chaincode containers on the same 61 | # # bridge network as the peers 62 | # # https://docs.docker.com/compose/networking/ 63 | - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_basic 64 | - CORE_LEDGER_STATE_STATEDATABASE=CouchDB 65 | - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb:5984 66 | # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD 67 | # provide the credentials for ledger to connect to CouchDB. The username and password must 68 | # match the username and password set for the associated CouchDB. 69 | - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= 70 | - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD= 71 | working_dir: /opt/gopath/src/github.com/hyperledger/fabric 72 | command: peer node start 73 | # command: peer node start --peer-chaincodedev=true 74 | ports: 75 | - 7051:7051 76 | - 7053:7053 77 | volumes: 78 | - /var/run/:/host/var/run/ 79 | - ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/msp/peer 80 | - ./crypto-config/peerOrganizations/org1.example.com/users:/etc/hyperledger/msp/users 81 | - ./config:/etc/hyperledger/configtx 82 | depends_on: 83 | - orderer.example.com 84 | - couchdb 85 | networks: 86 | - basic 87 | 88 | couchdb: 89 | container_name: couchdb 90 | image: hyperledger/fabric-couchdb 91 | # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password 92 | # for CouchDB. This will prevent CouchDB from operating in an "Admin Party" mode. 93 | environment: 94 | - COUCHDB_USER= 95 | - COUCHDB_PASSWORD= 96 | ports: 97 | - 5984:5984 98 | networks: 99 | - basic 100 | 101 | cli: 102 | container_name: cli 103 | image: hyperledger/fabric-tools 104 | tty: true 105 | environment: 106 | - GOPATH=/opt/gopath 107 | - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock 108 | - CORE_LOGGING_LEVEL=DEBUG 109 | - CORE_PEER_ID=cli 110 | - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 111 | - CORE_PEER_LOCALMSPID=Org1MSP 112 | - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp 113 | - CORE_CHAINCODE_KEEPALIVE=10 114 | working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer 115 | command: /bin/bash 116 | volumes: 117 | - /var/run/:/host/var/run/ 118 | - ./../chaincode/:/opt/gopath/src/github.com/ 119 | - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ 120 | networks: 121 | - basic 122 | #depends_on: 123 | # - orderer.example.com 124 | # - peer0.org1.example.com 125 | # - couchdb 126 | -------------------------------------------------------------------------------- /basic-network/generate.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Copyright IBM Corp All Rights Reserved 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | # 7 | export PATH=$GOPATH/src/github.com/hyperledger/fabric/build/bin:${PWD}/../bin:${PWD}:$PATH 8 | export FABRIC_CFG_PATH=${PWD} 9 | CHANNEL_NAME=mychannel 10 | 11 | # remove previous crypto material and config transactions 12 | rm -fr config/* 13 | rm -fr crypto-config/* 14 | 15 | # generate crypto material 16 | cryptogen generate --config=./crypto-config.yaml 17 | if [ "$?" -ne 0 ]; then 18 | echo "Failed to generate crypto material..." 19 | exit 1 20 | fi 21 | 22 | # generate genesis block for orderer 23 | configtxgen -profile OneOrgOrdererGenesis -outputBlock ./config/genesis.block 24 | if [ "$?" -ne 0 ]; then 25 | echo "Failed to generate orderer genesis block..." 26 | exit 1 27 | fi 28 | 29 | # generate channel configuration transaction 30 | configtxgen -profile OneOrgChannel -outputCreateChannelTx ./config/channel.tx -channelID $CHANNEL_NAME 31 | if [ "$?" -ne 0 ]; then 32 | echo "Failed to generate channel configuration transaction..." 33 | exit 1 34 | fi 35 | 36 | # generate anchor peer transaction 37 | configtxgen -profile OneOrgChannel -outputAnchorPeersUpdate ./config/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP 38 | if [ "$?" -ne 0 ]; then 39 | echo "Failed to generate anchor peer update for Org1MSP..." 40 | exit 1 41 | fi 42 | -------------------------------------------------------------------------------- /basic-network/init.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copyright IBM Corp All Rights Reserved 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | # 7 | 8 | # Exit on first error, print all commands. 9 | set -ev 10 | # delete previous creds 11 | rm -rf ~/.hfc-key-store/* 12 | 13 | # copy peer admin credentials into the keyValStore 14 | mkdir -p ~/.hfc-key-store 15 | cp creds/* ~/.hfc-key-store 16 | -------------------------------------------------------------------------------- /basic-network/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copyright IBM Corp All Rights Reserved 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | # 7 | # Exit on first error, print all commands. 8 | set -ev 9 | 10 | # don't rewrite paths for Windows Git Bash users 11 | export MSYS_NO_PATHCONV=1 12 | 13 | docker-compose -f docker-compose.yml down 14 | 15 | docker-compose -f docker-compose.yml up -d ca.example.com orderer.example.com peer0.org1.example.com couchdb 16 | 17 | # wait for Hyperledger Fabric to start 18 | # incase of errors when running later commands, issue export FABRIC_START_TIMEOUT= 19 | export FABRIC_START_TIMEOUT=10 20 | #echo ${FABRIC_START_TIMEOUT} 21 | sleep ${FABRIC_START_TIMEOUT} 22 | 23 | # Create the channel 24 | docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer0.org1.example.com peer channel create -o orderer.example.com:7050 -c mychannel -f /etc/hyperledger/configtx/channel.tx 25 | # Join peer0.org1.example.com to the channel. 26 | docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer0.org1.example.com peer channel join -b mychannel.block 27 | -------------------------------------------------------------------------------- /basic-network/stop.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copyright IBM Corp All Rights Reserved 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | # 7 | # Exit on first error, print all commands. 8 | set -ev 9 | 10 | # Shut down the Docker containers that might be currently running. 11 | docker-compose -f docker-compose.yml stop 12 | -------------------------------------------------------------------------------- /basic-network/teardown.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copyright IBM Corp All Rights Reserved 4 | # 5 | # SPDX-License-Identifier: Apache-2.0 6 | # 7 | # Exit on first error, print all commands. 8 | set -e 9 | 10 | # Shut down the Docker containers for the system tests. 11 | docker-compose -f docker-compose.yml kill && docker-compose -f docker-compose.yml down 12 | 13 | # remove the local state 14 | rm -f ~/.hfc-key-store/* 15 | 16 | # remove chaincode docker images 17 | docker rmi $(docker images dev-* -q) 18 | 19 | # Your system is now clean 20 | -------------------------------------------------------------------------------- /chaincode/source-app/source-app.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "encoding/json" 5 | "fmt" 6 | // "strconv" 7 | // "strings" 8 | 9 | "github.com/hyperledger/fabric/core/chaincode/shim" 10 | pb "github.com/hyperledger/fabric/protos/peer" 11 | ) 12 | type FoodChainCode struct{ 13 | } 14 | 15 | //food数据结构体 16 | type FoodInfo struct{ 17 | FoodID string `json:FoodID` //食品ID 18 | FoodProInfo ProInfo `json:FoodProInfo` //生产信息 19 | FoodIngInfo []IngInfo `json:FoodIngInfo` //配料信息 20 | FoodLogInfo LogInfo `json:FoodLogInfo` //物流信息 21 | } 22 | 23 | type FoodAllInfo struct{ 24 | FoodID string `json:FoodId` 25 | FoodProInfo ProInfo `json:FoodProInfo` 26 | FoodIngInfo []IngInfo `json:FoodIngInfo` 27 | FoodLogInfo []LogInfo `json:FoodLogInfo` 28 | } 29 | 30 | //生产信息 31 | type ProInfo struct{ 32 | FoodName string `json:FoodName` //食品名称 33 | FoodSpec string `json:FoodSpec` //食品规格 34 | FoodMFGDate string `json:FoodMFGDate` //食品出产日期 35 | FoodEXPDate string `json:FoodEXPDate` //食品保质期 36 | FoodLOT string `json:FoodLOT` //食品批次号 37 | FoodQSID string `json:FoodQSID` //食品生产许可证编号 38 | FoodMFRSName string `json:FoodMFRSName` //食品生产商名称 39 | FoodProPrice string `json:FoodProPrice` //食品生产价格 40 | FoodProPlace string `json:FoodProPlace` //食品生产所在地 41 | } 42 | type IngInfo struct{ 43 | IngID string `json:IngID` //配料ID 44 | IngName string `json:IngName` //配料名称 45 | } 46 | 47 | type LogInfo struct{ 48 | LogDepartureTm string `json:LogDepartureTm` //出发时间 49 | LogArrivalTm string `json:LogArrivalTm` //到达时间 50 | LogMission string `json:LogMission` //处理业务(储存or运输) 51 | LogDeparturePl string `json:LogDeparturePl` //出发地 52 | LogDest string `json:LogDest` //目的地 53 | LogToSeller string `json:LogToSeller` //销售商 54 | LogStorageTm string `json:LogStorageTm` //存储时间 55 | LogMOT string `json:LogMOT` //运送方式 56 | LogCopName string `json:LogCopName` //物流公司名称 57 | LogCost string `json:LogCost` //费用 58 | } 59 | 60 | func (a *FoodChainCode) Init(stub shim.ChaincodeStubInterface) pb.Response { 61 | return shim.Success(nil) 62 | } 63 | 64 | func (a *FoodChainCode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { 65 | fn,args := stub.GetFunctionAndParameters() 66 | if fn == "addProInfo"{ 67 | return a.addProInfo(stub,args) 68 | } else if fn == "addIngInfo"{ 69 | return a.addIngInfo(stub,args) 70 | } else if fn == "getFoodInfo"{ 71 | return a.getFoodInfo(stub,args) 72 | }else if fn == "addLogInfo"{ 73 | return a.addLogInfo(stub,args) 74 | }else if fn == "getProInfo"{ 75 | return a.getProInfo(stub,args) 76 | }else if fn == "getLogInfo"{ 77 | return a.getLogInfo(stub,args) 78 | }else if fn == "getIngInfo"{ 79 | return a.getIngInfo(stub,args) 80 | }else if fn == "getLogInfo_l"{ 81 | return a.getLogInfo_l(stub,args) 82 | } 83 | 84 | return shim.Error("Recevied unkown function invocation") 85 | } 86 | 87 | func (a *FoodChainCode) addProInfo(stub shim.ChaincodeStubInterface, args []string) pb.Response { 88 | var err error 89 | var FoodInfos FoodInfo 90 | 91 | if len(args)!=10{ 92 | return shim.Error("Incorrect number of arguments.") 93 | } 94 | FoodInfos.FoodID = args[0] 95 | if FoodInfos.FoodID == ""{ 96 | return shim.Error("FoodID can not be empty.") 97 | } 98 | 99 | 100 | FoodInfos.FoodProInfo.FoodName = args[1] 101 | FoodInfos.FoodProInfo.FoodSpec = args[2] 102 | FoodInfos.FoodProInfo.FoodMFGDate = args[3] 103 | FoodInfos.FoodProInfo.FoodEXPDate = args[4] 104 | FoodInfos.FoodProInfo.FoodLOT = args[5] 105 | FoodInfos.FoodProInfo.FoodQSID = args[6] 106 | FoodInfos.FoodProInfo.FoodMFRSName = args[7] 107 | FoodInfos.FoodProInfo.FoodProPrice = args[8] 108 | FoodInfos.FoodProInfo.FoodProPlace = args[9] 109 | ProInfosJSONasBytes,err := json.Marshal(FoodInfos) 110 | if err != nil{ 111 | return shim.Error(err.Error()) 112 | } 113 | 114 | err = stub.PutState(FoodInfos.FoodID,ProInfosJSONasBytes) 115 | if err != nil{ 116 | return shim.Error(err.Error()) 117 | } 118 | 119 | return shim.Success(nil) 120 | } 121 | 122 | func(a *FoodChainCode) addIngInfo (stub shim.ChaincodeStubInterface,args []string) pb.Response{ 123 | 124 | var FoodInfos FoodInfo 125 | var IngInfoitem IngInfo 126 | 127 | if (len(args)-1)%2 != 0 || len(args) == 1{ 128 | return shim.Error("Incorrect number of arguments") 129 | } 130 | 131 | FoodID := args[0] 132 | for i :=1;i < len(args);{ 133 | IngInfoitem.IngID = args[i] 134 | IngInfoitem.IngName = args[i+1] 135 | FoodInfos.FoodIngInfo = append(FoodInfos.FoodIngInfo,IngInfoitem) 136 | i = i+2 137 | } 138 | 139 | 140 | FoodInfos.FoodID = FoodID 141 | /* FoodInfos.FoodIngInfo = foodIngInfo*/ 142 | IngInfoJsonAsBytes,err := json.Marshal(FoodInfos) 143 | if err != nil { 144 | return shim.Error(err.Error()) 145 | } 146 | 147 | err = stub.PutState(FoodInfos.FoodID,IngInfoJsonAsBytes) 148 | if err != nil{ 149 | return shim.Error(err.Error()) 150 | } 151 | return shim.Success(nil) 152 | 153 | } 154 | 155 | func(a *FoodChainCode) addLogInfo (stub shim.ChaincodeStubInterface,args []string) pb.Response{ 156 | 157 | var err error 158 | var FoodInfos FoodInfo 159 | 160 | if len(args)!=11{ 161 | return shim.Error("Incorrect number of arguments.") 162 | } 163 | FoodInfos.FoodID = args[0] 164 | if FoodInfos.FoodID == ""{ 165 | return shim.Error("FoodID can not be empty.") 166 | } 167 | FoodInfos.FoodLogInfo.LogDepartureTm = args[1] 168 | FoodInfos.FoodLogInfo.LogArrivalTm = args[2] 169 | FoodInfos.FoodLogInfo.LogMission = args[3] 170 | FoodInfos.FoodLogInfo.LogDeparturePl = args[4] 171 | FoodInfos.FoodLogInfo.LogDest = args[5] 172 | FoodInfos.FoodLogInfo.LogToSeller = args[6] 173 | FoodInfos.FoodLogInfo.LogStorageTm = args[7] 174 | FoodInfos.FoodLogInfo.LogMOT = args[8] 175 | FoodInfos.FoodLogInfo.LogCopName = args[9] 176 | FoodInfos.FoodLogInfo.LogCost = args[10] 177 | 178 | LogInfosJSONasBytes,err := json.Marshal(FoodInfos) 179 | if err != nil{ 180 | return shim.Error(err.Error()) 181 | } 182 | err = stub.PutState(FoodInfos.FoodID,LogInfosJSONasBytes) 183 | if err != nil{ 184 | return shim.Error(err.Error()) 185 | } 186 | return shim.Success(nil) 187 | } 188 | 189 | 190 | 191 | func(a *FoodChainCode) getFoodInfo (stub shim.ChaincodeStubInterface,args []string) pb.Response{ 192 | if len(args) != 1{ 193 | return shim.Error("Incorrect number of arguments.") 194 | } 195 | FoodID := args[0] 196 | resultsIterator,err := stub.GetHistoryForKey(FoodID) 197 | if err != nil { 198 | return shim.Error(err.Error()) 199 | } 200 | defer resultsIterator.Close() 201 | 202 | var foodAllinfo FoodAllInfo 203 | 204 | for resultsIterator.HasNext(){ 205 | var FoodInfos FoodInfo 206 | response,err :=resultsIterator.Next() 207 | if err != nil { 208 | return shim.Error(err.Error()) 209 | } 210 | json.Unmarshal(response.Value,&FoodInfos) 211 | if FoodInfos.FoodProInfo.FoodName !=""{ 212 | foodAllinfo.FoodProInfo = FoodInfos.FoodProInfo 213 | }else if FoodInfos.FoodIngInfo != nil{ 214 | foodAllinfo.FoodIngInfo = FoodInfos.FoodIngInfo 215 | }else if FoodInfos.FoodLogInfo.LogMission !=""{ 216 | foodAllinfo.FoodLogInfo = append(foodAllinfo.FoodLogInfo,FoodInfos.FoodLogInfo) 217 | } 218 | 219 | } 220 | 221 | jsonsAsBytes,err := json.Marshal(foodAllinfo) 222 | if err != nil{ 223 | return shim.Error(err.Error()) 224 | } 225 | 226 | return shim.Success(jsonsAsBytes) 227 | } 228 | 229 | 230 | func(a *FoodChainCode) getProInfo (stub shim.ChaincodeStubInterface,args []string) pb.Response{ 231 | 232 | if len(args) != 1{ 233 | return shim.Error("Incorrect number of arguments.") 234 | } 235 | FoodID := args[0] 236 | resultsIterator,err := stub.GetHistoryForKey(FoodID) 237 | if err != nil { 238 | return shim.Error(err.Error()) 239 | } 240 | defer resultsIterator.Close() 241 | 242 | var foodProInfo ProInfo 243 | 244 | for resultsIterator.HasNext(){ 245 | var FoodInfos FoodInfo 246 | response,err :=resultsIterator.Next() 247 | if err != nil { 248 | return shim.Error(err.Error()) 249 | } 250 | json.Unmarshal(response.Value,&FoodInfos) 251 | if FoodInfos.FoodProInfo.FoodName != ""{ 252 | foodProInfo = FoodInfos.FoodProInfo 253 | continue 254 | } 255 | } 256 | jsonsAsBytes,err := json.Marshal(foodProInfo) 257 | if err != nil { 258 | return shim.Error(err.Error()) 259 | } 260 | return shim.Success(jsonsAsBytes) 261 | } 262 | 263 | func(a *FoodChainCode) getIngInfo (stub shim.ChaincodeStubInterface,args []string) pb.Response{ 264 | 265 | if len(args) !=1{ 266 | return shim.Error("Incorrect number of arguments.") 267 | } 268 | FoodID := args[0] 269 | resultsIterator,err := stub.GetHistoryForKey(FoodID) 270 | 271 | if err != nil{ 272 | return shim.Error(err.Error()) 273 | } 274 | defer resultsIterator.Close() 275 | 276 | var foodIngInfo []IngInfo 277 | for resultsIterator.HasNext(){ 278 | var FoodInfos FoodInfo 279 | response,err := resultsIterator.Next() 280 | if err != nil{ 281 | return shim.Error(err.Error()) 282 | } 283 | json.Unmarshal(response.Value,&FoodInfos) 284 | if FoodInfos.FoodIngInfo != nil{ 285 | foodIngInfo = FoodInfos.FoodIngInfo 286 | continue 287 | } 288 | } 289 | jsonsAsBytes,err := json.Marshal(foodIngInfo) 290 | if err != nil{ 291 | return shim.Error(err.Error()) 292 | } 293 | return shim.Success(jsonsAsBytes) 294 | } 295 | 296 | func(a *FoodChainCode) getLogInfo (stub shim.ChaincodeStubInterface,args []string) pb.Response{ 297 | 298 | var LogInfos []LogInfo 299 | 300 | if len(args) != 1{ 301 | return shim.Error("Incorrect number of arguments.") 302 | } 303 | 304 | FoodID := args[0] 305 | resultsIterator,err :=stub.GetHistoryForKey(FoodID) 306 | if err != nil{ 307 | return shim.Error(err.Error()) 308 | } 309 | defer resultsIterator.Close() 310 | 311 | 312 | for resultsIterator.HasNext(){ 313 | var FoodInfos FoodInfo 314 | response,err := resultsIterator.Next() 315 | if err != nil { 316 | return shim.Error(err.Error()) 317 | } 318 | json.Unmarshal(response.Value,&FoodInfos) 319 | if FoodInfos.FoodLogInfo.LogMission != ""{ 320 | LogInfos = append(LogInfos,FoodInfos.FoodLogInfo) 321 | } 322 | } 323 | jsonsAsBytes,err := json.Marshal(LogInfos) 324 | if err != nil{ 325 | return shim.Error(err.Error()) 326 | } 327 | return shim.Success(jsonsAsBytes) 328 | } 329 | 330 | func(a *FoodChainCode) getLogInfo_l(stub shim.ChaincodeStubInterface,args []string) pb.Response{ 331 | var Loginfo LogInfo 332 | 333 | if len(args) != 1{ 334 | return shim.Error("Incorrect number of arguments.") 335 | } 336 | 337 | FoodID := args[0] 338 | resultsIterator,err :=stub.GetHistoryForKey(FoodID) 339 | if err != nil{ 340 | return shim.Error(err.Error()) 341 | } 342 | defer resultsIterator.Close() 343 | 344 | 345 | for resultsIterator.HasNext(){ 346 | var FoodInfos FoodInfo 347 | response,err := resultsIterator.Next() 348 | if err != nil { 349 | return shim.Error(err.Error()) 350 | } 351 | json.Unmarshal(response.Value,&FoodInfos) 352 | if FoodInfos.FoodLogInfo.LogMission != ""{ 353 | Loginfo = FoodInfos.FoodLogInfo 354 | continue 355 | } 356 | } 357 | jsonsAsBytes,err := json.Marshal(Loginfo) 358 | if err != nil{ 359 | return shim.Error(err.Error ()) 360 | } 361 | return shim.Success(jsonsAsBytes) 362 | } 363 | 364 | 365 | func main(){ 366 | err := shim.Start(new(FoodChainCode)) 367 | if err != nil { 368 | fmt.Printf("Error starting Food chaincode: %s ",err) 369 | } 370 | } 371 | -------------------------------------------------------------------------------- /source-app/controller.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); // call express 2 | var app = express(); // define our app using express 3 | var bodyParser = require('body-parser'); 4 | var http = require('http') 5 | var fs = require('fs'); 6 | var Fabric_Client = require('fabric-client'); 7 | var path = require('path'); 8 | var util = require('util'); 9 | var os = require('os'); 10 | 11 | module.exports = (function() { 12 | return{ 13 | index: function(req, res) { 14 | res.render('index') 15 | }, 16 | search_html: function(req, res) { 17 | res.render('search') 18 | }, 19 | part_search: function(req, res) { 20 | res.render('part_search') 21 | }, 22 | business_search: function(req, res) { 23 | res.render('business_search') 24 | }, 25 | form_: function(req, res) { 26 | res.render('form') 27 | }, 28 | part_form: function(req, res) { 29 | res.render('part_form') 30 | }, 31 | transit_form: function(req, res) { 32 | res.render('transit_form') 33 | }, 34 | re_form: function(req, res, function_name){ 35 | var fabric_client = new Fabric_Client(); 36 | 37 | // setup the fabric network 38 | var channel = fabric_client.newChannel('mychannel'); 39 | var peer = fabric_client.newPeer('grpc://localhost:7051'); 40 | channel.addPeer(peer); 41 | var order = fabric_client.newOrderer('grpc://localhost:7050') 42 | channel.addOrderer(order); 43 | 44 | var member_user = null; 45 | var store_path = path.join(os.homedir(), '.hfc-key-store'); 46 | console.log('Store path:'+store_path); 47 | var tx_id = null; 48 | 49 | // create the key value store as defined in the fabric-client/config/default.json 'key-value-store' setting 50 | Fabric_Client.newDefaultKeyValueStore({ path: store_path 51 | }).then((state_store) => { 52 | // assign the store to the fabric client 53 | fabric_client.setStateStore(state_store); 54 | var crypto_suite = Fabric_Client.newCryptoSuite(); 55 | // use the same location for the state store (where the users' certificate are kept) 56 | // and the crypto store (where the users' keys are kept) 57 | var crypto_store = Fabric_Client.newCryptoKeyStore({path: store_path}); 58 | crypto_suite.setCryptoKeyStore(crypto_store); 59 | fabric_client.setCryptoSuite(crypto_suite); 60 | 61 | // get the enrolled user from persistence, this user will sign all requests 62 | return fabric_client.getUserContext('user1', true); 63 | }).then((user_from_store) => { 64 | if (user_from_store && user_from_store.isEnrolled()) { 65 | console.log('Successfully loaded user1 from persistence'); 66 | member_user = user_from_store; 67 | } else { 68 | throw new Error('Failed to get user1.... run registerUser.js'); 69 | } 70 | 71 | // get a transaction id object based on the current user assigned to fabric client 72 | tx_id = fabric_client.newTransactionID(); 73 | console.log("Assigning transaction_id: ", tx_id._transaction_id); 74 | 75 | // recordTuna - requires 5 args, ID, vessel, location, timestamp,holder - ex: args: ['10', 'Hound', '-12.021, 28.012', '1504054225', 'Hansel'], 76 | // send proposal to endorser 77 | const request = { 78 | //targets : --- letting this default to the peers assigned to the channel 79 | chaincodeId: 'source-app', 80 | fcn: function_name, 81 | args: req.body.field1, 82 | chainId: 'mychannel', 83 | txId: tx_id 84 | }; 85 | 86 | // send the transaction proposal to the peers 87 | return channel.sendTransactionProposal(request); 88 | }).then((results) => { 89 | var proposalResponses = results[0]; 90 | var proposal = results[1]; 91 | let isProposalGood = false; 92 | if (proposalResponses && proposalResponses[0].response && 93 | proposalResponses[0].response.status === 200) { 94 | isProposalGood = true; 95 | console.log('Transaction proposal was good'); 96 | } else { 97 | console.error('Transaction proposal was bad'); 98 | } 99 | if (isProposalGood) { 100 | console.log(util.format( 101 | 'Successfully sent Proposal and received ProposalResponse: Status - %s, message - "%s"', 102 | proposalResponses[0].response.status, proposalResponses[0].response.message)); 103 | 104 | // build up the request for the orderer to have the transaction committed 105 | var request = { 106 | proposalResponses: proposalResponses, 107 | proposal: proposal 108 | }; 109 | 110 | // set the transaction listener and set a timeout of 30 sec 111 | // if the transaction did not get committed within the timeout period, 112 | // report a TIMEOUT status 113 | var transaction_id_string = tx_id.getTransactionID(); //Get the transaction ID string to be used by the event processing 114 | var promises = []; 115 | 116 | var sendPromise = channel.sendTransaction(request); 117 | promises.push(sendPromise); //we want the send transaction first, so that we know where to check status 118 | 119 | // get an eventhub once the fabric client has a user assigned. The user 120 | // is required bacause the event registration must be signed 121 | let event_hub = fabric_client.newEventHub(); 122 | event_hub.setPeerAddr('grpc://localhost:7053'); 123 | 124 | // using resolve the promise so that result status may be processed 125 | // under the then clause rather than having the catch clause process 126 | // the status 127 | let txPromise = new Promise((resolve, reject) => { 128 | let handle = setTimeout(() => { 129 | event_hub.disconnect(); 130 | resolve({event_status : 'TIMEOUT'}); //we could use reject(new Error('Trnasaction did not complete within 30 seconds')); 131 | }, 3000); 132 | event_hub.connect(); 133 | event_hub.registerTxEvent(transaction_id_string, (tx, code) => { 134 | // this is the callback for transaction event status 135 | // first some clean up of event listener 136 | clearTimeout(handle); 137 | event_hub.unregisterTxEvent(transaction_id_string); 138 | event_hub.disconnect(); 139 | 140 | // now let the application know what happened 141 | var return_status = {event_status : code, tx_id : transaction_id_string}; 142 | if (code !== 'VALID') { 143 | console.error('The transaction was invalid, code = ' + code); 144 | resolve(return_status); // we could use reject(new Error('Problem with the tranaction, event status ::'+code)); 145 | } else { 146 | console.log('The transaction has been committed on peer ' + event_hub._ep._endpoint.addr); 147 | resolve(return_status); 148 | } 149 | }, (err) => { 150 | //this is the callback if something goes wrong with the event registration or processing 151 | reject(new Error('There was a problem with the eventhub ::'+err)); 152 | }); 153 | }); 154 | promises.push(txPromise); 155 | 156 | return Promise.all(promises); 157 | } else { 158 | console.error('Failed to send Proposal or receive valid response. Response null or status is not 200. exiting...'); 159 | throw new Error('Failed to send Proposal or receive valid response. Response null or status is not 200. exiting...'); 160 | } 161 | }).then((results) => { 162 | console.log('Send transaction promise and event listener promise have completed'); 163 | // check the results in the order the promises were added to the promise all list 164 | if (results && results[0] && results[0].status === 'SUCCESS') { 165 | console.log('Successfully sent transaction to the orderer.'); 166 | } else { 167 | console.error('Failed to order the transaction. Error code: ' + response.status); 168 | } 169 | 170 | if(results && results[1] && results[1].event_status === 'VALID') { 171 | console.log('Successfully committed the change to the ledger by the peer'); 172 | } else { 173 | console.log('Transaction failed to be committed to the ledger due to ::'+results[1].event_status); 174 | } 175 | }).catch((err) => { 176 | console.error('Failed to invoke successfully :: ' + err); 177 | }); 178 | req.flash('success', '发布成功!') 179 | res.redirect('/') 180 | }, 181 | get_tuna: function(req, res, function_name){ 182 | var fabric_client = new Fabric_Client(); 183 | var key = req.params.id 184 | 185 | // setup the fabric network 186 | var channel = fabric_client.newChannel('mychannel'); 187 | var peer = fabric_client.newPeer('grpc://localhost:7051'); 188 | channel.addPeer(peer); 189 | 190 | // 191 | var member_user = null; 192 | var store_path = path.join(os.homedir(), '.hfc-key-store'); 193 | console.log('Store path:'+store_path); 194 | var tx_id = null; 195 | 196 | // create the key value store as defined in the fabric-client/config/default.json 'key-value-store' setting 197 | Fabric_Client.newDefaultKeyValueStore({ path: store_path 198 | }).then((state_store) => { 199 | // assign the store to the fabric client 200 | fabric_client.setStateStore(state_store); 201 | var crypto_suite = Fabric_Client.newCryptoSuite(); 202 | // use the same location for the state store (where the users' certificate are kept) 203 | // and the crypto store (where the users' keys are kept) 204 | var crypto_store = Fabric_Client.newCryptoKeyStore({path: store_path}); 205 | crypto_suite.setCryptoKeyStore(crypto_store); 206 | fabric_client.setCryptoSuite(crypto_suite); 207 | 208 | // get the enrolled user from persistence, this user will sign all requests 209 | return fabric_client.getUserContext('user1', true); 210 | }).then((user_from_store) => { 211 | if (user_from_store && user_from_store.isEnrolled()) { 212 | console.log('Successfully loaded user1 from persistence'); 213 | member_user = user_from_store; 214 | } else { 215 | throw new Error('Failed to get user1.... run registerUser.js'); 216 | } 217 | 218 | // queryTuna - requires 1 argument, ex: args: ['4'], 219 | const request = { 220 | chaincodeId: 'source-app', 221 | txId: tx_id, 222 | fcn: function_name, 223 | args: [key] 224 | }; 225 | 226 | // send the query proposal to the peer 227 | return channel.queryByChaincode(request); 228 | }).then((query_responses) => { 229 | console.log("Query has completed, checking results"); 230 | // query_responses could have more than one results if there multiple peers were used as targets 231 | if (query_responses && query_responses.length == 1) { 232 | if (query_responses[0] instanceof Error) { 233 | console.error("error from query = ", query_responses[0]); 234 | res.send("Could not locate tuna") 235 | 236 | } else { 237 | console.log("Response is ", query_responses[0].toString()); 238 | res.send(query_responses[0].toString()) 239 | } 240 | } else { 241 | console.log("No payloads were returned from query"); 242 | res.send("Could not locate tuna") 243 | } 244 | }).catch((err) => { 245 | console.error('Failed to query successfully :: ' + err); 246 | res.send("Could not locate tuna") 247 | }); 248 | } 249 | } 250 | })(); 251 | -------------------------------------------------------------------------------- /source-app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "source-app", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "server.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "dependencies": { 10 | "fabric-ca-client": "^1.0.2", 11 | "fabric-client": "^1.0.2", 12 | "grpc": "^1.6.0", 13 | "cookie-parser": "^1.4.3", 14 | "csurf": "^1.9.0", 15 | "ejs": "^2.5.7", 16 | "express": "^4.16.2", 17 | "express-flash": "^0.0.2", 18 | "express-layout": "^0.1.0", 19 | "express-session": "^1.15.6", 20 | "express-validator": "^4.3.0", 21 | "helmet": "^3.10.0", 22 | "multer": "^1.3.0", 23 | "body-parser": "latest", 24 | "angular": "^1.4.3" 25 | }, 26 | "devDependencies": { 27 | "nodemon": "^1.14.11" 28 | }, 29 | "author": "", 30 | "license": "ISC" 31 | } 32 | -------------------------------------------------------------------------------- /source-app/public/css/business_search.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-image: url("business_search.jpg"); 3 | background-size: cover; 4 | margin: auto; 5 | } 6 | 7 | .form-wrapper { 8 | width: 450px; 9 | padding: 8px; 10 | margin: 200px auto; 11 | overflow: hidden; 12 | border-width: 1px; 13 | border-style: solid; 14 | border-color: #dedede #bababa #aaa #bababa; 15 | box-shadow: 0 3px 3px rgba(255,255,255,.1), 0 3px 0 #bbb, 0 4px 0 #aaa, 0 5px 5px #444; 16 | border-radius: 10px; 17 | background-color: #f6f6f6; 18 | background-image: linear-gradient(top, #f6f6f6, #eae8e8); 19 | } 20 | 21 | .form-wrapper #search { 22 | width: 330px; 23 | height: 22px; 24 | padding: 10px 5px; 25 | float: left; 26 | font: bold 16px 'lucida sans', 'trebuchet MS', 'Tahoma'; 27 | border: 1px solid #ccc; 28 | box-shadow: 0 1px 1px #ddd inset, 0 1px 0 #fff; 29 | border-radius: 3px; 30 | } 31 | 32 | .form-wrapper #search:focus { 33 | outline: 0; 34 | border-color: #aaa; 35 | box-shadow: 0 1px 1px #bbb inset; 36 | } 37 | 38 | .form-wrapper #search::-webkit-input-placeholder { 39 | color: #999; 40 | font-weight: normal; 41 | } 42 | 43 | .form-wrapper #search:-moz-placeholder { 44 | color: #999; 45 | font-weight: normal; 46 | } 47 | 48 | .form-wrapper #search:-ms-input-placeholder { 49 | color: #999; 50 | font-weight: normal; 51 | } 52 | 53 | .form-wrapper #submit { 54 | float: right; 55 | border: 1px solid #00748f; 56 | height: 42px; 57 | width: 100px; 58 | padding: 0; 59 | cursor: pointer; 60 | font: bold 15px Arial, Helvetica; 61 | color: #fafafa; 62 | text-transform: uppercase; 63 | background-color: #0483a0; 64 | background-image: linear-gradient(top, #31b2c3, #0483a0); 65 | -moz-border-radius: 3px; 66 | -webkit-border-radius: 3px; 67 | border-radius: 3px; 68 | text-shadow: 0 1px 0 rgba(0, 0 ,0, .3); 69 | box-shadow: 0 1px 0 rgba(255, 255, 255, 0.3) inset, 0 1px 0 #fff; 70 | } 71 | 72 | .form-wrapper #submit:hover, 73 | .form-wrapper #submit:focus { 74 | background-color: #31b2c3; 75 | background-image: linear-gradient(top, #0483a0, #31b2c3); 76 | } 77 | 78 | .form-wrapper #submit:active { 79 | outline: 0; 80 | box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5) inset; 81 | } 82 | 83 | .form-wrapper #submit::-moz-focus-inner { 84 | border: 0; 85 | } -------------------------------------------------------------------------------- /source-app/public/css/business_search.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KissFire-MT/fabric-tea/fc886b987844e8328c8f6682f6a759722fdafacc/source-app/public/css/business_search.jpg -------------------------------------------------------------------------------- /source-app/public/css/detail.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-image: url("detail.jpg"); 3 | background-size: cover; 4 | } 5 | 6 | table { 7 | color: #333; 8 | font-family: Helvetica, Arial, sans-serif; 9 | width: 640px; 10 | /* Table reset stuff */ 11 | border-collapse: collapse; border-spacing: 0; 12 | box-shadow: 3px 3px 7px rgba(0,0,0,0.3); 13 | border-radius: 10px 10px; 14 | margin: 200px auto; 15 | } 16 | 17 | td, th { border: 0 none; height: 30px; } 18 | 19 | th { 20 | /* Gradient Background */ 21 | background: linear-gradient(#333 0%,#444 100%); 22 | color: #FFF; font-weight: bold; 23 | height: 40px; 24 | } 25 | 26 | td { background: #FAFAFA; text-align: center; } 27 | 28 | /* Zebra Stripe Rows */ 29 | 30 | tr:nth-child(even) td { background: #EEE; } 31 | tr:nth-child(odd) td { background: #FDFDFD; } 32 | 33 | /* First-child blank cells! */ 34 | tr td:first-child, tr th:first-child { 35 | font-style: italic; 36 | font-weight: bold; 37 | font-size: 14px; 38 | text-align: right; 39 | padding-right: 10px; 40 | width: 80px; 41 | } 42 | 43 | /* Add border-radius to specific cells! */ 44 | tr:first-child th:nth-child(2) { 45 | border-radius: 0px 0 0 0; 46 | } 47 | 48 | tr:first-child th:last-child { 49 | border-radius: 0 5px 0 0; 50 | } 51 | -------------------------------------------------------------------------------- /source-app/public/css/detail.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KissFire-MT/fabric-tea/fc886b987844e8328c8f6682f6a759722fdafacc/source-app/public/css/detail.jpg -------------------------------------------------------------------------------- /source-app/public/css/form.css: -------------------------------------------------------------------------------- 1 | body{ 2 | background-image: url("css/business_search.jpg"); 3 | background-size: cover; 4 | } 5 | 6 | .form-style-10{ 7 | width:450px; 8 | padding:30px; 9 | margin:40px auto; 10 | background: #FFF; 11 | border-radius: 10px; 12 | -webkit-border-radius:10px; 13 | -moz-border-radius: 10px; 14 | box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.13); 15 | -moz-box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.13); 16 | -webkit-box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.13); 17 | } 18 | .form-style-10 .inner-wrap{ 19 | padding: 30px; 20 | background: #F8F8F8; 21 | border-radius: 6px; 22 | margin-bottom: 15px; 23 | } 24 | .form-style-10 h1{ 25 | background: #2A88AD; 26 | padding: 20px 30px 15px 30px; 27 | margin: -30px -30px 30px -30px; 28 | border-radius: 10px 10px 0 0; 29 | -webkit-border-radius: 10px 10px 0 0; 30 | -moz-border-radius: 10px 10px 0 0; 31 | color: #fff; 32 | text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.12); 33 | font: normal 30px 'Bitter', serif; 34 | -moz-box-shadow: inset 0px 2px 2px 0px rgba(255, 255, 255, 0.17); 35 | -webkit-box-shadow: inset 0px 2px 2px 0px rgba(255, 255, 255, 0.17); 36 | box-shadow: inset 0px 2px 2px 0px rgba(255, 255, 255, 0.17); 37 | border: 1px solid #257C9E; 38 | } 39 | .form-style-10 h1 > span{ 40 | display: block; 41 | margin-top: 2px; 42 | font: 13px Arial, Helvetica, sans-serif; 43 | } 44 | .form-style-10 label{ 45 | display: block; 46 | font: 13px Arial, Helvetica, sans-serif; 47 | color: #888; 48 | margin-bottom: 15px; 49 | } 50 | .form-style-10 input[type="text"], 51 | .form-style-10 input[type="date"], 52 | .form-style-10 input[type="datetime"], 53 | .form-style-10 input[type="email"], 54 | .form-style-10 input[type="number"], 55 | .form-style-10 input[type="search"], 56 | .form-style-10 input[type="time"], 57 | .form-style-10 input[type="url"], 58 | .form-style-10 input[type="password"], 59 | .form-style-10 textarea, 60 | .form-style-10 select { 61 | display: block; 62 | box-sizing: border-box; 63 | -webkit-box-sizing: border-box; 64 | -moz-box-sizing: border-box; 65 | width: 100%; 66 | padding: 8px; 67 | border-radius: 6px; 68 | -webkit-border-radius:6px; 69 | -moz-border-radius:6px; 70 | border: 2px solid #fff; 71 | box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.33); 72 | -moz-box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.33); 73 | -webkit-box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.33); 74 | } 75 | 76 | .form-style-10 .section{ 77 | font: normal 20px 'Bitter', serif; 78 | color: #2A88AD; 79 | margin-bottom: 5px; 80 | } 81 | .form-style-10 .section span { 82 | background: #2A88AD; 83 | padding: 5px 10px 5px 10px; 84 | position: absolute; 85 | border-radius: 50%; 86 | -webkit-border-radius: 50%; 87 | -moz-border-radius: 50%; 88 | border: 4px solid #fff; 89 | font-size: 14px; 90 | margin-left: -45px; 91 | color: #fff; 92 | margin-top: -3px; 93 | } 94 | .form-style-10 input[type="button"], 95 | .form-style-10 input[type="submit"]{ 96 | background: #2A88AD; 97 | padding: 8px 20px 8px 20px; 98 | border-radius: 5px; 99 | -webkit-border-radius: 5px; 100 | -moz-border-radius: 5px; 101 | color: #fff; 102 | text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.12); 103 | font: normal 30px 'Bitter', serif; 104 | -moz-box-shadow: inset 0px 2px 2px 0px rgba(255, 255, 255, 0.17); 105 | -webkit-box-shadow: inset 0px 2px 2px 0px rgba(255, 255, 255, 0.17); 106 | box-shadow: inset 0px 2px 2px 0px rgba(255, 255, 255, 0.17); 107 | border: 1px solid #257C9E; 108 | font-size: 15px; 109 | } 110 | .form-style-10 input[type="button"]:hover, 111 | .form-style-10 input[type="submit"]:hover{ 112 | background: #2A6881; 113 | -moz-box-shadow: inset 0px 2px 2px 0px rgba(255, 255, 255, 0.28); 114 | -webkit-box-shadow: inset 0px 2px 2px 0px rgba(255, 255, 255, 0.28); 115 | box-shadow: inset 0px 2px 2px 0px rgba(255, 255, 255, 0.28); 116 | } 117 | .form-style-10 .privacy-policy{ 118 | float: right; 119 | width: 250px; 120 | font: 12px Arial, Helvetica, sans-serif; 121 | color: #4D4D4D; 122 | margin-top: 10px; 123 | text-align: right; 124 | } -------------------------------------------------------------------------------- /source-app/public/css/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-image: url("index.jpg"); 3 | background-size: cover; 4 | margin: auto; 5 | } 6 | 7 | .hand { 8 | width: 1200px; 9 | height: 260px; 10 | position: relative; 11 | top: 150px; 12 | bottom: 0; 13 | left: 0; 14 | right: 0; 15 | margin: auto; 16 | display: flex; 17 | } 18 | 19 | .card { 20 | position: relative; 21 | float: left; 22 | margin-right: 20px; 23 | text-align: left; 24 | width: 185px; 25 | height: 260px; 26 | border-radius: 10px; 27 | -webkit-border-radius:10px; 28 | -moz-border-radius: 10px; 29 | background: #fff; 30 | -webkit-box-shadow: 3px 3px 7px rgba(0,0,0,0.3); 31 | -moz-box-shadow: 3px 3px 7px rgba(0,0,0,0.3); 32 | box-shadow: 3px 3px 7px rgba(0,0,0,0.3); 33 | } 34 | 35 | .card img { 36 | border-radius: 50%; 37 | margin-top: 20px; 38 | margin-left: 20px; 39 | width: 146px; 40 | height: 150px; 41 | overflow: scroll; 42 | } 43 | 44 | .card p { 45 | position: absolute; 46 | margin: auto; 47 | margin-left: 44px; 48 | color: #ff4411; 49 | text-decoration: none; 50 | text-align: center; 51 | font: 25px/50px Georgia, Times New Roman, serif; 52 | } 53 | 54 | .flash { 55 | padding: 15px 20px; 56 | border: 1px solid; 57 | border-radius: 3px; 58 | } 59 | 60 | .flash-success{ 61 | background-color: #fff; 62 | border-color: #c3e6cb; 63 | color: #155724; 64 | text-align: center; 65 | } 66 | -------------------------------------------------------------------------------- /source-app/public/css/index.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KissFire-MT/fabric-tea/fc886b987844e8328c8f6682f6a759722fdafacc/source-app/public/css/index.jpg -------------------------------------------------------------------------------- /source-app/public/css/search.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-image: url("search.jpg"); 3 | background-size: cover; 4 | margin: auto; 5 | } 6 | 7 | .form-wrapper { 8 | width: 450px; 9 | padding: 8px; 10 | margin: 200px auto; 11 | overflow: hidden; 12 | border-width: 1px; 13 | border-style: solid; 14 | border-color: #dedede #bababa #aaa #bababa; 15 | box-shadow: 0 3px 3px rgba(255,255,255,.1), 0 3px 0 #bbb, 0 4px 0 #aaa, 0 5px 5px #444; 16 | -webkit-box-shadow: 0 3px 3px rgba(255,255,255,.1), 0 3px 0 #bbb, 0 4px 0 #aaa, 0 5px 5px #444; 17 | -moz-box-shadow: 0 3px 3px rgba(255,255,255,.1), 0 3px 0 #bbb, 0 4px 0 #aaa, 0 5px 5px #444; 18 | border-radius: 10px; 19 | background-color: #f6f6f6; 20 | background-image: linear-gradient(top, #f6f6f6, #eae8e8); 21 | } 22 | 23 | .form-wrapper #search { 24 | width: 330px; 25 | height: 22px; 26 | padding: 10px 5px; 27 | float: left; 28 | font: bold 16px 'lucida sans', 'trebuchet MS', 'Tahoma'; 29 | border: 1px solid #ccc; 30 | box-shadow: 0 1px 1px #ddd inset, 0 1px 0 #fff; 31 | -webkit-box-shadow: 0 1px 1px #ddd inset, 0 1px 0 #fff; 32 | -moz-box-shadow: 0 1px 1px #ddd inset, 0 1px 0 #fff; 33 | border-radius: 3px; 34 | } 35 | 36 | .form-wrapper #search:focus { 37 | outline: 0; 38 | border-color: #aaa; 39 | box-shadow: 0 1px 1px #bbb inset; 40 | -webkit-box-shadow: 0 1px 1px #bbb inset; 41 | -moz-box-shadow: 0 1px 1px #bbb inset; 42 | } 43 | 44 | .form-wrapper #search::-webkit-input-placeholder { 45 | color: #999; 46 | font-weight: normal; 47 | } 48 | 49 | .form-wrapper #search:-moz-placeholder { 50 | color: #999; 51 | font-weight: normal; 52 | } 53 | 54 | .form-wrapper #search:-ms-input-placeholder { 55 | color: #999; 56 | font-weight: normal; 57 | } 58 | 59 | .form-wrapper #submit { 60 | float: right; 61 | border: 1px solid #00748f; 62 | height: 42px; 63 | width: 100px; 64 | padding: 0; 65 | cursor: pointer; 66 | font: bold 15px Arial, Helvetica; 67 | color: #fafafa; 68 | text-transform: uppercase; 69 | background-color: #32CD32; 70 | background-image: linear-gradient(top, #31b2c3, #32CD32); 71 | -moz-border-radius: 3px; 72 | -webkit-border-radius: 3px; 73 | border-radius: 3px; 74 | text-shadow: 0 1px 0 rgba(0, 0 ,0, .3); 75 | box-shadow: 0 1px 0 rgba(255, 255, 255, 0.3) inset, 0 1px 0 #fff; 76 | -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.3) inset, 0 1px 0 #fff; 77 | -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.3) inset, 0 1px 0 #fff; 78 | } 79 | 80 | .form-wrapper #submit:hover, 81 | .form-wrapper #submit:focus { 82 | background-color: #31b2c3; 83 | background-image: linear-gradient(top, #0483a0, #31b2c3); 84 | } 85 | 86 | .form-wrapper #submit:active { 87 | outline: 0; 88 | box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5) inset; 89 | -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5) inset; 90 | -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5) inset; 91 | } 92 | 93 | .form-wrapper #submit::-moz-focus-inner { 94 | border: 0; 95 | } 96 | -------------------------------------------------------------------------------- /source-app/public/css/search.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KissFire-MT/fabric-tea/fc886b987844e8328c8f6682f6a759722fdafacc/source-app/public/css/search.jpg -------------------------------------------------------------------------------- /source-app/public/css/transit_form.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KissFire-MT/fabric-tea/fc886b987844e8328c8f6682f6a759722fdafacc/source-app/public/css/transit_form.jpg -------------------------------------------------------------------------------- /source-app/public/images/batching.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KissFire-MT/fabric-tea/fc886b987844e8328c8f6682f6a759722fdafacc/source-app/public/images/batching.jpg -------------------------------------------------------------------------------- /source-app/public/images/business.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KissFire-MT/fabric-tea/fc886b987844e8328c8f6682f6a759722fdafacc/source-app/public/images/business.png -------------------------------------------------------------------------------- /source-app/public/images/part_of_food.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KissFire-MT/fabric-tea/fc886b987844e8328c8f6682f6a759722fdafacc/source-app/public/images/part_of_food.jpg -------------------------------------------------------------------------------- /source-app/public/images/submit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KissFire-MT/fabric-tea/fc886b987844e8328c8f6682f6a759722fdafacc/source-app/public/images/submit.png -------------------------------------------------------------------------------- /source-app/public/images/transit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KissFire-MT/fabric-tea/fc886b987844e8328c8f6682f6a759722fdafacc/source-app/public/images/transit.png -------------------------------------------------------------------------------- /source-app/public/images/user-food.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KissFire-MT/fabric-tea/fc886b987844e8328c8f6682f6a759722fdafacc/source-app/public/images/user-food.jpg -------------------------------------------------------------------------------- /source-app/public/js/app.js: -------------------------------------------------------------------------------- 1 | 2 | 'use strict'; 3 | 4 | var app = angular.module('application', []); 5 | 6 | // Angular Controller 7 | app.controller('appController', function($scope, appFactory){ 8 | 9 | $("#success_holder").hide(); 10 | $("#success_create").hide(); 11 | $("#error_holder").hide(); 12 | $("#error_query").hide(); 13 | $scope.querySource = function(){ 14 | var id = $scope.query_id; 15 | appFactory.querySource(id, function(data){ 16 | $scope.query_source = data; 17 | if ($scope.query_tuna == "Could not locate tuna"){ 18 | console.log() 19 | $("#error_query").show(); 20 | } else{ 21 | $("#error_query").hide(); 22 | } 23 | }); 24 | } 25 | $scope.queryPart = function(){ 26 | var id = $scope.query_id; 27 | appFactory.queryPart(id, function(data){ 28 | $scope.part_source = data; 29 | if ($scope.query_tuna == "Could not locate tuna"){ 30 | console.log() 31 | $("#error_query").show(); 32 | } else{ 33 | $("#error_query").hide(); 34 | } 35 | }); 36 | } 37 | $scope.queryTransit = function(){ 38 | var id = $scope.query_id; 39 | appFactory.queryTransit(id, function(data){ 40 | $scope.transit_source = data; 41 | if ($scope.query_tuna == "Could not locate tuna"){ 42 | console.log() 43 | $("#error_query").show(); 44 | } else{ 45 | $("#error_query").hide(); 46 | } 47 | }); 48 | } 49 | }); 50 | 51 | app.factory('appFactory', function($http){ 52 | var factory = {}; 53 | factory.querySource = function(id, callback){ 54 | $http.get('/source/'+id).success(function(output){ 55 | callback(output) 56 | }); 57 | } 58 | factory.queryPart = function(id, callback){ 59 | $http.get('/part/'+id).success(function(output){ 60 | callback(output) 61 | }); 62 | } 63 | factory.queryTransit = function(id, callback){ 64 | $http.get('/transit/'+id).success(function(output){ 65 | callback(output) 66 | }); 67 | } 68 | return factory; 69 | }); 70 | -------------------------------------------------------------------------------- /source-app/registerAdmin.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | /* 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | /* 6 | * Chaincode Invoke 7 | This code is based on code written by the Hyperledger Fabric community. 8 | Original code can be found here: https://gerrit.hyperledger.org/r/#/c/14395/4/fabcar/enrollAdmin.js 9 | */ 10 | 11 | var Fabric_Client = require('fabric-client'); 12 | var Fabric_CA_Client = require('fabric-ca-client'); 13 | 14 | var path = require('path'); 15 | var util = require('util'); 16 | var os = require('os'); 17 | 18 | // 19 | var fabric_client = new Fabric_Client(); 20 | var fabric_ca_client = null; 21 | var admin_user = null; 22 | var member_user = null; 23 | var store_path = path.join(os.homedir(), '.hfc-key-store'); 24 | console.log(' Store path:'+store_path); 25 | 26 | // create the key value store as defined in the fabric-client/config/default.json 'key-value-store' setting 27 | Fabric_Client.newDefaultKeyValueStore({ path: store_path 28 | }).then((state_store) => { 29 | // assign the store to the fabric client 30 | fabric_client.setStateStore(state_store); 31 | var crypto_suite = Fabric_Client.newCryptoSuite(); 32 | // use the same location for the state store (where the users' certificate are kept) 33 | // and the crypto store (where the users' keys are kept) 34 | var crypto_store = Fabric_Client.newCryptoKeyStore({path: store_path}); 35 | crypto_suite.setCryptoKeyStore(crypto_store); 36 | fabric_client.setCryptoSuite(crypto_suite); 37 | var tlsOptions = { 38 | trustedRoots: [], 39 | verify: false 40 | }; 41 | // be sure to change the http to https when the CA is running TLS enabled 42 | fabric_ca_client = new Fabric_CA_Client('http://localhost:7054', tlsOptions , 'ca.example.com', crypto_suite); 43 | 44 | // first check to see if the admin is already enrolled 45 | return fabric_client.getUserContext('admin', true); 46 | }).then((user_from_store) => { 47 | if (user_from_store && user_from_store.isEnrolled()) { 48 | console.log('Successfully loaded admin from persistence'); 49 | admin_user = user_from_store; 50 | return null; 51 | } else { 52 | // need to enroll it with CA server 53 | return fabric_ca_client.enroll({ 54 | enrollmentID: 'admin', 55 | enrollmentSecret: 'adminpw' 56 | }).then((enrollment) => { 57 | console.log('Successfully enrolled admin user "admin"'); 58 | return fabric_client.createUser( 59 | {username: 'admin', 60 | mspid: 'Org1MSP', 61 | cryptoContent: { privateKeyPEM: enrollment.key.toBytes(), signedCertPEM: enrollment.certificate } 62 | }); 63 | }).then((user) => { 64 | admin_user = user; 65 | return fabric_client.setUserContext(admin_user); 66 | }).catch((err) => { 67 | console.error('Failed to enroll and persist admin. Error: ' + err.stack ? err.stack : err); 68 | throw new Error('Failed to enroll admin'); 69 | }); 70 | } 71 | }).then(() => { 72 | console.log('Assigned the admin user to the fabric client ::' + admin_user.toString()); 73 | }).catch((err) => { 74 | console.error('Failed to enroll admin: ' + err); 75 | }); 76 | -------------------------------------------------------------------------------- /source-app/registerUser.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | /* 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | /* 6 | * Chaincode Invoke 7 | This code is based on code written by the Hyperledger Fabric community. 8 | Original code can be found here: https://gerrit.hyperledger.org/r/#/c/14395/4/fabcar/registerUser.js 9 | */ 10 | 11 | var Fabric_Client = require('fabric-client'); 12 | var Fabric_CA_Client = require('fabric-ca-client'); 13 | 14 | var path = require('path'); 15 | var util = require('util'); 16 | var os = require('os'); 17 | 18 | // 19 | var fabric_client = new Fabric_Client(); 20 | var fabric_ca_client = null; 21 | var admin_user = null; 22 | var member_user = null; 23 | var store_path = path.join(os.homedir(), '.hfc-key-store'); 24 | console.log(' Store path:'+store_path); 25 | 26 | // create the key value store as defined in the fabric-client/config/default.json 'key-value-store' setting 27 | Fabric_Client.newDefaultKeyValueStore({ path: store_path 28 | }).then((state_store) => { 29 | // assign the store to the fabric client 30 | fabric_client.setStateStore(state_store); 31 | var crypto_suite = Fabric_Client.newCryptoSuite(); 32 | // use the same location for the state store (where the users' certificate are kept) 33 | // and the crypto store (where the users' keys are kept) 34 | var crypto_store = Fabric_Client.newCryptoKeyStore({path: store_path}); 35 | crypto_suite.setCryptoKeyStore(crypto_store); 36 | fabric_client.setCryptoSuite(crypto_suite); 37 | var tlsOptions = { 38 | trustedRoots: [], 39 | verify: false 40 | }; 41 | // be sure to change the http to https when the CA is running TLS enabled 42 | fabric_ca_client = new Fabric_CA_Client('http://localhost:7054', null , '', crypto_suite); 43 | 44 | // first check to see if the admin is already enrolled 45 | return fabric_client.getUserContext('admin', true); 46 | }).then((user_from_store) => { 47 | if (user_from_store && user_from_store.isEnrolled()) { 48 | console.log('Successfully loaded admin from persistence'); 49 | admin_user = user_from_store; 50 | } else { 51 | throw new Error('Failed to get admin.... run registerAdmin.js'); 52 | } 53 | 54 | // at this point we should have the admin user 55 | // first need to register the user with the CA server 56 | return fabric_ca_client.register({enrollmentID: 'user1', affiliation: 'org1.department1'}, admin_user); 57 | }).then((secret) => { 58 | // next we need to enroll the user with CA server 59 | console.log('Successfully registered user1 - secret:'+ secret); 60 | 61 | return fabric_ca_client.enroll({enrollmentID: 'user1', enrollmentSecret: secret}); 62 | }).then((enrollment) => { 63 | console.log('Successfully enrolled member user "user1" '); 64 | return fabric_client.createUser( 65 | {username: 'user1', 66 | mspid: 'Org1MSP', 67 | cryptoContent: { privateKeyPEM: enrollment.key.toBytes(), signedCertPEM: enrollment.certificate } 68 | }); 69 | }).then((user) => { 70 | member_user = user; 71 | 72 | return fabric_client.setUserContext(member_user); 73 | }).then(()=>{ 74 | console.log('User1 was successfully registered and enrolled and is ready to intreact with the fabric network'); 75 | 76 | }).catch((err) => { 77 | console.error('Failed to register: ' + err); 78 | if(err.toString().indexOf('Authorization') > -1) { 79 | console.error('Authorization failures may be caused by having admin credentials from a previous CA instance.\n' + 80 | 'Try again after deleting the contents of the store directory '+store_path); 81 | } 82 | }); 83 | -------------------------------------------------------------------------------- /source-app/routes.js: -------------------------------------------------------------------------------- 1 | var tuna = require('./controller.js'); 2 | 3 | module.exports = function(app) { 4 | app.get('/', function(req, res) { 5 | tuna.index(req, res); 6 | }); 7 | app.get('/search', function(req, res) { 8 | tuna.search_html(req, res); 9 | }); 10 | app.get('/part_search', function(req, res) { 11 | tuna.part_search(req, res); 12 | }); 13 | app.get('/business_search', function(req, res) { 14 | tuna.business_search(req, res); 15 | }); 16 | app.get('/form', function(req, res) { 17 | tuna.form_(req, res); 18 | }); 19 | app.get('/part_form', function(req, res) { 20 | tuna.part_form(req, res); 21 | }); 22 | app.get('/transit_form', function(req, res) { 23 | tuna.transit_form(req, res); 24 | }); 25 | app.post('/re_form', function(req, res) { 26 | var function_name = 'addProInfo' 27 | tuna.re_form(req, res, function_name); 28 | }); 29 | app.post('/re_part_form', function(req, res) { 30 | var function_name = 'addIngInfo' 31 | tuna.re_form(req, res, function_name); 32 | }); 33 | app.post('/re_transit_form', function(req, res) { 34 | var function_name = 'addLogInfo' 35 | tuna.re_form(req, res, function_name); 36 | }); 37 | app.get('/source/:id', function(req, res) { 38 | var function_name = 'getProInfo' 39 | tuna.get_tuna(req, res, function_name); 40 | }); 41 | app.get('/part/:id', function(req, res) { 42 | var function_name = 'getIngInfo' 43 | tuna.get_tuna(req, res, function_name); 44 | }); 45 | app.get('/transit/:id', function(req, res) { 46 | var function_name = 'getLogInfo' 47 | tuna.get_tuna(req, res, function_name); 48 | }); 49 | } 50 | -------------------------------------------------------------------------------- /source-app/server.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var express = require('express') 3 | var layout = require('express-layout') 4 | var routes = require('./routes') 5 | var app = express() 6 | var bodyParser = require('body-parser') 7 | var flash = require('express-flash') 8 | var cookieParser = require('cookie-parser') 9 | var session = require('express-session') 10 | 11 | const middlewares = [ 12 | express.static(path.join(__dirname, 'public')), 13 | bodyParser.urlencoded({ extended: true }), 14 | cookieParser(), 15 | session({ 16 | secret: 'super-secret-key', 17 | key: 'super-secret-cookie', 18 | resave: false, 19 | saveUninitialized: false, 20 | cookie: { maxAge: 60000} 21 | }), 22 | flash() 23 | ] 24 | app.use(middlewares) 25 | app.use(express.static(path.join(__dirname, 'views'))); 26 | app.set('view engine', 'ejs'); 27 | require('./routes.js')(app); 28 | 29 | app.use((req, res, next) => { 30 | res.status(404).send("Sorry can not find that!") 31 | }) 32 | 33 | app.use((err, req, res, next) => { 34 | console.log(err.stack) 35 | res.status(500).send('Something broke!') 36 | }) 37 | 38 | var port = process.env.PORT || 8000; 39 | 40 | app.listen(port,function(){ 41 | console.log("Live on port: " + port); 42 | }); 43 | -------------------------------------------------------------------------------- /source-app/startFabric.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | # This code is based on code written by the Hyperledger Fabric community. 5 | # Original code can be found here: https://github.com/hyperledger/fabric-samples/blob/release/fabcar/startFabric.sh 6 | # 7 | # Exit on first error 8 | 9 | set -e 10 | 11 | # don't rewrite paths for Windows Git Bash users 12 | export MSYS_NO_PATHCONV=1 13 | 14 | starttime=$(date +%s) 15 | 16 | if [ ! -d ~/.hfc-key-store/ ]; then 17 | mkdir ~/.hfc-key-store/ 18 | fi 19 | 20 | # launch network; create channel and join peer to channel 21 | cd ../basic-network 22 | ./start.sh 23 | 24 | # Now launch the CLI container in order to install, instantiate chaincode 25 | # and prime the ledger with our 10 tuna catches 26 | docker-compose -f ./docker-compose.yml up -d cli 27 | 28 | docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" cli peer chaincode install -n source-app -v 1.0 -p github.com/source-app 29 | docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" cli peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n source-app -v 1.0 -c '{"Args":[""]}' -P "OR ('Org1MSP.member','Org2MSP.member')" 30 | sleep 20 31 | 32 | printf "\nTotal execution time : $(($(date +%s) - starttime)) secs ...\n\n" 33 | printf "\nStart with the registerAdmin.js, then registerUser.js, then server.js\n\n" 34 | -------------------------------------------------------------------------------- /source-app/views/business_search.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
出发时间到达时间储存or运输出发地目的地销售商存储时间运送方式物流公司名称费用
{{transit.LogDepartureTm}}{{transit.LogArrivalTm}}{{transit.LogMission}}{{transit.LogDeparturePl}}{{transit.LogDest}}{{transit.LogToSeller}}{{transit.LogStorageTm}}{{transit.LogMOT}}{{transit.LogCopName}}{{transit.LogCost}}
41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /source-app/views/form.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Form Style 10 6 | 7 | 111 | 112 | 113 | 114 | 115 |
116 |

发布茶叶

117 |
118 |
茶叶信息
119 |
120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 |
131 |
132 | 133 |
134 |
135 |
136 | 137 | 138 | 139 | -------------------------------------------------------------------------------- /source-app/views/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | <% if (messages.success) { %> 8 |
<%= messages.success %>
9 | <% } %> 10 |
11 |
12 | 13 |

生产查询

14 |
15 |
16 | 17 |

加工查询

18 |
19 |
20 | 21 |

运输查询

22 |
23 |
24 | 25 |

茶叶生产

26 |
27 |
28 | 29 |

茶叶加工

30 |
31 |
32 | 33 |

茶叶运输

34 |
35 |
36 | 37 | -------------------------------------------------------------------------------- /source-app/views/part_form.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Form Style 10 6 | 7 | 126 | 127 | 128 | 129 | 130 |
131 |

添加加工

132 |
133 |
1茶叶编号
134 |
135 | 136 |
137 |
2加工信息
138 |
139 | 140 | 141 |
142 |
3加工信息
143 |
144 | 145 | 146 |
147 |
4加工信息
148 |
149 | 150 | 151 |
152 |
5加工信息
153 |
154 | 155 | 156 |
157 |
6加工信息
158 |
159 | 160 | 161 |
162 |
163 | 164 |
165 |
166 |
167 | 168 | 169 | 170 | -------------------------------------------------------------------------------- /source-app/views/part_search.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
食品ID食品名称
{{part.IngID}}{{part.IngName}}
25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /source-app/views/search.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |
茶叶名称茶叶规格茶叶生产日期茶叶保质期茶叶批次号茶叶生产许可证编号茶叶生产商名称茶叶生产价格茶叶生产所在地
{{query_source.FoodName}}{{query_source.FoodSpec}}{{query_source.FoodMFGDate}}{{query_source.FoodEXPDate}}{{query_source.FoodLOT}}{{query_source.FoodQSID}}{{query_source.FoodMFRSName}}{{query_source.FoodProPrice}}{{query_source.FoodProPlace}}
39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /source-app/views/transit_form.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Form Style 10 6 | 7 | 192 | 193 | 194 | 195 |
196 |

茶叶交易

197 |
198 |
茶叶交易
199 |
200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 |
212 |
213 | 214 |
215 |
216 |
217 | 218 | 219 | 220 | --------------------------------------------------------------------------------