PACK 및 UNPACK의 구현 세부 사항
1 대답
- 투표
-
- 2019-03-01
PACK
프로젝트에서UNPACK
및tezbridge-crypto
을 구현했습니다.여기에서 소스 코드를 확인할 수 있습니다. codec.js # L426
다음은 몇 가지 테스트 사례입니다. index.js # L35
간단히 말하면 여러 매핑이 있습니다 ( codec.js # L166 , codec.js # L288 )은 Michline 값과 이진 표현 사이에 있습니다. 변환은 데이터를 통한 단방향 이동이며 각 데이터 유형 (예 :
int
,string
..)에는 고유 한 인코딩/디코딩 방법이 있습니다.I have implemented the
PACK
andUNPACK
intezbridge-crypto
project.You can checkout the source code here: codec.js#L426
Here are some test cases: index.js#L35
In short words, there are several mappings(codec.js#L166, codec.js#L288) between the Michline value and the binary representation. The conversion is just a one way walk though the data, and each data type(like
int
,string
..) has its specific encoding/decoding method.-
내가 가지고있는 op_mapping에 대한 [tezos] (https://gitlab.com/tezos/tezos) 저장소의 소스 코드를 살펴 보았습니다.이 매핑이 어디에 정의되어 있는지 궁금하지만 찾지 못했습니다.tezos 소스 코드를 살펴보면`binary_writer.ml`의`write_rec` 함수가 나타납니다.I was grepping around the source code from the [tezos](https://gitlab.com/tezos/tezos) repository for the op_mapping you have. I am curious where these mappings are defined in there, but I have not found them. Looking through tezos source code has led me to a function `write_rec` in `binary_writer.ml`.
- 0
- 2019-03-04
- MCH
-
이것도 좋은 리소스입니다. [The data_encoding library] (http://tezos.gitlab.io/mainnet/tutorials/data_encoding.html) 및 [Module Tezos_data_encoding.Data_encoding] (http://tezos.gitlab.io/mainnet/api/api-inline.html #tezos-data-encoding/Tezos_data_encoding/index.html)These are also good resources: [The data_encoding library](http://tezos.gitlab.io/mainnet/tutorials/data_encoding.html) and [Module Tezos_data_encoding.Data_encoding](http://tezos.gitlab.io/mainnet/api/api-inline.html#tezos-data-encoding/Tezos_data_encoding/index.html)
- 0
- 2019-03-04
- MCH
바이트 작업 섹션 Michelson의 백서에는 다음과 같이 언급되어 있습니다.
<인용구>"PACK : 최적화 된 바이너리 표현으로 데이터를 직렬화합니다."
PACK
과UNPACK
이 어떻게 구현되고 바이너리 표현이 무엇인지에 대해 더 자세히 알고 싶습니다. 소스 코드를 살펴본 결과 구현에 대한 주석이 많지 않습니다.수정 :
사용자 catsigma가 제공 한 세부 정보는 매우 유용하지만 소스 코드에서 직렬화가 작동하는 방식과 이진 코드 매핑에 대한 작업의 출처를 계속 추적 할 수 있기를 바랍니다.
여기서
interp
함수와Pack
구현을 찾았습니다.src/proto_alpha/lib_protocol/src/script_interpreter.ml#L697
pack_data code>는 여기에 정의됩니다.
src/proto_alpha/lib_protocol/src/script_ir_translator.ml#L3162
Data_encoding.Binary.to_bytes_exn
은 키 함수처럼 보입니다.src/lib_data_encoding/binary_writer.ml # L338
이제
False
의 인코딩이 무엇인지 찾아 보겠습니다. 다음은 재구성 된 코드입니다. src/lib_data_encoding/binary_writer.ml :이제
MBytes.set_int8
을 찾아야합니다. 유형 서명 파일 만 찾았습니다.src/lib_protocol_environment/sigs/v1/mBytes.mli
mBytes
는 외부 라이브러리처럼 보이지만 이름을 찾지 못했습니다. 또한 이것이tezbridge-crypto에서 언급 한op_mapping
과 어떻게 일치하는지 알 수 없습니다.