* 본 포스팅은 하이퍼레저 패브릭 docs를 번역한 내용으로, 번역 과정에서 잘못된 부분이 있을 수 있습니다.

상세 내용은 하단 링크를 참조 부탁드리며, 잘못된 내용에 대한 피드백은 언제든 환영합니다 : ) 

https://hyperledger.github.io/composer/latest/tutorials/deploy-to-fabric-multi-org

 

Deploying to a multi-organization Hyperledger Fabric | Hyperledger Composer

Deploying a Hyperledger Composer blockchain business network to Hyperledger Fabric (multiple organizations) This tutorial provides an insight into the process for configuring a blockchain network, spanning multiple organizations. It outlines the steps you

hyperledger.github.io

이 튜토리얼은 여러 조직에 블록체인 네트워크를 구성하는 절차를 제공합니다.

 

이 튜토리얼은 하이퍼레저 패브릭 기반의 여러 조직 블록체인 네트워크를 구성하는데 필요한 단계에 대해 설명합니다. 두 개의 조직으로 구성된 블록체인 네트워크는 하이퍼레저 패브릭에서 제공하는 샘플 네트워크를 기반으로 합니다. 또한, 필요한 보안 artifact를 생성하고 두 조직 간 네트워크를 보호하는 단계에 대해 설명합니다.

 

블록체인 네트워크가 구성되면, 우리는 비즈니스 네트워크가 어떻게 배포되는지 확인할 수 있습니다. (예: 샘플 네트워크의 Commodity 거래 비즈니스 네트워크) 이 비즈니스 네트워크는 체인코드 컨테이너를 운영하고 양 쪽 기관의 분산 원장에서 인스턴스화 됩니다. 그리고나서 우리는 각 조직의 신원 제공자로 생성된 서로 다른 참가자 및 신원 간 분산원장에서의 상호작용을 확인합니다.

 

먼저 첨부된 단일 기관 튜토리얼을 먼저 해보는 것이 좋습니다. 이 튜토리얼에서는 블록체인 네트워크를 단일 조직용 하이퍼레저 패브릭 객체에 배포하는 것을 먼저 보여주고 몇 가지 개념을 자세히 설명합니다.

 

이 튜토리얼의 하이퍼레저 패브릭 블록체인 네트워크 ( 두 개의 조직용) 는 docker 컨테이너를 사용해서 구성되며, 두 조직의 패브릭 네트워크는 동일한 머신에 있습니다. 현실 세계에서는 두 조직은 분리된 IP 네트워크나 도메인 혹은 secure 클라우드 환경에 있을 것입니다.

 

이 튜토리얼은 편의를 위해 색깔로 단계를 구분했습니다. '어느 조직'이 특정 단계를 따라야하는지, 혹은 두 조직 모두 필요한 단계일 수도 있습니다.

 

첫 번째 종류는 양 쪽 조직 모두 따라하는 단계입니다.

Org1은 Alice라 불리며 초록색 블록입니다.

Org2는 Bob이라 불리며 보라색 블록입니다.

 

이 단계는 스스로 따라할 수도 있고 친구 혹은 동료와 함께 따라할 수도 있습니다. 

 

Prerequisites

이전에 컴포저 개발 환경을 설치했다면, 먼저 개발 환경에서 제공하는 하이퍼레저 패브릭 컨테이너를 해제해야 합니다.

cd ~/fabric-dev-servers
export FABRIC_VERSION=hlfv12
./stopFabric.sh
./teardownFabric.sh

다음으로는 아래 명령어를 사용해 GitHub Fabric Samples repository를 복사합니다. (중요: Fabric site에 있는 샘플을 사용하지 마세요, 이 튜토리얼에서 필요한 몇몇이 누락되어 있습니다.)

git clone https://github.com/mahoney1/fabric-samples.git

우리는 여러 조직용 튜토리얼을 하기 위해 Building Your First Network 패브릭 샘플을 사용합니다. 우리는 이 하이퍼레저 패브릭 네트워크를 'BYFN' (Building Your First Network) 네트워크라고 부를 것입니다. 조직을 별도의 물리적 컴퓨터 또는 다른 IP 네트워크에서 실행되는 별도의 가상 컴퓨터로 분할하려는 경우 이 튜토리얼의 범위를 벗어납니다.

 

 

 

Step One: Starting a Hyperledger Fabric network

이 튜토리얼을 따라하기 위해서는 새로운 하이퍼레저 패브릭 네트워크를 시작해야 합니다. 이 튜토리얼은 하이퍼레저 패브릭의 Building Your First Network tutorial에서 제공된 하이퍼레저 패브릭 네트워크를 사용할 것입니다.

 

1. fabric-samples 디렉토리로 이동하세요.

cd fabric-samples

2. 아래 커맨드를 사용해 cryptogen을 포함한 플랫폼 바이너리파일을 다운받으세요. (bash command를 위해 3 개의 파라미터가 필요합니다.)

curl -sSL http://bit.ly/2ysbOFE | bash -s 1.2.1 1.2.1 0.4.10

다운로드받은 docket image 리스트에 이슈가 없는지 확인하세요.

("error: pathspec v1.x.x did not match" 메시지는 무시해도 좋습니다.)

 

3. 우리는 앞서 복사해둔 Git repo의 multi-org 브랜치를 사용해야 합니다. 

git checkout multi-org

4. first-network 디렉토리로 이동하세요.

cd first-network

5. 다음으로 BYFN 네트워크를 시작합니다. 우리는 world state 데이터베이스로 CouchDB를 사용하고 있기 때문에 (byfn.sh 스크립트에) 부가적인 플래그가 필요합니다. (패브릭 BYFN 페이지에 나온 것과 약간 다름) 또, 우리는 각 조직 별 CA를 시작해야 합니다.

 

6. first-network 폴더에서 아래 커맨드를 순서대로 실행하세요.

./byfn.sh -m generate

./byfn.sh -m up -s couchdb -a

명령어가 성공적으로 동작하면 첫 번째 커맨드는 패브릭 네트워크 / security artifacts를 생성합니다. 두 번째 커맨드를 통해 BYFN 네트워크가 시작되고, 아래와 같이 출력되는지 확인하세요.

========= All GOOD, BYFN execution completed ===========


_____   _   _   ____
| ____| | \ | | |  _ \
|  _|   |  \| | | | | |
| |___  | |\  | | |_| |
|_____| |_| \_| |____/

다음으로 이전 패브릭 환경에서 생성되어 지갑에 있을 수도 있는 비즈니스 네트워크 카드를 삭제합니다. 비즈니스 네트워크 카드를 찾을 수 없다는 에러는 무시해도 좋습니다.

composer card delete -c PeerAdmin@byfn-network-org1
composer card delete -c PeerAdmin@byfn-network-org2
composer card delete -c alice@trade-network
composer card delete -c bob@trade-network
composer card delete -c admin@trade-network
composer card delete -c PeerAdmin@fabric-network

하지만, 다른 유형의 에러는 더 이전 버전의 하이퍼레저 컴포저에 카드가 저장되어 있을수도 있습니다. 그러므로 HOME 디렉토리에서 아래와 같은 명령어를 실행해 파일 시스템 내 카드 저장소를 삭제해야 합니다.

rm -fr $HOME/.composer

 

 

Step Two: Exploring the Hyperledger Fabric network

이 단계에서는 BFYN 네트워크 구성 및 요소들을 살펴볼 것입니다. 구성의 세부 요소들은 아래 단계를 완료해야 합니다.

 

Organizations

BYFN 네트워크는 Org1과 Org2, 두 개의 조직으로 구성되어 있습니다. Org1은 org1.example.com이라는 도메인 이름을 사용합니다. Org1의 MSP는 Org1MSP라고 불립니다. Org2는 org2.example.com이라는 도메인 이름을 사용하고 Org2MSP라는 MSP를 갖고 있습니다. 이 튜토리얼에서는 Org1과 Org2가 상호작용할 수 있는 블록체인 비즈니스 네트워크를 배포합니다.

 

Network components

하이퍼레저 패브릭 네트워크는 몇몇 구성요소로 이뤄져 있습니다.

- Org1의 두 개의 피어 노드: peer0.org1.example.com, peer1.org1.example.com

   > request port (peer0) : 7051

   > event hub port (peer0) : 7053

   > request port (peer1) : 8051

   > event hub port (peer1) : 8053

 

- Org1의 단일 CA: ca.org1.example.com

   > CA port : 7054

 

- Org2의 두 개의 피어 노드: peer0.org2.example.com, peer1.org1.example.com

   > request port (peer0) : 9051

   > event hub port (peer0) : 9053

   > request port (peer1) : 10051

   > event hub port (peer1) : 10053

 

- Org2의 단일 CA: ca.org2.example.com

   > CA port : 8054

 

- 단일 orderer 노드: orderer.example.com

   > orderer port : 7050

 

위 구성요소들은 Docker 컨테이너 내에서 동작합니다. 하이퍼레저 컴포저가 Docker 컨테이너에서 동작할 때 위의 이름 (예: peer0.org1.example.com)은 하이퍼레저 패브릭 네트워크와 상호작용하는데 사용될 수 있습니다.

 

이 튜토리얼에서는 하이퍼레저 컴포저 커맨드를 Docker network 내에서 실행하기 보다는 host machine에서 실행합니다. 이는 하이퍼레저 컴포터 커맨드가 localhost를 호스트 이름으로 사용하고 공개된 컨테이너 포트를 사용해 하이퍼레저 패브릭 네트워크와 상호작용한다는 것을 의미합니다.

 

모든 네트워크 구성요소들은 통신 암호화에 TLS를 사용하여 보호됩니다. 해당 네트워크 구성요소에 연결하려면 모든 네트워크 구성요소에 대한 CA 인증서가 필요합니다. CA 인증서는 byfn.sh 스크립트가 들어있는 폴더에서 찾을 수 있습니다.

 

orderer 노드의 CA 인증서:

crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt

Org1의 CA 인증서:

crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

Org2의 CA 인증서:

crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

이 파일들은 이후 하이퍼레저 패브릭 네트워크와 상호작용하는 데 사용될 것입니다.

 

Users

Org1은 Admin@org1.example.com이라는 사용자로 구성되며, 이 사용자는 관리자입니다.

 

Admin@org1.example.com 사용자는 아래 폴더에 인증서와 개인 키 파일을 저장하고 있습니다.

crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

Org2는 Admin@org2.example.com이라는 사용자로 구성되며, 이 사용자는 관리자입니다.

 

Admin@org2.example.com 사용자는 아래 폴더에 인증서와 개인 키 파일을 저장하고 있습니다.

crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp

이 파일 중 일부는 이후 하이퍼레저 패브릭 네트워크와 상호작용하는 데 사용될 것입니다.

 

관리자 외에도 Org1 및 Org2의 CA는 기본 사용자로 구성되어 있습니다. 이 기본 사용자는 등록 ID가 admin이고 비밀번호가 adminpw입니다. 하지만, 이 사용자에게는 블록체인 비즈니스 네트워크를 배포할 수 있는 권한이 없습니다.

 

이 튜토리얼에서 나중에 작업할 컴포터 connector profile과 키/인증서 파일을 관리하기 위해 임시 작업용 디렉토리 (및 하위 디렉토리) 를 생성하는 것이 좋습니다.

mkdir -p /tmp/composer/org1

mkdir -p /tmp/composer/org2

 

Channel

mychannel 이라는 채널이 생성되었다. 모든 4개의 피어 노드 - peer0.org1.example.com, peer1.org1.example.com, peer0.org2.example.com, peer1.org2.example.com은 이 채널에 조인된다.

 

Connection Profiles

우리는 패브릭 네트워크를 설명하는 기본 connection profile가 필요합니다. 이 connection profile은 alice와 bob에게 전달되어 해당 조직에 맞게 커스터마이징 될 수 있습니다.

{
    "name": "byfn-network",
    "x-type": "hlfv1",
    "version": "1.0.0",
    "channels": {
        "mychannel": {
            "orderers": [
                "orderer.example.com"
            ],
            "peers": {
                "peer0.org1.example.com": {
                    "endorsingPeer": true,
                    "chaincodeQuery": true,
                    "eventSource": true
                },
                "peer1.org1.example.com": {
                    "endorsingPeer": true,
                    "chaincodeQuery": true,
                    "eventSource": true
                },
                "peer0.org2.example.com": {
                    "endorsingPeer": true,
                    "chaincodeQuery": true,
                    "eventSource": true
                },
                "peer1.org2.example.com": {
                    "endorsingPeer": true,
                    "chaincodeQuery": true,
                    "eventSource": true
                }
            }
        }
    },
    "organizations": {
        "Org1": {
            "mspid": "Org1MSP",
            "peers": [
                "peer0.org1.example.com",
                "peer1.org1.example.com"
            ],
            "certificateAuthorities": [
                "ca.org1.example.com"
            ]
        },
        "Org2": {
            "mspid": "Org2MSP",
            "peers": [
                "peer0.org2.example.com",
                "peer1.org2.example.com"
            ],
            "certificateAuthorities": [
                "ca.org2.example.com"
            ]
        }
    },
    "orderers": {
        "orderer.example.com": {
            "url": "grpcs://localhost:7050",
            "grpcOptions": {
                "ssl-target-name-override": "orderer.example.com"
            },
            "tlsCACerts": {
                "pem": "INSERT_ORDERER_CA_CERT"
            }
        }
    },
    "peers": {
        "peer0.org1.example.com": {
            "url": "grpcs://localhost:7051",
            "grpcOptions": {
                "ssl-target-name-override": "peer0.org1.example.com"
            },
            "tlsCACerts": {
                "pem": "INSERT_ORG1_CA_CERT"
            }
        },
        "peer1.org1.example.com": {
            "url": "grpcs://localhost:8051",
            "grpcOptions": {
                "ssl-target-name-override": "peer1.org1.example.com"
            },
            "tlsCACerts": {
                "pem": "INSERT_ORG1_CA_CERT"
            }
        },
        "peer0.org2.example.com": {
            "url": "grpcs://localhost:9051",
            "grpcOptions": {
                "ssl-target-name-override": "peer0.org2.example.com"
            },
            "tlsCACerts": {
                "pem": "INSERT_ORG2_CA_CERT"
            }
        },
        "peer1.org2.example.com": {
            "url": "grpcs://localhost:10051",
            "grpcOptions": {
                "ssl-target-name-override": "peer1.org2.example.com"
            },
            "tlsCACerts": {
                "pem": "INSERT_ORG2_CA_CERT"
            }
        }
    },
    "certificateAuthorities": {
        "ca.org1.example.com": {
            "url": "https://localhost:7054",
            "caName": "ca-org1",
            "httpOptions": {
                "verify": false
            }
        },
        "ca.org2.example.com": {
            "url": "https://localhost:8054",
            "caName": "ca-org2",
            "httpOptions": {
                "verify": false
            }
        }
    }
}

위 기본 파일을 복사해서 /tmp/composer 라는 새 디렉토리 아래 byfn-network.json파일을 생성하고 붙여넣으세요.

 

byfn-network.json파일을 열고 INSERT_ORG1_CA_CERT를 Org1 피어노드의 CA인증서로 교체하세요:

아래 커맨드를 사용해 .pem파일에서 인증서를 가져와 위 connection profile에 포함되도록 하세요.

awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt > /tmp/composer/org1/ca-org1.txt

/tmp/composer/org1/ca-org1.txt 파일 내용을 복사하고 .json 파일의 INSERT_ORG1_CA_CERT 자리에 넣으세요. 아래와 같은 형태가 될 것입니다. (profile 파일에서는 한 줄이어야 합니다.)

