您的位置: 首页 >> 芯片

在開發環境中測試

2019.10.23 来源: 浏览:0次

在开发环境中测试Hyperledger Fabric Chaincodes

Happyledger

这是我hyperledger fabric系列文章的第四部份——happyledgerblog系列:)在这篇文章中,我将展现如何在本地开发机器中构建、运行和测试(调试)链代码

正常的链代码是安装和运行在对等点上的但是使用chaincode开发模式,我们可以在本地开发机器上运行和测试它们在真正的络上部署链代码之前,编译、运行和测试它们是值得的

与本文相干的所有部署文件和配置都是athlf-chaincode-dev gitlab repo签出存储库并遵守以下步骤

1. 设置fabric开发络

首先,我们需要使用预先生成的orderer和channel构件部署dev mode docker容器以下是在这个目录中找到的预生成工件

ock – 引导块

– 引导连接事物

ock – 预定块

您可以像下面这样部署服务它将启动并运行orderer、peer、cli和chaincode容器Orderer以SingleSampleMSPSoloprofile开始,peer以dev-mode开始

# deploy following containers

# 1. orderer

# 2. peer

# 3. cli

# 4. chaincode

docker-compose up -d

2. 构建和运行链代码

接下来我们需要在链代码容器中构建和运行链代码我已经放了我的rahasak进入chaincode/rahasak目录中的链代码这个链代码具有用户创建、获得、搜索功能

package main

import (

bytes

encoding/json

fmt

)

type RahasakContract struct {

}

type User struct {

Id string `json:id`

Name string `json:name`

Email string `json:email`

}

func (s *RahasakContract) Init(stub aincodeStubInterface) sponse {

args := tStringArgs()

intf(INFO: init chaincode args: %s\n, args)

return ccess(nil)

}

func (s *RahasakContract) Invoke(stub aincodeStubInterface) sponse {

// Retrieve the requested Smart Contract function and arguments

function, args := tFunctionAndParameters()

intf(INFO: invoke function: %s, args: %s\n, function, args)

if function == create {

return eate(stub, args)

} else if function == get {

return t(stub, args)

} else if function == search {

return arch(stub, args)

}

return ror(Invalid smart contract function)

}

func (s *RahasakContract) Create(stub aincodeStubInterface, args []string) sponse {

intf(INFO: create with args: %s\n, args)

// user

usr := User{

Id: args[0],

Name: args[1],

Email: args[2],

}

usrJsn, _ := rshal(usr)

err := tState(args[0], usrJsn)

if err != nil {

intf(ERROR: error PutState: %s\n, ror())

ror(error PutState: + ror())

}

return ccess(nil)

}

func (s *RahasakContract) Get(stub aincodeStubInterface, args []string) sponse {

intf(INFO: get with args: %s\n, args)

usr, _ := tState(args[0])

if usr == nil {

return ror(Could not get user with id: + args[0])

}

return ccess(usr)

}

func (s *RahasakContract) Search(stub aincodeStubInterface, args []string) sponse {

intf(INFO: search with args: %s\n, args)

// from, to range comes with args

frm := args[0]

to := args[1]

// search by range

iterator, err := tStateByRange(frm, to)

if err != nil {

return ror(Error search by range: + ror())

}

defer ose()

// build json respone

buffer, err := buildResponse(iterator)

if err != nil {

return ror(Error constract response: + ror())

}

intf(INFO: search response:%s\n, ring())

return ccess(tes())

}

func buildResponse(iterator ateQueryIteratorInterface) (*ffer, error) {

// buffer is a JSON array containing query results

var buffer ffer

iteString([)

written := false

for sNext() {

resp, err := xt()

if err != nil {

return nil, err

}

// add a comma before array members, suppress it for the first array member

if written == true {

iteString(,)

}

// record is a JSON object, so we write as it is

iteString(string(lue))

written = true

}

iteString(])

return buffer, nil

}

func main() {

err := art(new(RahasakContract))

if err != nil {

intf(ERROR: error creating rahasak contact: %s\n, ror())

}

}

下面是在chaincode容器中构建和运行这个链代码的命令

# connect to chaincode container

docker exec -it chaincode bash

# build chaincode

cd rahasak

go build -o rahasak

# run chaincode

# when running we are specifying the chaincode name and version

CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=rahasak1:0 ./rahasak

在运行chaincode时,我们指定了chaincode的唯一名称和版本(rahasak1.0)现在chaincode已经在链代码容器中启动了

3.安装并实例化chaincode

下一步是在peer中安装和实例化链代码(就像我们在真实fabric集群中安装和实例化链代码一样)下面是这样做的方法

# install chaincode

# we are given unique name and version of the chaincode

peer chaincode install -p chaincodedev/chaincode/rahasak -n rahasak1 -v 0

# instantiate chaincode

# we are giving channel name and chaincode name

peer chaincode instantiate -n rahasak1 -v 0 -c {Args:[]} -C myc

在安装和实例化时,我们需要指定chaincode的名称在这里

,我将rahasak1作为名称,0作为版本现在,我们的chaincode设置已准备好进行测试

4.测试chaincode

要测试chaincode,我们可以执行调用、查询事务下面是这样做的方法

# invoke transactions with create

peer chaincode invoke -n rahasak1 -c {Args:[create, 001, lambda, [emailprotected]]} -C myc

peer chaincode invoke -n rahasak1 -c {Args:[create, 002, ops, [emailprotected]]} -C myc

# query transactions with get

# output {id:001,name:lambda,email:[emailprotected]}

peer chaincode query -n rahasak1 -c {Args:[get, 001]} -C myc

# query transactions with search

# output

[{id:001,name:lambda,email:[emailprotected]},{id:002,name:ops,email:[emailprotected]}]

peer chaincode query -n rahasak1 -c {Args:[search, 001, 005]} -C myc

hyperledger 伪链

小孩肚子疼不消化怎么办

男性为什么夜尿增多

孩子积食吃什么药最好

通化治疗急性附睾炎费用
龙岩治疗月经不调费用
晋城癫痫病医院
Tags:
友情链接