Skip to content

airvin/fabric-network

Repository files navigation

Fabric network

This is a very simple Fabric network that consists of an orderer, peer, cli and chaincode container.

To start the nodes and join the peer to the channel myc, run:

./start.sh

or, to run without the chaincode container (for local development):

./start-no-cc.sh

Running the Chaincode Process Locally

In this setup there is no need to run the chaincode container. Instead, the chaincode process will be run on our host machine. The only change needed is to make port 7052 of the peer accessible from outside the docker-compose network created for the Fabric deployment. To do this, the mapping: - 7052:7052 is added under the ports section of the peer container in the docker-compose.yaml.

Node Chaincode

The current version of the fabric_shim package requires an older version of node to be compiled successfully. To do that we will be using the n version manager.

With the Fabric network running do the following:

# npm install n
sudo n 8.9.0
cd chaincode/chaincode_example02/node
npm install
node chaincode_example02.js --peer.address localhost:7052 --chaincode-id-name "mycc:v0"

Go Chaincode

cd chaincode/chaincode_example02/go
go build -o example02
CORE_CHAINCODE_LOGGING_LEVEL=debug CORE_PEER_ADDRESS=localhost:7052 CORE_CHAINCODE_ID_NAME=mycc:v0 ./example02

Haskell Chaincode

This requires building and running the Haskell chaincode process from the haskell-cc repository. Instructions for doing so can be found in the repository's readme.

Chaincode Testing - CLI Container

In a separate terminal window, run:

Node Chaincode

Instantiation:

docker exec -it cli bash
peer chaincode install -n mycc -v v0 -l node -p /opt/gopath/src/chaincodedev/chaincode/chaincode_example02/node
peer chaincode list --installed
peer chaincode instantiate -n mycc -v v0 -l node -c '{"Args":["init","a","100","b","200"]}' -C myc -o orderer:7050

Invocation:

peer chaincode invoke -n mycc -c '{"Args":["invoke","a","b","30"]}' -C myc

Query:

peer chaincode query -n mycc -c '{"Args":["query","a"}' -C myc

Go Chaincode

Instantiation:

For the Go chaincode we need to provide a relative path to /opt/gopath/src

docker exec -it cli bash
peer chaincode install -n mycc -v v0 -l golang -p chaincodedev/chaincode/chaincode_example02/go
peer chaincode list --installed
peer chaincode instantiate -n mycc -v v0 -l golang -c '{"Args":["init","a","100","b","200"]}' -C myc -o orderer:7050

Invocation:

peer chaincode invoke -n mycc -c '{"Args":["invoke","a","b","30"]}' -C myc

Query:

peer chaincode query -n mycc -c '{"Args":["query","a"}' -C myc

Haskell Chaincode

From the perspective of the peer, interacting with Haskell chaincode looks the same as with Go chaincode.

Instantiation:

docker exec -it cli bash
peer chaincode install -n mycc -v v0 -l golang -p chaincodedev/chaincode/chaincode_example02/go
peer chaincode list --installed
peer chaincode instantiate -n mycc -v v0 -l golang -c '{"Args":["init","a","100"]}' -C myc -o orderer:7050

Invocation:

peer chaincode invoke -n mycc -c '{"Args":["get","a"]}' -C myc
peer chaincode invoke -n mycc -c '{"Args":["set","b","60"]}' -C myc
peer chaincode invoke -n mycc -c '{"Args":["del","a"]}' -C myc

Chaincode Setup - Chaincode Container

As an alternative to running the chaincode process locally, it can also be run in a chaincode container that is manually started by the user. To do so, use the following:

Node Chaincode

docker exec -it chaincode bash
cd chaincode_example02/node
npm install
node chaincode_example02.js --peer.address peer:7052 --chaincode-id-name "mycc:v0"

Go Chaincode

docker exec -t chaincode bash
cd chaincode_example02/go
go build -o example02
CORE_CHAINCODE_LOGGING_LEVEL=debug CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=mycc:v0 ./example02

Note there is currently no image for running Haskell chaincode in a container.

About

Basic Hyperledger Fabric network with configuration for running peer and chaincode in dev mode

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published