简介

Hyperledger是Linux 基金会主导的一个开源的区块链(BlockChain)项目. 本文介绍了一个简单的Hyperledger智能合约的开发过程.

开发环境

本文使用Docker作为Hyperledger智能合约的本地开发环境.

第一步

从Docker官网http://www.docker.com/下载其安装包,并安装Docker.

第二步

启动Docker QuickStarter Terminal并运行如下命令在Docker中安装Hyperledger Fabric.

docker pull hyperledger/fabric-peer:latest
docker pull hyperledger/fabric-membersrvc:latest

第三步

在工作目录下创建如下的docker-compose.yml

membersrvc:
image: hyperledger/fabric-membersrvc
ports:
- "7054:7054"
command: membersrvc
vp0:
image: hyperledger/fabric-peer
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=true
- CORE_SECURITY_ENROLLID=test_vp0
- CORE_SECURITY_ENROLLSECRET=MwYpmSRjupbT
links:
- membersrvc
command: sh -c "sleep 5; peer node start --peer-chaincodedev"

然后在Docker QuickStarter Terminal中运行以下命令以启动Hyperledger Fabric

docker-compose up

第四步

安装并运行SSH客户端,例如putty或mRemoteNG, 使用以下信息连接Docker

host : 192.168.99.100
user name : docker
password : tcuser

第五步

运行如下命令以确认Hyperledger Fabric的进程

docker ps

运行如下命令以进入Hyperledger Fabric环境

docker exec -it hyperledger_vp0_1 bash

第六步

运行如下命令从git下载Hyperledger Fabric源代码

mkdir -p $GOPATH/src/github.com/hyperledger
cd $GOPATH/src/github.com/hyperledger
git clone http://gerrit.hyperledger.org/r/fabric

第七步

运行如下命令创建HelloWorld目录

mkdir -p $GOPATH/src/github.com/HelloWorld/
cd $GOPATH/src/github.com/HelloWorld/

创建如下HelloWorld.go文件

package main

import (
"errors"
"fmt"
"strconv" "github.com/hyperledger/fabric/core/chaincode/shim"
) type HelloWorldChaincode struct {
} func (t *HelloWorldChaincode) Init(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) {
fmt.Printf("HelloWorld - Init called with function %s!\n", function) return nil, nil
} func (t *HelloWorldChaincode) Invoke(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) {
fmt.Printf("HelloWorld - Invoke called with function %s!\n", function) return nil, nil
} func (t *HelloWorldChaincode) Query(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) {
fmt.Printf("HelloWorld - Query called with function %s!\n", function) message := "Hello World"
return []byte(message), nil;
} func main() {
err := shim.Start(new(HelloWorldChaincode))
if err != nil {
fmt.Printf("Error starting Hello World chaincode: %s", err)
}
}

使用如下命令编译代码

go build ./

第八步

使用如下命令运行HelloWorld

export CORE_CHAINCODE_ID_NAME=mycc
export CORE_PEER_ADDRESS=0.0.0.0:7051
./HelloWorld &

第九步

向Hyperledger服务接口http://192.168.99.100:7050/registrar 发送如下REST请求,使用内置的jim用户登录系统

{
"enrollId": "jim",
"enrollSecret": "6avZQLwcUe9b"
}

第十步

向Hyperledger服务接口http://192.168.99.100:7050/chaincode 发送如下初始化HelloWorld的REST请求

{
"jsonrpc": "2.0",
"method": "deploy",
"params": {
"type": 1,
"chaincodeID":{
"name": "mycc"
},
"ctorMsg": {
"function":"init",
"args":[]
},
"secureContext": "jim"
},
"id": 1
}

调用HelloWorld的REST请求

{
"jsonrpc": "2.0",
"method": "invoke",
"params": {
"type": 1,
"chaincodeID":{
"name":"mycc"
},
"ctorMsg": {
"function":"invoke",
"args":[]
},
"secureContext": "jim"
},
"id": 3
}

以及查询HelloWorld的REST请求

{
"jsonrpc": "2.0",
"method": "query",
"params": {
"type": 1,
"chaincodeID":{
"name":"mycc"
},
"ctorMsg": {
"function":"query",
"args":[]
},
"secureContext": "jim"
},
"id": 5
}

总结

本文介绍了一个简单的Hyperledger智能合约在本地Docker环境下的开发过程.

最新文章

  1. jQuery Colorbox弹窗插件使用教程小结、属性设置详解
  2. Smokeping安装教程
  3. Qt环境搭建(Qt Creator)+Visual Studio
  4. html css中id和class的区别比较
  5. RHEL 6.5升级GCC 4.9.3
  6. ueditor .net设置步骤
  7. PHP实现简单的评论与回复功能还有删除信息
  8. 5 秒创建 k8s 集群 - 每天5分钟玩转 Docker 容器技术(115)
  9. 1.QT中播放视频,录音程序的编写
  10. windowsserver 2019系统安装教程
  11. day02-运算符 and 和 or 的用法
  12. Linux下mysql定时自动备份并FTP到远程脚本
  13. Java面试之高并发系统
  14. ReactNative 常见红屏黄屏及终端报错
  15. Spark-RDD算子
  16. TCP系列49—拥塞控制—12、DSACK下的拥塞撤销
  17. Centos 挂载NTFS格式的USB硬盘
  18. keil:C语言里面调用汇编程序
  19. 一次shell中seq的处理
  20. oracle 笔记---(七)__角色

热门文章

  1. 微软Connect教程系列--自动生成增删改查页面工具介绍(二)
  2. 建立自己的Visual Studio工程模板
  3. java实现输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
  4. Metro风格的Android界面应用
  5. Mysql日常开发注意要点
  6. Andrew Ng机器学习公开课笔记 -- 支持向量机
  7. MVVM架构~knockoutjs系列之扩展ajax验证~验证输入数据是否与后台数据相等
  8. OutputCache属性详解(三)— VaryByHeader,VaryByCustom
  9. 修改WebBrowser控件的内核解决方案
  10. VS2013模块对于SAFESEH映像是不安全的解决方法