Está en la página 1de 25

Machine Translated by Google

Papel beige:
Una especificación técnica de Ethereum

Miqueas Dameron

Resumen

El Protocolo Ethereum es una máquina de estado determinista pero prácticamente ilimitada con dos funciones básicas; el primero
es un estado singleton accesible globalmente y el segundo es una máquina virtual que aplica cambios a ese estado. Este documento
explica las partes individuales que componen estos dos factores.

1. Imaginar Bitcoin como una pendimientos Esto se llama gas y se explica completamente en
§3. El gas se paga exclusivamente en éter. La unidad monetaria
computadora
más pequeña en Ethereum es el Wei, que es igual a ÿ10ÿ18,

Ethereum utiliza el modelo de libro mayor distribuido que se donde ÿ representa 1 éter. Todas las transacciones de divisas en

originó con Bitcoin y lo reutiliza para modelar una computadora Ethereum, a nivel de máquina, se cuentan en Wei. También está
el Szabo, que es ÿ10ÿ6
virtual, dando a los códigos de operación de nivel de máquina el
, y el Finney, que es ÿ10ÿ3 .
mismo nivel de certeza que las transacciones de Bitcoin. Tan
La red Ethereum está subordinada a otros en
seguro como que puede estar seguro de que el libro mayor de
Bitcoin es preciso y que las marcas de tiempo son correctas a términos de una sola cosa: ether, la moneda nativa de Ethereum.

través del mecanismo de consenso de Bitcoin, tan seguro es que Todo lo que el sistema puede hacer está ligado a su capacidad

las instrucciones de la máquina iniciadas en Ethereum se ejecutarán. de gastar éter a cambio de gas, lo que compra una determinada

En otras palabras, los programas ejecutados en Ethereum cantidad de rendimiento del sistema en alguna dirección deseada.

Blockchain son básicamente imparables. Esto no significa que


los programas de Ethereum no puedan tener errores. Esto
Unidad de éter Wei
significa que se puede confiar en que los programas de Ethereum
Éter X1.000000000000000000 1,000,000,000,000,000,000
se ejecutarán sin ninguna interferencia de fuerzas externas ajenas
Finney ÿ0.001000000000000000 1,000,000,000,000,000
a la red. Esta propiedad surge de la seguridad inherente de la
Szabo ÿ0.000001000000000000 1,000,000,000,000
cadena de bloques que se construye y mantiene mediante
Wei ÿ0.000000000000000001 1
pruebas criptográficas.

1.1. Moneda nativa 2. Memoria y Almacenamiento

Debido a que Ethereum se esfuerza no principalmente en la


2.1. Estado mundial
aplicación de la moneda, sino en todas las aplicaciones, existe
una unidad de costo de red fundamental que se usa para mitigar El estado mundial es un mapeo de direcciones de Ethereum a
la posibilidad de abusar de la red con un gasto computacional excesivo.
cuentas. Tal mapeo consta de dos cosas:

1
Machine Translated by Google
2. Memoria y Almacenamiento Papel beige – v0.8.5 2019-08-15

1. direcciones 2.2. Terminología del árbol1


2. estados de cuenta
a) Nodo raíz : el (primer) nodo superior de un árbol.
mediante el uso del estándar de prefijo de longitud recursivo (RLP).
b) Nodo secundario : un nodo conectado directamente a otro
Esta información se almacena como un merkle patricia
nodo cuando se aleja de la raíz.
árbol en un backend de base de datos. a que mantiene un ping de

mapeo de bytearrays a bytearrays.bcComo un todo, el estado es la c) Nodo padre : la noción inversa de un hijo.
suma total de las relaciones de base de datos en la base de datos de
d) Nodos hermanos : un grupo de nodos con el mismo
estado.
padre.

2.1.1. Merkle Patricia Árboles e) Nodo descendiente : un nodo al que se puede acceder
mediante procedimientos repetidos de padre a hijo.
Merkle patricia árboles son merkletrees modificados donde los nodos
f) Nodo antecesor : un nodo al que se puede acceder mediante
representan caracteres individuales de hashes en lugar de que cada
procedimientos repetidos de hijo a padre.
nodo represente un hash completo.
Esto permite que la estructura de datos de estado en sí misma g) Nodo hoja : un nodo sin hijos.

represente no solo las rutas intrínsecamente correctas en los datos,


h) Nodo de rama : un nodo con al menos un hijo.
sino también las pruebas criptográficas necesarias que garantizan
que una parte de los datos era válida en primer lugar. En otras i) Grado : el número de subárboles de un nodo.

palabras, mantiene la cadena de bloques válida al combinar la


j) Borde : la conexión entre un nodo y
estructura de un merkletree estándar con la estructura de un Radix otro.
Tree. Dado que todos los algoritmos de búsqueda y clasificación en
Ethereum deben filtrarse a través de esta base de datos rigurosamente k) Camino – Una secuencia de nodos y aristas que conectan un

correcta, se garantiza la precisión de la información. nodo con un descendiente.

l) Nivel : el nivel de un nodo se define por 1 + (el número de


El siguiente es un árbol de búsqueda que comienza con hexadecimal conexiones entre el nodo y el
valores adecimales a y 4:
raíz).

m) Altura del nodo : la altura de un nodo es el número de aristas


a 4 en el camino más largo entre ese nodo
y una hoja
a
2 6 9
n) Altura del árbol : la altura de un árbol es la altura de su nodo
raíz.
C b 2 7 C

o) Profundidad : la profundidad de un nodo es el número de


7 6 a62 F 9 aristas desde el nodo raíz del árbol hasta el nodo.

p) Bosque – Un bosque es un conjunto de n ÿ 0 árboles disjuntos.


a2c7 a2b6 F 5

497ff 4ac95

aLos usuarios acceden al backend de la base de datos a través de una aplicación externa, muy probablemente un cliente Ethereum; ver también: base de datos de estado bA bytearray es un conjunto específico de bytes [datos] que se pueden

cargar en la memoria. Es una estructura para almacenar datos binarios, por ejemplo, el contenido de un archivo. cEsta estructura de datos permanente permite recuperar fácilmente cualquier estado anterior con su hash de raíz, manteniendo los recursos

fuera de la cadena y minimizando

necesidades de almacenamiento en cadena.

2
Machine Translated by Google
2. Memoria y Almacenamiento Papel beige – v0.8.5 2019-08-15

2.2.1. Codificación de prefijo de longitud recursiva 2. Ommers Hash : este es el hash Keccak-256 de

la parte de la lista del ommer de este bloque.


La codificación de prefijo de longitud recursiva (RLP) impone una
estructura en los datos que considera intrínsecamente un valor 3. Beneficiario : esta es la dirección de 20 bytes a la que se
transfieren todas las recompensas en bloque.
hexadecimal prefijado para colocar los datos en el árbol de la base de
datos de estado. Este valor hexadecimal determina la profundidad de 4. State Root : este es el hash Keccak-256 del

una determinada pieza de datos. Hay dos tipos de elementos nodo raíz del estado trie, después de un bloque y su
fundamentales que se pueden codificar en RLP:2 se finalizan las transacciones.

1. Cadenas de bytes 5. Raíz de transacciones : este es el Keccak-256

2. Listas de otros elementos hash del nodo raíz de la estructura trie poblada con cada
transacción de la transacción de un bloque

RLP codifica matrices de datos binarios anidados a una lista de Acción.

profundidad arbitraria; es el principal método de serialización de datos


6. Raíz de recibos : este es el hash Keccak-256 del nodo raíz de la
en Ethereum. RLP codifica solo la estructura de los datos, por lo que
estructura trie que se completa con los recibos de cada
no presta atención a los tipos particulares de datos que se codifican.
transacción en la parte de la lista de transacciones del bloque.

Los enteros RLP positivos se representan con el valor más


significativo almacenado en la dirección de memoria más baja (big 7. Registros Bloom : este es el filtro Bloom compuesto por

endian) y sin ceros a la izquierda. Como resultado, el valor entero RLP información indexable (dirección de registro y tema de registro)

para 0 se representa mediante una matriz de bytes vacía. Si un entero contenida en el recibo de cada transacción en la parte de la lista

deserializado no vacío comienza con ceros a la izquierda, no es válido.3 de transacciones de un bloque.

8. Dificultad : esta es la dificultad de este bloque: una cantidad


La base de datos de estado global está codificada como RLP calculada a partir de la dificultad del bloque anterior y su marca
para un rápido recorrido e inspección de datos. La codificación RLP de tiempo.
crea un mapeo entre direcciones y estados de cuenta. Dado que se
9. Número : esta es una cantidad igual al número de bloques
almacena en las computadoras del operador del nodo, el árbol se
antecesores detrás del bloque actual.
puede indexar y buscar sin demora en la red. RLP codifica valores

como matrices de bytes, o como secuencias de otros valores, que 10. Límite de gas : esta es una cantidad igual al gasto máximo actual

posteriormente se codifican como matrices de bytes.4 de gas por bloque.

11. Gas utilizado : esta es una cantidad igual al total de gas utilizado
en las transacciones de este bloque.

2.3. El bloque 12. Marca de tiempo : este es un registro del tiempo de Unix en el
inicio de este bloque.
Un bloque se compone de 17 elementos diferentes. Los primeros 15
13. Datos adicionales : esta matriz de bytes de tamaño 32 bytes o
elementos forman parte de lo que se denomina encabezado de bloque.
menos contiene datos adicionales relevantes para este bloque.

