For the complete documentation index, see llms.txt
Compact toolchain 0.31.0
- Date: 2026-04-28
- Language version: 0.23.0
- Compact runtime version: 0.16.0
- Environment: 릴리스 시점 기준 모든 공개 Midnight 환경. 전체 호환성 매트릭스는 릴리스 노트 개요를 참조하세요.
High-level summary
Compact 툴체인 0.31.0은 개발자가 우회하기 까다로웠던 잘못된 증명 실패 문제에 대한 임시 해결책을 담고 있습니다. 최신 버전인 경우 compact update 또는 compact update 0.31 명령으로 업데이트할 수 있습니다.
Audience
이 릴리스 노트는 Compact 스마트 컨트랙트 개발자와 Compact 런타임을 사용하는 DApp 개발자를 대상으로 합니다.
What changed
이번 릴리스는 실행되지 않은 조건 분기 때문에 증명이 잘못 실패하던 문제에 대한 임시 해결책을 포함합니다. 또한 사용성 개선과 일부 버그 수정도 함께 들어 있습니다.
- 실행되지 않은 분기에 있는 연산이 증명 생성 중 실패하지 않도록 변경됨
- 언어 레퍼런스가 현재 언어 버전에 맞게 최신화됨
for루프의 반복 범위에 제네릭 매개변수를 사용할 수 있음contract-info.json파일에 퍼블릭 원장 상태에 대한 설명이 포함됨
Improvements
이번 릴리스에서는 정확성과 사용성 측면에서 여러 개선이 이루어졌습니다.
Operations in untaken branches cannot fail during proof construction
Compact 회로는 오프체인에서, 그리고 트랜잭션 제출 전에 두 번 "실행"됩니다. 첫 번째에는 컴파일된 JavaScript 코드를 실행해 퍼블릭/프라이빗 상태 업데이트를 수집합니다. 두 번째에는 ZKIR 표현과 앞서 계산한 상태 업데이트를 함께 사용해 영지식 증명을 생성합니다.
JavaScript 실행 단계에서는 조건식의 값에 따라 Compact 코드의 분기가 실행되거나 실행되지 않습니다. 그러나 증명 생성 단계에서 는 조건식의 양쪽 분기 모두가 증명 대상 관계의 일부로 다뤄집니다. 이 때문에 실행되지 않은 분기로 인해 증명 생성이 잘못 실패하는 일이 발생할 수 있었습니다.
이 문제를 우회하기 위해 조건 분기 안에서 사용되는 연산의 ZKIR 표현이 변경되어, 분기가 실행되지 않을 때 실패하지 않도록 했습니다. 다음 연산에 대해 잘못된 증명 실패를 방지하는 우회 처리가 적용되었습니다.
Uint타입에서 더 작은Uint타입으로의 다운캐스트Field에서Uint타입으로의 다운캐스트- 바이트 벡터와
Field또는Uint타입 사이의 변환 - 벡터를 바이트 벡터로 변환
- 입력값이 알려져 있지 않을 수 있는 상태에서의 관계 비교 (
<,<=,>,>=) 사용
이 우회 처리의 단점은 생성되는 회로의 크기가 커질 수 있다는 점입니다. 회로 크기 증가가 부담된다면 이러한 연산을 조건부로 실행되는 Compact 코드 바깥으로 옮기는 것을 검토하세요.
이 우회 처리는 임시 조치이며, 근본적인 수정은 ZKIR 형식 변경이 필요하므로 추후 릴리스에서 적용될 예정입니다.
Up to date language reference
Midnight Network 문서의 Compact 언어 레퍼런스가 전반적으로 개정되어, 현재 Compact 언어 버전에 맞게 최신화되었습니다. 언어에 대한 정확한 내용을 확인할 때 이 레퍼런스를 사용하세요.
Generic for loop iteration bounds
Compact은 for (const i of start..end) 구문으로 자연수 범위 반복을 지원합니다. 여기서 i는 변수 이름이고, start(포함)와 end(제외)는 반복 범위를 나타내는 표현식입니다. 컴파일러는 이 반복 범위 값을 컴파일 시점에 결정할 수 있어야 합니다. 이전에는 반복 범위에 제네릭 매개변수를 사용할 수 없었지만, 이제 사용할 수 있습니다.
Ledger field layout in contract-info.json
컴파일러는 컨트랙트의 컴포넌트 버전, 회로와 위트니스 그리고 그 시그니처 같은 컴파일 결과 정보를 담은 JSON 파일을 생성합니다. 이제 이 파일에 컨트랙트의 퍼블릭 원장 상태에 대한 설명이 포함됩니다.
각 원장 필드는 필드 이름(name), 필드 값을 찾기 위한 원장 경로 인덱스(index), 필드의 export 여부(exported), 원장 상태 타입(storage), 원장 상태 타입에 적용된 Compact 타입 인자(type)로 구성된 항목을 가집니다.
이 정보는 언어에 종속되지 않는 도구(즉, JavaScript뿐만이 아닌 도구)가 컨트랙트의 퍼블릭 상태 레이아웃을 해석하는 데 사용될 수 있습니다.
Deprecations
없음.
Breaking changes
The signature of the Compact runtime function convertBytesToUint has changed
이 런타임 함수는 바이트 벡터를 부호 없는 정수로 타입 캐스트할 때 생성된 코드에서 사용됩니다. 변환에 실패했을 때 더 나은 오류 메시지를 제공하도록 변경되었으며, 이 과정에서 API에 호환성을 깨는 변경이 발생했습니다.
변경 사항: maxval 매개변수의 타입이 number에서 bigint로 변경되었습니다. 큰 결과 값과 비교할 때 정밀도가 조용히 손실되는 것을 방지하기 위함입니다(결과 타입은 이미 bigint였습니다).
영향: 런타임 변환을 위해 이 함수를 직접 호출하던 dApp 코드는 이제 런타임 타입 오류가 발생합니다.
필요한 조치: maxval 매개변수에 JavaScript bigint 값을 전달하세요.
Fixed defect list
Compact 툴체인 0.31로 업데이트하면 다음 결함도 함께 수정됩니다.