SCALE 인코딩

Substrate은 네트워크를 통해 데이터를 보내고 받는 방식을 최적화하기 위해 가벼우면서도 효율적인 인코딩 및 디코딩 프로그램을 사용합니다. 데이터를 직렬화하고 역직렬화하는 프로그램은 SCALE 코덱이라고 하며, SCALE은 simple concatenated aggregate little-endian의 약자입니다.

SCALE 코덱은 런타임과 외부 노드 간의 통신에 있어서 중요한 구성 요소입니다.

이는 Substrate WebAssembly 런타임과 같은 자원 제한적인 실행 환경에서 데이터의 고성능 및 복사 없는 인코딩 및 디코딩을 위해 설계되었습니다.

SCALE 코덱은 자체적으로 설명하지 않습니다. 디코딩 컨텍스트가 인코딩된 데이터에 대한 모든 유형 지식을 가지고 있다고 가정합니다. Parity에서 유지 관리하는 프론트엔드 라이브러리는 RPC와 런타임 간의 상호작용을 인코딩하고 디코딩하기 위해 SCALE 코덱의 Rust 구현인 parity-scale-codec 크레이트를 사용합니다.

SCALE 코덱은 Substrate 및 블록체인 시스템에 유리합니다. 그 이유는 다음과 같습니다:

  • serde와 같은 일반적인 직렬화 프레임워크에 비해 가볍습니다. 이러한 프레임워크는 바이너리 파일의 크기를 부풀릴 수 있는 상당한 보일러플레이트를 추가합니다.

  • Rust libstd를 사용하지 않으므로 Substrate 런타임과 같이 Wasm으로 컴파일되는 no_std 환경과 호환됩니다.

  • #[derive(Encode, Decode)]를 사용하여 새로운 유형에 대한 코덱 로직을 파생시키기 위해 Rust에서 큰 지원을 받도록 구축되었습니다.

Substrate에서 기존의 Rust 코덱 라이브러리를 재사용하는 대신 인코딩 스키마를 정의하는 것이 중요합니다. 이는 Substrate 블록체인 간의 상호 운용성을 지원하려는 다른 플랫폼 및 언어에서 이 코덱을 다시 구현해야 하기 때문입니다.

다음 표는 Parity SCALE 코덱의 Rust 구현이 다른 유형을 어떻게 인코딩하는지를 보여줍니다.

다양한 유형의 SCALE 코덱 예시

SCALE 코덱은 다른 언어에서도 구현되어 있습니다. 예를 들어:

Last updated