克隆hyperledger提供的fabric-samples项目

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

git checkout v1.1.0 #切至1.1版本,以便跟后续安装的fabric版本相匹配

2. 下载fabric相关镜像和二进制文件

执行如下命令,下载fabric相关镜像和二进制文件(版本1.1.0)

curl -sSL https://goo.gl/6wtTN5 | bash -s 1.1.0

运行以下页面中的脚本自动下载镜像

https://hyperledger-fabric.readthedocs.io/en/release-1.2/install.html

1.1.0

docker pull hyperledger/fabric-ca:x86_64-1.1.0 \

&& docker pull hyperledger/fabric-peer:x86_64-1.1.0 \

&& docker pull hyperledger/fabric-orderer:x86_64-1.1.0 \

&& docker pull hyperledger/fabric-couchdb:0.4.10 \

&& docker pull hyperledger/fabric-javaenv:x86_64-1.0.0 \

&& docker pull hyperledger/fabric-kafka:0.4.10 \

&& docker pull hyperledger/fabric-ccenv:x86_64-1.1.0 \

&& docker pull hyperledger/fabric-tools:x86_64-1.1.0 \

&& docker pull hyperledger/fabric-zookeeper:0.4.10

运行以下脚本禁止更新镜像

$ docker images

$ docker tag hyperledger/fabric-ca:x86_64-1.1.0 hyperledger/fabric-ca \

&& docker tag hyperledger/fabric-peer:x86_64-1.1.0 hyperledger/fabric-peer \

&& docker tag hyperledger/fabric-orderer:x86_64-1.1.0 hyperledger/fabric-orderer \

&& docker tag hyperledger/fabric-couchdb:0.4.10 hyperledger/fabric-couchdb \

&& docker tag hyperledger/fabric-javaenv:x86_64-1.0.0 hyperledger/fabric-javaenv\

&& docker tag hyperledger/fabric-kafka:0.4.10 hyperledger/fabric-kafka\

&& docker tag hyperledger/fabric-ccenv:x86_64-1.1.0 hyperledger/fabric-ccenv\

&& docker tag hyperledger/fabric-tools:x86_64-1.1.0 hyperledger/fabric-tools\

&& docker tag hyperledger/fabric-zookeeper:0.4.10 hyperledger/fabric-zookeeper\

启动docker

service docker start

启动docker实例

docker start 容器ID或容器名

1. 先查看已经暂停的容器实例信息

2. 通过docker start 59ec 启动容器

3. 通过docker ps 查看当前启动的容器

需要升级docker中的go版本

wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz

sudo rm -rf /opt/go

sudo tar -C /opt -xzvf go1.10.3.linux-amd64.tar.gz

export $GOPATH=/opt/gopath

export $GOROOT=/usr/local/go

byfn.sh -m up

byfn.sh -m restart

(之后)

进⼊ docker 容器

docker exec -it cli bash

