Permítanme comenzar diciendo que soy un novato, pero esta es mi comprensión aproximada de cómo funciona la cadena de bloques de Bitcoin. (Esto se basa en gran medida en publicaciones de blog como esta ). Si la persona A quiere transferir una cierta cantidad de Bitcoin a la persona B, firma un mensaje que autoriza la transferencia utilizando su clave privada. Un menor puede examinar el mensaje y, mediante un programa que realiza cierta operación matemática, puede verificar que la persona A realmente firmó el mensaje. Pero está la cuestión de cómo sabemos que el minero realmente hizo el trabajo computacional necesario para verificar la firma. Esto se resuelve mediante algo llamado protocolo de "prueba de trabajo", mediante el cual el minero puede demostrar que realizó el cálculo de verificación.
Me acordé de todo esto cuando escuché sobre la noción de "contratos estatales externos", un tipo de contrato inteligente que se describe brevemente en el minuto 35 de este video y con más detalle en este artículo de la wiki de Bitcoin.. En un contrato estatal externo, ciertas disputas sobre características objetivas del mundo pueden resolverse automáticamente, en lugar de confiar en un árbitro humano externo para que decida de manera justa. Por ejemplo, el contrato podría especificar que en el caso de una disputa sobre una apuesta deportiva, se ejecutaría automáticamente un programa de computadora (con el código fuente especificado en el contrato) que consulta una base de datos deportiva, determina quién ganó la apuesta y el bitcoin es transferido automáticamente en consecuencia. Pero el artículo de la wiki de Bitcoin describe un problema con esto: ¿cómo se determina que el programa de computadora que se supone que debe resolver la disputa realmente se ejecutó y, de ser así, si la computadora que lo ejecutó informa de manera justa el resultado del programa? El artículo sugiere usar una o más "Computadoras confiables" conocidas como oráculos,
Pero se me ocurre que el problema con los contratos estatales externos es análogo al problema que describí anteriormente que se resuelve con la cadena de bloques. Entonces, ¿por qué no puedes resolverlo de la misma manera en este caso? Es decir, así como los protocolos de prueba de trabajo se pueden usar para demostrar que un minero ejecutó el código que determina si una firma es auténtica, ¿por qué no puede hacer que los mineros ejecuten un código de resolución de disputas para contratos estatales externos y luego determinar si realmente ejecutaron el código usando protocolos de prueba de trabajo? Eso eliminaría la necesidad de una computadora confiable.
¿Hay alguna diferencia significativa entre los dos casos que haría esto impracticable? ¿Esto ya se ha hecho?
Cualquier ayuda sería muy apreciada.
Gracias de antemano.
... ¿cómo se determina que el programa de computadora que se supone que debe resolver la disputa realmente se ha ejecutado y, de ser así, si la computadora que lo ejecutó informa correctamente el resultado del programa? ...
Pero se me ocurre que el problema con los contratos estatales externos es análogo al problema que describí anteriormente que se resuelve con la cadena de bloques. Entonces, ¿por qué no puedes resolverlo de la misma manera en este caso?
Si lo entiendo correctamente, la pregunta que está haciendo es: ¿Por qué no puede extender el sistema de confianza/coordinación de blockchain para manejar el problema de resolver disputas sobre la validez de la salida de un cálculo (o la validez de una observación, como "quién ganado este juego?"). Después de todo, si la cadena de bloques hace que todos estén de acuerdo en un registro de transacciones, ¿por qué no en reclamos arbitrarios sobre el mundo?
La respuesta, en resumen, es que la cadena de bloques restringe las "afirmaciones" que "prueba" a las que, por construcción, puede proporcionar evidencia (fuerte). Y esas afirmaciones se basan en propiedades criptográficas especiales que (hasta donde sabemos) no se generalizan a afirmaciones arbitrarias sobre el mundo.
Más concretamente, lo que afirma la cadena de bloques (y la coordinación de la red) es algo así como "Estas transacciones ocurrieron en este orden". Y lo prueba diciendo: "La transacción T30 debe haber sido vista por alguien que ya había visto las transacciones T29, T28... y gastó 9000 unidades de trabajo (digamos, cálculos de SHA-256) en ella". Lo que a su vez se demuestra por cómo SHA-256 tiene una dificultad de cálculo conocida, y la prueba de trabajo para la Transacción T30 se generó únicamente a partir de las transacciones anteriores.
Ese es un problema muy diferente a probar que cierta (familia de) computación(es) tiene un cierto resultado. Para ese problema (como menciona Nate Eldredge), querrá usar pruebas de conocimiento cero, un área activa de investigación. Pero esos a) solo se aplican a "funciones puras", no a preguntas arbitrarias sobre el mundo real, yb) requieren una cierta asimetría entre el cálculo y la verificación, es decir, debe ser mucho más fácil verificarlas que hacer el cálculo, o de lo contrario no ha guardado nada: ¡simplemente haga el cálculo usted mismo en lugar de confiar en los informes de otros!
Y está cada vez más lejos del problema de "probar" las observaciones del mundo real. Entonces sí, lo mejor que tenemos criptográficamente es designar una dirección como confiable en ciertos asuntos y luego verificar la validez de sus firmas.
En términos de verificación de afirmaciones del mundo real, lo mejor que tenemos es verificar todas las implicaciones de esa afirmación, que es solo una verificación de hechos a la antigua. Para el ejemplo del juego de pelota, eso sería verificar cosas como "¿Qué informan los periódicos sobre el juego? ¿Qué dicen los registros de la liga? ¿Quién jugó después en el torneo?" Lo cual está bien en la práctica, como resolver cosas en el corredor de apuestas. Pero no proporciona una prueba criptográfica , que tendría que ser robusta contra los atacantes, por ejemplo, la falsificación de noticias y demás.
Vale, ya he divagado bastante. ¿Respondí tu pregunta?
Me temo que tu primer párrafo no es exacto.
La prueba de trabajo que presenta un minero no certifica "he verificado las firmas". Verificar una firma es una tarea computacional barata, y cada cliente en la red puede (y lo hace) verificar por sí mismo que cada firma en la cadena de bloques es válida. No tienen que depender de un minero para verificar las firmas por ellos. De hecho, si todo lo que tuviéramos que hacer fuera verificar que cada transacción estuviera debidamente autorizada, no necesitaríamos mineros en absoluto.
La minería resuelve un problema diferente, llamado "problema del doble gasto": podría haber dos transacciones diferentes, ambas debidamente autorizadas, que estén en conflicto porque intentan gastar las mismas monedas. La comunidad debe poder llegar a un consenso sobre cuál de los dos debe aceptarse. La elección se puede hacer arbitrariamente, pero luego, para mantener a la comunidad comprometida con esa elección, el protocolo requiere prueba de trabajo para certificar que esta transacción es aceptada. Si la comunidad (o alguien dentro de ella) más tarde quisiera volver atrás y cambiar de opinión sobre qué transacción aceptar, tendrían que rehacer todo el trabajo que se había hecho mientras tanto, lo que pretende ser prohibitivamente costoso. El trabajo computacional que se realiza es inútil en sí mismo; la prueba de trabajo no certifica nada excepto quese hizo algo de trabajo.
Lo que estás describiendo más adelante me suena más como una prueba de conocimiento cero .
El problema con el uso de blockchain para verificar las transacciones del mundo externo es que el protocolo requiere que todos puedan verificar que cualquier bloque dado es válido.
Entonces, en cualquier momento, cualquier minero puede volver al bloque n. ° 2 y verificar que todas las transacciones fueron válidas en ese bloque. Obviamente, eso solo es posible cuando las transacciones no hacen referencia a una entrada externa. Porque si txs hace referencia a una entrada externa, es posible que la entrada haya cambiado mientras tanto, y ya no puede hacer eso.
¿Por qué es importante comprobar la validez de los bloques? Porque eso es blockchain: la serie de bloques más larga desde la primera. Su cliente de bitcoin, cuando quiere averiguar qué cadena de bloques es la adecuada, descarga todas las cadenas de bloques que la gente dice que son "la única", luego elimina las que contienen bloques inadecuados y luego elige la que es más larga.
Es por eso que no hay monedas basadas en blockchain que admitan entradas externas y la gente usa oráculos para eso. Es por eso que Ethereum tiene todos los mecanismos de contrato geniales, pero esos contratos no pueden hacer referencia a salidas externas :)
Puede encontrar algunas de las respuestas en Orisi.org/distributed oracles whitepaper .
Keshav Srinivasan
Silas Barta
Silas Barta