μ•ˆλ…•ν•˜μ„Έμš”?

κ·Έ λ™μ•ˆ “λ¨Όμ € μ‹œμž‘ν•΄ λ³΄λŠ” 블둝체인” μ‹œλ¦¬μ¦ˆλ₯Ό ν†΅ν•΄μ„œ μ˜€ν”ˆμ†ŒμŠ€ 블둝체인 ν”„λ‘œμ νŠΈμΈ Hyperledger Fabric 의 v0.6.x 버전을 μ΄μš©ν•˜μ—¬ 초기 블둝체인 λ„€νŠΈμ›Œν¬ ν™˜κ²½μ„ λ§Œλ“€κ³  μ²΄μΈμ½”λ“œλ₯Ό λ””ν”Œλ‘œμ΄ν•˜λ©°, ν…ŒμŠ€νŠΈλ₯Ό ν•΄λ΄€μŠ΅λ‹ˆλ‹€.

이번 κΈ€ λΆ€ν„°λŠ” Hyperledger Fabric의 정식버전이 될 v1.0을 κΈ°μ€€μœΌλ‘œ μ„€λͺ…을 ν•˜κ² μŠ΅λ‹ˆλ‹€.
Fabric v1.0은 이전 버전에 λŒ€λΉ„ν•΄ μ•„ν‚€ν…μ²˜μ— λ§Žμ€ λ³€ν™”κ°€ μžˆμŠ΅λ‹ˆλ‹€.
이전 λ²„μ „μ—μ„œλŠ” Validating Peerκ°€ ν•˜λ˜ 역할을 Endorser, Orderer 등이 λ‚˜λˆ μ„œ ν•˜κ²Œ 되며, REST API κ°€ 없어지고 grpcλ₯Ό 톡해 블둝체인 λ„€νŠΈμ›Œν¬μ™€ μΈν„°νŽ˜μ΄μŠ€ ν•΄μ•Ό ν•˜λŠ” λ“± λ§Žμ€ 뢀뢄이 λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
μƒˆλ‘œμš΄ λ²„μ „μ—μ„œμ˜ λŒ€ν‘œμ μΈ μž₯점은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • Chaincode trust flexibility
  • Scalability
  • Confidentiality
  • Consensus modularity

이 λ¬Έμ„œμ—μ„œλŠ” λ³€ν™”λœ 아킀텍쳐에 λŒ€ν•΄μ„œλŠ” μ„€λͺ…ν•˜μ§€ μ•Šκ³  λ°”λ‘œ κ°œλ°œν™˜κ²½ ꡬ성을 μœ„ν•œ 방법에 λŒ€ν•΄μ„œλ§Œ κ°„λ‹¨νžˆ μ„€λͺ…ν•©λ‹ˆλ‹€.

Fabric v1.0 μ•„ν‚€ν…μ²˜μ— λŒ€ν•΄μ„œλŠ” λ‹€μŒμ— λ‹€μ‹œ λ‹€λ£¨κ³ μž ν•©λ‹ˆλ‹€.
λ³€ν™”λœ μ•„ν‚€ν…μ²˜μ™€ λ™μž‘μ— λŒ€ν•΄μ„œλŠ” λ‹€μŒμ˜ λ§ν¬μ—μ„œ 확인 λ°”λžλ‹ˆλ‹€. Fabric v1.0 μ•„ν‚€ν…μ²˜ μ„€λͺ…

1. κΈ°λ³Έ ν™˜κ²½ μ€€λΉ„

  • Go – μ΅œμ‹ λ²„μ „
  • Docker – v1.13 이상
  • Docker Compose – v1.8 이상
  • Node.js + NPM – node v6.9.5, npm v3.10.10
  • xcode – Mac μ‚¬μš©ν•  경우 xcode ν•„μš”
  • nvm – nodejs κ°€ 이미 μ„€μΉ˜λ˜μ–΄ μžˆμ–΄μ„œ 버전 관리가 ν•„μš”ν•  경우 ν•„μš”(Mac μ—μ„œ ν…ŒμŠ€νŠΈ κ²°κ³Ό node v6.9.5 버전일 경우 λͺ¨λ“  과정이 μ •μƒμ μ΄μ—ˆμŠ΅λ‹ˆλ‹€.)

