중복 제거 및 압축 외에도 저장된 계약 코드 크기가 30% 감소합니다.

이 기사는 기계로 번역되었습니다
원문 표시

초기 연구 결과에 따르면, 계약 코드 중복 제거 및 저장 시 코드 압축 외에도 계약 코드에 대해 추가로 30%의 저장 공간 절감 효과를 얻을 수 있는 것으로 나타났습니다.

솔리디티 컴파일러를 비롯한 모든 컴파일러는 필연적으로 특정 명령어 패턴을 가진 바이트코드를 생성합니다. 이상적인 압축 알고리즘은 개별 컨트랙트를 압축할 때, 해당 컨트랙트에서 한 번 발생한 패턴을 학습하여 컨트랙트 전체에서 단축된 방식으로 참조할 수 있습니다.

하지만 이는 압축 알고리즘이 개별 계약에서 패턴이 처음 나타날 때마다 항상 당황하게 된다는 것을 의미합니다. 왜냐하면 알고리즘은 해당 패턴이 여러 스마트 계약에 공통적으로 나타난다는 사실을 알지 못하고, 자신이 작업 중인 개별 계약으로부터만 학습할 수 있기 때문입니다.

이 문제에 대한 해결책은 대부분의 압축 알고리즘 라이브러리에 내장되어 있습니다. 과거 데이터에서 이미 확인된 일반적인 패턴을 인코딩하는 간단한 사전 학습된 "사전"을 제공하면 됩니다. 이를 통해 새로운 데이터에 일반적인 패턴이 처음 나타날 때 즉시 압축할 수 있습니다.

두 번째 이점은 사전 학습된 사전을 사용하면 과도하게 나타나는 스팸/스팸 계약의 주요 패턴을 기억한다는 것입니다. 사소한 변형만으로 수만 번 스팸처럼 전송된 계약의 경우, 사전을 사용하면 원래 크기의 한 자릿수 퍼센트 수준으로 줄일 수 있습니다.

결과는 다음과 같습니다.

영상
이미지 986×428 11KB

2025년 초까지 배포된 모든 계약 바이트코드의 zelliac 데이터셋을 사용하면 중복 제거된 배포 바이트코드 세트가 1,539,858 개 있습니다.

Zstandard 압축 라이브러리를 기본값인 고속 압축 레벨 3으로 설정하고 각 바이트코드 세트를 개별적으로 압축하면 전체 크기가 원래 크기의 100% 에서 41.8% 로 줄어듭니다. 여기에 기본 압축 레벨 설정으로 학습된 100KB 크기의 사전을 추가하면 바이트코드가 차지하는 크기가 원래 크기의 29.3% 로 줄어들어 압축된 크기에서 30% 감소합니다.

압축 사전 크기를 늘리거나 압축 수준을 높이면 최종 크기가 줄어듭니다. 저는 속도 최적화를 위해 이 설정을 유지했습니다. 사전 학습 매개변수를 추가로 조정하면 크기를 더욱 줄일 수 있을 가능성도 있습니다.

크기가 다른 계약 바이트 코드에 필요한 총 저장 공간:

영상
이미지 1149×523 17.7KB

모든 계약에 걸쳐 최악의 성과부터 최고의 성과 순으로 나열했습니다.

영상
이미지 1136×529 26.4KB

마지막으로:

  • 클라이언트에서 이 기능을 사용한다면, 계약이 압축되었는지 여부와 압축되었다면 어떤 사전/ 알고랜드(ALGO) 사용되었는지를 나타내는 단일 바이트를 저장하는 것이 좋을 것 같습니다. 이렇게 하면 향후 더 나은 사전으로 원활하게 업그레이드할 수 있을 뿐 아니라, 압축으로 인해 품질이 저하되는 파일은 압축하지 않도록 할 수 있습니다.
  • 저는 과거에 zstandard를 사용하면서 좋은 경험을 했기 때문에 압축 라이브러리로 zstandard를 선택했습니다. 아직 다른 압축 라이브러리나 알고리즘을 비교해 보지는 않았습니다.

출처
면책조항: 상기 내용은 작자의 개인적인 의견입니다. 따라서 이는 Followin의 입장과 무관하며 Followin과 관련된 어떠한 투자 제안도 구성하지 않습니다.
라이크
즐겨찾기에 추가
코멘트