2.3.1. El encabezado del bloque 14. Mix Hash : este es un hash de 32 bytes que verifica que se haya
realizado una cantidad suficiente de cálculos en este bloque.
Descripción : La información contenida en un bloque además de la
lista de transacciones. Esto consiste en:
15. Nonce : este es un hash de 8 bytes que verifica que se haya
1. Hash principal: este es el hash Keccak-256 del realizado una cantidad suficiente de cálculos
encabezado del bloque principal. en este bloque.

3
Machine Translated by Google
3. Procesamiento y Cómputo Papel beige – v0.8.5 2019-08-15

2.3.2. Los otros 2 componentes del bloque 2.3.5. Estado de la cuenta

Encabezados de bloque Ommer : estos son bloques Ommer El estado de la cuenta contiene detalles de cualquier cuenta en particular

durante algún estado mundial específico. La cuenta


encabezados (15 componentes enumerados anteriormente) de este bloque.
El estado se compone de cuatro variables:

Serie de transacciones : esta es una lista de transacciones en 1. nonce El número de transacciones enviadas desde
este bloque y el único contenido que no es de encabezado en el bloque. esta dirección, o el número de creaciones de contratos

realizado por la cuenta asociada a este anuncio.

2.3.3. Número de bloque y dificultad 2. saldo La cantidad de Wei que posee esta cuenta. Almacenado

como un par clave/valor dentro del estado


Tenga en cuenta que es la dificultad del bloque de génesis. los base de datos.

El parámetro de dificultad de Homestead se usa para afectar una


3. storage_root Un hash de 256 bits (32 bytes) de la raíz
homeostasis dinámica del tiempo entre bloques, ya que el tiempo
nodo de un Merkle Patricia Tree que codifica el
entre bloques varía, como se analiza a continuación, tal como se
contenido de almacenamiento de la cuenta.a
implementa en EIP-2. En el lanzamiento de Homestead, el

símbolo de dificultad exponencial, hace que la dificultad 4. code_hash El hash del código EVM de este

aumentar lentamente (cada 100.000 bloques) a una tasa exponencial contrato de cuenta. Los hashes de código se almacenan en

y, por lo tanto, aumentar la diferencia de tiempo entre bloques, la base de datos estatal. Los hashes de código son permanentes

y poner presión de tiempo en la transición a la prueba de participación. y se ejecutan cuando la dirección perteneciente a esa cuenta

Este efecto, conocido como la “bomba de dificultad”, recibe una llamada de mensaje.

o "edad de hielo", se explicó en EIP-649 y se retrasó

e implementado anteriormente en EIP-2, también se modificó


2.3.6. Filtro de floración
en EIP-100 con el uso de x, el factor de ajuste, y

el denominador 9, para apuntar al bloque medio El filtro Bloom se compone de información indexable (dirección del
tiempo incluyendo tío bloques. Finalmente, en Bizancio registrador y temas de registro) contenida en cada
lanzamiento, con EIP-649, la edad de hielo se retrasó al crear un entrada de registro desde el recibo de cada transacción en el
número de bloque falso, que se obtiene restando tres millones del lista de transacciones
número de bloque real,
que en otras palabras redujo la diferencia horaria ser
2.3.7. Recibos de transacciones
interbloques, para permitir más tiempo para desarrollar

prueba de participación y evitar que la red se “congele”.4


3. Procesamiento y Cómputo

3.1. La transacción
2.3.4. Creación de cuenta El método básico para que las cuentas de Ethereum interactúen

juntos. La transacción es una única instrucción criptográficamente

La creación de la cuenta se produce definitivamente con la creación del firmada que se envía a la red Ethereum. Hay dos tipos de transacciones:

contrato. Está relacionado con: init. Por último, está el cuerpo . mensaje
que es el código EVM que se ejecuta si/cuando el ac convocatorias y creación de contratos. Las transacciones se encuentran en

count que lo contiene recibe una llamada de mensaje. el corazón de Ethereum, y son enteramente responsables de

aUna ruta particular desde la raíz hasta la hoja en la base de datos estatal

4
Machine Translated by Google
3. Procesamiento y Cómputo Papel beige – v0.8.5 2019-08-15

el dinamismo y la flexibilidad de la plataforma. Las transacciones son 3.3. Minería


el pan y la mantequilla de las transiciones de estado, que
El Beneficiario del bloque es la dirección de 160 bits (20 bytes) a la
es de adiciones de bloque, que contienen todos los cálculos realizados
que se recaudan todas las tarifas del
en un bloque. Cada transacción aplica
la minería de un bloque se transfieren. Aplicar recompensas es
la ejecución cambia al estado de la máquina, un estado temporal que
el tercer proceso en block_finalization que envía
consiste en todos los cambios requeridos en
la recompensa minera a la dirección de una cuenta. Esto es un
Cálculo que se debe realizar antes de que se finalice un bloque y se
valor escalar correspondiente al nivel de dificultad de un
agregue al estado mundial.
bloque actual.

3.1.1. Raíz de transacciones


3.4. Verificación
Notación : listhash
El proceso en The EVM que verifica los encabezados de Ommer.

Alternativamente: raíz de transacciones


3.5. Función de remitente

Descripción : El hash Keccak-256 del Una descripción que asigna transacciones a su remitente utilizando
nodo raíz que precede a las transacciones en el ECDSA de la curva SECP-256k1.
sección de lista de transacciones de un bloque.

1. Nonce : el número de transacciones enviadas por el 3.6. Serialización/Deserialización


remitente.
Esta función expande un valor entero positivo a una matriz de bytes
2. Precio del gas : el número de Wei para pagar el trabajo neto
big endian de longitud mínima. Cuando va acompañado de un
por unidad de gas.
operador ·, indica concatenación de secuencias.
3. Límite de gas : la cantidad máxima de gas que se La función big_endian acompaña a la serialización y deserialización
utilizado durante la ejecución de una transacción. de RLP.

4. Para : el destinatario de 20 caracteres de un mensaje


llamar.a
3.7. Máquina virtual Ethereum
5. Valor : el número de Wei que se transferirá a
El EVM tiene una arquitectura simple basada en pilas. los
el destinatario de una llamada de mensaje.b
el tamaño de palabra de la máquina y, por lo tanto, el tamaño de la pila es

6. v, r, s – Valores para la firma de la transacción de 256 bits. Esto fue elegido para facilitar el Keccak
del que se puede derivar la clave pública. 256 esquema hash y cálculo basado en curva elíptica. El modelo de
memoria es un simple dirigido por palabras
matriz de bytes. La pila de memoria tiene un tamaño máximo de
3.2. Función de transición de estado
1024 bits. La máquina también tiene un modelo de almacenamiento
Las Transiciones de Estado se dan a través de la Función de independiente; esto es similar en concepto a la memoria pero
Transición de Estado; esta es una abstracción de alto nivel de varios en lugar de una matriz de bytes, es una palabra direccionable por palabra

operaciones en Ethereum que comprenden el acto general formación. A diferencia de la memoria, que es volátil, el almacenamiento
de tomar cambios del estado de la máquina y agregar no es volátil y se mantiene como parte del estado del sistema.
ellos al estado mundial.

a En el caso de creación de un contrato es 0x000000000000000000.


b En el caso de creación de un contrato, una dotación a la cuenta del contrato de nueva creación.

5
Machine Translated by Google
3. Procesamiento y Cómputo Papel beige – v0.8.5 2019-08-15

Todas las ubicaciones tanto en el almacenamiento como en la borra una entrada en el almacenamiento no sólo se renuncia, un

memoria están bien definidas inicialmente como cero. La máquina no sigue se otorga un reembolso calificado; de hecho, este reembolso se paga
la arquitectura estándar de von Neumann. Más bien que efectivamente por adelantado desde el uso inicial de un dispositivo de almacenamiento.

almacenar el código del programa en la memoria de acceso general la ubicación cuesta sustancialmente más que el uso normal.4

o almacenamiento, se almacena por separado en una ROM virtual que

solo se puede interactuar a través de instrucciones especializadas.

La máquina puede tener una ejecución excepcional para 3.8. Ejecución


varias razones, incluyendo subdesbordamientos de pila y no válido
La ejecución de una transacción define el estado tran
instrucciones. Al igual que la excepción de falta de gasolina, sí

no deje los cambios de estado intactos. Más bien, la máquina función de posición: stf. Sin embargo, antes de cualquier transacción

se detiene inmediatamente e informa el problema al agente de ejecución se puede ejecutar necesita pasar por las pruebas iniciales

(ya sea el procesador de transacciones o, recursivamente, el entorno de de validez intrínseca.

ejecución de generación) que

tratarlo por separado. 3.8.1. Validez intrínseca

Los criterios de validez intrínseca son los siguientes:

3.7.1. Tarifa • La transacción sigue las reglas para bien formado

RLP (prefijo de longitud recursiva).


Las tarifas (denominadas en gas) se cobran bajo tres
• La firma en la transacción es válida.
circunstancias distintas, las tres como requisito previo a la

ejecución de una operación.4 La primera y más común es la tarifa • El nonce en la transacción es válido, es decir, es

intrínseca al cómputo de la operación. En segundo lugar, el gas puede equivalente al nonce actual de la cuenta del remitente.

deducirse para • El gas_limit es mayor o igual que el


