본문 바로가기

옥탑방주인/Hyperledger

Hyperledger Sawtooth에 대하여 알아보자(v.1.0.2)


Introduction


하이퍼릿저 소투스(Hyperledger Sawtooth)는 네트워크와 분산 장보 어플리케이션을 빌딩하기 위한 기업형 블록체인 플랫폼이다. 이 설계 철학은 특히 기업에서 사용을 위한 부분적인 스마트 컨트랙트의 안정성을 만드는것과 분산화된 장부를 유지하는것을 목표로 한다. 


Sawtooth는 핵심 시스템을 애플리케이션 도메인과 분리하여 블록 체인 애플리케이션 개발을 간소화합니다. 어플리케이션 개발자는 코어 시스템(core system)의 기본 설계를 알지 않고도 선택한 언어를 사용하여 어플리케이션에 적합한 비즈니스 규칙을 지정할 수 있습니다.


Sawtooth는 모듈식이다. 이 모듈성은 기업과 컨소시엄은 정책 결정(policy decision)을 내릴 수 있다. Sawtooth의 핵심 설계는 애플리케이션이 특별한(unique) 비즈니스 요구 사항을 지원하는 트랜잭션 규칙, 허가 및 합의 알고리즘(consensus algorithms)을 선택할 수 있도록합니다.


Sawtooth는 Hyperledger umbrella 하위에 있는 오픈소스 프로젝트이다. 더 많은 사항을 알고싶으면  여기를 클릭해라. 




About Distributed Ledgers


"분산 장부(distributed ledger)"는 블록체인의 또 다른 용어이다. 이것은 네트워크("peers" 또는 "nodes")에서 모든 참여자들에게 데이터베이스(장부)의 트랜젝션(transaction)을 분배한다. 여기에는 중앙 관리자(central administrator) 또는 중앙화된 데이터 스토리지가 없다. 본질적으로 말하면 이렇다:


  • Distributed : 블록 체인 데이터베이스는 잠재적으로 신뢰할 수없는 참여자간에 공유되며 네트워크의 모든 노드에서 분명히 동일합니다. 모든 참여자들은 똑같은 정보를 갖고 있다.
  • Immutable : 블록 체인 데이터베이스는 블록 해시를 사용하여 히스토리를 변경하려는 시도를 쉽게 감지하고 방지 할 수 있도록하는 모든 트랜잭션의 변경 불가능한 히스토리입니다.
  • Secure : 모든 변경은 알려진 id로 서명된 트랜젝션에 의해 수행된다.


이러한 기능은 협의 된 합의 메커니즘과 함께 블록 체인 네트워크의 모든 참가자들에게 "적대적 신뢰(adversarial trust)"를 제공하기 위해 함께 작동합니다.




Distinctive Features of Sawtooth (소투스의 독특한 특징들)


Sawtooth는 코어 시스템 레벨과 어플리케이션 레벨 사이를 명확하게 분리해서 제공되는 어플리케이션을 배포(deploy)와 개발(develop)하기 쉽게 만들어준다. Sawtooth는 어플리케이션 개발자들이 선택한 언어로 쓰여진 contract logic을 허용한 스마트 컨트렉트 추상화(smart contract abstraction)를 제공한다.(그냥 smart contract에 많은 언어를 지원한다는 의미인듯)


어플리케이션은 네이티브 비즈니스 로직(native business logic) 또는 스마트 컨트렉트 가상 머신(smart contract virtual machine)이 될 수 있다. 어플리케이션의 두가지 타입은 같은 블록체인에서 공존한다. Sawtooth를 사용하면 트랜잭션 처리 계층에서 이러한 설계 결정을 내릴 수 있으므로 여러 유형의 어플리케이션이 블록 체인 네트워크의 동일한 인스턴스에 존재할 수 있습니다.


각 어플리케이션은 특별한 요구 사항을 위한 커스텀 프랜젝션 프로세서를 정의한다. Sawtooth는 체인 전반의 설정을 유지 관리(maintaining chain-wide setting)하고 체인상의 권한(on-chain permissions)을 저장하거나 성능 분석 및 블록 정보 저장과 같은 특정 응용 프로그램과 같은 저레벨 함수(low-level functions)의 모델로 사용될 수있는 여러 트랜잭션 예제를 제공합니다.


트랜잭션 프로세서 SDK는 여러 언어로 제공되므로 Python, JavaScript, Go, C ++, Java, Rust를 비롯한 새로운 contract language를 능률적으로 작성할 수 있습니다. 제공된 REST API는 표준 HTTP/JSON에서 유효성 검사기(validator communication) 통신을 적용하여 클라이언트 개발을 단순화한다. 




private Networks with the Sawtooth permissioning Feature


sawtooth는 허가된(private) 네트워크의 문제를 해결하기 위해 빌드해야 한다. Sawtooth 노드의 클러스터는 별도의 권한으로 쉽게 배포 할 수 있습니다. 잠재적으로 트랜잭션 패턴이나 기타 기밀 정보가 유출 될 수있는 중앙 집중(centralized)서비스는 없습니다. 


