Web3 연구: XCMP 교차 체인 전송 프로토콜
PolkaBase
2020-09-10 09:02
本文约6816字,阅读全文需要约27分钟
Polkadot 네트워크에서 일부 엔터티(엔티티)에 정보를 제출해야 합니다.먼저 이러한 엔터티의 유형을 간단히 정리하겠습니다: (1) 사용자, (2) 수집자, (3) 검증자
목차
  • 목차

  • 인터체인 메시징

ICMP 대기열 라우팅을 위한 간단한 가십 프로토콜

새로운 트리 구조(잎) B

노드(피어) k의 새로운 체인 블록 헤더 선언

모듈 t의 k가 켜져 있습니다 큐 메시지 m

〖허용〗_k(m)의 피어 레이어 노드(피어) k 정의

  • 주기적으로

  • 향후 개선

XCMP 크로스체인 메시징

Polkadot 네트워크에서 일부 엔터티(엔티티)에 정보를 제출해야 합니다.먼저 이러한 엔터티의 유형을 간단히 정리하겠습니다: (1) 사용자, (2) 수집자, (3) 검증자

Polkadot 네트워크에서 일부 엔터티(엔티티)에 정보를 제출해야 합니다.먼저 이러한 엔터티의 유형을 간단히 정리하겠습니다: (1) 사용자, (2) 수집자, (3) 검증자

1. 사용자 - 트랜잭션을 생성하고 파라체인 또는 릴레이 체인에 정보를 제공합니다.

2. Collator - 특정 parachain에 연결됩니다. 파라체인의 트랜잭션 데이터를 블록으로 구성 및 패키징하여 유효한 인증서를 생성하고 다음 블록의 일부로 파라체인의 검증자에게 제출할 책임이 있습니다. 유효성과 관련된 다음 두 링크는 ​​Polkadot 네트워크의 기본 규칙의 일부이지만 특정 정렬 작업을 수행하는 방법은 파라체인에 의해 독립적으로 선택됩니다.

3. 유효성 검사기 - 릴레이 체인에 속하며 Polkadot 네트워크의 규칙을 따릅니다. 서로 다른 유효성 검사기 하위 집합이 해당 체인을 확인하기 위해 서로 다른 파라체인에 할당되므로 이러한 하위 집합을 "파라체인 유효성 검사기"라고 합니다. 또한 트랜잭션 정보를 분류하여 릴레이 체인에 제출합니다.

다음으로, 이러한 엔터티 간의 여러 하위 프로토콜을 이해해야 합니다. 각 하위 프로토콜은 실행 트랜잭션의 해당 추상화를 제공합니다.

1. 거래 제출

관련 엔터티 액세스가 가능한 경우 사용자는 거래를 제출하기 위해 관련 엔터티를 찾아야 합니다.

2. 파라체인 데이터 정렬

병렬 체인의 수집기는 트랜잭션 정보를 수집하여 블록으로 패키징하며, 블록의 데이터는 각 병렬 체인이 선택한 Polkadot 네트워크 범위 밖의 외부 체인에서 가져옵니다.

3. Parachain 블록 증명

조합자는 또한 다른 증명 데이터를 생성하여 파라체인의 검증자에게 제출합니다. 이것의 궁극적인 목표는 파라체인 유효성 검사기가 각 파라체인 블록이 온체인 검증 기능을 충족하는지 효과적으로 확인하는 것입니다. 증명 데이터를 생성하기 위해 수집자는 릴레이 체인의 초기 파라체인 검증자가 다시 보낸 데이터도 필요합니다.

4. 릴레이 체인 프로토콜

파라체인 검증자는 전송된 모든 파라체인 블록의 유효성을 증명하고 합의를 위해 이러한 증명을 다른 검증자에게 배포합니다. 그런 다음 모든 유효성 검사기는 릴레이 체인의 검증된 블록과 트랜잭션 정보를 릴레이 체인 블록으로 구성 및 패키징하고 블록을 마무리합니다.

5. 인터체인 메시징

릴레이 체인 블록이 완성되고 이 사실이 파라체인에 다시 커밋된 후 파라체인은 이 블록에 다른 파라체인의 새로운 정보가 포함되어 있는지 확인하고, 그렇다면 수정하고 반응합니다.

(Parachain synchronisation)

6. 파라체인의 정보 통합

collator가 처음 연결하거나 오랜 시간 연결이 끊긴 경우 연결이 복원된 후 parachain의 최신 상태를 다시 검색하여 확인해야 합니다. 릴레이 체인.

