{"action":"created","comment":{"url":"https://api.github.com/repos/hyperledger/fabric/pulls/comments/71028697","id":71028697,"diff_hunk":"@@ -0,0 +1,261 @@\n+## Setting Up a Network\n+\n+This document covers setting up a network on your local machine for various development and testing activities. Unless you are intending to contribute to the development of the Hyperledger Fabric project, you'll probably want to follow the more commonly used approach below - [leveraging published Docker images](#leveraging-published Docker-images) for the various Hyperledger Fabric components, directly. Otherwise, skip down to the [secondary approach](#building-your-own-images) below.\n+\n+### Leveraging published Docker images\n+\n+This approach simply leverages the Docker images that the Hyperledger Fabric project publishes to [DockerHub](https://hub.docker.com/u/hyperledger/) and either Docker commands or Docker Compose descriptions of the network one wishes to create.\n+\n+#### Installing Docker\n+\n+**Note:** When running Docker _natively_ on Mac and Windows, there is no IP forwarding support available. Hence, running more than one fabric-peer image is not advised because you do not want to have multiple processes binding to the same port. For most application and chaincode development/testing running with a single fabric peer should not be an issue unless you are interested in performance and resilience testing the fabric's capabilities, such as consensus. For more advanced testing, we strongly recommend using the fabric's Vagrant [development environment](../dev-setup/devenv.md).\n+\n+With this approach, there are multiple choices as to how to run Docker. Using [Docker Toolbox](https://docs.docker.com/toolbox/overview/) or one of the new native Docker runtime environments for [Mac OSX](https://docs.docker.com/engine/installation/mac/) or [Windows](https://docs.docker.com/engine/installation/windows/). There are some subtle differences between how Docker runs natively on Mac and Windows versus in a virtualized context on Linux. We'll call those out where appropriate below, when we get to the point of actually running the various components.\n+\n+#### Pulling the images from DockerHub\n+\n+Once you have Docker (1.11 or greater) installed and running, \n+prior to starting any of the fabric components, you will need to first pull the fabric images from DockerHub.\n+\n+```\n+  docker pull hyperledger/fabric-peer:latest\n+  docker pull hyperledger/fabric-membersrvc:latest\n+```\n+\n+### Building your own images\n+\n+**Note:** _This approach is not necessarily recommended for most users_. If you have pulled images from DockerHub as described in the previous section, you may proceed to the [next step](#Starting-up-validating-peers).\n+\n+The second approach would be to leverage the [development environment](../dev-setup/devenv.md) setup (which we will assume you have already established) to build and deploy your own binaries and/or Docker images from a clone of the [hyperledger/fabric](https://github.com/hyperledger/fabric) GitHub repository. This approach is suitable for developers that might wish to contribute directly to the Hyperledger Fabric project, or that wish to deploy from a fork of the Hyperledger code base.\n+\n+The following commands should be run from _within_ the Vagrant environment described in [Setting Up Development Environment](../dev-setup/devenv.md).\n+\n+To create the Docker image for the `hyperledger/fabric-peer`:\n+\n+```\n+cd $GOPATH/src/github.com/hyperledger/fabric\n+make peer-image\n+```\n+\n+To create the Docker image for the `hyperledger/fabric-membersrvc`:\n+\n+```\n+make membersrvc-image\n+```\n+\n+### Starting up validating peers\n+\n+Check the available images again with `docker images`. You should see `hyperledger/fabric-peer` and `hyperledger/fabric-membersrvc` images. For example,\n+\n+```\n+$ docker images\n+REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE\n+hyperledger/fabric-membersrvc   latest              7d5f6e0bcfac        12 days ago         1.439 GB\n+hyperledger/fabric-peer         latest              82ef20d7507c        12 days ago         1.445 GB\n+```\n+If you don't see these, go back to the previous step.\n+\n+With the relevant Docker images in hand, we can start running the peer and membersrvc services.\n+\n+#### Determine value for CORE_VM_ENDPOINT variable\n+\n+Next, we need to determine the address of your docker daemon for the CORE_VM_ENDPOINT. If you are working within the Vagrant development environment, or a Docker Toolbox environment, you can determine this with the `ip add` command. For example,\n+\n+```\n+$ ip add\n+\n+<<< detail removed >>>\n+\n+3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default\n+    link/ether 02:42:ad:be:70:cb brd ff:ff:ff:ff:ff:ff\n+    inet 172.17.0.1/16 scope global docker0\n+       valid_lft forever preferred_lft forever\n+    inet6 fe80::42:adff:febe:70cb/64 scope link\n+       valid_lft forever preferred_lft forever\n+```\n+\n+Your output might contain something like `inet 172.17.0.1/16 scope global docker0`. That means the docker0 interface is on IP address 172.17.0.1. Use that IP address for the `CORE_VM_ENDPOINT` option. For more information on the environment variables, see `core.yaml` configuration file in the `fabric` repository.\n+\n+If you are using the native Docker for Mac or Windows, the value for `CORE_VM_ENDPOINT` should be set to `unix:///var/run/docker.sock`. \\[TODO] double check this. I believe that `127.0.0.1:2375` also works.\n+\n+#### Assigning a value for CORE_PEER_ID\n+\n+The ID value of `CORE_PEER_ID` must be unique for each validating peer, and it must be a lowercase string. We often use a convention of naming the validating peers vpN where N is an integer starting with 0 for the root node and incrementing N by 1 for each additional peer node started. eg. vp0, vp1, vp2, ...\n+\n+#### Consensus\n+\n+By default, we are using a consensus plugin called `NOOPS`, which doesn't really do consensus. If you are running a single peer node, running anything other than `NOOPS` makes little sense. If you want to use some other consensus plugin in the context of multiple peer nodes, please see the [Using a Consensus Plugin](#using-a-consensus-plugin) section, below.\n+\n+#### Docker Compose\n+\n+We'll be using Docker Compose to launch our various Fabric component containers, as this is the simplest approach. You should have it installed from the initial setup steps. Installing Docker Toolbox or any of the native Docker runtimes should have installed Compose.\n+\n+#### Start up a validating peer:\n+\n+Let's launch the first validating peer (the root node). We'll set CORE_PEER_ID to vp0 and CORE_VM_ENDPOINT as above. Here's the docker-compose.yml for launching a single container within the **Vagrant** [development environment](../dev-setup/devenv.md):\n+\n+```\n+vp0:\n+  image: hyperledger/fabric-peer\n+  environment:\n+    - CORE_PEER_ID=vp0\n+    - CORE_PEER_ADDRESSAUTODETECT=true\n+    - CORE_VM_ENDPOINT=http://172.17.0.1:2375\n+    - CORE_LOGGING_LEVEL=DEBUG\n+  command: peer node start\n+```\n+You can launch this Compose file as follows, from the same directory as the docker-compose.yml file:\n+\n+```\n+$ docker-compose up\n+```\n+\n+Here's the corresponding Docker command:\n+```\n+$ docker run --rm -it -e CORE_VM_ENDPOINT=http://172.17.0.1:2375 -e CORE_LOGGING_LEVEL=DEBUG -e CORE_PEER_ID=vp0 -e CORE_PEER_ADDRESSAUTODETECT=true hyperledger/fabric-peer peer node start\n+```\n+\n+If you are running Docker for Mac or Windows, we'll need to explicitly map the ports, and we will need a different value for CORE_VM_ENDPOINT as we discussed above.\n+\n+Here's the docker-compose.yml for Docker on Mac or Windows:\n+\n+```\n+vp0:\n+  image: hyperledger/fabric-peer\n+  ports:\n+    - \"5000:5000\"\n+    - \"30303:30303\"\n+    - \"30304:30304\"\n+  environment:\n+    - CORE_PEER_ADDRESSAUTODETECT=true\n+    - CORE_VM_ENDPOINT=unix:///var/run/docker.sock\n+    - CORE_LOGGING_LEVEL=DEBUG\n+  command: peer node start\n+```\n+\n+This single peer configuration, running the `NOOPS` 'consensus' plugin, should satisfy many development/test scenarios. `NOOPS` is not really providing consensus, it is essentially a no-op that simulates consensus. For instance, if you are simply developing and testing chaincode; this should be adequate unless your chaincode is leveraging membership services for identity, access control, confidentiality and privacy.\n+\n+#### Running with the CA\n+\n+If you want to take advantage of security (authentication and authorization), privacy and confidentiality, then you'll need to run the Fabric's certificate authority (CA). Please refer to the [CA Setup](#Setup/ca-setup.md) instructions.\n+\n+#### Start up additional validating peers:\n+\n+Following the pattern we established [above](#Assigning-a-value-for-CORE_PEER_ID) we'll use `vp1` as the ID for the second validating peer. If using Docker Compose, we can simply link the two peer nodes.\n+Here's the docker-compse.yml for a **Vagrant** environment with two peer nodes - vp0 and vp1:\n+```\n+vp0:\n+  image: hyperledger/fabric-peer\n+  environment:\n+    - CORE_PEER_ADDRESSAUTODETECT=true\n+    - CORE_VM_ENDPOINT=http://172.17.0.1:2375\n+    - CORE_LOGGING_LEVEL=DEBUG\n+  command: peer node start\n+vp1:\n+  extends:\n+    service: vp0\n+  environment:\n+    - CORE_PEER_ID=vp1\n+    - CORE_PEER_DISCOVERY_ROOTNODE=vp0:30303\n+  links:\n+    - vp0\n+```\n+\n+If we wanted to use the docker commandline to launch another peer, we need to get the IP address of the first validating peer, which will act as the root node to which the new peer(s) will connect. The address is printed out on the terminal window of the first peer (e.g. 172.17.0.2) and should be passed in with the `CORE_PEER_DISCOVERY_ROOTNODE` environment variable.\n+\n+```\n+docker run --rm -it -e CORE_VM_ENDPOINT=http://172.17.0.1:2375 -e CORE_PEER_ID=vp1 -e CORE_PEER_ADDRESSAUTODETECT=true -e CORE_PEER_DISCOVERY_ROOTNODE=172.17.0.2:30303 hyperledger/fabric-peer peer node start\n+```\n+<!-- This needs to be sorted out with a revamped security section\n+\n+Again, the validating peer `enrollID` and `enrollSecret` (`vp1` and `vp1_secret`) has to be added to [membersrvc.yaml](https://github.com/hyperledger/fabric/blob/master/membersrvc/membersrvc.yaml).\n+\n+You can start up a few more validating peers in a similar manner if you wish. Remember to change the peer ID and add the enrollID/enrollSecret to the [membersrvc.yaml](https://github.com/hyperledger/fabric/blob/master/membersrvc/membersrvc.yaml).\n+\n+### Enroll/Login a test user (if security is enabled):\n+If security is enabled, you must enroll a user with the certificate authority before sending requests. Choose a user that is already registered, i.e. added to the [membersrvc.yaml](https://github.com/hyperledger/fabric/blob/master/membersrvc/membersrvc.yaml). Then, execute the command below to log in the user on the target validating peer. `CORE_PEER_ADDRESS` specifies the target validating peer for which the user is to be logged in.\n+\n+```\n+CORE_PEER_ADDRESS=172.17.0.2:30303 peer network login jim\n+```\n+\n+**Note:** The certificate authority allows the enrollID and enrollSecret credentials to be used only *once*. Therefore, login by the same user from any other validating peer will result in an error. Currently, the application layer is responsible for duplicating the crypto material returned from the CA to other peer nodes. If you want to test secure transactions from more than one peer node without replicating the returned key and certificate, you can log in with a different user on other peer nodes.\n+\n+### Deploy, Invoke, and Query a Chaincode\n+\n+\n+**Note:** When security is enabled, modify the CLI commands to deploy, invoke, or query a chaincode to pass the username of a logged in user. To log in a registered user through the CLI, execute the login command from the section above. On the CLI the username is passed with the -u parameter.\n+\n+We can use the sample chaincode to test the network. You may find the chaincode here `$GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02`.\n+\n+Deploy the chaincode to the network. We can deploy to any validating peer by specifying `CORE_PEER_ADDRESS`:\n+\n+```\n+CORE_PEER_ADDRESS=172.17.0.2:30303 peer chaincode deploy -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{\"Function\":\"init\", \"Args\": [\"a\",\"100\", \"b\", \"200\"]}'\n+```\n+\n+With security enabled, modify the command as follows:\n+\n+```\n+CORE_PEER_ADDRESS=172.17.0.2:30303 CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer chaincode deploy -u jim -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{\"Function\":\"init\", \"Args\": [\"a\",\"100\", \"b\", \"200\"]}'\n+```\n+\n+You can watch for the message \"Received build request for chaincode spec\" on the output screen of all validating peers.\n+\n+**Note:** If your GOPATH environment variable contains more than one element, the chaincode must be found in the first one or deployment will fail.\n+\n+On successful completion, the above command will print the \"name\" assigned to the deployed chaincode. This \"name\" is used as the value of the \"-n\" parameter in invoke and query commands described below. For example the value of \"name\" could be\n+\n+    bb540edfc1ee2ac0f5e2ec6000677f4cd1c6728046d5e32dede7fea11a42f86a6943b76a8f9154f4792032551ed320871ff7b7076047e4184292e01e3421889c\n+\n+In a script the name can be captured for subsequent use. For example, run\n+\n+    NAME=`CORE_PEER_ADDRESS=172.17.0.2:30303 CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer chaincode deploy ...`\n+\n+and then replace `<name_value_returned_from_deploy_command>` in the examples below with `$NAME`.\n+\n+We can run an invoke transaction to move 10 units from the value of `a` to the value of `b`:\n+\n+```\n+CORE_PEER_ADDRESS=172.17.0.2:30303 peer chaincode invoke -n <name_value_returned_from_deploy_command> -c '{\"Function\": \"invoke\", \"Args\": [\"a\", \"b\", \"10\"]}'\n+```\n+\n+With security enabled, modify the command as follows:\n+\n+```\n+CORE_PEER_ADDRESS=172.17.0.2:30303 CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer chaincode invoke -u jim -n <name_value_returned_from_deploy_command> -c '{\"Function\": \"invoke\", \"Args\": [\"a\", \"b\", \"10\"]}'\n+```\n+\n+We can also run a query to see the current value `a` has:\n+\n+```\n+CORE_PEER_ADDRESS=172.17.0.2:30303 peer chaincode query -l golang -n <name_value_returned_from_deploy_command> -c '{\"Function\": \"query\", \"Args\": [\"a\"]}'\n+```\n+\n+With security enabled, modify the command as follows:\n+\n+```\n+CORE_PEER_ADDRESS=172.17.0.2:30303 CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer chaincode query -u jim -l golang -n <name_value_returned_from_deploy_command> -c '{\"Function\": \"query\", \"Args\": [\"a\"]}'\n+```\n+-->\n+\n+### Using a Consensus Plugin\n+A consensus plugin might require some specific configuration that you need to set up. For example, to use Byzantine consensus plugin provided as part of the fabric, perform the following configuration:\n+\n+1. In `core.yaml`, set the `peer.validator.consensus` value to `pbft`\n+2. In `core.yaml`, make sure the `peer.id` is set sequentially as `vpN` where `N` is an integer that starts from `0` and goes to `N-1`. For example, with 4 validating peers, set the `peer.id` to`vp0`, `vp1`, `vp2`, `vp3`.\n+3. In `consensus/pbft/config.yaml`, set the `general.mode` value to `batch` and the `general.N` value to the number of validating peers on the network, also set `general.batchsize` to the number of transactions per batch.\n+4. In `consensus/pbft/config.yaml`, optionally set timer values for the batch period (`general.timeout.batch`), the acceptable delay between request and execution (`general.timeout.request`), and for view-change (`general.timeout.viewchange`)\n+\n+See `core.yaml` and `consensus/pbft/config.yaml` for more detail.\n+\n+All of these setting may be overriden via the command line environment variables, eg. `CORE_PEER_VALIDATOR_CONSENSUS_PLUGIN=pbft` or `CORE_PBFT_GENERAL_MODE=batch`","path":"docs/Setup/Network-setup.md","position":252,"original_position":252,"commit_id":"82b9c996ab93b92ba74e7caf0c415007924f5090","original_commit_id":"82b9c996ab93b92ba74e7caf0c415007924f5090","user":{"login":"joshhus","id":16542757,"avatar_url":"https://avatars.githubusercontent.com/u/16542757?v=3","gravatar_id":"","url":"https://api.github.com/users/joshhus","html_url":"https://github.com/joshhus","followers_url":"https://api.github.com/users/joshhus/followers","following_url":"https://api.github.com/users/joshhus/following{/other_user}","gists_url":"https://api.github.com/users/joshhus/gists{/gist_id}","starred_url":"https://api.github.com/users/joshhus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/joshhus/subscriptions","organizations_url":"https://api.github.com/users/joshhus/orgs","repos_url":"https://api.github.com/users/joshhus/repos","events_url":"https://api.github.com/users/joshhus/events{/privacy}","received_events_url":"https://api.github.com/users/joshhus/received_events","type":"User","site_admin":false},"body":"\"... overridden ...\"\r\n\"e.g.\" ","created_at":"2016-07-15T19:29:55Z","updated_at":"2016-07-15T19:29:55Z","html_url":"https://github.com/hyperledger/fabric/pull/2150#discussion_r71028697","pull_request_url":"https://api.github.com/repos/hyperledger/fabric/pulls/2150","_links":{"self":{"href":"https://api.github.com/repos/hyperledger/fabric/pulls/comments/71028697"},"html":{"href":"https://github.com/hyperledger/fabric/pull/2150#discussion_r71028697"},"pull_request":{"href":"https://api.github.com/repos/hyperledger/fabric/pulls/2150"}}},"pull_request":{"url":"https://api.github.com/repos/hyperledger/fabric/pulls/2150","id":76831155,"html_url":"https://github.com/hyperledger/fabric/pull/2150","diff_url":"https://github.com/hyperledger/fabric/pull/2150.diff","patch_url":"https://github.com/hyperledger/fabric/pull/2150.patch","issue_url":"https://api.github.com/repos/hyperledger/fabric/issues/2150","number":2150,"state":"open","locked":false,"title":"refactor documentation ","user":{"login":"christo4ferris","id":3630697,"avatar_url":"https://avatars.githubusercontent.com/u/3630697?v=3","gravatar_id":"","url":"https://api.github.com/users/christo4ferris","html_url":"https://github.com/christo4ferris","followers_url":"https://api.github.com/users/christo4ferris/followers","following_url":"https://api.github.com/users/christo4ferris/following{/other_user}","gists_url":"https://api.github.com/users/christo4ferris/gists{/gist_id}","starred_url":"https://api.github.com/users/christo4ferris/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/christo4ferris/subscriptions","organizations_url":"https://api.github.com/users/christo4ferris/orgs","repos_url":"https://api.github.com/users/christo4ferris/repos","events_url":"https://api.github.com/users/christo4ferris/events{/privacy}","received_events_url":"https://api.github.com/users/christo4ferris/received_events","type":"User","site_admin":false},"body":"<!-- Provide a general summary of your changes in the Title above -->\r\n\r\n## Description \r\nrefactor of docs to make the use of fabric components more accessible to mere mortals and without requiring that binaries and images be built by the user. This turned into a major refactoring exercise. \r\n\r\n## Motivation and Context\r\n<!-- Why is this change required? What problem does it solve? -->\r\n<!-- If it fixes an open issue, please link to the issue here. -->\r\nThere were a number of things that needed to be addressed. First, there was lots of redundant documentation about how to start components etc that was either conflicting, or at the very least inconsistent. I attempted to refactor things so that there is setup, build, and operational separation. \r\n\r\nMore could be and should be done, but I don't think it makes sense to leave this outstanding any longer.\r\n\r\nFixes #2144 \r\n\r\n## How Has This Been Tested?\r\n<!-- If this PR does not contain a new test case, explain why. -->\r\n<!-- Describe in detail how you tested your changes. -->\r\nI have gone through and tested the various directions personally.\r\n\r\n## Checklist:\r\n<!-- To check a box, and an 'x': [x] -->\r\n<!-- To uncheck box, add a space: [ ] -->\r\n<!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->\r\n- [x] I have added a [Signed-off-by](https://github.com/hyperledger/fabric/blob/master/CONTRIBUTING.md#legal-stuff).\r\n- [x] I have either added documentation to cover my changes or this change requires no new documentation.\r\n- [x] I have either added unit tests to cover my changes or this change requires no new tests.\r\n- [] I have run [golint](https://github.com/golang/lint) and have fixed valid warnings in code I have added or modified. This tool generates false positives so you may choose to ignore some warnings. The goal is clean, consistent, and readable code.\r\n\r\n<!-- The continuous integration build process will run [make checks](https://github.com/hyperledger/fabric/blob/master/Makefile#L22) to confirm that tests pass and that code quality meets minimum standards. You may optionally run this locally as PRs will not be accepted until they pass. -->\r\n\r\nSigned-off-by: Christopher Ferris <chrisfer@us.ibm.com>\r\n","created_at":"2016-07-09T00:22:11Z","updated_at":"2016-07-15T19:29:55Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9a4196a426fb2415020a9e944d1c2f102a99d0c1","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/hyperledger/fabric/pulls/2150/commits","review_comments_url":"https://api.github.com/repos/hyperledger/fabric/pulls/2150/comments","review_comment_url":"https://api.github.com/repos/hyperledger/fabric/pulls/comments{/number}","comments_url":"https://api.github.com/repos/hyperledger/fabric/issues/2150/comments","statuses_url":"https://api.github.com/repos/hyperledger/fabric/statuses/82b9c996ab93b92ba74e7caf0c415007924f5090","head":{"label":"christo4ferris:issue-2144","ref":"issue-2144","sha":"82b9c996ab93b92ba74e7caf0c415007924f5090","user":{"login":"christo4ferris","id":3630697,"avatar_url":"https://avatars.githubusercontent.com/u/3630697?v=3","gravatar_id":"","url":"https://api.github.com/users/christo4ferris","html_url":"https://github.com/christo4ferris","followers_url":"https://api.github.com/users/christo4ferris/followers","following_url":"https://api.github.com/users/christo4ferris/following{/other_user}","gists_url":"https://api.github.com/users/christo4ferris/gists{/gist_id}","starred_url":"https://api.github.com/users/christo4ferris/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/christo4ferris/subscriptions","organizations_url":"https://api.github.com/users/christo4ferris/orgs","repos_url":"https://api.github.com/users/christo4ferris/repos","events_url":"https://api.github.com/users/christo4ferris/events{/privacy}","received_events_url":"https://api.github.com/users/christo4ferris/received_events","type":"User","site_admin":false},"repo":{"id":62673879,"name":"fabric","full_name":"christo4ferris/fabric","owner":{"login":"christo4ferris","id":3630697,"avatar_url":"https://avatars.githubusercontent.com/u/3630697?v=3","gravatar_id":"","url":"https://api.github.com/users/christo4ferris","html_url":"https://github.com/christo4ferris","followers_url":"https://api.github.com/users/christo4ferris/followers","following_url":"https://api.github.com/users/christo4ferris/following{/other_user}","gists_url":"https://api.github.com/users/christo4ferris/gists{/gist_id}","starred_url":"https://api.github.com/users/christo4ferris/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/christo4ferris/subscriptions","organizations_url":"https://api.github.com/users/christo4ferris/orgs","repos_url":"https://api.github.com/users/christo4ferris/repos","events_url":"https://api.github.com/users/christo4ferris/events{/privacy}","received_events_url":"https://api.github.com/users/christo4ferris/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/christo4ferris/fabric","description":"Fabric is a blockchain project in Incubation proposed to the community and documented at https://goo.gl/RYQZ5N.  Information on what Incubation entails can be found in the Hyperledger Project Lifecycle document (https://goo.gl/4edNRc)","fork":true,"url":"https://api.github.com/repos/christo4ferris/fabric","forks_url":"https://api.github.com/repos/christo4ferris/fabric/forks","keys_url":"https://api.github.com/repos/christo4ferris/fabric/keys{/key_id}","collaborators_url":"https://api.github.com/repos/christo4ferris/fabric/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/christo4ferris/fabric/teams","hooks_url":"https://api.github.com/repos/christo4ferris/fabric/hooks","issue_events_url":"https://api.github.com/repos/christo4ferris/fabric/issues/events{/number}","events_url":"https://api.github.com/repos/christo4ferris/fabric/events","assignees_url":"https://api.github.com/repos/christo4ferris/fabric/assignees{/user}","branches_url":"https://api.github.com/repos/christo4ferris/fabric/branches{/branch}","tags_url":"https://api.github.com/repos/christo4ferris/fabric/tags","blobs_url":"https://api.github.com/repos/christo4ferris/fabric/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/christo4ferris/fabric/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/christo4ferris/fabric/git/refs{/sha}","trees_url":"https://api.github.com/repos/christo4ferris/fabric/git/trees{/sha}","statuses_url":"https://api.github.com/repos/christo4ferris/fabric/statuses/{sha}","languages_url":"https://api.github.com/repos/christo4ferris/fabric/languages","stargazers_url":"https://api.github.com/repos/christo4ferris/fabric/stargazers","contributors_url":"https://api.github.com/repos/christo4ferris/fabric/contributors","subscribers_url":"https://api.github.com/repos/christo4ferris/fabric/subscribers","subscription_url":"https://api.github.com/repos/christo4ferris/fabric/subscription","commits_url":"https://api.github.com/repos/christo4ferris/fabric/commits{/sha}","git_commits_url":"https://api.github.com/repos/christo4ferris/fabric/git/commits{/sha}","comments_url":"https://api.github.com/repos/christo4ferris/fabric/comments{/number}","issue_comment_url":"https://api.github.com/repos/christo4ferris/fabric/issues/comments{/number}","contents_url":"https://api.github.com/repos/christo4ferris/fabric/contents/{+path}","compare_url":"https://api.github.com/repos/christo4ferris/fabric/compare/{base}...{head}","merges_url":"https://api.github.com/repos/christo4ferris/fabric/merges","archive_url":"https://api.github.com/repos/christo4ferris/fabric/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/christo4ferris/fabric/downloads","issues_url":"https://api.github.com/repos/christo4ferris/fabric/issues{/number}","pulls_url":"https://api.github.com/repos/christo4ferris/fabric/pulls{/number}","milestones_url":"https://api.github.com/repos/christo4ferris/fabric/milestones{/number}","notifications_url":"https://api.github.com/repos/christo4ferris/fabric/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/christo4ferris/fabric/labels{/name}","releases_url":"https://api.github.com/repos/christo4ferris/fabric/releases{/id}","deployments_url":"https://api.github.com/repos/christo4ferris/fabric/deployments","created_at":"2016-07-05T22:30:24Z","updated_at":"2016-07-05T22:30:27Z","pushed_at":"2016-07-15T18:40:12Z","git_url":"git://github.com/christo4ferris/fabric.git","ssh_url":"git@github.com:christo4ferris/fabric.git","clone_url":"https://github.com/christo4ferris/fabric.git","svn_url":"https://github.com/christo4ferris/fabric","homepage":"","size":45657,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"hyperledger:master","ref":"master","sha":"e5070c8096ac46d1fc9b26265f17bfb48272f194","user":{"login":"hyperledger","id":7657900,"avatar_url":"https://avatars.githubusercontent.com/u/7657900?v=3","gravatar_id":"","url":"https://api.github.com/users/hyperledger","html_url":"https://github.com/hyperledger","followers_url":"https://api.github.com/users/hyperledger/followers","following_url":"https://api.github.com/users/hyperledger/following{/other_user}","gists_url":"https://api.github.com/users/hyperledger/gists{/gist_id}","starred_url":"https://api.github.com/users/hyperledger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hyperledger/subscriptions","organizations_url":"https://api.github.com/users/hyperledger/orgs","repos_url":"https://api.github.com/users/hyperledger/repos","events_url":"https://api.github.com/users/hyperledger/events{/privacy}","received_events_url":"https://api.github.com/users/hyperledger/received_events","type":"Organization","site_admin":false},"repo":{"id":42975662,"name":"fabric","full_name":"hyperledger/fabric","owner":{"login":"hyperledger","id":7657900,"avatar_url":"https://avatars.githubusercontent.com/u/7657900?v=3","gravatar_id":"","url":"https://api.github.com/users/hyperledger","html_url":"https://github.com/hyperledger","followers_url":"https://api.github.com/users/hyperledger/followers","following_url":"https://api.github.com/users/hyperledger/following{/other_user}","gists_url":"https://api.github.com/users/hyperledger/gists{/gist_id}","starred_url":"https://api.github.com/users/hyperledger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hyperledger/subscriptions","organizations_url":"https://api.github.com/users/hyperledger/orgs","repos_url":"https://api.github.com/users/hyperledger/repos","events_url":"https://api.github.com/users/hyperledger/events{/privacy}","received_events_url":"https://api.github.com/users/hyperledger/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/hyperledger/fabric","description":"Fabric is a blockchain project in Incubation proposed to the community and documented at https://goo.gl/RYQZ5N.  Information on what Incubation entails can be found in the Hyperledger Project Lifecycle document (https://goo.gl/4edNRc)","fork":false,"url":"https://api.github.com/repos/hyperledger/fabric","forks_url":"https://api.github.com/repos/hyperledger/fabric/forks","keys_url":"https://api.github.com/repos/hyperledger/fabric/keys{/key_id}","collaborators_url":"https://api.github.com/repos/hyperledger/fabric/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/hyperledger/fabric/teams","hooks_url":"https://api.github.com/repos/hyperledger/fabric/hooks","issue_events_url":"https://api.github.com/repos/hyperledger/fabric/issues/events{/number}","events_url":"https://api.github.com/repos/hyperledger/fabric/events","assignees_url":"https://api.github.com/repos/hyperledger/fabric/assignees{/user}","branches_url":"https://api.github.com/repos/hyperledger/fabric/branches{/branch}","tags_url":"https://api.github.com/repos/hyperledger/fabric/tags","blobs_url":"https://api.github.com/repos/hyperledger/fabric/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/hyperledger/fabric/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/hyperledger/fabric/git/refs{/sha}","trees_url":"https://api.github.com/repos/hyperledger/fabric/git/trees{/sha}","statuses_url":"https://api.github.com/repos/hyperledger/fabric/statuses/{sha}","languages_url":"https://api.github.com/repos/hyperledger/fabric/languages","stargazers_url":"https://api.github.com/repos/hyperledger/fabric/stargazers","contributors_url":"https://api.github.com/repos/hyperledger/fabric/contributors","subscribers_url":"https://api.github.com/repos/hyperledger/fabric/subscribers","subscription_url":"https://api.github.com/repos/hyperledger/fabric/subscription","commits_url":"https://api.github.com/repos/hyperledger/fabric/commits{/sha}","git_commits_url":"https://api.github.com/repos/hyperledger/fabric/git/commits{/sha}","comments_url":"https://api.github.com/repos/hyperledger/fabric/comments{/number}","issue_comment_url":"https://api.github.com/repos/hyperledger/fabric/issues/comments{/number}","contents_url":"https://api.github.com/repos/hyperledger/fabric/contents/{+path}","compare_url":"https://api.github.com/repos/hyperledger/fabric/compare/{base}...{head}","merges_url":"https://api.github.com/repos/hyperledger/fabric/merges","archive_url":"https://api.github.com/repos/hyperledger/fabric/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/hyperledger/fabric/downloads","issues_url":"https://api.github.com/repos/hyperledger/fabric/issues{/number}","pulls_url":"https://api.github.com/repos/hyperledger/fabric/pulls{/number}","milestones_url":"https://api.github.com/repos/hyperledger/fabric/milestones{/number}","notifications_url":"https://api.github.com/repos/hyperledger/fabric/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/hyperledger/fabric/labels{/name}","releases_url":"https://api.github.com/repos/hyperledger/fabric/releases{/id}","deployments_url":"https://api.github.com/repos/hyperledger/fabric/deployments","created_at":"2015-09-23T03:17:14Z","updated_at":"2016-07-15T12:48:28Z","pushed_at":"2016-07-15T18:40:13Z","git_url":"git://github.com/hyperledger/fabric.git","ssh_url":"git@github.com:hyperledger/fabric.git","clone_url":"https://github.com/hyperledger/fabric.git","svn_url":"https://github.com/hyperledger/fabric","homepage":"","size":89160,"stargazers_count":933,"watchers_count":933,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":894,"mirror_url":null,"open_issues_count":408,"forks":894,"open_issues":408,"watchers":933,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/hyperledger/fabric/pulls/2150"},"html":{"href":"https://github.com/hyperledger/fabric/pull/2150"},"issue":{"href":"https://api.github.com/repos/hyperledger/fabric/issues/2150"},"comments":{"href":"https://api.github.com/repos/hyperledger/fabric/issues/2150/comments"},"review_comments":{"href":"https://api.github.com/repos/hyperledger/fabric/pulls/2150/comments"},"review_comment":{"href":"https://api.github.com/repos/hyperledger/fabric/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/hyperledger/fabric/pulls/2150/commits"},"statuses":{"href":"https://api.github.com/repos/hyperledger/fabric/statuses/82b9c996ab93b92ba74e7caf0c415007924f5090"}}}}
{"actor":{"display_login":"joshhus"}}