formar el pago de una llamada de mensaje subordinado o intrinseco_gas utilizado por la transacción.
creación de contratos; esto forma parte del pago de la • El saldo de la cuenta del remitente contiene el costo
Operaciones CREATE, CALL y CALLCODE. Finalmente,
requerido en el pago por adelantado.
el gas puede ser pagado debido a un aumento en el uso de la

memoria.
3.8.2. Recibo de la transacción
Durante la ejecución de una cuenta, la tarifa total por

el uso de memoria que se paga es proporcional al múltiplo más pequeño Si bien la cantidad de gas utilizada en la ejecución y
de 32 bytes que se requieren para que toda la memoria los elementos de registro acumulados pertenecientes a la transacción son
índices (ya sea para lectura o escritura) se incluyen en el almacenada, la información relativa al resultado de la ejecución de una
rango. Esto se paga justo a tiempo; como tal, transacción se almacena en el recibo de la transacción
hacer referencia a un área de memoria de al menos 32 bytes mayor recibo_tx. El conjunto de eventos de registro que se crean
que cualquier memoria previamente indexada sin duda resultará en una a través de la ejecución de la transacción, logs_set en
tarifa de uso de memoria adicional. Debido a esto además del filtro de floración que contiene el real
tarifa, es muy poco probable que las direcciones tengan una tendencia superior la información de esos eventos de registro logs_bloom se encuentra en
límites de 32 bits.4 el recibo de la transacción. Además, el estado posterior a la transacción

Las implementaciones deben ser capaces de gestionar esto. post_transaction(estado) y el

eventualidad. Las tarifas de almacenamiento tienen un comportamiento La cantidad de gas utilizada en el bloque que contiene el recibo de la

ligeramente matizado para incentivar la minimización del uso del almacenamiento. transacción (gas_used) se almacena en el recibo de la transacción.

(que corresponde directamente a una base de datos estatal más grande Como resultado, el recibo de la transacción es un

en todos los nodos), la tarifa de ejecución de una operación que registro de cualquier ejecución dada.

6
Machine Translated by Google
3. Procesamiento y Cómputo Papel beige – v0.8.5 2019-08-15

Una ejecución de transacción válida comienza con un de una computadora Esto es en realidad un tiempo de ejecución instantáneo

cambio permanente en el estado: el nonce del remitente que ejecuta varios subestados, como cálculo EVM
la cuenta se incrementa en uno y el saldo se reduce en instancias, antes de agregar el resultado final, después de haber
colateral_gasa , que es la cantidad completado todos los cálculos, al estado final a través del
de gas que una transacción debe pagar antes de su ejecución. función de finalización.

El transactor original diferirá del remitente Además del estado del sistema y la
si el mensaje de llamada o creación de contrato proviene de un gas restante para el cálculo hay varios
código de ejecución de la cuenta del contrato. piezas de información importante utilizadas en la ejecución
Después de que se ejecuta una transacción, viene un entorno que el agente de ejecución debe proporcionar:
estado provisional, que es un estado pre-final. Gas
utilizado para la ejecución de códigos de operación EVM individuales antes
• account_address, la dirección de la cuenta
a su posible adición a world_state crea:
que posee el código que se está ejecutando.
• Estado provisional.
• sender_address la dirección del remitente de la transacción
• gas intrínseco, y que originó esta ejecución.
• un subestado asociado.
• originator_price el precio del gas en la transacción que
• Las cuentas etiquetadas para la autodestrucción originó esta ejecución.
siguientes la finalización de la transacción.
• input_data, una matriz de bytes que son los datos de entrada para
self_destruct (cuentas) esta ejecución; si el agente de ejecución es una transacción,
• Logs_series, que crea puntos de control en estos serían los datos de la transacción.
Ejecución de código EVM para aplicaciones frontend para • account_address la dirección de la cuenta
explore, y se compone de thelogs_set y
lo que provocó que el código se ejecutara; si el agente de
logs_bloom del tx_receipt.
ejecución es una transacción, esta sería la
• El saldo de reembolso.b remitente de la transacción.

La ejecución del código siempre agota el gas. Si corre gasolina • newstate_value el valor, en Wei, pasado a este
out, se señala un error de falta de gas (oog) y el estado resultante cuenta si el agente de ejecución es una transacción,
se define como un conjunto vacío; no tiene efecto este sería el valor de transacción.4
sobre el estado mundial. Esto describe el na transaccional
• matriz de código la matriz de bytes que es la máquina
tura de Ethereum. Para afectar el estado mundial, código a ejecutar.4
una transacción debe realizarse por completo o no realizarse en absoluto.
• block_header el encabezado del bloque del presente
bloquear.
3.8.3. Depósito de código
• stack_ depth la profundidad de la llamada de mensaje
Si el código de inicialización se completa con éxito, un último actual o creación de contrato (es decir, el número de CALLs
se paga el costo de creación del contrato, el costo del depósito del código, c, o CREATE que se están ejecutando actualmente).4
proporcional al tamaño del código del contrato creado.
El modelo de ejecución define el state_transition
función, que puede calcular la resultante
3.8.4. Modelo de ejecución
estado, el gas_restante , el subestado_acumulado
Conceptos básicos : la máquina virtual basada en pilas que se encuentra y la salida_resultante , dadas estas definiciones. Para el presente
en el corazón del Ethereum y realiza las acciones contexto, lo definiremos
a Designado como “ gas_intrínseco ” en el Yellowpaper
bLa operación de almacenamiento aumenta la cantidad reembolsada al restablecer el almacenamiento del contrato a cero desde algún estado distinto de cero.

7
Machine Translated by Google
3. Procesamiento y Cómputo Papel beige – v0.8.5 2019-08-15

donde el subestado acumulado se define como el tu de dos instrucciones, que se evalúa según el

ejemplo del conjunto de autodestrucciones, la serie de registros, la valor: de lo contrario En general, asumimos la memoria,
4
touch_accounts y los reembolsos. el conjunto de autodestrucción y el estado del sistema no cambian: sin
embargo, las instrucciones suelen alterar uno o varios componentes

3.8.5. Descripción general de la ejecución de estos valores.

La función_ejecución, en la mayoría de las implementaciones


Estado provisional Un estado temporal más pequeño que es
prácticas, se modelará como una progresión iterativa del par que
generada durante la ejecución de la transacción. Contiene
comprende el estado_sistema completo.
tres conjuntos de datos.a
y el estado_máquina. Se define recursivamente con
iterator_function, que define el resultado de

un solo ciclo de la máquina de estado, junto con 3.8.7. Mensaje de llamadas

la función halting_check , que determina si el


Una llamada de mensaje puede provenir de una transacción o
estado actual es un estado de parada excepcional de la máquina y
internamente de la ejecución del código del contrato. Contiene el
salida_datos de la instrucción si el presente
datos de campo, que consisten en la entrada de datos del usuario a
El estado es una parada controlada de la máquina. Un vacío
una llamada de mensaje. Los mensajes permiten la comunicación entre
secuencia/serie indica que la ejecución debe detenerse,
cuentas (ya sean de contrato o externas). Mensajes
mientras que el conjunto vacío indica que la ejecución debe
puede venir en forma de msg_calls que dan datos de salida. Si es
Seguir.
una cuenta de contrato, este código se obtiene
Al evaluar la ejecución, extraemos el gas restante del estado de
se ejecuta cuando la cuenta recibe una llamada de mensaje.
la máquina resultante. Es por lo tanto
Las llamadas de mensajes y las creaciones de contratos son
ciclado (recursivamente o con un bucle iterativo) hasta que
transacciones, pero las creaciones de contratos nunca se consideran
excepcional_halt se vuelve verdadero, lo que indica que
igual que las llamadas de mensajes. Mensaje llamadas siempre trans
el estado actual es excepcional y que la máquina
transferir cierta cantidad de valor a otra cuenta. Si el
debe detenerse y descartar cualquier cambio o hasta que H
llamada de mensaje es una transacción de creación de cuenta entonces
se convierte en una serie (en lugar del conjunto vacío) que indica
el valor dado asume el papel de una dotación
que la máquina ha llegado a una parada controlada.
hacia la nueva cuenta. Cada vez que una cuenta recibe una llamada
El estado de la máquina se define como la tupla que
de mensaje devuelve el cuerpo, algo
son el gas disponible, el contador de programa, el
que es activado por la función init . Los datos del usuario se colocan
contenido de la memoria, el número activo de palabras en
en un mensaje_llamada, estructurado como un tamaño ilimitado
memoria (contando continuamente desde la posición 0), y
matriz de bytes.
el contenido de la pila. El contenido de la memoria es un se
series de ceros de tamaño 2 256 .4
Las llamadas de Universal Gas Message siempre tienen un coste en
gas acordado universalmente. hay un fuerte
3.8.6. El ciclo de ejecución
distinción entre transacciones de creación de contratos y

Los elementos de la pila se agregan o eliminan desde el extremo izquierdo, transacciones de llamadas de mensajes. Cálculo realizado,
parte de la serie con índice más bajo; todos los demás elementos si se trata de una creación de contrato o una llamada de mensaje,
permanecen sin cambios: el gas se reduce según el costo del gas de representa el estado de validez legal actual. Puede haber
la instrucción y para la mayoría de las instrucciones, el programa ninguna transacción inválida desde este punto.4 También hay una
incrementos de contador en cada ciclo, para las tres excepciones, pila de creación de llamadas/contratos de mensajes . Esta pila tiene
asumimos una función J, subíndice de uno una profundidad, dependiendo de cuántas transacciones hay en
aEl estado final se alcanza después de eliminar todas las cuentas que aparecen en la lista de autodestrucción o que están tocadas y vacías.