7. 릴레이 체인의 정보 통합

위의 설명에서 우리는 초록에서 관련 세부 사항을 설명했으며 이러한 세부 사항이 변경되더라도 유효하게 유지하려고 노력했습니다. 프로그램을 작성할 때 Polkadot 네트워크 계층이 제공해야 하는 서비스 중 하위 프로토콜(3-5) 및 7이 여전히 가장 수요가 많고 가장 복잡한 구성 요소이며 유지될 것으로 예상됩니다.

XCMP

보조 제목

체인 간 정보 전송: Egress Queue 데이터 획득

Polkadot의 모든 파라체인 블록은 다른 모든 블록에 대한 빈 메시지 목록을 생성합니다. 이를 "출구 대기열"이라고 합니다. E_(x,y)^B는 블록 B의 체인 x에서 체인 y로의 송신 대기열을 나타내는 데 사용됩니다. R(E_(x,y)^B) 메시지 데이터에서 E_(x,y)^B에 대한 덴드로그램을 그려 얻은 Merkle Patricia trie[]의 해시 루트입니다.

보류 중인 체인으로 전달된 처리되지 않은 메시지는 해당 체인의 다음 블록에서 처리되어야 합니다. 일정 기간 동안 온체인에서 새로운 블록이 생성되지 않으면 메시지가 쌓이기 시작할 수 있습니다.

파라체인 p의 조합기 노드와 전체 노드는 해당 파라체인의 모든 블록을 실행했으며 체인 x의 모든 B 블록과 E_(p,y)^B를 알아야 합니다.

블록 B의 병렬 체인 p에 있는 블록 출구의 액세스 포인트 세트는 다음과 같습니다.

블록의 수신 수집 루트는 다음과 같습니다.

파라체인 p에서 블록 B의 총 누적 항목(입력)은 재귀 함수로 정의할 수 있습니다.

이것은 블록 B에서 각 병렬 체인으로 p 체인의 각 블록으로의 모든 인그레스를 포함하는 블록입니다.

파라체인은 〖인그레스〗_(parent(B),p) 후에 〖인그레스〗_(B,P)를 실행해야 하며, 〖인그레스〗_(B,P)의 모든 데이터 및 지침이 실행되어야 합니다.

각 파라체인에는 가장 최근에 실행된 인그레스 작업을 반영하는 릴레이 체인에 의해 생성된 워터마크 값 p가 있습니다. 초기에 제네시스로 설정하여 모든 미해결 메시지를 파라체인으로 포함하는 구조를 정의하기 위해 재귀 함수로 정의되는 보류 중인 수신을 도입합니다.

이러한 보류 중인 루트 R(P_INGRESS (B,P))는 R(T_INGRESS (B,P))로 근사화할 수도 있습니다. 파라체인 후보 체인은 모든 접두사를 사용하여 P_INGRESS (B,P)를 구축할 수 있습니다.

CandidateReceipts

런타임 시 파라체인에 대한 모든 정보는

이 후보 소스는 파라체인 후보 블록을 검증하여 생성되며 릴레이 체인 블록에 포함됩니다. 후보자는 분야가 많습니다. 다음은 몇 가지 관련 항목입니다.

  • Vec<(ParaId, Hash)>

송신 루트:

릴레이 체인 블록 B가 파라체인 p에 포함될 때 고유한 파라체인 y와 쌍을 이루는 각 해시 값은 R(E_(p,y)^B)입니다.

  • watermark p

수신된 데이터가 parachain p에 대한 것일 때, 새로운

값. 런타임은 가장 가까운 parachain의 후보 체인에서 받은 값을 현재 값으로 간주합니다. 후보를 포함하는 모든 블록에서 B의 원래 값은 최소한 워터마크 p의 이전 값만큼 높아야 합니다.

(rob: 빈 목록에서 비어 있지 않은 보류 중인 이그레스는 허용되지 않음)

검증자와 콜렉터 모두 블록 B에 대한 블록 큐 정보 수집을 시도하거나 검증자가 〖Ingress〗_(B,P)를 호출하여 전파 풀에서 관련 메시지를 검색하고 아직 릴리스되지 않은 메시지를 기다립니다. P에 대한 결합기의 목표는 P_INGRESS(B,P)의 접두사를 가능한 한 많이 얻기 위해 릴레이 체인 부모 B를 구축하는 것입니다.

