네더마인드와 타이코 팀에 토론과 피드백에 대한 감사를 전합니다.
요약(TLDR)
레이드(Raid, "수신함 데이터의 소급 증명")는 롤업 수신함이 사전 확인 호환 기반 시퀀싱을 가능하게 하기 위해 채택할 수 있는 일련의 계약입니다. 레이드는 다중 레벨의 온체인 필터링을 사용하여 사전 확인자가 제출한 블롭만 롤업 노드에 의해 정식으로 간주되도록 보장합니다. 이는 비콘 체인 룩어헤드의 온체인 뷰나 EIP-7917과 같이 이를 훨씬 더 단순화할 수 있는 L1 수정 *없이* 달성됩니다.
더 자세한 맥락은 여기에서 확인할 수 있습니다.
문제
롤업은 블롭을 게시하기 위한 L1 진입점이 필요합니다.
OP 스택은 무작위 batchInbox EOA 주소를 사용하고, 롤업 파생 중에 전용 batchSubmitter가 서명한 모든 블롭 트랜잭션을 확인하여 정식 블롭을 필터링합니다. 고정된 주소 대신, 기반 시퀀싱에는 L1 제안자 간에 순환하는 동적 batchSubmitter 주소가 필요합니다.
타이코에서는 누구나 비허가형으로 TaikoInbox 계약에 블롭을 게시할 수 있으며, 이는 이후 단계에서 증명하는 데 필요한 메타데이터를 저장합니다. 이는 기반 시퀀싱에 충분하지만, *누구나* 언제든지 게시할 수 있기 때문에 사전 확인자는 논란의 여지가 있는 상태에 대해 신뢰할 수 있는 약속을 할 수 없습니다. L2 실행 사전 확인을 발행하는 모든 사전 확인자는 적대적인 행위자가 게시 전에 롤업의 상태를 변경하면 자신의 약속을 깨뜨리게 됩니다.
필요한 것은 사전 확인자에게 자신의 슬롯까지 롤업에 대한 쓰기 잠금을 부여하는 방법입니다. 주류 생각은 수신함 계약에 비콘 룩어헤드 뷰를 노출하고 이를 사용하여 블롭 제안을 필터링하는 것이었습니다. EIP-7917이 미래에 이를 해결하지만, 현재 룩어헤드는 비콘 상태의 함수이므로 EIP-4788 비콘 블록 루트에 대한 머클 증명으로 직접 증명할 수 없습니다. 대신 룩어헤드를 온체인에 신뢰할 수 없게 노출하려면 비관적으로 비콘 체인 함수를 ZK로 증명하거나, 네더마인드의 접근 방식과 같이 낙관적으로 게시한 후 사기 증명을 통해 슬래싱해야 합니다.
제안
레이드는 현재의 도구로 이 문제를 해결하지만 한 가지 절충안이 있습니다: 실시간 정산과 호환되지 않으므로 EIP-7917이 라이브될 때까지의 실용적인 단기 솔루션으로 간주될 수 있습니다.
- 레이드 수신함은 블롭 게시에 대한 참조인
unsafeHead와safeHead를 추적합니다 - 누구나 비허가형으로 수신함에 게시할 수 있으며
unsafeHead를 *대체* 또는 *진행*할지 지정할 수 있습니다 - 수신함은 먼저 계약 호출자가 모든 전제 조건(예: 충분한 담보 / 사전 확인 프로토콜에 옵트인 등)을 만족하는 사전 확인자인지 확인합니다
- 수신함은
validatorProof를 확인합니다 - 마지막unsafeHead게시 중 L1 제안자가 누구였는지 증명하는 EIP-4788 비콘 블록 루트에 대한 머클 증명 - 계약 호출자가 *대체*하려 했다면,
validatorProof는unsafeHead의 발신자가 자신의 L1 슬롯 중에 게시하지 않았음을 증명하고, 자신의 것으로unsafeHead를 대체합니다 - 계약 호출자가 *진행*하려 했다면,
validatorProof는unsafeHead의 발신자가 자신의 L1 슬롯 중에 게시했음을 증명하고,unsafeHead를safeHead로 승격시키고 자신의 것으로unsafeHead를 대체합니다 - 롤업 노드는 롤업 상태를 파생할 때 과거의
safeHead를 사용합니다
- blobProposer_1은 유효하지 않은 사전 확인이므로 B_1 게시가 되돌려집니다
- blobProposer_2는
replaceUnsafeHead = false로 B_2를 게시하는 유효한 사전 확인입니다 replaceUnsafeHead가 거짓이므로, blobProposer_2의validatorProof는 publicationId_{B_0}가 blobProposer_0의 슬롯에서 실제로 제출되었음을 증명합니다validatorProof가 유효하다고 가정하면, publicationId_{B_0}는safeHead로 승격되고, publicationId_{B_2}는 새로운unsafeHead가 됩니다- 롤업 노드는
NewSafeHead이벤트를 수신하고 B_0를 처리하여 로컬 L2 상태를 업데이트합니다
슬롯 N+2
- blobProposer_3는
replaceUnsafeHead = true로 B_3를 게시하는 유효한 사전 확인입니다 replaceUnsafeHead가 참이므로, blobProposer_3의validatorProof는 B_2 게시 시 blobProposer_2의 슬롯이 아니었음을 증명합니다validatorProof가 유효하다고 가정하면, publicationId_{B_2}는 publicationId_{B_3}로unsafeHead가 대체됩니다- 롤업 노드는 새로운
safeHead가 없어 상태를 업데이트하지 않습니다
슬롯 N+3
- blobProposer_4는 B_4를
replaceUnsafeHead = false로 게시하는 유효한 사전 컨퍼런스입니다. replaceUnsafeHead가 거짓이므로, blobProposer_4의validatorProof는 publicationId_{B_3}가 blobProposer_3의 슬롯 동안 실제로 제출되었음을 증명합니다.validatorProof가 유효하다고 가정하면, publicationId_{B_3}는safeHead로 승격되고, publicationId_{B_4}는 새로운unsafeHead가 됩니다.- 롤업 노드는
NewSafeHead이벤트를 수신하고 B_3를 처리하여 로컬 L2 상태를 업데이트합니다.
가정
- 각 게시물이 이전
unsafeHead를 대체하거나 승격시키므로, 비콘 블록 루트를 온체인에서 사용 가능하게 할 시간을 허용하기 위해 블록당 하나의 게시물만 추가할 수 있습니다. - 이전 가정에 따라, 합리적인 L1 제안자는 자신의 게시 트랜잭션만 처리할 것입니다.
- 연속된 제안이 필요한 비콘 블록 루트에 접근할 수 있도록 게시물은 최소 매일 발생해야 합니다(마지막 8091개만 온체인에서 접근 가능).

