[블록체인] - 하이퍼레저 패브릭 환경 설정 : 설치 및 실행 (document page 따라해보기)

jsbak·2021년 8월 8일
0

BlockChain

목록 보기
3/6
post-thumbnail

🅱 하이퍼레저 패브릭 설치 및 실행

하이퍼레저 패브릭 2.2.x 버전
하이퍼레저 패브릭 2.3.x 버전
하이퍼레저 패브릭 1.4.x 버전

참고 링크 : 1, 2

📒 1. 하이퍼레저 패브릭 설치

$  cd $GOPATH/src
  • 최신 버전으로 설치
curl -sSL https://bit.ly/2ysbOFE | bash -s
  • 특정 버전으로 설치하고 싶은 경우
    $ curl -sSL https://bit.ly/2ysbOFE | bash -s -- <fabric_version> <fabric-ca_version>

    • 현재 최신 버전
    $ curl -sSL https://bit.ly/2ysbOFE | bash -s -- 2.3.2 1.5.0
    • 안정화 버전
    $ curl -sSL https://bit.ly/2ysbOFE | bash -s -- 2.2.3 1.5.0
    $ curl -sSL https://bit.ly/2ysbOFE | bash -s -- 1.4.12 1.4.9 0.4.22

이렇게 설치하면 Samples , Binaries, Docker Images가 설치되는것을 터미널을 통해 확인 가능

📒 2. 하이퍼레저 패브릭 테스트 네트워크 동작 확인

  • fabric-samples 가 있는 위치로 이동
$ cd $GOPATH/src
  • fabric-sample/test-network로 이동
$ cd fabric-samples/test-network

network.sh 라는 쉡 스크립트 파일을 통해 로컬 시스템의 Docker 이미지를 사용하여 Fabric 네트워크를 시작할 수 있다.

  • 스크립트 도움말 보기
$ ./network.sh -h
~~
      up - Bring up Fabric orderer and peer nodes. No channel is created
      	# 오더러와 피어 노드를 네트워크에 올림
      up createChannel - Bring up fabric network with one channel
      	# 채널을 네트워크에 올림
      createChannel - Create and join a channel after the network is created
      	# 네트워크가 생성된 후 채널을 생성하고 참여 시킴
      deployCC - Deploy a chaincode to a channel (defaults to asset-transfer-basic)
      	# 채널에 체인코드를 구현
      down - Bring down the network
      	# 네트워크를 닫음

    Flags:
    Used with network.sh up, network.sh createChannel:
    -ca <use CAs> -  Use Certificate Authorities to generate network crypto material
    	# 인증 기관을 통해 네트워크 암호화 생성
    -c <channel name> - Name of channel to create (defaults to "mychannel")
    	# 만들 채널 이름 지정
    -s <dbtype> - Peer state database to deploy: goleveldb (default) or couchdb
    	# 배포할 피어 상태의 데이터 베이스 
    -r <max retry> - CLI times out after certain number of attempts (defaults to 5)
    	# 특정 횟수의 시도 후 CLI 시간 초과
    -d <delay> - CLI delays for a certain number of seconds (defaults to 3)
    	# 특정 시간 동안 CLI 지연
    -i <imagetag> - Docker image tag of Fabric to deploy (defaults to "latest")
    	# 배포할 Fabric의 Docker 이미지 태그
    -cai <ca_imagetag> - Docker image tag of Fabric CA to deploy (defaults to "latest")
    	# 배포할 Fabric CA 의 Docker 이미지 태그
    -verbose - Verbose mode
    	# 상세 모드
~~
 Examples:
   network.sh up createChannel -ca -c mychannel -s couchdb -i 2.0.0
   network.sh createChannel -c channelName
   network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-javascript/ -ccl javascript
   network.sh deployCC -ccn mychaincode -ccp ./user/mychaincode -ccv 1 -ccl javascript

test-network디렉터리 내부에서 ./network.sh down 명령을 실행하여 이전 실행에서 컨테이너 또는 아티팩트를 제거

