[Go lang] 체인코드 컴파일 & 네트워크 구축 (도커 컨테이너)
chaincode / docker / peer / orderer
⭐ 하이퍼레저 패브릭 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는 체인코드 컨테이너를 연결해서 보유한다
- 트랜잭션이 오면 체인코드를 동작시킨다