"pem": "-----BEGIN CERTIFICATE-----\nMIICNTCCAdygAwIBAgIRAMNvmQpnXi7uM19BLdha3MwwCgYIKoZIzj0EAwIwbDEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l\neGFtcGxlLmNvbTAeFw0xNzA2MjYxMjQ5MjZaFw0yNzA2MjQxMjQ5MjZaMGwxCzAJ\nBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh\nbmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh\nbXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASJn3QUVcKCp+s6lSPE\nP5KlWmE9rEG0kpECsAfW28vZQSIg2Ez+Tp1alA9SYN/5BtL1N6lUUoVhG3lz8uvi\n8zhro18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB\nAf8EBTADAQH/MCkGA1UdDgQiBCB7ULYTq3+BQqnzwae1RsnwQgJv/HQ5+je2xcDr\nka4MHTAKBggqhkjOPQQDAgNHADBEAiB2hLiS8B1g4J5Qbxu15dVWAZTAXX9xPAvm\n4l25e1oS+gIgBiU/aBwSxY0uambwMB6xtQz0ZE/D4lyTZZcW9SODlOE=\n-----END CERTIFICATE-----\n"

동일한 .json 파일에서 INSERT_ORG2_CA_CERT도 Org2 피어 노드의 CA 인증서로 교체해야 합니다. 아래 커맨드를 사용해 .pem 파일에서 인증서를 가져오고 connection profile에 포함되도록 하세요.

awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt > /tmp/composer/org2/ca-org2.txt

/tmp/composer/org2/ca-org2.txt파일 내용을 복사하고 INSERT_ORG2_CA_CERT 자리에 넣으세요. 다시 한 번 언급하지만 모두 한 줄에 있어야 합니다.

 

INSERT_ORDERER_CA_CERT를 orderer 노드의 CA 인증서로 교체하세요. 아래 커맨드를 사용해 .pem 파일 내용이 connetion profile json 파일로 포함되도록 하세요.

awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt > /tmp/composer/ca-orderer.txt

/tmp/composer/ca-orderer.txt파일 내용을 복사하고 INSERT_ORDERER_CA_CERT 자리에 넣으세요. 다시 한 번 언급하지만 모두 동일한 라인에 있어야 합니다.

 

완료되면 이 파일을 /tmp/composer/byfn-network.json 파일에 저장하세요.

 

이 connectino profile은 이제 네트워크의 일부분인 모든 피어, orderer, 인증서를 포함한 패브릭 네트워크 구성을 나타냅니다. 이 파일은 네트워크에 참여하는 모든 조직을 나타내고 이 네트워크에 있는 모든 채널을 정의합니다. 하이퍼레저 컴포저는 단일 채널과 상호작용할 수 있기 때문에 하나의 채널만이 정의되어 있습니다.

 

 

Step Three: Customizing the connection profile for Org1

이 단계는 alice가 속한 조직을 지정하는 것입니다. 타임아웃이 있는 클라이언트 섹션에서는 다음 블록을 위에서 작성한 /tmp/composer/byfn-network.json 이라는 connection profile 파일에 추가합니다. 이는 version 속성과 channel 속성 사이에 있습니다. 완료되면 /tmp/composer/org1/byfn-network-org1.json이라는 새로운 파일로 저장하세요.

    "client": {
        "organization": "Org1",
        "connection": {
            "timeout": {
                "peer": {
                    "endorser": "300",
                    "eventHub": "300",
                    "eventReg": "300"
                },
                "orderer": "300"
            }
        }
    },

