이번 글에서는 하이퍼레저 패브릭(Fabric)을 이용한 블록체인 네트워크를 구성하는 과정을 알아보겠습니다.
먼저, 네트워크를 구성하기 위해서 이전에 실행되던 모든 네트워크를 중지시켜야 합니다. 이를 위해 byfn.sh 파일을 이용해 네트워크를 종료시킵니다. 이후에는 docker 명령어를 이용해 컨테이너를 종료하고, 필요없는 이미지를 삭제하는 작업을 수행합니다.
./byfn.sh down
# docker container 종료
docker kill $(docker ps -q)
docker rm $(docker ps -qa)
# docker image 삭제
docker system prune -a
다음으로는 네트워크를 실행할 폴더로 이동해야 합니다. 이 글에서는 fabcar 예제를 사용하겠습니다.
cd fabric-samples/fabcar
startFabric.sh 스크립트를 실행하여 네트워크를 시작합니다.
./startFabric.sh javascript
네트워크를 구성하기 위해서는 몇 가지 패키지를 설치해야 합니다. **npm**을 이용해 필요한 패키지를 설치합니다.
npm install
패키지를 설치한 이후에는 해당 폴더 내에 다음과 같은 파일들이 생성된 것을 확인할 수 있습니다.
enrollAdmin.js
node_modules
package.json
registerUser.js
invoke.js
package-lock.json
query.js
wallet
이제 관리자(admin)를 등록하기 위한 개인키, 공개키, X.509 인증서를 생성해야 합니다. 이를 위해 enrollAdmin.js 파일을 실행합니다. 이 과정에서는 CSR(Certificate Signing Request)이 사용됩니다.
node enrollAdmin.js
인증서가 생성된 이후에는 사용자를 등록할 수 있습니다. 이를 위해서 registerUser.js 파일을 실행합니다.
bashCopy code
node registerUser.js
사용자 등록 이후에는 query.js 파일을 실행하여 원장에 접근할 수 있습니다.
node query.js
이번에는 First Network를 구성하는 방법에 대해 알아보겠습니다.
먼저, First Network에서 필요한 네트워크 아티팩트를 생성합니다. 이는 다양한 네트워크에 대한 모든 인증서와 키, 주문 서비스를 부트 스트랩하는데 사용됩니다. byfn.sh 파일을 이용해 다음과 같이 생성합니다.
cd /fabric-samples/first-network
./byfn.sh generate
이후에는 First Network를 테스트할 수 있습니다. `byfn.sh
이전 네트워크 실행 시킨것들을 모두 중지
./byfn.sh down
이전에 실행된 Fabric 네트워크를 모두 중지합니다.
docker 컨테이너 종료
docker kill $(docker ps -q)
docker rm $(docker ps -qa)
docker system prune -a
이전에 실행된 Docker 컨테이너를 모두 중지 및 삭제하고, 사용하지 않는 리소스를 삭제합니다.
네트워크 시작
bashCopy code
cd fabric-samples/fabcar
./startFabric.sh javascript
fabric-samples/fabcar 디렉토리로 이동한 후, startFabric.sh 스크립트를 실행합니다. javascript 매개변수를 추가하여 JavaScript로 작성된 스마트 계약을 사용할 수 있도록 환경을 설정합니다.
필요 패키지 설치
npm install
필요한 패키지를 설치합니다. package.json 파일에 명시된 패키지들이 설치됩니다.
ls
현재 디렉토리의 파일 목록을 출력합니다.
admin 사용을 위한 개인 키, 공개 키 및 X.509인증서 생성
node enrollAdmin.js
enrollAdmin.js 파일을 실행하여 관리자의 개인 키, 공개 키 및 X.509 인증서를 생성합니다. 이 프로세스는 CSR(Certificate Signing Request)를 사용합니다. 먼저 개인 및 공개 키가 로컬로 생성된 후, 공개 키가 CA(Certificate Authority)로 전송되어 프로그램을 사용할 수 있도록 인코딩된 인증서를 반환합니다. 이 인증서는 전자지갑에 저장되어 CA 관리자 역할을 수행할 수 있게 됩니다.
등록
node registerUser.js
registerUser.js 파일을 실행하여 새로운 사용자를 등록합니다. 지갑에 관리자 자격 증명 user1이 있으므로 장부를 쿼리하고 업데이트 하는 데 사용할 새로운 사용자를 등록합니다.
원장 액세스
node query.js
query.js 파일을 실행하여 장부에 대한 쿼리를 수행합니다.
First Network 구축
네트워크 아티팩트 생성 : 다양한 네트워크에 대한 모든 인증서와 키, 주문 서비스를 부트 스트랩 하는데 사용되며 Channel을 구성하는데 필요한 구성 트랙잭션 모음을 생성합니다.
cd /fabric-samples/first-network
fabric-samples/first-network 디렉토리로 이동합니다.
./byfn.sh generate
byfn.sh 스크립트를 실행하여 샘플 하이퍼레저 패브릭 네트워크를 생성합니다.
export FABRIC_PATH=$PWD
환경 변수 **FABRIC_PATH**를 현재 디렉토리로 설정합니다.
../bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./
configtxgen 도구를 사용하여 오더러 제네시스 블록을 생성합니다.
../bin/configtxgen –profile SampleMultiNodeEtcRaft –channelID byfn-sys-channel –outputBlock ./channel-artifacts/genesis.block
Raft 오더러 서비스에 대한 생성 블록을 출력합니다.
../bin/configtxgen –profile SampleDevModeKafka –channelID byfn-sys-channel –outputBlock ./channel-artifacts/genesis.block
Kafka 오더러 서비스에 대한 생성 블록을 출력합니다.
vi ~/.profile
~/.profile 파일을 열어서 환경 변수를 설정합니다.
export CHANNEL_NAME=mychannel && ../bin/configtxgen –profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx –channelID $CHANNEL_NAME
채널 구성 트랜잭션을 생성합니다.
../bin/configtxgen -profile TwoOrgsChannel –outputAnchorPeersUpdate
./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME –asOrg Org1MSP
Org1 앵커 피어를 정의합니다.
../bin/configtxgen -profile TwoOrgsChannel –outputAnchorPeersUpdate
./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME –asOrg Org2MSP
Org2 앵커 피어를 정의합니다.
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
CORE_PEER_LOCALMSPID=“Org1MSP”
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
위 명령어는 mychannel 이라는 채널을 생성하고, orderer노드인 orderer.example.com 주소를 사용하여 채널 생성 트랜잭션을 orderer노드에게 전송합니다. 이때, 사용되는 TLS root certificate 파일은 tlsca.example.com-cert.pem 입니다.
peer channel join –b mychannel.block
아까 4가지 환경변수를 이용하면 다른 피어를 채널에 가입 시킬 수 있습니다.
위 명령어는 채널 가입 트랜잭션을 peer노드에 전송하여, 해당 피어를 mychannel 채널에 가입시킵니다.
bashCopy code
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizatio
ns/org2.example.com/users/Admin@org2.example.com/msp
CORE_PEER_ADDRESS=peer0.org2.example.com:7051 CORE_PEER_LOCALMSPID="Org2MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrgani
zations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt peer channel join –b mychannel.block
위 명령어는 CORE_PEER_MSPCONFIGPATH, CORE_PEER_ADDRESS, CORE_PEER_LOCALMSPID, CORE_PEER_TLS_ROOTCERT_FILE 4개의 환경변수를 설정하여, peer0.org2.example.com 피어를 mychannel 채널에 가입시킵니다.
peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME –f
./channel-artifacts/Org1MSPanchors.tx —tls --cafile
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/o
rderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
위 명령어는 mychannel 채널의 구성 업데이트를 수행합니다. 이때 사용되는 파일은 **Org1MSPanchors.tx**이며, 이 파일은 org1.example.com 조직에 속한 peer노드들에 대한 anchor peer 설정 정보를 가지고 있습니다. 업데이트된 채널 구성 정보를 orderer노드에게 전송합니다.
BlockChain Marbles
git clone <https://github.com/IBM-Blockchain-Archive/marbles.git>
먼저, git clone 명령어를 사용하여 BlockChain Marbles 코드를 클론합니다.
cd marbles
npm install
다음으로, 해당 코드 디렉토리로 이동하여 필요한 node 모듈을 설치합니다.
cd script
node install_chaincode.js
- 이후, script 폴더로 이동하여 체인코드를 설치합니다.
node instantiate_chaincode.js
체인코드 설치가 완료되면, 체인코드를 instantiate합니다.
gulp marble_local
마지막으로, 다시 marbles 폴더로 이동하여 위 명령어를 실행합니다
이는 해당 블록체인 네트워크가 로컬에서 동작하며, http://localhost:3001 주소로 접속하여 확인할 수 있습니다.
이로써 BlockChain Marbles 예제 코드를 실행하고 확인하는 과정이 완료됩니다.
'Infra > BlockChain' 카테고리의 다른 글
| IBM HyperLedger Fabric 자료 정리 (1) | 2024.04.25 |
|---|---|
| HyperLedger Fabric 1.4 설치 (0) | 2024.04.24 |
| 합의 알고리즘의 개념 (0) | 2024.04.24 |