블록 체인은 네트워크의 모든 참가자가이 정보에 액세스 할 수 있도록 룰(role) 및 ID와 같은 사용 권한을 지정하는 설정을 저장합니다. 




Parallel Transaction Execution


대부분의 블록 체인은 네트워크의 각 노드에서 일관된 순서를 보장하기 위해 직렬 트랜잭션 실행을 필요로합니다. Sawtooth는 트랜젝션을 병렬 흐름(parallel flows)으로 분리하는 진보된 병렬 스케쥴러(advanced parallel scheduler)를 포함하고 있다. Sawtooth는 트랜잭션에 의해 액세스되는 상태의 위치를 ​​기반으로 문맥상(contextual)의 변경 사항을 유지하면서 트랜잭션 실행을 서로 분리합니다. 


가능한 경우 동일한 상태(same state)에 대해 여러 수정을하여도 이중 지출(double-spending)을 방지하면서 트랜잭션이 병렬로 실행됩니다. 병렬 스케쥴링은 직렬 실행 성능을 뛰어넘는 상당한 잠재성을 제공한다.(당연히 병렬이 좋지않나?..) 




Event System


Hyperledger Sawtooth는 이벤트 브로드 캐스팅과 생성을 지원한다.


  • 블록체인과 관련되서 발생하는 이벤트들을 수집한다; 새로운 포크(fork)스위칭 또는 새로운 블럭이 커밋(committed)되는 것
  • 트랜젝션 패밀리(transaction family)로 부터 정의된 특정 이벤트 어플리케이션을 구독한다.
  • 해당 데이터를 상태에 저장하지 않고 클라이언트로 트랜잭션 실행에 대한 정보를 릴레이합니다.


구독은 ZMQ 소켓을 통해 전송되고 서비스됩니다.(메세지 큐 사용해도 될듯한??)




Ethereum Contract Compatibility with Seth


Sawtooth-Ethereum 통합 프로젝트, Seth, 확장 Ethereum에서 Sawtooth 플랫폼의 상호운용성 확장.

EVM (Ethereum Virtual Machine) 스마트 컨트랙트는 Seth transaction family를 사용해서 Sawtooth에 배포한다.



Pluggable consensus algorithms


블록체인에서, 합의(consensus)는 상호 불신자 집단의 합의를 도출하는 과정이다. 임의적인 결함에 대한 합의를 달성하기 위한 알고리즘은 일반적으로 알려진 참여자들 사이에서 어떤 형태의 투표가 필요하다(예를 들어 POS 방식이면 자신의 지분을 통해 증명한다던지...) 일반적인 접근법에는 몇몇의 추첨을 통한 지도자 선출방식인 나카모토-스타일 합의와 여러 합의를 통해 합의를 도출하는 전통적인 비잔틴결함 허용(BFT) 알고리즘의 변형이 포함된다.(여러 합의는 POS방식을 말하는듯 하다.)


소투스는 컨센서스의 코어 합의 개념을 추상화하고 합의를 트랙잭션 의미론과 분리한다. 소투스 인터페이스는 다양한 합의(consensus) 구현을 플러그인을 지원한다. 더 중요한 것은, 소투스는 같은 블록체인에서 여러종류의 합의 알고리즘을 허용한다는 것이다. 합의는 초기 네트워크 설정 중에 선택되며 트랜잭션이 있는 실행중인 블록체인에서 변경할 수 있다.


소투스는 현재 아래와 같은 합의를 지원한다:


    • Proof of Elapsed Time (PoET), 대규모 네트워크 사용자들을 지원할 수 있는 production-grade 프로토콜로 설계된 나카모토-스타일(Nakamoto-style) 합의 알고리즘. PoET는 Proof of Work(PoW) 알고리즘의 문제점인 파워 소비하는것 없이 Nakamoto-style 합의 알고리즘의 확장 이점을 얻기 위해 secure instruction execution 에 의존한다. 
    • PoET simulator는 어떤 타입의 하드웨어든지간에 가상화된 클라우드 환경에서 PoET 스타일 합의 알고리즘을 제공한다.
    • 개발자 모드(Dev mode), 개발 및 테스트에 유용한 단순화 된 random-leader.

Sample Transaction Families


소투스에선 데이터 모델(data model)과 트랜잭션 언어(transaction language)는 transaction family 에서 구현된다. 사용자가 custom transaction families를 빌드하는 동안 사용자 원장의 고유 요구사항(unique requirements)이 transaction families에 반영된다. 우리는 다수의 코어 트랜젝션 패밀리(core transaction family) 모델을 제공한다:


    • IntegerKey - 배포된 원장을 테스트하기위해 사용된다.
    • Settings - 체인 구성 설정(on-chain configuration setting)을 저장하기 위한 참조 구현(reference implementation)을 제공한다.
    • identity - transactor 및 validator key에 대한 체인 내 권한 부여를 처리하여 공개 키(public key) 목록에 대한 ID 관리를 간소화 한다.