(之前必须docker-compose-cli.yaml中的cli command行改sleep

tail -f /dev/null

./scripts/script.sh mychannel

(开始)

往docker中传文件:

docker inspect -f '{{.Id}}' cli

194574f1b9ea4548a732291531e9f291ca488b0f4e5c19a364b843ba171b6835

docker cp /opt/gopath/src/mychaincode/ 194574f1b9ea4548a732291531e9f291ca488b0f4e5c19a364b843ba171b6835:/opt/gopath/src/

先要进docker

mkdir -p /opt/go/src/github.com/hyperledger/fabric

docker cp /opt/gopath/src/github.com/hyperledger/fabric

77815deec96b04d6ef5ab65ec95ecd77de0f45b0973e94604122d4f464c00bfa:/opt/go/src/github.com/hyperledger/

#从docker拷出文件

#docker cp 43e1a09ae943e91e721c72f70fc2282bb04a210da085de741404632e9c769e22:/opt/gopath/src/github.com/hyperledger/fabric/peer /opt/gopath/src/github.com/hyperledger/fabric/peer

# docker cp go1.10.3.linux-amd64.tar.gz 43e1a09ae943e91e721c72f70fc2282bb04a210da085de741404632e9c769e22:/opt/gopath/src/github.com/hyperledger/fabric

# docker cp /opt/gopath/src/mychaincode 43e1a09ae943e91e721c72f70fc2282bb04a210da085de741404632e9c769e22:/opt/gopath/src

部署:

peer chaincode install -n tang -v 8.15 -p mychaincode

peer chaincode instantiate -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n tang -v 8.15 -c '{"Args":["init","a", "100", "b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"

查询

peer chaincode query -C mychannel -n tang -c '{"Args":["query","a"]}'

peer chaincode query -C mychannel -n tang -c '{"Args":["query","2:298"]}'

调用

peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n tang -c '{"Args":["billing","a","b","100","a billing b 1","0"]}'

升级

peer chaincode upgrade -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n tang -v 8.15 -c '{"Args":["init","a", "100", "b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"

结束

运行和启动Fabric例子

1、下载hyperledger/fabric-sample

2、切换到release-1.0

git checkout release-1.0

git branch -vv

3、下载bin到fabric-sample目录

https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/linux-amd64-1.0.0/

https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/linux-amd64-1.2.0/

wget https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/linux-amd64-1.2.0/hyperledger-fabric-linux-amd64-1.2.0.tar.gz

4、关闭

./byfn.sh -m down

3、进入first-network文件夹

./byfn.sh -m up

以下忽略,返回

#5、初始化

./byfn.sh -m generate

vi byfn.sh

⽣成初始区块(进入开发步骤)

$ ../bin/cryptogen generate --config=./crypto-config.yaml

$ export FABRIC_CFG_PATH=$PWD

$ ../bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block

⽣成应⽤通道的配置信息

$ export CHANNEL_NAME=tangchannel

$ ../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME

⽣成锚节点配置更新⽂件

$ ../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP

$ ../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP

操作⽹络(v1.2.0后不需要操作Alex.Zhang20180817)

编辑 docker-compose-cli.yaml ,注释到 command 命令

working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer #

command: /bin/bash -c './scripts/script.sh ${CHANNEL_NAME}; sleep

$TIMEOUT' volumes

操作网络

$ CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=600 docker-compose -f docker-compose-cli.yaml up -d

进⼊ docker 容器

$ docker exec -it cli bash

创建通道

$ export CHANNEL_NAME=tangchannel

$ peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

加⼊通道

$ peer channel join -b tangchannel.block

(回上)

链上代码 (链码)

安装链码

$ peer chaincode install -n tang -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

实例化链码

$ peer chaincode instantiate -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a", "100", "b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"

查询

$ peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}‘

转账

$ peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}’

以下启动REST API的web服务

在 GOPATH 的 root 目录中创建 docker-compose.yml 文件。粘贴以下内容:

membersrvc:

image: hyperledger/fabric-membersrvc

ports:

- "7054:7054"

command: membersrvc

vp0:

image: hyperledger/fabric-peer:x86_64-0.6.0-preview

ports:

- "7050:7050"

- "7051:7051"

- "7053:7053"

environment:

- CORE_PEER_ADDRESSAUTODETECT=true

- CORE_VM_ENDPOINT=unix:///var/run/docker.sock

- CORE_LOGGING_LEVEL=DEBUG

- CORE_PEER_ID=vp0

- CORE_PEER_PKI_ECA_PADDR=membersrvc:7054

- CORE_PEER_PKI_TCA_PADDR=membersrvc:7054

- CORE_PEER_PKI_TLSCA_PADDR=membersrvc:7054

- CORE_SECURITY_ENABLED=false

- CORE_SECURITY_ENROLLID=test_vp0

- CORE_SECURITY_ENROLLSECRET=MwYpmSRjupbT

links:

- membersrvc

command: sh -c "sleep 5; peer node start --peer-chaincodedev"

部署示例

