멀티 체인 스트림 소개

소스 노드 : 1213525

공유 불변 키-값 및 시계열 데이터베이스

오늘 우리는 "스트림"이라는 중요한 새로운 기능 세트를 구현하는 최신 버전의 MultiChain을 출시하게 된 것을 자랑스럽게 생각합니다. 스트림은 참여자간에 자산을 전송하는 것이 아니라 일반적인 데이터 검색, 타임 스탬프 및 아카이빙에 중점을 둔 블록 체인 사용 사례에 대한 자연스러운 추상화를 제공합니다. 스트림은 체인에서 세 가지 유형의 데이터베이스를 구현하는 데 사용할 수 있습니다.

  1. NoSQL 스타일의 키-값 데이터베이스 또는 문서 저장소.
  2. 항목 순서에 중점을 둔 시계열 데이터베이스.
  3. 항목이 작성자에 따라 분류되는 ID 기반 데이터베이스입니다.

이들은 공유 데이터베이스의 '무엇', '언제'및 '누가'로 간주 될 수 있습니다.

스트림 기본

멀티 체인 블록 체인에서 스트림을 얼마든지 만들 수 있으며, 각 스트림은 독립적 인 추가 전용 아이템 컬렉션으로 작동합니다. 스트림의 각 항목에는 다음과 같은 특징이 있습니다.

  • 하나 이상 출판사 해당 항목에 디지털 서명 한 사람
  • 선택 사항 나중에 편리하게 검색 할 수 있습니다.
  • 일부 데이터작은 텍스트에서 수 메가 바이트의 원시 바이너리까지 다양합니다.
  • A 따라서 오른쪽 하단에항목이 확인 된 블록의 헤더에서 가져옵니다.

배후에서 스트림의 각 항목은 블록 체인 트랜잭션으로 표시되지만 개발자는이 기본 메커니즘에 대한 인식없이 스트림을 읽고 쓸 수 있습니다. (더 고급 사용자는 사용할 수 있습니다 원시 거래 여러 스트림에 쓰거나 자산을 발행 또는 이전하거나 단일 원자 트랜잭션으로 권한을 할당합니다.)

스트림은 여러 가지 방법으로 MultiChain의 권한 시스템과 통합됩니다. 먼저, 특정 주소로만 자산을 발행 할 수있는 것과 같은 방식으로 스트림을 작성할 권한이있는 사람 만 스트림을 작성할 수 있습니다. 스트림이 만들어지면 열리거나 닫힙니다. 공개 스트림은 블록 체인 거래를 보낼 수있는 권한이있는 사람이면 누구나 쓸 수 있으며 폐쇄 스트림은 허용되는 주소의 변경 가능한 목록으로 제한됩니다. 후자의 경우, 각 스트림에는 시간에 따라 쓰기 권한을 변경할 수있는 하나 이상의 관리자가 있습니다.

각 블록 체인에는 선택적인 '루트'스트림이 있습니다. 매개 변수 체인이 생성되는 순간부터 존재합니다. 이를 통해 스트림이 명시 적으로 생성 될 때까지 기다리지 않고 블록 체인을 사용하여 데이터를 저장하고 검색 할 수 있습니다.

나는 앞에서 논의한기밀은 많은 블록 체인 사용 사례에서 가장 큰 과제입니다. 블록 체인의 각 노드는 전체 체인 내용의 전체 사본을 볼 수 있기 때문입니다. 스트림은 다음과 같이 블록 체인에서 암호화 된 데이터를 지원하는 자연스러운 방법을 제공합니다.

  1. 참가자는 하나의 스트림을 사용하여 공개 키 암호화 체계에 공개 키를 배포합니다.
  2. 두 번째 스트림은 데이터를 게시하는 데 사용되며, 각 데이터는 고유 키가있는 대칭 암호화를 사용하여 암호화됩니다.
  3. 세 번째 스트림은 데이터 액세스를 제공합니다. 데이터를보아야하는 각 참가자에 대해 해당 데이터의 비밀 키를 포함하는 스트림 항목이 작성되며 해당 참가자의 공개 키를 사용하여 암호화됩니다.

이를 통해 블록 체인에 데이터를 효율적으로 보관하고 특정 참가자 만 볼 수 있습니다.

스트림에서 검색

스트림의 핵심 가치는 인덱싱 및 검색에 있습니다. 각 노드는 특정 스트림을 구독하는 모든 노드가 동일한 항목을 볼 수 있도록 블록 체인을 통해 구독 할 스트림을 선택할 수 있습니다. (새로 생성 된 모든 스트림을 자동으로 구독하도록 노드를 구성 할 수도 있습니다.)

