모든 분을 위한 문서 / 작동 방식
트랜잭션의 여정
지갑에서 Ethereum까지 다섯 단계이며, 대부분은 눈으로 볼 수 있는 것보다 빠릅니다. 이 페이지는 기계이고, 확인 페이지는 각 단계가 약속하는 것입니다.
여정
지갑에서 무언가에 서명하고 보냅니다. 그것은 시퀀서라는 하나의 컴퓨터에 도착하고, 그 컴퓨터는 잃어버리지 않도록 그것을 기록하고, 곧바로 작업을 하고, 버튼에서 손을 떼기도 전에 답을 알고 있습니다. 시퀀서는 1초에 여러 번, 방금 만들어 낸 답들을 묶어서 그 묶음에 서명하고 발표합니다. 그보다 조금 덜 자주, 그 묶음들을 Ethereum 블록과 똑같이 보이는 블록으로 감싸는데, 그것이 지갑과 익스플로러가 보여 주는 것입니다.
그다음 별도로, 그 블록에 있던 모든 것을 기록하고 그 목록의 지문을 Ethereum에 보냅니다. 누구든 그 목록을 가져와 스스로 다시 재생하고 같은 답이 나오는지 검사할 수 있습니다. 그 마지막 단계가 Pickle을 그렇다고 말하는 빠른 컴퓨터가 아니라 Ethereum의 일부로 만드는 것입니다.
1. 전송합니다. 지갑이 트랜잭션에 서명하고 표준 JSON-RPC를 통해 체인을 운영하는 단일 프로세스인 시퀀서에 제출합니다.
2. 승인되고 내구성을 갖습니다. 시퀀서는 서명자를 복원하고, 트랜잭션을 크기가 제한된 큐에 넣고, 실행하기 전에 디스크의 체크섬 로그에 추가하므로, 승인 응답을 받은 트랜잭션은 크래시에도 살아남습니다.
3. 즉시 실행됩니다. 단일 코디네이터가 승인 순서대로 트랜잭션을 커밋합니다. 영수증은 어떤 블록보다 먼저 존재합니다.
4. 사전 확인되고, 그다음 확인됩니다. 10 밀리초의 스케줄링 목표로 해당 간격의 트랜잭션들이 서명된 미니블록에 봉인되고, 250 밀리초의 스케줄링 목표로 해당 간격의 미니블록들이 모든 도구가 이해하는 번호를 가진 표준 EVM 블록으로 감싸입니다.
5. Ethereum에 커밋됩니다. 봉인된 각 블록은 전체 트랜잭션 목록을 운반하는 페이로드를 만들어 데이터 가용성 레이어에 저장하고, 60초의 스케줄링 목표마다 하나의 커밋이 Ethereum의 인박스 컨트랙트에 게시됩니다. 그것들로부터 레플리카를 운영하는 누구든 모든 트랜잭션을 재실행하여 같은 상태에 도달합니다.
RPC 레이어는 서명자를 복원하고 트랜잭션을 발신자별 상한이 있는, 크기가 제한된 승인 큐에 넣습니다. 큐가 가득 차면 메모리를 무한히 늘리는 대신 오류를 반환합니다. 수락된 모든 트랜잭션은 체크섬이 있는 선기록 로그에 추가되어 실행 전에 내구성을 갖추며, 배치당 한 번 fsync합니다. 단일 실행 코디네이터가 승인 순서대로 커밋하고 같은 발신자를 동시에 실행하지 않으므로, 멤풀 재정렬 단계 없이 논스 안전성이 보존됩니다. 실행은 즉시 이루어지므로 영수증은 그것을 담는 블록이 봉인되기 전에 존재합니다.
프로듀서 하나가 10 밀리초의 스케줄링 목표로 미니블록을 봉인합니다. 해당 간격의 트랜잭션, 영수증, 로그, 상태 diff 해시, 마이크로초 타임스탬프, 그리고 헤더에 대한 시퀀서 서명입니다. 두 번째 프로듀서는 250 밀리초의 스케줄링 목표로 해당 간격의 미니블록들을 감싸는 Cancun 형태의 EVM 블록을 봉인하며, 다음 블록의 타임스탬프는 이전 블록이 봉인될 때 고정되므로 블록 타임스탬프를 읽는 트랜잭션은 헤더가 커밋하는 값을 봅니다. 봉인된 각 블록은 전체 트랜잭션 목록, 블록 범위, 부모 해시, 블록 해시, 커밋된 타임스탬프로 이루어진 파생 페이로드를 콘텐츠 주소 지정 데이터 가용성 레이어에 내보내고, 60초의 스케줄링 목표마다 하나의 봉투가 L1 인박스 컨트랙트에 커밋되며 콜데이터가 대비책입니다.
10 밀리초, 250 밀리초, 60초라는 수치는 스케줄링 목표, 즉 시퀀서가 지향하는 간격입니다. 어느 것도 지연 시간 보장이 아니고 어느 것도 처리량 주장이 아닙니다.
생애 주기, 단계별로
- 클라이언트가 표준 JSON-RPC를 통해 서명된 트랜잭션을 제출합니다.
- RPC 레이어가 서명자를 복원하고 트랜잭션을 발신자별 상한이 있는, 크기가 제한된 승인 큐에 넣습니다. 큐가 가득 차면 메모리를 무한히 늘리는 대신 오류를 반환합니다.
- 단일 실행 코디네이터가 승인 순서대로 트랜잭션을 커밋합니다. 같은 발신자는 결코 동시에 실행되지 않으며, 이는 멤풀 재정렬 단계 없이 논스 안전성을 보존합니다.
- 실행은 즉시 이루어집니다. 영수증은 그것을 담는 EVM 블록이 봉인되기 전에 존재합니다.
- 수락된 모든 트랜잭션은 체크섬이 있는 선기록 로그에 추가되어 실행 전에 내구성을 갖추며, 배치당 한 번 fsync하므로, 승인 응답을 받은 트랜잭션은 크래시에도 살아남습니다.
세 가지 실행 방식
시퀀서는 모든 트랜잭션을 같은 방식으로 실행하지 않습니다. 세 가지 형태를 인식하고 각각에 대해 가장 짧은 올바른 경로를 택합니다.
- 단순한 ETH 전송은 가상 머신을 전혀 시동하지 않는 네이티브 경로를 택합니다.
- 정식 ERC-20 전송은 잔액 슬롯을 직접 이동시키고 표준 이벤트를 내보내는 패스트 패스를 택하며, 전체 머신이 만들어 낼 것과 같은 결과를 냅니다.
- 그 외 모든 것은 Cancun 하드포크에 고정된 revm인 일반 EVM을 통해 실행됩니다.
세 경로 모두 표준 가스를 부과하고 수수료를 같은 방식으로 분배하므로, 수수료로는 어떤 경로를 택했는지 알 수 없고, 알 필요도 없어야 합니다. 패스트 패스가 존재하는 이유는 체인 트래픽의 대부분이 가장 단순한 두 종류의 트랜잭션이고, 시간이 소요되는 곳이 바로 그곳이기 때문입니다.
결정론적인 이유
다른 체인이 운영자에게 맡기는 두 가지가 여기서는 컴파일 타임 상수입니다. 실행 하드포크와 최소 가스 가격입니다. 조정 가능하게 만들면 둘 중 어느 것이든 레플리카가 시퀀서가 수락한 트랜잭션을 거부하거나 가격을 다시 매길 수 있게 하고, 독립적인 파생은 정지할 것입니다. 같은 논리가 다음 블록의 타임스탬프를 이전 봉인 시점에 고정하고, 미니블록 간격을 운영자별 설정이 아니라 합의 파라미터로 만듭니다. 레플리카는 같은 해시를 재현하기 위해 스트림을 어떻게 자르는지에 합의해야 합니다.
이렇게 만들어진 이유
특이한 결정은 봉인하기 전에 실행하는 것입니다. 대부분의 체인에서 트랜잭션은 다음 블록을 기다리고 그 블록을 만드는 과정의 일부로 실행됩니다. 여기서는 도착 시점에 실행되고, 블록은 이미 존재하는 결과들로부터 나중에 조립됩니다. 그것이 첫 순간을 빠르게 만드는 것이고, 미니블록이 블록과 별개의 것으로 존재하는 이유입니다. 미니블록은 시퀀서가 이미 계산한 결과에 서명을 하는 것이고, 일반적인 블록은 그 뒤에서 자기 리듬으로 도착합니다. 각 순간이 보장하는 것은 확인 페이지에, 기록이 어디에 도달하는지는 정산 페이지에 있습니다.