> ## Documentation Index
> Fetch the complete documentation index at: https://docs.intention.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# IntentionKernel

> 실행 레이어: 금융 연산으로 닫힌 명령어 집합을, 합의로 커밋된 블록 위에서 정해진 단계 순서대로 실행합니다.

IntentionKernel은 커밋된 블록이 거래 상태로 바뀌는 자리입니다. 임의의 프로그램을 실행하는 범용 가상 머신이 아닙니다. 명령어 집합은 파생상품 거래소에 필요한 금융 연산을 열거한 집합이고, 그 하나하나는 프로토콜이 이해하는 정해진 효과를 갖습니다.

그 차이가 네트워크가 거래에 대해 무언가를 주장할 수 있는 이유입니다. 범용 체인은 트랜잭션이 서명되었고 중단되지 않았다는 사실까지는 알려 줄 수 있습니다. 하지만 그 트랜잭션이 오더북의 특정 위치에 있던 특정 주문을 취소한 것이라는 사실까지는 알려 주지 못합니다. 호출의 의미가 체인에는 불투명하기 때문입니다. 여기서는 그 의미가 곧 명령어입니다.

<h2 id="closed-world-execution">
  클로즈드 월드 실행
</h2>

명령어 집합을 닫는 것은 커널이 네 번 반복하는 같은 동작의 한 사례일 뿐입니다. 매번 일어날 수 있는 일의 공간이 미리 열거되고, 그 바깥에 있는 것은 처리되는 대신 거부됩니다.

<div className="dg" data-dg="kernel-closure">
  <div className="dg-c" style={{aspectRatio:"720 / 384"}}>
    <svg className="dg-w" viewBox="0 0 720 384" aria-hidden="true" />

    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"7.8125%",width:"20.8333%",height:"17.1875%"}}><span className="dg-t">연산</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"22.5000%",top:"7.8125%",width:"41.6667%",height:"17.1875%"}}><span className="dg-s">열거된 집합에 속하지 않는 페이로드. 런타임이 아니라 검증 단계에서 거부됩니다</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"65.8333%",top:"7.8125%",width:"34.1667%",height:"17.1875%"}}><span className="dg-s dg-ink--blue">무엇이 요청되었는가</span></div>
    <div className="dg-b dg--sky" style={{left:"0.0000%",top:"28.1250%",width:"20.8333%",height:"17.1875%"}}><span className="dg-t">진실</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"22.5000%",top:"28.1250%",width:"41.6667%",height:"17.1875%"}}><span className="dg-s">블록별 작업 집합을 권위로 취급하는 것. 그것은 저널이고, 원천은 엔진 상태입니다</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"65.8333%",top:"28.1250%",width:"34.1667%",height:"17.1875%"}}><span className="dg-s dg-ink--sky">지금 무엇이 참인가</span></div>
    <div className="dg-b dg--yellow" style={{left:"0.0000%",top:"48.4375%",width:"20.8333%",height:"17.1875%"}}><span className="dg-t">입력</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"22.5000%",top:"48.4375%",width:"41.6667%",height:"17.1875%"}}><span className="dg-s">두 기계에서 달라질 수 있는 모든 것: 벽시계, 엔트로피, 부동소수점, 해시 순서</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"65.8333%",top:"48.4375%",width:"34.1667%",height:"17.1875%"}}><span className="dg-s dg-ink--yellow">다른 노드에서도 같은 바이트가 나오는가</span></div>
    <div className="dg-b dg--green" style={{left:"0.0000%",top:"68.7500%",width:"20.8333%",height:"17.1875%"}}><span className="dg-t">인과</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"22.5000%",top:"68.7500%",width:"41.6667%",height:"17.1875%"}}><span className="dg-s">주인 없는 상태 변경. 어떤 사용자 트랜잭션에도 속하지 않는 효과는 면제가 아니라 시스템 채널을 지납니다</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"65.8333%",top:"68.7500%",width:"34.1667%",height:"17.1875%"}}><span className="dg-s dg-ink--green">왜 이 변경이 일어났는가</span></div>
    <div className="dg-free" style={{left:"0.0000%",top:"0.0000%",width:"20.8333%"}}><div className="dg-n">닫는 것</div></div>
    <div className="dg-free" style={{left:"22.5000%",top:"0.0000%",width:"41.6667%"}}><div className="dg-n">거부하는 것</div></div>
    <div className="dg-free" style={{left:"65.8333%",top:"0.0000%",width:"34.1667%"}}><div className="dg-n">그래서 원장이 답할 수 있는 것</div></div>
    <div className="dg-free" style={{left:"0.0000%",top:"89.0625%",width:"100.0000%"}}><div className="dg-n">네 겹의 닫힘, 하나의 동작. 일어날 수 있는 것을 미리 열거하고, 바깥에 있는 것을 거부합니다.</div></div>
  </div>