1.1 nodejs, npm 버전확인

node 버전은 6.9.5 이상이 λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
node -v
npm 버전은 3.10.10 이상이 λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
npm -v

1.2 nvm 을 μ΄μš©ν•œ node v6.9.5 μ„€μΉ˜

λ‹€μŒμ˜ λͺ…λ Ήμ–΄λ₯Ό ν†΅ν•΄μ„œ μ„€μΉ˜ν•©λ‹ˆλ‹€.

nvm install v6.9.5

2. Hyperledger Fabric v1.0 도컀 이미지 λΉŒλ“œ

μ λ‹Ήν•œ μœ„μΉ˜μ—μ„œ κ°œλ°œν™˜κ²½ μ…‹νŒ…μ„ μœ„ν•œ 디렉토리λ₯Ό λ§Œλ“€μ–΄μ„œ λ‹€μŒμ˜ λͺ…령을 ν†΅ν•΄μ„œ Fabric μ•„ν‹°νŒ©νŠΈ 및 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œλ“€μ„ λ‹€μš΄ λ°›μŠ΅λ‹ˆλ‹€.

mkdir -p < 둜컬 κ°œλ°œν™˜κ²½ 경둜 >/hackfest
cd < 둜컬 κ°œλ°œν™˜κ²½ 경둜 >/hackfest
curl -L https://raw.githubusercontent.com/hyperledger/fabric/master/examples/sfhackfest/sfhackfest.tar.gz -o sfhackfest.tar.gz 2> /dev/null;  tar -xvf sfhackfest.tar.gz

μœ„μ˜ λͺ…령이 μ •μƒμ μœΌλ‘œ μ™„λ£Œλ˜μ—ˆμœΌλ©΄ λ‹€μŒκ³Ό 같이 κ΄€λ ¨ νŒŒμΌλ“€μ΄ 압좕이 풀어진 ν˜•νƒœλ‘œ μ‘΄μž¬ν•©λ‹ˆλ‹€.

λ‹€μŒμœΌλ‘œ hyperledger/fabric-ccenv 이미지λ₯Ό λΉŒλ“œν•©λ‹ˆλ‹€.
(ν•„μš”ν•œ 도컀 이미지 λ‹€μš΄λ‘œλ“œ 및 λΉŒλ“œ μž‘μ—…μ„ μ§„ν–‰ν•©λ‹ˆλ‹€. μ•½κ°„μ˜ μ‹œκ°„μ΄ ν•„μš”ν•©λ‹ˆλ‹€.)

docker-compose -f docker-compose-gettingstarted.yml build

μœ„μ˜ 이미지 λΉŒλ“œ μž‘μ—…μ΄ μ •μƒμ μœΌλ‘œ μ™„λ£Œλ˜μ—ˆμœΌλ©΄ λ‹€μŒμ˜ λͺ…λ Ήμ–΄λ₯Ό ν†΅ν•΄μ„œ 블둝체인 λ„€νŠΈμ›Œν¬λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.
(λΉŒλ“œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ ν•„μš”ν•œ 도컀 이미지듀을 λ‹€μš΄λ‘œλ“œ λ°›μ•„μ„œ μ»¨ν…Œμ΄μ„œ 생성후 μ‹œμž‘ν•©λ‹ˆλ‹€.)

docker-compose -f docker-compose-gettingstarted.yml up -d

