Hyperledger Fabric 체인코드 개발

김우경·2020년 11월 6일
1

hyperledger-fabric

목록 보기
4/5
post-thumbnail

참고

https://developer.ibm.com/kr/developer-%ea%b8%b0%ec%88%a0-%ed%8f%ac%eb%9f%bc/2017/01/26/blockchain-basic-03-build_development_environment/

https://developer.ibm.com/kr/developer-%EA%B8%B0%EC%88%A0-%ED%8F%AC%EB%9F%BC/2017/01/26/hyperledger_fabric_chaincode_develpement_by_devmode/

1. 개발을 위한 환경

  • Docker
  • Docker ToolBox
  • Golang – 체인코드 개발
  • VirtualBox
  • Git client

2. Docker VM으로 환경설정

docker 사용을 위한 vm 만들기

docker-machine create --driver virtualbox blockchain
-> 이미 실습 진행한 적이 있다면?

`docker-machine start blockchain` 으로 해당 머신 실행

새로 생성된 VM의 환경변수 적용

docker-machine env blockchain

→ 새 터미널 접속시 마다 설정해줘야함

환경설정 완료하기

eval $(docker-machine env blockchain)

3. Hyperledger Fabric 이미지 받기

docker pull hyperledger/fabric-baseimage:x86_64-0.2.2
docker pull hyperledger/fabric-membersrvc:x86_64-0.6.1-preview
docker pull hyperledger/fabric-peer:x86_64-0.6.1-preview

baseimage의 경우 Tab를 latest로 태깅

→ 데브모드에서 체인코드 디플로이 시 baseimage를 통해 체인코드 구동을 위한 Docker 이미지를 만드는데 hyplerledger/fabric-baseimage:latest 를 사용하기 때문

docker tag hyperledger/fabric-baseimage:x86_64-0.2.2 hyperledger/fabric-baseimgae:latest

4. docker-compose.yaml 작성

membersrvc:
  image: hyperledger/fabric-membersrvc:x86_64-0.6.1-preview
  ports:
    - "7054:7054"
  command: membersrvc
vp0:
  image: hyperledger/fabric-peer:x86_64-0.6.1-preview
  ports:
    - "7050:7050"
    - "7051:7051"
    - "7053:7053"
  environment:
    - CORE_PEER_ADDRESSAUTODETECT=true
    - 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"
  • 예제 실행시

    Fabric 소스 준비

    mkdir -p $GOPATH/src/github.com/hyperledger
    cd $GOPATH/src/github.com/hyperledger
    git clone https://github.com/hyperledger/fabric.git
    cd fabric
    git checkout release-1.4

5. 체인코드 빌드

실행하고자 하는 go파일이 있는 경로로 이동해 빌드

cd $GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
go build -o test

6. 개발모드에서 실행하기

6.1 새 터미널에서 아까 만든 .yml 파일이 있는 경로에서 블록체인 런타임 실행

docker-compose up

6.2 ip주소 확인하기

docker-machine ls

6.3 실행하기

아까 빌드 후 실행파일이 생성된 경로에서 명령어 실행

CORE_CHAINCODE_ID_NAME=mycc CORE_PEER_ADDRESS=192.168.99.100:7051 ./test

7. 테스트하기

.yaml에 cli bash에 대한 설정을 따로 해주지 않았으므로 postman으로 테스트

개발모드에서 체인코드 수정시

→ 체인코드 빌드부터 –> 체인코드 실행 –> 로그인 API 호출 –> 체인코드 디플로이

  • REST APis
    • Block
      • GET /chain/blocks/{block-id}
    • Blockchain
      • GET /chain
    • Chaincode
      • POST /chaincode
    • Network
      • GET /network/peers
    • Registrar
      • POST /registrar
      • GET /registrar/{enrollmentID}
      • DELETE /registrar/{enrollmentID}
      • GET /registrar/{enrollmentID}/ecert
      • GET /registrar/{enrollmentID}/tcert
    • Transactions
      • GET /transactions/{UUID}

7.1 사용자 등록 및 로그인

7.2 체인코드 디플로이

7.3 Invoke

작성한 조회, 작성 APi의 테스트


3. chaincode-docker-devmode에서 테스트

hyperledger/fabric-samples

1번 터미널 : 네트워크 시작

→ 위치 : ~/fabric/fabric-samples/chaincode-docker-devmode

docker-compose -f docker-compose-simple.yaml up

2번 터미널 : 체인코드 빌드 & 런

체인코드 컨테이너 접속

docker exec -it chaincode sh

체인코드 빌드

→ 위치 : 빌드할 체인코드가 있는 위치

go build -o test

체인코드 런

CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=mycc:0 ./test

3번 터미널 : CLI에서 체인코드 돌려보기

cli bash 접속

docker exec -it cli bash

체인코드 설치&인스턴스화

peer chaincode install -p chaincodedev/chaincode/test -n mycc -v 0
peer chaincode instantiate -n mycc -v 0 -c '{"Args":["init"]}' -C myc

-> 설치된 체인코드 확인

peer chaincode list --installed

체인코드 수정 시 업그레이드

#버전 올려서 설치
peer chaincode install -p chaincodedev/chaincode/test -n mycc -v 1.0

#업그레이드
peer chaincode upgrade -n mycc -C myc -c '{"Args":[""]}' -o orderer:7050 -v 1 -p chaincodedev/chaincode/test
  • 오류발생

invoke

peer chaincode invoke -n myspec -c '{"Args":["initLedger"]}' -C myc

peer chaincode invoke -n myspec -c '{"Args":["createSpec", "spec11", "2020-10-27", "user1", "1"]}' -C mychannel

query

peer chaincode query -n myspec -c '{"Args":["querySpec", "spec11"]}' -C mychannel

profile
Hongik CE

0개의 댓글