</div>

이 넷은 서로 독립적인 장점이 아닙니다. 각각이 다음을 떠받칩니다. 연산을 닫아야 명령의 *의미*를 복원할 수 있고, 권위 있는 상태가 하나여야 "결과"라는 말이 정의되며, 입력을 닫아야 그 결과가 다른 기계에서도 재현되고, 인과를 닫아야 결과를 그것을 낳은 요청까지 되짚을 수 있습니다. 하나만 빠져도 책임의 사슬은 그 고리에서 끊어집니다.

넷이 합쳐 사들이는 것에는 이름을 붙일 가치가 있습니다. 전통적인 거래소는 같은 것을 훨씬 비싸게 사기 때문입니다. 거래소의 감사 추적은 거래 시스템 **옆에서** 조립되어 바깥으로 보고됩니다. 그래서 시스템과 어긋날 수 있고, 대사가 상설 업무가 되며, 거래소 간 시계 동기화가 구현 세부사항이 아니라 규제 요건이 됩니다. 여기에는 대사할 두 번째 기록이 없습니다. 감사 추적이 곧 실행입니다.

이 페이지의 나머지는 그 네 겹의 닫힘을 자세히 다룹니다.

<h2 id="the-instruction-set">
  명령어 집합
</h2>

참여자나 검증자가 할 수 있는 모든 일은 타입이 정해진 연산 집합 중 하나입니다.

| 분류             | 연산                                                                       |
| -------------- | ------------------------------------------------------------------------ |
| **주문**         | 제출, 취소, 교체, 정정. 지정가 · 시장가 · 조건부 형태 전반과 주문 유효기간, 리듀스 온리, 연결된 TP/SL 구조를 포함 |
| **계정 설정**      | 서브 계정 생성, 레버리지 선택, 증거금 모드, 포지션 모드                                        |
| **이체**         | 서브 계정 간, 계정 간, 그리고 [브릿지](/ko/protocol/architecture/bridge)를 통한 입출금       |
| **에이전트 권한 부여** | 계정을 대신하여 거래하는 에이전트에 대한 권한 부여와 회수                                         |
| **볼트 연산**      | 생성, 입금, 출금, 설정                                                           |
| **시스템 설정**     | 마켓 상장, 수수료 설정, 레버리지 등급, 리스크 파라미터. 거버넌스가 승인                               |
| **검증자 발행**     | 인증 가격 갱신과 재구성                                                            |

이 집합에 속하지 않는 페이로드를 가진 트랜잭션은 검증 단계에서 거부됩니다. 집합은 프로토콜 업그레이드로만 바뀌며, 무언가를 새로 배포해서 바뀌는 일은 없습니다.

<h2 id="executing-a-block">
  블록 실행
</h2>

실행은 정해진 단계의 연속입니다. 그 순서는 구현 세부사항이 아닙니다. 청산이 자신을 촉발한 가격을 보게 되는지, 취소가 들어오는 공격적 주문을 이기는지를 결정하는 것이 바로 이 순서입니다.

