EL LIBRO DE SATOSHI
Primero: me pone un poco nervioso que bitcoin tenga un lenguaje de
scripting, aunque es un lenguaje de scripting realmente simple (no hay
bucles, no hay punteros, nada excepto matemáticas y criptografía) Me
pone nervioso porque es más complicado y la complicación es la
enemiga de la seguridad. También hace más difícil crear una segunda
implementación compatible. Pero creo que lo puedo asumir.
Repasando el código, las nuevas transacciones se verifica poniendo la
firma y la clave pública sobre la pila del intérprete y ejecutando el
script TxOut (¿lo he entendido bien?).
¿Podría escribir código para crear transacciones con cualquier script
válido en el TxOut?
Por ejemplo, ¿podría crear una TxOut con un script de: OP_2DROP OP_
TRUE. . . para crear una moneda que cualquiera pudiera gastar?
Y, ¿es esta flexibilidad en los tipos de monedas creadas la razón de
estar programado de esta manera?
_____________________________________________________________
La naturaleza de Bitcoin es tal, que una vez publicada la versión 0.1, el
diseño base estará escrito en piedra para el resto de su vida. Por esta
razón quise diseñarlo de tal manera que soportara cualquier tipo de
transacción que pudiera pensar. El problema era que, cada una requería
campos de datos y código específico así se utilizara o no, y sólo cubría un
caso especial cada vez. Hubiera sido una explosión de casos especiales. La
solución fue el script, que generaliza el problema de tal manera que las
partes involucradas en la transacción pueden describir su transacción
como un predicado que los nodos evalúan. Los nodos sólo tienen que
entender la transacción hasta el punto de evaluar si las condiciones del
emisor se cumplen.
El script es de hecho, un predicado. Es sólo una ecuación que devuelve
verdadero o falso. Predicado es una palabra larga y poco común así que lo
llamé script.
El receptor del pago comprueba el script con una plantilla. Por ahora el
receptor sólo acepta dos plantillas: pago directo y dirección bitcoin.
Futuras versiones podrán añadir más plantillas para más tipos de
transacciones y los nodos que ejecuten esas versiones o superiores podrán
recibirlas. Todas las versiones de los nodos de la red pueden verificar y
147
SOBRE UNA VARIEDAD DE TIPOS DE TRANSACCIONES
añadir cualquier nueva transacción a un bloque, aunque no sepan
interpretarlas.
El diseño admite una tremenda variedad de posibles tipos de
transacciones que diseñé hace años. Operaciones de depósito en garantía,
contratos en condiciones de servidumbre, arbitraje de terceros, firma
multipartita, etc. Si Bitcoin evoluciona a lo grande, estas son cosas que
querremos explorar en el futuro, pero todas han tenido que diseñarse al
principio para asegurarse de que sean posibles de usar más tarde.
No creo que, una segunda implementación compatible de Bitcoin sea una
buena idea. Gran parte del diseño depende de que todos los nodos
obtengan exactamente los mismos resultados así que una segunda
implementación sería una amenaza para la red. La licencia de MIT es
compatible con todas las demás licencias y usos comerciales, por lo que
no es necesario volver a escribirla desde el punto de vista del
licenciamiento.
Una segunda versión sería un gran problema de desarrollo y
mantenimiento para mí. Ya es bastante difícil mantener la compatibilidad
con versiones anteriores mientras se actualiza la red sin una segunda
versión. Si la segunda versión fallara, la experiencia del usuario se
reflejaría negativamente en ambas, aunque al menos reforzaría a los
usuarios la importancia de permanecer con la versión oficial . Si alguien
estuviera preparándose para bifurcarse a una segunda versión, tendría
que advertir sobre los muchos riesgos de usar una versión minoritaria.
Este es un diseño donde la versión mayoritaria gana si hay desacuerdo, y
eso puede ser bastante feo para la versión minoritaria y prefiero no entrar
en eso, y no tengo que hacerlo siempre que haya una sola versión.
Lo sé, a muchos desarrolladores no les gusta que bifurquen su software,
pero en este caso tengo reales razones técnicas.
_______________________________________________________________
Cita de: gavinandresen, 17 de junio 2010, 07:58:14 PM
Admiro la flexibilidad del esquema de scripts en una transacción, pero
mi pequeña y malvada mente inmediatamente comienza a pensar en
maneras de abusar de ello. Podía codificar todo tipo de información
interesante en el script TxOut, y si los clientes no pirateados validaban
y luego ignoraban esas transacciones, sería un canal de comunicación
148