원서 : https://hyperledger-fabric.readthedocs.io/en/release-1.4/developapps/application.html

  • Application
    • blockhain-network 상에서 application들은 원장에 transaction을 일으키는 등으로 상호작용 합니다.
    • 이번 장에서는 이런 메카니즘에 관해서 살펴볼것입니다.
    • (한 organization이 application을 사용해서 PaperNet의 '기업어음'을 발행-판매-상환 하는 시나리오)
    • 기본적인 내용이지만, 아주 중요한 내용 입니다.
  • Basic Flow (The application flow to invoke a smart contract)
    • 기본적으로 application은 (FabricSDK를 사용해서) transaction을 발생시켜, 'smart-contract'를 동작시킵니다.
    • 아래과 같이 6단계로 transaction 처리가 진행됩니다.
      • 1) wallet에서 id선택
      • 2) blockchain-network gateway에 접속
      • 3) 원하는 네트워크(PaperNet)으로 진입
      • 4) 특정 smart-contract의 'transaction 요청' 생성.
      • 5) 'transaction 요청' 제출.
      • 6) 'transaction 응답' 결과처리.
    • 그럼 FabricSDK를 사용해서 application이 이 6단계를 어떻게 이행해 나가는지? 한번 차근차근 살펴봅시다.
  • 1.Wallet (How an application uses a wallet and identity)
    • 아래와 같은식의 코드으로 application에서 wallet를 사용하게됩니다.
    • "const wallet = new FileSystemWallet('../identity/user/isabella/wallet');"
    • 위 코드처럼, (Isabella 이라는) user의 wallet으로 identity를 가져오게 되는것입니다. 물론 wallet은 여러 'X.509 인증서'를 가지고 있을수있습니다. (현실 그대로, 지갑에서 각각에 ID카드를 꺼네는 것이죠)
    • , 해당 'X.509 인증서' 소지자를 organization으로 결부시켜서~ 해당 channel의 권한을 판단합니다.
    • 예를들어 MagnetoCorp에서 Isabella이 관리자라고 할때, 타사용자과 다른 특권이 주어지는것이죠.
  • 2.Gateway (How an application connects using a gateway)
    • gateway에서 네트워크 접근을 제공하는 여러peer들을 식별하게 되는데, 이것은 아주 중요합니다.
    • "let connectionProfile = yaml.safeLoad(file.readFileSync('./gateway/connectionProfile.yaml', 'utf8'));"
    • "let connectionOptions = {identity: userName , wallet: wallet};"
    • "await gateway.connect(connectionProfile, connectionOptions);"
    • 위 그림에서 'channels:'을 살펴보자면... 네트워크 channel으로 "papernet" 이고, peer으로 "magnetocorp 및 digibank" 입니다.
    • 위 그림에서 'peers:'을 살펴보자면... 각각의 peer 접속정보가 있습니다.
  • 3.Network channel (How to access a particular network)
    • connectionProfile.yaml에서 정의한 peer에서는 특정 channel관련 체인코드를 제공합니다.
    • 각 peer가 여러 네트워크 channel에 참여 됨으로, 사실상 gateway통한 application이 여러 네트워크 channel에 접근제어 할 수 있는 말입니다.
    • "const network = await gateway.getNetwork('PaperNet');"
    • "const network2 = await gateway.getNetwork('BondNet');"
    • 위 코드처럼 application에서는 각각에 서다른 네트워크 channel으로도 참여할수있고, 이것이 Hyperledger Fabric의 강력한점 입니다.
  • 4.Construct request (How to construct a transaction request)
    • 이제 그럼, application으로 '기업어음'을 발행해 봅시다.
    • "const contract = await network.getContract('papercontract', 'org.papernet.commercialpaper');"
    • "const euroContract = await network.getContract('EuroCommercialPaperContract');"
    • 위 코드는 "org.papernet.commercialpaper"을 명시하는 "papercontract"라는 contract를 가져온것 입니다.
    • (체인코드 파일에 여러 contract가 있으면, 명시를 해야하고~ 하나만 있다면, 명시할 필요는 없겠죠?)
    • (그리고 PaperNet에는 이 papercontract가 인스톨 및 인스턴티 되어있습니다.)
  • 5.Submit transaction (How to submit a transaction)
    • 'transaction 요청' 제출은 SDK으로 단순호출 입니다.
    • "const issueResponse = await contract.submitTransaction('issue','MagnetoCorp','001','05/31','11/30','500');"
    • 위 코드는 'transaction 요청'에 대응되는 파라미터를 smart-contract에 issue() 메소드에게 전하는것입니다.
    • 참고로, application이 smart-contract을 직접제어하는건 아니고, SDK가 'connectionOptions 및 connectionProfile'을 사용해서 'transaction 제안'을 (보증담당) peer들에게 알아서 다 보내줌니다.
    • application에서는 돈캐어 해도 됩니다. SDK가 다 알아서 '보증정책'을 처리해줄테니까요!
    • 끝으로 transaction의 순서화-검증-반영 등의 결과를 비동기 리스닝하는 프로세스도 꼭 염두 하십시요.
  • 6.Process response (How to process a transaction response)
    • "let paper = CommercialPaper.fromBuffer(issueResponse);"
    • 이제 application에서 SDK을 도움을 받아... 'transaction 응답'을 잘받아서 결과처리 하면 되겠죠. ㅎ

-끝-

'hyperledger > fabDoc.Dev-App' 카테고리의 다른 글

7) Application design elements  (0) 2019.04.28
4) Smart Contract Processing  (0) 2019.04.28
3) Process and Data Design  (0) 2019.04.28
2) Analysis  (0) 2019.04.28
1) The scenario  (0) 2019.04.28

+ Recent posts