Skip to main content
For the complete documentation index, see llms.txt

Opaque data types

내부 표현이 드러나는 데이터 타입을 투명 타입이라고 합니다. 이러한 타입은 데이터의 내부 구조가 드러나므로 해당 데이터에 대한 연산을 직접 이해할 수 있습니다.

투명 데이터 타입의 단점은 타입 시스템의 안전성이 낮아진다는 것입니다. 변수에 잘못된 타입을 할당하는 등의 타입 오류를 방지하기 어려워질 수 있습니다.

불투명 데이터 타입은 실제 데이터 구조를 숨기고 인터페이스만 제공합니다. 내부 구조에 접근할 수 있는 서브루틴을 통해서만 조작할 수 있습니다.

정보 은닉 원칙, 즉 설계 결정과 구현을 분리하면 코드의 탄력성이 높아집니다. 내부 세부 사항에 의존하지 않으므로 구현을 자유롭게 개선하거나 변경할 수 있으며, 변경 가능성이 높은 부분을 방어적으로 코딩하면 전체적으로 더 견고한 코드가 됩니다.

Midnight opaque data types

Compact의 불투명 타입은 외부 JavaScript 데이터를 DApp 대신 저장, 전달, 검색할 수 있게 해주는 타입 시스템 기능입니다. 다만 Compact 코드 내에서는 해당 데이터를 검사할 수 없습니다.

Midnight의 Compact 언어는 현재 Opaque<'string'>Opaque<'Uint8Array'>를 지원하며, 컨트랙트의 공개 상태에 저장할 수 있습니다.

참고: 불투명성은 Compact 내에서만 적용됩니다. DApp의 JavaScript 코드에서는 투명하게 접근할 수 있습니다. 온체인 표현은 숨겨지지 않습니다 - Uint8Array는 바이트 배열로, string은 UTF-8 인코딩으로 표현됩니다.

Examples

개발자 튜토리얼의 게시판 예제 DApp에서 불투명 데이터 타입의 사용 예를 확인할 수 있습니다.

  • Compact의 post circuit는 DApp에서 호출하여 Opaque<'string'>을 전달받는 컨트랙트 진입점입니다. Compact 코드는 이 값의 내부를 볼 수 없지만, 컨트랙트의 공개 상태에 저장합니다.

  • 이후 Compact의 take_down circuit가 이 값을 읽어 JavaScript 또는 TypeScript 호출자에게 반환합니다.