8
Machine Translated by Google
3. Procesamiento y Cómputo Papel beige – v0.8.5 2019-08-15

eso. Las creaciones de contratos y las llamadas de mensajes se han 3.9. Gas
diferentes formas de ejecución, y son completamente diferentes
El gas es la unidad fundamental de coste de la red convertida a
en sus roles en Ethereum. Los conceptos pueden combinarse. Las
y de ether según sea necesario para completar la transacción
llamadas de mensajes pueden resultar en cálculos que
mientras se envía. El gas se determina arbitrariamente en el
ocurre en el siguiente estado en lugar del actual. Si
momento en que se necesita, por bloque y de acuerdo con la
una cuenta que se está ejecutando actualmente recibe una llamada
la decisión de los mineros de la red total de cobrar ciertas tarifas.
de mensaje, no se ejecutará ningún código, porque la cuenta
Cada minero elige individualmente qué precios de gas quiere
podría existir pero aún no tiene código. Para ejecutar una llamada
quieren aceptar y cuáles quieren rechazar.
de mensaje se requieren transacciones:

• remitente 3.9.1. Precio del gas/Límite de gas

• originador de la transacción
El precio del gas es un valor igual al límite actual de gas
• destinatario gasto por bloque, según los mineros. Ningún

• cuenta (normalmente la misma que la del destinatario) el gas no utilizado se reembolsa al remitente. el canónico
límite de gas de un bloque se expresa y se estabiliza por el
• gasolina disponible
time_stamp del bloque.
• valor


precio de la gasolina Estabilidad del precio del gas Donde new_header es el nuevo

• Una matriz de bytes de longitud arbitraria. matriz arbitraria encabezado del bloque, pero sin el nonce y mix-hash

componentes, siendo d el DAG actual, un gran data


• profundidad actual de la pila de creación de llamadas/
conjunto necesario para calcular el mix-hash, y PoW es el
contratos de mensajes.
función de prueba de trabajo que se evalúa como una matriz con
el primer elemento es el mix-hash, para probar que se ha utilizado
3.8.8. Creación de contratos un DAG correcto, y el segundo elemento es un
número pseudoaleatorio criptográficamente dependiente
Para iniciar la creación del contrato, debe enviar la transacción a
en eso. Dada una distribución aproximadamente uniforme en
nada. Esto ejecuta init y devuelve el
el rango el tiempo esperado para encontrar una solución es
cuerpo. Init se ejecuta solo una vez en account_creation y se
proporcional a la dificultad.4
descarta permanentemente después de eso.
Esta es la base de la seguridad de la
blockchain y es la razón fundamental por la que un nodo malicioso
3.8.9. Entorno de ejecución
no puede propagar bloques recién creados que

El entorno de tiempo de ejecución de Ethereum es el entorno de lo contrario, sobrescribiría ("reescribiría") el historial. Porque
el nonce debe satisfacer este requisito, y debido a que
bajo el cual los Objetos Autónomos se ejecutan en el
su satisfacción depende del contenido del bloque
EVM: la EVM se ejecuta como parte de este entorno.
y a su vez sus transacciones compuestas, creando nuevas,
válidos, los bloques son difíciles y, con el tiempo, requieren
3.8.10. función endiana grande
aproximadamente el poder de cómputo total de la porción confiable

Esta función expande un valor entero positivo a una matriz de bytes de los pares mineros. Así podemos definir

big endian de longitud mínima. Cuando va acompañado de un la función de validez del encabezado del bloque.

operador ·, indica concatenación de secuencias.


La función big_endian acompaña a RLP serializa Gasused Un valor igual al gas total utilizado en trans
ción y deserialización. acciones en este bloque.

9
Machine Translated by Google
3. Procesamiento y Cómputo Papel beige – v0.8.5 2019-08-15

3.9.2. Estado de la máquina – indicación falsa en la ejecución del cálculo, no se


señalaron excepciones. Si este valor permanece falso
El estado de la máquina es una tupla que consta de cinco elementos.
durante la ejecución
mentos:
hasta que el conjunto de transacciones se convierte en una serie

1. gas_disponible (en lugar de un conjunto vacío). Esto significa que


la máquina ha llegado a una parada controlada.
2. programa_contador
256
3. memory_contents Una serie de ceros de tamaño 2

4. memoria_palabras.contar Subestado Un estado temporal más pequeño que se genera


durante la ejecución de la transacción y se ejecuta en paralelo al
5. stack_contents
estado de la máquina. Contiene tres conjuntos de datos:

También está, [to_execute]: la operación actual


• Las cuentas etiquetadas para la finalización de la transacción
para ser ejecutado
siguientes la de autodestrucción.

self_destruct (cuentas)
3.9.3. Detención excepcional
• Logs_series, que crea puntos de control en la ejecución del
Una detención excepcional puede ser causada por cuatro condiciones código EVM para que las aplicaciones frontend los exploren,
existentes en la pila con respecto al siguiente código de operación en y se compone de thelogs_set y l ogs_bloom de tx_receipt.
línea para su ejecución:

• El saldo de reembolso.a
si

out_of_gas = verdadero
o 3.9.4. Código EVM
bad_instruction = verdadero
o El código de bytes que el EVM puede ejecutar de forma nativa. Se
utiliza para especificar explícitamente el significado de un mensaje
bad_stack_size = verdadero
o a una cuenta. Un contrato es un fragmento de Código EVM que
puede asociarse a una Cuenta o a un Ob autónomo.
bad_jumpdest = verdadero
proyecto EVM Assembly es la versión legible por humanos de EVM
luego lanza una excepción
Code.
más exec código de operación x

luego iniciar control_halt


3.10. Blocktree a cadena de bloques
Las detenciones excepcionales están reservadas para los códigos

de operación que no se ejecutan. Nunca pueden ser causados por la La cadena de bloques canónica es un camino desde la raíz hasta
ejecución real de un código de operación. la hoja a través de todo el árbol de bloques. Para tener un consenso
sobre qué camino es, identificamos conceptualmente el camino que
• La cantidad de gas restante en cada transacción se extrae
ha tenido la mayor cantidad de cálculos, o el camino más pesado.
de la información contenida en el
Claramente, un factor que ayuda a determinar el camino más
estado_maquina
pesado es el número de bloque de la hoja, equivalente al número
• Un bucle iterativo recursivo simple4 con un valor booleano de bloques, sin contar el bloque de génesis no minado, en el
valor:
camino. Cuanto más largo sea el camino, mayor será el esfuerzo
– verdadero que indica que en la ejecución del cálculo, se minero total que se debe haber realizado para llegar a la hoja. Esto
señaló una excepción es
aLa operación de almacenamiento aumenta la cantidad reembolsada al restablecer el almacenamiento del contrato a cero desde algún estado distinto de cero.

10
Machine Translated by Google
3. Procesamiento y Cómputo Papel beige – v0.8.5 2019-08-15

similar a los esquemas existentes, como el empleado en los o un ommer con la misma dirección de beneficiario que el presente
protocolos derivados de Bitcoin. Dado que un encabezado de bloque, las adiciones se aplican de forma acumulativa. La
bloque incluye la dificultad, el encabezado por sí solo es suficiente recompensa del bloque es de tres ether por bloque.
para validar el cálculo realizado. Cualquier bloque contribuye al
cómputo total oa la dificultad total de una cadena.
Así, definimos la dificultad total de this_block recursivamente Validación de estado y nonce La función que mapea un bloque
por la dificultad de su bloque principal y el bloque mismo. Los B a su estado de iniciación, es decir, el hash del
trabajos de los mineros y validadores son los siguientes: Validar nodo raíz de un trie de estado x. Este valor se almacena en
(o, si se trata de minería, determinar) ommers; validar (o, si se la base de datos estatal es trivial y eficiente ya que el trie es
trata de minería, determinar) transacciones; aplicar por naturaleza una estructura de datos resistente. Y, por último,
recompensas; verificar (o, si se trata de minería, calcular un defina block_transition_function, que asigna un bloque completo
estado válido) y nonce. a un bloque completo con un conjunto de datos específico. Como
se especifica al comienzo del presente trabajo, la
función_de_transición_de_estado, que se define en términos de
3.11. Validación Ommer
la función_de_finalización_de_bloque y la

La validación de encabezados ommer no significa nada más que función_de_evaluación_de_transacción . Como se detalló

verificar que cada encabezado ommer sea un encabezado válido anteriormente, existe el enésimo código de estado correspondiente,

y satisfaga la relación de om mer de enésima generación con el registros y gas acumulado utilizado después de cada transacción,

bloque actual. El máximo de encabezados ommer es dos. el cuarto componente en la tupla, ya se ha definido en términos de
los registros).

El estado n se da de aplicar la transacción correspondiente al


3.12. Validación de transacciones
estado resultante de la transacción anterior (o el estado inicial del
bloque en el caso de la primera VERSIÓN BIZANTIUM 3475aa8 –
El gas utilizado dado debe corresponder fielmente a las
26-01-2018 14
transacciones enumeradas, el gas total utilizado en el bloque debe
tal transacción): de lo contrario, en ciertos casos, existe un enfoque
ser igual al gas utilizado acumulado de acuerdo con la transacción
similar que define cada artículo como el gas utilizado en la
final.
evaluación de la transacción correspondiente sumado con el
artículo anterior (o cero, si es el primero), dándonos un total
acumulado: la función se utiliza que se definió en la función de
3.13. Solicitud de recompensa
ejecución de transacciones. Finalmente
La aplicación de premios a un bloque implica aumentar el saldo existe un nuevo estado en el contexto de la recompensa del bloque

