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)リポジトリからソースコードをgrepしていました.これらのマッピングがどこで定義されているのか知りたいのですが、見つかりませんでした.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
-
これらも優れたリソースです:[data_encodingライブラリ](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
のバイト操作セクションマイケルソンの白い文書には、次のように記載されています:
PACK
とUNPACK
がどのように実装されているか、およびバイナリ表現とは何かについて詳しく知りたいです.ソースコードを調べましたが、実装にコメントはあまりありません.編集:
ユーザーcatsigmaが提供した詳細は非常に役立ちますが、ソースコードでシリアル化がどのように機能し、バイナリコードマッピングへの操作がどこから来るのかを追跡できるようにしたいと思います.
ここで
interp
関数とPack
の実装を見つけました:src/proto_alpha/lib_protocol/src/script_interpreter.ml#L697
pack_data
はここで定義されています: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 <を再編成したコードを次に示します./a>:次に、
MBytes.set_int8
を見つける必要があります.タイプ署名ファイルしか見つかりませんでした.src/lib_protocol_environment/sigs/v1/mBytes.mli
mBytes
は外部ライブラリのようですが、名前が見つかりません.また、これがtezbridge-cryptoで説明されているop_mapping
とどのように一致するかわかりません.