그러면 profile 섹션은 아래와 같아집니다.

    ...
    "version": "1.0.0",
    "client": {
        "organization": "Org1",
        "connection": {
            "timeout": {
                "peer": {
                    "endorser": "300",
                    "eventHub": "300",
                    "eventReg": "300"
                },
                "orderer": "300"
            }
        }
    },
    "channel": {
    ...

 

 

 

Step Four: Building a connection profile for Org2

bob에 동일한 절차를 반복합니다. 하지만 이번에는 조직을 Org2로 지정하고 파일명 또한 /tmp/composer/byfn-network-org2.json이라고 지정합니다. 그러면 profile 섹션은 아래와 같아집니다.

    ...
    "version": "1.0.0",
    "client": {
        "organization": "Org2",
        "connection": {
            "timeout": {
                "peer": {
                    "endorser": "300",
                    "eventHub": "300",
                    "eventReg": "300"
                },
                "orderer": "300"
            }
        }
    },
    "channel": {
    ...

 

 

 

Step Five: Locating the certificate and private key for the Hyperledger Fabric administrator for Org1

하이퍼레저 패브릭 Org1 네트워크의 관리자는 Admin@org1.example.com라 불리는 사용자입니다. 이 인증서와 개인키 파일은 아래 디렉토리에 저장되어 있습니다.

crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

먼저 사용자의 인증서 파일을 위치시켜야 합니다. 인증서는 신원확인의 공개된 부분입니다. 인증서 파일은 signcerts 하위 디렉토리에서 찾을 수 있으며 Admin@org1.example.com-cert.pem이라는 파일입니다.

 

다음으로 사용자의 개인키 파일을 위치시켜야 합니다. 개인키는 이 신원을 통해 트랜잭션을 인증할 때 사용됩니다. 개인 키 파일은 keystore 하위 디렉토리에서 찾을 수 있습니다. 개인 키 파일은 16진수 문자열로 접미어는 _sk입니다. 예를 들면 78f2139bfcfc0edc7ada0801650ed785a11cfcdef3f9c36f3c8ca2ebfa00a59c_sk와 같이 생겼습니다. 이 이름은 구성이 생성될 때마다 매번 바뀌므로 아래의 와일드 카드를 사용하세요.

 

이 두 파일 경로를 모두 기억하세요, 혹은 step 3에서 생성한 connection profile 파일인 /tmp/composer/orgl/byfn-network-org1.json 파일과 동일한 폴더에 복사해두세요. 이 파일은 다음 단계에서 필요합니다.

 

이 작업을 하기 위해 아래 커맨드를 사용하세요.

export ORG1=crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

cp -p $ORG1/signcerts/A*.pem /tmp/composer/org1

cp -p $ORG1/keystore/*_sk /tmp/composer/org1

 

 

Step Six: Locating the certificate and private key for the Hyperledger Fabric administrator for Org2

하이퍼레저 패브릭 네트워크의 관리자는 Admin@org2.example.com이라는 사용자입니다. 이 사용자의 인증서와 개인 키는 아래 디렉토리에 있습니다.

crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp

먼저 사용자의 인증서 파일을 위치시켜야 합니다. 인증서는 신원확인의 공개된 부분입니다. 인증서 파일은 signcerts 하위 디렉토리에서 찾을 수 있으며 Admin@org2.example.com-cert.pem이라는 파일입니다.

 

다음으로 사용자의 개인키 파일을 위치시켜야 합니다. 개인키는 이 신원을 통해 트랜잭션을 인증할 때 사용됩니다. 개인 키 파일은 keystore 하위 디렉토리에서 찾을 수 있습니다. 개인 키 파일은 16진수 문자열로 접미어는 _sk입니다. 예를 들면 d4889cb2a32e167bf7aeced872a214673ee5976b63a94a6a4e61c135ca2f2dbb_sk와 같이 생겼습니다. 이 이름은 구성이 생성될 때마다 매번 바뀌므로 아래의 와일드 카드를 사용하세요.

 

이 두 파일 경로를 모두 기억하세요, 혹은 step 3에서 생성한 connection profile 파일인 /tmp/composer/orgl/byfn-network-org2.json 파일과 동일한 폴더에 복사해두세요. 이 파일은 다음 단계에서 필요합니다.

 

이 작업을 하기 위해 아래 커맨드를 사용하세요.

export ORG2=crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp

cp -p $ORG2/signcerts/A*.pem /tmp/composer/org2

cp -p $ORG2/keystore/*_sk /tmp/composer/org2

 

 

Step Seven: Creating business network cards for the Hyperledger Fabric administrator for Org1

이 단계는 관리자가 하이퍼레저 패브릭 네트워크에 블록체인 비즈니스 네트워크를 배포하는데 사용되는 비즈니스 네트워크 카드를 생성합니다.

 

composer card create 커맨드를 실행해서 Org1의 connection profile을 사용하는 비즈니스 네트워크 카드를 생성하세요. 이전 단계에서 생성 혹은 위치시킨 3가지 파일 경로를 모두 지정해야 합니다. (주의: sk파일은 다를 것입니다.)

composer card create -p /tmp/composer/org1/byfn-network-org1.json -u PeerAdmin -c /tmp/composer/org1/Admin@org1.example.com-cert.pem -k /tmp/composer/org1/*_sk -r PeerAdmin -r ChannelAdmin -f PeerAdmin@byfn-network-org1.card

커맨드가 성공적으로 수행되면, PeerAdmin@byfn-network-org1.card라는 비즈니스 네트워크 카드 파일이 현재 폴더에 생성됩니다.

 

 

Step Eight: Creating business network cards for the Hyperledger Fabric administrator for Org2

이 단계는 관리자가 하이퍼레저 패브릭 네트워크에 블록체인 비즈니스 네트워크를 배포하는데 사용되는 비즈니스 네트워크 카드를 생성합니다.

 

composer card create 커맨드를 실행해서 Org2의 connection profile을 사용하는 비즈니스 네트워크 카드를 생성하세요. 이전 단계에서 생성 혹은 위치시킨 3가지 파일 경로를 모두 지정해야 합니다. 

composer card create -p /tmp/composer/org2/byfn-network-org2.json -u PeerAdmin -c /tmp/composer/org2/Admin@org2.example.com-cert.pem -k /tmp/composer/org2/*_sk -r PeerAdmin -r ChannelAdmin -f PeerAdmin@byfn-network-org2.card

커맨드가 성공적으로 수행되면, PeerAdmin@byfn-network-org2.card라는 비즈니스 네트워크 카드 파일이 현재 폴더에 생성됩니다.

 

 

Step Nine: Importing the business network cards for the Hyperledger Fabric administrator for Org1

composer card import 커맨드를 사용해 Org1의 비즈니스 네트워크 카드를 지갑으로 import하세요.

composer card import -f PeerAdmin@byfn-network-org1.card --card PeerAdmin@byfn-network-org1

명령어가 올바르게 실행되면 PeerAdmin@byfn-network-org1이라는 비즈니스 네트워크 카드가 지갑으로 import됩니다.

 

 

Step Ten: Importing the business network cards for the Hyperledger Fabric administrator for Org2

composer card import 커맨드를 사용해 Org2의 비즈니스 네트워크 카드를 지갑으로 import하세요.

composer card import -f PeerAdmin@byfn-network-org2.card --card PeerAdmin@byfn-network-org2

명령어가 올바르게 실행되면 PeerAdmin@byfn-network-org2이라는 비즈니스 네트워크 카드가 지갑으로 import됩니다.

 

 

 

Step Eleven: Installing the business network onto the Hyperledger Fabric peer nodes for Org1

composer network install 명령어를 사용해 Step 3에서 connection profile 파일에 정의한 Org1의 하이퍼레저 패브릭 피어 노드에 비즈니스 네트워크를 설치하세요.

composer network install --card PeerAdmin@byfn-network-org1 --archiveFile trade-network.bna

위에서 볼 수 있듯이, 여러 조직 환경을 테스트하기 위해 trade-network라 불리는 하이퍼레저 컴포저 비스니스 네트워크를 사용합니다. 테스트를 하려면 trade-network.bna (샘플 네트워크에서 만들어진 비즈니스 네트워크 아카이브) 파일이 필요합니다. 이 파일을 가지고 있지 않다면 https://composer-playground.mybluemix.net/ 옆의 링크로 이동해 온라인 플레이그라운드에서 trade-network 샘플을 배포한 다음 admin으로 비즈니스 네트워크에 connect 하세요. 왼쪽 하단 버전을 0.1.14로 변경하고 현재 폴더에 trade-network.bna파일을 export하세요. 비즈니스 네트워크는 package.json 파일에 version 속성을 가지고 있습니다. 이 버전은 비즈니스 네트워크가 step 17에서 composer start 커맨드를 사용해 시작될 때 지정되어야 합니다. trade-network 샘플 네트워크를 사용하고 있다면 버전은 0.1.14입니다. (주의: 컴포저 튜토리얼 네트워크 tutorial-network같은 다른 네트워크를 비즈니스 네트워크로 사용하려 한다면 위의 network install 커맨드에 해당 파일을 이 튜토리얼의 비즈니스 네트워크 아카이브로 지정하고 버전 또한 알맞게 지정해야 합니다.)

 

network install 커맨드의 유용한 기능은 설치된 비즈니스 네트워크 이름과 버전 번호를 출력한다는 것입니다. 이는 아래 step 17에서 사용할 수 있습니다.

 

 

Step Twelve: Installing the business network onto the Hyperledger Fabric peer nodes for Org2

composer network install 명령어를 사용해 Step 4에서 connection profile 파일에 정의한 Org2의 하이퍼레저 패브릭 피어 노드에 비즈니스 네트워크를 설치하세요.

composer network install --card PeerAdmin@byfn-network-org2 --archiveFile trade-network.bna

 

 

 

Step Thirteen: Defining the endorsement policy for the business network

운영중인 비즈니스 네트워크는 인증 정책을 가지고 있습니다. 이 정책은 트랜잭션이 블록체인에 커밋되기 전에 어느 조직이 트랜잭션을 검증할지를 결정하는 규칙을 정의합니다. 기본적으로 비즈니스 네트워크는 블록체인에 트랜잭션이 커밋되기 전 하나의 기관이 트랜잭션을 검증하도록 배포됩니다.

 

실제 블록체인 비즈니스 네트워크에서는 여러 기관들이 블록체인에 트랜잭션이 커밋되기 전 검증하기를 원합니다. 그리고 기본 검증 정책은 여기에 적합하지 못합니다. 그래서 비즈니스 네트워크를 시작할 때 검증 정책을 커스텀할 수 있습니다.

 

검증 정책과 관련해서는 하이퍼레저 패브릭 docs 내 아래 링크를 참고하면 더 상세한 정보를 알 수 있습니다.

https://hyperledger-fabric.readthedocs.io/en/release/endorsement-policies.html

불러오는 중입니다...
비즈니스 네트워크에서 사용되는 검증 정책은 하이퍼레저 패브릭 Node.js SDK에서 사용하는 JSON 형식이어야 합니다. 하이퍼레저 패브릭 CLI에서 사용되는 간단한 검증 정책 형식과 다른 형식으로 하이퍼레저 패브릭 문서에서 확인할 수 있습니다.

 

/tmp/composer/endorsement-policy.json 이라는 검증 정책 파일을 생성하고 아래 내용을 복사해 붙여넣은 후 저장하세요. 이후 단계에서 이 파일을 사용할 것이므로 어디 저장했는지 기억하세요.

{
    "identities": [
        {
            "role": {
                "name": "member",
                "mspId": "Org1MSP"
            }
        },
        {
            "role": {
                "name": "member",
                "mspId": "Org2MSP"
            }
        }
    ],
    "policy": {
        "2-of": [
            {
                "signed-by": 0
            },
            {
                "signed-by": 1
            }
        ]
    }
}

방금 생성한 검증정책은 Org1과 Org2 모두 블록체인에 트랜잭션을 커밋하기 전 비즈니스 네트워크 내 트랜잭션을 검증해야만 합니다. Org1 혹은 Org2가 트랜잭션을 검증하지 않거나, 트랜잭션 결과에 동의하지 않으면 해당 트랜잭션은 비즈니스 네트워크에 의해 거절당합니다.

 

 

Step Fourteen: Understanding and selecting the business network administrators

비즈니스 네트워크가 시작되면, 초기 참가자 집단으로 구성됩니다. 이 참가자들은 비즈니스 네트워크를 시작하고 다른 참가자들을 비즈니스 네트워크에 초대하는 역할을 합니다. 하이퍼레저 컴포저에서 우리는 이 초기 참가자들을 비즈니스 네트워크 관리자라고 부릅니다.

 

여기서 Org1과 Org2는 동일한 권한을 갖고 있습니다. 각 조직은 비즈니스 네트워크에 관리자를 제공하고 , 해당 관리자들은 각 조직에 다른 참가자들을 초대합니다. Org1의 비즈니스 네트워크 관리자는 Alice이고 Org2의 관리자는 Bob입니다.

 

비즈니스 네트워크가 시작되면 모든 비즈니스 네트워크 관리자의 인증서 (신원확인의 공개파트) 는 비즈니스 네트워크를 시작하는 조직에 제출되어야 합니다. 비즈니스 네트워크가 시작되면, 모든 관리자들은 비즈니스 네트워크와 상호작용하는데 그들의 신원을 사용할 수 있습니다.

 

비즈니스 네트워크 관리자에 대해 더 자세한 내용은 아래 링크를 참고하세요.

https://hyperledger.github.io/composer/latest/business-network/bnd-deploy.html

 

Deploying Business Networks | Hyperledger Composer

Deploying Business Networks Before a business network definition can be deployed it must be packaged into a Business Network Archive (.bna) file. The composer archive create command is used to create a business network archive file from a business network

hyperledger.github.io

 

 

 

Step Fifteen: Retrieving business network administrator certificates for Org1

composer identity request 커맨드를 사용해 Org1의 비즈니스 네트워크 관리자로 사용할 Alice의 인증서를 검색하세요.

composer identity request -c PeerAdmin@byfn-network-org1 -u admin -s adminpw -d alice

이 커맨드의 -u admin 과 -s adminpw 옵션은 하이퍼레저 패브릭 CA에 등록된 기본 사용자입니다.

 

인증서는 현재 작업 디렉토리의 alice폴더에 위치할 것입니다. 3개의 인증서가 생성되지만 2가지가 중요합니다. 이 두 가지는 admin-pub.pem이라는 공개키를 포함한 인증서와 admin-priv.pem이라는 개인키 파일입니다. admin-pub.pem파일만이 다른 조직과 공유되어야 합니다. admin-priv.pem파일은 비밀로 유지되어야 하며 조직을 대표해 트랜잭션을 인증하는데 사용됩니다.

 

 

 

Step Sixteen: Retrieving business network administrator certificates for Org2

composer identity request 커맨드를 사용해 Org2의 비즈니스 네트워크 관리자로 사용할 Alice의 인증서를 검색하세요.

composer identity request -c PeerAdmin@byfn-network-org2 -u admin -s adminpw -d bob

이 커맨드의 -u admin 과 -s adminpw 옵션은 하이퍼레저 패브릭 CA에 등록된 기본 사용자입니다.

 

인증서는 현재 작업 디렉토리의 bob폴더에 위치할 것입니다. 3개의 인증서가 생성되지만 2가지가 중요합니다. 이 두 가지는 admin-pub.pem이라는 공개키를 포함한 인증서와 admin-priv.pem이라는 개인키 파일입니다. admin-pub.pem파일만이 다른 조직과 공유되어야 합니다. admin-priv.pem파일은 비밀로 유지되어야 하며 조직을 대표해 트랜잭션을 인증하는데 사용됩니다.

 

 

 

Step Seventeen: Starting the business networ

composer network start 커맨드를 사용해 비즈니스 네트워크를 시작하세요. 이 동작은 Org1에서만 수행합니다. 이 명령어는 step 13에서 생성한 /tmp/composer/endorsement-policy.json 파일을 사용합니다. 그리고 step 15, 16에서 Alice와 Bob에 의해 생성된 admin-pub.pem 파일을 사용합니다. 그러므로 위 모든 파일에 아래 명령어로 접근할 수 있어야 합니다.

composer network start -c PeerAdmin@byfn-network-org1 -n trade-network -V 0.1.14 -o endorsementPolicyFile=/tmp/composer/endorsement-policy.json -A alice -C alice/admin-pub.pem -A bob -C bob/admin-pub.pem

위 명령어가 수행되면, 비즈니스 네트워크는 시작됩니다. Alice와 Bob모두 비즈니스 네트워크에 접근해 시작할 수 있고 각 조직에 다른 참가자들을 초대할 수 있습니다. 하지만, Alice와 Bob은 이전 단계에서 생성한 인증서로 비즈니스 네트워크 카드를 생성해야 비즈니스 네트워크에 접근할 수 있습니다.

 

 

 

Step Eighteen: Creating a business network card to access the business network as Org1

composer card create 커맨드를 사용해 Org1의 비즈니스 네트워크 관리자인 Alice의 비즈니스 네트워크 카드를 생성하세요. 그러면 비즈니스 네트워크에 접근할 수 있습니다.

composer card create -p /tmp/composer/org1/byfn-network-org1.json -u alice -n trade-network -c alice/admin-pub.pem -k alice/admin-priv.pem

composer card import 커맨드를 사용해 방금 생성한 비즈니스 네트워크 카드를 import 하세요.

composer card import -f alice@trade-network.card

composer network ping 커맨드를 사용해 블록체인 비즈니스 네트워크 접속을 테스트하세요.

composer network ping -c alice@trade-network

위 커맨드가 성공적으로 동작하면, org.hyperledger.composer.system.NetworkAdmin#alice와 같은 참가자 신분을 확인할 수 있을 것입니다. 이제 블록체인 비즈니스 네트워크와 상호작용하고 다른 참가자들을 초대하는데 이 비즈니스 네트워크 카드를 사용할 수 있습니다.

 

참가자를 생성하고 해당 참가자에 매핑된 ID를 발급하고 해당 ID로 블록체인 네트워크에서 자산을 생성할 수 있습니다.

 

아래의 composer participant add 명령어를 실행하세요.

composer participant add -c alice@trade-network -d '{"$class":"org.example.trading.Trader","tradeId":"trader1-org1", "firstName":"Jo","lastName":"Doe"}'

다음으로 trader1-org1의 id를 생성하기 위해 composer issue identity 커맨드를 사용하세요.

composer identity issue -c alice@trade-network -f jo.card -u jdoe -a "resource:org.example.trading.Trader#trader1-org1"

카드를 import하고 테스트해보세요.

composer card import -f jo.card

composer network ping -c jdoe@trade-network

다음으로 자산을 생성할 것입니다. 커맨드 라인에서 jdoe 참가자로 Commodity 자산을 생성하는 트랜잭션을 제출합니다. (혹은 컴포저 플레이그라운드를 설치했다면 jdoe@trade-network로 trade-network에 접속해 'EMA'라는 아래 JSON형태의 자산을 생성하세요.)

 

CLI를 사용해 자산을 생성하기 위해 아래 transaction submit 시퀀스를 복사합니다. 이 내용은 Commodity 자산을 생성합니다.

composer transaction submit --card jdoe@trade-network -d '{"$class": "org.hyperledger.composer.system.AddAsset", "targetRegistry" : "resource:org.hyperledger.composer.system.AssetRegistry#org.example.trading.Commodity", "resources": [{"$class": "org.example.trading.Commodity","tradingSymbol":"EMA", "description":"Corn commodity","mainExchange":"EURONEXT", "quantity":"10","owner":"resource:org.example.trading.Trader#trader1-org1"}]}'

혹은 플레이그라운드에서 생성하려면 아래 내용을 복사하세요.

{
  "$class": "org.example.trading.Commodity",
  "tradingSymbol": "EMA",
  "description": "Corn commodity",
  "mainExchange": "EURONEXT",
  "quantity": 10,
  "owner": "resource:org.example.trading.Trader#trader1-org1"
}

마지막으로 composer network list 커맨드를 사용해서 비즈니스 네트워크에 생성된 산출물을 확인하세요.

composer network list -c jdoe@trade-network

 

 

 

Step Nineteen: Creating a business network card to access the business network as Org2

composer card create 커맨드를 사용해 Org2의 비즈니스 네트워크 관리자인 Bob의 비즈니스 네트워크 카드를 생성하세요. 그러면 비즈니스 네트워크에 접근할 수 있습니다.

composer card create -p /tmp/composer/org2/byfn-network-org2.json -u bob -n trade-network -c bob/admin-pub.pem -k bob/admin-priv.pem

composer card import 커맨드를 사용해 방금 생성한 비즈니스 네트워크 카드를 import 하세요.

composer card import -f bob@trade-network.card

composer network ping 커맨드를 사용해 블록체인 비즈니스 네트워크 접속을 테스트하세요.

composer network ping -c bob@trade-network

위 커맨드가 성공적으로 동작하면, org.hyperledger.composer.system.NetworkAdmin#bob와 같은 참가자 신분을 확인할 수 있을 것입니다. 이제 다른 Trader를 초대해봅시다.

 

다시 한 번 참가자를 생성하고 해당 참가자에 매핑된 ID를 발급합니다. 이미 블록체인 네트워크에 자산을 갖고 있기 때문에, 우리는 소유자를 변경하는 트랜잭션을 사용할 것입니다. (Org1에서 Org2 trader로)

 

아래의 composer participant add 명령어를 실행하세요.

composer participant add -c bob@trade-network -d '{"$class":"org.example.trading.Trader","tradeId":"trader2-org2", "firstName":"Dave","lastName":"Lowe"}'

다음으로 trader2-org2의 id를 생성하기 위해 composer issue identity 커맨드를 사용하세요.

composer identity issue -c bob@trade-network -f dave.card -u dlowe -a "resource:org.example.trading.Trader#trader2-org2"

카드를 import하고 테스트해보세요.

composer card import -f dave.card

composer network ping -c dlowe@trade-network

마지막으로 이전에 생성한 Commodity 자산의 소유자를 변경하는 트랜잭션을 제출합니다. 우리는 자산 소유자인 Jon Doe로 트랜잭션을 제출하고 Dave Lowe에게 전달할 것입니다. 그리고나서 dlowe라고 매핑된 Org2의 trader 참가자로 소유자가 변경되었는지 확인할 것입니다. 아래 단계를 따라 수행하세요.

composer transaction submit --card jdoe@trade-network -d '{"$class":"org.example.trading.Trade","commodity":"resource:org.example.trading.Commodity#EMA","newOwner":"resource:org.example.trading.Trader#trader2-org2"}'

마지막으로 Org2 trader 참가자로  composer network list 커맨드를 사용해서 자산의 소유자가 변경되었는지 확인하세요.

 

 

* 본 포스팅은 하이퍼레저 패브릭 docs를 번역한 내용으로, 번역 과정에서 잘못된 부분이 있을 수 있습니다.

상세 내용은 하단 링크를 참조 부탁드리며, 잘못된 내용에 대한 피드백은 언제든 환영합니다 : ) 

https://hyperledger.github.io/composer/latest/tutorials/deploy-to-fabric-single-org

 

Deploying to a single organization Hyperledger Fabric | Hyperledger Composer

Deploying a Hyperledger Composer blockchain business network to Hyperledger Fabric for a single organization In the development environment, a simple development only Hyperledger Fabric single organization, single peer network is created for you (fabric-de

hyperledger.github.io

개발 환경에서는 블록체인 비즈니스 네트워크를 배포하는데 필요한 하이퍼레저 컴포저 구성과 함께 하이퍼레터 패브릭 단일 조직, 단일 피어 네트워크 (fabric-dev-servers)만 생성됩니다.

 

이 튜토리얼에서는 필요한 조직을 생성하는 방법을 포함해 관리자가 단일 조직에 대해 하이퍼레저 패브릭 객체에 블록체인 비즈니스 네트워크를 배포하기 위해 수행해야 하는 단계를 보여줍니다. 이후 튜토리얼에서는 블록체인 비즈니스 네트워크를 여러 조직의 하이퍼레저 패브릭 객체에 배포하는 방법을 보여줍니다.

 

이 튜토리얼을 수행하는 동안 아래 하이퍼레저 패브릭 문서를 참고할 수 있습니다.

http://hyperledger-fabric.readthedocs.io/

 

A Blockchain Platform for the Enterprise — hyperledger-fabricdocs master documentation

Docs » A Blockchain Platform for the Enterprise Edit on GitHub Built with Sphinx using a theme provided by Read the Docs.

hyperledger-fabric.readthedocs.io

 

Prerequisites

1. 시작하기 전 개발환경 설치가 완료되었는지 확인하세요.

https://ralee-world.tistory.com/entry/Hyperledger-Composer-Installing?category=719808

 

Composer Installing

* 본 포스팅은 하이퍼레저 패브릭 docs를 번역한 내용으로, 번역 과정에서 잘못된 부분이 있을 수 있습니다. 상세 내용은 하단 링크를 참조 부탁드리며, 잘못된 내용에 대한 피드백은 언제든 환영합니다 : ) http..

ralee-world.tistory.com

 

 

Step One: Starting a Hyperledger Fabric network

이 튜토리얼을 따라하려면 하이퍼레저 패브릭 네트워크를 시작해야 합니다. 개발 환경에서 주어진 간단한 하이퍼레저 패브릭 네트워크를 사용할 수도 있고, 하이퍼레즈 패브릭 docs를 따라 생성한 네트워크를 사용해도 좋습니다.

 

이 튜토리얼은 개발 환경에 제공된 간단한 하이퍼레저 패브릭 네트워크를 사용한다고 가정합니다. 개인이 생성한 하이퍼레저 패브릭 네트워크를 사용한다면 아래 설명된 구성과 일치하도록 매핑해야 하며 단일 조직 네트워크여야 합니다.

 

1. 아래 커맨드를 통해 clean Hyperledger Fabric을 시작하세요.

cd ~/fabric-dev-servers
export FABRIC_VERSION=hlfv12
./stopFabric.sh
./teardownFabric.sh
./downloadFabric.sh
./startFabric.sh

2. 지갑에 있는 모든 비즈니스 네트워크 카드를 삭제하세요. 비즈니스 네트워크 카드를 찾을 수 없다는 오류는 무시해도 괜찮습니다.

composer card delete -c PeerAdmin@fabric-network
composer card delete -c admin@tutorial-network

위 명령어들이 실패하면 이전 버전의 네트워크 카드가 있다는 것이며, 파일 시스템 카드 저장소를 삭제해야 합니다.

    rm -fr ~/.composer

 

 

Step Rwo: Exploring the Hyperledger Fabric network

이 단계는 방금 시작한 하이퍼레저 패브릭 네트워크를 탐색하고 구성 방법 및 요소를 이해하는 단계입니다. 이 섹션의 모든 정보를 사용해 이후 단계에서 하이퍼레저 컴포저를 구성할 수 있습니다.

 

Configuration files

개발 환경에서 주어진 간단한 하이퍼레저 패브릭 네트워크는 하이퍼레저 패브릭 구성 툴인 cryptogen이나 configtxgen을 사용해 환경설정을 할 수 있습니다.

 

cryptogen은 아래 파일에 저장되어 있습니다.

~/fabric-dev-servers/fabric-scripts/hlfv12/composer/crypto-config.yaml

configtxgen은 아래 파일에 저장되어 있습니다.

~/fabric-dev-servers/fabric-scripts/hlfv12/composer/configtx.yaml

하이퍼레저 패브릭 docs를 읽으면 이러한 구성 툴에 대한 추가 정보, 수행 방법 및 사용법에 대해 알 수 있습니다.

 

Organizations

간단한 하이퍼레저 패브릭 네트워크는 Org1이라는 단일 조직으로 구성됩니다. 조직은 org1.example.com이라는 도메인 이름을 사용합니다. 또한, 이 조직의 Membership Services Provider (MSP)는 Org1MSP라고 합니다. 이 튜토리얼에서는 Org1만 상호작용할 수 있는 블록체인 비즈니스 네트워크를 배포합니다.

 

Network components

하이퍼레저 패브릭은 몇몇 요소로 구성되어 있습니다.

 

- peer0.org1.example.com: Org1의 단일 피어 노드

   > request port : 7051

   > event hub port : 7053

 

- ca.org1.example.com: 단일 인증 권한

   > CA port : 7054

 

- orderer.example.com

   > orderer port : 7050

 

하이퍼레저 패브릭 네트워크 구성요소는 Docker 컨테이너에서 실행됩니다. Docker 컨테이너에서 하이퍼레저 컴포저를 실행하는 경우 위의 이름 (예: peer0.org1.example.com)을 사용하여 하이퍼레저 패브릭 네트워크와 상호작용할 수 있습니다.

 

이 튜토리얼에서는 Docker 네트워크 내부가 아닌 Docker 호스트 컴퓨터에서 하이퍼레저 컴포저 명령을 실행합니다. 즉, 하이퍼레저 컴포터 명령은 localhost를 호스트 이름으로 사용하고 노출된 컨테이터 포트를 사용해 하이퍼레저 패브릭 네트워크와 상호작용해야 합니다.

 

Users

조직 Org1은 Admin@org1.example.com이라는 사용자로 구성됩니다. 이 사용자는 관리자입니다. 조직의 관리자는 조직의 피어들에게 블록체인 비즈니스 네트워크의 코드를 설치할 수 있는 권한이 있으며, 구성에 따라 블록체인 비즈니스 네트워크를 시작할 수 있는 권한을 가질 수도 있습니다. 이 튜토리얼에서는 Admin@org1.example.com 사용자로 블록체인 비즈니스 네트워크를 배포합니다.

 

Admin@org1.example.com 사용자는 아래 디렉토리에 저장된 일력의 인증서와 개인 키 파일을 가지고 있습니다.

~/fabric-dev-servers/fabric-scripts/hlfv12/composer/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

이후 하이퍼레저 패브릭 네트워크와 상호작용할 때 이 파일들을 사용할 것입니다.

 

관리자 외에도 Org1의 CA(Certificate Authority)가 기본 사용자로 등록되어 있습니다. 이 기본 사용자는 등록 ID가 admin이고 패스워드는 adminpw입니다. 하지만, 이 사용자에게는 블록체인 비즈니스 네트워크를 배포할 수 있는 권한이 없습니다.

 

Channel

마지막으로, composerchannel이라는 채널이 생성되었습니다. 피어 노드인 peer0.org1.example.com은 이 채널에 조인되었습니다. 하이퍼레저 컴포저 블록체인 비즈니스 네트워크는 기존 채널에만 배포할 수 있지만, 하이퍼레저 패브릭 docs를 따라 추가 채널을 만들 수도 있습니다.

 

 

Step Three: Building a connection profile

Connection profile은 하이퍼레저 패브릭 네트워크를 찾고 연결하는데 필요한 모든 정보 (예: 모든 하이퍼레저 패브릭 네트워크 구성 요소의 호스트 이름 및 포트)를 지정합니다. 이 단계에서는 하이퍼레저 컴포저가 하이퍼레저 패브릭 네트워크에 연결하는데 사용할 connection profile을 생성합니다.

 

1. connection.json이라는 connection profile 파일을 생성하세요.

2. connection profile의 name, version, x-type속성을 connection.json파일 가장 위에 아래 세 줄을 추가하여 지정하세요.

{
    "name": "fabric-network",
    "x-type": "hlfv1",
    "version": "1.0.0",

name 속성은 하이퍼레저 패브릭 네트워크에 이름을 제공하므로 나중에 참조할 수 잇습니다. 방금 작성한 connection profile에서 이름은 fabric-network입니다. 하이퍼레저 패브릭 네트워크에 대해 원하는 이름을 사용할 수 있습니다.

 

하이퍼레저 컴포저는 다양한 유형의 블록체인 네트워크와 호환되도록 설계되었습니다. 현재는 하이퍼레저 패브릭 v.1.x만 지원되지만 사용할 블록체인 네트워크의 유형을 지정해야 합니다. 하이퍼레저 패브릭 v1.2의 x-type은 hlfv1입니다.

 

버전 번호는 이 connection profile 형식의 버전입니다. 현재 버전은 1.0.0입니다.

 

또한 x-commitTimeout이라는 속성을 부가적으로 지정할 수도 있습니다. 이는 하이퍼레저 컴포저가 제출된 트랜잭션이 대기를 포기하기 전에 조직의 피어에 commit되는 동안 얼마나 오래 기다릴지를 지정하는 속성입니다. default 값은 300초입니다.

 

3. 하이퍼레저 패브릭 네트워크에서는 모든 피어노드의 호스트 이름과 포트를 지정해야 합니다. 여기서는 단 하나의 피어가 있고 peer0.org1.example.com이라는 레이블을 붙입니다.

    "peers": {
        "peer0.org1.example.com": {
            "url": "grpc://localhost:7051"
        }
    },

여기서, 우리는 단일 피어 노드인 peer0.org1.example.com (localhost를 호스트 이름으로 사용하는) 를 지정했으며 request 포트 번호는 7051, event hub port 번호는 7053 입니다.

 

peers 배열은 여러 피어 노드를 포함할 수 있습니다. 여러 피어 노드를 가지고 있다면 해당 노드들을 peers 객체에 추가해야 합니다.

 

4. 기존 사용자를 등록하고 새 사용자를 등록하려면 하이퍼레저 패브릭 네트워크 내 Certificate Authority (CA)의 호스트 이름과 포트 번호를 지정해야 합니다.

    "certificateAuthorities": {
        "ca.org1.example.com": {
            "url": "http://localhost:7054",
            "caName": "ca.org1.example.com"
        }
    },

여기서 우리는 단일 CA인 ca.org1.example.com (localhost를 호스트 이름으로 사용하는) 를 지정했으며 CA 포트 번호는 7054입니다. 또, 우리는 이 엔트리를 ca-org1.example.com이라고 레이블을 붙였습니다.

 

5. 우리는 연결하고자하는 하이퍼레저 패브릭에 있는 모든 ordering노드의 호스트 이름과 포트 번호를 지정해야 합니다.

    "orderers": {
        "orderer.example.com": {
            "url": "grpc://localhost:7050"
        }
    },

여기서 우리는 단일 orderer 노드인 orderer.example.com (localhost를 호스트 이름으로 사용하는) 를 지정했으며, orderer 포트 번호는 7050입니다. 또한 이를 orderer.example.com이라고 레이블을 붙입니다.

 

orderer 객체는 여러 orderer 노드들을 포함할 수 있습니다. 여러 orderer 노드를 가지고 있다면 이를 orderers 객체에 추가해야 합니다.

 

6. 이제 우리는 네트워크 내 모든 조직을 지정해야 합니다. 이 튜토리얼에서는 1개의 조직 Org1만 존재합니다.

    "organizations": {
        "Org1": {
            "mspid": "Org1MSP",
            "peers": [
                "peer0.org1.example.com"
            ],
            "certificateAuthorities": [
                "ca.org1.example.com"
            ]
        }
    },

여기서 우리는 피어 소유자와 그들의 인증기관이 누구인지에 대해 설명하고 있으며, 이 조직에 대해 정의된 MSP ID도 선언합니다. 이 튜토리얼에서는 Org1MSP로 정의되어 있습니다.

 

7. 우리는 존재하는 채널의 이름을 지정해야 합니다. 우리는 블록체인 비즈니스 네트워크를 composerchannel이라는 채널에 배포할 것입니다. 이는 channels 객체에 정의되어 있습니다.

    "channels": {
        "composerchannel": {
            "orderers": [
                "orderer.example.com"
            ],
            "peers": {
                "peer0.org1.example.com": {
                    "endorsingPeer": true,
                    "chaincodeQuery": true,
                    "eventSource": true
                }
            }
        }
    },

여기서 우리는 composerchannel 채널과 해당 채널의 일부인 orderers, peers를 정의합니다. 또한 피어가 이 채널에서 수행할 역할도 지정합니다. 이 튜토리얼에서 우리는 이전에 정의된 레이블을 사용해 단일 orderer과 peer를 추가했습니다. 피어는 비즈니스 네트워크를 설치하므로 체인코드 쿼리를 처리하고 이벤트를 생성할 수 있는 트랜잭션 인증자가 됩니다. 블록체인 비즈니스 네트워크는 모든 지정된 피어 노드에 배포될 것입니다. 블록체인 비즈니스 네트워크가 배포되면, 지정된 피어 노드들은 블록체인 비즈니스 네트워크에 쿼리하고, 트랜잭션을 보증하고, 이벤트를 구독하는 데 사용됩니다.

 

8. 마지막 섹션은 클라이언트 섹션입니다. 이것은 클라이언트 애플리케이션 (하이퍼레저 컴포저 같은)에서 상호작용할 때 어떤 조직을 나타내는지와 몇 가지 추가 선택적인 타임아웃 등을 알기 위해 사용됩니다.

    "client": {
        "organization": "Org1",
        "connection": {
            "timeout": {
                "peer": {
                    "endorser": "300",
                    "eventHub": "300",
                    "eventReg": "300"
                },
                "orderer": "300"
            }
        }
    }
}

여기서 우리는 Org1에 정의하고 있습니다. 타임아웃은 피어나 orderer와 상호작용할 때 응답을 얼마나 기다릴지 판별하는 데 사용되며 단위는 초 단위로 지정됩니다. 아무것도 지정하지 않으면 기본값은 45chdlqslek.

 

1. connection.json 파일의 변경 내용을 저장하세요. 완성된 connection profile은 아래와 같을 것입니다.

{
    "name": "fabric-network",
    "x-type": "hlfv1",
    "version": "1.0.0",
    "peers": {
        "peer0.org1.example.com": {
            "url": "grpc://localhost:7051"
        }
    },
    "certificateAuthorities": {
        "ca.org1.example.com": {
            "url": "http://localhost:7054",
            "caName": "ca.org1.example.com"
        }
    },
    "orderers": {
        "orderer.example.com": {
            "url": "grpc://localhost:7050"
        }
    },
    "organizations": {
        "Org1": {
            "mspid": "Org1MSP",
            "peers": [
                "peer0.org1.example.com"
            ],
            "certificateAuthorities": [
                "ca.org1.example.com"
            ]
        }
    },
    "channels": {
        "composerchannel": {
            "orderers": [
                "orderer.example.com"
            ],
            "peers": {
                "peer0.org1.example.com": {
                    "endorsingPeer": true,
                    "chaincodeQuery": true,
                    "eventSource": true
                }
            }
        }
    },
    "client": {
        "organization": "Org1",
        "connection": {
            "timeout": {
                "peer": {
                    "endorser": "300",
                    "eventHub": "300",
                    "eventReg": "300"
                },
                "orderer": "300"
            }
        }
    }
}

 

 

 

Step Four: Locating the certificate and private key for the Hyperledger Fabric administrator

블록체인 비즈니스 네트워크를 하이퍼레저 패브릭 네트워크에 배포하기 위해, 우리는 스스로를 이러한 동작을 수행할 수 있는 권한을 가진 관리자로 정의해야 합니다. 이 단계에서는 스스로를 관리자로 지정하는데 필요한 파일을 배정합니다.

 

하이퍼레저 패브릭 네트워크의 관리자는 Admin@org1.example.com이라 불리는 사용자입니다. 이 사용자의 인증서와 개인 키는 아래 폴더에 있습니다.

~/fabric-dev-servers/fabric-scripts/hlfv12/composer/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

먼저 이 사용자를 위한 인증서 파일을 위치시켜야 합니다. 인증서는 신원확인의 공개파트입니다. 인증서 파일은 signcerts의 하위 폴더에서 찾을 수 있으며 Admin@org1.example.com-cert.pem이라는 파일입니다. 이 파일의 내용을 보면 아래와 같이 PEM 인코딩 된 인증서를 확인할 수 있습니다.

-----BEGIN CERTIFICATE-----
MIICGjCCAcCgAwIBAgIRANuOnVN+yd/BGyoX7ioEklQwCgYIKoZIzj0EAwIwczEL
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjI2MTI0OTI2WhcNMjcwNjI0MTI0OTI2
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMS5leGFtcGxlLmNvbTBZ
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABGu8KxBQ1GkxSTMVoLv7NXiYKWj5t6Dh
WRTJBHnLkWV7lRUfYaKAKFadSii5M7Z7ZpwD8NS7IsMdPR6Z4EyGgwKjTTBLMA4G
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIBmrZau7BIB9
rRLkwKmqpmSecIaOOr0CF6Mi2J5H4aauMAoGCCqGSM49BAMCA0gAMEUCIQC4sKQ6
CEgqbTYe48az95W9/hnZ+7DI5eSnWUwV9vCd/gIgS5K6omNJydoFoEpaEIwM97uS
XVMHPa0iyC497vdNURA=
-----END CERTIFICATE-----

다음으로는 이 사용자의 개인 키 파일을 위치시켜야 합니다. 개인 키는 이 신원으로 트랜잭션을 인증할 때 사용됩니다. 개인 키 파일은 keystore 하위 디렉토리에서 찾을 수 있습니다. 개인 키 파일의 이름은 긴 16진수 문자열로, 접미어는 _sk입니다. (예: 114aab0e76bf0c78308f89efc4b8c9423e31568da0c340ca187a9b17aa9a4457_sk) 이름은 구성이 생성될 때마다 변경됩니다. 이 파일의 내용을 보면 다음과 유사한 PEM으로 인코딩 된 개인 키를 확인할 수 있습니다.

-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg00IwLLBKoi/9ikb6
ZOAV0S1XeNGWllvlFDeczRKQn2uhRANCAARrvCsQUNRpMUkzFaC7+zV4mClo+beg
4VkUyQR5y5Fle5UVH2GigChWnUoouTO2e2acA/DUuyLDHT0emeBMhoMC
-----END PRIVATE KEY-----

이 두 파일의 경로를 기억하거나 이전 단계에서 작성한 connection profile 파일인 connection.json과 동일한 디렉토리에 파일을 복사해두세요. 다음 단계에서 이 파일이 필요합니다.

 

 

Step Five: Creating a business network card for the Hyperledger Fabric administrator

비즈니스 네트워크 카드는 블록체인 비즈니스 네트워크 및 기본 하이퍼레저 패브릭 네트워크 접속에 필요한 모든 정보가 들어 있습니다. 이 정보에는 Step 3에서 생성한 connection profile과 Step 4에서 위치시킨 관리자의 인증서 및 개인 키가 포합됩니다.

 

이 단계에서는 관리자가 하이퍼레저 패브릭 네트워크에 블록체인 비즈니스 네트워크를 배포하는 데 사용할 비즈니스 네트워크 카드를 생성합니다.

 

composer card create 명령어를 실행시켜서 비즈니스 네트워크 카드를 생성하세요. 이전 단계에서 작성하거나 위치시킨 세 가지 파일 모두에 대한 경로를 지정해야 합니다:

composer card create -p connection.json -u PeerAdmin -c Admin@org1.example.com-cert.pem -k 114aab0e76bf0c78308f89efc4b8c9423e31568da0c340ca187a9b17aa9a4457_sk -r PeerAdmin -r ChannelAdmin

PeerAdmin@fabric-network.card라고 불리는 비즈니스 네트워크 카드 파일이 현재 디렉토리에 작성될 것입니다. composer card create 커맨드와 함께 사용한 옵션을 살펴봅시다.

-p connection.json

이 옵션은 step 3에서 생성한 connection profile 파일의 경로를 나타냅니다.

-u PeerAdmin

이 옵션은 관리자인 사용자를 가리키기 위해 사용하는 이름을 의미합니다. 모든 곳에 Admin@org1.example.com 을 사용하는 대신, 입력하는데 시간이 오래 걸리므로 우리는 이 사용자를 쉽게 참조할 수 있도록 PeerAdmin이라는 이름을 지정했습니다.

-c Admin@org1.example.com-cert.pem

이 옵션은 step 4에서 위치시킨 Admin@org1.example.com 사용자의 인증서 파일 경로를 나타냅니다.

-k 114aab0e76bf0c78308f89efc4b8c9423e31568da0c340ca187a9b17aa9a4457_sk

이 옵션은 step 4에서 위치시킨 Admin@org1.example.com 사용자의 개인 키 파일 경로를 나타냅니다.

-r PeerAdmin -r ChannelAdmin

여기서 우리는 사용자의 역할을 지정합니다. 이 정보는 하이퍼레저 컴포저의 플레이그라운드에서 어떤 사용자가 어떤 작업을 수행할 수 있는지 알기 위해 필요합니다. Admin@org1.example.com이라는 사용자는 하이퍼레저 패브릭 네트워크의 관리자로 PeerAdmin (체인코드 설치 가능) 과 ChannelAdmin (체인코드 객체 생성가능) 역할을 가집니다.

 

 

Step Six: Importing the business network card for the Hyperldeger Fabric administrator

하이퍼레저 컴포저는 지갑에 있는 비즈니스 네트워크 카드만 사용할 수 있습니다. 지갑은 비즈니스 네트워크 카드들을 포함하고 있는 파일 시스템 내 디렉토리 입니다. 이 단계에서는 step 5에서 생성한 비즈니스 네트워크 카드를 지갑으로 import해서 다음 단계에서 이 비즈니스 네트워크 카드를 사용할 수 있도록 합니다.

 

composer card import 명령어를 실행해 비즈니스 네트워크 카드를 지갑으로 import 하세요.

composer card import -f PeerAdmin@fabric-network.card

composer card import 명령어에 사용한 옵션을 살펴봅시다.

-f PeerAdmin@fabric-network.card

이 옵션은 step 5에서 생성한 비즈니스 네트워크 카드 파일의 경로를 의미합니다.

 

이제 PeerAdmin@fabric-network라는 이름을 지정해 비즈니스 네트워크 카드를 사용할 수 있습니다. 이제 블록체인 비즈니스 네트워크를 하이퍼레저 패브릭 네트워크에 배포할 모든 준비가 끝났습니다.

 

우리는 developer tutorial에서 생성한 tutorial-network라는 블록체인 비즈니스 네트워크를 배포할 것입니다. 아직 비즈니스 네트워크 아카이프 파일(.bna)을 만들지 않았다면 step 1, 2, 3 및 developer tutorial을 통해 생성하세요.

 

 

 

Step Seven: Installing the Hyperledger Composer business network onto the Hyperledger Fabric peer nodes

이 단계에서, 블록체인 비즈니스 네트워크를 하이퍼레저 패브릭 피어 노드의 모든 조직에 설치할 것입니다. 하이퍼레저 패브릭 용어에서 이것을 체인코드 설치라고 부릅니다.

 

composer network install 커맨드를 사용해 하이퍼레저 컴포저 런타임을 step 3에서 생성한 connection profile 파일에 정의한 하이퍼레저 패브릭 피어 노드에 설치하세요.

composer network install -c PeerAdmin@fabric-network -a tutorial-network@0.0.1.bna

composer network install 명령어에 사용한 옵션을 살펴봅시다.

-c PeerAdmin@fabric-network

이 옵션은 step 6에서 import한 비즈니스 네트워크 카드의 이름을 의미합니다.

-a tutorial-network@0.0.1.bna

여기서 비즈니스 네트워크의 사본을 설치해야 합니다. 이 옵션은 우리가 배포할 tutorial-network@0.0.1.bna 블록체인 비즈니스 네트워크 파일의 이름을 의미합니다.

 

 

Step Eight: Starting the blockchain business network

이 단계에서는 블록체인 비즈니스 네트워크를 시작합니다. 하이퍼레저 패브릭 용어로 이를 체인코드 생성이라고 합니다.

 

composer network start 명령어를 통해 블록체인 비즈니스 네트워크를 시작하세요.

composer network start --networkName tutorial-network --networkVersion 0.0.1 -A admin -S adminpw -c PeerAdmin@fabric-network

composer network start 명령어에서 사용한 옵션을 살펴봅시다.

-c PeerAdmin@fabric-network

이 옵션은 step 6에서 지갑으로 import한 비즈니스 네트워크 카드의 이름을 의미합니다.

--networkName tutorial-network

이 옵션은 tutorial-network의 블록체인 비즈니스 네트워크 이름을 의미합니다.

--networkVersion 0.0.1

이 옵션은 tutorial-network라고 불리는 블록체인 비즈니스 네트워크의 버전을 의미하며, 이는 비즈니스 네트워크의 package.json 내 version 속성에 정의되어 있습니다.

-A admin

블록체인 비즈니스 네트워크가 배포될 때, 블록체 비즈니스 네트워크 관리자가 될 참가자를 적어도 한 명 이상 생성해야 합니다. 이 참가자는 다른 참가자를 블록체인 비즈니스 네트워크에 onboarding할 책임이 있습니다. 여기서는 admin이라는 단일 블록체인 비즈니스 네트워크 관리자를 만들고자 합니다.

-S adminpw

이 옵션은 블록체인 비즈니스 네트워크 관리자 admin이 adminpw 비밀번호를 사용해 CA에서 인증서 및 개인 키를 요청하도록 지정하는 옵션입니다. 이 옵션을 지정하면 비즈니스 네트워크 관리자에게 지정된 이름이 CA에 이미 등록된 사용자의 기존 등록 ID여야 합니다.

 

이제 블록체인 비즈니스 네트워크가 시작되었으므로 생성된 비즈니스 네트워크 카드 파일 admin@tutorial-network.card를 사용하여 상호작용할 수 있습니다.

 

 

 

Step Nine: Importing the business network card for the business network administrator

composer card import 커맨드를 실행해 비즈니스 네트워크 카드를 지갑으로 import 하세요.

composer card import -f admin@tutorial-network.card

이제 admin@tutorial-network라는 이름으로 비즈니스 네트워크 카드를 사용할 수 있습니다. 이제 실행중인 블록체인 비즈니스 네트워크와 상호작용할 모든 준비가 끝났습니다.

 

 

Step Ten: Testing the connection to the blockchain business network

composer network ping 명령어를 사용해 블록체인 비즈니스 네트워크를 테스트해보세요.

composer network ping -c admin@tutorial-network

테스트 결과가 성공적인지 확인하세요. 비즈니스 네트워크에는 NetworkAdmin이라는 단일 참가자 리스트가 존재할 것입니다.

테비토퍼 도도한 두부모래(오리지날) 8L

 

오늘은 우리 귀탱뽀짝이의 화장실을 책임지는

두부모래를 바꿔보았습니다.

 

기존 사용하던 제품이 안좋아서라기보다는

품절.......왜죠?_? 무슨일이 생긴건가요.

왜 어느 사이트에서도 사용하던 모래를

구매할 수 없는거죠ㅠ_ㅠ??

 

 

저희집 귀탱뽀짝이는

씽씽두부모래 오리지널 + 라벤더

섞어서 사용하고 있었습니다.

 

원래 오리지널만 사용하다가

라벤더도 사볼까 싶어서 샀는데

개인적으로는 라벤더 재구매 의사는 없습니다.

오리지널보다 입자가 무른 느낌이 나서요.

제가 배송받은 제품만 그런지

원래 그런건지는 모르겠지만(?)

오리지널에 비해 너무 물러서

가루가 많이 발생합니다ㅠㅠ

 

 

여튼 새 두부모래로 바꾸게 되었네요.

이번에 구매한 모래는 바로

도도한 두부모래(오리지널) 8L

입니다.

 

사이트마다 가격은 조금씩 차이가 있지만

8L x 6개 20,900원

에 구입했습니다.

 

새 두부모래 개봉

막 개봉했을 때 느껴지는 향은

전혀 나쁘거나 독하지 않구요.

콩비지 100%라서

혹시나 아이들이 먹더라도(?)

덜 위험하지 않을까 하는 생각에

구매했습니다.

 

 

우선 아이들이 싫어할까봐

기존 쓰던 모래와 조금 섞어주었어요.

입자 크기 비교사진 (씽씽 vs 도도한)

 

기존 씽씽두부모래와 입자굵기 및 크기는

다행히 큰 차이가 없습니다.

도도한 두부모래가 조금 더 굵어요.

 

이제 귀탱뽀짝님을 위해

잘 섞어주기만 하면(?)

새로운 두부에 관심을 보이는 귀탱뽀짝

읭ㅇ_ㅇ???? 아직 안섞었는데!!!!!

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

바스락바스락 소리가 나니 귀탱뽀짝이가

관심을 보입니다.

 

 

뭉침이라거나 냄새를 잡아주는건

조금 더 오랜 기간 사용해봐야 알겠지만

씽씽보다는 입자가 굵고 단단한 편이라

가루날림은 적은 편이구요.

다만 대변에는 잘 붙지 않습니다.

 

그래도 저는 씽씽이랑 도도한 중에

하나를 선택한다고 하면

도도한 두부모래를 선택할 것 같아요.

 

저는 거의 재택근무를 하기 때문에

아이들이 화장실가면 바로 치워주는 편이라

덜붙는거야 개인적으로는 큰 이슈가 아닙니다.

가루날림!!!!이 덜하다는게 더 중요해서요.

 

집사님들의 상황에 맞게

냥이님들이 거부하지만 않으면

잘 골라 사용하시면 될 듯해요.

 

 

 

* 본 포스팅은 하이퍼레저 패브릭 docs를 번역한 내용으로, 번역 과정에서 잘못된 부분이 있을 수 있습니다.

상세 내용은 하단 링크를 참조 부탁드리며, 잘못된 내용에 대한 피드백은 언제든 환영합니다 : ) 

https://hyperledger.github.io/composer/latest/tutorials/queries

 

Queries Tutorial | Hyperledger Composer

Queries Tutorial using the Composer Query language and REST APIs In this tutorial, we will build on the developer tutorial, extending it to demonstrate queries. The native query language can filter results returned using criteria and can be invoked in tran

hyperledger.github.io

이 튜토리얼에서는 developer tutorial에 이어 쿼리를 설명할 것입니다. native query language는 특정 기준에 부합하는 결과를 리턴하거나 결과 집합에 있는 자산을 업데이트 혹은 제거하는 연산을 수행하는 트랜잭션에 의해 호출될 수 있습니다. 

 

쿼리는 비즈니스 네트워크 정의 부모 폴더 내 쿼리 파일(.qry)에 정의되어 있습니다. 쿼리는 어떤 자산 혹은 참가자들을 선택할지 기준이 정의된 WHERE절을 포함하고 있습니다.

 

이 튜토리얼은 Developer-tutorial에서 개발 및 배포한 tutorial-network 비즈니스 네트워크를 사용합니다.

 

Prerequisites

이 튜토리얼을 시작하기 전:

- 개발환경 설치를 완료하세요.

https://ralee-world.tistory.com/entry/Hyperledger-Composer-Installing?category=719808

 

Composer Installing

* 본 포스팅은 하이퍼레저 패브릭 docs를 번역한 내용으로, 번역 과정에서 잘못된 부분이 있을 수 있습니다. 상세 내용은 하단 링크를 참조 부탁드리며, 잘못된 내용에 대한 피드백은 언제든 환영합니다 : ) http..

ralee-world.tistory.com

- developer tutorial을 완료하세요.

https://ralee-world.tistory.com/entry/Developer-Tutorial

 

Composer Developer Tutorial

* 본 포스팅은 하이퍼레저 패브릭 docs를 번역한 내용으로, 번역 과정에서 잘못된 부분이 있을 수 있습니다. 상세 내용은 하단 링크를 참조 부탁드리며, 잘못된 내용에 대한 피드백은 언제든 환영합니다 : ) http..

ralee-world.tistory.com

 

Step One: Updating the business network

developer tutorial에서 생성된 비즈니스 네트워크를 업데이트해야 합니다. 업데이트된 버전의 비즈니스 네트워크는 두 개의 이벤트와 하나의 추가적인 트랜잭션을 가집니다.

 

Update the model file

모델 파일은 이벤트와 새 트랜잭션을 포함하도록 업데이트되어야 합니다.

 

1. tutorial-network의 모델 파일(.cto)파일을 여세요.

2. 아래 내용을 따라 이벤트와 트랜잭션을 추가하세요.

event TradeNotification {
    --> Commodity commodity
}

transaction RemoveHighQuantityCommodities {
}

event RemoveNotification {
    --> Commodity commodity
}

3. 모델에 변경된 내용을 저장하세요.

 

 

Update transaction logic to use queries and events

이제 도메인 모델이 업데이트 되었으므로, 우리는 이제 트랜잭션이 처리를 위해 제출될 때 실행되는 추가적인 비즈니스 로직을 작성할 수 있습니다. 이 튜토리얼에서 우리는 아래처럼 이벤트와 비즈니스 로직을 추가합니다.

 

1. 트랜잭션 처리 함수 파일(lib/logic.js)을 여세요.

2. 트랜잭션 내용을 아래 JavaScript코드로 변경하세요.

/**
 * Track the trade of a commodity from one trader to another
 * @param {org.example.mynetwork.Trade} trade - the trade to be processed
 * @transaction
 */
async function tradeCommodity(trade) {

    // set the new owner of the commodity
    trade.commodity.owner = trade.newOwner;
    let assetRegistry = await getAssetRegistry('org.example.mynetwork.Commodity');

    // emit a notification that a trade has occurred
    let tradeNotification = getFactory().newEvent('org.example.mynetwork', 'TradeNotification');
    tradeNotification.commodity = trade.commodity;
    emit(tradeNotification);

    // persist the state of the commodity
    await assetRegistry.update(trade.commodity);
}

/**
 * Remove all high volume commodities
 * @param {org.example.mynetwork.RemoveHighQuantityCommodities} remove - the remove to be processed
 * @transaction
 */
async function removeHighQuantityCommodities(remove) {

    let assetRegistry = await getAssetRegistry('org.example.mynetwork.Commodity');
    let results = await query('selectCommoditiesWithHighQuantity');

    for (let n = 0; n < results.length; n++) {
        let trade = results[n];

        // emit a notification that a trade was removed
        let removeNotification = getFactory().newEvent('org.example.mynetwork','RemoveNotification');
        removeNotification.commodity = trade;
        emit(removeNotification);
        await assetRegistry.remove(trade);
    }
}

3. logic.js 파일 변경 내용을 저장하세요.

 

첫 번째 함수인 tradeCommodity는 들어오는 Trade 트랜잭션 내 commodity의 owner 속성을 변경할 것입니다. (새로운 참가자를 소유자로) 그리고 해당 효과에 대한 알림을 생략할 것입니다. 그리고나서 수정된 commodity를 다시 Commodity 객체를 저장하는 asset registry에 저장합니다.

 

두 번째 함수는 named query라고 불리는 'selectCommoditiesWithHighQuantity' (queries.qry 파일에 정의된) 쿼리로 quantity > 60인 모든 Commodity asset 기록을 리턴합니다. 이벤트는 생략하며 해당 Commodity를 AssetRegistry에서 제거합니다.

 

 

Step Two: Create a query definition file

이 쿼리는 queries.qry 파일 내 정의된 트랜잭션 처리 로직에 의해 사용됩니다. 각 쿼리 엔트리는 리소스 및 어느 쿼리가 실행될지를 결정하는 기준을 정의합니다.

 

1. tutorial-network 폴더 내, queries.qry파일을 생성하세요.

2. queries.qry 파일 내 아래 코드를 붙여넣으세요.

/** Sample queries for Commodity Trading business network
*/

query selectCommodities {
  description: "Select all commodities"
  statement:
      SELECT org.example.mynetwork.Commodity
}

query selectCommoditiesByExchange {
  description: "Select all commodities based on their main exchange"
  statement:
      SELECT org.example.mynetwork.Commodity
          WHERE (mainExchange==_$exchange)
}

query selectCommoditiesByOwner {
  description: "Select all commodities based on their owner"
  statement:
      SELECT org.example.mynetwork.Commodity
          WHERE (owner == _$owner)
}

query selectCommoditiesWithHighQuantity {
  description: "Select commodities based on quantity"
  statement:
      SELECT org.example.mynetwork.Commodity
          WHERE (quantity > 60)
}

3. queries.qry 파일을 저장하세요.

 

 

Step Three: Regenerate your business network archive

비즈니스 네트워크 내 파일을 변경한 후, 비즈니스 네트워크는 비즈니스 네트워크 아카이브 (.bna)로 리패키징되어 하이퍼레저 패브릭 객체에 재배포되어야 합니다.  배포된 네트워크를 업그레이드 하기 위해서는 새로운 버전 및 버전 번호가 필요합니다.

 

1. tutorial-network 폴더에서 package.json 파일을 여세요.

2. version 속성을 0.0.1에서 0.0.2로 업데이트하세요.

3. 커맨드라인을 사용해 tutorial-network폴더로 이동하세요.

4. 아래 명령어를 실행하세요.

composer archive create --sourceType dir --sourceName . -a tutorial-network@0.0.2.bna

 

 

Step Four: Deploy the updated business network definition

우리는 수정된 네트워크가 블록체인의 가장 최신 버전이 되도록 배포해야 합니다. 우리는 이미 배포된 비즈니스 네트워크를 업데이트 하기 위해 새로 생성된 비즈니스 네트워크 아카이브 파일을 사용하고 있습니다. 이는 developer tutorial에서 사용한 것과 동일한 비즈니스 네트워크 이름을 갖고 있습니다.

 

1. 터미널로 이동해 tutorial-network@0.0.2.bna 파일을 포함하고 있는 디렉토리로 이동하세요.

2. 업데이트된 비즈니스 네트워크를 설치하기 위해 아래 명령어를 실행하세요.

composer network install --card PeerAdmin@hlfv1 --archiveFile tutorial-network@0.0.2.bna

3. 네트워크를 새 버전으로 업그레이드하기 위해 아래 명령어를 실행하세요.

composer network upgrade -c PeerAdmin@hlfv1 -n tutorial-network -V 0.0.2

4. 아래 명령어를 실행하기 전 현재 비즈니스 네트워크의 버전을 확인하세요.

composer network ping -c admin@tutorial-network | grep Business

 

 

Step Five: Regenerate the REST APIs for the updated Business Network

우리는 이제 새로 업데이트된 비즈니스 네트워크와 추가된 쿼리를 통합하고, 이 비즈니스 네트워크용 REST API를 노출시킬 것입니다.

 

1. 커맨드라인을 사용해 tutorial-network 폴더로 이동하세요.

2. REST 서버를 실행하기 위해 아래 명령어를 실행하세요.

composer-rest-server

3. 카드 이름에 admin@tutorial-network를 입력하세요.

4. 생성된 API에서 네임스페이스를 사용할 지 물으면 'never use namespaces'를 선택하세요.

5. 생성된 API를 보호할지 물으면 No를 선택하세요.

6. 이벤트 발행이 가능하게 할지 물으면 Yes를 선택하세요.

7. TLS security를 사용할지 물으면 No를 선택하세요.

 

 

Step Six: Test the REST APIs and create some data

웹 브라우저를 열어  http://localhost:3000/explorer 로 이동하세요. LoopBack API 익스플로러 화면이 보일 것입니다. 이는 생성된 REST API를 확인하고 테스트할 수 있게 해줍니다.

 

우리는 Query라고 적힌 REST Endpoint가 추가된 것을 확인할 수 있습니다. 아래로 내려가면 tutorial-network 비즈니스 네트워크에 정의한 REST Query operation 리스트가 나옵니다.

 

계속 진행하기 전, 우리는 쿼리를 충분히 검증할 수 있는 데이터를 생성해야 합니다. 제공된 JSON 샘플 데이터를 사용해 REST API를 사용하는 3개의 Trader(참가자)와 몇몇 Commodities(자산)을 생성하세요.

 

1. 먼저 REST 익스플로러에 있는 'Trader'를 클릭한 후 /Trader에 있는 'POST' 함수를 클릭하세요. 그리고나서 스크롤을 아래로 내리면 파라미터 섹션이 있습니다. 아래 Trader 객체를 생성하세요.

{
  "$class": "org.example.mynetwork.Trader",
  "tradeId": "TRADER1",
  "firstName": "Jenny",
  "lastName": "Jones"
}

2. 참가자 생성을 위해 'Try it out'을 클릭하세요. 아래로 스크롤하면 'Response Code'가 나오는데, 이는 200 (SUCCESS)이어야 합니다.

 

3. 아래 JSON을 복사해 또 다른 trader를 생성하세요.

{
  "$class": "org.example.mynetwork.Trader",
  "tradeId": "TRADER2",
  "firstName": "Jack",
  "lastName": "Sock"
}

4. 아래 JSON을 복사해 세 번째 trader를 생성하세요.

{
  "$class": "org.example.mynetwork.Trader",
  "tradeId": "TRADER3",
  "firstName": "Rainer",
  "lastName": "Valens"
}

5. 이제 스크롤 맨 위로 올라가 REST 익스플로러에 있는 'Commodity' 객체를 선택하세요.

 

6. POST를 선택하고 스크롤을 아래로 내려 파라미터 섹션으로 이동하세요. 위에서 한 것과 동일하게 두 개의 Commodity 자산을 생성하되, 하나는 TRADER1이 또 다른 하나는 TRADER2가 소유하도록 합니다.

{
  "$class": "org.example.mynetwork.Commodity",
  "tradingSymbol": "EMA",
  "description": "Corn",
  "mainExchange": "EURONEXT",
  "quantity": 10,
  "owner": "resource:org.example.mynetwork.Trader#TRADER1"
}
{
  "$class": "org.example.mynetwork.Commodity",
  "tradingSymbol": "CC",
  "description": "Cocoa",
  "mainExchange": "ICE",
  "quantity": 80,
  "owner": "resource:org.example.mynetwork.Trader#TRADER2"
}

 

 

 

Step Seven: Perform queries using the commodity trading REST API explorer

이제 몇몇 자산과 참가자가 생성되었으므로 우리는 생성된 쿼리 REST operation을 사용해 쿼리를 테스트할 수 있습니다.

 

Perform a simple REST query

이제 우리는 자산과 참가자가 있으므로 쿼리를 실행해 볼 수 있습니다.

 

실행해볼 수 있는 가장 단순한 REST 쿼리는 named query인 selectCommodities입니다.

 

'Query' REST Endpoint 탭을 확장해 모델 내 정의된 named query들을 볼 수 있습니다.

 

이 쿼리들은 이제 REST 쿼리로 노출되며 /GET operation이 생성됩니다. 쿼리에 대산 설명 (우리가 모델 정의에 작성한) 은 오른쪽에 보여집니다.

 

1. selectCommodities 쿼리 탭을 확장하세요.

2. 'Try it Out' 버튼을 클릭하세요.

그러면 모든 존재하는 Commodity들이 리턴될 것입니다. - 2개의 자산이 리턴되어야 합니다.

Perform Filtered REST Queries

이제 교환을 통해 이뤄진 모든 Commodity를 선택해 봅시다. - 예를 들어 메인 거래인 'EURONEXT'

 

1. query endpoint탭을 확장하고 'selectCommoditiesByExchange'를 선택한 후 스크롤을 아래로 내려 파라미터 섹션으로 이동하세요.

2. 'Exchange' 파라미터에 'EURONEXT'를 입력하세요.

3. 'Try it Out'을 클릭하세요.

결과는 'EURONEXT'에 의해 교환된 commodity만을 반환하며 이는 response body에 담겨있습니다.

 

Perform Transaction update using results from naemd Query

마지막으로, 우리가 쿼리 파일에 정의한 Quantity > 60 이상인 Commodity를 선택하는 간단한 쿼리를 회상해봅시다. 쿼리는 트랜잭션 함수를 사용할 때 매우 강력합니다. 쿼리를 사용하면 트랜잭션 로직은 자산 혹은 참가자 집합을 업데이트하거나, 생성/삭제 등의 행위를 수행할 수 있습니다.

우리는 selectCommoditiesWithHighQuantity 쿼리를 removeHighQuantityCommodities 트랜잭션에서 사용합니다. 만일 이 /GET operation을 REST 익스플로러에서 실행시키면, quantity가 60보다 큰 자산을 볼 수 있습니다.

이제 high quantity Commodities를 삭제하기 위해 쿼리를 사용해 봅시다.

 

먼저 얼마나 많은 Commodity들이 존재하는지 확인하세요 ('Commodity' /GET operation 사용). 그러면 적어도 두 개의 Commodities를 확인할 수 있을 것이며 그 중 하나 (Cocoa)는 quantity가 60보다 클 것입니다.

REST Endpoint의 /selectCommoditiesWithHighQuantity를 클릭한 후 /GET을 클릭하고 스크롤을 아래로 내려 'Try it Out' 버튼을 누르세요. 실제 쿼리를 확인해봅시다. 기준을 만족시키는 하나의 Commodity가 있을 것입니다.

이제 어느 Commodity를 삭제할 지 결정하는 'High Quantity' 쿼리 정의를 사용해 REST 트랜잭션을 실행시켜봅시다. 

 

RemoveHighQuantityCommodities REST Endpoint를 클릭해 /POST operation이 보이게 하세요.

POST를 클릭하고 스크롤을 아래로 내리면 파라미터 섹션이 보입니다. 'Try it Out'을 클랙하세요.

참고: 'data' 섹션에 있는 어떤 데이터도 입력하지 않아도 됩니다.

스크롤을 아래로 내리면 트랜잭션 처리 함수 내부적으로 'remove'를 호출 (블록체인 트랜잭션) 하고 world state를 업데이트하는 트랜잭션 id를 볼 수 있습니다. - Reponse Code는 200dldjdi gkqslek.

마지막으로 우리 Commodities의 status를 확인해 봅시다. 'Commodity' REST Operation으로 돌아가 다시 한번 'Try it Out' 버튼을 사용해 /GET operation을 수행해보세요.

 

결과는 Commodidy 자산인 'Cocoa'가 사라져있을 것입니다. 즉, Commodity 자산의 quantity 가 60 이하인 것만 남아 있을 것입니다. 여기서는 'Corn'이 남아있습니다. named query는 트랜잭션 업데이트를 수행하고 (high quantity commodities를 제거하는) 비즈니스 로직을 수행했습니다.

첫 사회생활을 하며 만든 신한 LOVE카드를 뒤로하고

프리미엄 카드로 갈아탔습니다.

첫 프리미엄 카드는 바로 The CLASSIC+

디자인이 참 예뻐요, 반짝반짝ㅋㅋㅋㅋ

 

연회비

URS 12만원

AMEX 12만 5천원

(가족카드 연회비 3만원)

 

저는 아멕스를 선택했구요.

오늘은 신한 The CLASSIC+의 혜택에 대해

정리해보겠습니다.

 

저는 아직 신용카드 초보라

카드 종류 및 혜택에 대해 잘 모르는데요ㅠㅠ

사실 이 카드를 선택한 이유도

단순히 PP카드 때문이었으나..!!!

이번 기회를 통해 카드 혜택을 쏙쏙 잘 이용해보려 합니다.

 


1. Gift Option Service

매년 1회 다섯가지 (쇼핑/요식/전자/호텔/포인트)

중 하나를 선택해서 이용할 수 있습니다.

 

신세계 상품권 모바일 교환권 (9만원)

패밀리 레스토랑 이용권 (11만원)

LG전자 이용권 (12만원)

호텔 통합 이용권 (11만원)

마이신한포인트 (7만점)

 

개인적으로는 신세계 상품권이 베스트인 것 같습니다.

ㅋㅋㅋㅋㅋㅋ

전국 이마트 매장 내 상품권 샵에서

상품권으로 교환할 수 있고,

유효기간은 발송일로부터 6개월입니다.

 

 

2. Reward

항공 마일리지를 적립해주는 서비스입니다.

신청 시 대한항공/아시아나항공 중에 선택하면

일시불 및 할부 이용금액에 따라 적립해주는데요.

 

대한항공 1마일 / 1,500원

아시아나 1마일 / 1,000원

 

위 마일리지는 전월 실적이 30만원 이상일 경우

기본으로 적립해주는 마일리지고,

실적에 따라 추가 특별적립도 있습니다.

전월 실적이 200만원이 넘으면

마일리지 50%를 추가 적립해주네요.

 

 

 

3. 주유할인

GS칼텍스 주유할인인데요.

 

리터당 40원 결제일 할인

월 최대 40만원까지

 

저는 장롱면허소지자라 관심이 없습니다ㅠㅠ

운전....무서운것.....

 

 

 

4. 공항라운지

Priority Pass 카드 제공 (아멕스 카드 신청시)

 

전세계 700여개 해외 공항 VIP라운지 무료 이용

국내 라운지는 무료 이용 불가

 

바로 이거죠! 이 카드를 선택한 이유입니다.

PP카드로 라운지를 이용할 수 있어요.

리셉션에서 PP카드와 탑승권, 여권을 제시하면 됩니다.

심지어 횟수 제한도 없어요ㅋㅋㅋㅋ짱짱

 

 

 

5. 면세점

제주 JDC 면세점 8% 할인

 

전월 실적에 따라

월 할인한도 최대 8천원~3만2천원까지

적용됩니다.

 

흠 제주도 1년에 1번은 가는 것 같으니

무난한 혜택이네요.

 

 

 

6. 커피

스타벅스 커피 할인

 

7,000원 이상 구매 시 3,000원 할인

월 1회 / 연 6회 제공

 

스벅커피 할인!!

집 앞에 단골 카페가 있어서 자주 가진 않지만

타지에 가면 항상 가게되는 그곳ㅋㅋㅋ

1년에 6번은 가겠죠.

 

 

7. 공항

인천공항 무료 발렛파킹

월 3회까지 가능

 

뚜벅이는 이런거 잘 몰라요~

 


 

기본 혜택은 이정도이구요, 

이 외에도 아멕스 플래티늄, 호텔 서비스 등

다른 혜택들도 있는데

다음 포스팅에서 정리해 보겠습니다.

 

 

PP카드 때문에 신청했지만

혜택 확인을 잘 해서 연회비만큼

쏙쏙 챙겨가겠습니다!!!

서울 동묘앞역 부근 맛집 "동묘 가라지" 방문 후기입니다. 동묘앞 역은 동묘시장과 더불어 닭칼국수, 흑돼지 등 정겨운 시장 풍경의 가게들이 줄지어 있는데요. 그 속에서 분위기 뿜뿜하는 숨은 분위기 맛집 동묘 가라지를 소개합니다.

위치는 하단 링크에 첨부해두었어요.

동묘 가라지 입구

골목골목을 지나가다보면 소박하지만 느낌있는 간판이 걸려 있습니다. 큰 입간판은 따로 없으니 주위를 잘 살펴보며 가셔야 해요~ 저는 한 번 지나칠뻔...

동묘 가라지 시그니처 메뉴

이 집의 시그니처 메뉴를 먹어봐야겠죠? 저희는 3인 기준으로 시그니처 메뉴인 블록버스터 피자, 통목살 스테이크와 크림파스타 + 음료를 주문했어요. 시그니처 메뉴 외에도 피자, 파스타 등 다양한 메뉴가 있습니다.

피자 종류
파스타 & 리조또
사이드메뉴
주류
주류
음료

다양한 맥주도 많고 무알콜 음료도 준비되어 있습니다.

식당 내부 벽면

내부 벽면에도 느낌있게 메뉴들이 써져 있구요.

가게 내부 모습

식당 내부는 그리 넓지 않습니다. 6-8인 정도의 단체석 테이블 1개, 4인석 3~4개 2인석 2개 정도 였던 것 같아요. 벽면에 철물점에서 보일법한 아이템들을 걸어두셨는데 느낌있네요~

기본 셋팅

기본 숟가락, 포크, 나이프 그리고 피클과 짭조롬한 과자를 먹으며 음식을 기다립니다.

안동금맥주와 무알콜음료

저희는 안동금맥주와 무알콜 음료를 주문했습니다. 무알콜음료는 상큼한? 느낌의 칵테일 맛이 나네요.

통구이 & 피자 & 파스타

주문한 음식이 모두 나왔습니다. 피자 도우는 두껍지 않고 토핑도 듬뿍듬뿍 괜찮았구요, 피자 파스타는 전반적으로 크림이 진하다거나 특별한 맛은 아니었지만 맛있었습니다. 원래 아는 맛이라서 먹고 싶은 거잖아요?ㅋㅋㅋㅋ

통구이는 비쥬얼이..... 처음 등장했을 때 우와 ㅇ_ㅇ 했어요.

오븐 통구이
빠르게 움직이는 손

함께 나온 칼로 슥삭슥삭 잘라줍니다. 촉촉한 비계와 살코기가 적절해서 맛있네요. 다만 썰어두면 표면이 말라 딱딱해지니 바로바로 드실 만큼만 써시는 것을 추천합니다.

깨끗하게 비운 접시

결과는 ㅇ_ㅇ 아주 싹~ 깨끗하게 비웠네요. 분위기도 좋고 맥주 한 잔 하기도 좋고 맛도 괜찮았습니다. 동묘앞 분위기 맛집이네요! 역에서도 엄청 가깝습니다. 

 

7월 11일, 카카오뱅크가 1,000만 고객 달성 기념으로

천만위크 이벤트를 진행하네요.


7월 22일~28일 일주일 간

매일 오전 11시에 

이벤트를 진행한다고 하니

내용을 살펴볼까요?

 

월요일 (7/22)

연 5% 특별판매 정기예금

 

화요일 (7/23)

체크카드 결제 시 CGV 영화관람권

 

수요일 (7/24)

26주적금가입 시 이자 2배

 

목요일 (7/25)

해외송금비용 완전무료

 

금요일 (7/26)

간편이체하면 나이키맥스

 

토,일요일 (7/27,28)

여러가지 혜택


하나씩 자세히 살펴볼까요?

 

다양한 이벤트가 있지만

이 중 제가 가장 관심있는 것은

바로바로 월요일!

연 5% 특별판매 정기예금

 

7월15일~21일 사전 응모기간이 있구요.

사전응모하고 받은 문자메시지로

7월 22일 월요일 오전 11시에

선착순으로 가입하면 된다고 합니다.

사전응모는 모바일로만 가능해요.

 

 

두번째, CGV 영화관람권

화요일 11시~14시 사이 1만원 이상을

카카오뱅크 체크카드로 결제하면

1만 명을 추첨해서 영화관람권을 주네요.

 

 

세번째, 26주적금 이자 2배

이것도 솔깃한데요.

수요일 11시~24시 사이 26주적금에

신규 가입하고 만기 달성하면

이자만큼 캐시백 지급!

도전해봐야겠어요.

 

 

네번째, 해외송금비용무료

저는 해외송금할 일이 없지만,

해외계좌송금수수료와 환율우대금액 

모두 캐시백으로 지급된다고 하네요.

 

 

다섯번째, 간편이체하면 나이키맥스

카카오톡 친구에게 이체하기 메뉴로

신발사이즈를 친구에게 이체하면

(저는 240mm니까 240원ㅋㅋㅋ)

나이키 에어맥스95 500켤레 추첨한다고 해요.

 

 

마지막, 주말에는 토/일 각 1가지씩

선택가능한 혜택들입니다.

 

카카오페이지무제한 (20,000명)

카카오헤어샵 300원 (5,000명)

카카오T택시 (25,000명)

카카오톡 아이스크림 선물 1+1 (10,000명)

카카오 이모티콘 (50,000명)

 

 

다양한 이벤트들이 많네요.

저는 월, 수, 금을 노려봅니다.

 

이벤트 상세 내용은 아래 링크를 참고해주세요.

https://event.kakaobank.com/p/10mw_main

 

카카오뱅크 천만위크

딱 1주일, 놓칠 수 없는 혜택 확인하기!

event.kakaobank.com

 

* 본 포스팅은 하이퍼레저 캘리퍼 docs를 번역한 내용으로, 번역 과정에서 잘못된 부분이 있을 수 있습니다.

상세 내용은 하단 링크를 참조 부탁드리며, 잘못된 내용에 대한 피드백은 언제든 환영합니다 : ) 

https://hyperledger.github.io/caliper/docs/1_Getting_Started.html

 

Getting Started

Caliper is a blockchain performance benchmark framework, which allows users to test different blockchain solutions with predefined use cases, and get a set of performance test results.

hyperledger.github.io

Caliper Introduction

Caliper는 블록체인 성능 벤치마킹 프레임워크이며, 이는 사용자에게 이미 정의된 유즈케이스로 다른 블록체인 솔루션을 테스트할 수 있게 해주며 성능 테스트 결과를 제공합니다.

 

Currently supported blockchain solutions:

  • Hyperledger Burrow
  • Hyperledger Composer
  • Hyperledger Fabric
  • Hyperledger Iroha
  • Hyperledger Sawtooth

Currently supported performance indicators:

  • Success rate
  • Transaction/Read throughput
  • Transaction/Read latency(minimum, maximum, average, percentile)
  • Resource comsuption(CPU, Memory, Network IO,...)

측정 방법에 대한 정의를 보려면 PSWG를 참고하세요.

https://wiki.hyperledger.org/groups/pswg/performance-and-scale-wg

불러오는 중입니다...

 

Architecture

Architecture Introduection 페이지를 참고하세요.

https://hyperledger.github.io/caliper/docs/2_Architecture.html

 

Architecture

Caliper is a blockchain performance benchmark framework, which allows users to test different blockchain solutions with predefined use cases, and get a set of performance test results.

hyperledger.github.io

 

Pre-requisites

아래 도구들을 설치해주세요.

  • NodeJS 8 (LTX), 9, or 10 (LTS) 상위버전 호환은 지원되지 않습니다.
  • node-gyp
  • Docker
  • Docker-compose

Building Caliper

Caliper는 Lerna에서 여러 패키지로 나뉘어 집니다. Lerna는 여러 패키지로 JavaScript프로젝트를 관리하는 도구입니다. Caliper를 구축하려면 먼저 필요한 기본 종속성을 가져와 Caliper 프로젝트를 실행시켜야 합니다. 기본 코드를 수정하는 경우 프로젝트를 다시 빌드해야 합니다.

  • Caliper root 폴더에서 기본 종속성을 설치하기 위해 npm install을 실행하세요.
  • 패키지들이 빈 상태임을 확실히 하기 위해  npm run repoclean을 실행하세요.
  • Caliper repository에 있는 패키지를 실행하기 위해 npm run bootstrap을 실행하세요. 이 과정은 모든 패키지 종속성과 종속성 간 링크를 설치합니다. 설치에는 시간이 다소 소요될 수도 있습니다. ctrl+c로 중단될 경우, package.json 파일을 먼저 복구한 후 npm run bootstrap 명령어를 다시 실행하세요.

sudo를 사용해 위 명령어를 실행하지 마세요, bootstrap 과정이 실패합니다.

지원되는 블록체인 기술을 대상으로 하는 벤치마크 구성은 다음 링크를 참고하세요.

https://hyperledger.github.io/caliper/docs/Burrow_Configuration.html

 

Burrow Configuration

Caliper is a blockchain performance benchmark framework, which allows users to test different blockchain solutions with predefined use cases, and get a set of performance test results.

hyperledger.github.io

https://hyperledger.github.io/caliper/docs/Composer_Configuration.html

 

Composer Configuration

Caliper is a blockchain performance benchmark framework, which allows users to test different blockchain solutions with predefined use cases, and get a set of performance test results.

hyperledger.github.io

https://hyperledger.github.io/caliper/docs/Fabric_Configuration.html

 

Fabric Configuration

Caliper is a blockchain performance benchmark framework, which allows users to test different blockchain solutions with predefined use cases, and get a set of performance test results.

hyperledger.github.io

https://hyperledger.github.io/caliper/docs/Fabric_Ccp_Configuration.html

 

Fabric CCP Configuration

Caliper is a blockchain performance benchmark framework, which allows users to test different blockchain solutions with predefined use cases, and get a set of performance test results.

hyperledger.github.io

https://hyperledger.github.io/caliper/docs/Iroha_Configuration.html

 

Iroha Configuration

Caliper is a blockchain performance benchmark framework, which allows users to test different blockchain solutions with predefined use cases, and get a set of performance test results.

hyperledger.github.io

https://hyperledger.github.io/caliper/docs/Sawtooth_Configuration.html

 

Sawtooth Configuration

Caliper is a blockchain performance benchmark framework, which allows users to test different blockchain solutions with predefined use cases, and get a set of performance test results.

hyperledger.github.io

 

Running a Benchmark

벤치마크는 Caliper 커맨드 인터페이스를 사용하여 실행할 수 있습니다. 빌드 과정에는 proxy npm 서버에 모든 Caliper 모듈을 게시한 다음 이 서버에서 CLI 패키지를 전체적으로 설치하는 통합테스트가 포함되어 있지만, 우리는 npm으로 Caliper 패키지를 게시할 준비를 하고 있습니다. Caliper CLI를 사용하려면 Caliper 테스트 유틸리티를 사용하는 것이 좋습니다.

 

Intall the Caliper CLI

우리는 아직 npm에 Caliper를 게시하지 않았지만 Caliper CLI는 <CaliperRoot>/packages/caliper-tests-integration/scripts/run-integration-tests.sh에 있는 테스트 스크립트를 통해 얻을 수 있습니다. 테스트 스크립트에는 테스트 할 특정 어댑터를 선택하기 위해 환경변수 세트가 필요합니다. 이것은 단지 CI 시스템의 요구사항일 뿐입니다. 

 

Steps:

1. 위 섹션에서 설명한 Caliper 프로젝트 빌드를 아직 하지 않았다면, 빌드하세요.

2. Caliper CLI를 획득하기 위해 root Caliper 위치에서 아래 명령어를 실행하세요.

export BENCHMARK=fabric-ccp
./packages/caliper-tests-integration/scripts/run-integration-tests.sh

위 명령어는 npm 프록시 서버 (Verdaccio)를 시작하고, Caliper 모듈을 서버에 게시하고, 패키지를 전역 설치하고, 마지막으로 traget 벤치마크를 실행합니다. 현재 벤치마크 결과는 중요하지 않습니다. 벤치마크가 시작되면 명령을 발행한 스템에 Caliper 패키지가 전역으로 설치됩니다.

 

현재 Caliper 패키지는 다음 어댑터 클라이언트 라이브러리를 지원하도록 설정되어 있습니다:

  • Burrow: @monax/burrow@0.23.0
  • Composer: composer@0.20.8
  • Fabric: fabric-client@1.4.0
  • Iroha: iroha-helpers@0.6.3
  • Sawtooth: sawtooth-sdk@1.0.5

위와 다른 클라리언트 종속성이 있는 어댑터를 사용하여 벤치마크를 실행해야하는 경우 통합 테스트 스크립트를 실행하기 전 해당 package.json 파일을 수정한 다음 Caliper 프로젝트를 다시 빌드해야 합니다. 알려진 호환성 목록은 아래와 같습니다.

Fabric v1.0 grpc@1.10.1 fabric-ca-client@1.1.0 fabric-client@1.1.0
Fabric v1.1 grpc@1.10.1 fabric-ca-client@1.1.0 fabric-client@1.1.0
Fabric v1.2 fabric-ca-client@1.4.0 fabric-client@1.4.0 fabric-network@1.4.0
Fabric v1.3 fabric-ca-client@1.4.0 fabric-client@1.4.0 fabric-network@1.4.0
Fabric v1.4 fabric-ca-client@1.4.0 fabric-client@1.4.0 fabric-network@1.4.0

예를 들어, Hyperledger Fabric v1.1을 테스트하려면 grpc@1.10.1, fabric-ca-client@1.1.0, fabric-client@1.1.0을 사용하도록 caliper-fabric-ccp 어댑터를 수정해야합니다.

참고: Caliper 패키지가 npm으로 게시되면 위의 호환성 요구사항에 대한 버전을 게시하게 되며 npm install -g caliper-<package>@<version>을 사용하여 얻을 수 있는 Caliper버전으로 표가 업데이트 됩니다.

 

Run a Sample Benchmark

미리 정의된 벤치마크는 벤치마크 폴더에서 볼 수 있습니다. Caliper CLI에는 벤치마크 구성 및 테스트 파일이 포함된 workspace라는 개념이 있습니다.

 

벤치마크는 Caliper CLI command를 사용해 실행됩니다.

caliper benchmark run -w <path to workspace> -c <benchmark config> -n <blockchain config>
  • -w : workspace 디렉토리 경로 (필수)
  • -c : workspace에서 벤치마크 configuration 파일 상대경로 (필수)
  • -n : workspace에서 테스트할 블록체인 네트워크 config 파일의 상대경로

root Caliper 폴더에 있다고 가정하면, 아래 명령어는 Caliper 샘플에 있는 내용을 사용해 테스를 실행합니다.

caliper benchmark run -w ./packages/caliper-samples -c benchmark/simple/config.yaml -n network/fabric-v1.4/2org1peercouchdb/fabric-ccp-node.yaml

원하는 벤치마크를 수행하기 위해 caliper-sampls 디렉토리에 있는 파일을 수정하거나 추가할 수 있습니다. 벤치마크를 추가하기 전에 샘플 벤치마크 컨텐츠 및 구조를 확인하세요. 테스느 중인 블록체인 시스템, 벤치마크 구성, 스마트 계약 및 배포된 스마트 계약과 상호작용하는 테스트 파일(콜백)에 대한 고유 구성파일을 추가해야 합니다.

 

 

Run Benchmark with Distributed Clients (Experimental)

이 방식에서는, 여러 클라이언트가 동일한 벤치마크 수행을 위해 분산 호스트에서 실행될 수 있습니다.

1. Caliper CLI를 사용해 ZooKeeper 서비스를 시작하세요.

caliper zooservice start

2. Caliper CLI를 사용해 각 대상 머신에 caliper-zoo-client를 실행하세요.

caliper zooclient start -w ~/myCaliperProject -a <host-address>:<port>  -n my-sut-config.yaml

3. configuration 파일에 있는 클라이언트 타입 설정을 zookeeper로 변경하세요.

 "clients": {
   "type": "zookeeper",
   "zoo" : {
     "server": "10.229.42.159:2181",
     "clientsPerHost": 5
   }
 }

4. 벤치마크를 실행합니다.

 

참고:
  • Zookeeper는 클라이언트를 등록하고 메시지를 교환하는 데 사용됩니다. 시작된 클라이언트는 /caliper/clients/ 아래에 새로운 znode를 추가합니다. 벤치마크에서는 디렉토리를 점검하여 얼마나 많은 클라이언트가 있는지 알아보고 작업 부하에 따라 각 클라이언트에 작업을 할당합니다.
  • 클라이언트 간에는 자동 시간 동기화가 없습니다. 'ntpdate'를 사용하는 것과 같이 대상 시스템 간의 시간을 수동으로 동기화해야 합니다.
  • 블록체인 구성파일은 클라이언트를 실행하는 시스템에 있어야 하며 파일의 상대 경로 (캘리퍼 폴더에 상대적인) 가 일치해야 합니다. 구성의 모든 참조 파일도 존재해야 합니다.

제주도 에코랜드

제주도에 위치한 에코랜드파크 방문 후기입니다. 동화같은 풍경에 사진 찍기 좋은 장소입니다.


운영시간 매일 08:30 - 18:00 시 (마지막 기차 17:50)

성인 14,000원

청소년(만 13세~만 18세) 12,000원

어린이(36개월~만 12세 10,000원


운영시간 및 이용요금은 위와 같습니다. 에코랜드 테마파크에는 예쁜 기차가 돌아다니는데요, 이 기차를 타고 원하는 목적지에 내려 구경하고 테마파크 내부를 이동할 수 있습니다. 4.5 km의 기차여행을 할 수 있는 공간이라고 해요.

에코랜드 기차
에코랜드 기차 정차역

에코랜드 열차는 메인역에서 출발해 에코브리지역, 레이크사이드역, 피크닉가든역, 라벤더/그린티/로즈가든역 총 4개의 역을 돌아 다시 메인역으로 돌아오는 열차입니다. 기차는 8~10분 간격으로 계속 운행되고 한 번 구매한 티켓은 구매당일 1회 순환에 한하여 유효하니, 각 역에서 충분히 즐긴 후 다음 역으로 가는 열차에 탑승하면 됩니다.

에코랜드 기차 타러 가는 길
기차 탑승 완료

입구로 들어가면 메인역에서 기차를 타고 이동할 수 있는데요, 초록색 잔디만 봐도 마음에 편해지는 기분입니다. 곶자왈 숲 및 내부 볼거리, 체험공간이 다양해서 시간가는 줄 모르고 구경했습니다.

곶자왈 숲 내부
바람의 집으로 가는길
바람의 집 입구
전망대
포토존

중간 중간 아이들 놀이터와 포토존이 많아서 가족 단위 혹은 커플분들이 많았습니다. 아이들 뿐 아니라 어른한테도 사진찍고 쉬엄쉬엄 구경하기 좋은 곳이었어요.

 

* 본 포스팅은 하이퍼레저 패브릭 docs를 번역한 내용으로, 번역 과정에서 잘못된 부분이 있을 수 있습니다.

상세 내용은 하단 링크를 참조 부탁드리며, 잘못된 내용에 대한 피드백은 언제든 환영합니다 : ) 

https://hyperledger.github.io/composer/latest/tutorials/developer-tutorial

 

Developer Tutorial | Hyperledger Composer

Developer tutorial for creating a Hyperledger Composer solution This tutorial will walk you through building a Hyperledger Composer blockchain solution from scratch. In the space of a few hours you will be able to go from an idea for a disruptive blockchai

hyperledger.github.io

이 튜토리얼은 처음부터 Hyperledger Composer 블록체인 솔루션을 작성하는 과정을 안내합니다. 몇 시간 내에 블록체인 혁신에 대한 아이디어, 실제 Hyperledger Fabric 블록체인 네트워크와의 트랜잭션 실행, 블록체인 네트워크와 상호작용하는 샘플 Angular 2 애플리케이션 생성/실행 등의 작업을 수행할 수 있습니다.

 

이 튜토리얼은 자신의 유즈케이스에 적용할 수 있는 기술 및 리소스에 대한 개요를 제공합니다.

참고: 이 튜토리얼은 Hyperledger Fabric v1.2와 함께 실행되는 Ubuntu Linux의 최신 Hyperledger Composer 빌드에 대해 작성되었으며, Mac 환경에서도 테스트할 수 있습니다.

 

Step One: Creating a business network structure

Hyperledger Composer의 주요 컨셉은 비즈니스 네트워크 정의 (Business network definition, BND)입니다.이는 블록체인 솔루션을 위한 데이터 모델, 트랜잭션 로직, 접근 제어 규칙을 정의합니다. BND를 생성하기 위해 우리는 적절한 프로젝트 구조를 생성해야 합니다.

 

가장 쉬운 방법은 Yeoman generator를 사용해서 비즈니스 네트워크 뼈대를 만드는 것입니다. 이렇게 하면 비즈니스 네트워크의 모든 구성 요소를 포함하는 디렉토리가 생성됩니다.

 

1. Yeoman을 사용해 스비즈니스 네트워크 뼈대를 만듭니다. 이 명령에는 비즈니스 네트워크 이름, 설명, 작성자 이름, 작성자 메일주소, 라이센스 선택 및 네임스페이스가 필요합니다.

yo hyperledger-composer:businessnetwork

2. 네트워크 이름에 tutorial-network를 입력하고, 설명, 작성자 이름, 작성자 메일주소 같은 필요 정보를 입력합니다.

3. 라이센스로 Apache-2.0을 선택합니다.

4. 네임스페이스로 org.example.mynetwork를 선택합니다.

5. 빈 네트워크를 생성할지 말지 물으면 No를 선택합니다.

 

Step Two: Defining a business network

비즈니스 네트워크는 자산, 참가자, 트랜잭션, 접근 제어 규칙, 그리고 부가적인 이벤트와 쿼리로 구성되어 있습니다. 이전 단계에서 생성된 비즈니스 네트워크 뼈대에는 비즈니스 네트워크의 모든 자산, 참가자, 트랜잭션에 대한 클래스 정의를 포함한 모델(.cto)파일이 있습니다. 비즈니스 네트워크 뼈대는 또한 기본적인 접근 제어(permission.acl) 문서와 트랜잭션 처리 함수를 포함한 기본적인 접근 제어 규칙인 가진 스크립트(logic.js)파일 그리고 비즈니스 네트워크의 메타데이터를 포함한 package.json 파일을 갖고 있습니다.

 

Modeling assets, participants, and transactions

처음으로 업데이트할 문서는 모델(.cto) 파일입니다. 이 파일은 Hyperledger Composer Modeling Language를 사용해 작성되어 있습니다. 모델 파일은 자산, 트랜잭션, 참가자, 이벤트에 대한 각 클래스의 정의를 포합합니다. 이는 암묵적으로 modeling language 문서에 있는 Hyperledger Composer System Model을 extend합니다.

1. org.example.mynetwork.cto 모델 파일을 여십시오.

2. 모델 파일 내용을 아래와 같이 변경하세요.

/**
 * My commodity trading network
 */
namespace org.example.mynetwork
asset Commodity identified by tradingSymbol {
    o String tradingSymbol
    o String description
    o String mainExchange
    o Double quantity
    --> Trader owner
}
participant Trader identified by tradeId {
    o String tradeId
    o String firstName
    o String lastName
}
transaction Trade {
    --> Commodity commodity
    --> Trader newOwner
}

3. org.example.mynetwork.cto에 대한 변경사항을 저장하세요.

Adding JavaScript transcation logic

모델 파일에서 자산, 참가자 간 관계를 명시하는 Trade 트랜잭션이 정의되었습니다. 트랜잭션 처리함수 파일은 모델 파일에 정의된 트랜잭션을 실행시키는 JavaScript로직을 갖고 있습니다.

 

Trade 트랜잭션은 간단하게 거래될 Commodity 자산의 식별자를 가져와서 참가자 Trader의 식별자를 새 소유자로 지정합니다.

1. logic.js 스크립트 파일을 여세요.

2. 파일 내용을 아래와 같이 변경하세요.

/**
 * Track the trade of a commodity from one trader to another
 * @param {org.example.mynetwork.Trade} trade - the trade to be processed
 * @transaction
 */
async function tradeCommodity(trade) {
    trade.commodity.owner = trade.newOwner;
    let assetRegistry = await getAssetRegistry('org.example.mynetwork.Commodity');
    await assetRegistry.update(trade.commodity);
}

3. logic.js 변경 내용을 저장하세요.

 

Adding access control

1. permissions.acl파일에 있는 접근제어규칙을 아래와 같이 변경하세요.

/**
 * Access control rules for tutorial-network
 */
rule Default {
    description: "Allow all participants access to all resources"
    participant: "ANY"
    operation: ALL
    resource: "org.example.mynetwork.*"
    action: ALLOW
}

rule SystemACL {
  description:  "System ACL to permit all access"
  participant: "ANY"
  operation: ALL
  resource: "org.hyperledger.composer.system.**"
  action: ALLOW
}

2. permissions.acl 파일 변경 내용을 저장하세요.

 

 

Step Three: Generate a business network archive

이제 비즈니스 네트워크가 정의되었습니다. 이 비즈니스 네트워크는 배포가능한 비즈니스 네트워크 archive(.bna) 파일에 패키징되어야 합니다.

1. 커맨드 라인을 사용해 tutorial-network 폴더로 이동하세요.

2. tutorial-network 폴더에서, 아래 명령어를 실행하세요.

composer archive create -t dir -n .

명령어가 실행되고나면, tutorial-network 폴더에 생성된 tutorial-network@0.0.1.bna라는 비즈니스 네트워크 archive 파일이 호출됩니다.

 

 

Step Four: Deploying the business network

.bna파일 생성 후, 비즈니스 네트워크는 Hyperledger Fabric 객체로 배포될 수 있습니다. 일반적으로 PeerAdmin identity를 생성하기 위해 패브릭 관리자 정보가 필요합니다. PeerAdmin은 composerchannel 채널에 있는 체인코드를 실행하고 다른 피어들에게 체인코드를 설치하는 권한을 갖고 있습니다. 하지만, 개발환경설치과정에서 PeerAdmin은 이미 생성되어 있습니다.

 

비즈니스 네트워크가 설치된 후, 네트워크를 시작할 수 있습니다. 가장 좋은 방법은 배포 후 비즈니스 네트워크를 관리하기 위해 새 ID를 만드는 것입니다. 이 ID를 네트워크 관리자라고 합니다.

 

Retrieving the correct credentials

올바른 자격 증명을 가진 PeerAdmin 비즈니스 네트워크 카드는 개발환경설치과정에서 이미 생성되어 있습니다.

 

Deploying the business network

Hyperledger Fabric에 비즈니스 네트워크를 배포하려면 피어에 Hyperledger Composer 비즈니스 네트워크가 설치되어 있어야 합니다. 그리고 나서 비즈니스 네트워크를 시작할 수 있습니다. 네트워크 관리자가 되기 위해서는 새로운 참가자, 신원 및 관련 카드를 생성해야 합니다. 마지막으로 네트워크 관리자 비즈니스 네트워크 카드는 사용을 위해 import되어야 합니다. 그리고 그 네트워크가 응답하는지 확인하기 위해 ping을 수행할 수 있습니다.

 

1. 비즈니스 네트워크 설치를 위해 tutorial-network 폴더에서 아래 명령어를 실행하세요.

composer network install --card PeerAdmin@hlfv1 --archiveFile tutorial-network@0.0.1.bna

composer network install 커맨드는 PeerAdmin 비즈니스 네트워크 카드와 비즈니스 네트워크를 정의하고 있는 .bna 파일 경로를 필요로 합니다. (이 경우에는 이미 생성 및 import 되어 있습니다.)

 

2. 비즈니스 네트워크 실행을 위해 아래 명령어를 실행하세요.

composer network start 커맨드는 비즈니스 네트워크 카드와 비즈니스 네트워크의 관리자 이름, 비즈니스 네트워크 이름 및 버전, 그리고 비즈니스 네트워크 카드로 import될 파일 이름을 필요로 합니다.

composer network start --networkName tutorial-network --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card PeerAdmin@hlfv1 --file networkadmin.card

 

3. 사용가능한 비즈니스 네트워크 카드로 네트워크 관리자 ID를 가져오려면 다음 명령어를 실행하세요.

composer card import --file networkadmin.card

composer card import 커맨드는 카드 생성을 위해 composer network start에 몇시된 파일 이름을 필요로 합니다.

 

4. 비즈니스 네트워크가 성공적으로 배포되었는지 확인하기 위해 아래 명령어를 실행해 네트워크에 ping을 날려보세요.

composer network ping --card admin@tutorial-network

composer network ping 커맨드는 network ping을 확인하기 위해 비즈니스 네트워크 카드를 필요로 합니다.

 

 

Step Five: Generating a REST server

Hyperledger Composer는 비즈니스 네트워크를 기반으로 맞춤형 REST API를 생성할 수 있습니다. REST API는 웹 애플리케이션을 개발할 때 유용한 언어중심 추상화 계층을 제공합니다.

 

1. REST API 생성을 위해 tutorial-network 폴더로 이동해 아래 명령어를 실행하세요.

composer-rest-server

2. 카드 이름에 admin@tutorial-network를 입력하세요.

3. 생성된 API에서 네임스페이스를 사용할지 물으면 'never use namespaces'를 선택하세요.

4. 생성된 API를 보호할지 물으면 No를 선택하세요.

5. 이벤트 게시를 사용할지 물으면 Yes를 선택하세요.

6. TLS 보안을 사용할지 물으면 No를 선택하세요.

 

생성된 API는 배포된 블록체인 및 비즈니스 네트워크에 연결됩니다.

 

 

Step Six: Generating a skeleton Angular application

Hyperledger Composer는 REST API를 실행하는 Angular 4 응용프로그램을 생성할 수도 있습니다. 

 

1. Angular 4 애플리케이션을 생성하기 위해 tutorial-network 폴더로 이동해 아래 명령어를 실행하세요.

yo hyperledger-composer:angular

2. 실행중인 비즈니스 네트워크에 연결할지 물으면 Yes를 선택하세요.

3. 일반적인 package.json 질문에 대해 입력하세요. (프로젝트명, 설명, 저자명, 이메일, 라이센스)

4. 비즈니스 네트워크 카드로 admin@tutorial-network를 입력하세요.

5. Connect to an existing REST API를 선택하세요.

6. REST 서버 주소로 http://localhost를 입력하세요.

7. 서버 포트로 3000를 입력하세요.

8. Namespaces are not used를 선택하세요.

 

Angular generator는 그리고나서 프로젝트 기반을 생성하고 모든 의존성을 설치합니다. 애플리케이션을 실행하기 위해 angular 프로젝트 폴더로 가서 npm start를 실행하세요. 이 명령어는 http://localhost:4200의 REST API를 실행하는 Angular 4 애플리케이션을 실행시킬 것입니다. 

 

참고: Yo Angular application generator는 단순하고 기본적인 비즈니스 네트워크 모델 정의 (여기서는 trade-network 네트워크 모델 같은)에 기반한 웹 애플리케이션 뼈대를 만들기 위한 것입니다. Angular generator에 관한 상세 설명은 아래 링크를 참고하세요.

https://hyperledger.github.io/composer/latest/applications/web.html

 

Writing Web applications | Hyperledger Composer

Writing Web Applications To interact with a deployed business network, web applications should make REST API calls. To create a custom REST API for a business network, use the composer-rest-server command. To create a skeleton Angular application that can

hyperledger.github.io

 

+ Recent posts