Detalles de implementación para PACK y UNPACK
1 respuesta
- votos
-
- 2019-03-01
Heimplementado
PACK
yUNPACK
en elproyectotezbridge-crypto
.Puede consultarel códigofuente aquí: codec.js # L426
A continuación,semuestran algunos casos deprueba: index.js # L35
Enpocaspalabras,hay varias asignaciones ( codec.js # L166 , codec.js # L288 )entreel valor de Michline y la representaciónbinaria. La conversiónes solo un recorrido unidireccional através de los datos,y cadatipo de datos (como
int
,string
..)tiene sumétodo de codificación/decodificaciónespecífico.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.-
Estaba revisandoel códigofuente del repositorio [tezos] (https://gitlab.com/tezos/tezos)paraelmapeo de operaciones quetienes.Tengo curiosidadpor saber dónde se definenestas asignaciones allí,perono las heencontrado.Mirarel códigofuente de Tezosme ha llevado a unafunción `write_rec`en`binary_writer.ml`.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
-
Estostambién sonbuenos recursos: [Labiblioteca de codificación de datos] (http://tezos.gitlab.io/mainnet/tutorials/data_encoding.html) y [Módulo 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
En la sección Operacionesen bytes deel documentoblanco de Michelson,semenciona que:
Tengo curiosidadpor sabermás detalles de cómo seimplementan
PACK
yUNPACK
y cuáles la representaciónbinaria. Reviséel códigofuente yno haymuchos comentariosen laimplementación.Editar:
Los detalles queel usuario catsigma ha dado sonmuy útiles,pero aúnme gustaríapoder seguir cómofunciona la serializaciónen el códigofuente y de dóndeproviene la operación demapeo de códigobinario.
Encontré lafunción
interp
aquí y laimplementación dePack
:src/proto_alpha/lib_protocol/src/script_interpreter.ml#L697
pack_data
se define aquí:src/proto_alpha/lib_protocol/src/script_ir_translator.ml#L3162
Data_encoding.Binary.to_bytes_exn
parece lafunción clave.src/lib_data_encoding/binary_writer.ml # L338
Ahoraintentemosencontrar cuál sería la codificación de
False
. Aquí haymás código reorganizado src/lib_data_encoding/binary_writer.ml :Ahoranecesitamosencontrar
MBytes.set_int8
. Soloencontréel archivo defirma detipo.src/lib_protocol_environment/sigs/v1/mBytes.mli
mBytes
parece quees unabibliotecaexternaperono heencontradoelnombre. Además,no veo cómoesto coincide conelop_mapping
como semencionaen tezbridge-crypto.