前言

本教程基本上是对Marbles项目的翻译过程. 如果英文比较好的话,建议根据官方操作说明,一步步进行环境部署。当然你也可以参考本教程在自己的主机上部署该项目。

Marbles 介绍

关于 Marbles

  • 这个应用程序的基础网络是 Hyperledger Fabric,后者是一个 Linux Foundation 项目。 您可能想查阅以下操作说明来稍微了解一下 Hyperledger Fabric
  • 本演示旨在帮助开发人员了解链代码的基础知识以及如何使用 Fabric 网络开发应用程序
  • 这是一个非常简单的资产转移演示。多个用户可以创建并相互转移弹珠。

版本

各种版本的 marbles 同时存在。 本版本兼容 Hyperledger Fabric v1.1x。 你可以通过检出别的分支来获取别的版本的 marble,这里演示使用的是ae4e37d分支

应用程序背景

请大家集中注意力,这个应用程序将演示如何利用 Hyperledger Fabric 在许多弹珠所有者之间转移弹珠。 我们将在 Node.js 中使用一些 GoLang 代码完成此任务。 该应用程序的后端将是在我们的区块链网络中运行的 GoLang 代码。 从现在开始,这些 GoLang 代码将称为“链代码”或“cc”。 该链代码本身会创建一颗弹珠,将它存储到链代码状态中。 该链代码本身可以将数据作为字符串存储在键/值对设置中。 因此,我们将字符串化 JSON对象,以便存储更复杂的结构.

弹珠的属性包括:
  • ID(唯一字符串,将用作键)
  • 颜色(字符串,CSS 颜色名称)
  • 尺寸(int,以毫米为单位)
  • 所有者(字符串)

我们将创建一个用户界面,它可以设置这些值并将它们存储在区块链的账本中。 弹珠实际上是一个键值对。 键为弹珠 ID,值为一个包含(上面列出的)弹珠属性的 JSON 字符串。 与 cc 的交互是通过对网络上的一个对等节点使用 gRPC 协议来完成的。 gRPC 协议的细节由一个名为 Hyperledger Fabric Client SDK 的 SDK 处理。 请查看下图了解拓扑结构细节。

应用程序通信流

  • 1.管理员将在他们的浏览器中与我们的 Node.js 应用程序 Marbles 进行交互
  • 2.此客户端 JS 代码将打开一个与后端 Node.js 应用程序的 Websocket 连接,管理员与该站点交互时,客户端 JS 将消息发送到后端
  • 3.读取或写入账本称为提案,这个提案由 Marbles (通过SDK)构建,然后发送到一个区块链对等节点.
  • 4.该对等节点将与它的 Marbles 链代码容器进行通信. 链代码容器将运行/模拟该交易. 如果没有问题,它会对该交易进行背书,并将其发回我们的Marbles程序.
  • 5.然后,Marbles (通过SDK)将背书后的提案发送到订购服务.订购方将来自整个网络的许多提案打包到一个区块中. 然后它将新的区块广播到网络中的对等节点
  • 6.最后,对等节点会验证该区块并将它写入到自己的账本中,该交易现在已经生效,所有后续读取都会反映此更改.

Marbles 项目环境配置

这里使用的是本地的 Hyperledger Fabric 网络来部署项目,如果想使用 IBM Cloud IBM Blockchain 服务来部署该项目,请参考前言中给的官方文档.

  • 注意:本教程使用的系统环境是: ubuntu16.04

设置 Chaincode(链码) 开发环境

如果您通过本人的上一篇博客基于ubuntu16.04快速构建Hyperledger Fabric网络已经搭建好了一个 Hyperledger Fabric 网络,那么这里只需要安装 Node.js 的环境并验证环境是否正确即可,如果您没有在本地搭建 Hyperledger Fabric 网络,建议您通过上述博客先在本地构建好网络环境.

验证 Git 环境

一般来说 linux 系统都是自带 Git,如果系统里没有装,可以使用如下命令来进行安装

$ sudo apt-get install git

安装完成后验证一下

$ git --version
git version 2.7.4

验证 GO 环境

Go安装安装了一组Go CLI工具,这些工具在编写链接代码时非常有用。例如,该 go build 命令允许您在尝试将其部署到网络之前检查链代码是否实际编译.

  • 验证安装环境