노드가 스트림을 구독하면 여러 가지 방법으로 해당 스트림에서 정보를 검색 할 수 있습니다.

  • 스트림에서 항목을 순서대로 검색합니다.
  • 특정 키가있는 항목을 검색합니다.
  • 특정 게시자가 서명 한 항목을 검색합니다.
  • 각 키의 항목 수와 함께 스트림에 사용 된 키를 나열합니다.
  • 항목 수와 함께 스트림에 게시자를 나열합니다.

처음에 언급했듯이 이러한 검색 방법을 사용하면 스트림을 사용할 수 있습니다. 키-값 데이터베이스, 시계열 데이터베이스 그리고 신원 중심의 데이터베이스. 모든 검색 API는 스타트계산 긴 목록의 하위 섹션을 효율적으로 검색 할 수있는 매개 변수 (SQL의 LIMIT 절과 같은). 음수 값 스타트 가장 최근 항목을 검색 할 수 있습니다.

스트림은 동일한 키를 가진 여러 항목을 포함 할 수 있으며 이는 자연스럽게 블록 체인 불변성과 데이터베이스를 업데이트해야 할 필요성 사이의 긴장을 해결합니다. 각 유효 데이터베이스 '항목'에는 애플리케이션에서 고유 키가 지정되어야하며 해당 항목에 대한 각 업데이트는 해당 키가있는 새 스트림 항목으로 표시됩니다. 그런 다음 MultiChain의 스트림 검색 API를 사용하여 다음을 수행 할 수 있습니다. 각각의 버전.

블록 체인의 PXNUMXP 아키텍처로 인해 스트림의 항목이 다른 순서로 다른 노드에 도달 할 수 있으며 MultiChain을 사용하면 블록에서 '확인'되기 전에 항목을 검색 할 수 있습니다. 결과적으로 모든 검색 API는 전역 (기본값) 또는 로컬 순서 중에서 선택할 수 있습니다. 글로벌 주문은 체인이 합의에 도달하면 모든 노드가 동일한 API 호출에서 동일한 응답을 수신하도록 보장합니다. 로컬 순서는 특정 노드에 대해 스트림 항목의 순서가 API 호출간에 변경되지 않도록합니다. 각 응용 프로그램은 필요에 따라 적절한 선택을 할 수 있습니다.

스트림과 멀티 체인 로드맵

스트림의 출시와 함께, 우리는 MultiChain 1.0의 마지막 주요 작업을 완료했으며, 이제 베타로가는 길을 굳게 잡고 있습니다. 향후 몇 개월 동안 내부 테스트 스위트를 확장하고 (이미 상당히 큰) Windows 및 Mac 포트를 마무리하고 더 유용한 API를 추가하고 블록체인 탐색기 스트림의 경우 컨센서스 메커니즘의 측면을 조정하고 웹 데모를 공개하며 일반적으로 코드 및 도움말 메시지를 정리합니다. 가장 중요한 것은 버그가 발견되는 즉시 버그를 수정하여 실수로 인해 작업이 중단되지 않도록하는 것입니다.

장기적으로 스트림은 멀티 체인 로드맵에서 어디에 적합합니까? 한 걸음 물러서서 멀티 체인은 이제 세 가지 고급 기능 영역을 제공합니다.

  • 권한 연결, 거래, 자산 / 스트림 생성, 마이닝 / 검증 및 관리 할 수있는 사람을 제어합니다.
  • 자산 발급, 재발급, 이전, 원자 교환, 조건부 날인 증서 및 파기.
  • 스트림 스트림 작성, 작성, 구독, 색인 작성 및 검색을위한 API가 있습니다.

MultiChain 1.0 (및 프리미엄 버전)이 출시 된 후이 목록의 다음 단계는 무엇입니까? 당신이 보면 API 명령 스트림을 만드는 데 사용되는 고정 된 값을 가진 명백하게 불필요한 매개 변수를 볼 수 있습니다. stream. 이 매개 변수를 통해 MultiChain은 향후 다른 유형의 상위 수준 엔티티를 지원할 수 있습니다.

매개 변수의 가능한 미래 값은 다음과 같습니다. evm ( 이더리움호환되는 가상 머신), sql (SQL 스타일 데이터베이스의 경우) 또는 심지어 wiki (협업 적으로 편집 된 텍스트). 주문 된 일련의 변경에 의해 상태가 결정되는 모든 공유 엔티티가 잠재적 후보입니다. (a) 상태를 업데이트하기위한 올바른 추상화를 제공하는 API, (b) 상태를 추적하기 위해 가입 된 노드에 대한 적절한 메커니즘 및 (c) 상태의 일부 또는 전부를 효율적으로 검색하기위한 API 우리는 플러그인 아키텍처를 통해 우리 또는 타사에 의해 구현 될 수있는 다른 고급 개체가 무엇인지 배우기를 기다리고 있습니다.

