Ethereum: ¿cómo se verifica el resultado de un cálculo de contrato? [cerrado]

Esto puede ser tan simple como un puntero a algún lugar en los documentos que me he perdido, pero ¿cómo/dónde se verifica el resultado del cálculo de un contrato o se asegura contra un minero malicioso con una implementación de VM corrupta intencionalmente?

Ejemplo trivial: mi contrato toma dos entradas, A y B, y devuelve su suma. Un minero de mala reputación quiere cobrar las tarifas de txn y el ethereum del gas para este contrato sin hacer el trabajo, y piratea la implementación de su VM para devolver siempre "4" a la persona que llama. Cualquiera que pruebe con "2+2" pensará que la función funciona.

Supongamos que el minero logró extraer el bloque con una solicitud de mi contrato y devolvió "4" (para no desperdiciar su propio poder de cómputo y embolsarse el costo del gas). Los hashes de bloque para la transacción aceptada y el éter transferido son todos correctos y verificables, la fuente y los códigos de operación del contrato son todos verificables y correctos. Pero, ¿cómo se verifica la corrección de la salida del cálculo?

Siento que me estoy perdiendo algo obvio. ¿Qué impide que un minero haga un cortocircuito en el trabajo solicitado (sea lo que sea), afirmando haber terminado el trabajo, mientras solo devuelve algo sintácticamente correcto, pero semánticamente dudoso o incorrecto?

Gracias.

Respuestas (1)

Otros nodos hacen el mismo cálculo, de forma determinista, y comparan su resultado con el resultado que obtuvo el minero. Es por eso que no hay una función que devuelva resultados aleatorios: diferentes nodos generarían diferentes números y la cadena se bifurcaría. Todos los demás mineros verifican tu bloque y la penalización por construir un bloque incorrecto es perder el bloque que extrajiste.

Pero hay una pregunta relacionada: ¿puede obtener una ventaja al mejorar la velocidad de la VM o al saltarse los cálculos de alguna manera?

Creo que podrías. Por ejemplo, podría descargar los cálculos a una GPU. Aunque Dagger es resistente a la GPU, las máquinas virtuales requieren una pequeña cantidad de memoria y probablemente podrían ejecutarse en una GPU.

Sin embargo, la ventaja sería bastante leve.

Está un poco desactualizado con el algoritmo de minería, se cambió varias veces y ahora supuestamente es compatible con GPU, ASIC y resistente a la piscina. Sin embargo, un grupo tiene el 40% del poder de hash de la red, por lo que la última afirmación es probablemente incorrecta.
Gracias, pensé que era algo así, pero todavía estoy confundido. Primero, más fundamentalmente, ¿se devuelven todos los resultados del cálculo en la cadena de bloques como parte de la transacción? La velocidad de retorno parece indicar que obtengo los primeros resultados del procesador, independientemente de si el bloque se invalida más adelante. Parece que no espero N confirmaciones del bloque antes de obtener mi resultado. A continuación, ¿qué pasa con un contrato al que se le pide que devuelva algún identificador del nodo que lo procesa? Ese sería un resultado diferente dependiendo de quién lo procese, y no verificable por otros. ¿O marca de tiempo de milisegundos?