$ go version
go version go1.10 linux/amd64
$ echo $GOPATH
/home/ubuntu/go

这里的 ubuntu是我的用户名,表示我的 GOPATH 目录是我的主目录下的 go 文件夹,当然你的 GOPATH 不需要匹配上面的那个。它只是很重要的,但你必须把这个变量设置为文件系统上的有效目录.

安装 Node.js 环境

首先可以先使用 node -vnpm -v 命令来验证系统中是否有 Node.js 环境,如果没有安装则需要使用如下命令进行安装:

$ sudo apt-get install nodejs
$ sudo apt install nodejs-legacy
$ sudo apt install npm

安装完成之后使用 node -vnpm -v 命令来查看版本信息:

$ node -v
v4.2.6
$ npm -v
3.5.2

遗憾的是通过这种方式安装的 Node.js 版本都比较低,而且并不符合我们项目的环境要求(官网文档中出现的版本为:node:v6.10.1;npm:3.10.10),为了避免因软件版本不同而引起的问题,我们还需要对 Node 以及 npm 的版本进行升级操作

  • 先配置 npm 仓库,因为国内的网络环境,直接从 npm 官方源安装软件包速度会特别慢
$ npm install -g nrm
  • 安装完成之后,列出可用的软件源
$ nrm ls
* npm ---- https://registry.npmjs.org/
  cnpm --- http://r.cnpmjs.org/
  taobao - https://registry.npm.taobao.org/
  nj ----- https://registry.nodejitsu.com/
  rednpm - http://registry.mirror.cqupt.edu.cn/
  npmMirror  https://skimdb.npmjs.com/registry/
  edunpm - http://registry.enpmjs.org/
  • 可以切换到淘宝的源,这个速度在国内还是很快的
$ nrm use taobao
Registry has been set to: https://registry.npm.taobao.org/
  • 安装 node 版本管理工具 n
$ npm install -g n
  • 通过 n 安装指定版本
$ n 6.10.1
  • 再次使用 node -v 命令,查看当前版本
$ node -v
v6.10.1
  • 升级 npm 的版本号
$ npm install -g npm@3.10.10
  • 再次使用 npm -v 命令,查看当前版本
$ npm -v
3.10.10

至此,Node.js的环境就算是搭建完成了

Hyperledger Fabric 版本切换

官方文档中提供了三种选择,一种是不想对链码进行修改的,下面操作可以不必执行.而想要自己修改链码的而且想使用最新版本 Fabric 的可以切换到最新的分支,虽然说该项目兼容 Hyperledger Fabric v1.1x,但是出于避免出现未知的错误,建议将分支切换到文档中使用的版本 ae4e37d.切换步骤命令如下

  • 将此版本与网络/ Fabric 的提交哈希匹配(前7个字符将起作用)
$ cd $GOPATH/src/github.com/hyperledger/fabric
$ git checkout ae4e37d

如果按照我的上篇博客配置的,这里的 $GOPATH 既用户主目录下的 go 文件夹,

  • 使用git分支确认级别。它应该显示与您提供的相符的提交级别
$ git branch
* (HEAD detached at ae4e37d)
  release-1.1

显示已经切换到 ae4e37d分支,当前最新发布版本为1.1. 当然,你如果想知道 ae4e37d分支的具体信息,可以通过如下命令查看:

$ git log -p
commit ae4e37dbafe74997534ab317dec5c3f4f53b6a84
Author: Gari Singh <gari.r.singh@gmail.com>
Date:   Mon Aug 7 17:50:39 2017 -0400

    FAB-5652 Prepare fabric for 1.0.2 release
    
    - base version = 1.0.2
    - prev version = 1.0.1
    - is_release = false
    
    Change-Id: Ibce2a81193b09015eef896391b0e8166d40e7102
    Signed-off-by: Gari Singh <gari.r.singh@gmail.com>

diff --git a/Makefile b/Makefile
index d1febaa..ffe51f3 100755
--- a/Makefile
+++ b/Makefile
@@ -36,9 +36,9 @@
 #   - unit-test-clean - cleans unit test state (particularly from docker)
 
 PROJECT_NAME   = hyperledger/fabric