R(P_INGRESS (B,가장 쉬운 방법은 를 사용하는 것입니다. 메시지는 한 파라체인 네트워크에서 다른 네트워크로 전달됩니다. 메시지를 브로드캐스팅하는 이 두 네트워크 사이에 공통 노드가 있는 경우 메시지는 메시지를 수신하는 병렬 링크가 메시지를 수신하도록 합니다. 그러나 대상 파라체인의 검증자가 메시지가 파라체인의 수신자에게 전파되지 않았다는 것을 알게 되면 메시지를 보낸 파라체인의 검증자 노드에서 메시지를 다시 요청한 다음 해당 메시지를 수신하게 됩니다. 전파하는 장치.

P))는 런타임에 모든 블록 B와 파라체인 p에서 사용할 수 있습니다.

파라체인 p와 블록 B의 가용성은 p와 B가 해당 블록에 대한 보류 중인 유입 루트의 유입 목록이고 각 목록과 루트가 먼저 라우팅된 블록 번호와 쌍을 이룬다는 사실에 기인합니다. Ingress 목록에서 R(∅)을 생략하고 빈 목록을 생략하고 블록 번호 오름차순으로 정렬합니다. 여기서 모든 블록 번호는 num(B)보다 작고 동일한 체인의 블록을 참조합니다.

  • fn ingress(B, p) -> Vec<(BlockNumber, Vec<(ParaId, Hash)>)>

RUST의 의사 코드(TODO: Transcribe to LaTeX)

  • fn egress(B, p) -> Vec<(BlockNumber, Vec<(ParaId, Hash)>)>

지정된 B 및 p에 대한 송신 대기열의 데이터는 빈 목록의 순서 지정 및 생략과 같은 수신 목록과 동일한 제약 조건에 따라 런타임에 계속 사용할 수 있습니다. 여기서 ParaId는 수신 체인이고 진입(ingress) 기능에서는 송신 체인입니다.

트리 구조가 블록을 릴레이 체인의 최신 파라체인 블록으로 남겨둔다고 가정해 봅시다.

우리는 노드에 대해 다음과 같은 가정을 합니다.

1. 트리 구조의 끝에 있는 리프의 블록 상태는 가능하지만 이전 블록의 상태는 보장할 수 없습니다.

2. 파라체인의 콜레이터와 풀 노드는 파라체인에서 실행된 모든 블록을 유지할 것으로 예상할 수 있습니다.

3. 유효성 검사기는 블록을 유지할 필요가 없습니다. 또한 유효성 검사기가 저장한 삭제 코드 스니펫에서 정보를 복구할 수 있습니다.

가십 프로토콜을 허용하는 시스템을 기반으로 구축한다고 가정하면 피어는 자신이 가장 좋다고 생각하는 트리 구조 끝점(잎)이 무엇인지 서로 통신할 수 있습니다.

이 장에서는 ICMP 메시지의 대기열을 전파하기 위한 제한된 가십 프로토콜을 설명합니다(정의는 개요 참조).

  • fn ingress(B, p) -> Vec<(BlockNumber, Vec<(ParaId, Hash)>)>

그리고

  • fn egress(B, p) -> Vec<(BlockNumber, Vec<(ParaId, Hash)>)>

그리고

  • BlockNumber -> BlockHash

ingress가 블록 B에서 호출되었으므로 쉽게 넣을 수 있습니다.

변환하다

메시지는 비라우팅 상태에서 시작하여 라우팅 상태에서 끝납니다.

우리는 가십 전파 시스템을 정의할 것을 제안합니다.

  • struct Queue {    root: Hash,    messages: Vec,    }

이 모듈에 대한 메시지는 다음과 같은 형식입니다.

우리는 지역 정보를 다음과 같이 유지합니다.

  • MAX_CHAIN_HEADS

1. 〖잎〗_k는 코드를 실행해야 하는 DAG 블록 트리 구조의 끝점(잎)에 대한 최고의 해시 함수 목록입니다.

2. 〖leaves〗_k, 각 피어 k에 대해 가장 최신 목록은 블록의 코드 MAX_CHAIN_HEADSDAG 해시 값을 실행해야 합니다(그들이 우리에게 보낸 내용에 따라)

3. leafTopics(l)→{queueTopic(h)}는 모든 트리 구조(리브)에서 트리 노드 l의 병렬 체인에 있는 확장되지 않은 루트 h를 의미합니다.

4. expectedQueues(t)→H는 모든 호출 모듈의 해당 해시 루트의 파생 과정을 나타내며, 모든 항목에서 t∈∪l_(∈leaves)leafTopics(l)

새로운 트리 구조(잎) B

