Boohyung's Gitbook
  • Introduction
  • Research
    • Byzantine Generals' Problem
    • Bitcoin P2P Network
    • Chapter 10. Networking
    • Hyperledger Caliper
    • The Operations Service
    • Project DYOR with Notion
    • zkSync 2.0 퍼블릭 테스트넷 사용해보기
  • Development
    • Building Your First Network: first-network
    • Building Your First Network: Run the tools
    • Writing Your First Application(fabcar)
    • Hyperledger Caliper Sample(caliper-benchmarks)
    • Hyperledger Fabric Operations Service Tutorial
    • Hyperledger Fabric Monitoring with Prometheus
Powered by GitBook
On this page
  • Notice
  1. Development

Writing Your First Application(fabcar)

Source: https://hyperledger-fabric.readthedocs.io/en/latest/write_first_app.html

PreviousBuilding Your First Network: Run the toolsNextHyperledger Caliper Sample(caliper-benchmarks)

Last updated 5 years ago

Notice

2020-02-11: Fabric v1.4 -> Farbic v2.0 기준으로 업데이트

Working Path: fabric-samples/fabcar

fabcar 어플리케이션을 실행하기 전에 네트워크를 세팅한다.

Set the HLF network
$ ./startFabric.sh

명령어를 실행하면 아래와 같은 화면이 출력된다. 컨테이너 생성 및 실행 -> 채널 생성 (mychannel로 설정되어 있음) -> 피어 참여 순으로 HLF 네트워크가 구성된다.

startFabric.sh 실행 중 마지막 화면에 Fabcar 어플리케이션을 설치하고 실행하기 위한 인스트럭션이 출력된다. 위 화면은 JavaScript용 인스트럭션이며 Java와 Typescript도 지원한다.

JavaScript 인스트럭션에 따라 Fabcar 어플리케이션을 설치 및 실행해보자. 실행 후 /javascript에 생성되는 파일 및 디렉토리는 아래와 같다.

Install the fabcar Dapp
$ 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의 개인키, 공개키, 인증서가 저장된다.

Register admin and user1
$ node enrollAdmin.js
$ node registerUser.js

mychannel의 fabcar 컨트랙트에 접근하여 원장에 등록된 차량의 정보를 모두 출력한다. (queryAllCars 함수를 호출)

Query all of the car information
$ node query.js

원장을 업데이트하기 위해서 invoke.js 파일을 일부 수정한다. 수정 위치는 44라인의 contract.submitTransaction()의 파라미터이다. 첫 번째 파라미터는 그대로 유지하고, 두 번째부터 차량 식별자, 제조사, 차종, 차 색상, 소유자 순으로 수정한다.

submitTransaction(): 특정한 트랜잭션을 제출하는 함수

createCar 트랜잭션은 5개의 파라미터를 필요로 함 ex: ('createCar', 'CAR12', 'Honda', 'Accord', 'Black', 'Tom')

Add car information
$ vi invoke.js

//invoke.js
44 await contract.submitTransaction('createCar', 'CAR10', 'Hyundai', 'Genesis', 'Black', 'Boohyung');

invoke.js를 저장 후 위에서 수정한 내용의 트랜잭션을 보내 공유 원장을 업데이트한다. 업데이트한 결과는 query.js를 실행시켜 아래와 같이 확인할 수 있다.

Update and query
$ node invoke.js
$ node query.js

fabcar 어플리케이션 실행 이후에는 docker 명령어로 실행 중인 네트워크를 삭제한다.

Remove running containers
$ docker rm -f $(docker ps -aq)
startFabric.sh (1)
startFabric.sh (2)
startFabric.sh (3)
Update result