Asset Treansfer Applicaiton
Hyperledger Fabric에서 공식으로 제공하는 자산 거래 튜토리얼 샘플을 통해 Application과 Chaincode와 상호작용 하는 방식을 숙지하여, 블록체인 네트워크의 Ledger에 있는 데이터를 관리하는 방법을 알 수 있다.
Application - 블록체인 네트워크를 호출하여 체인코드에 구현된 트랜잭션을 호출
Chaincode - 블록체인 네트워크의 Ledger와 상호작용을 포함하여 트랜잭션을 구현하는 스마트 컨트랙트
# 편의상 체인코드를 스마트 컨트랙트라 칭하겠습니다.
블록체인 네트워크 셋업
일단 기존에 블록체인 네트워크를 켜놓고 Down시키지 않은 상태일 수 있으므로 Down시킨다.
./network.sh down
'mychannel'이라는 채널이름을 블록체인 네트워크와 함께 킴
기존에 Test-network/Orginzaion/Cryptogen에 설계된 Orderer, Org1, Org2를 생성함
./network.sh up createChannel -c mychannel -ca
블록체인 체인코드 배포
명령어를 통해 go언어 기반의 체인코드 배포
chaincode-go/chaincode/smartcontract.go 대충 아래와 같은 식으로 구성되어 있다.
체인코드 배포 명령어
basic 체인코드 이름의 ../asset-transfer-basic/chaincode-go/ 경로 체인코드 실행
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go/ -ccl go
체인코드를 배포하면서 Org1, Org2의 MSP가 진짜인지 확인하면서 True값 으로 바뀌면서 승인이 떨어지는거 같음
Application(Application-Javascript) 실행
cd asset-transfer-basic/application-javascript
sudo npm install
npm install하면 아래처럼 생김
Error) Go를 실행할수 없다는 오류 환경변수 설정이 안된거 같다.
Error) npm install하는데 Sudo안붙이면 오류나더라..
Application(Application-Javascript) node app.js 실행
cd asset-transfer-basic/application-javascript //경로에서
node app.js
App.js 소스코드
node app.js하면 코드 실행되면서 체인코드에 기록된 함수들 불러와 실행시킴
코드간의 통신
1) 체인코드의 InitLefger 함수 실행
App.js
Smartcontract.go(체인코드)
콘솔값
2) 체인코드의 CreatAsset함수 실행
App.js
Smartcontract.go(체인코드)
콘솔값
App.js에 넣은 매개변수 값들이 Committed됨
값 Read해보니 반환한다.
첫 번째, Application enrolls the admin user
Applicaiotn에 공통으로 Profile을 연결할 경로를 지정하고, 해당 연결 프로필이 존재하는지 확인 후 지갑생성 위치 설정 후
관리자를 실질적으로 한번 등록함
1) 전체 코드
1-1) App.js의 ccp 출력, 메모리 내의 개체를 빌드해 연결 프로필 경로에 대한 정보를 얻음
블록체인 네트워크 구성 출력
1-2) 연결 프로필이 존재하는지 확인
1-3) 지갑을 생성할 위치를 기입하여 지갑을 생성
1-4) enrollAdmin() 실행되고 인증 기관에서 관리자 자격 증명이 생성됨
#1 wallet 디렉토리의 CA관리자의 자격증명을 저장함(wallet/admin.id)
#2 error) 네트워크를 끊었다가 다시 가져와서 다시 시작하기로 결정한 경우 자바스크립트 애플리케이션을 다시 실행하기 전에 지갑 폴더와 해당 ID를 삭제해야함, 그렇지 않으면 오류가 발생합니다.
테스트 네트워크가 중단될 때 인증 기관과 해당 데이터베이스가 중단되지만 원래 지갑은 여전히 application-javascript
디렉토리에 남아 있으므로 삭제해야 하기 때문에 발생
두 번째, Application registers and Enrolls an Application user
Application 사용자는 Admin계정을 활용하여 등록하며, 블록체인 네트워크와 상호 작용하는 데 사용할 앱 사용자 등록
2) 전체코드
2-2) 관리자 자격증명은 지갑에 있으므로, 관리자 사용자를 활용하여 블록체인 네트워크와 상호 작용하는데 사용할 앱 사용자를 등록Applicaiton에서 새 사용자가 추가될 때만 수행
이런식으로 새로운 appuser를 추가할 수 있음
세 번째, The sample application prepares a connection to the channel and smart contract
사용자가 Credential이 존재하고, 올바른 권한이 있을 경우 체인코들 호출할 수 있음(단, 채널이름과 컨트랙트의 이름을 참조한 후)
3) 전체코드
3-1) 네트워크 연결 설정
identity : org1UserId <- 사용자 계정 여기선 Appuser
asLocalhost : True값은 클라이언트가 다른 패브릭 노드와 동일한 네트워크에서 실행중이므로 Localhost로 연결하도록 지시
3-2) 채널 및 체인코드 연결
다수의 체인코드를 포함하고 있을때 특정 스마트 컨트랙트를 이름으로 지정할 수 있음
네 번째, the application initializes the ledger with some sample data
체인코드의 subitTransaction()함수와 evaluateTransaction()함수를 사용해 연결
3) 전체코드
submitTransaction('컨트랙트함수') : 컨트랙트 함수를 호출해 체인코드에 대해 필요한 인증 피어 세트를 찾고 필요한 수
의 피어에서 체인코드를 호출하고, 피어로부터 체인코드 승인결과를 수집해, 트랜잭션을 제출하는
말이 어렵다.. 정확하진 않지만 Ledger에 저장하거나 업데이트할 때 트랜잭션을 제출하는거로 생각하자
evaluateTransaction(컨트랙트함수") : 스마트 계약의 읽기 전용 호출을 사용하여 원장에서 가장 최근 데이터를 볼 수 있음
Finally, 체인코드 함수 실행
따라서, 체인코드 짜고 SDK연결한 후 아래명령어 실행하는 식으로 구성하면 Dapp 만들 수 있을거 같음
node app.js
'보안 및 블록체인 > 블록체인' 카테고리의 다른 글
하이퍼레저 패브릭(Hyperledger Fabric) v2.2 구축 - #2 채널구성 및 제네시스 블록 생성 (0) | 2022.07.11 |
---|---|
GO언어 필요한 내용 정리 (0) | 2022.06.27 |
하이퍼레저 패브릭(Hyperledger Fabric) v2.2 Tutorials - Network.sh 명령어 해석 (0) | 2022.06.08 |
하이퍼레저 패브릭(Hyperledger Fabric) CA, MSP #3 - Key Concept (0) | 2022.05.10 |
하이퍼레저 패브릭(Hyperledger Fabric) 용어 정리 #0 - Key Concept (0) | 2022.05.09 |