스마트 계약은 어떻습니까?

일반적으로 MultiChain은 다음과 같은 접근 방식을 취합니다. 데이터 블록 체인에 불변으로 포함되어 있지만 암호 데이터가 노드 또는 애플리케이션 계층에 있음을 해석합니다. 이것은 코드가 블록 체인에 내장되고 가상 머신에서 실행되는 Ethereum에 의해 예시 된“스마트 계약”패러다임과 일부 다릅니다. 이론적으로 스마트 계약은 튜링 완료멀티 체인 또는 다른 블록 체인 플랫폼의 동작을 재현 할 수 있습니다. 그러나 실제로 이더 리움 스타일의 스마트 계약에는 많은 고통스러운 결점이 있습니다.

  • 모든 노드는 관심이 있든 없든 모든 계산을 수행해야합니다. 반대로 멀티 체인에서 각 노드는 어떤 스트림을 구독할지 결정하고 다른 스트림에 포함 된 데이터를 무시할 수 있습니다.
  • 스마트 컨트랙트에 사용되는 가상 머신은 주어진 컴퓨터 아키텍처를 위해 기본적으로 컴파일 된 코드보다 성능이 크게 떨어집니다.
  • 스마트 계약 코드는 체인에 불변으로 포함되어 기능이 추가되거나 버그가 수정되는 것을 방지합니다. 이것은 DAO의 종말.
  • 스마트 계약으로 전송 된 거래 업데이트 할 수 없습니다 범용 계산의 특성상 최종 순서가 알려질 때까지 블록 체인의 상태. 이로 인해 지연이 발생할 수 있습니다 (트랜잭션에서 블록이 확인 될 때까지) 및 가능한 반전 (체인에 포크가있는 경우). 반대로, MultiChain은 확인되지 않은 각 거래 유형을 적절한 방식으로 처리 할 수 ​​있습니다. (a) 들어오는 자산이 즉시 노드의 확인되지 않은 잔액을 업데이트합니다. 즉시 적용되고 들어오는 블록에서 재생됩니다.

그럼에도 불구하고 전에 말했다우리는 강력한 유스 케이스를 볼 때 스마트 계약을 블록 체인 애플리케이션에 유용한 패러다임으로 삼지 않을 것입니다. 그러나 MultiChain 스마트 계약은 가장 낮은 거래 수준이 아닌 블록 체인 위에 스트림과 같은 계층으로 구현됩니다. 이를 통해 자산 및 스트림과 같은 단순한 블록 체인 엔터티에 대한 MultiChain의 우수한 성능을 유지하면서 실제로 필요한 경우 느린 온 체인 계산을 제공합니다. 그러나 당신이 생각하는 것보다 적은 경우가 있습니다.

 

의견을 적어주세요 링크드 인에.

 

기술 부록

스트림과 관련된 모든 명령은 멀티 체인 API 페이지간단한 요약은 다음과 같습니다.

  • 를 사용하여 스트림 만들기 create stream or createfrom ... stream
  • 을 사용하여 스트림에 항목 추가 publish or publishfrom
  • 다음을 사용하여 스트림 목록을 검색하십시오. liststreams
  • 로 스트림 추적 시작 또는 중지 subscribeunsubscribe
  • 를 사용하여 스트림 항목 검색 liststreamitems, liststreamkeyitemsliststreampublisheritems
  • 스트림 키 및 게시자 목록 liststreamkeysliststreampublishers
  • 큰 스트림 항목의 경우 다음을 사용하여 전체 데이터를 검색하십시오. gettxoutdata (참조 maxshowndata 아래에)
  • 다음과 같은 호출로 스트림 별 권한 제어 grant [address] stream1.write
  • 다음을 사용하여 스트림의 권한을 봅니다. listpermissions stream1.*

스트림과 관련된 다른 개발자 노트 :

  • XNUMXD덴탈의 create 권한은 주소가 스트림을 생성 할 수있게합니다.
  • 관련 스트림 별 권한은 write, adminactivate
  • 신제품 블록 체인 매개 변수: root-stream-name (아무것도 비워 두지 마십시오) root-stream-open, anyone-can-create, admin-consensus-create, max-std-op-returns-count
  • 신제품 런타임 매개 변수: autosubscribe 생성 된 새 스트림을 자동으로 구독하고 maxshowndata API 응답의 데이터 양을 제한하기 위해 gettxoutdata 위).
  • 스트림 항목 데이터의 최대 크기는 max-std-op-return-size 블록 체인 매개 변수와 maximum-block-sizemax-std-tx-size 값에서 수백 바이트를 뺀 값입니다.
  • 이전 월렛 형식을 사용하는 노드는 스트림을 구독 할 수 없으며 업그레이드해야합니다.

 

타임 스탬프 :

더보기 멀티 체인