通过上面的命令输出结果可以看到,该分支是基于1.0.2版本的.切换到该分支后,还需要验证结构安装

  • 打开命令提示符/终端输入一下命令
$ cd $GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
$ go build --tags nopkcs11 ./

它应该返回没有错误/警告。您还应该看到在该目录中创建了可执行文件。
请注意,nopkcs11标签很重要。PKCS 11是您不太可能在您的系统上使用的公钥加密标准。 请记住在开发/构建链码时使用此标志
对编写链码 IDE 的选择官方文档推荐了两个 Visual Studio Code 和 Atom,具体的 IDE 开发环境配置可以在网上搜索.

搭建一个本地的Hyperledger网络

这里是构建一个本地的Hyperledger网络,然后测试该网络步骤过程.

先下载 Marbles 项目

我们需要将 Marbles 下载到本地系统。 让我们使用 Git 通过克隆此存储库来完成该任务。 即使您计划将 Marbles 托管在 IBM Cloud 中,也需要执行这一步,运行以下命令即可

$ cd ~
$ git clone https://github.com/IBM-Blockchain/marbles.git --depth 1
$ cd marbles

注意:我这里将 Marbles 克隆到了用户主目录下,你可以选择任意合适的目录

下载 Hyperledger Fabric 官方例子

我们将使用 Hyperledger Fabric 例子运行本地网络。他们的代码具有 Fabric 网络的设置以及链接代码示例。我们只会使用网络设置部分。
使用以下命令下载它们的节点示例:

$ git clone https://github.com/hyperledger/fabric-samples.git
$ cd fabric-samples

如果之前没有下载各种结构组织的 Docker 镜像,那么可以使用下面的命令进行下载

$ curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/release-1.1/scripts/bootstrap-1.1.0-preview.sh -o setup_script.sh
$ sudo bash setup_script.sh

请务必通过运行以下命令或将其粘贴到您的.profile文件中,将这些二进制文件添加到PATH变量中

  • 运行命令
$ export PATH=$PWD/bin:$PATH
  • 若想永久将这些二进制文件添加到PATH变量中,可以加入到系统环境变量中
$ vim ~/.profile

打开后在最后一行插入插入 export PATH=/home/ubuntu/fabric-samples/bin:$PATH,这里可以先使用pwd命令来获取您本地fabric-samples的目录,然后将上面命令中的$PWD换成该目录即可,最后使用:wq保存退出,执行下面命令刷新一下

$ source  ~/.profile

启动网络

接下来,我们需要启动Fabric。运行下面的脚本来让所有的事情都发生

$ cd ./fabcar
 $ sudo ./startFabric.sh

一两分钟后,命令提示符将返回,运行结果如下图所示

现在运行该命令 docker ps 查看当前正在运行的Docker容器。您应该看到类似于以下内容的内容:

CONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS              PORTS                                            NAMES
01cdf948b39c        dev-peer0.org1.example.com-fabcar-1.0   "chaincode -peer.add…"   2 minutes ago       Up 2 minutes                                                         dev-peer0.org1.example.com-fabcar-1.0
2f79bac1371e        hyperledger/fabric-tools                "/bin/bash"              3 minutes ago       Up 3 minutes                                                         cli
648da0074a8d        hyperledger/fabric-peer                 "peer node start"        3 minutes ago       Up 3 minutes        0.0.0.0:7051->7051/tcp,0.0.0.0:7053->7053/tcp   peer0.org1.example.com
868e0f78f80e        hyperledger/fabric-ca                   "sh -c 'fabric-ca-se…"   3 minutes ago       Up 3 minutes        0.0.0.0:7054->7054/tcp                           ca.example.com
4c385bb6aa9d        hyperledger/fabric-couchdb              "tini -- /docker-ent…"   3 minutes ago       Up 3 minutes        4369/tcp,9100/tcp,0.0.0.0:5984->5984/tcp       couchdb
4b9a2b2b0718        hyperledger/fabric-orderer              "orderer"                3 minutes ago       Up 3 minutes        0.0.0.0:7050->7050/tcp                           orderer.example.com
  • 如果你没有看到全部6个容器在运行,那么有些问题是错误的。在继续之前,您需要排除故障。我建议进入一个已停止的容器的日志sudo docker logs peer0(替换名称为w / e的peer0已停止)。
  • 如果您看到containerID already exists正在运行的码头工具 - 组成,那么您需要删除现有的容器。该命令将删除所有容器docker rm -f $(docker ps -aq)

