Hyperledger

[Hyperledger] p.51 Balance Transfer 예제 따라하기 (CentOS 7)

bocoder
728x90
반응형

자 그럼, ubuntu 18.04 에서 막혔던 부분을,, CentOS 7 에서 다시 해보자

page.51 Balance Transfer 예제 따라하기

=================================================================

0. 환경설정

#0-0. 실행중인 docker 가 있다면 다 멈추고 삭제
docker-compose down
docker rm $(docker ps -a -q)

#0-1. 백그라운드에서 네트워크 구동
cd /home/asd/go/src/github.com/hyperledger/fabric-samples/balance-transfer/artifacts
docker-compose -f ./docker-compose.yaml up -d

# 0-2. fabric-client fabric-ca-client 노드 모듈 설치
cd /home/asd/go/src/github.com/hyperledger/fabric-samples/balance-transfer
npm install

# 0-3. 포트 지정 및 app.js 구동
port=4000 node app

# 0-4. 터미털 새 창 생성 시, reboot 시와 마찬가지로 아래 명령어 실행
source /etc/environment
source /etc/profile.d/path.sh

1. 멤버와 조직 등록

# jq 설치
curl -L https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 -o /usr/local/bin/jq
chmod a+x /usr/local/bin/jq

# 멤버 및 조직 등록, TOKEN 값 설정
curl -s -X POST http://localhost:4000/users -H "content-type: application/x-www-form-urlencoded" -d 'username=Jim&orgName=Org1'
ORG1_TOKEN=$(echo $ORG1_TOKEN | jq ".token" | sed "s/\"//g")

=======================미동작============================

# ubuntu와 동일하게 위 명령어로 TOKEN값이 설정되지 않는다... 그냥 직접 "token" 결과값을 복사해서 넣어주자 (개인별로 다름)

ORG1_TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NzkwMTg4MTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Ik9yZzEiLCJpYXQiOjE1Nzg5ODI4MTF9.w_qiIWNF58pd4fgAzbIjEUrrRqEERjCrjOFlHHdvpIQ"

========================================================

curl -s -X POST http://localhost:4000/users -H "content-type: application/x-www-form-urlencoded" -d 'username=Barry&orgName=Org2'
ORG2_TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NzkwMTkyNjksInVzZXJuYW1lIjoiQmFycnkiLCJvcmdOYW1lIjoiT3JnMiIsImlhdCI6MTU3ODk4MzI2OX0.XSc0-hEes8zTkyZ6Uw7jFp20Zu15AE4u84FIbywCPpI"

2. 채널 생성

curl -s -X POST http://localhost:4000/channels -H "authorization: Bearer $ORG1_TOKEN" -H "content-type: application/json" -d '{
"channelName":"mychannel",
"channelConfigPath":"../artifacts/channel/mychannel.tx"
}'

3. 채널에 조인하기

----->> ubuntu에서 디버깅에 실패했던 부분인데, 내가 뭔가 잘못했었나 보다..

#Org1의 peer0, peer1을 mychannel에 조인
curl -s -X POST http://localhost:4000/channels/mychannel/peers \
-H "authorization: Bearer $ORG1_TOKEN" \
-H "content-type: application/json" \
-d '{ "peers": ["peer0.org1.example.com","peer1.org1.example.com"]}'

#Org2의 peer0, peer1을 mychannel에 조인
curl -s -X POST http://localhost:4000/channels/mychannel/peers \
-H "authorization: Bearer $ORG2_TOKEN" \
-H "content-type: application/json" \
-d '{ "peers": ["peer0.org2.example.com","peer1.org2.example.com"]}'

4. 피어에 체인코드 설치하기

# 파일의 위치 및 언어 타입 정의 (혹시 모르니 /etc/environment에 추가해버리자)
sudo vi /etc/environment
export CC_SRC_PATH="github.com/example_cc/go"
export LANGUAGE="golang"

#Org1 peer들에게 체인코드설치
curl -s -X POST http://localhost:4000/chaincodes \
-H "authorization: Bearer $ORG1_TOKEN" \
-H "content-type: application/json" -d "{
"peers": ["peer0.org1.example.com","peer1.org1.example.com"],
"chaincodeName":"mycc",
"chaincodePath":"$CC_SRC_PATH",
"chaincodeType": "$LANGUAGE",
"chaincodeVersion":"v0"
}"

 

=====================에러 발생 =========================

> Unexpected token p in JSON at position 2 at JSON.parse

책에는 \표시가 빠져있어서 안되었다... 아래 코드로 해결

큰따옴표를 사용할 때 유의하자 ..

curl -s -X POST http://localhost:4000/chaincodes \
-H "authorization: Bearer $ORG1_TOKEN" \
-H "content-type: application/json" -d "{
\"peers\": [\"peer0.org1.example.com\",\"peer1.org1.example.com\"],
\"chaincodeName\":\"mycc\",
\"chaincodePath\":\"$CC_SRC_PATH\",
\"chaincodeType\": \"$LANGUAGE\",
\"chaincodeVersion\":\"v0\"
}"

======================================================

#Org2 peer들에게 체인코드설치
curl -s -X POST http://localhost:4000/chaincodes \
-H "authorization: Bearer $ORG2_TOKEN" \
-H "content-type: application/json" -d "{
\"peers\": [\"peer0.org2.example.com\",\"peer1.org2.example.com\"],
\"chaincodeName\":\"mycc\",
\"chaincodePath\":\"$CC_SRC_PATH\",
\"chaincodeType\": \"$LANGUAGE\",
\"chaincodeVersion\":\"v0\"
}"

#peer 컨테이너에서 Chaincode 이름 및 버전 확인 (mycc.v0)
docker exec -it afc03130611b bash
cd /var/hyperledger/production/chaincodes

5. 설치된 체인코드를 초기화

curl -s -X POST \
http://localhost:4000/channels/mychannel/chaincodes \
-H "authorization: Bearer $ORG1_TOKEN" \
-H "content-type: application\json" \
-d "{
\"chaincodeName\":\"mycc\",
\"chaincodeVersion\":\"v0\",
\"chaincodeType\": \"$LANGUAGE\",
\"args\":[\"a\",\"100\",\"b\",\"200\"]
}"

 

========================== 에러 발생 ====================================

[DEBUG] SampleWebApp - ------>>>>>> new request for /channels/mychannel/chaincodes

[DEBUG] SampleWebApp - Decoded from JWT token: username - Jim, orgname - Org1

[DEBUG] SampleWebApp - ==================== INSTANTIATE CHAINCODE ==================

[DEBUG] SampleWebApp - peers : undefined

[DEBUG] SampleWebApp - channelName : mychannel

[DEBUG] SampleWebApp - chaincodeName : undefined

[DEBUG] SampleWebApp - chaincodeVersion : undefined

[DEBUG] SampleWebApp - chaincodeType : undefined

[DEBUG] SampleWebApp - fcn : undefined

[DEBUG] SampleWebApp - args : undefined

====================================================================

체인코드 초기화와 유사한 소스내용인데 디버깅 메세지가 뜬다... 내가 여러번 시도해서 undefined가 초기화가 되었다는 건가? ...

는 아닌 것 같다. docker에 초기화된 체인코드가 컨테이너에 존재하지 않는다.

여기까지만 하고 남아있는 두 단계는 생략하기로 한다.

> 6. 호출을 이용한 체인코드의 값 변경

> 7. 쿼리를 이용한 변경된 값 확인

728x90
반응형