Catalog
  1. 1. Commercial paper tutorial
    1. 1.1. 네트워크 생성
    2. 1.2. MagnetoCorp 로 작업
    3. 1.3. 스마트 컨트랙트
commercial-paper-v1.4

Commercial paper tutorial

원본

이 튜토리얼은 Commercial paper 예제 어플리케이션과 스마트컨트랙트를 설치하고 사용하는 법에 대해 다룹니다.
업무 중심의 주제이기 때문에 Commercial paper 예제의 개념보다는 절차에 초점을 맞춰 설명합니다. 개념을 좀 더 자세히 이해하고 싶다면 Developing Applications 를 보세요.

이 튜토리얼에서 MagnetoCorp와 DigiBank 두 기관은 서로 Hyperledger Fabric 블록체인 네트워크인 PaperNet을 이용해서 상업 어음을 거래합니다.

먼저 basic network를 실행하면 MagnetoCorp의 직원인 Isabella의 역할을 대신해서 상업 어음을 발행할 것입니다. 그런 다음 역할을 바꿔서 DigiBank의 직원인 Balaji가 되어 이익을 조금 취하기 위해서 상업 어음을 구매하고, 일정 기간 들고 있다가 MargnetoCorp로 상환하게 될 것입니다.

하이퍼레저 패브릭 네트워크에서 두 개의 다른 기관이 독립적으로 일하지만, 서로 합의된 규칙에 따라 협력하는 것이 어떤 것인지 이해할 수 있도록 설계된 다음 단계를 개발자, 사용자, 관리자 역할로 수행하게 될 것입니다.

  • 환경 구축과 샘플 다운로드
  • 네트워크 생성
  • 스마트 컨트랙트의 구조 이해하기
  • MagnetoCorp로 동작해서 스마트 컨트랙트를 설치하고 인스턴스화 하기
  • MagentoCorp 어플리케이션의 구조와 종속성 이해하기
  • Wallet과 Identities 설정하기
  • 상업 어음을 발행하기 위해서 MagnetoCorp 어플리케이션 실행하기
  • DigiBank 어플리케이션에서 스마트 컨트랙트를 어떻게 사용하는지 이해하기
  • DigiBank 관점에서 상업 어음을 구매하고 상환하는 어플리케이션을 실행하기

네트워크 생성

이 튜토리얼은 basic network를 사용하고 있지만, 곧 Papernet의 multi-organization 구조를 더 잘 반영하도록 업데이트 할 것입니다. 지금은 이 네트워크로도 어떻게 어플리케이션과 스마트컨트랙트를 개발하는지 보여주기에 충분합니다.

Hyperledger Fabric basic network는 peer와 그 peer의 ledger database, orderer, CA로 구성되어 있고, 이 컴포넌트들은 docker container로 동작합니다. 개발 환경에서 Organization은 일반적으로 다른 시스템과 공유되는 예제의 CA를 사용합니다.

fabric-samples/basic-network 디렉토리에 있는 커맨드와 설정 파일을 이용해서 basic network를 관리할 수 있습니다.

start.sh 쉘 스크립트로 로컬 환경에서 네트워크를 실행해 봅시다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$ cd fabric-samples/basic-network
$ ./start.sh

docker-compose -f docker-compose.yml up -d ca.example.com orderer.example.com peer0.org1.example.com couchdb
Creating network "net_basic" with the default driver
Pulling ca.example.com (hyperledger/fabric-ca:)...
latest: Pulling from hyperledger/fabric-ca
3b37166ec614: Pull complete
504facff238f: Pull complete
(...)
Pulling orderer.example.com (hyperledger/fabric-orderer:)...
latest: Pulling from hyperledger/fabric-orderer
3b37166ec614: Already exists
504facff238f: Already exists
(...)
Pulling couchdb (hyperledger/fabric-couchdb:)...
latest: Pulling from hyperledger/fabric-couchdb
3b37166ec614: Already exists
504facff238f: Already exists
(...)
Pulling peer0.org1.example.com (hyperledger/fabric-peer:)...
latest: Pulling from hyperledger/fabric-peer
3b37166ec614: Already exists
504facff238f: Already exists
(...)
Creating orderer.example.com ... done
Creating couchdb ... done
Creating ca.example.com ... done
Creating peer0.org1.example.com ... done
(...)
2018-11-07 13:47:31.634 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2018-11-07 13:47:31.730 UTC [channelCmd] executeJoin -> INFO 002 Successfully submitted proposal to join channel