./network.sh up 명령을 실행하여 네트워크를 구동, 다른 디렉토리에서 스크립트를 실행하려고 하면 문제 발생

./network.sh up 명령은 두 개의 peer 노드, 하나의 ordered 노드로 구성된 패브릭 네트워크 생성한다. 현재는 실행 시 채널생성 X

기본적으로 네트워크는 cryptogen 도구를 사용하여 네트워크를 불러온다. 그러나 인증 기관을 사용하여 네트워크를 시작할 수도 있다.

✔ 테스트 네트워크 구성 요소

docker ps -a 명령을 실행하여 컴퓨터에서 실행 중인 모든 Docker 컨테이너를 나열하고 network.sh 스크립트에 의해 생성된 세 개의 노드를 표시

CONTAINER ID   IMAGE                               COMMAND             CREATED        STATUS          PORTS                                                                                                                                 NAMES
cef3ce3699e0   hyperledger/fabric-tools:latest     "/bin/bash"         11 hours ago   Up 56 seconds                                                                                                                                         cli
370532e244c0   hyperledger/fabric-orderer:latest   "orderer"           11 hours ago   Up 57 seconds   0.0.0.0:7050->7050/tcp, :::7050->7050/tcp, 0.0.0.0:7053->7053/tcp, :::7053->7053/tcp, 0.0.0.0:17050->17050/tcp, :::17050->17050/tcp   orderer.example.com
f0c72de110b2   hyperledger/fabric-peer:latest      "peer node start"   11 hours ago   Up 57 seconds   0.0.0.0:9051->9051/tcp, :::9051->9051/tcp, 7051/tcp, 0.0.0.0:19051->19051/tcp, :::19051->19051/tcp                                    peer0.org2.example.com
8a62cee89e04   hyperledger/fabric-peer:latest      "peer node start"   11 hours ago   Up 57 seconds   0.0.0.0:7051->7051/tcp, :::7051->7051/tcp, 0.0.0.0:17051->17051/tcp, :::17051->17051/tcp                                              peer0.org1.example.com

ps 는 실행하는 컨테이너 목록, -a 옵션은 종료된 컨테이너 목록까지 확인해줍니다.

✔ 채널만들기(Creating a channel)

2.3버전 채널만들기

스크립트를 사용하여 Org1과 Org2 간의 트랜잭션을 위한 Fabric channel을 생성

Channel은 특정 네트워크 구성원 간의 개인 통신 계층이며, 초대된 조직에서만 사용 할 수 있고 네트워크 구성원에게는 표시 되지 않는다. 각 Channel은 별도의 블록체인 원장이 있으며 초대된 organizations 은 채널 원장을 저장하고 트랜잭션을 검증하기 위해 Peer를 Channel에 "join"합니다.

network.sh Channel에 동료를 Org1 및 Org2 사이의 채널을 만들고 peers 를 join 시킵니다.

$ ./network.sh createChannel

명령은 은 mychannel을 생성합니다.

You can also use the channel flag to create a channel with custom name. As an example, the following command would create a channel named channel1:
-c <channel name> flag 를 주어서 내가 원하는 채널 이름으로 생성 가능

$ ./network.sh createChannel -c channel1

channel flag를 사용하여 다른 채널 이름을 지정하여 여러 채널을 만들 수 있으며 upcreateChannel 모드를 동시에 사용해 네트워크를 불러오면서 채널을 생성할 수도 있습니다.

$ ./network.sh up createChannel

✔ 채널에서 체인코드 시작(Starting a chaincode on the channel)

채널에서 체인코드 시작

Fabric에서 스마트 계약은 chaincode라고 하는 패키지로 네트워크에 배포, 체인 코드는 조직의 피어에 설치된 다음 채널에 배포되어 트랜잭션을 승인하고 블록체인 원장과 상호작용합니다.

