앞서 fabric에서 각 역할의 node를 docker으로 제공해줘서, 손쉽게 실질적인 '블록체인 네크워크' 구축 할 수 있었습니다.

그럼 이제 이렇게 구축된 '블록체인 네크워크'을 대상으로~ 서비스 channel을 만들고, chaincode 설치 및 테스트 해보삼.

  • cli 환경
    • 우선, fabric에서 제공하는 커맨드를 사용하게 위해~ '가상환경 bash셸'으로 들어갑니다.
      • docker exec -it cli bash
    • channel 및 chaincode 관련 커맨드를 잘 날리면 됩니다.
      • 환경변수 $CORE_PEER_ADDRESS 값으로, 커맨드할 peer_node를 정합니다.
      • 환경변수 $CORE_PEER_MSPCONFIGPATH 값으로, 커맨드 권한이 정해집니다.
    • (참고로 저는 https://github.com/bysssss/fabric13/chaincode 를 기반으로 실습을 진행 하였습니다.)
  • channel
    • 특정 peer-node에게 channel create 커맨드를 합니다.
      • peer channel create -o {orderer주소}:7050 -c {channel이름} -f /etc/hyperledger/configtx/channel.tx
      • (앞서의 channel.tx를 기반으로) channel을 만들면, {해당channel}.block이 생성됩니다.
    • 각각의 peer-node에게 channel 참여 커맨드를 합니다.
      • peer channel join -b {해당channel}.block
      • 해당 peer-node가 {해당channel}.block 을 물면서, 참여를 하게 되는것 입니다.
      • (저는 cli환경에서, $core_peer_address 값을 바꿔가며~ 복수의 peer-node를 참여시켰슴)
    • 특정 peer-node를 anchor-node으로 지정하고 싶다면, 업데이트 커맨드를 하면 됩니다.
      • peer channel update -o {orderer주소}:7050 -c {channel이름} -f /etc/hyperledger/configtx/anchor.tx
      • (앞서의 anchor.tx를 기반으로) 해당 peer-node를 anchor-node으로 지정 합니다.
  • chaincode
    • 특정 peer-node에 비지니스로직인 chaincode를 설치해라고 커맨드 합니다.
      • peer chaincode install -n {chaincode이름} -v 1.0 -l java -p /etc/hyperledger/chaincode
      • (자바 메이븐 프로젝트로 chaincode를 작성하였고, 해당 pom.xml 경로를 지정하면 빌드 및 설치 됨)
      • peer chaincode list -C {channel이름} --installed
    • 해당 chaincode를 해당 channel에서 서비스 할 수 있도록, 인스턴트화 커맨드를 합니다.
      • peer chaincode instantiate -o {orderer주소}:7050 -C {channel이름} -n {chaincode이름} -l java -v 1.0 -c '{"function":"init","Args":["", ... , ""]}' -P 'OR ("SamsungMSP.member","HyundaiMSP.member")'
      • (해당 chaincode에 정의하신 포맷에 맞게 초기화를 하시면서, chaincode 합의정책 또한 지정 할 수 있음)
      • (보이는 그대로, 해당 blockchain-network의 해당 channel에서 해당 chaincode를 해당 합의정책으로 서비스 하는것!)
      • peer chaincode list -C {channel이름} --instantiated
    • 해당 chaincode의 쿼리 커맨드를 날려 봅니다.
      • peer chaincode query ...
    • 해당 chaincode의 인보크 커맨드도 날려 봅니다.
      • peer chaincode invoke ...

anchor-node에만 chaincode를 install시키로, 해당channel에 instantiate하는식으로 하였다.

즉, peer0 과 peer1 을 해당channel에 join한 이후~ peer0에만 chaincode를 invoke한 것이다.

이렇게 하더라도, gossip프로토콜으로 peer1에 데이터가 동기화 되는것을... couchDB로 확인 할 수 있었다.

또한 chaincode에 변화가 있으면, 새로운 name 및 version으로~ install 과 instantiate 를 다시하면 잘 되었다.

마지막으로 cli 도커에서 나온뒤... docker ps 해보면, 해당 chaincode프로세스가 docker으로 떠있는것 볼 수 있다.

(init 트렌젝션으로 'chaincode프로세스 컨테이너' 가 뜨게 되는것 일것입니다.)

// TODO :
peer channel fetch oldest oldest.block -o orderer.fabtest13.com:7050 -c ftchannel
peer channel fetch newest newest.block -o orderer.fabtest13.com:7050 -c ftchannel
peer channel fetch config config.block -o orderer.fabtest13.com:7050 -c ftchannel
peer channel fetch 0 0.block -o orderer.fabtest13.com:7050 -c ftchannel
docker cp cli:/opt/gopath/src/github.com/hyperledger/fabric/peer/oldest.block ./test
docker cp cli:/opt/gopath/src/github.com/hyperledger/fabric/peer/newest.block ./test
docker cp cli:/opt/gopath/src/github.com/hyperledger/fabric/peer/config.block ./test
docker cp cli:/opt/gopath/src/github.com/hyperledger/fabric/peer/0.block ./test

// TODO : configtxlator proto_decode ... (channel config 수정하는 실습도...)

-끝-

'hyperledger > fabric.실습' 카테고리의 다른 글

fabric 실습2 : docker 와 docker-compose  (0) 2019.05.10
fabric 실습1 : cryptogen 과 configtxgen  (0) 2019.05.10
fabric 실습0 : 준비  (0) 2019.05.09

+ Recent posts