docker-compose -f docker-compose.yml up -d ca.example.com... 명령어가 DockerHub로부터 어떻게 4개의 하이퍼레저 패브릭 컨테이너 이미지를 가져오고 실행시키는 지 주목해주세요. 이 컨테이너들은 하이퍼레저 패브릭 컴포넌트에 대한 소프트웨어의 최신 버전을 가지고 있습니다. basic-network 디렉토리를 자유롭게 살펴보세요. 이 튜토리얼에서 많은 컨텐츠를 사용할 것입니다.

docker ps 명령을 이용해서 실행중인 basic-network 컴포넌트(docker container) 목록을 확인할 수 있습니다.

1
2
3
4
5
6
7
$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ada3d078989b hyperledger/fabric-peer "peer node start" About a minute ago Up About a minute 0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp peer0.org1.example.com
1fa1fd107bfb hyperledger/fabric-orderer "orderer" About a minute ago Up About a minute 0.0.0.0:7050->7050/tcp orderer.example.com
53fe614274f7 hyperledger/fabric-couchdb "tini -- /docker-ent…" About a minute ago Up About a minute 4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp couchdb
469201085a20 hyperledger/fabric-ca "sh -c 'fabric-ca-se…" About a minute ago Up About a minute 0.0.0.0:7054->7054/tcp ca.example.com

이 컨테이너들은 net_basic 이라는 도커 네트워크를 구성합니다. docker network 명령을 사용하여 네트워크를 볼 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ docker network inspect net_basic

{
"Name": "net_basic",
"Id": "62e9d37d00a0eda6c6301a76022c695f8e01258edaba6f65e876166164466ee5",
"Created": "2018-11-07T13:46:30.4992927Z",
"Containers": {
"1fa1fd107bfbe61522e4a26a57c2178d82b2918d5d423e7ee626c79b8a233624": {
"Name": "orderer.example.com",
"IPv4Address": "172.20.0.4/16",
},
"469201085a20b6a8f476d1ac993abce3103e59e3a23b9125032b77b02b715f2c": {
"Name": "ca.example.com",
"IPv4Address": "172.20.0.2/16",
},
"53fe614274f7a40392210f980b53b421e242484dd3deac52bbfe49cb636ce720": {
"Name": "couchdb",
"IPv4Address": "172.20.0.3/16",
},
"ada3d078989b568c6e060fa7bf62301b4bf55bed8ac1c938d514c81c42d8727a": {
"Name": "peer0.org1.example.com",
"IPv4Address": "172.20.0.5/16",
}
},
"Labels": {}
}

MagnetoCorp 로 작업

PaperNet의 MagnetoCorp 컴포넌트들을 모니터링하기 위해서 관리자는 logspout tool을 사용하여 도커 컨테이너들에게서 집계된 출력을 볼 수 있습니다. 다양한 출력 스트림을 한 곳에 모아 하나의 창에서 무슨 일이 일어나고 있는지 쉽게 볼 수 있게 해주기 때문에 관리자가 스마트 컨트랙트를 실행할 때나, 개발자가 스마트 컨트랙트를 실행할 때 매우 유용합니다.

이제 PaperNet을 MagnetoCorp 관리자로 모니터링해 봅시다. fabric-samples 디렉토리에서 새 창을 열고 monitordocker.sh 스크립트를 실행하여 도커 네트워크인 net_basic과 연결된 PaperNet 도커 컨테이너에 대한 logspout tool을 시작하세요.