<div className="dg" data-dg="kernel-stages">
  <div className="dg-c" style={{aspectRatio:"720 / 434"}}>
    <svg className="dg-w" viewBox="0 0 720 434" aria-hidden="true">
      <path className="dg-wire" d="M 150.00 69.33 L 150.00 80.93" />

      <path className="dg-head" d="M 150.00 87.33 L 145.60 80.93 L 154.40 80.93 Z" />

      <path className="dg-wire" d="M 150.00 130.67 L 150.00 142.27" />

      <path className="dg-head" d="M 150.00 148.67 L 145.60 142.27 L 154.40 142.27 Z" />

      <path className="dg-wire" d="M 150.00 192.00 L 150.00 203.60" />

      <path className="dg-head" d="M 150.00 210.00 L 145.60 203.60 L 154.40 203.60 Z" />

      <path className="dg-wire" d="M 150.00 253.33 L 150.00 264.93" />

      <path className="dg-head" d="M 150.00 271.33 L 145.60 264.93 L 154.40 264.93 Z" />

      <path className="dg-wire" d="M 150.00 314.67 L 150.00 326.27" />

      <path className="dg-head" d="M 150.00 332.67 L 145.60 326.27 L 154.40 326.27 Z" />
    </svg>

    <div className="dg-b dg--sky" style={{left:"0.0000%",top:"6.9124%",width:"41.6667%",height:"8.1413%"}}><span className="dg-t">가격</span><span className="dg-s">블록의 마크 확정</span></div>
    <div className="dg-b dg--sky" style={{left:"0.0000%",top:"21.0445%",width:"41.6667%",height:"8.1413%"}}><span className="dg-t">로드</span><span className="dg-s">블록의 계정과 주문 적재</span></div>
    <div className="dg-b dg--sky" style={{left:"0.0000%",top:"35.1767%",width:"41.6667%",height:"8.1413%"}}><span className="dg-t">펀딩</span><span className="dg-s">펀딩 흐름 정산</span></div>
    <div className="dg-b dg--orange" style={{left:"0.0000%",top:"49.3088%",width:"41.6667%",height:"8.1413%"}}><span className="dg-t">리스크</span><span className="dg-s">볼트 디레버리징 → 청산 → ADL</span></div>
    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"63.4409%",width:"41.6667%",height:"8.1413%"}}><span className="dg-t">매칭</span><span className="dg-s">사전 매칭 → 매칭 → 사후 매칭</span></div>
    <div className="dg-b dg--green" style={{left:"0.0000%",top:"77.5730%",width:"41.6667%",height:"8.1413%"}}><span className="dg-t">마무리</span><span className="dg-s">출력 수집, 불필요 상태 정리</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"45.8333%",top:"6.9124%",width:"54.1667%",height:"8.1413%"}}><span className="dg-s">이후 모든 단계가 움직이는 가격이 아니라 종목당 하나의 가격으로 판단</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"45.8333%",top:"35.1767%",width:"54.1667%",height:"8.1413%"}}><span className="dg-s">적재된 그대로의 포지션을 대상으로 정산, 최종 상태가 아님</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"45.8333%",top:"49.3088%",width:"54.1667%",height:"8.1413%"}}><span className="dg-s">새로운 재량 흐름이 들어오기 전에 강제된 흐름을 해소</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"45.8333%",top:"63.4409%",width:"54.1667%",height:"8.1413%"}}><span className="dg-s">리스크 다음에 돌아가므로 같은 블록의 주문이 청산을 앞지를 수 없음</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"45.8333%",top:"77.5730%",width:"54.1667%",height:"8.1413%"}}><span className="dg-s">수량이 소진된 포지션과 비워진 계정은 남지 않음</span></div>
    <div className="dg-free" style={{left:"0.0000%",top:"0.0000%",width:"41.6667%"}}><div className="dg-n">블록 하나, 여섯 단계</div></div>
    <div className="dg-free" style={{left:"45.8333%",top:"0.0000%",width:"54.1667%"}}><div className="dg-n">이 순서가 결정하는 것</div></div>
    <div className="dg-free" style={{left:"0.0000%",top:"89.4009%",width:"100.0000%"}}><div className="dg-n">조건부 주문은 이 순서 안에서 스캔되고 진행되므로, 이번 블록의 마크가 촉발한 트리거는 다음 블록이 아니라 이번 블록에서 효력을 갖습니다.</div></div>
  </div>
</div>

**가격**이 가장 먼저 돌아가 블록의 나머지가 사용할 마크를 확정하므로, 이후의 모든 단계는 움직이는 가격이 아니라 종목당 하나의 가격을 근거로 판단합니다. **로드**는 블록의 계정과 주문을 적재합니다. **펀딩**은 적재된 그대로의 포지션을 대상으로 펀딩을 정산합니다. **리스크**는 볼트 디레버리징, 청산, 자동 디레버리징의 세 단계를 순서대로 실행해, 새로운 재량 흐름이 들어오기 전에 강제된 흐름을 해소합니다. 이어서 **매칭**이 자체의 세 단계를 실행해 체결을 냅니다. **마무리**는 무엇이 바뀌었는지 모으고, 값이 0이 된 포지션이나 비워진 계정처럼 더 이상 존재할 이유가 없는 상태를 정리합니다.

조건부 주문은 이 순서 안에서 스캔되어 자신의 수명 주기를 따라 진행되므로, 이번 블록의 마크가 촉발한 트리거는 다음 블록이 아니라 이번 블록에서 효력을 갖습니다.

