의견.png

서브스트레이트

위키원
Asadal (토론 | 기여)님의 2019년 4월 28일 (일) 23:45 판
이동: 둘러보기, 검색

서브스트레이트(Substrate)는 디앱(DApp)에 최적화된 블록체인 개발을 지원하는 툴이다. 이더리움 공동 창립자 개빈 우드가 설립한 블록체인 스타트업 패리티 테크놀지스(Parity Technologies)가 러스트(Rust) 프로그래밍 언어로 개발했다.[1] 사용자들은 내장된 응용 프로그램 프로그래밍 인터페이스(API)를 통해 자신들만의 매커니즘을 설계하거나 가장 기본적인 기존 알고리즘을 사용할 수 있다.[2]

개요

서브스트레이트는 블록체인을 설계할 때 유연성을 부여하기 위해 일반적인 수준에 맞춰 만들어진 도구이다. 2018년 10월 베를린에서 열린 웹3정상회의에서 처음으로 발표된 서브스트레이트는 패리티의 블록체인과 상호운용되는 폴카도트(Polkadot) 프로토콜과 통합되며, 웹 브라우저에서 자바스크립트(Javascript)을 실행할 수 있다.[2] 서브스트레이트에 포함된 API들은 사용자들이 자체 합의 메커니즘을 생성하거나 기존 알로리즘들을 활용할 수 있도록 제공하여 개발자가 모든 것을 알지 못하더라도 특화된 블록체인을 개발할 수 있도록 지원한다.[1]

특징

클라이언트 업데이트

서브스트레이트는 완벽한 클라이언트 업데이트를 제공한다. 합의에 영향을 줄 수 있는 업데이트는 웹어셈블리로 코드를 컴파일하여 처리되고 이것을 네트워크의 다른 메시지에 배치한다. 추가적으로 서브스트레이트는 많은 버전의 합의 코드를 원하는 네이티브 코드로 컴파일하여 저장할 수 있다. 새롭게 설치된 웹어셈블리 코드와 함께 네이티브 코드가 라인 업 되도록하여 복잡성 문제를 해결했다. 이렇게 되면 네이티브 코드의 속도를 얻을 수 있고, 언제나 웹어셈블리의 대안책이 있기 때문에 네이티브 버전의 코드를 자신의 속도대로 배치할 수 있다.[3]

프로젝트 실행

서브스트레이트는 폴카도트에서 즉시 프로젝트를 실행할 수 있다. 서브스트레이트로 만들어진 프로젝트는 기존 블록체인처럼 프로젝트별로 별도의 클라이언트를 사용하도록 컴파일 할 수 있다. 그러나 폴카도트는 서브스트레이트 API를 구현하기 때문에 폴카도트에서 제공하는 공유 보안과 상호 운영성을 이용할 수 있다. 서브스트레이트는 트랜잭션을 제거하여 가능한 일반적인 사용을 촉진시킨다.[3]

사용

서브스트레이트는 다음 세 가지 형태 중 하나로 사용하도록 설계되었다.

1. 트리비아 : 런타임을 포함하는 제네지스(genesis)블록으로 구성하여, 서브스트레이트를 구축하고, JSON 파일을 구성하고, 독자적인 블록체인을 실행한다. 이러한 부분을 통해서 개인 각각에 맞춘 서비스를 제공한다. 블록기간,수수료, 거버넌스와 같은 런타임 모듈을 다양하게 변경하여 초기 제네시스를 구성할 수 있다.

2. 모듈 : 서브스트레이트 런타임 모듈(Substrate Runtime Module) 라이브러리의 모듈을 함께 해킹하여 새 런타임으로 변환하고 서브스트레이트 클라이언트의 블록 작성 로직을 변경하거나 재구성한다. 이를 통해 블록 체인의 논리에 비해 데이터 유형을 변경하고, 모듈을 추가 또는 제거하며, 최종적인 모듈을 추가할 수 있다. 블록 인증 논리에 영향을 주지 않고도 많은 부분을 변경할 수 있다. 블록 작성 논리를 수정해야 할 경우 변경된 블록 작성 파일을 별도의 프로젝트로 작성하여 검증자가 사용해야 한다.

3. 제네릭 : 전체 서브스트레이트 런타임 모듈 라이브러리를 작동시키지 않고 전체 런타임을 처음부터 설계하고 구현할 수 있다. 원한다면, 러스트 이외의 언어로 가능하다. 기존 클라이언트의 블록 작성 논리와 호환되도록 런타임을 설정할 수 있는 경우 새로운 제네시스 블록을 작성하고 기존 러스트 기반 서브스트레이트 클라이언트와 체인을 시작할 수 있다. 그렇지 않은 경우에는 클라이언트의 블록 작성 논리를 그에 따라 변경해야 한다. 이는 현재 이부분이 불필요해 보이겠지만, 하위 기준 패러다임을 위한 장기적이고 광범위한 업그레이드 경로를 제공할 수 있는 유연성을 제공한다.[4]