network.sh basic이라는 이름의 채널을 만들고 asset-trasfer-basic/chaincode-go 경로의 체인코드와 go언어로된 체인코드를 시작

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

deployCC 하위 명령은 조직1, 2에 asset-transfer (basic) 자산 이동(기본) 체인 코드를 설치한 다음 채널 플래그를 사용하여 지정된 채널(또는 채널이 지정되지 않은 경우 mychannel)에 체인 코드를 배포합니다. 체인 코드를 처음 배포하는 경우 스크립트가 체인 코드 종속성을 설치합니다.

✔ 네트워크와 상호 작용(Interacting with the network)

네트워크와 상호 작용

테스트 네트워크를 불러온 후 peer CLI를 사용하여 네트워크와 상호 작용할 수 있습니다. peer CLI는 배포 스마트 계약, 업데이트 채널을 호출하거나, 설치 및 CLI에서 새로운 스마트 계약을 배포 할 수 있습니다.

test-network디렉토리 에서 작동 중인지 확인하십시오 . 지침에 따라 샘플, Binaries 및 Docker 이미지 를 설치 했다면 fabric-samples 저장소의bin폴더 에서 peer binaries를 찾을 수 있습니다.

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

명령을 사용하여 해당 바이너리를 CLI 경로에 추가합니다.

FABRIC_CFG_PATHfabric-samples 저장소의 core.yaml 파일을 가리키도록 설정해줍니다.

export FABRIC_CFG_PATH=$PWD/../config/

peer CLI를 Org1 으로 작동할 수 있는 환경 변수로 설정

# Environment variables for Org1

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

CORE_PEER_TLS_ROOTCERT_FILECORE_PEER_MSPCONFIGPATH 환경 변수는 organizations 폴더의 Org1 crypto material를 가리킨다.

./network.sh deployCC -ccl go 명령으로 asset-transfer (basic) chaincode를 설치하고 시작한 경우 (Go) 체인 코드의 InitLedger 함수를 호출하여 자산의 초기 목록을 장부에 입력할 수 있습니다.

  • 명령을 실행하여 자산과 원장을 초기화 합니다.
    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":[]}'

성공시 그림과 같이 출력

이제 CLI에서 원장을 Query할 수 있습니다.

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

명령을 실행하여 채널 원장에 추가된 자산 목록을 가져옵니다.

성공시 아래처럼 출력

[
  {"ID": "asset1", "color": "blue", "size": 5, "owner": "Tomoko", "appraisedValue": 300},
  {"ID": "asset2", "color": "red", "size": 5, "owner": "Brad", "appraisedValue": 400},
  {"ID": "asset3", "color": "green", "size": 10, "owner": "Jin Soo", "appraisedValue": 500},
  {"ID": "asset4", "color": "yellow", "size": 10, "owner": "Max", "appraisedValue": 600},
  {"ID": "asset5", "color": "black", "size": 15, "owner": "Adriana", "appraisedValue": 700},
  {"ID": "asset6", "color": "white", "size": 15, "owner": "Michel", "appraisedValue": 800}
]

체인코드는 네트워크 구성원이 원장의 자산을 전송하거나 변경하려고 할때 호출됩니다. 자산 이전(기본) 체인코드를 호출하여 원장의 자산 소유자를 변경하려면 다음 명령을 수행
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"]}'

성공시 그림과 같이 출력

자산 전송(기본) chaincode 에 대한 endorsement(보증) 정책은 Org1 및 Org2이 서명한 트랜잭션이 필요로 하기 때문에, chaincode invoke 명령은 --peerAddresses 플래그를 사용하여 조직 1, 2 모두 대상으로 지정해야 합니다. 또한, 네트워크에 TLS가 활성되어 있기 때문에 --tlsRootCertFiles 플래그를 사용하여 각 피어에 대한 TLS 인증서도 참조합니다.

이처럼 chaincode를 invoke한 후 query로 블록체인 원장의 자산이 어떻게 변경 되었는지 확인가능합니다.