1. 트리 구조(리프), 트리 모듈(leafTopics) 및 예상 대기열 업그레이드(벤치마크 테스트는 수행되지 않았지만 보수적인 추정은 실행 시간이 100ms임)

2. 같은 레이어의 새로운 트리 구조(잎) 보내기

3. 병렬 체인 p의 수집기가 egress(B,p) 온라인 코드를 실행하면 전파되지 않은 알려진 메시지 대기열 루트에 대해 해당 대기열 메시지를 전파 풀에 넣습니다.

노드(피어) k의 새로운 체인 블록 헤더 선언

1. 트리 구조(잎) 〖잎〗_k 업그레이드

2. ∀H∈leaves ∩ 〖leaves〗_k의 요구 사항을 충족하기 위해 broadcastTopic(k,t)의 각 t는 leafTopics(H)에 매핑됩니다.

모듈 t의 k가 켜져 있습니다 큐 메시지 m

  • good(m)

우리는 기능을 정의

현지 현지 신뢰 표준(현지 승인 기준)으로.

  • root

메시지의 해시 루트

expectedQueues(t) 정의된 함수에서 주어진 메시지의 실제 루트는 루트와 같습니다.

함수 good(m)이 k가 양수임을 증명하면 m을 전파 풀에 넣고, 그렇지 않으면 m을 사용할 수 없음을 증명하여 동료 집합 배양에 유용합니다.

〖허용〗_k(m)의 피어 레이어 노드(peer) k 정의 및 모듈 t의 Queue 메시지 m

메시지 전송이 완료되기 전에 메시지 k가 전송되면 메시지 k는 거부되어야 합니다. 반대로 다음과 같은 경우

∃l∈leaves∩〖〖leaves〗_k|t∈leafTopics(l)∃l∈leaves∩〖leaves〗_k |t∈leafTopics(l)이면 메시지 k가 허용되고 다른 방법은 금지됩니다.

주기적으로

expectedQueues를 제외하고 모든 모듈을 만료된 모듈로 표시하고 전파 풀에서 지워야 합니다. 실제로 이러한 작업은 몇 초마다 수행됩니다. 이렇게 하면 전파 풀이 무한정 커지는 것을 방지할 수 있습니다.

라우팅되지 않은 메시지를 현재 모드와 동일한 보기를 공유하는 피어에게만 전파하기로 한 결정은 논란의 여지가 있을 수 있지만, 우리가 제시한 전제 조건 중 일부는 이 점을 아주 잘 설명합니다.

첫째, 우리는 노드가 무한한 수의 메시지를 처리해야 하는 것을 원하지 않습니다. 즉, queueTopic(H)의 H는 이러한 H가 무한하기 때문에 노드에 알려지지 않습니다. 둘째, 노드는 특정 피어에게 메시지를 전파할지 여부를 결정하기 위해 많은 작업을 수행할 필요가 없습니다. leaves∩〖leaves〗_k=∅라고 가정하고 〖leaves〗_k의 일부 항목은 leaf의 소스 코드입니다.

(선조). 우리는 증명하기 위해 O(n)에서 모든 l ∈ 〖leaves〗_k를 실행해야 합니다. 그런 다음 주어진 메시지가 이전 블록에서 언라우팅되었는지 여부를 파악해야 합니다. 우리는 메시지가 이전 체인에서 라우팅되는 대신 동일한 체인의 일부 나중 블록에서 여전히 라우팅되지 않는 경우 그럴 가능성은 없지만 체인 상태가 인간 노드에서 피싱 롤백일 수 있다고 순진하게 생각합니다.

가정된 체인 상태는 이전 블록에서 사용할 수 없기 때문에 이전 블록의 피어에 실제로 egress를 보낼지 여부를 결정할 좋은 방법이 없습니다. 향후 개선 섹션에서는 고정된 수의 원본(상위)으로 확장하여 이 제한을 완화하는 방법에 대해 논의할 것입니다.

그럼에도 불구하고 다음을 가정하여 동일한 체인에 동기화된 노드(피어)로 전파하는 것이 합리적입니다(일부는 경험적이지만 합리적이지만 과대 평가될 가능성도 있음).

1. 새로운 유효 블록은 최소 5초의 평균 간격으로 발행됩니다(우리의 목표는 실제로 10-15초입니다).

2. 가십 전파 구조의 "유용한" 부분에서 블록의 전파 시간은 2초 이내입니다.

3. 가십 전파 구조에서 인접한 주제는 500ms 이하의 지연이 있습니다.

