From a09d04af104d1fd9630ff5e08c2e3a6b6c1c13eb Mon Sep 17 00:00:00 2001 From: Dale Avery Date: Wed, 23 Nov 2016 13:36:04 -0500 Subject: [PATCH 01/12] Tried to make enrollment section lest confusing --- README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 5d79f614c..e14d284a8 100644 --- a/README.md +++ b/README.md @@ -259,7 +259,7 @@ The fastest way to test your chaincode is to use the REST interface on your peer Calls to the `/chaincode` endpoint of the REST interface require a secure context ID to be included in the body of the request. This means that you must first enroll a user from the user list in the membership service for your network. -- Find an available user to enroll on one of your peers. This will most likely require you to grab a user from the [membersrvc.yaml](https://github.com/hyperledger/fabric/blob/v0.6/membersrvc/membersrvc.yaml#L199) file for your network. Look for the section that has a list of users like this: +- Find an available user to enroll on one of your peers. This will most likely require you to grab a user from the [membersrvc.yaml](https://github.com/hyperledger/fabric/blob/v0.6/membersrvc/membersrvc.yaml#L199) file for your network. That link points to an example file from the fabric repository. Unless you are running on Bluemix, it is most likely that you will have the same users in your membership service as the ones listed in that file. Look for the section that has a list of users like this: ``` ... @@ -268,18 +268,17 @@ Calls to the `/chaincode` endpoint of the REST interface require a secure contex test_user2: 1 zMflqOKezFiA bank_c 00008 ... ``` - -- Open up a notepad and copy one set of credentials. You will need them later. +- All we care about are the usernames and secrets for these users. Open up a notepad and copy one set of credentials. You will use them to enroll the user. ``` test_user0 MS9qrN8hFjlE ``` -- Create a POST request like the example below. +- Create an enrollment POST request in Postman like the example below. ![/registrar POST](imgs/registrar_post.png) - The url indicates that the REST port for one of my Bluemix peers is accessible at `b88037dd5b6d423caf5258c6b7b15f5a-vp3.dev.blockchain.ibm.com:443`. This is the api URL for vp3\. You would find this information on the **Service Credentials** tab of the Blockchain dashboard or the **Network** tab of your Bluemix console. This specific registration is being sent to vp3, but it could be directed at any network peer. +- You can see that we sent the username and secret to the `/registrar` endpoint of a peer. If you're wondering where the rest of that url came from, it came from my blockchain Bluemix service credentials. You can find this information yourself on the **Service Credentials** tab of the blockchain service on your Bluemix dashboard or the **Network** tab of your blockchain service dashboard. - The body for the request: @@ -290,7 +289,7 @@ Calls to the `/chaincode` endpoint of the REST interface require a secure contex } ``` -- Send the request. If everything goes smoothly, you will see a response like the one below +- Send the request. If everything goes smoothly, you will see a response like the one below: ![/registrar response](imgs/registrar_post_response.png) From 49a4a16eaafd2b6dcc9ea0cb5dec41a266108079 Mon Sep 17 00:00:00 2001 From: Dale Avery Date: Wed, 8 Feb 2017 09:36:16 -0500 Subject: [PATCH 02/12] Bluemix service uses fabric .6 now --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e14d284a8..5dcaf4416 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ In order to support multiple versions of the Hyperledger fabric, this repository - [v2.0](https://github.com/ibm-blockchain/learn-chaincode/tree/v2.0) - Hyperledger fabric v0.6-developer-preview + - IBM Bluemix Blockchain Service v1.0.0 If you'd like to just deploy the sample code without completing the tutorial, then use the following URLs for the path parameter when deploying via the fabric REST API. Choose the URL that corresponds to the branch you are using above. From c6e37e68e42510496b750a2476d2e8ecf605029f Mon Sep 17 00:00:00 2001 From: Dale Avery Date: Wed, 8 Feb 2017 09:42:28 -0500 Subject: [PATCH 03/12] Wrong path in fabric setup instructions --- docs/setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/setup.md b/docs/setup.md index 5eafe3ae4..11417332b 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -53,7 +53,7 @@ Any piece of chaincode that you write will need to import the chaincode shim fro ### Instructions -Three different releases of the fabric are linked above. The release you choose needs to match the Hyperledger network you are deploying your chaincode onto. You will need to make sure that the fabric release you choose is stored under `$GOPATH/hyperledger/fabric`. +Three different releases of the fabric are linked above. The release you choose needs to match the Hyperledger network you are deploying your chaincode onto. You will need to make sure that the fabric release you choose is stored under `$GOPATH/src/hyperledger/fabric`. The instructions below should take you through the process of properly installing the v0.5 release on your `GOPATH`. From 69a149713ae232d22bea040f38d822760cf2fa84 Mon Sep 17 00:00:00 2001 From: Dale Avery Date: Wed, 8 Feb 2017 14:05:27 -0500 Subject: [PATCH 04/12] Fix url for blockchain tutorial --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5dcaf4416..4ccff8d76 100644 --- a/README.md +++ b/README.md @@ -251,7 +251,7 @@ If you're stuck or confused at any point, just go check out the `chaincode_finis # Interacting with Your First Chaincode -The fastest way to test your chaincode is to use the REST interface on your peers. If you're using the blockchain service on Bluemix, you should follow the steps described [here](https://new-console.ng.bluemix.net/docs/services/blockchain/ibmblockchain_tutorials.html). Otherwise, we recommend using a tool like Postman, as described in the [environment setup documentation](docs/setup.md). There are two REST endpoints we will be interacting with: `/chaincode` and `/registrar`. +The fastest way to test your chaincode is to use the REST interface on your peers. If you're using the blockchain service on Bluemix, you should follow the steps described [here](https://console.ng.bluemix.net/docs/services/blockchain/ibmblockchain_tutorials.html). Otherwise, we recommend using a tool like Postman, as described in the [environment setup documentation](docs/setup.md). There are two REST endpoints we will be interacting with: `/chaincode` and `/registrar`. - `/chaincode` is the endpoint used for deploying, invoking, and querying chaincode. Which operation you perform is controlled by the body of the request that you send. - `/registrar` allows you to enroll users. Why does this matter? Read on! From 44c0bf903167984479ab707afc05d7a97d7f2def Mon Sep 17 00:00:00 2001 From: Dale Avery Date: Fri, 31 Mar 2017 09:38:40 -0400 Subject: [PATCH 05/12] Bump nodejs and go versions --- docs/setup.md | 260 +++++++++++++++++++++++++------------------------- 1 file changed, 130 insertions(+), 130 deletions(-) diff --git a/docs/setup.md b/docs/setup.md index 11417332b..a67b9c422 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -1,130 +1,130 @@ -# Chaincode Development Environment - -The following is a list of dependencies and recommended tools that you should install in order to develop chaincode. - -## Git - -- [Git download page](https://git-scm.com/downloads) -- [Pro Git ebook](https://git-scm.com/book/en/v2) -- [Git Desktop (for those uncomfortable with git's CLI)](https://desktop.github.com/) - -Git is a great version control tool to familiarize yourself with, both for chaincode development and software development in general. Also, git bash, which is installed with git on Windows, is an excellent alternative to the the Windows command prompt. - -### Instructions - -After following the installation instructions above, you can verify that git is installed using the following command: - -``` -$ git version -git version 2.9.0.windows.1 -``` - -Once you have git installed, go create an account for yourself on [GitHub](https://github.com/). The IBM Blockchain service on Bluemix currently requires that chaincode be in a GitHub repository in order to be deployed through the REST API. - -## Go - -- [Go 1.6 install](https://golang.org/dl/#go1.6.3) -- [Go installation instructions](https://golang.org/doc/install) -- [Go documentation and tutorials](https://golang.org/doc/) - -Currently, Go is the only supported language for writing chaincode. The Go installation installs a set of Go CLI tools which are very useful when writing chaincode. For example, the `go build` command allows you to check that your chaincode actually compiles before you attempt to deploy it to a network. You should install Go 1.6, so that you have the same version of the language that the fabric is written against. - -### Instructions - -Follow the installation instructions linked above. You can verify that Go is installed properly by running the following commands. Of course, the output of `go version` may change depending on your operating system. - -``` -$ go version -go version go1.6.3 windows/amd64 - -$ echo $GOPATH -C:\gopath -``` - -Your `GOPATH` does not need to match the one above. It only matters that you have this variable set to a valid directory on your filesystem. The installation instructions linked above will take you through the setup of this environment variable. Why is this variable important? When you run `go build` to test that your chaincode compiles, Go is going to look in the `$GOPATH/src` directory for the non-standard dependencies that you list in the `import` block of your chaincode. - -## Hyperledger fabric - -- [v0.5-developer-preview Hyperledger fabric](https://github.com/hyperledger-archives/fabric/tree/v0.5-developer-preview) -- [v0.6-preview Hyperledger fabric](https://gerrit.hyperledger.org/r/gitweb?p=fabric.git;a=shortlog;h=refs/heads/v0.6) -- [master branch of the Hyperledger fabric](https://gerrit.hyperledger.org/r/gitweb?p=fabric.git;a=summary) - -Any piece of chaincode that you write will need to import the chaincode shim from Hyperledger fabric in order to be able to read and write data to/from the ledger. In order to compile chaincode locally, which you will be doing a lot, you will need to have the fabric code present in your `GOPATH`. - -### Instructions - -Three different releases of the fabric are linked above. The release you choose needs to match the Hyperledger network you are deploying your chaincode onto. You will need to make sure that the fabric release you choose is stored under `$GOPATH/src/hyperledger/fabric`. - -The instructions below should take you through the process of properly installing the v0.5 release on your `GOPATH`. - -``` - -# Create the parent directories on your GOPATH -mkdir -p $GOPATH/src/github.com/hyperledger -cd $GOPATH/src/github.com/hyperledger - -# Clone the appropriate release codebase into $GOPATH/src/github.com/hyperledger/fabric -# Note that the v0.5 release is a branch of the repository. It is defined below after the -b argument -git clone -b v0.5-developer-preview https://github.com/hyperledger-archives/fabric.git -``` - -If you are installing the v0.6 release, use this for your `git clone` command: - -``` -# The v0.6 release exists as a branch inside the Gerrit fabric repository -git clone -b v0.6 http://gerrit.hyperledger.org/r/fabric -``` - -If the fabric is not installed properly on your `GOPATH`, you will see errors like the one below when building your chaincode: -``` -$ go build . -chaincode_example02.go:27:2: cannot find package "github.com/hyperledger/fabric/core/chaincode/shim" in any of: - C:\Go\src\github.com\hyperledger\fabric\core\chaincode\shim (from $GOROOT) - C:\gopath\src\github.com\hyperledger\fabric\core\chaincode\shim (from $GOPATH) -``` - -A list of known specific releases is included below: - -- [Blockchain service on Bluemix](https://new-console.ng.bluemix.net/catalog/services/blockchain/) - use the v0.5-developer-preview release - -## Postman - -- [Home page](https://www.getpostman.com/) - -Postman is a REST API testing tool. Though it is deprecated, we still use the REST API in the fabric for this tutorial because it allows you to deploy and test your chaincode without needing to use the fabric SDK. You'll learn more about the fabric SDK in our other examples. - -### Instructions - -Download the [Postman tool](https://www.getpostman.com/). Depending on your operating system, you may also need to install Chrome to use Postman. Once you have the tool running, import the [request collection](../LearnChaincodeREST.postman_collection.json) included in this repository. This collection contains requests for enrolling a user on a peer, as well as deploying, invoking, and querying chaincode. The collection repository contains all the REST calls need to complete this tutorial. - -## Node.js - -- [Download links](https://nodejs.org/en/download/) - -Node.js is NOT necessary to develop chaincode, but most of our demos are built on Node.js, so it might be handy to go ahead and install it now. Also, you'll need it when you start using the fabric SDK. - -### Instructions - -Download the appropriate installation package and make sure the following commands work on your machine: - -``` -$ node -v -v4.4.7 - -$ npm -v -3.10.5 -``` - -## IDE Suggestions - -### Visual Studio Code - -- [Download links](https://code.visualstudio.com/#alt-downloads) - -Visual Studio Code is a free IDE that supports both Node.js and Go through plugins. All of our demos and examples use either one or both of these languages. It also has tab support, git integration, and debugging support. - -### Atom - -- [Home page](https://atom.io/) - -Like VS Code, Atom has plugins to support any of the languages needed to develop chaincode or modify our examples. +# Chaincode Development Environment + +The following is a list of dependencies and recommended tools that you should install in order to develop chaincode. + +## Git + +- [Git download page](https://git-scm.com/downloads) +- [Pro Git ebook](https://git-scm.com/book/en/v2) +- [Git Desktop (for those uncomfortable with git's CLI)](https://desktop.github.com/) + +Git is a great version control tool to familiarize yourself with, both for chaincode development and software development in general. Also, git bash, which is installed with git on Windows, is an excellent alternative to the the Windows command prompt. + +### Instructions + +After following the installation instructions above, you can verify that git is installed using the following command: + +``` +$ git version +git version 2.9.0.windows.1 +``` + +Once you have git installed, go create an account for yourself on [GitHub](https://github.com/). The IBM Blockchain service on Bluemix currently requires that chaincode be in a GitHub repository in order to be deployed through the REST API. + +## Go + +- [Go 1.6 install](https://golang.org/dl/#go1.6.3) +- [Go installation instructions](https://golang.org/doc/install) +- [Go documentation and tutorials](https://golang.org/doc/) + +Currently, Go is the only supported language for writing chaincode. The Go installation installs a set of Go CLI tools which are very useful when writing chaincode. For example, the `go build` command allows you to check that your chaincode actually compiles before you attempt to deploy it to a network. At time of writing, this chaincode is known to build successfully with version 1.7.5. + +### Instructions + +Follow the installation instructions linked above. You can verify that Go is installed properly by running the following commands. Of course, the output of `go version` may change depending on your operating system. + +``` +$ go version +go version go1.7.5 windows/amd64 + +$ echo $GOPATH +C:\gopath +``` + +Your `GOPATH` does not need to match the one above. It only matters that you have this variable set to a valid directory on your filesystem. The installation instructions linked above will take you through the setup of this environment variable. Why is this variable important? When you run `go build` to test that your chaincode compiles, Go is going to look in the `$GOPATH/src` directory for the non-standard dependencies that you list in the `import` block of your chaincode. + +## Hyperledger fabric + +- [v0.5-developer-preview Hyperledger fabric](https://github.com/hyperledger-archives/fabric/tree/v0.5-developer-preview) +- [v0.6-preview Hyperledger fabric](https://gerrit.hyperledger.org/r/gitweb?p=fabric.git;a=shortlog;h=refs/heads/v0.6) +- [master branch of the Hyperledger fabric](https://gerrit.hyperledger.org/r/gitweb?p=fabric.git;a=summary) + +Any piece of chaincode that you write will need to import the chaincode shim from Hyperledger fabric in order to be able to read and write data to/from the ledger. In order to compile chaincode locally, which you will be doing a lot, you will need to have the fabric code present in your `GOPATH`. + +### Instructions + +Three different releases of the fabric are linked above. The release you choose needs to match the Hyperledger network you are deploying your chaincode onto. You will need to make sure that the fabric release you choose is stored under `$GOPATH/src/hyperledger/fabric`. + +The instructions below should take you through the process of properly installing the v0.5 release on your `GOPATH`. + +``` + +# Create the parent directories on your GOPATH +mkdir -p $GOPATH/src/github.com/hyperledger +cd $GOPATH/src/github.com/hyperledger + +# Clone the appropriate release codebase into $GOPATH/src/github.com/hyperledger/fabric +# Note that the v0.5 release is a branch of the repository. It is defined below after the -b argument +git clone -b v0.5-developer-preview https://github.com/hyperledger-archives/fabric.git +``` + +If you are installing the v0.6 release, use this for your `git clone` command: + +``` +# The v0.6 release exists as a branch inside the Gerrit fabric repository +git clone -b v0.6 http://gerrit.hyperledger.org/r/fabric +``` + +If the fabric is not installed properly on your `GOPATH`, you will see errors like the one below when building your chaincode: +``` +$ go build . +chaincode_example02.go:27:2: cannot find package "github.com/hyperledger/fabric/core/chaincode/shim" in any of: + C:\Go\src\github.com\hyperledger\fabric\core\chaincode\shim (from $GOROOT) + C:\gopath\src\github.com\hyperledger\fabric\core\chaincode\shim (from $GOPATH) +``` + +A list of known specific releases is included below: + +- [Blockchain service on Bluemix](https://new-console.ng.bluemix.net/catalog/services/blockchain/) - use the v0.5-developer-preview release + +## Postman + +- [Home page](https://www.getpostman.com/) + +Postman is a REST API testing tool. Though it is deprecated, we still use the REST API in the fabric for this tutorial because it allows you to deploy and test your chaincode without needing to use the fabric SDK. You'll learn more about the fabric SDK in our other examples. + +### Instructions + +Download the [Postman tool](https://www.getpostman.com/). Depending on your operating system, you may also need to install Chrome to use Postman. Once you have the tool running, import the [request collection](../LearnChaincodeREST.postman_collection.json) included in this repository. This collection contains requests for enrolling a user on a peer, as well as deploying, invoking, and querying chaincode. The collection repository contains all the REST calls need to complete this tutorial. + +## Node.js + +- [Download links](https://nodejs.org/en/download/) + +Node.js is NOT necessary to develop chaincode, but most of our demos are built on Node.js, so it might be handy to go ahead and install it now. Also, you'll need it when you start using the fabric SDK. + +### Instructions + +Download the latest LTS installation package and make sure the following commands work on your machine: + +``` +$ node -v +v6.10.1 + +$ npm -v +3.10.10 +``` + +## IDE Suggestions + +### Visual Studio Code + +- [Download links](https://code.visualstudio.com/#alt-downloads) + +Visual Studio Code is a free IDE that supports both Node.js and Go through plugins. All of our demos and examples use either one or both of these languages. It also has tab support, git integration, and debugging support. + +### Atom + +- [Home page](https://atom.io/) + +Like VS Code, Atom has plugins to support any of the languages needed to develop chaincode or modify our examples. From 4576f7b6776691e0ff2f3bc75080a29f8272fb83 Mon Sep 17 00:00:00 2001 From: Dale Avery Date: Fri, 31 Mar 2017 09:44:23 -0400 Subject: [PATCH 06/12] Update some outdated information in environment setup guide --- docs/setup.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/setup.md b/docs/setup.md index a67b9c422..021bb04a9 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -15,15 +15,15 @@ Git is a great version control tool to familiarize yourself with, both for chain After following the installation instructions above, you can verify that git is installed using the following command: ``` -$ git version -git version 2.9.0.windows.1 +$ git --version +git version 2.11.1.windows.1 ``` Once you have git installed, go create an account for yourself on [GitHub](https://github.com/). The IBM Blockchain service on Bluemix currently requires that chaincode be in a GitHub repository in order to be deployed through the REST API. ## Go -- [Go 1.6 install](https://golang.org/dl/#go1.6.3) +- [Go download page](https://golang.org/dl) - [Go installation instructions](https://golang.org/doc/install) - [Go documentation and tutorials](https://golang.org/doc/) @@ -85,7 +85,7 @@ chaincode_example02.go:27:2: cannot find package "github.com/hyperledger/fabric/ A list of known specific releases is included below: -- [Blockchain service on Bluemix](https://new-console.ng.bluemix.net/catalog/services/blockchain/) - use the v0.5-developer-preview release +- [Blockchain service on Bluemix](https://new-console.ng.bluemix.net/catalog/services/blockchain/) - use the v0.6 release ## Postman @@ -105,7 +105,7 @@ Node.js is NOT necessary to develop chaincode, but most of our demos are built o ### Instructions -Download the latest LTS installation package and make sure the following commands work on your machine: +Download the latest Node.js LTS installation package and make sure the following commands work on your machine: ``` $ node -v From b498a7b61a4a278c907bcfac44187a1b320f9707 Mon Sep 17 00:00:00 2001 From: Dale Avery Date: Tue, 4 Apr 2017 14:55:09 -0400 Subject: [PATCH 07/12] Add more explicit instructions for finding your users --- README.md | 26 ++++++++++++++++++++++++-- imgs/api_users.PNG | Bin 0 -> 63147 bytes 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 imgs/api_users.PNG diff --git a/README.md b/README.md index 4ccff8d76..5f4a0e97d 100644 --- a/README.md +++ b/README.md @@ -269,11 +269,33 @@ Calls to the `/chaincode` endpoint of the REST interface require a secure contex test_user2: 1 zMflqOKezFiA bank_c 00008 ... ``` -- All we care about are the usernames and secrets for these users. Open up a notepad and copy one set of credentials. You will use them to enroll the user. +- All we care about are the usernames and secrets for these users. Open up a notepad and copy one set of credentials. You will use them to enroll the user. For the example list above, `test_user0` is a username and `MS9qrN8hFjlE` is a secret. +- If you are using a network from Bluemix, you can find your list of users from either the API tab of the service dashboard, or your service credentials. + + Example users from the service credentials: ``` - test_user0 MS9qrN8hFjlE + ... + { + "enrollId": "user_type1_1", + "enrollSecret": "56244fa98b", + "affiliation": "group1", + "username": "user_type1_1", + "secret": "56244fa98b" + }, + { + "enrollId": "user_type1_2", + "enrollSecret": "9853b2de7e", + "affiliation": "group1", + "username": "user_type1_2", + "secret": "9853b2de7e" + }, + ... ``` + + Example users from the API tab on the dashboard: + + ![/users from api tab](imgs/api_users.PNG) - Create an enrollment POST request in Postman like the example below. diff --git a/imgs/api_users.PNG b/imgs/api_users.PNG new file mode 100644 index 0000000000000000000000000000000000000000..1dc692e5f2ee3bb858d048a3dd0d524d78bf2073 GIT binary patch literal 63147 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 UC$A>eabI%nirF892Dcvn542BS@&Et; literal 0 HcmV?d00001 From 41b5f4c4afa5353fbe7b1a1dcb602d92a8f0f2a4 Mon Sep 17 00:00:00 2001 From: Dale Avery Date: Wed, 12 Apr 2017 11:20:56 -0400 Subject: [PATCH 08/12] Deprecate this tutorial --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 5f4a0e97d..2363be8d2 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,8 @@ +# NOTICE + +This repository is deprecated. It only teaches you how to write chaincode for Hyperledger Fabric v0.6. For information +on how to write chaincode for the latest Fabric releases, see the [Hyperledger documentation](http://hyperledger-fabric.readthedocs.io/en/latest/chaincode.html). + # Learn Chaincode A tutorial to get you started with writing smart contracts for Hyperledger. From d2e43814a314e9f97575274a83a0f7d6d6be24f0 Mon Sep 17 00:00:00 2001 From: Dale Avery Date: Wed, 12 Apr 2017 11:21:44 -0400 Subject: [PATCH 09/12] Add deprecation notice to chinese readme --- README_zh-cn.md | 849 ++++++++++++++++++++++++------------------------ 1 file changed, 427 insertions(+), 422 deletions(-) diff --git a/README_zh-cn.md b/README_zh-cn.md index be364779e..f9a8e9140 100644 --- a/README_zh-cn.md +++ b/README_zh-cn.md @@ -1,423 +1,428 @@ -# 学习链码 - -本教程可以指导你着手为 Hyperledger 编写智能合约。 - -# 部署 - -为了实现对 Hyperledger fabric 多个版本的支持,本仓库使用了与 gopkg.in URLs 结合的分支。对于初学者这意味着什么呢?随便选择下面的一个分支,使用分支中的指导说明就可以完成本教程。 - -## 支持的平台和版本 - -- [v1.0](https://github.com/ibm-blockchain/learn-chaincode/tree/v1.0) - - Hyperledger fabric v0.5-developer-preview - - IBM Bluemix Blockchain Service v0.4.2 -- [v2.0](https://github.com/ibm-blockchain/learn-chaincode/tree/v2.0) - - Hyperledger fabric v0.6-developer-preview - -如果你不想完整地学习本教程只打算部署这里的示例代码,你可以在使用 fabric REST API 部署链码的时候把 `path` 参数设置为下面的 URLs。URL 的选择对应于你上面选择的分支。 - -``` -http://gopkg.in/ibm-blockchain/learn-chaincode.v1/finished -OR -http://gopkg.in/ibm-blockchain/learn-chaincode.v2/finished -``` - -# 如何编写链码 - -本教程演示了构建 [Hyperledger fabric](https://gerrit.hyperledger.org/r/#/admin/projects/fabric) 链码应用程序所需的基本构建块和函数。你将逐步创建一个可以用于通用资产的链码。然后,你可以使用网络 API 与链码交互。阅读并完成本教程后,你应该能够明确回答以下问题: - -- 什么是链码? -- 如何实现链码? -- 实现链码需要什么依赖关系? -- 链码的主要功能是什么? -- 如何编译我的链码? -- 如何传递不同的值到我的参数? -- 如何安全地在我的网络上注册用户? -- 如何使用 REST API 与我的链码交互? - -## 什么是链码? - -链码是一段代码,它被部署到 [Hyperledger fabric](https://gerrit.hyperledger.org/r/#/admin/projects/fabric) 节点的网络中,实现与该网络的共享总账的交互。 - --------------------------------------------------------------------------------- - -# 实现你的第一个链码 - -## 配置你的开发环境 - -在你开始之前,你应该访问 [这里](docs/setup.md) 构建你的链码开发环境。 当你再次回到这里的时候,你将拥有完成本教程所需的所有工具。 - -## 设置你的开发管道(Pipeline) - -以下任务带你完成构建管道的过程,这能够让你有效地构建链码。 简而言之,用于链码迭代的管道包括以下步骤: - - - 更改本地上给定的链码,并检查代码是否能够编译。 - - 把你的更新推送到 Github。 - - 使用 fabric REST API 把更新的链码部署到本地 Hyperledger 网络中。 - - 使用 fabric REST API 测试你的链码。 - - 重复该过程。 - -1. 创建本仓库的分支到你的 Github 账户中。该操作可以通过点击本仓库顶部的 __Fork__ 按钮快速完成。 - - ![Fork Button Screenshot](imgs/fork.png) - - 对本仓库“创建分支”(Forking)意味着在你的 Github 账户中创建了一份本仓库的副本。请注意,Fork 操作将创建包括所有分支的整个仓库。切换左侧的 __Branch__ 按钮查看可用的分支。 - - ![Branch Button Screenshot](imgs/branch.png) - -2. 克隆你的分支到 $GOPATH 目录中。 - - ```bash - cd $GOPATH - mkdir -p src/github.com// - cd src/github.com// - git clone -b v1.0 https://github.com//learn-chaincode.git - OR - git clone -b v2.0 https://github.com//learn-chaincode.git - ``` - - 现在,你的电脑中已经有了你的分支的一个副本。你需要通过对这些本地文件的修改去开发你的链码,然后把它们推送到你的 Github 分支中,之后在你的一个节点上通过 REST API 把这些代码部署到你的区块链网络中。 - -3. 请注意,在本教程中,我们提供了两个不同版本的链码:[Start](start/chaincode_start.go) - 你将要在此基础上进行开发的框架链码,[Finished](finished/chaincode_finished.go) - 已完成的链码。 - -4. 确保它能够在你的本地环境中编译: - - - 打开终端或命令提示符 - - ```bash - cd $GOPATH/src/github.com//learn-chaincode/start - go build ./ - ``` - - - 编译的时候应该不会出现错误或文本。如果出现问题,请确保你已按照 [开发环境配置说明](docs/setup.md) 正确安装了 Go。 - -5. 把这些改变推送到你的 Github 分支中。 - - ```bash - cd $GOPATH/src/github.com//learn-chaincode/ - # 查看本地那些文件修改了。你应该能看到 chaincode_start.go - git status - # 暂存本地仓库中的所有更改以便进行提交 - git add --all - # 提交所有暂存的更改。在 -m 参数后插入简短的描述 - git commit -m "Compiled my code" - # 把本地的提交推送到 https://github.com//learn-chaincode/ - git push - ``` - -为了把一段 Go 代码转换为链码,你所需要做的就是实现链码的 shim 接口。你必须实现的三个函数分别是 **Init**、**Invoke** 和 **Query**。这三个函数都具有相同的原型;他们接受一个 `stub` ——用来读取和写入总账,一个函数名和一个字符串数组。这几个函数的主要区别在于它们何时被调用。本教程中,你将构建一个链码用来创建通用资产。 - -### 依赖 - -`import` 语句列出了成功构建链码的一些依赖关系。 -- `fmt` - 包含用于调试/日志记录的 `Println`。 -- `errors` - 标准 go 错误格式。 -- `github.com/hyperledger/fabric/core/chaincode/shim` - 包含了链码接口和链码 stub 的定义,它们用来与总账进行交互。 - -### Init() - -Init 在首次部署你的链码时被调用。顾名思义,此函数用于链码所需的所有初始化工作。在我们的示例中,我们使用 Init 函数设置总账一个键值对的初始状态。 - -在你的 `chaincode_start.go` 文件中,修改 `Init` 函数,以便将 `args` 参数中的第一个元素存储到键 “hello_world” 中。 - -```go -func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) { - if len(args) != 1 { - return nil, errors.New("Incorrect number of arguments. Expecting 1") - } - - err := stub.PutState("hello_world", []byte(args[0])) - if err != nil { - return nil, err - } - - return nil, nil -} -``` - -这是通过 stub 的 `stub.PutState` 函数完成的。该函数将部署请求中发送的第一个参数解释为要存储在分类帐中的键 “hello_world” 下的值。 这个参数是从哪里来的,什么是部署请求?我们将在实现接口后再解释。如果发生错误,例如传入的参数数量错误,或者写入总账时发生错误,则此函数将返回错误。否则,它将完全退出,什么都不返回。 - -### Invoke() - -当你想调用链码函数来做真正的工作时,`Invoke` 就会被调用。这些调用会被当做交易被分组到链上的区块中。当你需要更新总账时,就会通过调用你的链码去完成。`Invoke` 的结构很简单。它接收一个 `function` 以及一个数组参数,基于调用请求中传递的 `function` 参数所指的函数,`Invoke` 将调用这个辅助函数或者返回错误。 - -在你的 `chaincode_start.go` 文件中,修改 `Invoke` 函数,让它调用一个普通的 `write` 函数。 - -```go -func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) { - fmt.Println("invoke is running " + function) - - // 处理不同的函数 - if function == "init" { - return t.Init(stub, "init", args) - } else if function == "write" { - return t.write(stub, args) - } - fmt.Println("invoke did not find func: " + function) - - return nil, errors.New("Received unknown function invocation: " + function) -} -``` - -现在,它正在寻找 `write` 函数,让我们把这个函数写入你的 `chaincode_start.go` 文件。 - -```go -func (t *SimpleChaincode) write(stub shim.ChaincodeStubInterface, args []string) ([]byte, error) { - var key, value string - var err error - fmt.Println("running write()") - - if len(args) != 2 { - return nil, errors.New("Incorrect number of arguments. Expecting 2. name of the key and value to set") - } - - key = args[0] //rename for fun - value = args[1] - err = stub.PutState(key, []byte(value)) //把变量写入链码状态中 - if err != nil { - return nil, err - } - return nil, nil -} -``` - -你可能会认为这个 `write` 函数看起来类似 `Init`。 它们确实很像。 这两个函数检查一定数量的参数,然后将一个键/值对写入总账。然而,你会注意到,`write` 函数使用两个参数,允许你同时传递给调用的 `PutState` 键和值。基本上,该函数允许你向区块链总账上存储任意你想要的键值对。 - -### Query() - -顾名思义,无论何时查询链码状态,`Query` 都会被调用。查询操作不会导致区块被添加到链中。你不能在 `Query` 中使用类似 `PutState` 的函数,也不能使用它调用的任何辅助函数。你将使用 `Query` 读取链码状态中键/值对的值。 - -在你的 `chaincode_start.go` 文件中,修改 `Query` 函数,让它调用一个普通的 `read` 函数,类似你对 `Invoke` 函数的修改。 - -```go -func (t *SimpleChaincode) Query(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) { - fmt.Println("query is running " + function) - - // 处理不同的函数 - if function == "read" { //读取变量 - return t.read(stub, args) - } - fmt.Println("query did not find func: " + function) - - return nil, errors.New("Received unknown function query: " + function) -} -``` - -现在,它正在寻找 `read` 函数,让我们在 `chaincode_start.go` 文件中创建该函数。 - -```go -func (t *SimpleChaincode) read(stub shim.ChaincodeStubInterface, args []string) ([]byte, error) { - var key, jsonResp string - var err error - - if len(args) != 1 { - return nil, errors.New("Incorrect number of arguments. Expecting name of the key to query") - } - - key = args[0] - valAsbytes, err := stub.GetState(key) - if err != nil { - jsonResp = "{\"Error\":\"Failed to get state for " + key + "\"}" - return nil, errors.New(jsonResp) - } - - return valAsbytes, nil -} -``` - -这个 `read` 函数使用了与 `PutState` 作用相反的 `GetState`。 `PutState` 允许你对一个键/值对赋值,`GetState`允许你读取之前赋值的键的值。你可以看到,该函数使用的唯一参数被作为应该检索的值的键。接下来,此函数将字符数组返回到 `Query`,然后将它返回给 REST 句柄。 - -### Main() - -最后,你需要创建一个简短的 `main` 函数,它在每个节点部署链码实例的时候执行。它仅仅调用了 `shim.Start()`,该函数会在链码与部署链码的节点之间建立通信。你不需要为该函数添加任何代码。`chaincode_start.go` 和 `chaincode_finished.go` 都有一个 `main` 函数,它位于文件的顶部。该函数如下所示: - -```go -func main() { - err := shim.Start(new(SimpleChaincode)) - if err != nil { - fmt.Printf("Error starting Simple chaincode: %s", err) - } -} -``` - -### 需要帮助? - -如果你在任何时候被卡住或有什么困惑,只需去查看 `chaincode_finished.go` 文件。使用该文件检查您正在编写的 `chaincode_start.go` 代码段是否正确。 - -# 与你的第一个链码交互 - -测试你的链码的最快方法是使用节点上的 REST 接口。如果你使用的是 Bluemix 上的块链服务,你应该依照 [这里](https://new-console.ng.bluemix.net/docs/services/blockchain/ibmblockchain_tutorials.html) 描述的步骤(否则,我们建议使用 [环境配置文档](docs/setup.md) 中所述类似 Postman 的工具)。我们需要与两个 REST 端点交互:`/chaincode` 和 `/registrar`。 - - - `/chaincode` 是用于部署、调用和查询链码的端点。执行哪种操作由发送的请求 Body 内容来控制。 - - `/registrar` 允许你注册用户。为什么这么重要?请继续阅读! - -### 安全注册 - -调用 REST 接口的 `/chaincode` 端点需要在请求的 Body 中包含一个安全上下文 ID。这意味着你必须先在网络成员服务的用户列表中注册一个用户。在你的节点中查找一个可用的用户去注册。这很可能需要为你的网络从 [membersrvc.yaml](fabric/membersrvc/membersrvc.yaml) 文件中抓取一个用户。找到包含以下用户列表的部分: - - ``` - ... - test_user0: 1 MS9qrN8hFjlE bank_a 00001 - test_user1: 1 jGlNl6ImkuDo institution_a 00007 - test_user2: 1 zMflqOKezFiA bank_c 00008 - ... - ``` - -- 打开记事本并复制一组凭证,接下来会用到它们。 - - ``` - test_user0 MS9qrN8hFjlE - ``` - -- 如下所示,创建一个 POST 请求。 - - ![/registrar POST](imgs/registrar_post.png) - - 该 URL 表示 Bluemix 某个节点的 REST 端口可以通过 `b88037dd5b6d423caf5258c6b7b15f5a-vp3.dev.blockchain.ibm.com:443` 访问。这是 vp3 节点的 api URL。你可以在区块链仪表盘 **服务凭据(Service Credentials)** 选项卡上找到该信息,或者在 Bluemix 控制台的 __网络__ 选项卡中。这个特定的注册会被发送到 vp3 节点,不过,它能够被转发到所有的网络节点上。 - -- 该请求的 Body 内容为: - - ```json - { - "enrollId": "", - "enrollSecret": "" - } - ``` - -- 发送这个请求。如果一切顺利,你会看到类似下面的响应: - - ![/registrar response](imgs/registrar_post_response.png) - - 如果你没有收到“登录成功”的响应,请返回并确保你已正确复制了注册 ID 和密码。现在,你有了一个 ID,它用于后续步骤中链码的部署、调用和查询。 - -### 部署链码 - -为了通过 REST 接口部署链码,你需要将链码存储在公共的 git 仓库中。当你向节点发送部署请求时,请求中包括你的链码仓库 URL 以及初始化链码所需的参数。 - -**在部署链码之前**,确保它能在本地构建! - -- 打开终端或命令提示符 - -- 进入包含 `chaincode_start.go` 的文件夹,编译你的链码: - - ```bash - cd $GOPATH/src/github.com//learn-chaincode/start - go build ./ - ``` - -- 如果没有出现错误/文本,这意味着你的链码已经编译成功了。这是个好兆头。 - -- 如下所示,创建一个 POST 请求。 - - ![/chaincode deploy example](imgs/deploy_example.PNG) - -- **注意**:确保你部署到的节点与用户注册到的节点是相同的。在这里我们使用的是 vp3 节点。 - -- 该请求的 Body 内容为: - - ```json - { - "jsonrpc": "2.0", - "method": "deploy", - "params": { - "type": 1, - "chaincodeID": { - "path": "https://github.com//learn-chaincode/finished" - }, - "ctorMsg": { - "function": "init", - "args": [ - "hi there" - ] - }, - "secureContext": "" - }, - "id": 1 - } - ``` - -- `"path"`:你创建的 Github 仓库分支的路径,`chaincode_finished.go` 文件在它的下一级目录 `/finished` 中。 - -- 发送该请求。如果一切顺利,你会看到类似下面的响应: - - ![/chaincode deploy response](imgs/deploy_response.PNG) - -部署响应的一长串字符串中包含了一个与链码相关的 ID。这个 ID 是一个由 128 个字母数字组成的哈希。可以在记事本上复制该 ID。现在,你应该有一组 enrollID 凭据和标识你的链码的加密哈希了。这就是在接下来调用或查询交易中如何引用链码的方式。 - -### 查询 - -接下来,让我们查询链码中 `hello_world` 键的值,之前我们使用了 `Init` 函数为它设置了初始值。 - -- 如下所示,创建一个 POST 请求。 - - ![/chaincode query example](imgs/query_example.PNG) - -- 该请求的 Body 内容为: - - ```json - { - "jsonrpc": "2.0", - "method": "query", - "params": { - "type": 1, - "chaincodeID": { - "name": "" - }, - "ctorMsg": { - "function": "read", - "args": [ - "hello_world" - ] - }, - "secureContext": "" - }, - "id": 2 - } - ``` - -- 发送该请求。如果一切顺利,你会看到类似下面的响应: - - ![/chaincode query response](imgs/query_response.PNG) - -该值是由之前部署请求的 Body 设置的。 - -### 调用 - -接下来,通过调用在链码中编写的普通 `write` 函数,将 “hello_world” 的值改为 “go away”。 - -- 如下所示,创建一个 POST 请求。 - - ![/chaincode invoke example](imgs/invoke_example.PNG) - -- 该请求的 Body 内容为: - - ```json - { - "jsonrpc": "2.0", - "method": "invoke", - "params": { - "type": 1, - "chaincodeID": { - "name": "" - }, - "ctorMsg": { - "function": "write", - "args": [ - "hello_world", "go away" - ] - }, - "secureContext": "" - }, - "id": 3 - } - ``` - -- 发送该请求。如果一切顺利,你会看到类似下面的响应: - - ![/chaincode invoke response](imgs/invoke_response.PNG) - -- 可以通过发送一个类似之前的查询操作,测试我们的更改是否成功。 - - ![/chaincode query2 response](imgs/query2_response.PNG) - +# NOTICE + +This repository is deprecated. It only teaches you how to write chaincode for Hyperledger Fabric v0.6. For information +on how to write chaincode for the latest Fabric releases, see the [Hyperledger documentation](http://hyperledger-fabric.readthedocs.io/en/latest/chaincode.html). + +# 学习链码 + +本教程可以指导你着手为 Hyperledger 编写智能合约。 + +# 部署 + +为了实现对 Hyperledger fabric 多个版本的支持,本仓库使用了与 gopkg.in URLs 结合的分支。对于初学者这意味着什么呢?随便选择下面的一个分支,使用分支中的指导说明就可以完成本教程。 + +## 支持的平台和版本 + +- [v1.0](https://github.com/ibm-blockchain/learn-chaincode/tree/v1.0) + - Hyperledger fabric v0.5-developer-preview + - IBM Bluemix Blockchain Service v0.4.2 +- [v2.0](https://github.com/ibm-blockchain/learn-chaincode/tree/v2.0) + - Hyperledger fabric v0.6-developer-preview + +如果你不想完整地学习本教程只打算部署这里的示例代码,你可以在使用 fabric REST API 部署链码的时候把 `path` 参数设置为下面的 URLs。URL 的选择对应于你上面选择的分支。 + +``` +http://gopkg.in/ibm-blockchain/learn-chaincode.v1/finished +OR +http://gopkg.in/ibm-blockchain/learn-chaincode.v2/finished +``` + +# 如何编写链码 + +本教程演示了构建 [Hyperledger fabric](https://gerrit.hyperledger.org/r/#/admin/projects/fabric) 链码应用程序所需的基本构建块和函数。你将逐步创建一个可以用于通用资产的链码。然后,你可以使用网络 API 与链码交互。阅读并完成本教程后,你应该能够明确回答以下问题: + +- 什么是链码? +- 如何实现链码? +- 实现链码需要什么依赖关系? +- 链码的主要功能是什么? +- 如何编译我的链码? +- 如何传递不同的值到我的参数? +- 如何安全地在我的网络上注册用户? +- 如何使用 REST API 与我的链码交互? + +## 什么是链码? + +链码是一段代码,它被部署到 [Hyperledger fabric](https://gerrit.hyperledger.org/r/#/admin/projects/fabric) 节点的网络中,实现与该网络的共享总账的交互。 + +-------------------------------------------------------------------------------- + +# 实现你的第一个链码 + +## 配置你的开发环境 + +在你开始之前,你应该访问 [这里](docs/setup.md) 构建你的链码开发环境。 当你再次回到这里的时候,你将拥有完成本教程所需的所有工具。 + +## 设置你的开发管道(Pipeline) + +以下任务带你完成构建管道的过程,这能够让你有效地构建链码。 简而言之,用于链码迭代的管道包括以下步骤: + + - 更改本地上给定的链码,并检查代码是否能够编译。 + - 把你的更新推送到 Github。 + - 使用 fabric REST API 把更新的链码部署到本地 Hyperledger 网络中。 + - 使用 fabric REST API 测试你的链码。 + - 重复该过程。 + +1. 创建本仓库的分支到你的 Github 账户中。该操作可以通过点击本仓库顶部的 __Fork__ 按钮快速完成。 + + ![Fork Button Screenshot](imgs/fork.png) + + 对本仓库“创建分支”(Forking)意味着在你的 Github 账户中创建了一份本仓库的副本。请注意,Fork 操作将创建包括所有分支的整个仓库。切换左侧的 __Branch__ 按钮查看可用的分支。 + + ![Branch Button Screenshot](imgs/branch.png) + +2. 克隆你的分支到 $GOPATH 目录中。 + + ```bash + cd $GOPATH + mkdir -p src/github.com// + cd src/github.com// + git clone -b v1.0 https://github.com//learn-chaincode.git + OR + git clone -b v2.0 https://github.com//learn-chaincode.git + ``` + + 现在,你的电脑中已经有了你的分支的一个副本。你需要通过对这些本地文件的修改去开发你的链码,然后把它们推送到你的 Github 分支中,之后在你的一个节点上通过 REST API 把这些代码部署到你的区块链网络中。 + +3. 请注意,在本教程中,我们提供了两个不同版本的链码:[Start](start/chaincode_start.go) - 你将要在此基础上进行开发的框架链码,[Finished](finished/chaincode_finished.go) - 已完成的链码。 + +4. 确保它能够在你的本地环境中编译: + + - 打开终端或命令提示符 + + ```bash + cd $GOPATH/src/github.com//learn-chaincode/start + go build ./ + ``` + + - 编译的时候应该不会出现错误或文本。如果出现问题,请确保你已按照 [开发环境配置说明](docs/setup.md) 正确安装了 Go。 + +5. 把这些改变推送到你的 Github 分支中。 + + ```bash + cd $GOPATH/src/github.com//learn-chaincode/ + # 查看本地那些文件修改了。你应该能看到 chaincode_start.go + git status + # 暂存本地仓库中的所有更改以便进行提交 + git add --all + # 提交所有暂存的更改。在 -m 参数后插入简短的描述 + git commit -m "Compiled my code" + # 把本地的提交推送到 https://github.com//learn-chaincode/ + git push + ``` + +为了把一段 Go 代码转换为链码,你所需要做的就是实现链码的 shim 接口。你必须实现的三个函数分别是 **Init**、**Invoke** 和 **Query**。这三个函数都具有相同的原型;他们接受一个 `stub` ——用来读取和写入总账,一个函数名和一个字符串数组。这几个函数的主要区别在于它们何时被调用。本教程中,你将构建一个链码用来创建通用资产。 + +### 依赖 + +`import` 语句列出了成功构建链码的一些依赖关系。 +- `fmt` - 包含用于调试/日志记录的 `Println`。 +- `errors` - 标准 go 错误格式。 +- `github.com/hyperledger/fabric/core/chaincode/shim` - 包含了链码接口和链码 stub 的定义,它们用来与总账进行交互。 + +### Init() + +Init 在首次部署你的链码时被调用。顾名思义,此函数用于链码所需的所有初始化工作。在我们的示例中,我们使用 Init 函数设置总账一个键值对的初始状态。 + +在你的 `chaincode_start.go` 文件中,修改 `Init` 函数,以便将 `args` 参数中的第一个元素存储到键 “hello_world” 中。 + +```go +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) { + if len(args) != 1 { + return nil, errors.New("Incorrect number of arguments. Expecting 1") + } + + err := stub.PutState("hello_world", []byte(args[0])) + if err != nil { + return nil, err + } + + return nil, nil +} +``` + +这是通过 stub 的 `stub.PutState` 函数完成的。该函数将部署请求中发送的第一个参数解释为要存储在分类帐中的键 “hello_world” 下的值。 这个参数是从哪里来的,什么是部署请求?我们将在实现接口后再解释。如果发生错误,例如传入的参数数量错误,或者写入总账时发生错误,则此函数将返回错误。否则,它将完全退出,什么都不返回。 + +### Invoke() + +当你想调用链码函数来做真正的工作时,`Invoke` 就会被调用。这些调用会被当做交易被分组到链上的区块中。当你需要更新总账时,就会通过调用你的链码去完成。`Invoke` 的结构很简单。它接收一个 `function` 以及一个数组参数,基于调用请求中传递的 `function` 参数所指的函数,`Invoke` 将调用这个辅助函数或者返回错误。 + +在你的 `chaincode_start.go` 文件中,修改 `Invoke` 函数,让它调用一个普通的 `write` 函数。 + +```go +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) { + fmt.Println("invoke is running " + function) + + // 处理不同的函数 + if function == "init" { + return t.Init(stub, "init", args) + } else if function == "write" { + return t.write(stub, args) + } + fmt.Println("invoke did not find func: " + function) + + return nil, errors.New("Received unknown function invocation: " + function) +} +``` + +现在,它正在寻找 `write` 函数,让我们把这个函数写入你的 `chaincode_start.go` 文件。 + +```go +func (t *SimpleChaincode) write(stub shim.ChaincodeStubInterface, args []string) ([]byte, error) { + var key, value string + var err error + fmt.Println("running write()") + + if len(args) != 2 { + return nil, errors.New("Incorrect number of arguments. Expecting 2. name of the key and value to set") + } + + key = args[0] //rename for fun + value = args[1] + err = stub.PutState(key, []byte(value)) //把变量写入链码状态中 + if err != nil { + return nil, err + } + return nil, nil +} +``` + +你可能会认为这个 `write` 函数看起来类似 `Init`。 它们确实很像。 这两个函数检查一定数量的参数,然后将一个键/值对写入总账。然而,你会注意到,`write` 函数使用两个参数,允许你同时传递给调用的 `PutState` 键和值。基本上,该函数允许你向区块链总账上存储任意你想要的键值对。 + +### Query() + +顾名思义,无论何时查询链码状态,`Query` 都会被调用。查询操作不会导致区块被添加到链中。你不能在 `Query` 中使用类似 `PutState` 的函数,也不能使用它调用的任何辅助函数。你将使用 `Query` 读取链码状态中键/值对的值。 + +在你的 `chaincode_start.go` 文件中,修改 `Query` 函数,让它调用一个普通的 `read` 函数,类似你对 `Invoke` 函数的修改。 + +```go +func (t *SimpleChaincode) Query(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) { + fmt.Println("query is running " + function) + + // 处理不同的函数 + if function == "read" { //读取变量 + return t.read(stub, args) + } + fmt.Println("query did not find func: " + function) + + return nil, errors.New("Received unknown function query: " + function) +} +``` + +现在,它正在寻找 `read` 函数,让我们在 `chaincode_start.go` 文件中创建该函数。 + +```go +func (t *SimpleChaincode) read(stub shim.ChaincodeStubInterface, args []string) ([]byte, error) { + var key, jsonResp string + var err error + + if len(args) != 1 { + return nil, errors.New("Incorrect number of arguments. Expecting name of the key to query") + } + + key = args[0] + valAsbytes, err := stub.GetState(key) + if err != nil { + jsonResp = "{\"Error\":\"Failed to get state for " + key + "\"}" + return nil, errors.New(jsonResp) + } + + return valAsbytes, nil +} +``` + +这个 `read` 函数使用了与 `PutState` 作用相反的 `GetState`。 `PutState` 允许你对一个键/值对赋值,`GetState`允许你读取之前赋值的键的值。你可以看到,该函数使用的唯一参数被作为应该检索的值的键。接下来,此函数将字符数组返回到 `Query`,然后将它返回给 REST 句柄。 + +### Main() + +最后,你需要创建一个简短的 `main` 函数,它在每个节点部署链码实例的时候执行。它仅仅调用了 `shim.Start()`,该函数会在链码与部署链码的节点之间建立通信。你不需要为该函数添加任何代码。`chaincode_start.go` 和 `chaincode_finished.go` 都有一个 `main` 函数,它位于文件的顶部。该函数如下所示: + +```go +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting Simple chaincode: %s", err) + } +} +``` + +### 需要帮助? + +如果你在任何时候被卡住或有什么困惑,只需去查看 `chaincode_finished.go` 文件。使用该文件检查您正在编写的 `chaincode_start.go` 代码段是否正确。 + +# 与你的第一个链码交互 + +测试你的链码的最快方法是使用节点上的 REST 接口。如果你使用的是 Bluemix 上的块链服务,你应该依照 [这里](https://new-console.ng.bluemix.net/docs/services/blockchain/ibmblockchain_tutorials.html) 描述的步骤(否则,我们建议使用 [环境配置文档](docs/setup.md) 中所述类似 Postman 的工具)。我们需要与两个 REST 端点交互:`/chaincode` 和 `/registrar`。 + + - `/chaincode` 是用于部署、调用和查询链码的端点。执行哪种操作由发送的请求 Body 内容来控制。 + - `/registrar` 允许你注册用户。为什么这么重要?请继续阅读! + +### 安全注册 + +调用 REST 接口的 `/chaincode` 端点需要在请求的 Body 中包含一个安全上下文 ID。这意味着你必须先在网络成员服务的用户列表中注册一个用户。在你的节点中查找一个可用的用户去注册。这很可能需要为你的网络从 [membersrvc.yaml](fabric/membersrvc/membersrvc.yaml) 文件中抓取一个用户。找到包含以下用户列表的部分: + + ``` + ... + test_user0: 1 MS9qrN8hFjlE bank_a 00001 + test_user1: 1 jGlNl6ImkuDo institution_a 00007 + test_user2: 1 zMflqOKezFiA bank_c 00008 + ... + ``` + +- 打开记事本并复制一组凭证,接下来会用到它们。 + + ``` + test_user0 MS9qrN8hFjlE + ``` + +- 如下所示,创建一个 POST 请求。 + + ![/registrar POST](imgs/registrar_post.png) + + 该 URL 表示 Bluemix 某个节点的 REST 端口可以通过 `b88037dd5b6d423caf5258c6b7b15f5a-vp3.dev.blockchain.ibm.com:443` 访问。这是 vp3 节点的 api URL。你可以在区块链仪表盘 **服务凭据(Service Credentials)** 选项卡上找到该信息,或者在 Bluemix 控制台的 __网络__ 选项卡中。这个特定的注册会被发送到 vp3 节点,不过,它能够被转发到所有的网络节点上。 + +- 该请求的 Body 内容为: + + ```json + { + "enrollId": "", + "enrollSecret": "" + } + ``` + +- 发送这个请求。如果一切顺利,你会看到类似下面的响应: + + ![/registrar response](imgs/registrar_post_response.png) + + 如果你没有收到“登录成功”的响应,请返回并确保你已正确复制了注册 ID 和密码。现在,你有了一个 ID,它用于后续步骤中链码的部署、调用和查询。 + +### 部署链码 + +为了通过 REST 接口部署链码,你需要将链码存储在公共的 git 仓库中。当你向节点发送部署请求时,请求中包括你的链码仓库 URL 以及初始化链码所需的参数。 + +**在部署链码之前**,确保它能在本地构建! + +- 打开终端或命令提示符 + +- 进入包含 `chaincode_start.go` 的文件夹,编译你的链码: + + ```bash + cd $GOPATH/src/github.com//learn-chaincode/start + go build ./ + ``` + +- 如果没有出现错误/文本,这意味着你的链码已经编译成功了。这是个好兆头。 + +- 如下所示,创建一个 POST 请求。 + + ![/chaincode deploy example](imgs/deploy_example.PNG) + +- **注意**:确保你部署到的节点与用户注册到的节点是相同的。在这里我们使用的是 vp3 节点。 + +- 该请求的 Body 内容为: + + ```json + { + "jsonrpc": "2.0", + "method": "deploy", + "params": { + "type": 1, + "chaincodeID": { + "path": "https://github.com//learn-chaincode/finished" + }, + "ctorMsg": { + "function": "init", + "args": [ + "hi there" + ] + }, + "secureContext": "" + }, + "id": 1 + } + ``` + +- `"path"`:你创建的 Github 仓库分支的路径,`chaincode_finished.go` 文件在它的下一级目录 `/finished` 中。 + +- 发送该请求。如果一切顺利,你会看到类似下面的响应: + + ![/chaincode deploy response](imgs/deploy_response.PNG) + +部署响应的一长串字符串中包含了一个与链码相关的 ID。这个 ID 是一个由 128 个字母数字组成的哈希。可以在记事本上复制该 ID。现在,你应该有一组 enrollID 凭据和标识你的链码的加密哈希了。这就是在接下来调用或查询交易中如何引用链码的方式。 + +### 查询 + +接下来,让我们查询链码中 `hello_world` 键的值,之前我们使用了 `Init` 函数为它设置了初始值。 + +- 如下所示,创建一个 POST 请求。 + + ![/chaincode query example](imgs/query_example.PNG) + +- 该请求的 Body 内容为: + + ```json + { + "jsonrpc": "2.0", + "method": "query", + "params": { + "type": 1, + "chaincodeID": { + "name": "" + }, + "ctorMsg": { + "function": "read", + "args": [ + "hello_world" + ] + }, + "secureContext": "" + }, + "id": 2 + } + ``` + +- 发送该请求。如果一切顺利,你会看到类似下面的响应: + + ![/chaincode query response](imgs/query_response.PNG) + +该值是由之前部署请求的 Body 设置的。 + +### 调用 + +接下来,通过调用在链码中编写的普通 `write` 函数,将 “hello_world” 的值改为 “go away”。 + +- 如下所示,创建一个 POST 请求。 + + ![/chaincode invoke example](imgs/invoke_example.PNG) + +- 该请求的 Body 内容为: + + ```json + { + "jsonrpc": "2.0", + "method": "invoke", + "params": { + "type": 1, + "chaincodeID": { + "name": "" + }, + "ctorMsg": { + "function": "write", + "args": [ + "hello_world", "go away" + ] + }, + "secureContext": "" + }, + "id": 3 + } + ``` + +- 发送该请求。如果一切顺利,你会看到类似下面的响应: + + ![/chaincode invoke response](imgs/invoke_response.PNG) + +- 可以通过发送一个类似之前的查询操作,测试我们的更改是否成功。 + + ![/chaincode query2 response](imgs/query2_response.PNG) + 这就是编写基本链码所需要的全部内容。 \ No newline at end of file From 92d5d243f2984682ec52cf30461451c420e86c3f Mon Sep 17 00:00:00 2001 From: Gymgle Date: Wed, 17 May 2017 17:52:01 +0800 Subject: [PATCH 10/12] Sync deprecation notice to Chinese readme --- README_zh-cn.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README_zh-cn.md b/README_zh-cn.md index f9a8e9140..93e383126 100644 --- a/README_zh-cn.md +++ b/README_zh-cn.md @@ -1,7 +1,6 @@ -# NOTICE +# 注意 -This repository is deprecated. It only teaches you how to write chaincode for Hyperledger Fabric v0.6. For information -on how to write chaincode for the latest Fabric releases, see the [Hyperledger documentation](http://hyperledger-fabric.readthedocs.io/en/latest/chaincode.html). +该仓库已经过时了。这里只指导你如何编写 Hyperledger Fabric v0.6 的链码。对于如何编写最新 Fabric 版本的链码信息,请参阅 [Hyperledger 文档](http://hyperledger-fabric.readthedocs.io/en/latest/chaincode.html)。 # 学习链码 From 834cefcaa799280b805873a49a2b65bcc75d0616 Mon Sep 17 00:00:00 2001 From: Dale Avery Date: Mon, 22 May 2017 17:13:37 -0400 Subject: [PATCH 11/12] Fix wrong url in deployment example --- README.md | 6 ++++-- imgs/deploy_example.PNG | Bin 36440 -> 49869 bytes 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2363be8d2..26454ecb2 100644 --- a/README.md +++ b/README.md @@ -354,7 +354,7 @@ In order to deploy chaincode through the REST interface, you will need to have t "params": { "type": 1, "chaincodeID": { - "path": "https://github.com//learn-chaincode/finished" + "path": "http://gopkg.in//learn-chaincode.v2/start" }, "ctorMsg": { "function": "init", @@ -368,7 +368,9 @@ In order to deploy chaincode through the REST interface, you will need to have t } ``` -- The `"path":` is the path to your fork of the repository on Github, going one more directory down into `/finished`, where your `chaincode_finished.go` file lives. +- The `"path":` is the path to your fork of the repository on Github, going one more directory down into `/start`, where your `chaincode_start.go` file lives. The `v.2` portion of the URL indicates that the peer should checkout the code from the `v2.0` branch of your fork. + +- You may be wondering why we didn't use a URL like `http://github.com//learn-chaincode/start`. Well, this URL would work, but this would cause the peer to deploy the chaincode from the `master` branch of your repository, as opposed to the `v2.0` or `v1.0` branches. If you've been following this guide to the letter, then you have been committing changes and pushing to these branches in your fork, not the `master` branch. - Send the request. If everything goes smoothly, you will see a response like the one below diff --git a/imgs/deploy_example.PNG b/imgs/deploy_example.PNG index a96e1173881797ba5c1767472dbb79ffe1b06d08..fa06f4581eccd5cbb0c28bcd2bef2c1dbab9816c 100644 GIT binary patch literal 49869 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
#od>-Yll`7;iTAS{U!R<}^2@oSC{1 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 From dd1322df6c8b460382737d04c60dda4a99722b4b Mon Sep 17 00:00:00 2001 From: Dale Avery Date: Mon, 22 May 2017 17:14:59 -0400 Subject: [PATCH 12/12] Fix wrong url in deployment example in Chinese --- README_zh-cn.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README_zh-cn.md b/README_zh-cn.md index 93e383126..2cc14da10 100644 --- a/README_zh-cn.md +++ b/README_zh-cn.md @@ -326,7 +326,7 @@ func main() { "params": { "type": 1, "chaincodeID": { - "path": "https://github.com//learn-chaincode/finished" + "path": "http://gopkg.in//learn-chaincode.v2/start" }, "ctorMsg": { "function": "init", @@ -340,7 +340,7 @@ func main() { } ``` -- `"path"`:你创建的 Github 仓库分支的路径,`chaincode_finished.go` 文件在它的下一级目录 `/finished` 中。 +- `"path"`:你创建的 Github 仓库分支的路径,`chaincode_start.go` 文件在它的下一级目录 `/start` 中。 - 发送该请求。如果一切顺利,你会看到类似下面的响应: