클로즈드 월드 실행
명령어 집합을 닫는 것은 커널이 네 번 반복하는 같은 동작의 한 사례일 뿐입니다. 매번 일어날 수 있는 일의 공간이 미리 열거되고, 그 바깥에 있는 것은 처리되는 대신 거부됩니다.연산
열거된 집합에 속하지 않는 페이로드. 런타임이 아니라 검증 단계에서 거부됩니다
무엇이 요청되었는가
진실
블록별 작업 집합을 권위로 취급하는 것. 그것은 저널이고, 원천은 엔진 상태입니다
지금 무엇이 참인가
입력
두 기계에서 달라질 수 있는 모든 것: 벽시계, 엔트로피, 부동소수점, 해시 순서
다른 노드에서도 같은 바이트가 나오는가
인과
주인 없는 상태 변경. 어떤 사용자 트랜잭션에도 속하지 않는 효과는 면제가 아니라 시스템 채널을 지납니다
왜 이 변경이 일어났는가
닫는 것
거부하는 것
그래서 원장이 답할 수 있는 것
네 겹의 닫힘, 하나의 동작. 일어날 수 있는 것을 미리 열거하고, 바깥에 있는 것을 거부합니다.
명령어 집합
참여자나 검증자가 할 수 있는 모든 일은 타입이 정해진 연산 집합 중 하나입니다.
이 집합에 속하지 않는 페이로드를 가진 트랜잭션은 검증 단계에서 거부됩니다. 집합은 프로토콜 업그레이드로만 바뀌며, 무언가를 새로 배포해서 바뀌는 일은 없습니다.
블록 실행
실행은 정해진 단계의 연속입니다. 그 순서는 구현 세부사항이 아닙니다. 청산이 자신을 촉발한 가격을 보게 되는지, 취소가 들어오는 공격적 주문을 이기는지를 결정하는 것이 바로 이 순서입니다.가격블록의 마크 확정
로드블록의 계정과 주문 적재
펀딩펀딩 흐름 정산
리스크볼트 디레버리징 → 청산 → ADL
매칭사전 매칭 → 매칭 → 사후 매칭
마무리출력 수집, 불필요 상태 정리
이후 모든 단계가 움직이는 가격이 아니라 종목당 하나의 가격으로 판단
적재된 그대로의 포지션을 대상으로 정산, 최종 상태가 아님
새로운 재량 흐름이 들어오기 전에 강제된 흐름을 해소
리스크 다음에 돌아가므로 같은 블록의 주문이 청산을 앞지를 수 없음
수량이 소진된 포지션과 비워진 계정은 남지 않음
블록 하나, 여섯 단계
이 순서가 결정하는 것
조건부 주문은 이 순서 안에서 스캔되고 진행되므로, 이번 블록의 마크가 촉발한 트리거는 다음 블록이 아니라 이번 블록에서 효력을 갖습니다.
청산이 매칭보다 먼저 돌아가기 때문에, 같은 블록의 주문이 청산을 앞지를 수 없습니다. 재량 주문이 매칭될 시점에는 청산 흐름이 이미 해소되어 있습니다.
두 종류의 상태
커널은 지속되는 것과 임시로 쓰는 것을 엄격히 구분합니다.블록 실행 중
엔진 상태마켓 · 계정 · 오더북 · 포지션 · 클리어링 하우스블록을 넘어 유지
블록 작업 집합마크 · 변경된 계정 · 체결 · 준비된 출력한 블록 동안만 존재
커밋된 체인 상태버전 관리 · 인증최종 근거
변경 추적은 최종 근거로 착각하기 쉽습니다. 블록 동안 바뀐 것은 결정론적 출력을 만드는 재료일 뿐 — 상태가 사는 곳은 아닙니다.
엔진을 다시 세우는 최종 근거
읽기
적용
구체화
결과가 재현 가능한 이유
여기서 결정성은 바라는 것이 아니라 강제되는 것입니다. 같은 이전 상태 위에서 같은 블록을 실행하는 정직한 노드는 모두 바이트 단위로 같은 결과를 냅니다. 실행 경로 위의 어떤 것도 노드마다 다른 값을 읽을 수 없기 때문입니다.- 전 구간 고정소수점 연산. 결제 계산은 반올림 규칙이 명시된 정수 고정소수점으로 돌아갑니다. 증거금에서는 음의 지수에 대해 올림, 수수료에서는 내림과 올림입니다. 결제 경로에 부동소수점은 없습니다. 두 기계 사이의 반올림 차이는 곧 포크이기 때문입니다.
- 벽시계 시간 없음. 블록 안의 순서는 합의가 커밋한 정규 위치와 블록 타임스탬프를 사용하며, 로컬 시간은 절대 쓰지 않습니다.
- 런타임 무작위성 없음. 무작위성이 필요한 것은 무엇이든 체인 상태에서 결정론적으로 도출합니다.
- 결정론적 순회. 순회 순서가 출력에 드러나는 컬렉션은 해시로 무작위화되지 않고 정렬됩니다.
순수 함수인 리스크 공식
증거금 요건, 청산 가격, 디레버리징 대상 선정, 수수료, 미결제약정 한도를 정하는 공식은 순수하고 상태가 없는 함수로 구현되어 있습니다. 값을 받아 값을 돌려줄 뿐, 원장 상태를 읽지도 변경하지도 않습니다. 상태 변경은 오직 클리어링 하우스가 주도하며, 클리어링 하우스가 그 함수를 호출하고 결과를 적용합니다. 상태를 보관하는 모듈(계정, 포지션, 오더북)은 데이터를 저장하고 변경자를 노출하지만, 업무 흐름을 스스로 이끌지는 않습니다. 의도적으로 그은 경계입니다. 덕분에 증거금 계산을 입력과 출력의 표만으로 독립적으로 검사할 수 있고, 누군가의 잔액이 바뀔 수 있는 코드 경로가 정확히 하나만 존재합니다.출력
실행은 상태 기록과 이벤트를 남기며, 각각은 원인이 된 트랜잭션에 묶입니다. 여기에 더해 어느 사용자 트랜잭션에도 속하지 않는 시스템 수준의 효과(펀딩, 보험 기금 이동, 블록 카운터)를 위한 채널이 따로 있습니다. 이 출력이 상태 레이어가 커밋하고 인덱서가 제공하는 트랜잭션 출력이 됩니다. 커널 안에서 일어나는 일 가운데 하위 시스템에 보이지 않는 것은 없습니다. 상태를 바꾸었다면 누군가의 출력이나 시스템 채널에 들어 있습니다.다음으로 읽을 문서
매칭
오더북, 가격-시간 우선순위, 주문 유효기간과 자기체결 방지가 해소되는 방식입니다.
클리어링 하우스
잔액, 포지션, 증거금이 바뀌는 유일한 경로입니다.
상태 모델
커널의 출력이 커밋된 뒤 무엇이 되는지 설명합니다.
IntentionBFT
순서와 가격이 어디에서 왔는지 설명합니다.