Writing Your First Application(fabcar)
Source: https://hyperledger-fabric.readthedocs.io/en/latest/write_first_app.html
Notice
2020-02-11: Fabric v1.4 -> Farbic v2.0 기준으로 업데이트
Working Path: fabric-samples/fabcar
fabcar 어플리케이션을 실행하기 전에 네트워크를 세팅한다.
$ ./startFabric.sh
명령어를 실행하면 아래와 같은 화면이 출력된다. 컨테이너 생성 및 실행 -> 채널 생성 (mychannel로 설정되어 있음) -> 피어 참여 순으로 HLF 네트워크가 구성된다.



startFabric.sh 실행 중 마지막 화면에 Fabcar 어플리케이션을 설치하고 실행하기 위한 인스트럭션이 출력된다. 위 화면은 JavaScript용 인스트럭션이며 Java와 Typescript도 지원한다.
JavaScript 인스트럭션에 따라 Fabcar 어플리케이션을 설치 및 실행해보자. 실행 후 /javascript에 생성되는 파일 및 디렉토리는 아래와 같다.
$ cd javascript
$ npm install
enrollAdmin.js: Admin 등록
invoke.js: 원장 업데이트
/node_modules: npm에 의해 설치된 모듈 및 패키지
package.json: fabcar 어플리케이션 정보
query.js: 원장 쿼리
registerUser.js: User 등록
wallet: admin과 user의 Credentials
HLF 네트워크에 Admin과 User를 등록한다. 명령어 실행 후 /wallet에 admin과 user1의 개인키, 공개키, 인증서가 저장된다.
$ node enrollAdmin.js
$ node registerUser.js
mychannel의 fabcar 컨트랙트에 접근하여 원장에 등록된 차량의 정보를 모두 출력한다. (queryAllCars 함수를 호출)
$ node query.js
원장을 업데이트하기 위해서 invoke.js 파일을 일부 수정한다. 수정 위치는 44라인의 contract.submitTransaction()의 파라미터이다. 첫 번째 파라미터는 그대로 유지하고, 두 번째부터 차량 식별자, 제조사, 차종, 차 색상, 소유자 순으로 수정한다.
submitTransaction(): 특정한 트랜잭션을 제출하는 함수
createCar 트랜잭션은 5개의 파라미터를 필요로 함 ex: ('createCar', 'CAR12', 'Honda', 'Accord', 'Black', 'Tom')
$ vi invoke.js
//invoke.js
44 await contract.submitTransaction('createCar', 'CAR10', 'Hyundai', 'Genesis', 'Black', 'Boohyung');
invoke.js를 저장 후 위에서 수정한 내용의 트랜잭션을 보내 공유 원장을 업데이트한다. 업데이트한 결과는 query.js를 실행시켜 아래와 같이 확인할 수 있다.
$ node invoke.js
$ node query.js

fabcar 어플리케이션 실행 이후에는 docker 명령어로 실행 중인 네트워크를 삭제한다.
$ docker rm -f $(docker ps -aq)
Last updated