하이퍼레저 패브릭/실습

Writing Your First Application - new

아메숑 2019. 3. 31. 10:41

Writing Your First Application – new

버전 1.4

./startFabric.sh javascript

네트워크 시작, fabcar 스마트 컨트랙스 설치 및 인스턴스화

 

이제부터 어플리케이션에 필요한 pre-requisites을 설치한다.

cd javascript

npm install

package.json에 있는 모듈, 패키지 설치

docker logs -f ca.example.com

새로운 터미널을 열고 입력하면 ca의 로그를 확인할 수 있다.

 

우리가 네트워크를 시작할 때 CAregister함으로써 admin 유저를 생성하였다. 이제 enroll.js를 이용해 admin유저의 인증서와 키를 생성할 것이다.

이 과정은 CSR(Certificate Signing Request)를 이용한다. CSR는 어플리케이션을 이용하여 공개키/개인키가 처음 생성되고 공개키는 CA로 전송하여 인코딩된 인증서를 수신한다. 이 세가지 증명서는 wallet 디렉토리에 저장되며, 그러므로 CA의 관리자로 임명된다.

node enrollAdmin.js

 

 

node registerUser.js

새로운 유저 user1를 등록(enroll)한다.

user1은 원장을 쿼리하고 업데이트하는데 사용된다.

adminenroll과 마찬가지로 CSR을 이용해 user1의 키와 인증서를 wallet디렉토리에 저장한다.

adminwallet에도 user1의 개인키가 저장된다.

 

블록체인 네트워크상의 모든 피어는 원장의 복사본을 호스트한다. 어플리케이션은 스마트 컨트랙트를 호출함으로써 가장 최신 원장을 쿼리한다.

node query.js

원장의 모든 자동차 목록을 반환한다.

이 프로그램은 원장에 액세스하기 위해 두번째 신원인 user1을 이용한다.

오류 발생

./startFabric.sh javascript 다시 실행

gedit node query.js

const result = await contract.evaluateTransaction('queryAllCars');

부분을

const result = await contract.evaluateTransaction('queryCar', 'CAR4');

로 바꾼다.

 

CAR4에 대한 정보만 반환

 

node invoke.js

원장 업데이트

ivoke.js 에서

await contract.submitTransaction('createCar', 'CAR12', 'Honda', 'Accord', 'Black', 'Tom');

CAR12에대한 정보를 원장에 추가했다. invokeevaluateTransactio API가 아닌 submitTransaction API를 사용한다.

query.js 에서

const result = await contract.evaluateTransaction('queryCar', 'CAR12');로 값을 변경하고 실행한다.

node query.js

 

 

invoke.js에서

await contract.submitTransaction('changeCarOwner', 'CAR12', 'Dave'); 로 값을 변경하고 다시 실행하면 CAR12의 소유자를 Dave로 변경한다.

node invoke.js

 

 

node query.js

차량의 소유자가 변경된 것을 확인할 수 있다.