de las cuentas del domicilio beneficiario del bloque y de cada bono función aplicada al estado resultante de la transacción final , por
en una cantidad determinada. Subimos la cuenta del beneficiario lo tanto, se define el mecanismo de transición de bloque completo,
del bloque; por cada ommer, elevamos al beneficiario del bloque menos PoW, la función de prueba de trabajo.
en 1 y 32 adicionales de la recompensa del bloque y el beneficiario
del ommer es recompensado dependiendo del número de bloque.
3.14. Prueba de trabajo de minería
Esto constituye la función_transición_estado_finalización_bloque.
Si hay colisiones de direcciones de beneficiarios entre ommers y el La prueba de que se ha realizado una cierta cantidad de minería
bloque de dos ommers con la misma dirección de beneficiario existe como una declaración de probabilidad criptográfica que
afirma más allá de toda duda razonable que se ha gastado una
cantidad particular de cómputo en el

11
Machine Translated by Google
3. Procesamiento y Cómputo Papel beige – v0.8.5 2019-08-15

determinación de algún valor de token pow_token. Se utiliza para que se puede calcular para cada bloque escaneando los encabezados
hacer cumplir la seguridad de la cadena de bloques. Dado que los de los bloques hasta ese punto. A partir de la semilla, se puede
bloques extraídos producen una recompensa, la prueba de trabajo también
calcular una memoria caché pseudoaleatoria, es decir, bytes
sirve como un mecanismo de distribución de la riqueza. Para esto cache_init en tamaño inicial. Los clientes ligeros almacenan el caché.
razón, la función de prueba de trabajo está diseñada para ser lo más A partir de la memoria caché, se genera un conjunto de datos, bytes
accesible posible para tantas personas como sea posible. dataset_size en tamaño inicial, con la propiedad de que cada
elemento del conjunto de datos depende solo de una pequeña

Una aplicación muy básica de este principio de accesibilidad cantidad de elementos de la memoria caché. Clientes completos y min.

se encuentra en la combinación de la función tradicional de prueba Los usuarios almacenan el conjunto de datos. El conjunto de datos

de trabajo con una función de dureza de memoria. Al obligar al crece linealmente con el tiempo. La minería implica tomar porciones

algoritmo hash a usar la memoria además de la CPU, es más aleatorias del conjunto de datos y mezclarlas. La verificación se

probable que los mineros usen computadoras que ASIC, lo que puede realizar con poca memoria utilizando la memoria caché para

significa que la eficiencia de ASIC no dejará obsoleta a la persona regenerar las partes específicas del conjunto de datos que necesita,

que quiere minar en la computadora de su hogar para que no participe por lo que solo necesita almacenar la memoria caché. El gran

en el proceso de minería. Para hacer que el Ethereum Blockchain conjunto de datos se actualiza una vez cada 1 época (10 000)

ASIC sea resistente, el mecanismo de prueba de trabajo ha sido bloques, por lo que la gran mayoría del esfuerzo de un minero se

diseñado para ser secuencial y difícil de memorizar. Esto significa dedica a leer el conjunto de datos, en lugar de realizar cambios en él.

que el nonce requiere grandes cantidades de memoria y ancho de


banda, de modo que la memoria no se puede usar en paralelo para
3.14.2. Mecanismo de dificultad
descubrir múltiples nonces simultáneamente. Ahí

Este mecanismo impone una previsibilidad relativa en términos de la


Por lo tanto, la función de prueba de trabajo toma la forma del 256
ventana de tiempo entre bloques; un período más pequeño entre los
encabezado del bloque nuevo pero sin el nonce y la mezcla.
dos últimos bloques da como resultado un aumento en el nivel de
componentes de hash. Está header_nonce y data_set que son
dificultad y, por lo tanto, se requiere un cálculo adicional, alargando
necesarios para calcular el hash de mezcla y block_difficulty, el
la siguiente ventana de tiempo.
valor de dificultad del nuevo bloque. La función de prueba de trabajo Por el contrario, si la ventana de tiempo es demasiado grande, la
se evalúa como una matriz en la que el primer elemento es el hash
dificultad se reduce, reduciendo la cantidad de tiempo hasta el
mixto y el segundo elemento es un número pseudoaleatorio que
siguiente bloque. La dificultad total es el estado de dificultad de
depende criptográficamente del header_nonce y del data_set. El
toda la cadena de bloques de Ethereum.
nombre de este algoritmo es Ethash.
Block_difficulty , por el contrario, no es un estado de la cadena de
bloques, sino que es local, particular para cada bloque específico.
Llegas a la dificultad total sumando la dificultad individual de todos

3.14.1. Ethash: SemillaÿCachéÿConjunto de datosÿRebanada los bloques anteriores y luego sumando la dificultad del bloque actual.

Ethash es el algoritmo de prueba de trabajo que se utilizó para lanzar El Protocolo GHOST proporciona una solución alternativa a
la red Ethereum y llevarla a cabo en sus primeros lanzamientos. Está los ataques de doble gasto de la solución original en el Informe
en proceso de ser eliminado gradualmente y reemplazado por un técnico de Bitcoin de Satoshi Nakamoto. Nakamoto resolvió el
modelo de prueba de participación. problema del doble gasto al exigir que la red se pusiera de acuerdo
Por ahora es la última versión de Dagger-Hashimoto, presentada por en un solo bloque para poder funcionar.
Vitalik Buterin. La ruta general que toma el algoritmo es la siguiente: Por esa razón, en el protocolo Bitcoin, es imposible enviar un bloque
Existe una semilla de "doble gasto" sin tener al menos

aConocido alternativamente como total_computation

12
Machine Translated by Google
3. Procesamiento y Cómputo Papel beige – v0.8.5 2019-08-15

menos el 50% de la potencia minera de la red para forzar la datos de estado. Esto sería una variación de un esquema de

cadena más larga. Esto se debe a que la red elige automáticamente la compresión.4

cadena más larga. Así que incluso si uno quisiera

para enviar dos transacciones de gasto seguidas, la red 3.17. Escalabilidad


simplemente elige el que viene primero, ignorando el

segundo porque ya no pertenece al más largo La escalabilidad es una preocupación constante. Porque el Ethereum

cadena (que ahora contiene el primer bloque que se envió) las transiciones de estado son tan amplias en términos de contenido

por lo que el aspirante a pirata informático debe enviar un nuevo bloque, posible, y debido a que sus aplicaciones y casos de uso son

ya que el primer bloque doble ya no es factible. tan numerosos en el número de transacciones potenciales requeridas,

El “Protocolo GHOST” (que significa Greedy la escalabilidad es inherentemente necesaria para aumentar

subárbol de objetos más pesados) requiere que los mineros rendimiento de transacciones y para un almacenamiento más eficiente
y recorrido de la cadena.
comenzar a minar cualquiera que sea la cadena de la mayoría de los otros mineros

están en. Debido a las diferencias en la propagación de la red.

de datos sobre qué mineros están extrayendo qué bloque, esto 3.17.1. fragmentación

tiene una tendencia a crear más tíos. Sin embargo,


Paralelización de combinación y bloque de transacciones
a pesar de la mayor cantidad de bloques tío, el
edificio.
cadena en sí es igualmente segura, y este método permite

para un mayor rendimiento de transacciones que la solución de Satoshi


3.17.2. Casper
para el doble gasto.

3.17.3. Plasma

3.15. Números pseudoaleatorios

Los números pseudoaleatorios pueden generarse utilizando datos que

generalmente no se pueden conocer en ese momento.

de transacciones Esto constituye cualquier cosa basada en

de factores que no se pueden conocer en circunstancias regulares,

pero que se pueden conocer a través de la operación regular y el

crecimiento de la cadena. Tales datos

podría incluir un bloque actual (o relativamente actual)

hash, marca de tiempo o dirección del beneficiario. El código de

operación hash de bloque utiliza los 256 bloques anteriores como


números pseudoaleatorios. Uno podría automatizar aún más esta corrida

domness agregando dos operaciones blockhash y

hash el resultado.

3.16. Límites de tamaño de cadena

La base de datos estatal por lo general no almacenará todos y cada uno de los

estructura de árbol en la historia de la cadena de bloques. Una idea

se ha propuesto simplemente mantener los puntos de control de nodos

para cada edad (10,000 bloques) y eventualmente descartar los puntos

de control que ya no contienen los elementos necesarios.

13
Machine Translated by Google
A. Códigos de operación EVM5 Papel beige – v0.8.5 2019-08-15

A. Códigos de operación EVM5

A.1. 0x10's: comparaciones y operaciones lógicas bit a bit

Datos código de operación Gas Entrada Salida Descripción


0x00 DETÉNGASE 0 0 0 Detiene la ejecución.

0x01 AGREGAR 3 2 1 Operación de adición.