추가적인 트랜젝션 패밀리(transaction families)들은 구체적인 부분을 위한 모델에 제공한다. :

    • smallbank - 블록체인 시스템의 성능을 비교했을 때 성능 테스트및 벤치마칭(benchmarking)을 위한 성능분석을 다룬다. 이 transaction family는 H-Store Smallbank benchmark 기반이다.
    • Blockinfo - 구성 가능한 수의 기록된 블록에 대한 정보를 저장하는 방법론을 제공.

더 많은 정보를 알고싶으면 Transaction Family Specification 을 참조해라.


Real-world Application Example



    • XO : Tic-tac-toe를 사용하여 기본 트랜잭션을 구성하는 방법을 보여줍니다. XO 트랜잭션 제품군에는 두 명의 참가자가 게임을 할 수있게 해주는 xo 명령을 사용하여 트랜잭션 생성 및 처리가 포함됩니다. 자세한 내용은 XO 트랜잭션 제품군 소개를 참조하십시오.


    • Sawtooth Supply Chain : 모든 자산의 출처 및 기타 상황 정보를 추적 할 수 있습니다. Supply Chain은 트랜잭션 프로세서, 사용자 정의 REST API 및 웹 응용 프로그램과 함께 완벽한 예제 응용 프로그램을 제공합니다. 또한이 응용 프로그램은 브라우저 내 트랜잭션 서명을위한 안전하고 분산 된 솔루션을 보여주고 복잡한 쿼리의 경우 블록 체인 상태를 로컬 데이터베이스와 동기화하는 방법을 보여줍니다. 자세한 정보는 GitHub의 sawtooth-supply-chain repo를 참조하십시오.


    • Sawtooth Marketplace : 사용자가 특정 수량의 맞춤 자산을 블록 체인의 다른 사용자와 교환 할 수 있습니다. 이 응용 프로그램에는 Sawtooth 유효성 검사기와 함께 Sawtooth 블록 체인을 실행하고 상호 작용할 수있는 간단한 RESTful API를 제공하는 많은 구성 요소가 포함되어 있습니다. 자세한 내용은 GitHub의 Sawtooth-marketplace 를 참조하십시오.


    • Sawtooth Private UTXO : 자산을 만들고 거래 할 수있는 방법을 보여줍니다. SGX를 ​​사용하여 자산을 장부와 개인 거래에서 양도 할 수있는 방법을 보여줍니다. 여기서 거래 당사자들만 거래의 세부 사항을 알고 있습니다. 자세한 내용은 GitHub의 sawtooth-private-utxo 레포를 참조하십시오.



Getting Started with Application Development


Try Hyperledger Sawtooth



Sawtooth 문서는 Sawtooth 기능을 실행하고 응용 프로그램을 테스트하기 위해 로컬 유효성 검사기(local validator)를 설정하는 방법을 설명합니다. 일단 실행하면 새 트랜잭션을 submit하고 HTTP와 Sawtooth REST API를 사용해서 블록체인의 블록 데이터와 resulting state를 가져올 수 있다. 이 메소드는 포함 된 예제 트랜잭션 제품군뿐만 아니라 직접 작성하는 트랜잭션 제품군에도 적용됩니다. 이 메소드는 포함된 예제 트랜잭션 제품군 뿐만 아니라 직접 작성하는 트랜잭션 제품군에도 적용 됩니다.


Sawtooth validators는 AWS Marketplace에 런치된 AWS 또는 네이티브 Ubuntu 16.04, pre-built Docker container에서 사용할 수 있다.


설치하길 원하면, 이 문서를 참조해라.



Develop a Custom Application


Sawtooth에서 데이터 모델과 트랜잭션 언어는 트랜잭션 제품군에서 구현됩니다. 트랜잭션 패밀리(transaction family)는 상태를 수정하는 데 사용되는 비즈니스 규칙을 코드화하고 클라이언트 프로그램은 일반적으로 트랜잭션을 제출하고 상태를 표시합니다. 제공된 핵심 트랜잭션 제품군을 모델로 사용하여 고유 한 요구 사항을 반영하는 사용자 정의 트랜잭션 패밀리를 작성할 수 있습니다. 


Sawtooth는 REST API와 Python, C++, Go, Java, JavaScript, Rust등 다양한 언어를 지원하는 SDKs를 제공한다. Sawtooth 플랫폼의 상단에서 실행되는 응용 프로그램 개발 용. 또한 Seth 트랜잭션 제품군과 함께 사용하기 위해 Solidity에 현명한 계약을 작성할 수 있습니다. 


더 많은 정보를 원한다면 Application Developer's Guide, SDK API Reference, REST API Reference를 참조해라.