<Note>
  청산이 매칭보다 먼저 돌아가기 때문에, 같은 블록의 주문이 청산을 앞지를 수 없습니다. 재량 주문이 매칭될 시점에는 청산 흐름이 이미 해소되어 있습니다.
</Note>

<h2 id="two-kinds-of-state">
  두 종류의 상태
</h2>

커널은 지속되는 것과 임시로 쓰는 것을 엄격히 구분합니다.

<div className="dg" data-dg="kernel-state">
  <div className="dg-c" style={{aspectRatio:"720 / 300"}}>
    <svg className="dg-w" viewBox="0 0 720 300" aria-hidden="true">
      <path className="dg-wire dg--blue" d="M 195.00 104.00 L 254.60 104.00" />

      <path className="dg-head dg--blue" d="M 261.00 104.00 L 254.60 108.40 L 254.60 99.60 Z" />

      <path className="dg-wire dg--yellow" d="M 261.00 152.00 L 201.40 152.00" />

      <path className="dg-head dg--yellow" d="M 195.00 152.00 L 201.40 147.60 L 201.40 156.40 Z" />

      <path className="dg-wire dg--green" d="M 449.00 128.00 L 498.60 128.00" />

      <path className="dg-head dg--green" d="M 505.00 128.00 L 498.60 132.40 L 498.60 123.60 Z" />

      <path className="dg-wire dg--green dg-dash" d="M 615.00 177.00 L 615.00 232.00 L 95.00 232.00 L 95.00 183.40" />

      <path className="dg-head dg--green" d="M 95.00 177.00 L 99.40 183.40 L 90.60 183.40 Z" />
    </svg>

    <div className="dg-band" style={{left:"34.7222%",top:"18.6667%",width:"29.1667%",height:"46.6667%"}}><span className="dg-cap">블록 실행 중</span></div>
    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"26.6667%",width:"26.3889%",height:"30.6667%"}}><span className="dg-t">엔진 상태</span><span className="dg-s">마켓 · 계정 · 오더북 · 포지션 · 클리어링 하우스</span><span className="dg-n">블록을 넘어 유지</span></div>
    <div className="dg-b dg--yellow dg-dashed" style={{left:"36.9444%",top:"26.6667%",width:"24.7222%",height:"30.6667%"}}><span className="dg-t">블록 작업 집합</span><span className="dg-s">마크 · 변경된 계정 · 체결 · 준비된 출력</span><span className="dg-n">한 블록 동안만 존재</span></div>
    <div className="dg-b dg--green" style={{left:"70.8333%",top:"26.6667%",width:"29.1667%",height:"30.6667%"}}><span className="dg-t">커밋된 체인 상태</span><span className="dg-s">버전 관리 · 인증</span><span className="dg-n">최종 근거</span></div>
    <div className="dg-free" style={{left:"0.0000%",top:"87.3333%",width:"100.0000%"}}><div className="dg-n">변경 추적은 최종 근거로 착각하기 쉽습니다. 블록 동안 바뀐 것은 결정론적 출력을 만드는 재료일 뿐 — 상태가 사는 곳은 아닙니다.</div></div>
    <div className="dg-lbl" style={{left:"49.3056%",top:"77.3333%"}}>엔진을 다시 세우는 최종 근거</div>
    <div className="dg-lbl" style={{left:"31.6667%",top:"30.0000%"}}>읽기</div>
    <div className="dg-lbl" style={{left:"31.6667%",top:"55.3333%"}}>적용</div>
    <div className="dg-lbl" style={{left:"66.2500%",top:"37.3333%"}}>구체화</div>
  </div>
</div>

**엔진 상태**는 블록을 넘어 지속됩니다. 마켓 메타데이터, 계정, 오더북, 종목 상태, 클리어링 하우스 상태가 여기에 속합니다. "지금 무엇이 참인가"에 대한 답입니다.

**블록별 작업 집합**은 블록이 실행되는 동안에만 존재합니다. 블록의 입력, 시작 시점에 확정된 마크, 건드린 계정과 주문, 조립 중인 출력이 여기에 속합니다. 진실의 원천이 아니라 작업 일지입니다.

이 구분이 중요한 이유는, 변경 추적을 권위로 착각하기가 쉽기 때문입니다. 블록 동안 무엇이 바뀌었는지는 결정론적 출력을 만드는 데 쓰이는 것이지, 상태가 사는 곳이 아닙니다. 이것을 거꾸로 잡으면 어떻게 물어보느냐에 따라 답이 달라지는 시스템이 나옵니다.