4. DAG 헤드와 동기화하기 전에 메시지를 의미 있게 전파하는 것은 가치가 없을 수 있습니다.

실제 값은 거의 확실하게 더 나을 것입니다. 좋은 소식은 모든 블록이 한 블록 시간 내에 전파될 필요는 없다는 것입니다. 시간이 지남에 따라 참가자가 더 일찍 메시지를 받을 수 있게 됩니다. 모든 참가자가 모든 메시지를 볼 수 있는 체계입니다. 그것은 소수의 초기 체인 이상으로 확장되지 않을 것이 거의 확실하지만 대신 시작 프로토콜로 기능적으로 작동합니다.

보조 제목

XCMP 라우팅 개요

설정에 따라 하나의 파라체인(전송 파라체인)에서 다른 파라체인(수신 파라체인)으로 메시지를 보내려면 다음 단계를 수행합니다.

보내는 파라체인의 전체 노드가 받는 파라체인 도메인의 일부일 때 메시지가 충분합니다.

수신한 Parachain의 Parachain Validator는 메시지 전파 여부를 확인하지 못하고, 보내는 Parachain의 Parachain Validator에게 직접 메시지를 요청합니다(실시간 PV 전송). 보내는 파라체인의 PV는 메시지를 사용할 수 있도록 유지하는 역할을 합니다. 파라체인을 보내는 파라체인 검증자는 메시지를 받는 파라체인의 PoV로 직접 보내고, 최종적으로 받는 파라체인의 PV는 받는 파라체인 네트워크의 메시지에 가십(gossip)을 퍼뜨린다.

보조 제목

향후 개선

1. 위 섹션에서는 egress 큐를 피어 레이어까지 임의로 전파하는 것이 나쁜 생각인 이유를 설명하지만 일단 동기화하고 정상적인 블록 생성을 따르면 모든 트리를 합리적으로 추적할 수 있습니다. 최종 소스 코드(조상) α의 구조(나뭇잎). α의 초기 합리적인 값은 부모의 값과 일치해야 하며 1을 취합니다. 트리 세트 교차가 필요할 때 "stutter"가 발생하고 두 피어가 새 하위 키에 대한 정보로 서로를 업데이트해야 하기 때문에 필요한 이득의 90%를 얻을 수 있습니다.

2. E_(x,y)^B의 정의를 확장하면 체인 간 상호 검사가 가능합니다. 예를 들어 파라체인 y는 블록 B에서 x의 메시지를 라우팅하지 않도록 릴레이 체인에 지시할 수 있습니다(그리고 나서 블록 B'에서 다시 라우팅을 시작하도록 지시할 수 있습니다). B와 B' 사이의 모든 블록에 대해 CandidateReceipt에서 b의 x를 무시할 때 E_(x,y)^b=∅를 실행하는 실행 시간이 있습니다. 사실, 런타임은 해시 루트 해시만 처리하기 때문에 후보 영수증에서 R(E_(x,y)^b)를 무시하고 R(∅)로 설정합니다.

3. 모든 사람이 모든 것을 볼 수 없는 더 스마트한 토폴로지를 지원하도록 확장합니다. 어쩌면 두 종류의 주제 배열(주제), (B, (B,〖chain〗_from)) 기반 주제 배열(주제) 및 (B,〖chain〗_to) 기반 모드가 있으면 이 모드의 사용성이 향상될 것입니다.https://github.com/sipa/minisketch4. 일종의 스마트 설정 조정을 사용합니다(예:

) 가십 전파 대역폭을 최소화합니다.

5. 확률론적 소액 결제와 유사한 방식으로 배포를 장려합니다.

6. 파라체인 유효성 검사기 노드는 메시지가 포함되었음을 확인할 때까지 출구 대기열을 보유합니다. 이것은 두 개의 파라체인 네트워크가 동일한 전체 노드를 갖지 않고 메시지가 채팅을 통해 도착하지 않는 경우 롤백입니다. 수신 파라체인의 파라체인 유효성 검사기 노드는 누락된 메시지를 인식하고 메시지를 보내는 체인의 파라체인 유효성 검사기 노드에 요청합니다. 해당 요청을 수신하면 수신자의 파라체인 네트워크를 통해 전파됩니다.

블록체인이 비즈니스 로직에 가지고 있는 모든 정보는 CandidateReceipts의 형태입니다. 블록 서명자는 블록의 각 파라체인에서 최대 하나의 CandidateReceipt를 제출할 수 있습니다.

편집 / 스텔스 야오

PolkaBase
作者文库