1
2
3
4
5
6
7
8
9
(magnetocorp admin)$ cd commercial-paper/organization/magnetocorp/configuration/cli/
(magnetocorp admin)$ ./monitordocker.sh net_basic
...
latest: Pulling from gliderlabs/logspout
4fe2ade4980c: Pull complete
decca452f519: Pull complete
(...)
Starting monitoring on all containers on the network net_basic
b7f3586e5d0233de5a454df369b8eadab0613886fc9877529587345fc01a3582

만약 monitordocker.sh의 기본 포트 번호가 이미 사용 중인 경우에는 아래의 명령으로 포트번호를 지정해줄 수 있습니다.

1
(magnetocorp admin)$ ./monitordocker.sh net_basic <port_number>

이 창에서는 이제 도커 컨테이너들로부터 나오는 출력을 보여주는 용도로 사용하기 때문에, MagnetoCorp의 관리자가 이 네트워크와 상호작용할 수 있도록 다른 터미널 창을 실행해주세요.

PaperNet과 상호작용하기 위해서 MagnetoCorp의 관리자는 Hyperledger Fabric peer 명령을 사용해야 합니다. hyperledger/fabric-tools 도커 이미지에 이미 개발되어 있어 사용할 수 있습니다.

docker-compose 명령을 사용하여 관리자용 MagnetoCorp 전용 도커 컨테이너를 실행하세요.

1
2
3
4
5
6
7
8
9
10
(magnetocorp admin)$ cd commercial-paper/organization/magnetocorp/configuration/cli/
(magnetocorp admin)$ docker-compose -f docker-compose.yml up -d cliMagnetoCorp

Pulling cliMagnetoCorp (hyperledger/fabric-tools:)...
latest: Pulling from hyperledger/fabric-tools
3b37166ec614: Already exists
(...)
Digest: sha256:058cff3b378c1f3ebe35d56deb7bf33171bf19b327d91b452991509b8e9c7870
Status: Downloaded newer image for hyperledger/fabric-tools:latest
Creating cliMagnetoCorp ... done

다시 한 번 hyperledger/fabric-tools 도커 이미지가 Docker Hub에서 검색되어 네트워크에 추가되었는지 확인해보세요.

1
2
3
4
5
6
7
8
9
(magnetocorp admin)$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
562a88b25149 hyperledger/fabric-tools "/bin/bash" About a minute ago Up About a minute cliMagnetoCorp
b7f3586e5d02 gliderlabs/logspout "/bin/logspout" 7 minutes ago Up 7 minutes 127.0.0.1:8000->80/tcp logspout
ada3d078989b hyperledger/fabric-peer "peer node start" 29 minutes ago Up 29 minutes 0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp peer0.org1.example.com
1fa1fd107bfb hyperledger/fabric-orderer "orderer" 29 minutes ago Up 29 minutes 0.0.0.0:7050->7050/tcp orderer.example.com
53fe614274f7 hyperledger/fabric-couchdb "tini -- /docker-ent…" 29 minutes ago Up 29 minutes 4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp couchdb
469201085a20 hyperledger/fabric-ca "sh -c 'fabric-ca-se…" 29 minutes ago Up 29 minutes 0.0.0.0:7054->7054/tcp ca.example.com

MagnetoCorp의 관리자는 562a88b25149 컨테이너의 command line을 사용하여 PaperNet과 상호작용합니다. logspout 컨테이너인 b7f3586e5d02monitordocker.sh 명령에 대한 컨테이너들의 출력을 캡쳐합니다.

이제 이 command line을 이용해서 MagnetoCorp 관리자로서 PaperNet과 상호 작용해 봅시다.

스마트 컨트랙트

Author: ch-4ml
Link: https://ch-4ml.github.io/posts/commercial-paper-v1-4/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.

Comment