본문 바로가기

BlockChain Developer/Private Blockchain

[Hyperledger Fabric Tutorials v2.x] 하이퍼레저 패브릭 테스트 네트워크

[사전준비사항]

1. node, npm, go, docker, docker-compose 요소가 필요함

2. https://github.com/hyperledger/fabric-samples/tree/main (패브릭 샘플파일 다운로드)

3. 바이너리 파일 다운로드

curl -sSL https://bit.ly/2ysbOFE | bash -s -- 2.2.2 1.4.9

위 바이너리 파일을 다운로드 받으면, 이미지가 다음과 같이 생성됨.

After hyperledger binary file downloaded

4. docker file 수정하기 ** 매우중요.

a. core.yaml 파일에서, vm_docker_hostConfig_NetworkMode부분을 다음과 같이 이름을 준다. (뭐든 상관없음 맞추면됨)

fabric-samples/config/core.yaml

b. docker-compose-test.yaml파일에서도 이름을 맞추어 설정한다.

단, 여기서는 peer0.org1.example.com 과, 다른 한 피어까지 총 두가지 모두 이름을 수정했다. (첫번째 것만 수정해도 작동함.)

fabric-samples/test-network/docker/docker-compose-test-net.yaml

 

 


 

[Bring up the test network]

 

1. Test Network 가져오기.

 

2. cd fabric-samples / test-network 디렉토리로 이동, ls명령어로 network.sh파일 확인.

아래처럼 network.sh파일이 있으면 성공!

ls명령어를 fabric-samples/test-network에서 실행함.

 

3. 도움말을 보려면, 아래 명령어로 확인이 가능하다.

./network.sh -h

 

4. 피어 둘 + 1명의 오더러 노드 + 패브릭 네트워크 생성 

./network.sh down   #사전준비를 위해 혹시라도 실행되고 있는 컨테이너나 아티팩트를 모두 제거.

./network.sh up    #패브릭 오더러, 피어노드를 생성한다. (채널은 생성되지 않음)

결과화면 도커이미지

 


[채널생성하기]

이로써 우리는 피어둘 (Org1, Org2)를 생성했으며, Oderer를 생성했다.

Organization은 조직이며 그 안에서 각 영역별로 Channel로 구분지을 수 있다.

지금부터는 채널을 생성한다.

 

 

1. "mychannel" 디폴트 이름으로, 채널을 생성한다.

./network.sh createChannel

디폴트 채널 생성 결과

 

2. 이번에는 Custom 이름을 준, "channel1"으로 채널을 생성한다.

./network.sh createChannel -c channel1

 

3. 이번에는 Custom 이름으로 "channel2"으로 채널을 생성한다.

./network.sh createChannel -c channel2

 


[체인코드 채널에 배포하기]

 

1. 바로 상위 디렉토리의 fabric-samples/asset-transfer-basic/chaincode-go 에 있는 체인코드 파일을 채널에 배포해보자.

./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go

채널 배포화면

deployCC옵션은 asset-transfer(basic) 체인코드를 peer0.org1.example.com과, peer0.org2.example.com에 디팬던시와 함꼐 설치하고 배포한다.-l옵션을 추가해서 랭귀지를 바꿀 수 있다.(go, typescript, javascript 등).

 

 


[네트워크 간 상호작용]

peer CLI를 사용해 네트워크와 상호작용 할 수 있다.

배포된 체인코드 스마트컨트렉트를 invoke할 수 있으며, 채널을 업데이트 할 수 있고, 새로운 체인코드를 설치&배포 할 수 있다.

 

1. Path를 설정한다.

#test-network 디렉토리에서,

export PATH=${PWD}/../bin:$PATH

export FABRIC_CFG_PATH=$PWD/../config/

 

2. 환경변수 설정

#한 줄 씩 붙여 넣으시오.

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051

 

 

3. 실행 ㄱㄱ

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"InitLedger","Args":[]}'

성공 화면!

*참고 : query & invoke 차이점은 read, write 차이.

 

 

4. 모든 지갑 불러오기

peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'

 

5. Organization2 invoke

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"TransferAsset","Args":["asset6","Christopher"]}'

 

6. Org2 CLI 설정

# Environment variables for Org2

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051

 

7. asset6의 지갑을 봅시다.

peer chaincode query -C mychannel -n basic -c '{"Args":["ReadAsset","asset6"]}'

 

 


[실습 종료]

 

네트워크를 내립니다.

./network.sh down