0x02 YO TENGO 5 2 1 Operación de multiplicación.
0x03 SUB 3 2 1 Operación de resta.
0x04 DIV 5 2 1 Operación de división de enteros.
0x05 SDIV 5 2 1 Operación de división de enteros con signo
(truncada)
0x06 CONTRA 5 2 1 Operación de resto de módulo.
0x07 SMOD 5 2 1 Operación de resto de módulo con signo.
0x08 ADDMOD 8 3 1 Operación de adición de módulo.
0x09 MULMOD 8 3 1 Operación de multiplicación de módulo.
0x0a Exp 10 2 1 Operación exponencial.
0x0b EXTENSIÓN DE SIGNO 5 2 1 Extienda la longitud del entero con signo
complementario a dos.
0x10 LT 3 2 1 Menos que comparación.
0x11 GT 3 2 1 Mayor que la comparación.
0x12 SLT 3 2 1 Comparación menor que firmada.
0x13 sargento 3 2 1 Comparación con signo mayor que.
0x14 ecualizador 3 2 1 Comparación de igualdad.
0x15 ISZERO 3 1 1 No operador simple.
0x16 Y 3 2 1 Bit a bit y funcionamiento.
0x17 O 3 2 1 Bit a bit u operación.
0x18 LIBRE 3 2 1 Operación xor bit a bit.
0x19 NO 3 1 1 Bit a bit no funciona.
0x1a BYTE 3 2 1 Recuperar un solo byte de la palabra.

A.2. 0x20: SHA3

Datos código de operación Gas Entrada Salida Descripción


0x20 SHA3 30 2 1 Calcule un hash Keccak-256.

A.3. 0x30's: Información Ambiental

Datos código de operación Gas Entrada Salida Descripción


0x30 DIRECCIÓN 2 0 1 Obtenga la dirección de la cuenta actualmente
en ejecución.

14
Machine Translated by Google
A. Códigos de operación EVM5 Papel beige – v0.8.5 2019-08-15

0x31 BALANCE 400 1 1 Obtener el saldo de la cuenta dada.


0x32 ORIGEN 2 0 1 Obtener la dirección de origen de la ejecución. Este

es siempre el remitente original de una transacción,


nunca una cuenta de contrato.
0x33 LLAMADOR 2 0 1 Obtener la dirección de la persona que llama. Esta es la dirección

de la cuenta que es directamente responsable de


esta ejecución.

0x34 VALOR DE LA LLAMADA 2 0 1 Obtener el valor depositado por la instrucción/-

transacción responsable de esta ejecución


ción

0x35 CARGA DE DATOS DE LLAMADA 3 1 1 Obtener datos de entrada del entorno actual
mento

0x36 TAMAÑO DE DATOS DE LLAMADA 2 0 1 Obtenga el tamaño de los datos de entrada en el

entorno actual. Esto se refiere a la opción

campo de datos que se puede pasar con un

instrucción de llamada de mensaje o transacción.


0x37 LLAMADA DATOS COPIA 3 3 0 Copie los datos de entrada en el entorno actual a

la memoria. Esto se refiere al campo de datos

opcional pasado con la instrucción o transacción de

llamada de mensaje.
0x38 CÓDIGO TAMAÑO 2 0 1 Obtenga el tamaño del código que se ejecuta en el actual
ambiente.

0x39 CODECOPIA 3 3 0 Copie el código que se ejecuta en el actual

entorno a la memoria.
0x3a PRECIO DEL GASOLINA 2 0 1 Obtenga el precio del gas en el entorno actual. Este

es el precio del gas especificado

por la transacción de origen.


0x3b EXTCODESIZE 700 1 1 Obtener el tamaño del código de una cuenta.
0x3c EXTCODECOPIA 700 4 0 Copie el código de una cuenta en la memoria.
0x3d DATOS DEVUELTOS 2 0 1

TALLA

0x3e DATOS DEVUELTOS 3 3 0

COPIAR

A.4. 0x40: Bloquear datos

Datos código de operación Gas Entrada Salida Descripción


0x40 BLOQUEHASH 20 11 Consigue el hachís de uno de los 256 más re
bloques de centavos a

0x41 BASE DE MONEDAS 2 0 1 Buscar la dirección del beneficiario de un bloque

por su hachís.
aSe deja un valor de 0 en la pila si el número de bloque está más de 256 detrás del actual, o si es un número mayor que el actual.

15
Machine Translated by Google
A. Códigos de operación EVM5 Papel beige – v0.8.5 2019-08-15

0x42 MARCA DE TIEMPO 2 0 1 Busque la marca de tiempo de un bloque por su


picadillo.

0x43 NÚMERO 2 0 1 Busque el número de un bloque por su hash.


0x44 DIFICULTAD 2 0 1 Busque la dificultad de un bloque por su hash.
0x45 GASLAM 2 0 1 Busque el límite de gas de un bloque por su hash.

A.5. 0x50's: operaciones de pila, memoria, almacenamiento y flujo.

Datos código de operación


Gas Entrada Salida Descripción
0x50 ESTALLIDO 2 1 0 Elimina un elemento de la pila.

0x51 MCARGAR 3 1 1 Cargue una palabra de la memoria.


0x52 TIENDA M 3 2 0 Guarde una palabra en la memoria.
0x53 MSTORE8 3 2 0 Guarde un byte en la memoria.
0x54 CARGA 200 1 1 Cargue una palabra del almacenamiento.

0x55 TIENDA 5.000 – 20.000 8 2 0 Guarde una palabra en el almacenamiento.

0x56 SALTO 1 0 Modificar el contador de programa.


0x57 SALTO 10 2 0 Modificar condicionalmente el contador del programa.
0x58 ordenador personal 2 0 1 Consultar el valor del programa.

contador antes del incremento resultante


de esta instrucción.

0x59 AYÚDALO 2 0 1 Obtenga el tamaño de la memoria activa en bytes.


0x5a GAS 2 0 1 Obtener la cantidad de gas disponible, incluyendo

la reducción correspondiente por el


costo de esta instrucción.
1 a
SALTO 0x5b 0 0 Marca un destino válido para los saltos.

A.6. 0x60-70's: Operaciones Push

Datos código de operación Gas Entrada Salida Descripción


0x60 EMPUJAR1 - 01 Coloque un elemento de 1 byte en la pila.
0x61 PUSH2 - 0 1 Coloque un elemento de 2 bytes en la pila.
0x62 PUSH3 - 0 1 Coloque un elemento de 3 bytes en la pila.
0x63 PUSH4 - 0 1 Coloque un elemento de 4 bytes en la pila.
0x64 PUSH5 - 0 1 Coloque un elemento de 5 bytes en la pila.
0x65 PUSH6 - 0 1 Coloque un elemento de 6 bytes en la pila.
0x66 PUSH7 - 0 1 Coloque un elemento de 7 bytes en la pila.
0x67 PUSH8 - 0 1 Coloque un elemento de 8 bytes en la pila.
0x68 PUSH9 - 0 1 Coloque un elemento de 9 bytes en la pila.
0x69 PUSH10 - 0 1 Coloque un elemento de 10 bytes en la pila.
0x6a PUSH11 - 0 1 Coloque un elemento de 11 bytes en la pila.

aEsta operación no tiene efecto en machine_state durante la ejecución.

dieciséis
Machine Translated by Google
A. Códigos de operación EVM5 Papel beige – v0.8.5 2019-08-15

0x6b EMPUJAR12 - 0 1 Coloque un elemento de 12 bytes en la pila.


0x6c EMPUJAR13 - 0 1 Coloque un elemento de 13 bytes en la pila.
0x6d PUSH14 - 0 1 Coloque un elemento de 14 bytes en la pila.
0x6e PUSH15 - 0 1 Coloque un elemento de 15 bytes en la pila.
0x6f PUSH16 - 0 1 Coloque un elemento de 16 bytes en la pila.
0x70 PUSH17 - 0 1 Coloque un elemento de 17 bytes en la pila.
0x71 PUSH18 - 0 1 Coloque un elemento de 18 bytes en la pila.
0x72 PUSH19 - 0 1 Coloque un elemento de 19 bytes en la pila.
0x73 PUSH20 - 0 1 Coloque un elemento de 20 bytes en la pila.
0x74 PUSH21 - 0 1 Coloque un elemento de 21 bytes en la pila.
0x75 PUSH22 - 0 1 Coloque un elemento de 22 bytes en la pila.
0x76 PUSH23 - 0 1 Coloque un elemento de 23 bytes en la pila.
0x77 PUSH24 - 0 1 Coloque un elemento de 24 bytes en la pila.
0x78 PUSH25 - 0 1 Coloque un elemento de 25 bytes en la pila.
0x79 PUSH26 - 0 1 Coloque un elemento de 26 bytes en la pila.
0x7a PUSH27 - 0 1 Coloque un elemento de 27 bytes en la pila.
0x7b PUSH28 - 0 1 Coloque un elemento de 28 bytes en la pila.
0x7c EMPUJAR29 - 0 1 Coloque un elemento de 29 bytes en la pila.
0x7d PUSH30 - 0 1 Coloque un elemento de 30 bytes en la pila.
0x7e PUSH31 - 0 1 Coloque un elemento de 31 bytes en la pila.
0x7f PUSH32 - 0 1 Coloque un elemento de 32 bytes en la pila.

A.7. 0x80's: operaciones de duplicación

Datos código de operación Gas Entrada Salida Descripción