Hyperledger Fabric 提供了一个用于与该结构交互的 REST Web 服务接口。与 fabric 的第一次交互是部署链代码。确保本地区块链网络正在运行,然后启动 SoapUI,单击 REST 按钮创建一个新的 REST 项目。您会看到一个类似图 3 的对话框,在其中输入用于所有 REST 请求的基础 URL:

图 3. SoapUI New REST Project 对话框

输入 http://localhost:7050 作为 URL,然后单击 OK。端口 7050 是 fabric 使用的默认 REST 端口,而且因为区块链网络是在本地计算机上运行的,所以将使用 localhost 作为主机名。

在 SoapUI 启动后,可以执行一次快速冒烟测试,以确保它能与本地区块链网络进行通信。展开刚创建的新的 REST 资源,直到看到 Request 1,然后在 Editor 窗口中打开它。使用 GET 方法,在 resource 下输入 /chain。确保单击了 output 选项卡上的 JSON 选项,然后运行请求(通过单击 arrow 图标)。执行此请求时,会在 Editor 窗口右侧的输出选项卡中返回当前区块的哈希值,如图 4 所示

2、关闭原有例子

3、第一终端进入chaincode-docker-devmode,启动网络

docker-compose -f docker-compose-simple.yaml up

4、第二终端进入docker

docker exec -it chaincode bash

5、第二终端进入chaincode文件夹

/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode

6、第二个终端启动chaincode

CORE_PEER_ADDRESS=peer:7051 CORE_CHAINCODE_ID_NAME=mycc:0 ./chaincode002

7、第三个终端

docker exec -it cli bash

安装链码

peer chaincode install -p chaincodedev/chaincode/chaincode002 -n mycc -v 0

实例化链码

peer chaincode instantiate -n mycc -v 0 -c '{"Args":["str","helloworld"]}' -C myc

# 查询链码

$ peer chaincode query -n mycc -c '{"Args":["get","str"]}' -C myc

# 调用链码

peer chaincode invoke -n mycc -c '{"Args":["set", "str", "helloworld111"]}'

-C myc

# 查询链码

$ peer chaincode query -n mycc -c '{"Args":["get","str"]}' -C myc

docker rm -f $(docker ps -aq)

chaincode002

链码放入:

/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode

chaincode002.go

package main

import(

"fmt"

"github.com/hyperledger/fabric/core/chaincode/shim"

"github.com/hyperledger/fabric/protos/peer"

)

type Helloworld struct {

}

func (t *Helloworld) Init(stub shim.ChaincodeStubInterface) peer.Response{

fmt.Println("helloworld init")

args := stub.GetStringArgs()

err := stub.PutState(args[0],[]byte(args[1]))

if err != nil {

shim.Error(fmt.Sprintf("helloworld init err %s",err))

}

return shim.Success(nil)

}

func (t *Helloworld) Invoke(stub shim.ChaincodeStubInterface) peer.Response {

fn,args := stub.GetFunctionAndParameters()

var result string

var err error

if fn == "set" {

result,err = set(stub,args)

}else{

result,err = get(stub,args)

}

if err != nil {

shim.Error(err.Error())

}

return shim.Success([]byte(result))

}

func set (stub shim.ChaincodeStubInterface, args []string) (string,error){

fmt.Println("helloworld set")

err := stub.PutState(args[0],[]byte(args[1]))

if err != nil {

return "", fmt.Errorf("Failed to set asset: %s", args[0])

}

return args[0],nil

}

func get(stub shim.ChaincodeStubInterface, args []string) (string,error){

value, err := stub.GetState(args[0])

if err != nil {

return "", fmt.Errorf("Failed to get asset: %s", args[0])

}

if value == nil {

return "", fmt.Errorf("Asset not found: %s", args[0])

}

return string(value),nil

}

func main() {

err := shim.Start(new(Helloworld))

if err != nil {

fmt.Printf("shim start err %s",err)

}

}

chaincode002_test.go

package main

import(

"fmt"

"testing"

"github.com/hyperledger/fabric/core/chaincode/shim" )

func checkInit(t *testing.T, stub *shim.MockStub, args [][]byte) {

res := stub.MockInit("1", args)

if res.Status != shim.OK {

fmt.Println("Init failed", string(res.Message))

t.FailNow()

}

}

