Fabric 1.1.0下载
克隆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
- yo hyperledger-composer
Copy
? Please select the type of project: (Use arrow keys) ❯ Angular Business Network Model
And select Business Netork
- 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下载相关推荐
- myeclipse6.0下载及注冊码
myeclipse6.0 下载地址. 官方下载地址: http://www.myeclipseide.com/module-htmlpages-display-pid-4.html 本地快速下载地址: ...
- Ubuntu 18.04上进行HyperLedger Fabric 1.2.0环境及链码安装、部署和测试
Ubuntu 18.04上进行HyperLedger Fabric 1.2.0环境及链码安装.部署和测试 1.环境安装 HyperLedger Fabric 1.2.0环境的安装推荐一篇博客:http ...
- 疯狂.NET架构通用权限后台管理工具演示版2.0下载
程序未必是最好的,但是我目前所能拥有的程序里是最好的, 功能未必是最全的,但是我目前所能拥有的程序里是最好的. 不管我的再怎么不好,也有成熟的产品,商品化的成果物,请不要乱打击我,你有实力就把你的拿出 ...
- java 7.0下载_Java jre 7.0
这是Java jre 7.0下载,Java 无处不在 !几乎每一件在世界电子设备使用 Java 技术.如果这不是令人印象深刻,觉得的数十亿的 Pc. 移动电话. 蓝光播放器. 打印机. 医疗设备. 汽 ...
- Win7下MATLAB 7.0下载地址+详细安装+运行错误解决
MATLAB 7.0下载地址 http://pan.baidu.com/share/link?shareid=10874&uk=3928989303 ed2k链接下载地址,打开迅雷或者旋风后, ...
- vscode中文支持xp_VSCode (Visual Studio Code) V1.43.0下载并设置成中文语言的方法
Visual Studio Code(简称 VS Code / VSC) 是一款免费开源的现代化轻量级代码编辑器,支持语法高亮.智能代码补全.自定义热键.括号匹配.代码片段.代码对比 Diff.GIT ...
- python编辑器编程猫_编程猫Python编辑器 Mac版0.4.0 下载 - 51下载网
Tags: 编程工具 51下载网提供Python编辑器<编程猫Python编辑器 Mac版>0.4.0 下载,该软件为免费软件,文件大小为55.2 MB,推荐指数3颗星,作为国产软件中的顶 ...
- netgen.5.0.0下载地址与Windows下编译方法
1 综述 Netgen 为奥地利科学家Joachim Schoeberl负责编写的格网(曲面和实体)剖分程序.是格网划分技术中极为先进与完善的,在3D格网划分领域更是具有极大的优势. 2 Netgen ...
- 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 ...
最新文章
- NLog文章系列——入门教程(上)
- DevExpress ChartControl大数据加载时有哪些性能优化方法
- boost::intrusive::splaytree_algorithms用法的测试程序
- axios请求拦截 做Loading加载
- android 拦截外拨电话,Android拦截外拨电话程序示例
- 对对象类型和调用方法属性进行存储以提升反射性能
- java 3d模型插件_3D模型整合插件 Kitbasher V1.2 支持3DS MAX 2012~2018
- [Web Chart系列之一]Web端图形绘制SVG,VML, HTML5 Canvas 技术比较
- Oracle/MySQL decimal/int/number 转字符串
- 诗一首,程序员不仅仅只会写程序
- android c 内存泄露,内存泄漏弄个明白
- sql server2012 远程访问设置(转)
- 关于炼丹,你是否知道这些细节?
- 开通公众号啦:java4all
- 【PR #2】史莱姆(值域分段)
- com.sec.android.ofvi,恶意软件分析 URL链接扫描 免费在线病毒分析平台 | 魔盾安全分析...
- python里float什么意思_Python中的float是什么意思,小白求答?
- 数学专业英语 -- 数理逻辑入门
- linux下查找占空间大的文件,Linux中查找当前目录下占用空间最大的前10个文件
- 前端的学习之路:初级HTML---超链接的锚点定位
热门文章
- java 导出表格打包zip文件下载_POI多个工作簿导出表格打包ZIP下载
- 追星女孩彩虹屁情话合集100条 ✔︎ (二)
- 谈一谈对源代码,图纸,文档防泄密软件的一些见解
- 计算机多媒体视频,计算机多媒体技术Windows视频工具Mediaplayer.ppt
- 二叉搜索树【Java数据结构】
- TACACS+和RADIUS比较
- 不推荐别的了,IDEA 自带的数据库工具就很牛逼!
- cadence导入dxf文件_Allegro中导入导出DXF文件
- 今日头条 7 年,好的算法还可以做什么?
- minecraft optifine崩溃的一种解决方法