¿Puede la cadena de bloques de Bitcoin eliminar la necesidad de computación confiable en los contratos inteligentes?

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.

Respuestas (3)

... ¿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?

Tomemos un ejemplo simple: la persona A y la persona B hacen una apuesta sobre si el mil millonésimo dígito de pi es par o impar. Ambos ejecutan el mismo programa y la persona A afirma que el resultado es que el dígito es impar, mientras que la persona B afirma que es par. Claramente uno de ellos miente, pero ¿cómo podemos resolver quién gana la apuesta? Puede confiar en uno o más árbitros externos para ejecutar el programa ellos mismos, pero eso anula el propósito de las cláusulas programables en los contratos inteligentes, que es eliminar la necesidad de árbitros externos de confianza para resolver disputas contractuales.
Eso depende de cómo defina "los dígitos de pi" o "según el programa" para los fines del contrato. Una forma sería poner un programa de cálculo de dígitos pi en el contrato de la cadena de bloques. (Tenga en cuenta que el lenguaje de secuencias de comandos no tiene bucles y Turing está incompleto, por lo que probablemente sería largo). Luego, se verifica como cualquier otra secuencia de comandos: todos los que ven los bloques que contienen estos procesos recorren el programa para verificar quién obtiene el pago, y rechazan transacciones basadas en la respuesta incorrecta. Esta es la razón por la que generalmente solo desea designar una dirección de una parte confiable para realizar la llamada.
En cuanto a si se supone que los contratos inteligentes eliminan la necesidad de árbitros externos confiables, no creo que lo sean. En algunos casos, la resolución del contrato es tan mecánica que puede eliminar la necesidad de la parte de confianza. Sin embargo, cuando alguien tiene que emitir un juicio, el propósito de estos contratos inteligentes es solo proporcionar una infraestructura de custodia confiable, de modo que el árbitro solo pueda dar el dinero a una de las partes principales y no, por ejemplo, huir con él.

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 .

Bien, ¿entonces se pueden utilizar las pruebas de conocimiento cero para eliminar el problema informático de confianza descrito en el artículo de la wiki de bitcoin?
@KeshavSrinivasan: No lo sé. En realidad, cuanto más leo, menos probable parece.
Bien, ¿conoce alguna otra forma de resolver automáticamente una disputa sobre el resultado de un cálculo, sin depender de la informática de confianza?
@keshav: Yo no.

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 .