func checkQuery(t *testing.T, stub *shim.MockStub, name string) {

res := stub.MockInvoke("1", [][]byte{[]byte("get"), []byte(name)})

if res.Status != shim.OK {

fmt.Println("Query", name, "failed", string(res.Message))

t.FailNow()

}

if res.Payload == nil {

fmt.Println("Query", name, "failed to get value")

t.FailNow()

}

fmt.Println("Query value", name, "was ", string(res.Payload))

}

func checkInvoke(t *testing.T, stub *shim.MockStub, args [][]byte) {

res := stub.MockInvoke("1", args)

if res.Status != shim.OK {

fmt.Println("Invoke", args, "failed", string(res.Message))

t.FailNow()

}

}

func Test_Helloworld(t *testing.T) {

hello := new(Helloworld)

stub := shim.NewMockStub("hello", hello)

checkInit(t, stub, [][]byte{[]byte("str"), []byte("helloworld")})

checkQuery(t, stub, "str")

checkInvoke(t, stub, [][]byte{[]byte("set"), []byte("str"),[]byte("helloworld-1111")})

checkQuery(t, stub, "str")

}

通过 go test -v helloworld_test.go helloworld.go 测试相应的方法,运行结果:

=== RUN Test_Helloworld

helloworld init

Query value str was helloworld

helloworld set

Query value str was helloworld-1111

--- PASS: Test_Helloworld (0.00s)

PASS ok command-line-arguments 0.028s

https://hyperledger.github.io/composer/latest/tutorials/developer-tutorial

https://hyperledger.github.io/composer/latest/business-network/bnd-create

Cloning an Example Business Network Definition

The sample business network definitions are stored on GitHub at https://github.com/hyperledger/composer-sample-networks. You can git clone this repository to pull down all the sample networks. Each sample network is stored under the packages directory.

Generating a Business Network Definition

Generation

  1. yo hyperledger-composer

Copy

? Please select the type of project: (Use arrow keys) ❯ Angular Business Network Model

And select Business Netork

  1. Answer all of the questions

Copy

Welcome to the Hyperledger Composer project generator ? Please select the type of project: Business Network You can run this generator using: 'yo hyperledger-composer:businessnetwork' Welcome to the business network generator ? Business network name: mynetwork ? Description: This is my test network ? Author name: Mr Conga ? Author email: conga@congazone.org ? License: Apache-2 ? Namespace: org.conga create package.json create permissions.acl create README.md create models/org.conga.cto create .eslintrc.yml create features/sample.feature create features/support/index.js create test/logic.js create lib/logic.js

This generates a skeleton business network with an asset, participant and transaction defined, as well as a mocha unit test.

Also included, is a 'best practice' eslint config file which defines sample linting rules for JS code.

问题解决

修改

fabric-samples/basic-network/start.sh export FABRIC_START_TIMEOUT=300 //适当调大此值可以改善此问题

peer channel list