기본 사항

서브스트레이트는 포괄적인 상태 전환 기능을 가진 블록체인 플랫폼으로서 기본 구조와 관련된 표준과 규약을 모두 제공한다.

Header := Parent + ExtrinsicsRoot + StorageRoot + Digest
Block := Header + Extrinsics + Justifications [4]

외래성

서브스트레이트의 외래성(Extrinsics)은 체인의 블록에 포함된 외부의 정보들이다. 외래성은 두개의 광범위한 범주로 나뉘는데, 하나는 거래이고 다른 하나는 내재적인 요소이다. 이 둘의 차이점은 트랜잭션이 네트워크에서 서명되고 라우팅되며 그 자체로 유용한 것으로 간주되는지에 여부이다. 이것은 비트코인 또는 이더리움 거래의 틀에 적합하다. 한편, 내재적인 요소는 네트워크를 통해 전달되지 않으며 서명되지 않는다. 서명을 증명하기 위해 어떤 것도 요구할 수 필요가 없는 데이터를 의미한다. 오히려 그것들은 단순하게 많은 수의 검증자들이 합리적이라고 동의했기 때문에 true라고 가정한다.[4]

런타임과 API

서브스트레이트 체인은 런타임이 존재한다. 런타임(Runtime)은 진입점을 포함하는 웹어셈블리(WebAssembly) 블랍(Blob)이다. 일부 진입점은 서브스트레이트의 기본적인 요소이며 서브스트레이트 클라이언트의 기본 구현에 따라 블랍 작성이 요구된다. 사용자가 서브스트레이트로 체인을 개발하기 위해서 핵심 특성을 구현해야 한다. 이 핵심 특성은 런타임과 상호 작용하기 위해 필요한 최소 기능을 가진 API를 생성한다. 그에 따라 런타임 API특성을 구현하는 데 도움이impl_runtime_apis!이 제공된다. 모든 매개 변수와 반환 값은 암호화 및 해독이 가능하도록 패리티 코덱(parity-codec)을 구현해야 한다.[4]

블록 저작 논리

서브스트레이트 내에서 블록체인 동기화와 블록 저작 사이에 큰 차이가 존재한다. 저작 노드(authoring nodes)는 동기화 노드(sync nodes)에 없는 트랜잭션 대기열 로직(transaction queue logic), inherent transaction knowledge 및 BFT 합의 로직을 포함하고 있다. BFT 합의 로직은 서브스트레이트의 핵심 요소로 제공된다. 트랜잭션 대기열 로직은 포괄적으로 설계되어, initialize_block 및 apply_extrinsic 호출을 통해 런타임은 블록에 포함하기에 적합한 트랜잭션으로 나타낸다. 그러나, 우선순위 설정과 대체 정책과 같은 부분들은 블록체인의 저작 코드의 일부인 하드 코드로 표현되어야 한다. inherent transaction knowledge는 런타임에 소프트 코드에 위임된다. 체인에 추가적인 정보가 필요한 경우, 두 블록 승인 논리를 모두 런타임에 제공하도록 변경해야 하며, 런타임의 inherent_extrinsics 호출은 블록에 포함하기 위한 추가적인 트랜잭션을 구성하기 위해 추가 정보를 사용한다.[4]

검증자

검증자는 퍼블릭 키 리스트이지만 프라이빗 키는 주어진 블록에 서명하기 위해 유효한 요소이다. 검증자가 바뀔 수도 있지만 각각의 블록은 블록이 만들어질때 선택되어진 검증자에 의해 유효하게 검증된다. 서브스트레이트에서 자동적으로 처리되는 블록들을 검증하거나 검증자의 투표를 처리하는 것과 같은 어려운 문제를 다루지 않아도 된다. 검증자는 원하는대로 늘어날 수 있다.[3]

각주

  1. 1.0 1.1 황치규 기자, 〈DIY 블록체인 개발도구 서브스트레이트 뜬다〉, 《더비체인》, 2018-12-21
  2. 2.0 2.1 이세인 기자, 〈이더리움 소프트웨어 패리티, DIY 블록체인 툴 서브스트레이트 출시〉, 《블록포스트》, 2018-12-21
  3. 3.0 3.1 3.2 sobly_460, 〈폴카닷을 지원하는 패리티사의 서브스트레이트란?〉, 《네이버 블로그》, 2018-10-12
  4. 4.0 4.1 4.2 4.3 4.4 paritytech,"substrate", github

참고자료

같이 보기


  질문.png 이 문서는 로고가 필요합니다.  

  의견.png 이 서브스트레이트 문서는 블록체인 솔루션에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.