¿Cómo se define una transacción de Bitcoin "estándar"?

Esto es útil en el libro de Andreas Antonopoulos, Mastering Bitcoin:

https://github.com/bitcoinbook/bitcoinbook/blob/7c552ea5cfbc19448635b36407761b377ff5cbe9/ch05.asciidoc#transacciones-estándar

"En los primeros años del desarrollo de bitcoin, los desarrolladores introdujeron algunas limitaciones en los tipos de scripts que podía procesar el cliente de referencia. Estas limitaciones están codificadas en una función llamada isStandard(), que define cinco tipos de transacciones "estándar". ."

¿Dónde están los cinco tipos enumerados en el código base de Bitcoin Core?

Los cinco tipos de transacciones estándar aparecen enumerados en la Guía para desarrolladores de Bitcoin aquí: bitcoin.org/en/developer-guide#standard-transactions
// , No parece estar en la documentación del Protocolo, aunque encontré una nota sobre los códigos de rechazo aquí: en.bitcoin.it/wiki/Protocol_documentation#reject
// , @GregHewgill, buen enlace. Más abajo en la página, también se vuelve más completo: bitcoin.org/en/developer-guide#non-standard-transactions

Respuestas (1)

Esto es más fácil decirlo que hacerlo, en mi opinión. Hay un montón de pequeñas páginas web de hojas informativas (por ejemplo, https://www.cryptocompare.com/coins/guides/what-are-the-bitcoin-transaction-types/ ) que dan una lista de los Bitcoin "estándar". Tipos de transacciones, pero nada superautoritario.

Sin embargo, creo que la fuente más autorizada en este momento es el código fuente central de Bitcoin.

Hice mi propia búsqueda, recientemente, para prepararme para la reunión de Andreas Antonopoulos mañana:

https://duckduckgo.com/?q=cómo+puedo+encontrar+si+un+tipo+de+transacción+de+bitcoin+se+considera+%3F&t=ha&ia=web

El libro Mastering Bitcoin se refiere a él en tres capítulos diferentes:

https://github.com/bitcoinbook/bitcoinbook/search?utf8=%E2%9C%93&q=%22standard+transactions%22&type=

https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch07.asciidoc#multi-firma

También encontré un buen enlace a una lista completa de ellos aquí:

https://books.google.com/books?id=YHfCBwAAQBAJ&pg=PA92&lpg=PA92&dq=¿cómo+puedo+averiguar+si+un+tipo+de+transacción+de+bitcoin+se+considera+estándar?&source=bl&ots= GK4GH-MJOL & SIG = BHL4CST7DQZUPWT61W6-QT1QRR0 & HL = EN & SA = X & VED = 0AHUKEWWD5JCD-OBTAHAHUJ0MMMMMKHDYECBQQQQQQOEIQDAF#V = OnePage & q = Cómo%20can%20i%20find%%20Out%20 °%20

Resultado de Google Books para una búsqueda de cursor

Y los 5 tipos, pubkey, pubkey_hash, multisig, script_hash, op_return, tienen algunas estadísticas geniales aquí: https://webbtc.com/stats

Para resumir, creo que solo tendrá que leer la viñeta y pedirle a un amigo que sepa C ++ que policy.cpple explique el contenido del archivo:

https://github.com/bitcoin/bitcoin/blob/master/src/policy/policy.cpp#L44

Ese amigo seré yo, en breve...

(algún tiempo después)

Parece que hay dos funciones que indican si una transacción es 'Estándar' según la lógica de Bitcoin Core: IsStandard()y IsStandardTx().

Encabezado: https://github.com/bitcoin/bitcoin/blob/master/src/policy/policy.h#L75

Código fuente:

IsStandard(): https://github.com/bitcoin/bitcoin/blob/master/src/policy/policy.cpp#L34

  1. IsStandard()primero verifica la transacción contra el Solver. https://github.com/bitcoin/bitcoin/blob/master/src/policy/policy.cpp#L37
  2. Luego, IsStandard()verifica si la transacción es una N de 3 multisig: https://github.com/bitcoin/bitcoin/blob/master/src/policy/policy.cpp#L40
  3. Por último, si las transacciones testigo están habilitadas, IsStandard()verifica que la transacción sea uno de los dos tipos estándar de witnesstransacciones. https://github.com/bitcoin/bitcoin/blob/master/src/policy/policy.cpp#L53

IsStandardTx(): https://github.com/bitcoin/bitcoin/blob/master/src/policy/policy.cpp#L59

  1. Una transacción estándar debe tener una versión de aplicación suficientemente baja. https://github.com/bitcoin/bitcoin/blob/master/src/policy/policy.cpp#L61
  2. La transacción debe tener un peso suficientemente bajo. https://github.com/bitcoin/bitcoin/blob/master/src/policy/policy.cpp#L66
  3. Si una Transacción de Bitcoin dada es una transacción de Pay to Script Hash, debe tener un valor de scriptSig pequeño. De acuerdo con la aritmética en los comentarios, eso equivale a aproximadamente 15 M de N firmantes (es decir, 15 "cofirmantes" para una transacción) como máximo. Y tiene que ser push-only. No estoy seguro de lo que significa "solo empujar", pero aparentemente es importante. https://github.com/bitcoin/bitcoin/blob/master/src/policy/policy.cpp#L76 https://github.com/bitcoin/bitcoin/blob/master/src/policy/policy.cpp#L89
  4. Luego, parece que está verificando scriptPubKeycontra la IsStandard()función. https://github.com/bitcoin/bitcoin/blob/master/src/policy/policy.cpp#L97
  5. Las transacciones nulas se consideran estándar, al igual que las transacciones que solo tienen una OP_RETURNsalida. Pero no vaciar transacciones multisig o desempolvar. https://github.com/bitcoin/bitcoin/blob/master/src/policy/policy.cpp#L103 https://github.com/bitcoin/bitcoin/blob/master/src/policy/policy.cpp#L114

Supongo que este es un estándar bastante razonable para realizar transacciones "estándar".

Los comentarios explican algo de eso.

Si desea ver qué entradas y testigos se consideran estándar, puede mirar más abajo en la página o hacer otra pregunta en este sitio.

No me siento muy cómodo respondiendo esto, pero creo que es suficiente para que alguien que no esté familiarizado pueda echar un vistazo al código base por primera vez. Si desea editarlo para mayor claridad o corrección, ¡hágalo!