조직2(Org2)에서도 확인해 보기 위해 환경설정을 변경해줍니다.

# 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

이제 peer0.org2.example.com에서 쿼리 실행

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

성공시 Christopher에게 "asset6" 가 전송된걸 볼 수 있다.

이로써 테스트 네트워크 따라하기를 마무리 해보겠습니다!

❌ 네트워크 중단(Bring down the network)

./network.sh down 네트워크를 종료 명령
노드 및 체인코드 컨테이너를 중지 및 제거하고, 조직 암호화 자료를 삭제하고, Docker 레지스트리에서 체인코드 이미지를 제거합니다.
또한 이전 실행에서 채널 아티팩트 및 도커 볼륨을 제거하므로 문제가 발생한 경우 실행해 제거한 다음 다시 ./network.sh up 명령으로 다시 시작할 수 있습니다.

❌ Troubleshooting

링크

❌ 에러발생

하이퍼레저 컴포저 개발 환경 구성

하이퍼레저 컴포저 README.md
하이퍼레저 컴포저 사이트

As of the 29th August 2019, the Hyperledger Composer project is in deprecated status. None of the maintainers are actively developing new features. None of the maintainers are actively providing support via GitHub issues. However, if you wish to submit code changes via pull requests, these will be merged.

It is highly recommended that you use Hyperledger Fabric v1.4+ instead, which features significant improvements to the developer experience, including a new programming model.

⚠️ ⚠️ ⚠️
2019년 8월 29일부로 Hyperledger Composer 프로젝트는 더 이상 사용되지 않는 상태입니다. 유지 관리자 중 누구도 새로운 기능을 적극적으로 개발하지 않습니다. 유지 관리자 중 누구도 GitHub 문제를 통해 적극적으로 지원하지 않습니다. 그러나 pull 요청을 통해 코드 변경 사항을 제출하려는 경우 이러한 변경 사항이 병합됩니다.

새로운 프로그래밍 모델을 포함하여 개발자 경험이 크게 개선된 Hyperledger Fabric v1.4+를 대신 사용하는 것이 좋습니다.
⚠️ ⚠️ ⚠️

패브릭과 컴포저

As of the 29th August 2019, the Hyperledger Composer project is in deprecated status. You can still use it, but thinking for the future it is better to start with fabric docs. And now the fabric tutorials are much improved.

2019년 8월 29일부로 Hyperledger Composer 프로젝트는 더 이상 사용되지 않는 상태입니다. 여전히 사용할 수 있지만 미래를 위해 패브릭 문서로 시작하는 것이 좋습니다. 이제 패브릭 튜토리얼이 훨씬 개선되었습니다.

Hyperedger Fabric: Hyperledger Fabric은 Hyperledger 프레임워크 중 하나입니다. Enterprise 응용 프로그램을 구축하는 데 일반적으로 사용되는 개인 권한이 부여된 블록체인입니다.

Hyperledger Composer: Hyperledger Framework의 도구 중 하나입니다. 이 도구의 주요 목적은 Hyperledger Fabric Framework에 비해 더 짧은 시간에 Blockchain 응용 프로그램을 개발하는 것입니다.

두 가지의 주요 차이점

  • Hyperledger Composer의 도움으로 블록체인 애플리케이션을 개발하는 것이 훨씬 쉽고 빠릅니다.
  • Hyperledger Composer의 체인코드는 자바스크립트로만 작성할 수 있습니다.
  • Hyperledger Composer는 연결 파일을 통해 주요 구성 요소를 활용하여 Hyperledger Fabric 네트워크 위에 구축됩니다.
profile
끄적끄적 쓰는곳

2개의 댓글

comment-user-thumbnail
2023년 1월 8일

안녕하세요 혹시 하이퍼레저 패브릭 네트워크 구성하실 때, 하나의 인스턴스에 모든 구성을 하는 것이 아니라 컴포넌트화 시켜서 각각 다른 EC2에 네트워크 구성하는 방법에 대해서 아시나요?

1개의 답글