0x80 DUP1 - 1 2 Duplica el primer elemento de la pila.
0x81 DUP2 - 2 3 Duplica el segundo elemento de la pila.
0x82 DUP3 - 3 4 Duplica el tercer elemento de la pila.
0x83 DUP4 - 4 5 Duplica el cuarto elemento de la pila.
0x84 DUP5 - 5 6 Duplica el quinto elemento de la pila.
0x85 DUP6 - 6 7 Duplica el sexto elemento de la pila.
0x86 DUP7 - 7 8 Duplica el 7º elemento de la pila.
0x87 DUP8 - 8 9 Duplica el octavo elemento de la pila.
0x88 DUP9 - 9 10 Duplica el noveno elemento de la pila.
0x89 DUP10 - 10 11 Duplica el décimo elemento de la pila.
0x8a DUP11 - 11 12 Duplica el undécimo elemento de la pila.
0x8b DUP12 - 12 13 Duplica el elemento número 12 de la pila.
0x8c DUP13 - 13 14 Duplica el elemento número 13 de la pila.
0x8d DUP14 - 14 15 Duplica el elemento 14 en la pila.
0x8e DUP15 - 15 Duplica el elemento número 15 de la pila.
dieciséis

0x8f DUP16 - 17
dieciséis
Duplica el elemento número 16 de la pila.

17
Machine Translated by Google
A. Códigos de operación EVM5 Papel beige – v0.8.5 2019-08-15

A.8. 0x90's: Operaciones de intercambio

Datos código de operación Gas Entrada Salida Descripción


0x90 - 2 2
INTERCAMBIAR1 Intercambia los artículos de la pila 1 y 2.
0x91 SWAP2 - 3 3 Intercambia los elementos de la pila 1 y 3.
0x92 SWAP3 - 4 4 Intercambia los elementos de la pila 1 y 4.
0x93 SWAP4 - 5 5 Intercambia los elementos de la pila 1 y 5.
0x94 SWAP5 - 6 6 Intercambia los elementos de la pila 1 y 6.
0x95 SWAP6 - 7 7 Intercambia los elementos de la pila 1 y 7.
0x96 SWAP7 - 8 8 Intercambia los elementos de la pila 1 y 8.
0x97 SWAP8 - 9 9 Intercambia los elementos de la pila 1 y 9.
0x98 SWAP9 - 10 10 Intercambia los elementos de la pila 1 y 10.
0x99 SWAP10 - 11 11 Intercambia los elementos de la pila 1 y 11.
0x9a SWAP11 - 12 12 Intercambia los elementos de la pila 1 y 12.
0x9b SWAP12 - 13 13 Intercambia los elementos de la pila 1 y 13.
0x9c SWAP13 - 14 14 Intercambia los elementos de la pila 1 y 14.
0x9d SWAP14 - 15 15 Intercambia los elementos de la pila 1 y 15.
0x9e SWAP15 - dieciséis
Intercambia los elementos de la pila 1 y 16.
dieciséis

0x9f SWAP16 - 17 17 Intercambia los elementos de la pila 1 y 17.

A.9. 0xa0's: operaciones de registro

Datos código de operación Gas Entrada Salida Descripción


0x0 LOG0 375 0 2 Agregar registro de registro con 0 temas.
0xa1 REGISTRO1 750 3 0 Agregar registro de registro con 1 tema.
0xa2 LOG2 1125 4 0 Agregar registro de registro con 2 temas.
0xa3 LOG3 1500 5 0 Agregar registro de registro con 3 temas.
0xa4 LOG4 1875 6 0 Agregar registro de registro con 4 temas.

A.10. 0xf0: operaciones del sistema

Datos código de operación Gas Entrada Salida Descripción


0xf0 CREAR 32000 3 1 Crear una nueva cuenta de contrato.

El orden de los operandos es: valor, compensación de entrada,

tamaño de entrada

0xf1 LLAMAR 700 7 1 Mensaje-llamada a una cuenta. los


el orden de los operandos es: gas, hasta, valor, compensación de entrada,

tamaño de entrada, compensación de salida, tamaño de salida.

18
Machine Translated by Google
A. Códigos de operación EVM5 Papel beige – v0.8.5 2019-08-15

0xf2 CÓDIGO DE LLAMADA 700 7 1 Llamada de mensaje a esta cuenta con un


código de cuenta alternativo. Exactamente
equivalente a CALL, excepto que el destinatario
es la misma cuenta que en la actualidad,
pero el código se sobrescribe.
0xf3 DEVOLVER 0 2 0 Detener la ejecución, luego devolver los datos de salida.

Esto define la salida en el momento


del alto.
0xf4 DELEGATECALL 700 6 1 Llamada de mensaje a esta cuenta con un
código de cuenta alternativo, pero con valores
persistentes para el remitente y el valor.
DELEGATECALL toma un argumento menos que
CALL. Esto significa que el

el destinatario es de hecho la misma cuenta que


en la actualidad, pero que el código está
sobrescrito diez y el contexto es casi en su totalidad
idéntico.
0xfa LLAMADA ESTÁTICA 40 6 1 -

0xfd REVERTIR 0 2 0 -

0xfe INVÁLIDO - 1 0 Instrucción no válida designada.


0xff AUTODESTRUCCIÓN 5000 1 0 Detener la ejecución y registrar la cuenta
para su posterior eliminación.

19
Machine Translated by Google
A. Referencias Papel beige – v0.8.5 2019-08-15

Referencias
[1] W. contribuyentes, Árbol (estructura de datos) — wikipedia,
la enciclopedia libre, [En línea; accedido
15-diciembre-2017], 2017. [En línea]. Disponible:
https://es. wikipedia org/w/index. php?
título = Árbol _ (datos _ estructura ) %5C & idantiguo =

813972413 (citado en pág. 2).

[2] E. Foundation, Pyrlp tutorial, 2015. [En línea]. Aprovechar


capaz: https://github.com/jnnk/pyrlp/blob/
maestro/docs/tutorial.rst (citado en pág. 3).

[3] ——, documento técnico de Ethereum, https: // github.


com/ethereum/wiki/wiki/Libro blanco, 2017
(citado en pág. 3).

[4] DG Wood, Ethereum: Un seguro descentralizado


libro de transacciones generalizado, https://github.
com/etereum/papel amarillo, 2017 (citado en págs. 3,
4, 6–10, 13).

[5] V. Buterin, fuente Pyethereum, https://www.


github.com/ethereum/pyethereum/ethereum/
códigos de operación.py, 2017 (citado en págs. 14–19).

20
Machine Translated by Google
Glosario Papel beige – v0.8.5 2019-08-15

Gas La unidad fundamental de costo de la red; se paga gasolina


exclusivamente por éter. 21

Datos del mensaje (como un conjunto de bytes) y Valor (especificado


Glosario en Wei) que se pasa entre dos cuentas. 21

estado de cuenta El estado de una cuenta en particular, una sección serialización La serialización es el proceso de convertir un objeto en

del estado mundial total. Comprende: el nonce, el saldo, la un flujo de bytes para almacenar el objeto o transmitirlo a la

raíz de almacenamiento y el hash de código de la cuenta. 21 memoria, una base de datos o un archivo. Su objetivo principal
es guardar el estado de la máquina de un objeto para poder

direcciones 20 cadenas de caracteres, específicamente la derecha recrearlo cuando sea necesario. 21

la mayoría de los 20 caracteres del hash Keccak-256 de

el mapeo derivado de RLP que contiene el máquina de estado El término Máquina de Estado está reservado

la dirección del remitente y el nonce del bloque. 21 para cualquier proceso simple o complejo que se mueva de
manera determinista de un estado discreto al siguiente. 21
beneficiario La dirección de 20 caracteres (160 bits) para
que todas las tarifas recaudadas del min exitoso
base de datos de estado Una base de datos almacenada fuera de la
ing de un bloque se transfieren. 21
cadena, [es decir, en la computadora de algún usuario que
encabezado del bloque Toda la información en un bloque además ejecuta un cliente Ethereum] que contiene un árbol radix que
información de la transacción. 21 mapea rayos de bytes (porciones organizadas de datos
binarios) a otros rayos de bytes. Las relaciones entre cada nodo.
Contrato Una pieza de Código EVM que puede asociarse con una en este trie constituye un mapeo de Ethereum
Cuenta o un Objeto Autónomo.
estado. 1, 4, 13, 21
21
raíz de almacenamiento Un aspecto del estado de una cuenta: este
Funciones hash criptográficas Las funciones hash hacen posibles es el hash de la triea el que decide el almacenamiento
las cadenas de bloques seguras al establecer entradas contenido de la cuenta. 21
universales para las que hay una salida posible limitada,
Estado de almacenamiento La información particular de una cuenta
generalmente solo una, pero esa salida es única. 21
dada que se mantiene entre los momentos en que
se ejecuta el código EVM asociado a la cuenta. 21

Entorno de tiempo de ejecución de Ethereum El entorno


transacción Un dato, firmado por un actor externo. Representa un
que se proporciona a un Objeto Autónomo ejecutándose en la
Mensaje o un nuevo Objeto Autónomo. Las transacciones se
EVM. Incluye el EVM pero también la estructura del estado
registran en cada bloque de la cadena de bloques. 21
mundial en el que el re

mentiras para ciertas instrucciones de E/S, incluidas CALL &


CREATE. 21

Ensamblaje de EVM La versión legible por humanos de EVM Acrónimos


código. 21
Entorno de tiempo de ejecución de ERE Ethereum. 21
Código EVM El código de bytes que EVM puede ejecutar de forma
Máquina virtual EVM Ethereum. 21
nativa. Se utiliza para especificar formalmente el significado y
las ramificaciones de un mensaje a una cuenta. 21
Prefijo de longitud recursiva RLP . 21