安装并实例化链代码

很好,就快要完成了!现在,我们需要运行我们的 Marbles 链代码。 请记住,链代码是一个关键组件,它最终会在账本上创建我们的 Marbles 事务。 该链代码是需要安装在对等节点上,然后在一个通道上实例化的 GoLang 代码。 已为您编写好该代码! 我们只需要运行它

准备

我们需要一些弹珠依赖来运行安装/实例化脚本。通过返回 Marbles 目录的根目录并输入这些命令来安装弹珠 npm 依赖关系:

$ cd ~/marbles
$ npm install

重要的是安装没有错误返回(警告是好​​的)。如果你有 npm 安装错误,在继续之前你必须解决并修复这些错误

生成证书与密钥文件

这是一个非常重要步骤!安装和实例化操作需要管理员证书和私钥。如果找不到这些文件,您将无法运行任何操作。

  • 第1步:在终端/命令提示符中更改路径到fabric-samples/fabcar目录:
$ cd ../fabric-samples/fabcar
  • 第2步:运行命令:
$ node enrollAdmin.js
 Store path:/home/ubuntu/fabric-samples/fabcar/hfc-key-store
Successfully enrolled admin user "admin"
Assigned the admin user to the fabric client ::{"name":"admin","mspid":"Org1MSP","roles":null,"affiliation":"","enrollmentSecret":"","enrollment":{"signingIdentity":"9b6f84a7672908c0629d9b3ad0bf23437d624089061e937af0b0476ec6dec81d","identity":{"certificate":"-----BEGIN CERTIFICATE-----\nMIIB8DCCAZegAwIBAgIUeQVhK98LQFSz5Dz0bt3bB9Baom8wCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVmxezARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh\nbiBGcmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMT\nE2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTgwNTE1MTA1ODAwWhcNMTkwNTE1MTA1\nODAwWjAQMQ4wDAYDVQQDEwVhZG1pbjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA\nBPlS00VDvBQpsmMFUGnNzEAQd7lgpTNgEDpzJGk4/xfBuechE8cfNH6WuibJtXxh\nsEQ4uLAlDcOAP1nfXq9oEtWjbDBqMA4GA1UdDwEB/wQEAwIHgdamBgNVHRMBAf8E\nAjAAMB0GA1UdDgQWBBShJWerMoKEE2u+dn08UBkGs4tWzjArBgNVHSMEJDAigCBC\nOaoNzXba7ri6DNpwGFHRRQTTGq0bLd3brGpXNl5JfDAKBggqhkjOPQQDAgNHADBE\nAiAmqy0J0M1aZlvuv6cDK8GjeMTMjN0V5dZIW/uBv+whtAIgCMbyQRtE+PDwsoSS\nG40hZ4UOoNS2tvixHRglMMHvKjs=\n-----END CERTIFICATE-----\n"}}}
  • 第3步:运行命令:
$ node registerUser.js 
 Store path:/home/ubuntu/fabric-samples/fabcar/hfc-key-store
Successfully loaded admin from persistence
Successfully registered user1 - secret:PfPGkGQmNgfw
Successfully enrolled member user "user1" 
User1 was successfully registered and enrolled and is ready to intreact with the fabric network
  • 第4步:仔细检查文件夹中是否创建了一些密钥和证书文件 fabric-samples/fabcar/hfc-key-store
  • 第5步:接下来,我们需要验证连接配置文件中的文件路径是否与您的安装相匹配。

    • 打开你的连接配置文件<marbles root>/config/connection_profile_local.json
    • 在这个JSON里找到这三个字段:

      • organizations -> x-adminCert -> path
      • organizations -> x-adminKeyStore -> path
      • client -> credentialStore -> path
    • 每个字段中 path 的值需要反映您的环境(您的目录结构)。你可以浏览这些文件夹和文件以验证它们是否存在。
    • 您可能需要根据您放置fabric-samples目录的位置以及密钥存储数据所在的位置来更改这些值。一旦路径有效,您可以继续。
  • 第6步:你完成了!将路径更改回弹珠根目录:cd ~/marbles 并继续执行下面的安装链接代码说明。