Fabric 1.1.0下载相关推荐

  1. myeclipse6.0下载及注冊码

    myeclipse6.0 下载地址. 官方下载地址: http://www.myeclipseide.com/module-htmlpages-display-pid-4.html 本地快速下载地址: ...

  2. Ubuntu 18.04上进行HyperLedger Fabric 1.2.0环境及链码安装、部署和测试

    Ubuntu 18.04上进行HyperLedger Fabric 1.2.0环境及链码安装.部署和测试 1.环境安装 HyperLedger Fabric 1.2.0环境的安装推荐一篇博客:http ...

  3. 疯狂.NET架构通用权限后台管理工具演示版2.0下载

    程序未必是最好的,但是我目前所能拥有的程序里是最好的, 功能未必是最全的,但是我目前所能拥有的程序里是最好的. 不管我的再怎么不好,也有成熟的产品,商品化的成果物,请不要乱打击我,你有实力就把你的拿出 ...

  4. java 7.0下载_Java jre 7.0

    这是Java jre 7.0下载,Java 无处不在 !几乎每一件在世界电子设备使用 Java 技术.如果这不是令人印象深刻,觉得的数十亿的 Pc. 移动电话. 蓝光播放器. 打印机. 医疗设备. 汽 ...

  5. Win7下MATLAB 7.0下载地址+详细安装+运行错误解决

    MATLAB 7.0下载地址 http://pan.baidu.com/share/link?shareid=10874&uk=3928989303 ed2k链接下载地址,打开迅雷或者旋风后, ...

  6. vscode中文支持xp_VSCode (Visual Studio Code) V1.43.0下载并设置成中文语言的方法

    Visual Studio Code(简称 VS Code / VSC) 是一款免费开源的现代化轻量级代码编辑器,支持语法高亮.智能代码补全.自定义热键.括号匹配.代码片段.代码对比 Diff.GIT ...

  7. python编辑器编程猫_编程猫Python编辑器 Mac版0.4.0 下载 - 51下载网

    Tags: 编程工具 51下载网提供Python编辑器<编程猫Python编辑器 Mac版>0.4.0 下载,该软件为免费软件,文件大小为55.2 MB,推荐指数3颗星,作为国产软件中的顶 ...

  8. netgen.5.0.0下载地址与Windows下编译方法

    1 综述 Netgen 为奥地利科学家Joachim Schoeberl负责编写的格网(曲面和实体)剖分程序.是格网划分技术中极为先进与完善的,在3D格网划分领域更是具有极大的优势. 2 Netgen ...

  9. java库net2.0下载_visual j 2.0 下载-Visual J# 2.0(vjredist.exe)下载微软官方版-西西软件下载...

    visual j 2.0 下载vjredist.exe是Microsoft Visual J# 2.0的可再发行组件包和简体语言包,并非用于运行使用其他 Java 语言开发工具编写的应用程序,micr ...

最新文章

  1. NLog文章系列——入门教程(上)
  2. DevExpress ChartControl大数据加载时有哪些性能优化方法
  3. boost::intrusive::splaytree_algorithms用法的测试程序
  4. axios请求拦截 做Loading加载
  5. android 拦截外拨电话,Android拦截外拨电话程序示例
  6. 对对象类型和调用方法属性进行存储以提升反射性能
  7. java 3d模型插件_3D模型整合插件 Kitbasher V1.2 支持3DS MAX 2012~2018
  8. [Web Chart系列之一]Web端图形绘制SVG,VML, HTML5 Canvas 技术比较
  9. Oracle/MySQL decimal/int/number 转字符串
  10. 诗一首,程序员不仅仅只会写程序
  11. android c 内存泄露,内存泄漏弄个明白
  12. sql server2012 远程访问设置(转)
  13. 关于炼丹,你是否知道这些细节?
  14. 开通公众号啦:java4all
  15. 【PR #2】史莱姆(值域分段)
  16. com.sec.android.ofvi,恶意软件分析 URL链接扫描 免费在线病毒分析平台 | 魔盾安全分析...
  17. python里float什么意思_Python中的float是什么意思,小白求答?
  18. 数学专业英语 -- 数理逻辑入门
  19. linux下查找占空间大的文件,Linux中查找当前目录下占用空间最大的前10个文件
  20. 前端的学习之路:初级HTML---超链接的锚点定位

热门文章

  1. java 导出表格打包zip文件下载_POI多个工作簿导出表格打包ZIP下载
  2. 追星女孩彩虹屁情话合集100条 ✔︎ (二)
  3. 谈一谈对源代码,图纸,文档防泄密软件的一些见解
  4. 计算机多媒体视频,计算机多媒体技术Windows视频工具Mediaplayer.ppt
  5. 二叉搜索树【Java数据结构】
  6. TACACS+和RADIUS比较
  7. 不推荐别的了,IDEA 自带的数据库工具就很牛逼!
  8. cadence导入dxf文件_Allegro中导入导出DXF文件
  9. 今日头条 7 年,好的算法还可以做什么?
  10. minecraft optifine崩溃的一种解决方法