용어집
인증서(certificate), 폴드(fold), 건너뜀(skip), 인수인(underwriter), 셀(cell). 이 가운데 몇몇은 다른 곳에서보다 여기서 더 좁은 뜻을 갖고, 두어 개는 대부분의 체인에 해당하는 말이 아예 없는 사건을 가리킵니다.
이 프로토콜이 쓰는 어휘를, 이 프로토콜이 쓰는 뜻으로 정리했습니다. 이 가운데 몇몇 단어는 다른 곳에서보다 여기서 더 좁은 뜻을 가지며, 그중 둘 — 건너뜀(skip)과 폐기(drop) — 은 대부분의 체인에 해당하는 것이 없어서 해당하는 말도 없는 사건을 가리킵니다.
인증서 (certificate)#
Zycord의 유일한 트랜잭션 유형입니다. 인증서(certificate)는 자신이 읽은 상태와 쓴 상태, 그리고 그 둘을 잇는 프로그램, 그것을 인가하는 서명들, 인수인(underwriter), TTL, 그리고 두 수수료 시장 각각에 대한 입찰가를 함께 지닙니다. 자기 입력과 출력을 함께 지니고 있으므로, 그것이 유효한지 확인하는 데는 상태가 전혀 필요하지 않습니다.
폴드 (fold)#
원장을 전진시키는 결정론적 루프입니다. 블록의 인증서(certificate)들을 전순서로 훑으면서, 각각에 대해 선언된 reads가 여전히 성립하는지 확인합니다. 성립하면 writes를 커밋하고, 성립하지 않으면 건너뜁니다. 폴드(fold)는 뜨거운 키-값 작업 집합 위에서 비교와 덧셈과 쓰기를 수행합니다 — 코드 실행도, 서명 검증도, 재실행도 없고, 타원곡선 연산도 없습니다. 이 시스템에서 병렬화되지 않는 유일한 단계입니다.
건너뜀 (skip)#
선언된 reads가 더 이상 성립하지 않는 인증서(certificate)에 일어나는 일입니다. 그 수수료는 인증서의 인수인(underwriter)에게 청구되고, 블록은 유효한 상태로 남습니다. 건너뜀(skip)은 실패가 아니라 의미론입니다. 포함과 적용은 서로 다른 사건이며, 그렇기 때문에 블록 생산자는 눈을 감고 있을 수 있습니다 — 오래된 인증서를 포함시켰다고 해서 유효하지 않은 블록을 만들어 내는 일은 결코 없습니다.
폐기 (drop)#
청구되지 않는 비사건이며, 구현이 백서의 어휘에 덧붙인 용어입니다. 예치금이 이미 소진된 채로 적용 단계에 도달한 인증서(certificate)는 폐기(drop)됩니다. 청구되지 않고, 확인 집합(seen set)에 표시되지도 않으며, 새 예치금을 붙여 자유롭게 다시 제출할 수 있습니다. 따라서 정직한 사용자는 자기 예치금 셀(cell)을 둘러싼 경합으로 잃는 것이 없습니다.
인수인(underwriter)#
담보로 맡긴 자금으로 인증서(certificate)에 대해 책임지는 당사자입니다. 인수인(underwriter) 없이 존재하는 인증서는 없습니다. 건너뜀(skip)이 공짜여서는 안 됩니다. 그러면 mempool이 잠겨 버립니다 — 그러나 건너뛴 인증서는 발신자의 잔액을 건드린 적이 없으므로 발신자에게 청구할 것이 없습니다. 인수인은 모든 충돌에 주인을 부여하는 장치입니다. Era 0에서 유일한 방식은 자기 보험입니다. 발신자가 아무 제약 없는 셀(cell)에서 소액의 예치금을 붙입니다.
셀 (cell)#
슬롯에 담긴 값입니다 — 32바이트에 빅엔디언으로 저장되는 부호 없는 256비트 정수입니다. 0은 부재입니다. 한 번도 쓰인 적 없는 슬롯과 0이 쓰인 슬롯은 같은 슬롯입니다. 이는 편의가 아니라 합의 요구사항입니다. 상태 루트가 상태를 만들어 낸 이력의 함수가 아니라 상태 자체의 함수로 남게 해 주기 때문입니다.
일회성 주소 (0x01)#
첫 차변으로 서명 권한이 영구히 소각되는 주소입니다. 새로 유도한 일회성 주소로 지불하는 것은 경합이 없는 빠른 경로이며, 결제마다 새 주소를 유도하는 것이 어떤 결제를 다음 결제와 연결할 수 없게 만들어 줍니다. 그 대가는 “그중 일부를 지출하라”가 일회성 주소가 할 수 있는 일이 아니라는 것입니다 — 지갑 규칙 1을 보세요.
영구 주소 (0x02)#
재사용 가능한 주소입니다. 사용된 주소 레지스트리에 결코 들어갈 수 없으므로, 소각 괴롭힘의 표면이 전혀 없습니다. 상점, 기부 주소, 그리고 채굴 지급은 반드시 이 주소를 써야 합니다. zycordd --payout은 그 밖의 것을 거부합니다.
사용된 주소 레지스트리#
권한이 소각된 일회성 주소들의 영구적인 합의 집합입니다. 사용된 주소 아래의 셀(cell) 값은 되돌리기 지평 이후에 정리될 수 있지만 레지스트리 항목은 결코 정리되지 않습니다 — 그것이 그 주소가 되살아나는 것을 막는 장치이기 때문입니다. 주소당 약 33바이트씩, 영원히입니다. 이는 이 프로토콜이 정직하게 밝히는 미해결 문제이며, 모든 널리파이어 집합 설계가 구조적으로 함께 지고 있는 문제입니다.
유효한 vs. 적용 가능한#
통상적인 체인이 하나로 뭉뚱그리는 두 개의 술어입니다. 유효한은 상태와 무관하고, 병렬적이며, 누구든 인증서(certificate)의 바이트만으로 확인할 수 있습니다. 적용 가능한은 상태에 의존하고, 순차적이며, 원장 안에서의 위치만이 결정합니다. 두 개의 유효한 인증서가 같은 슬롯에 대해 같은 입력 값을 선언할 수 있고, 그중 많아야 하나만 적용 가능할 수 있습니다.
가드 델타#
인증서(certificate)가 어떤 슬롯에 대한 술어 — balance ≥ 10 — 를 값을 계산 안으로 읽어 들이지 않은 채 단언하고, 부호 있는 델타를 쓰는 접근 방식입니다. 같은 슬롯에 대한 가드 차변과 대변은 몇 개가 되든 교환 가능하므로, 건너뜀(skip)은 잔액이 바뀌었다는 이유만으로가 아니라 실제로 잔액이 부족할 때만 일어납니다. 이 하나의 방식이 전송, 공급 상한이 있는 발행, 허용량, 금고 지분을 모두 포괄합니다.
순수 델타#
가드가 없는 부호 있는 델타입니다. 결코 충돌할 수 없고 결코 건너뜀(skip) 처리되지 않습니다. 팁, 카운터, 누산기, 보상 집계에 쓰입니다.
정확한 읽기#
SLOAD식 접근 방식입니다. 읽기가 슬롯의 값을 계산 안으로 반환하고 인증서(certificate)를 그 값에 묶습니다. 임의의 로직이 가능하고, 경합이 심한 슬롯에서 충돌이 일어나며, 애플리케이션 시퀀서의 영역입니다.
에포크 비컨#
프로토콜이 에포크마다 한 번씩 쓰는 예약된 슬롯입니다. 프로그램은 타임스탬프나 높이 같은 주변 값을 직접 읽어서는 안 됩니다 — 그러면 실행이 선언된 reads가 아닌 다른 무언가의 함수가 되기 때문입니다 — 그래서 프로그램은 비컨을 다른 슬롯과 똑같이, 가급적 범위 가드를 붙여 읽습니다. 이 값은 작업증명의 출력이며, VRF가 도입되기 전까지는 고액이 걸린 추첨에는 적합하지 않습니다.
에포크#
2,880 블록 — 30초 블록 기준으로 약 하루입니다. 보조금이 한 단계 내려가고, 순차 용량 목표가 이동하며, 비컨이 갱신되는 단위입니다.
TTL#
인증서(certificate)가 유효하려면 그 높이까지 커밋되어야 하는 높이입니다. 합의 수준에서 240 블록(약 두 시간)으로 제한되며, 이것이 확인 집합(seen set)을 정리 가능하게 유지해 줍니다. 이미 본 인증서나 만료된 인증서를 포함시키면 블록이 유효한 것이 아니게 됩니다 — 따라서 하나의 서명은 많아야 한 번만 청구될 수 있고, 그것도 서명자가 서명함으로써 받아들인 위치에서만 그렇습니다.
순차 gas와 병렬 gas#
수수료는 두 개의 시장으로 나뉩니다. 하나는 희소한 순차 상태 변경을 위한 것이고, 다른 하나는 희소하지 않은 병렬 검증을 위한 것입니다. 따라서 서명 검사는 저장소 쓰기와 같은 경매에서 경쟁하지 않으며, 그것이 무거운 암호 연산을 설계상 값싸게 만들어 줍니다.
에라 (Era)#
체인 위에서 측정되는 임계값 — 블록 높이와 지속된 스테이크 — 로 촉발되는 출시 단계이며, 달력상의 날짜나 투표로는 결코 촉발되지 않습니다. Era 0은 채굴과 네이티브 자산이고, 그 안의 두 높이가 먼저 본드(40,320)를, 이어서 cEVM과 시퀀서와 강제 포함(80,640)을 켭니다. Era 1은 담보된 스테이크가 공급량의 1%를 지속적으로 유지하면 체크포인트 최종성을 더하고, Era 2는 제안 권한을 스테이크 위원회로 옮기며, Era S는 기밀 결제를 더하되 감사 결과가 공개된 뒤에만 그렇게 합니다.
RandomX#
평범한 하드웨어가 경쟁력을 유지하도록 범용 CPU에 최적화된 작업증명 함수입니다. 이것은 설정이 아니라 합의 파라미터입니다. 네트워크의 pow_engine을 계산할 수 없는 바이너리는 다른 것으로 되돌아가는 대신 시작을 거부합니다.
트레저리 (treasury)#
프로토콜 주소 자신의 잔액 셀(cell)로, 블록 0부터 모든 블록 보조금의 3%가 적립됩니다. 이 셀에는 제네시스 블록 시점에 키도, 주소도, 정족수도 없으며 Era 2 이전에는 열 수 없습니다. Era 2에서는 하드 포크로 5개 중 3개 키 집합을 고정할 수 있습니다. 아무도 공개적으로 나서서 이를 청구하지 않으면 그 코인은 영영 발행되지 않습니다.
상태 루트#
어떤 높이에서의 상태 전체에 대한 커밋먼트입니다. 노드는 시작할 때 이를 다시 계산하고, 저장된 값과 어긋나면 실행을 거부합니다. 또한 이 값은 노드들 사이의 실운영 시점 차이 감지 장치 역할도 합니다. 하나의 블록 시퀀스에서 서로 다른 루트에 도달한 두 구현은 둘 중 하나에서 버그를 찾아낸 것입니다.
각 용어가 규범적으로 정의된 곳#
이 페이지는 읽기를 돕는 자료입니다. 구속력을 갖는 정의는 명세와 골든 벡터에 있고, 그 근거는 백서에 있으며, 구현 자신의 어휘 절은 docs/ARCHITECTURE.md에 있습니다.