¿Qué scripts se consideran estándar actualmente y, por lo tanto, se propagan realmente?

Todo lo que he aprendido sobre hasta ahora es que, si bien en teoría es bastante versátil (por ejemplo, permite transacciones con múltiples firmas), la mayoría de los scripts simplemente no se propagan mediante los nodos de cliente predeterminados, es decir, si bien puede transferir fondos fácilmente a un script, puede terminar teniendo un momento difícil de pasar alguna vez estas transacciones. Entonces, ¿qué hace que una secuencia de comandos sea estándar o no estándar? ¿Hay una lista de secuencias de comandos compatibles actualmente con la red?

Respuestas (2)

Conozco cuatro guiones estándar. Como dijo Luca, el código fuente del cliente de referencia es la definición del protocolo, por lo que debe leer el código para obtener la respuesta definitiva. Como señaló Peter, un script estándar es el que transmite el cliente de referencia. No se rechazará un script no estándar si está en un bloque, siempre que sea un script válido.

Los que yo conozco son:

  1. Pay-to-PubKey-Hash: este es el pago estándar a una dirección de bitcoin. La dirección está en la salida y la firma y la clave pública están en la entrada.
  2. Pago a clave pública: Este es un pago a una clave pública. La clave pública está en la salida y la firma está en la entrada.
  3. Pay-to-ScriptHash: Esto se está utilizando para algunas de las transacciones de pago más sofisticadas. Un hash de script está en la salida y la firma y un script serializado están en la entrada. En la primera pasada, el hash del script se verifica con el script serializado. Si se marca, entonces el script serializado se expande y se realiza una segunda pasada usando ese script.
  4. Pay-to-MultiSig: se requieren varias firmas para firmar el script. La salida contiene las claves públicas y la entrada contiene las firmas. Todas las firmas deben ser verificadas por una de las claves públicas, pero puede haber más claves públicas que firmas. El límite actual para M de N scripts es N=3.
Es posible que desee agregar que para transacciones multisig, el límite es M-out-of-N, con N como máximo 3. Además, para P2SH existe el requisito de que el script incrustado también sea estándar. Aparte de eso, esta lista es correcta para 0.8.x.
También tenga en cuenta que la estandarización solo afecta qué transacciones se retransmiten. Los scripts no estándar que son válidos se pueden colocar en bloques sin problemas, si un minero así lo decide.
Entonces, ¿actualmente P2SH significa que una transacción que gasta solo se transmitirá si ese script es nuevamente uno de estos cuatro?
@TobiasKienzler Eso es lo que entiendo.
En cuanto a M de N, el único límite para N per se es 15, pero por encima de cierto M+N, el tamaño de su transacción sería demasiado grande para ser extraído. Logramos impulsar 3 de 3 y 2 de 4 a través de grupos predeterminados cuando probamos Orisi.org. Y puede empujar 8 de 15 a través del grupo de Eligius: tienen solo el 5% del poder de hash, por lo que tendrá que esperar de 4 a 10 horas para que pase el tx. (también, consulte bitcoin.stackexchange.com/questions/23893/… )
Además, hay una solicitud de extracción realizada por uno de los desarrolladores principales para relajar las reglas sobre los scripts. En unos meses se permitirá cualquier cosa (ver bitcoin.stackexchange.com/questions/28181/… ). E incluso antes de ese momento, Eligius aceptará casi cualquier cosa :)

La lista estándar de operaciones para scripts se encuentra en el bitcoindcódigo fuente que puede encontrar aquí: https://github.com/bitcoin/bitcoin/blob/master/src/script.cpp#L90

Para comprender cuáles se implementan y utilizan realmente, debe leer el código fuente.

Así que no, no hay un estándar para esto. El estándar es el programa bitcoind real.

Entonces, ¿un script siempre se considera estándar si solo usa estos códigos de operación?
No, esta es solo la lista de códigos de operación que existen . Ni siquiera todos ellos están habilitados. Pero no tiene nada que ver con la estandarización, eso se hace en otra parte del código.
Es por eso que dije "Para comprender cuáles se implementan y utilizan realmente, tendría que leer el código fuente".
Una secuencia de comandos "estándar" es un término técnico aquí. Los scripts estándar son los que transmite el cliente de referencia. Es independiente de si son válidos o no.