⭐ 하이퍼레저 패브릭 1.4 ver 기준

체인코드 배포 (관리자의 관점)

배포 명령어 순서

  • docker-compose -f docker-compose.yml up -d cli

  • docker exec cli peer chaincode install -n fabcar -v 1.0 -p github.com/fabcar/go

  • docker exec cli peer chaincode instantiate -o orderer.example.com:7050 -n fabcar -v 1.0 -c ‘{“Args”:[]}’ -C mychannel -P “OR (‘Org1MSP.member’,’Org2MSP.member’)”

  • docker exec cli peer chaincode invoke -o orderer.example.com:7050 -n fabcar -c ‘{“Args”:[“initLedger”]}’ -C mychannel

  • docker exec cli peer chaincode query -n fabcar -c ‘{“Args”:[“queryAllCars”]}’ -C mychannel

  • docker exec cli peer chaincode invoke -o orderer.example.com:7050 -n fabcar -c ‘{“Args”:[“createCar”,”CAR12”,”sm”,”sm3”,”red”,”shin”]}’ -C mychannel

  • docker exec cli peer chaincode query -n fabcar -c ‘{“Args”:[“queryCar”,”CAR12”]}’ -C mychannel

-1. docker-compose -f docker-compose.yml up -d cli
👉 -d 옵션을 안주면 컨테이너를 생성하고 무한루프에 갇힌다
👉 cli 라는 컨테이너 생성


-2. cli 컨테이너는 하이퍼레저 블록체인 네트워크를 관리하는 콘솔 역할 (peer 에게 명령을 주는 관리자)

👆 cli 컨테이너 설정 (관리자용 콘솔)

environment (환경변수)

  1. 체인코드에 대한 설치 배포명령 GOPATH 환경변수
  2. 연결할 peer 의 정보 (컨테이너 이름 or IP주소 or 도메인주소 등)
  3. 컨테이너와 통신하는데 필요한 PORT 번호
  4. 어떤 멤버십으로 연결을 할지 (조직멤버십)
  5. 어떤 권한으로 peer 에게 접근할지 (멤버십 경로)
  6. 어떤 권한으로 peer 에게 트랜잭션을 일으킬것인지
    (키와 인증서를 이용하여 권한 획득)

volumes

  1. 리눅스 → 도커 → 이미지 → 컨테이너 생성
  2. 컨테이너들이 사용할 세부적인 설정내용 / 파일은 이미지에 들어가지 않는다
  3. 이런 경우에는 리눅스 시스템에 있는 디렉토리에서 세부값을 가져온다

/var/run/ : /host/var/run/
’ : ‘ 를 기준으로
앞에는 리눅스 디렉토리 경로
뒤에는 도커 컨테이너 저장 경로


-3. docker exec cli peer chaincode install -n fabcar -v 1.0 -p github.com/fabcar/go

  • 도커 cli로 (관리자권한) 명령어 실행
  • peer chaincode install 체인코드 설치
  • 체인코드의 이름은 fabcar
  • 버전관리를 위해 버전정보 v 1.0
  • 체인코드가 어떤 디렉토리에 있는지 지정 -p github.com/fabcar/go

docker exec cli peer chaincode list --installed
성공적으로 설치가 되었는지 확인 👆


-4. docker exec cli peer chaincode instantiate -o orderer.example.com:7050 -n fabcar -v 1.0 -c '{"Args":[]}' -C mychannel -P "OR ('Org1MSP.member','Org2MSP.member')"

  • 도커 cli로 (관리자권한) 명령어 실행
  • peer chaincode instantiate 체인코드 배포
  • 체인코드 배포는 채널 전체에 영향을 준다 ⭐
  • 체인코드 ‘설치’는 peer 마다 해줘야하지만 ‘배포’는 채널에 한번만 해주면 된다
  • -o orderer.example.com:7050 배포가 되면 orderer 로 전달이 되어야 한다
  • 어떤 체인코드를 배포할지 이름 -n fabcar
  • 버전관리를 위해 버전정보 v 1.0
  • -c '{"Args":[]}' 체인코드에 ‘Init’ 함수 원장의 초기값 설정 (key-value 값)
  • -C mychannel 배포 될 채널 이름
  • -P "OR ('Org1MSP.member','Org2MSP.member')"
    👉 -P는 정책, orderer에 이 내용이 들어간다
    👉 “OR” 어떤 조직이라도 트랜잭션을 승인하면 블록화 시킨다
    👉 “AND” 두 조직 모두 트랜잭션을 승인하면 블록화 시킨다

docker exec cli peer chaincode list --instantiated -C mychannel
성공적으로 설치가 되었는지 확인 👆

  • 체인코드 이름 / 버전 / 경로

-5. docker exec cli peer chaincode invoke -o orderer.example.com:7050 -n fabcar -c '{"Args":["initLedger"]}' -C mychannel

  • 도커 cli로 (관리자권한) 명령어 실행
  • peer chaincode invoke 체인코드로 트랜잭션을 발생시킨다
  • -o orderer.example.com:7050 트랜잭션이 발생하면 블록이 생성되는데 블록이 생성이되려면 ‘orderer’ 의 정보가 필요하다
  • 어떤 체인코드를 동작시킬지 -n fabcar
  • -c '{"Args":["initLedger"]}' 어떤 트랙잭션을 발생시킬지 내용값
  • 어떤 채널에 있는지 -C mychannel

docker exec cli peer chaincode query -n fabcar -c '{"Args":["queryAllCars"]}' -C mychannel
성공적으로 트랜잭션이 발생했는지 확인 👆

  • peer chaincode query 트랜잭션 내용 전달 (확인)

-6. docker exec cli peer chaincode invoke -o orderer.example.com:7050 -n fabcar -c '{"Args":["createCar","CAR12","sm","sm3","red","shin"]}' -C mychannel

  • 도커 cli로 (관리자권한) 명령어 실행
  • peer chaincode invoke 체인코드로 트랜잭션을 발생시킨다
  • -o orderer.example.com:7050 트랜잭션이 발생하면 블록이 생성되는데 블록이 생성이되려면 orderer의 정보가 필요하다
  • 어떤 체인코드를 동작시킬지 -n fabcar
  • -c '{"Args":["createCar","CAR12","sm","sm3","red","shin"]}' 어떤 트랙잭션을 발생시킬지 내용값
  • 어떤 채널에 있는지 -C mychannel

docker exec cli peer chaincode query -n fabcar -c '{"Args":["queryCar","CAR12"]}' -C mychannel
성공적으로 트랜잭션이 발생했는지 확인 👆


-7. fabric-couchdb 를 이용하고 있어서 ‘월드스테이트’ 를 볼수있다

http://localhost:5984/_utils
(👆 월드스테이트 로컬호스트 주소)

👆 ‘월드스테이트’ 데이터 베이스
‘이더스캔’ , ‘클레이스코프’ 와 같이
트랜잭션 발생 내용을 UI 로 확인할 수 있다

👆 ‘CAR12’ Metadata
체인코드로 트랜잭션을 발생시킨 값이
key-value 데이터로 잘 담긴걸 확인 할 수 있다

👆 ‘CAR12’ json
체인코드로 트랜잭션을 발생시킨
"CAR12","sm","sm3","red","shin" 데이터가
JSON 형식으로 잘 담긴걸 확인 할 수 있다