<h2 id="why-the-result-is-reproducible">
  결과가 재현 가능한 이유
</h2>

여기서 결정성은 바라는 것이 아니라 강제되는 것입니다. 같은 이전 상태 위에서 같은 블록을 실행하는 정직한 노드는 모두 바이트 단위로 같은 결과를 냅니다. 실행 경로 위의 어떤 것도 노드마다 다른 값을 읽을 수 없기 때문입니다.

* **전 구간 고정소수점 연산.** 결제 계산은 반올림 규칙이 명시된 정수 고정소수점으로 돌아갑니다. 증거금에서는 음의 지수에 대해 올림, 수수료에서는 내림과 올림입니다. 결제 경로에 부동소수점은 없습니다. 두 기계 사이의 반올림 차이는 곧 포크이기 때문입니다.
* **벽시계 시간 없음.** 블록 안의 순서는 합의가 커밋한 정규 위치와 블록 타임스탬프를 사용하며, 로컬 시간은 절대 쓰지 않습니다.
* **런타임 무작위성 없음.** 무작위성이 필요한 것은 무엇이든 체인 상태에서 결정론적으로 도출합니다.
* **결정론적 순회.** 순회 순서가 출력에 드러나는 컬렉션은 해시로 무작위화되지 않고 정렬됩니다.

짚어 둘 결과가 하나 있습니다. 블록 안의 "시간"이 커밋된 블록 내 위치이기 때문에, 블록 *안에서는* 밀리초 이하의 코로케이션 이점이 존재하지 않습니다. 취소를 공격적 주문 제출보다 먼저 실행하는 우선순위 순서까지 더해지면, 같은 블록에 도착한 주문에 대기 호가를 빼앗기는 일을 구조적으로 막아 줍니다.

<h2 id="risk-formulas-are-pure">
  순수 함수인 리스크 공식
</h2>

증거금 요건, 청산 가격, 디레버리징 대상 선정, 수수료, 미결제약정 한도를 정하는 공식은 **순수하고 상태가 없는 함수**로 구현되어 있습니다. 값을 받아 값을 돌려줄 뿐, 원장 상태를 읽지도 변경하지도 않습니다.

상태 변경은 오직 [클리어링 하우스](/ko/protocol/architecture/clearinghouse)가 주도하며, 클리어링 하우스가 그 함수를 호출하고 결과를 적용합니다. 상태를 보관하는 모듈(계정, 포지션, 오더북)은 데이터를 저장하고 변경자를 노출하지만, 업무 흐름을 스스로 이끌지는 않습니다.

의도적으로 그은 경계입니다. 덕분에 증거금 계산을 입력과 출력의 표만으로 독립적으로 검사할 수 있고, 누군가의 잔액이 바뀔 수 있는 코드 경로가 정확히 하나만 존재합니다.

<h2 id="output">
  출력
</h2>

실행은 상태 기록과 이벤트를 남기며, 각각은 원인이 된 트랜잭션에 묶입니다. 여기에 더해 어느 사용자 트랜잭션에도 속하지 않는 시스템 수준의 효과(펀딩, 보험 기금 이동, 블록 카운터)를 위한 채널이 따로 있습니다. 이 출력이 [상태 레이어](/ko/protocol/architecture/state/model)가 커밋하고 [인덱서](/ko/protocol/architecture/indexer)가 제공하는 트랜잭션 출력이 됩니다.

커널 안에서 일어나는 일 가운데 하위 시스템에 보이지 않는 것은 없습니다. 상태를 바꾸었다면 누군가의 출력이나 시스템 채널에 들어 있습니다.

<h2 id="where-to-go-next">
  다음으로 읽을 문서
</h2>

<CardGroup cols={2}>
  <Card title="매칭" href="/ko/protocol/architecture/matching">
    오더북, 가격-시간 우선순위, 주문 유효기간과 자기체결 방지가 해소되는 방식입니다.
  </Card>

  <Card title="클리어링 하우스" href="/ko/protocol/architecture/clearinghouse">
    잔액, 포지션, 증거금이 바뀌는 유일한 경로입니다.
  </Card>

  <Card title="상태 모델" href="/ko/protocol/architecture/state/model">
    커널의 출력이 커밋된 뒤 무엇이 되는지 설명합니다.
  </Card>

  <Card title="IntentionBFT" href="/ko/protocol/architecture/intention-bft">
    순서와 가격이 어디에서 왔는지 설명합니다.
  </Card>
</CardGroup>
