Skip to content

Commit 0780768

Browse files
committed
docs: add Spanish and Chinese translations for bytecode reference
Translates all 5 bytecode documentation pages to both Spanish and Chinese: overview (index), module binary format, instruction set reference, type system, and version history. All internal links use the correct language prefixes (/es/ and /zh/).
1 parent b7769be commit 0780768

File tree

10 files changed

+5246
-0
lines changed

10 files changed

+5246
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
---
2+
title: "Referencia de Bytecode"
3+
description: "Referencia técnica del formato de bytecode de Move utilizado por la VM de Aptos Move, incluyendo el diseño binario de módulos, el conjunto de instrucciones, el sistema de tipos y el historial de versiones."
4+
---
5+
6+
Esta sección es una referencia técnica del **formato de bytecode de Move** -- la representación
7+
binaria que la VM de Aptos Move verifica y ejecuta. Está dirigida a desarrolladores que construyen
8+
herramientas (desensambladores, depuradores, analizadores estáticos) y a cualquier persona que
9+
desee entender lo que ocurre entre `aptos move compile` y la ejecución en cadena.
10+
11+
## Cómo el Código Fuente Move se Convierte en Bytecode
12+
13+
```
14+
┌──────────────┐ ┌──────────┐ ┌───────────────┐ ┌───────────┐
15+
│ Move source │ ──▶ │ Compiler │ ──▶ │ Module binary │ ──▶ │ Aptos VM │
16+
│ (.move) │ │ │ │ (bytecode blob)│ │ (execute) │
17+
└──────────────┘ └──────────┘ └───────────────┘ └───────────┘
18+
```
19+
20+
1. El **compilador** traduce el código fuente Move en un binario de módulo autocontenido.
21+
2. El binario se publica en cadena mediante una transacción `publish`.
22+
3. En tiempo de ejecución, la **VM** carga el binario, ejecuta el verificador de bytecode y luego
23+
interpreta las instrucciones.
24+
25+
## Contenido de Esta Sección
26+
27+
| Página | Descripción |
28+
| ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
29+
| [Formato Binario de Módulo](/es/build/smart-contracts/bytecode/module-format) | Diseño del encabezado, bytes mágicos, directorio de tablas y cada tipo de tabla en el formato binario. Comienza aquí si estás escribiendo un parser. |
30+
| [Referencia del Conjunto de Instrucciones](/es/build/smart-contracts/bytecode/instructions) | Cada opcode que la VM puede ejecutar -- operandos, efectos en el stack y semántica de ejecución. |
31+
| [Sistema de Tipos](/es/build/smart-contracts/bytecode/type-system) | Cómo los tipos se representan como tokens de firma, cómo funcionan las abilities a nivel de bytecode y el modelo de indirección de handles. |
32+
| [Historial de Versiones](/es/build/smart-contracts/bytecode/version-history) | Qué cambió en cada versión del formato de bytecode desde la v5 hasta la v10. |
33+
34+
## Punteros al Código Fuente
35+
36+
Las definiciones canónicas se encuentran en el repositorio `aptos-core`:
37+
38+
- **Structs del formato binario:** [`third_party/move/move-binary-format/src/file_format.rs`](https://github.com/AptosFoundation/aptos-core/blob/main/third_party/move/move-binary-format/src/file_format.rs)
39+
- **Serialización:** [`third_party/move/move-binary-format/src/serializer.rs`](https://github.com/AptosFoundation/aptos-core/blob/main/third_party/move/move-binary-format/src/serializer.rs)
40+
- **Deserialización:** [`third_party/move/move-binary-format/src/deserializer.rs`](https://github.com/AptosFoundation/aptos-core/blob/main/third_party/move/move-binary-format/src/deserializer.rs)
41+
- **Opcodes de bytecode:** [`third_party/move/move-binary-format/src/file_format.rs`](https://github.com/AptosFoundation/aptos-core/blob/main/third_party/move/move-binary-format/src/file_format.rs) (el enum `Bytecode`)
42+
- **Verificador de bytecode:** [`third_party/move/move-bytecode-verifier/src/`](https://github.com/AptosFoundation/aptos-core/tree/main/third_party/move/move-bytecode-verifier/src)

src/content/docs/es/build/smart-contracts/bytecode/instructions.mdx

Lines changed: 1439 additions & 0 deletions
Large diffs are not rendered by default.

src/content/docs/es/build/smart-contracts/bytecode/module-format.mdx

Lines changed: 567 additions & 0 deletions
Large diffs are not rendered by default.

src/content/docs/es/build/smart-contracts/bytecode/type-system.mdx

Lines changed: 537 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
---
2+
title: "Historial de Versiones del Bytecode"
3+
description: "Referencia de lo que cambió en cada versión del formato de bytecode de Move, desde v5 hasta v10, incluyendo nuevas instrucciones, tipos de tabla y signature tokens."
4+
sidebar:
5+
label: "Historial de Versiones"
6+
---
7+
8+
El formato de bytecode de Move lleva un número de versión en cada módulo compilado. La VM usa
9+
esta versión para decidir qué características están disponibles durante la verificación y
10+
ejecución. Esta página documenta los cambios introducidos en cada versión desde v5 (la mínima
11+
que la VM acepta) hasta v10 (la más reciente).
12+
13+
## Referencia Rápida
14+
15+
| Versión | Predeterminada Para | Adiciones Clave |
16+
| ------- | ---------------------------- | ---------------------------------------------------------------------------- |
17+
| v5 | -- (mínima soportada) | Conjunto de instrucciones base |
18+
| v6 | -- | Refactorización interna; sin nuevas características visibles para el usuario |
19+
| v7 | -- | Tipos enum e instrucciones de variante |
20+
| v8 | -- | Closures de primera clase |
21+
| v9 | Language v1 (predeterminada) | Tipos de enteros con signo (`i8`..`i256`) |
22+
| v10 | Language v2.4, v2.5 | Instrucción `AbortMsg` (abortar con mensaje) |
23+
24+
## Versión 5
25+
26+
La versión 5 es la **versión mínima de bytecode** que acepta el Move VM de Aptos. Define el
27+
conjunto de instrucciones base, el diseño binario del módulo y el sistema de tipos central. Todas
28+
las instrucciones presentes antes de la v7 pertenecen a esta línea base.
29+
30+
Los módulos compilados en v5 pueden usar el conjunto completo de tipos de enteros sin signo
31+
(`u8`, `u16`, `u32`, `u64`, `u128`, `u256`), structs con abilities, genéricos, operaciones de
32+
almacenamiento global e instrucciones de vector. Consulta la
33+
[Referencia del Conjunto de Instrucciones](/es/build/smart-contracts/bytecode/instructions) para
34+
la lista completa de instrucciones base.
35+
36+
## Versión 6
37+
38+
La versión 6 introdujo cambios internos al formato binario pero no agregó nuevas instrucciones,
39+
tipos de tabla ni signature tokens visibles para los desarrolladores de Move. Los módulos
40+
compilados en v6 son funcionalmente equivalentes a los módulos v5 desde la perspectiva del
41+
desarrollador.
42+
43+
## Versión 7
44+
45+
La versión 7 agregó **tipos enum** (también llamados variantes) al bytecode de Move. Los enums
46+
permiten que un solo tipo contenga una de varias variantes nombradas, cada una con sus propios
47+
campos -- similar a los enums de Rust o los tipos de datos algebraicos en lenguajes funcionales.
48+
49+
### Nuevas Instrucciones
50+
51+
| Instrucción | Opcode | Descripción |
52+
| ------------------------------ | ------ | ------------------------------------------------------------ |
53+
| `PackVariant` | `0x52` | Crear un valor de variante con los campos dados |
54+
| `PackVariantGeneric` | `0x53` | Versión genérica de `PackVariant` |
55+
| `UnpackVariant` | `0x54` | Desestructurar una variante, apilando sus campos en el stack |
56+
| `UnpackVariantGeneric` | `0x55` | Versión genérica de `UnpackVariant` |
57+
| `TestVariant` | `0x56` | Probar si un valor es una variante específica; apila `bool` |
58+
| `TestVariantGeneric` | `0x57` | Versión genérica de `TestVariant` |
59+
| `ImmBorrowVariantField` | `0x4E` | Tomar prestado un campo de variante de forma inmutable |
60+
| `MutBorrowVariantField` | `0x4F` | Tomar prestado un campo de variante de forma mutable |
61+
| `ImmBorrowVariantFieldGeneric` | `0x50` | Versión genérica de `ImmBorrowVariantField` |
62+
| `MutBorrowVariantFieldGeneric` | `0x51` | Versión genérica de `MutBorrowVariantField` |
63+
64+
### Nuevos Tipos de Tabla
65+
66+
Estos tipos de tabla almacenan metadatos sobre variantes de enum y sus campos:
67+
68+
| Tipo de Tabla | Código | Propósito |
69+
| ------------------------ | ------ | ---------------------------------------------------------------------------------- |
70+
| `VARIANT_FIELD_HANDLES` | `0x11` | Mapea referencias de campos de variante a su variante padre e índice de campo |
71+
| `VARIANT_FIELD_INST` | `0x12` | Instanciaciones de handles genéricos de campos de variante |
72+
| `STRUCT_VARIANT_HANDLES` | `0x13` | Mapea referencias de variante a su definición de struct padre e índice de variante |
73+
| `STRUCT_VARIANT_INST` | `0x14` | Instanciaciones de handles genéricos de variantes de struct |
74+
75+
### Lo Que Esto Permite
76+
77+
Con v7, los desarrolladores de Move pueden definir tipos como:
78+
79+
```move
80+
enum Color {
81+
Red,
82+
Green,
83+
Blue,
84+
Custom { r: u8, g: u8, b: u8 },
85+
}
86+
```
87+
88+
El compilador emite instrucciones `PackVariant` / `UnpackVariant` para construir y desestructurar
89+
estos valores, y `TestVariant` para implementar la coincidencia de patrones. Consulta el
90+
[Libro de Move -- Enums](/es/build/smart-contracts/book/enums) para la referencia a nivel de
91+
código fuente.
92+
93+
## Versión 8
94+
95+
La versión 8 agregó **closures de primera clase** al bytecode de Move. Los closures capturan
96+
valores de su entorno y pueden pasarse como argumentos de función, habilitando patrones de
97+
programación de orden superior.
98+
99+
### Nuevas Instrucciones
100+
101+
| Instrucción | Opcode | Descripción |
102+
| -------------------- | ------ | ---------------------------------------------------------------------------------------- |
103+
| `PackClosure` | `0x58` | Crear un closure que captura valores del stack especificados y los vincula a una función |
104+
| `PackClosureGeneric` | `0x59` | Versión genérica de `PackClosure` |
105+
| `CallClosure` | `0x5A` | Invocar un closure, apilando sus valores de retorno en el stack |
106+
107+
### Nuevo Signature Token
108+
109+
La versión 8 introdujo el signature token **`Function`**, que representa el tipo de un closure
110+
o referencia de función. Un token `Function` lleva:
111+
112+
- Una lista de tipos de parámetro
113+
- Una lista de tipos de retorno
114+
- Un conjunto de abilities que restringe cómo puede usarse el closure
115+
116+
Este token aparece en signatures donde se espera un tipo closure, como parámetros de función
117+
que aceptan callbacks.
118+
119+
### Lo Que Esto Permite
120+
121+
Los closures permiten patrones como pasar una función de comparación a una rutina de
122+
ordenamiento o crear callbacks que llevan estado capturado. El signature token `Function` da al
123+
sistema de tipos visibilidad completa sobre los tipos de closure, para que el verificador de
124+
bytecode pueda imponer seguridad de tipos y restricciones de abilities sobre los closures de la
125+
misma manera que lo hace con los structs.
126+
127+
## Versión 9
128+
129+
La versión 9 agregó **tipos de enteros con signo** a Move. Anteriormente, Move solo soportaba
130+
enteros sin signo (`u8` a `u256`). La versión 9 introdujo seis contrapartes con signo junto con
131+
la negación aritmética.
132+
133+
### Nuevas Instrucciones de Carga
134+
135+
| Instrucción | Opcode | Descripción |
136+
| ----------- | ------ | ------------------------------------------------- |
137+
| `LdI8` | `0x5B` | Cargar una constante entera con signo de 8 bits |
138+
| `LdI16` | `0x5C` | Cargar una constante entera con signo de 16 bits |
139+
| `LdI32` | `0x5D` | Cargar una constante entera con signo de 32 bits |
140+
| `LdI64` | `0x5E` | Cargar una constante entera con signo de 64 bits |
141+
| `LdI128` | `0x5F` | Cargar una constante entera con signo de 128 bits |
142+
| `LdI256` | `0x60` | Cargar una constante entera con signo de 256 bits |
143+
144+
### Nuevas Instrucciones de Conversión
145+
146+
| Instrucción | Opcode | Descripción |
147+
| ----------- | ------ | ------------------------------------ |
148+
| `CastI8` | `0x61` | Convertir el tope del stack a `i8` |
149+
| `CastI16` | `0x62` | Convertir el tope del stack a `i16` |
150+
| `CastI32` | `0x63` | Convertir el tope del stack a `i32` |
151+
| `CastI64` | `0x64` | Convertir el tope del stack a `i64` |
152+
| `CastI128` | `0x65` | Convertir el tope del stack a `i128` |
153+
| `CastI256` | `0x66` | Convertir el tope del stack a `i256` |
154+
155+
### Nueva Instrucción Aritmética
156+
157+
| Instrucción | Opcode | Descripción |
158+
| ----------- | ------ | --------------------------------------------------------------------- |
159+
| `Negate` | `0x67` | Negación aritmética; desapila un entero con signo y apila su negación |
160+
161+
### Nuevos Signature Tokens
162+
163+
Seis nuevos signature tokens representan tipos de enteros con signo en el sistema de tipos:
164+
165+
- `I8` -- entero con signo de 8 bits
166+
- `I16` -- entero con signo de 16 bits
167+
- `I32` -- entero con signo de 32 bits
168+
- `I64` -- entero con signo de 64 bits
169+
- `I128` -- entero con signo de 128 bits
170+
- `I256` -- entero con signo de 256 bits
171+
172+
Estos tokens aparecen en firmas de funciones, definiciones de campos de struct y tipos de
173+
variables locales donde se usen enteros con signo.
174+
175+
### Lo Que Esto Permite
176+
177+
Los enteros con signo soportan valores negativos y aritmética en complemento a dos, lo que
178+
simplifica cálculos financieros, matemáticas de coordenadas y cualquier dominio donde los
179+
números negativos son naturales. La versión 9 es la versión predeterminada de bytecode para la
180+
configuración estándar del lenguaje Move.
181+
182+
## Versión 10
183+
184+
La versión 10 agregó la instrucción **abort-with-message**, que permite que una transacción
185+
aborte con una cadena de error legible por humanos además del código numérico de aborto.
186+
187+
### Nueva Instrucción
188+
189+
| Instrucción | Opcode | Descripción |
190+
| ----------- | ------ | ---------------------------------------------------------------------------------------- |
191+
| `AbortMsg` | `0x68` | Abortar la ejecución con un código de error `u64` y una cadena de mensaje UTF-8 opcional |
192+
193+
### Lo Que Esto Permite
194+
195+
Antes de v10, `abort` solo aceptaba un código numérico, lo que dificultaba diagnosticar fallos
196+
sin consultar el código fuente del módulo. Con `AbortMsg`, los módulos pueden incluir mensajes
197+
de error descriptivos que aparecen en la salida de la transacción, mejorando enormemente la
198+
capacidad de depuración. La versión 10 es la versión predeterminada de bytecode para Move
199+
language v2.4 y v2.5.
200+
201+
## Notas de Compatibilidad
202+
203+
- La VM acepta bytecode desde **v5 hasta la versión máxima actual** (v10 al momento de escribir
204+
esto). Los módulos compilados en cualquier versión soportada pueden coexistir en la cadena y
205+
llamarse entre sí.
206+
- Cuando un módulo declara una versión de bytecode más antigua, el verificador **rechaza
207+
instrucciones y tipos introducidos en versiones posteriores**. Por ejemplo, un módulo en v6 no
208+
puede usar `PackVariant` (una instrucción de v7).
209+
- La versión de bytecode se codifica como un **`u32` little-endian** en los bytes 4 al 7 del
210+
encabezado binario del módulo, inmediatamente después de los bytes mágicos. Consulta la
211+
página del [Formato Binario de Módulo](/es/build/smart-contracts/bytecode/module-format) para
212+
una descripción completa del diseño del encabezado.
213+
- Publicar un módulo con una versión más nueva que la que soporta la VM causa que la transacción
214+
falle durante la verificación.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
---
2+
title: "Bytecode 参考"
3+
description: "Aptos Move VM 使用的 Move bytecode 格式的技术参考,包括 module 二进制布局、指令集、类型系统和版本历史。"
4+
---
5+
6+
本节是 **Move bytecode 格式**的技术参考——即 Aptos Move VM 验证和执行的二进制表示。它面向构建工具(反汇编器、调试器、静态分析器)的开发人员,以及任何想了解 `aptos move compile` 与链上执行之间发生了什么的人。
7+
8+
## Move 源码如何变为 Bytecode
9+
10+
```
11+
┌──────────────┐ ┌──────────┐ ┌───────────────┐ ┌───────────┐
12+
│ Move source │ ──▶ │ Compiler │ ──▶ │ Module binary │ ──▶ │ Aptos VM │
13+
│ (.move) │ │ │ │ (bytecode blob)│ │ (execute) │
14+
└──────────────┘ └──────────┘ └───────────────┘ └───────────┘
15+
```
16+
17+
1. **编译器**将 Move 源码翻译为自包含的 module 二进制文件。
18+
2. 该二进制文件通过 `publish` 交易发布到链上。
19+
3. 在执行时,**VM** 加载该二进制文件,运行 bytecode 验证器,然后解释执行指令。
20+
21+
## 本节内容
22+
23+
| 页面 | 描述 |
24+
| ---------------------------------------------------------------- | ------------------------------------------------------------------- |
25+
| [Module 二进制格式](/zh/build/smart-contracts/bytecode/module-format) | 头部布局、magic 字节、表目录以及二进制格式中的每种表类型。如果你正在编写解析器,请从这里开始。 |
26+
| [指令集参考](/zh/build/smart-contracts/bytecode/instructions) | VM 可以执行的每个 opcode——操作数、stack 效果和执行语义。 |
27+
| [类型系统](/zh/build/smart-contracts/bytecode/type-system) | 类型如何表示为 signature token,ability 在 bytecode 级别如何工作,以及 handle 间接引用模型。 |
28+
| [版本历史](/zh/build/smart-contracts/bytecode/version-history) | 从 v5 到 v10 每个 bytecode 格式版本的变更内容。 |
29+
30+
## 源码指引
31+
32+
规范定义位于 `aptos-core` 仓库中:
33+
34+
- **二进制格式 struct:** [`third_party/move/move-binary-format/src/file_format.rs`](https://github.com/AptosFoundation/aptos-core/blob/main/third_party/move/move-binary-format/src/file_format.rs)
35+
- **序列化:** [`third_party/move/move-binary-format/src/serializer.rs`](https://github.com/AptosFoundation/aptos-core/blob/main/third_party/move/move-binary-format/src/serializer.rs)
36+
- **反序列化:** [`third_party/move/move-binary-format/src/deserializer.rs`](https://github.com/AptosFoundation/aptos-core/blob/main/third_party/move/move-binary-format/src/deserializer.rs)
37+
- **Bytecode opcode:** [`third_party/move/move-binary-format/src/file_format.rs`](https://github.com/AptosFoundation/aptos-core/blob/main/third_party/move/move-binary-format/src/file_format.rs)`Bytecode` enum)
38+
- **Bytecode 验证器:** [`third_party/move/move-bytecode-verifier/src/`](https://github.com/AptosFoundation/aptos-core/tree/main/third_party/move/move-bytecode-verifier/src)

0 commit comments

Comments
 (0)