Envío de transacciones con Python + protocolo sin formato

Hace dos días encontré algunos artículos sobre el uso del protocolo de bitcoin sin procesar, y ahora todavía estoy tratando de enviar una transacción.

Mi código se basa en esta clase , y si entiendo bien toda esta magia de bitcoin, necesito firmar mi transacción de entrada sin procesar con la clave privada para la dirección 1LwPhYQi4BRBuuyWSGVeb6kPrTqpSVmoYzy agregar mi clave pública justo después, y será un script de desbloqueo válido. ?

Aquí hay una parte de mi código, que he copiado completamente del enlace anterior:

tx_in_count = struct.pack("<B", 1)
tx_in = {}                                                                                                                                                                                                     tx_in["outpoint_hash"] = flip_byte_order(previous_output_hash).decode("hex")
tx_in["outpoint_index"] = struct.pack("<L", 1)
tx_in["script"] = ("76a914%s88ac" % private_key).decode("hex")
tx_in["script_bytes"] = struct.pack("<B", (len(tx_in["script"])))
tx_in["sequence"] = "ffffffff".decode("hex")

No estoy seguro acerca tx_in["script"]de la línea, porque no hay nada sobre la firma de transacciones o claves públicas, por lo que probablemente sea la razón de mis fallas.

Gracias por cualquier respuesta :)

Ese código no se ve bien.

Respuestas (1)

En primer lugar, si desea aprender cómo construir una transacción sin procesar, realmente debería ir a esta pregunta: Ejemplo de canje de una transacción sin procesar paso a paso requerido

En segundo lugar, tx_in necesita un outpoint_hash, que es el hash de la transacción anterior de la que está gastando.

En tercer lugar, nunca debe codificar su clave privada en ninguna parte de la transacción como lo hizo en tx_in["script"]. Eso debe permanecer en un dispositivo seguro y lo necesita para generar la firma.

Cuarto, tx_in["script"]debe ser el mismo script desde el punto de salida (hash, índice). Los detalles del lenguaje de script que está codificado en hexadecimal (76a914...88ac) son códigos OP que debe estudiar (consulte el enlace anterior).

En quinto lugar, esta biblioteca realiza la firma en otros lugares, ya que script_bytesdebe ser la clave pública y la firma reales.

Creo que le resultaría más fácil de entender usando una biblioteca de python un poco más estándar como pycoin ( https://github.com/richardkiss/pycoin ) o pybitcoin ( https://github.com/blockstack/pybitcoin )