이제, μ •μƒμ μœΌλ‘œ λΉŒλ“œλ˜μ–΄ μ»¨ν…Œμ΄λ„ˆ 싀행이 λ˜μ—ˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. λ‹€μŒ κ·Έλ¦Όκ³Ό 같이 6개의 μ»¨ν…Œμ΄λ„ˆκ°€ μƒμ„±λ˜λ©΄ λ©λ‹ˆλ‹€.

docker ps

λ‹€μŒμœΌλ‘œλŠ” 채널이 생성과 ν”Όμ–΄ 연결이 μ •μƒμ μœΌλ‘œ μ™„λ£Œλ˜μ—ˆλŠ”μ§€ ν™•μΈν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. λ‹€μŒμ˜ λͺ…λ Ήκ³Ό 같이 cli μ»¨ν…Œμ΄λ„ˆλ‘œ μ ‘μ†ν•˜μ—¬μ„œ “results.txt” 파일의 λ‚΄μš©μ„ ν™•μΈν•©λ‹ˆλ‹€.

채널과 ν”Όμ–΄ 등에 λŒ€ν•œ μ„€λͺ…은 λ‹€μŒ Fabric v1.0 아킀텍쳐 μ„€λͺ… λ•Œ ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

docker exec -it cli bash

cli μ»¨ν…Œμ΄λ„ˆλ‘œ μ ‘μ†λ˜μ—ˆμœΌλ©΄ λ‹€μŒκ³Ό 같이 터미널에 ν”„λ‘¬ν”„νŠΈκ°€ λ–¨μ–΄μ§‘λ‹ˆλ‹€.

/opt/gopath/src/github.com/hyperledger/fabric/peer #

“results.txt” νŒŒμΌμ„ ν™•μΈν•΄μ„œ λ‹€μŒκ³Ό 같은 메세지가 μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

more results.txt

정상 μ²˜λ¦¬λ˜μ—ˆμœΌλ©΄ μ•„λž˜μ˜ 메세지가 λ³΄μž…λ‹ˆλ‹€.
SUCCESSFUL CHANNEL CREATION
SUCCESSFUL JOIN CHANNEL on PEER0
SUCCESSFUL JOIN CHANNEL on PEER1
SUCCESSFUL JOIN CHANNEL on PEER2

Genesis block을 ν™•μΈν•˜κΈ° μœ„ν•΄μ„œλŠ” μ•„λž˜μ˜ νŒŒμΌμ„ ν™•μΈν•©λ‹ˆλ‹€.

more myc1.block

3. SDK λ₯Ό μ΄μš©ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈ ν…ŒμŠ€νŠΈ

Fabric v1.0을 μ΄μš©ν•˜μ—¬ 기본적인 블둝체인 λ„€νŠΈμ›Œν¬κ°€ μ‹€ν–‰ λ˜μ—ˆμœΌλ©΄ λ‹€μŒμœΌλ‘œ SDKλ₯Ό μ΄μš©ν•˜μ—¬ μ²΄μΈμ½”λ“œ deploy, invoke, query κ°€ μ •μƒλ™μž‘ν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.
λ¨Όμ €, ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ nodejs μ†ŒμŠ€λ₯Ό λ‹€μš΄λ°›μŠ΅λ‹ˆλ‹€.

curl -OOOOOO https://raw.githubusercontent.com/hyperledger/fabric-sdk-node/master/examples/balance-transfer/{config.json,deploy.js,helper.js,invoke.js,query.js,package.json}

μ†ŒμŠ€ λ‹€μš΄λ‘œλ“œ μ™„λ£Œκ°€ λ˜μ—ˆμœΌλ©΄ λ‹€μŒμ˜ λͺ…령을 ν†΅ν•΄μ„œ ν•„μš”ν•œ νŒ¨ν‚€μ§€λ“€μ„ μ„€μΉ˜ν•©λ‹ˆλ‹€.

npm install

3.1 μ²΄μΈμ½”λ“œ deploy, invoke, query ν…ŒμŠ€νŠΈ