aUna ruta particular desde la raíz hasta la hoja en la base de datos estatal

21
Machine Translated by Google
A. Índice Papel beige – v0.8.5 2019-08-15

Índice

160 bits, 5 encabezado de bloque, 3,

256 bits, 4, 5 50 7 función de validez de encabezado de bloque,

% de ataque, 13 9 número de bloque, 4, 11 recompensa de

bloque, 5, 11 función de recompensa de bloque,


máquina de estado abstracta, 1
11 recompensas de bloque, 3
cuenta, 9

dirección de cuenta, 7
BLOCKHASH, 13 cuerpo,
direcciones de cuenta, 2 saldo
9 nodo de rama, matriz
de cuenta, 4 cuerpo de cuenta,
de 2 bytes, 5 bizancio, 4
4 hash de código de cuenta, 4

creación de cuenta, 4, 9 inicio

de cuenta, 4 nonce de cuenta,

4 estado de cuenta, 4 estados caché, 12

de cuenta, 2 raíz de blockchain canónica, 11 gas

almacenamiento de cuenta, 4 canónico, 9 casper, 13 certeza, 1

subestado acumulado, 8 gas nodos de punto de control, 13

acumulado usado, 11 edad, 13 puntos de control, 10 nodo

nodo ancestral, 2 secundario, 2

matriz de código,

aplicar recompensas, 5, 11 7 colisiones, 11

determinado arbitrariamente, 9 bloque completo, 11

matriz de bytes de longitud arbitraria, 9 cómputo, 9 cómputo de

resistente a los ásicos, 12 objetos operación, 6 cómputo de nonce válido,

autónomos, 9 gas disponible, 9 11 cómputo de estado válido, 11

creación de contrato, 4, 9 pila de

creación de contrato, 9 transacciones


saldo, 1
de creación de contrato, 9 parada
beneficiario, 3 controlada, 10 DAG correcto, 9 dificultad
dirección del beneficiario, 11 big acumulada, 12 gas acumulado, 11
endian, 3 función big endian, 9

bitcóin, 1

Informe técnico de Bitcoin,

bloque 13 , beneficiario de DAG, 9

bloque 9 , composición de estructura de datos, 2

bloque 5 , contenido de bloque conjunto de datos, 12

3 , dificultad de bloque 9 , segmento de conjunto

función de transición de estado de datos, 13 nodo

de finalización de bloque 12 , 11 descendiente, 2 deserialización, 5, 9

22
Machine Translated by Google
Índice Papel beige – v0.8.5 2019-08-15

determinista, 1 gasolina deducida, 6

dificultad, 3, 9 gasto de gasolina por bloque, 9 límite de

bomba de dificultad, 4 gasolina, 3, 5, 6 gasolina pagada por un

mecanismo de dificultad, 12 mayor uso de la memoria, 6 precio de la gasolina, 5, 6, 9

descartar nodos, 13 problema espacio de compensación de reembolso de gasolina, 6

de doble gasto, 13 homeostasis gasolina utilizada, 3, 6, 9, 11 bloque de génesis, 11

de dificultad dinámica, 4 dificultad de génesis, 4

EIP 100, 4

EIP 2, 4
protocolo GHOST, 13 base
EIP 649, 4
de datos de estado global, 3
cálculo de curva , 5

elíptica de curva elíptica, 5 criptografía función de detención,

de curva elíptica, 5 matriz de bytes 8 estado de detención,

vacía, 3 secuencia de bytes vacía, 9 8 esquema hash, 5 ruta

conjunto vacío, 10 ere, 9 ethash, 12 más pesada, 11 granja,

ether, 1 entorno de tiempo de 4 parámetro de

ejecución ethereum, 9 dificultad de granja, 4

edad de

hielo, 4 bloque incompleto,


11 init, 8, 9 datos de
EVM, 5
entrada, 7 inspección de
Montaje EVM, 10
datos, 3 tiempo de
código EVM, 10
ejecución instantáneo, 7
instancias de cómputo evm, 7 parada
validez intrínseca, 6
excepcional, 6, 8 ejecutado, 1
instrucción no válida, 6

progresión iterativa, 8 función


ejecución, 6
de iterador, 8
entorno de ejecución, 7

función de ejecución, 8 kecak 256, 3, 5


modelo de ejecución, 8

especificar explícitamente el significado, nodo hoja, 2, 4 libro

10 aumento exponencial de la dificultad, 4 mayor, 1 eventos de

datos adicionales, 3 extraer el gas restante, registro, 6 elementos

8 de registro, 6 series de

registro, 8 floración de

honorarios, 6 registros, 3, 10 series de

función de finalización, 7 registros, 10 conjunto de

Finney, 1 registros, 10 cadena más

bosque, 2 larga, 13

gasolina, 6, parada de máquina,

9 gasolina disponible, 10 6 instrucciones de máquina, 1

23
Machine Translated by Google
Índice Papel beige – v0.8.5 2019-08-15

estado de la máquina, 5, 10 encabezados ommer, 11

almacenamiento de la validación ommer, 11 hash

máquina, 5 mapeo, 2 mapeo ommer, 3 códigos de

entre estados de cuenta, 3 mapeo entre operación , 1 precio de

direcciones, 3 memoria, 5 contenido de memoria, originador, 7 sin gasolina, 6

10 modelo de memoria, 5 modelo de memoria

volatilidad de, 5 tamaño de memoria, 5 pila de

memoria, 5 memoria tarifa de uso, 6 recuento de hash principal, 3

palabras de memoria, 10 árboles merkle-patricia, nodo principal, 2

2 intentos merkle-patricia, 2 árboles merkle, 2 pago, 6 plasma, 13

llamada de mensaje, 6, 8, 9 transacciones de entero positivo, 9

llamada de mensaje, 9 elección de minero, 9 estado posterior a la

mineros, 9 transacción, 6 profundidad actual,

9 declaración de probabilidad, 12

contador de programa, 10 prueba

de trabajo, 12 pseudocódigo, 1

generación de números

pseudoaleatorios, 13

raíz de recibos, 3
minimizar el uso de
destinatario, 9
almacenamiento, 6 minería, 1
reembolsado, 9
esfuerzo de minería, 11 mezclar
reembolsos, 8 gas
hash, 3, 9, 12 merkletrees
restante, 7, 8 excepción
modificados, 2
de informe, 6 salida

moneda nativa, 1 resultante, 8 estado

ejecución nativa, 10 datos resultante, 8

binarios anidados, 3 unidad RLP, 2, 3

de costo de red, 9 valor de RLP, 9

estado nuevo, 7 sin ceros a RLP codifica como matrices de bytes, 3

la izquierda, 3 profundidad RLP enteros, 3 nodos

de nodo, 2 altura de nodo, 2 raíz , 2,

computadora de operador de
Satoshi Nakamoto, 13
nodo, 3 entero deserializado no
escalabilidad, 13 semilla, 12
vacío, 3 arquitectura no estándar , 6 una vez,
conjunto de autodestrucción,
3, 9
8 remitente, 9 cuenta del

remitente, 6 dirección del


validación nonce, 11
remitente, 7 concatenación de
número, 3
secuencias, 9 serialización, 5,

ommer, 11 9

encabezados de bloque ommer, 4

24
Machine Translated by Google
Índice Papel beige – v0.8.5 2019-08-15

fragmentación, serie de transacciones, 10 firma

13 nodo hermano, 2 de transacciones, 6 validación de

singleton, 1 transacciones, 11 transacciones,

segmento, 12 raíz de 11 transacciones, profundidad

recorrido rápido de datos, 3 basado arbitraria de 3 árboles, base de

en pila, 5, 7 arquitectura basada en datos de 3 árboles, 2 grados de

pila, 5 árboles, 2 bordes de árboles, 2

contenido de pila, 10 altura de árboles, 2 niveles de

subdesbordamiento de árboles, 2 rutas de árboles, 2 bases

pila, 6 base de datos de de datos de prueba , 2 de confianza,

estado, 4, 13 ciclo de máquina 1

de estado, 8 raíz de estado, 3

transición de estado, 5 función

de transición de estado, 8 estado

sin cambios, 6 código de estado, 11


gas universal, 9
modelo de almacenamiento, 5
imparable, 1 gas sin
subestados, 7
usar, 9 pago por

adelantado, 6
estado del sistema, 5, 7

Szabo, 1
encabezado válido,

11 estado válido, 9
etiquetado para autodestrucción, 10 sello
valor, 5, 9 verificación,
de tiempo, 9 sello de tiempo, 3 sello de
5 máquina virtual, 1,
tiempo, 1 para, 5 para ejecutar, 10
7 ROM virtual, 6
dificultad total, 12 tarifa total, 6 gas total

usado, 11 dificultad total, 11 cuentas

tocadas, 8 transacciones, 5 ejecución de


Wei, 1
transacciones, 6 función de ejecución de
wei, 4
transacciones, 11
memoria bien definida, 6

almacenamiento bien definido, 6

RLP bien formado, 6 palabra

direccionable, 5

palabra dirigida, matriz de

5 palabras, 5 tamaño de

palabra, 5 estado mundial,


transacción única, 6
2
originador de la transacción, 9

recibo de la transacción, 6, 10 papel amarillo, 1

25

También podría gustarte