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

체인코드 컴파일 (fabric)

컴파일 명령어 순서

  • . ~/.profile

  • go mod init fabric

  • go get github.com/hyperledger/fabric/core/chaincode/shim@v1.4

  • go build


컴파일 명령어 분석

-1. 체인코드가 있는 경로로 이동 cd fabric/fabric-samples/chaincode/fabcar

-2. . ~/.profile 환경변수를 등록해준다
👉 이때부터 go 프로그램을 동작시킬수 있다

-3. mod 초기화 및 go.mod 파일 생성
go mod init 'package name'

-4. go.mod 파일이 생성되었는지 확인해본다 ls

-5. go get 명령어로 github repository 라이브러리 다운로드

-6. go build 명령어로 go 파일을 실행명령 파일로 만들어준다


네트워크 상태 확인 (초기화)

초기화 명령어 순서

  • docker ps -a

  • docker rm -f $(docker ps -aq)

  • docker rmi -f $(docker images dev-* -q)

  • docker network prune

  • ./teardown.sh (위의 명령어들을 압축)


초기화 명령어 분석

-1. 네트워크 경로로 이동 cd fabric/fabric-samples/basic-network

-2. 기존의 네트워크 확인 docker ps -a

-3. 네트워크, 이미지가 존재한다면 리셋해준다 (기존 네트워크 종료)

  • docker rm -f $(docker ps -aq) 👉 도커 컨테이너 삭제
  • docker rmi -f $(docker images dev-* -q) 👉 도커 컨테이너 이미지 삭제
  • docker network prune 👉 도커가 생성한 컨테이너들간의 네트워크 삭제

네트워크 구축

  • ./start.sh

  • docker exec peer0.org1.example.com peer channel list


네트워크 구축 - 채널 생성 - 채널 가입

-1. ./start.sh 👈 ‘쉘 스크립트’ 실행 명렁어

  • 기존에 동작하던 네트워크 & 컨테이너 종료시킴
  • docker-compose Tool 을 이용하여 사용할 컨테이너를 생성
  • docker-compose.yml 파일에 컴테이너 설정값이 들어있다 👉 (환경변수, IP, PORT, 볼륨 등등)
  • net_basic 생성 👉 컨테이너 간 통신을 위한 네트워크 구축 (외부 인터넷으로도 연결 가능 - 공유기)
  • STATUS 값이 Up 으로 되어있는지 확인 ❗
  • 4개의 컨테이너 생성 peer / ca / orderer / couchdb
  • 채널 생성 👉 채널 생성을 위한 트랜잭션 파일을 👉 orderer 에 트랜잭션을 보냄
  • orderer는 트랜잭션을 받고 블록생성을 한다
  • config Block 생성 👉 트랜잭션 보낸곳에 다시 블록파일을 보낸다
  • 생성되어서 받아온 블록이 mychannel.block
  • peer 컨테이너 에서는 orderer 가 보내준 블록파일을 저장한다
  • 채널에 가입 완료 ⭐


-2. 가입된 채널 확인

peer0.org1 컨테이너는 mychannel 이라는 채널에 가입되어있음 👆

  • 도커 컨테이너가 동작을 할수있는 네트워크 구축 (docker-compose Tool)
  • 컨테이너들을 (peer / ca / orderer / couchdb) 생성해서 네트워크위에 연결
  • peer 는 하이퍼레저 구성요소로써 네트워크에 구축되어 연결됐지만
  • 아무런 채널에 가입되지않고 체인코드도 보유하고있지 않는상태다 (붕 떠있는 상태)
  • 그래서 peer를 채널에 가입시킴
  • 하이퍼레저 패브릭의 채널은 하나의 네트워크에 여러개가 존재할 수 있다
  • 채널마다 동일한 원장을 보유하게 된다 (다른채널이면 원장의 내용은 달라진다)
  • 채널별로 아예 다른 블록체인임
  • 동일한 채널에 가입되어있는 peer 들은 동일한 원장, 월드스테이트를 ‘동기화’ 해서 보유한다
  • 이것을 ‘합의’ 라고 하고
  • 합의를 통해서 전부다 동일한 블록과 원장을 보유하고 있는 집단을 ‘채널’ 이라고 한다
  • 원장에 있는 데이터를 사용하기 위해 peer는 체인코드 컨테이너를 연결해서 보유한다
  • 트랜잭션이 오면 체인코드를 동작시킨다