SDK 및 ν΄λΌμ΄μ–ΈνŠΈ μ†ŒμŠ€κ°€ μ€€λΉ„κ°€ λ˜μ—ˆμœΌλ©΄ μ²΄μΈμ½”λ“œλ₯Ό λ””ν”Œλ‘œμ΄ν•˜μ—¬ 정상적인 λ™μž‘μ„ ν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.
ν…ŒμŠ€νŠΈμ˜ λ‚΄μš©μ€ “λ¨Όμ € μ‹œμž‘ν•˜λŠ” 블둝체인” 의 μ²΄μΈμ½”λ“œ ν…ŒμŠ€νŠΈμ™€ λ™μΌν•©λ‹ˆλ‹€.
λ‹€λ§Œ, Fabric v1.0μ—μ„œλŠ” REST API κ°€ μ—†μ–΄μ‘ŒμœΌλ―€λ‘œ SDKλ₯Ό ν†΅ν•΄μ„œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μž‘μ„±ν•˜μ—¬μ•Όν•©λ‹ˆλ‹€.

3.1.1 Deploy

μ²΄μΈμ½”λ“œλ₯Ό λ””ν”Œλ‘œμ΄ν•˜λŠ” κ³Όμ •μ—μ„œ argumentλ₯Ό λ„˜κΈ°λŠ”λ° a = 100, b = 200 을 μ΄ˆκΈ°κ°’μœΌλ‘œ μž…λ ₯ν•©λ‹ˆλ‹€.

  • Mac
GOPATH=$PWD node deploy.js
  • Windows
SET GOPATH=%cd%
node deploy.js

3.1.2 Invoke

Invoke μ—μ„œλŠ” a 의 κ°’ 100을 b둜 μ΄λ™ν•©λ‹ˆλ‹€.

node invoke.js

3.1.3 Qeury

b의 값을 μ‘°νšŒν•©λ‹ˆλ‹€.

node query.js

λͺ¨λ‘ μ •μƒμ μœΌλ‘œ λ™μž‘ν•˜μ‹œλ‚˜μš”?
이전 버전에 λΉ„ν•΄μ„œλŠ” μƒλ‹Ήνžˆ νŽΈν•˜κ²Œ κ°œλ°œν™˜κ²½μ„ ꡬ성할 수 μžˆλ„λ‘ Fabric μ•„ν‹°νŒ©νŠΈ 듀을 λ°°ν¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
λ¬Όλ‘ , μ‹€μ œ μ μš©ν•˜κ³ μž ν•˜λŠ” λͺ©μ μ— λ§žλŠ” 블둝체인 λ„€νŠΈμ›Œν¬ ν™˜κ²½μ„ κ΅¬μ„±ν•˜κΈ° μœ„ν•΄μ„œλŠ” μƒμ„Έν•œ μ„€μ • 방법을 μ•Œκ³  μžˆμ–΄μ•Ό ν•˜κ² μ§€λ§Œ, 둜컬 κ°œλ°œν™˜κ²½μ„ μœ„ν•΄μ„œλŠ” 크게 무리가 μ—†μ–΄ λ³΄μž…λ‹ˆλ‹€.
Fabric v1.0이 μ•„ν‚€ν…μ²˜μ™€ νŠΈλžœμž­μ…˜μ˜ 절차 등이 λͺ¨λ‘ λ³€κ²½λ˜μ–΄μ„œ λ§Žμ€ λΆ€λΆ„μ—μ„œ μ„€λͺ…을 ν•΄μ•Ό ν•  ν•„μš”μ„±μ΄ μžˆμ–΄λ³΄μž…λ‹ˆλ‹€.
μ°¨κ·Όμ°¨κ·Ό λ¬Έμ„œλ₯Ό 올릴 μ˜ˆμ •μ΄λ‹ˆ λ§Žμ€ κΈ°λŒ€ λ°”λžλ‹ˆλ‹€.