安装链码

完成之后,我们需要将链代码放到 peer 节点的文件系统中。记住 chaincode 定义了什么弹珠(资产)是我们系统交易的业务逻辑。你可以在这个目录中找到弹珠链码<marbles root>/chaincode/src/。这个目录下的文件就是链码文件。

我们将使用位于scripts文件夹中的脚本install_chaincode.js。它会读取我们的弹珠配置文件和连接配置文件数据。您可以通过编辑install_chaincode.js文件来更改本项目链代码ID或版本。如果您想编辑这些文件并想要更多关于其内容的信息,请打开下面的配置和连接配置文件自述文件。如果您对默认设置没有问题,那么只需将这些文件单独保存并运行下面的命令即可。

  • 配置和连接配置文件格式帮助

使用下面的命令安装弹珠链代码文件:

$ cd ./scripts
$ node install_chaincode.js

  ......
..........
#这里省略了许多输出信息
..........
  ......


---------------------------------------
info: Now we install
---------------------------------------
debug: [fcw] Installing Chaincode
debug: [fcw] Sending install req targets=[grpc.http2.keepalive_time=300,grpc.keepalive_time_ms=300000,grpc.http2.keepalive_timeout=35,grpc.keepalive_timeout_ms=3500,grpc.max_receive_message_length=-1,grpc.max_send_message_length=-1,grpc.primary_user_agent=grpc-node/1.10.1,_url=grpc://localhost:7051,addr=localhost:7051,_request_timeout=90000,_name=null],chaincodePath=marbles,chaincodeId=marbles,chaincodeVersion=v4
info: [packager/Golang.js]: packaging GOLANG from marbles
debug: [fcw] Successfully obtained transaction endorsement
---------------------------------------
info: Install done. Errors: nope
---------------------------------------

出现上述输出结果,说明链码安装成功

实例化链码

接下来我们需要实例化链码。这会让您的 channel(通道) 启动弹珠链码mychannel。一旦完成,我们准备使用区块链网络来记录我们的系统(Marbels)活动。使用下面的命令完成实例化:

$ node instantiate_chaincode.js  

  ......
..........
#这里省略了许多输出信息
..........
  ......

---------------------------------------
info: Now we instantiate
---------------------------------------
debug: [fcw] Instantiating Chaincode peer_urls=[grpc://localhost:7051],channel_id=mychannel,chaincode_id=marbles,chaincode_version=v4,cc_args=[12345],ssl-target-name-override=null,pem=null,grpc.http2.keepalive_time=300,grpc.keepalive_timeout_ms=3500
debug: [fcw] Sending instantiate req targets=[grpc.http2.keepalive_time=300,chaincodeVersion=v4,fcn=init,args=[12345],0=214,1=155,2=127,3=34,4=197,5=82,6=208,7=191,8=141,9=140,10=57,11=113,12=46,13=90,14=76,15=231,16=170,17=118,18=197,19=137,20=186,21=212,22=64,23=33,_transaction_id=d550ed194a2d798f2a6c2924c0302fdc6323fba2835e128f3dc541f1b6754525
debug: [fcw] Successfully obtained transaction endorsement
debug: [fcw] Successfully ordered instantiate endorsement.
---------------------------------------
info: Instantiate done. Errors: nope
---------------------------------------

出现上述输出结果,说明实例化链码成功

运行 Marble 项目

通过上述操作,我们所有的环境都已经配置完成了,接下来就是运行本项目

安装依赖

打开命令提示符/终端并导航到 Marbles 目录,并执行下面的几个命令:

$ cd ~/marbles
$ sudo npm install gulp -g
$ sudo npm install

安装依赖成功后,并且没有错误返回(警告是好​​的).如果你有 npm 安装错误,在继续之前你必须解决并修复这些错误

运行项目

使用如下命令运行项目:

$ gulp marbles_local

  ......
..........
#这里省略了许多输出信息
..........
  ......

----------------------------------- Server Up - localhost:3001 -----------------------------------
Welcome aboard:     United Marbles
Channel:     mychannel
Org:         Org1MSP
CA:         fabric-ca
Orderer:     fabric-orderer
Peer:         fabric-peer-org1
Chaincode ID:     marbles
Chaincode Version:  v4
------------------------------------------ Websocket Up ------------------------------------------


info: [fcw] Going to enroll peer_urls=[grpc://localhost:7051],uuid=marblesdockerComposeNetworkmychannelOrg1MSPfabricpeerorg1,ca_url=http://localhost:7054,orderer_url=grpc://localhost:7050,enroll_id=admin,enroll_secret=adminpw,msp_id=Org1MSP,kvs_path=/home/ubuntu/.hfc-key-store
info: [fcw] Successfully loaded enrollment from persistence
debug: added peer grpc://localhost:7051
debug: [fcw] Successfully got enrollment marblesdockerComposeNetworkmychannelOrg1MSPfabricpeerorg1
info: Success enrolling admin
debug: Checking if chaincode is already instantiated or not 1

info: Checking for chaincode...
debug: [fcw] Querying Chaincode: read()
debug: [fcw] Sending query req: chaincodeId=marbles,fcn=read,args=[selftest],txId=null
debug: [fcw] Peer Query Response - len: 5 type: number
debug: [fcw] Successful query transaction.

----------------------------- Chaincode found on channel "mychannel" -----------------------------


info: Checking chaincode and ui compatibility...
debug: [fcw] Querying Chaincode: read()
debug: [fcw] Sending query req: chaincodeId=marbles,args=[marbles_ui],txId=null
warn: [fcw] warning - query resp is not json,might be okay: string 4.0.1
debug: [fcw] Successful query transaction.
info: Chaincode version is good
info: Checking ledger for marble owners listed in the config file

info: Fetching EVERYTHING...
debug: [fcw] Querying Chaincode: read_everything()
debug: [fcw] Sending query req: chaincodeId=marbles,fcn=read_everything,args=[],txId=null
debug: [fcw] Peer Query Response - len: 30 type: object
debug: [fcw] Successful query transaction.
debug: This company has not registered marble owners
info: We need to make marble owners


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
info: Detected that we have NOT launched successfully yet
debug: Open your browser to http://localhost:3001 and login as "admin" to initiate startup
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

出现上述输出信息,则表示项目启动成功,现在你可以在浏览器中输入 http://localhost:3001来访问本项目,并且您不需要输入密码或更改预先填写的用户名admin.

注意: 本人在使用gulp marbles_local命令启动项目的过程中出现了如下图的错误,有可能你在运行时也会出现这个错误:

查看 Issues:208可以发现有人已经遇到过这种问题,阅读后发现这个bug是由fabric-sdk-node https://jira.hyperledger.org/... 引起的, 需要将hfc-key-store目录复制到您的主目录$HOME / .hfc-key-store,然后重新配置connection_profile_local.jsonclient.credentialStore.path. 如果你也遇到了这个问题,可以参考如下步骤.

  • 先将hfc-key-store目录复制到您的主目录$HOME / .hfc-key-store:
$ cd ~/fabric-samples/fabcar
$ cp -r hfc-key-store  ~/.hfc-key-store
  • 重新配置connection_profile_local.jsonclient.credentialStore.path:
$ cd ~/marbles/config
$ vim connection_profile_local.json

在文件中定位到下面的片段:

"client": {
        "organization": "Org1MSP","credentialStore": {
            "path": "/$HOME/.hfc-key-store"
        }
     },

path改为上面的路径(/$HOME/.hfc-key-store)即可.

  • 返回 Marbles 主目录,重新运行本项目
$ cd ~/marbles
$ gulp marbles_local

如果这样,还不能运行,你可以在 issues 里找找看有没有相同的错误,如果有解答过程,可以按照解答的过程,自己试着解决这些问题.

运行配置截图

  • 开始


点击选择右边的按钮Guided,通过这种方式即可以了解 Fabric 又能自定义一些设置

  • 第一步:检查连接配置数据

第一步是检查你的连接配置JSON文件。 检查的文件是:marbles/config/marbles_local.json`marbles/config/connection_profile_local.json

  • 第二步:注册管理员

接下来,我们尝试将您注册为贵公司的管理员。此步骤与您的证书颁发机构(CA)联系并从您的连接配置文件中提供了enrollIDenrollSecret

  • 第三步:查找 Chaincode

现在我们需要在您的channel(通道)上找到链码。检查或修改您的连接配置文件里配置的链码名为弹珠的通道mychannel

  • 第四步:创建资产

作为一个弹珠贸易公司,您可以携带新的弹珠业主。这些弹珠业主代表您的用户群。
这一步将创建弹珠用户并且每个用户拥有3个弹珠。

  • 进行下一步前,请点击Create进行创建
  • 第五步:配置完成,点击Enter进入系统

进入系统后,你可以按照本教程开头,或者下面的Gif动画演示的那样为一个用户创建弹珠资产,或者将一个弹珠资产转移给另一个用户;也可以删除这个弹珠资产.

  • 在每次点击创建,删除,交易资产时其实都是在进行调用链码操作,而且本项目还有动画进行调用链码的演示:


当然,还有更多的功能,你可以在部署后尽情体验!

参考

  • IBM-Blockchain/marbles(官方项目地址)
  • node 版本管理工具 n 无效的原理及解决方案
  • Ubuntu环境下安装nodejs和npm
  • npm版本怎么降级
  • issues:208

基于ubuntu16.04部署IBM开源区块链项目-弹珠资产管理(Marbles)的更多相关文章

  1. 详解Canvas实用库Fabric.js使用手册

    这篇文章主要介绍了详解Canvas实用库Fabric.js使用手册的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. 使用Fabric SDK iOS访问Twitter用户时间线

    我试图在这个问题上挣扎两天.我正在使用FabricSDK和Rest工具包,试图为Twitter使用不同的RestAPIWeb服务.我可以使用具有authTokenSecret,authToken和其他值的会话对象的TWTRLogInButton成功登录.当我尝试获取用户时间线时,我总是得到失败的响应,作为:{“errors”:[{“code”:215,“message”:“BadAuthentic

  3. ios – Xcode警告:“没有处理文件的规则”和“找不到目录”

    重命名我的项目文件夹后,我收到以下错误消息:什么可能出错?解决方法关于第一个警告,您可以在项目设置中的“构建阶段”中检查XCode,即头文件不会出现在“编译源”列表中.

  4. ios – 通过Fabric安装的Twitter,登录工作,请求推文的持久性错误

    我没有想法.解决方法当你请求推文时,我想你的代码如下所示,对吗?原来他们的文档不完整,应该是这样的客户端对象需要您的用户信息来完成它的工作.我遇到过同样的问题.

  5. ios – Xcode 6:在Fabric Crashlytics更新后找不到’Answers.h’文件

    我在Objective-C项目的Xcode6.3.2中的故事板中工作.我尝试构建时突然间出现错误:/…来看看我的变化,它只显示我所做的更改–这与Crashlytics无关.还有其他人看到这个吗?有人建议以最有效的方式恢复并重新开始工作吗?

  6. 你如何将xcode项目转换为cocoapod?

    我有一段代码,我发现我在多个不同的项目中重复使用,所以我想把它变成一个cocoapod并使用私人cocoapod仓库.我的问题是如何将xcode项目设置为cocoapod?它应该是一个静态库还是一个带有appdelegate的空“项目”?

  7. 如何在iTunes上获取我的应用统计数据?

    我最近发布了一个iPhone应用程序,但我没有看到任何方法来检查应用程序统计数据,就像在GooglePlay中一样.你能告诉我怎么做吗?

  8. ios – 如何将文件添加到主包的/ Library / Sounds目录中?

    根据Apple’sdocumentation,/Library/Sounds中的声音文件将在尝试播放声音时由系统搜索.如何将声音文件添加到此文件夹?适用于iOS的正确文档应为here总之,您只需将声音文件作为应用程序包的非本地化资源添加到项目中.

  9. ios – 资产目录与文件夹参考:何时使用其中一个?

    我可以将文件放入Assets.xcassets,或者我可以将文件放入文件夹引用.我何时会选择一个而不是另一个?

  10. fabric-twitter – Twitter Fabric xcode – 上传分发时出错:归档分发错误:-3

    爱德华.解决方法当我更改目标的包标识符并尝试将其作为与以前相同的应用程序分发时,我收到此错误.我通过将我的应用程序注册为Fabric中的新应用程序解决了这个问题.

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部