La firma de un raw de transacciones con Python ECDSA (o OpenSSL)

Estoy buscando detalles de Step15-17 de Canje de crudo Tx Paso Por Paso, el cual es esencialmente el paso donde la concatenación de raw Tx estructura es doble hash sha256 y, a continuación, firmado con una firma ECDSA de la biblioteca. También me he referido a otros primas de las transacciones de guías; estoy buscando específicamente cómo firmar un hexadecimales Tx estructura sin una interfaz gráfica de usuario/página web/etc

He construido un testnet Tx usando Bitcoincore v0.10 (un total de nodo) y el intento de la misma con Python y no puede firmar correctamente el raw Tx estructura utilizando Python ecdsa.

Te voy a mostrar el Bitcoincore los comandos de la primera:

importprivkey 93FxXUeMJp93YQAtGeW5cE23gFN4sJbBr1rbmerlfvuduqqqkl5
mu858WTEPiWWpAJRTMxC4ka6DJqiaCZisb
createrawtransaction '[{"txid" : "72b764383b99fb3d112ac8b474a5d7c4242b75dbfee2d4e9cf9a6703d90f805a", "vsal" : 1}]' '{"n1hjyVvYQPQtejJcANd5ZJM5rmxHCCgWl7" : 0.990}'
signrawtransaction 01000000015a800fd903679acfe9d4e2fedb752b24c4d7a574b4c82a113dfb993b3864b7720000000000ffffffff01c09ee605000000001976a914dd6cce9f255a8cc17bda8ba0373df8e861cb866e88ac00000000

Final bitcoincore hex Tx (utilizando signrawtransaction): 01000000015a800fd903679acfe9d4e2fedb752b24c4d7a574b4c82a113dfb993b3864b772010000008a47304402204d78d2e6c0f801573e4960fb8e51ad939380d119d25f97d15efdedf815b05f02022066bd2ab0b401e32e7ce67ea45f8224097eeafbef2335d563776e5efe6632732d01410479b22a5127d176a49d506c86f791031f94a389227ef46a8ddb725a88c944c37e3f753de6ee0b441a0237801f140810e111a1fd8276a2a5d0ee07224a1b551cc1ffffffff01c09ee605000000001976a914dd6cce9f255a8cc17bda8ba0373df8e861cb866e88ac00000000

Ahora el Python 2.7.9 código de la siguiente manera (para su INFORMACIÓN, el uso de iPython 2.0 así que no hay repetitivo que faltan en el siguiente código) :

# por favor, disculpe la hexlify/unhexlify, yo trabajo mejor en cadenas de bytes
importar __futuro__
de pybitcointools de importación sha256
importación hashlib, ecdsa
a partir de la firma ecdsa de importación SigningKey, SECP256k1
addr, pubkey = 'mu858WTEPiWWpAJRTMxC4ka6DJqiaCZisb', '0479b22a5127d176a49d506c86f791031f94a389227ef46a8ddb725a88c944c37e3f753de6ee0b441a0237801f140810e111a1fd8276a2a5d0ee07224a1b551cc1'
rawtx = '01000000015a800fd903679acfe9d4e2fedb752b24c4d7a574b4c82a113dfb993b3864b7720100000000ffffffff01c09ee605000000001976a914dd6cce9f255a8cc17bda8ba0373df8e861cb866e88ac00000000' # TX estructura 00 como scriptSig, de bitcoincore createrawtransaction
# sustitución de los '00' scriptSig valor
sin firmar.append(rawtx[:82]) 
sin firmar.append('19'+'76a914953de657be4b305f606d9a9fbd35b070a682475788ac') # scriptSig = scriptPubKey de entrada
sin firmar.append(rawtx[84:]) 
sin firmar.append('01000000') # anexando sighash_all
unsigned = ".join(unsigned)

sin signo = '01000000015a800fd903679acfe9d4e2fedb752b24c4d7a574b4c82a113dfb993b3864b772010000001976a914953de657be4b305f606d9a9fbd35b070a682475788acffffffff01c09ee605000000001976a914dd6cce9f255a8cc17bda8ba0373df8e861cb866e88ac0000000001000000'

# Vea https://github.com/warner/python-ecdsa/blob/master/README.md
sig1 = sk.signo(sha256(sha256(unsigned)), hashfunc=hashlib.sha256, sigencode=ecdsa.util.sigencode_der) # nota: este referencias 2 diferentes sha256 funciones
sig2 = [hex(len(sig1 + '\x01'))[2:], hexlify(sig1), hexlify('\x01'), hex(len(unhexlify(clave pública)))[2:], pubkey]
sig2
>>> ['48', '304502200e98d54ad642488121fa1fd4d055ff8f5b40773a21ecb42b5ef44ed9fd3b103c022100a2a56ffc3f27021a4be5d1d7a3016eff08fe7f550a4a894cca845ceab54dc53b', '01', '41', '0479b22a5127d176a49d506c86f791031f94a389227ef46a8ddb725a88c944c37e3f753de6ee0b441a0237801f140810e111a1fd8276a2a5d0ee07224a1b551cc1']
sig2 = len(".únete a(map(unhexlify, sig2)))
hex(len(".únete a(map(unhexlify, sig2))))[2:] 
>>> '8b' # empuje 139 bytes
sig3 
>>> 8b48304502200e98d54ad642488121fa1fd4d055ff8f5b40773a21ecb42b5ef44ed9fd3b103c022100a2a56ffc3f27021a4be5d1d7a3016eff08fe7f550a4a894cca845ceab54dc53b01410479b22a5127d176a49d506c86f791031f94a389227ef46a8ddb725a88c944c37e3f753de6ee0b441a0237801f140810e111a1fd8276a2a5d0ee07224a1b551cc1 
firmado = unsigned[:82] + sig3 + sin signo[84:] # la inserción de la firma en el 00 es el núcleo del software utiliza en lugar de ScriptSig

Final (no válido) de Python Tx:

01000000015a800fd903679acfe9d4e2fedb752b24c4d7a574b4c82a113dfb993b3864b772010000008b48304502200e98d54ad642488121fa1fd4d055ff8f5b40773a21ecb42b5ef44ed9fd3b103c022100a2a56ffc3f27021a4be5d1d7a3016eff08fe7f550a4a894cca845ceab54dc53b01410479b22a5127d176a49d506c86f791031f94a389227ef46a8ddb725a88c944c37e3f753de6ee0b441a0237801f140810e111a1fd8276a2a5d0ee07224a1b551cc1ffffffff01c09ee605000000001976a914dd6cce9f255a8cc17bda8ba0373df8e861cb866e88ac00000000

El envío de los Python genera Tx no funciona. Si me sendrawtransaction <PYTHON HEX> en Bitcoincore devuelve una firma no válida error (Específicamente, 16: obligatoria-script-verificar-bandera de error (secuencia de Comandos evaluado sin error, pero terminó con un falso vacío/parte superior de la pila de elemento) (código -26)).

(TL;DR) PREGUNTA: ¿Dónde estoy yendo mal en la firma de los raw de la estructura de la transacción manualmente?

PD: soy consciente de pybitcointools y relacionados con las bibliotecas pueden firmar Tx, pero estoy en busca de detalles, ya que incluso estos dos muy completo Bitcoin SE recursos (LINK1, LINK2) rozaron los detalles. Prefiero una respuesta para Python ECDSA o PyCrypto, sin embargo OpenSSL supongo que es la mejor respuesta.

+174
BrokenBinary 7 dic. 2015 22:06:11
20 respuestas

Decir, mi cruda de la transacción es de 500 bytes,100 bytes de los cuales son testimonio de datos. Por lo tanto, de 400 bytes están ahora compitiendo por el lugar en 1 Mb de bloque.

Eso no es correcto.

SegWit reemplaza el concepto de tamaño y tamaño máximo de bloque con el peso. El peso de una transacción se define como 3 veces el stripped_size en bytes (excluyendo el testigo), además de la total_size en bytes (incluido el testigo). El peso máximo de todas las transacciones en un bloque es 4000000. Este es el único límite que importa. Debido a la forma en que la fórmula de peso se construye, lo que implica que la vieja regla (stripped_size <= 1000000) es siempre satisfecho. Los mineros trate de obtener la mayor cargos fuera del límite de peso de los que tienen disponibles, y como resultado de optimizar para el cargo por peso.

Así, la transacción tamaños no importa. Lo que importa es su peso. Por desgracia, hay un factor de 4 de escala entre los dos, por lo que fácilmente se puede convertir feerates desde antes de SegWit para después. Por esta razón, el concepto de vsize virtual (tamaño) se introdujo. Es igual a peso/4. Para no SegWit transacciones, su tamaño y vsize son idénticos. La forma más sencilla de expresar las tasas es ahora para ver como BTC por vbyte (vsize byte).

¿Qué tan preciso es decir que la actual tarifa de transacción es de 1000 / 400 = 2.5 s/b?

En tu ejemplo, el peso de su transacción es 3*400 + 500 = 1700. Esto significa que su vsize es de 425 vbytes. Como resultado, su feerate es de 1000 / 425 = 2.35 sat/vbyte, y que podría competir con el resto de las transacciones en ese nivel.

+975
Abhiram 03 февр. '09 в 4:24

Lo más probable es que Coinbase mantiene una reserva razonable de dólares y BTC en la mano, al instante proporcionar USD o BTC a los clientes.

Probablemente tienen un "treasury manager" en el personal, cuyo trabajo es para comprar BTC al precio más bajo posible y vender BTC al más alto precio posible en varios intercambios o dark pools, para mantener las reservas se reponía en los casos en que a diario Coinbase uso es muy unilateral. Pero en general, estoy seguro de que prefiere mucho más para satisfacer la demanda interna para reponer reservas y no tener que pagar a un tercero costo para obtener o vender BTC en otros lugares, a menos que su tesoro administrador ve una "gritando negocio en un intercambio (por ejemplo, coinbase precio es de $800 y se puede conseguir algo para $600, o vender por $1,000).

En el pasado, había a veces sale el mensaje de que se está "agotada", es decir, el comercio era tan unilateral que utiliza su diario de las reservas y de las transacciones EFT de la Coinbase los usuarios no había resuelto aún. Por ejemplo, dicen que tiene 1000 BTC en reserva, pero de 1.500 usuarios todos quieren comprar 1 BTC cada día. Coinbase llenaría 1.000 pedidos, pero no tiene todavía el dinero de los 1.500 de usuario de cuentas de banco para ir a comprar más BTC en los intercambios. Lo que está sucediendo menos y menos a menudo (como Coinbase se pone más profundo y más profundo de los bolsillos).

+941
Esolitos 8 ago. 2017 6:46:33

Si yo soy una empresa que paga mis empleados y mis cadena de suministro con mi propia moneda creada en un bloque de la cadena y pueden pasar donde es aceptado, necesito un PRISIONERO de guerra o POS esquema para mantener la veracidad de la contabilidad de las transacciones? O hay una manera de validar las transacciones y de la historia de la contabilidad a través de un control centralizado? Podría trabajar como esto:

  1. Sólo mi empresa podría crear la moneda de mi país, así que no hay manera de falsificación de la misma.
  2. Todo el que acepta la moneda de mi país usa el software en el punto de venta que verifica la transacción y de la historia de la contabilidad.
  3. Cada unidad de la moneda está integrado con la IDENTIFICACIÓN personal que se transfiere a la siguiente persona con su IDENTIFICACIÓN personal hasta que finalmente se recicla de nuevo a mí, el emisor.

Iba a ser capaz de eliminar el doble gasto y el fraude en un sistema centralizado sin los mineros?

+919
Cheryl Hardy 29 abr. 2014 23:54:59

De los 100 mil millones de dólares del total de XRP, 20 mil millones fueron a los fundadores y 30 millones de dólares para OpenCoin para financiar el desarrollo. Los 50 millones restantes se supone para ser regalado a promover la Ondulación.

¿Hay alguna fuente de información de seguimiento de cuántos XRP se han distribuido al público?

Tiene alguna de los fondos para el desarrollo se ha vendido?

+888
daveclark 24 dic. 2015 13:44:33

Son las transacciones añadido a la génesis de bloque disponibles, como cualesquiera otras transacciones de otros bloques, o es que un unspendable coinbase transacción.

El coinbase de transacción de la génesis bloque no está disponibles.

Si me tenedor el código de Bitcoin, y generar mi propia génesis del bloque. Puedo el uso de la clave privada y clave pública se utiliza como bitcoin destinatario de la las transacciones rígida con la génesis de bloque?

Sí, pero usted tiene que hacer algunas modificaciones en el código fuente, porque es "unspendability" ha sido codificado para evitar un duro de la horquilla.

Cómo hacer disponibles

chainparams.cpp

  1. La mina de su propia génesis bloque proporcionando toda la información necesaria en chainparams.cppprincipalmente CreateGenesisBlock y la Línea #123 (para mainnet, similar para testnet y regtest en el mismo archivo).

validation.cpp

Usted necesita hacer para que la transacción se añade al índice, y omitir algunas comprobaciones que hacen unspendable. En v0.16:

  1. Usted puede encontrar donde no se agrega al índice en validation.cpp la Línea #1812. Comentario de la Línea de 1817 devolver true para evitar que pase esto.

Es posible que también deba omitir las pruebas de validación (por ejemplo, si su génesis bloque de dificultad es menor, si usted tiene un premine) en lugares tales como:

  1. Saltar nLockTimeFlags |= LOCKTIME_VERIFY_SEQUENCE; en la Línea #1891 por la adición de un cheque a su alrededor:

    si (bloque.GetHash() != chainparams.GetConsensus().hashGenesisBlock) { si (VersionBitsState(pindex->pprev, chainparams.GetConsensus(), el Consenso::DEPLOYMENT_CSV, versionbitscache) == THRESHOLD_ACTIVE) { nLockTimeFlags |= LOCKTIME_VERIFY_SEQUENCE; } }

  2. También excepciones similares (comprobar que != génesis del bloque) para si (!WriteUndoDataForBlock(blockundo, estado, pindex, chainparams)) return false; en la Línea #1988

  3. Excepción Similar para la Línea #1805, las Líneas #1873-1876

Básicamente, usted necesita para ejecutar y probar y ver que falla en los registros, debido a que usted está rompiendo un montón de reglas.

+877
Nusenka 12 abr. 2012 1:14:57

Yo pensaba que existían, porque sin ellos usted puede simplemente dejar un rastro de 0.001 btc o algo todo el camino hasta los precios a precio mucho más alto en un libro de ordenes sin gastar mucho dinero. El valor debería ser la capitalización de mercado / monedas distribuidas. Si no hay mucho en la moneda, a continuación, no puede alcanzar ese nivel de precio no debe ser suficiente dinero invertido para cumplir con la capitalización de mercado requiere para que el nivel de precio ... Pero eso era sólo lo que tenía sentido para mí a la hora de analizar la misma situación en los intercambios. Yo podría estar equivocado.

+863
Nicholas Ling 11 jun. 2013 17:51:08

Uno de los mayores obstáculos en mi mente para aumentar el número de nodos de funcionamiento es el inicio de costos relacionados con la descarga de la blockchain. Una similar, pero menos importante (en mi mente) el problema es la cantidad de espacio de disco requerido por el pleno de la blockchain.

En Haría mover una transacción de un antiguo bloque a una nueva permitir que más de la poda? Murch sugerido que algunas de las hipótesis se comprueban, y creo que uno de ellos era mi suposición de que sería más seguro confiar en un UTXO Conjunto proporcionados por otros usuarios. Dado las respuestas a otra suposición Murch me sugirió comprobar, parece que la respuesta es "No por lo general," pero si hubo un estándar de prueba, tales como una firma de UTXO conjunto o un UTXO Compromiso en el encabezado, la respuesta parece cambiar a "¡Sí!"

En cualquier caso, Murch sugiere que la hipótesis se comprueba, así que he creado esta pregunta para comprobar que uno.

+763
DorisMadson 16 sept. 2017 21:03:54

dan91 escribió en BitcoinTalk.org:

Creo que verde dirección utiliza algunos de sus propios servidores y algunos de electrum servidores para su verificación. BreadWallet hace uso completo de los nodos como he visto que algunos userid con BreadWallet conectar a la mía.

+699
yinwm 3 mar. 2013 7:09:37

¿Por qué se me da este error y no recibir mi poco monedas?

El sistema no puede encontrar la ruta especificada ".org.multibit.archivo.WalletSaveException"
No se puede guardar la billetera C:\Program Files\MultiBit-0.5.15\null\MultiBit\multibit.billetera
Creado cartera "C:\Program Files\MultiBit-0.5.15\null\MultiBit\multibit.billetera".
No se pudo cargar la cartera de archivo "C:\Program Files\MultiBit-0.5.15\null\MultiBit\multibit.billetera". 
+657
user254582 16 jul. 2016 20:12:02

¿Realmente considerar la compra de 1 BTC válida de inversión? Eso es como la compra de compartir 1 de todo en la BOLSA de nueva york. Al final no ganar tanto como usted desea. Además, tienes que ser un poco más interesados en el éxito de la BTC, para justificar la inversión.

Para responder a la pregunta, BTC inversión es tan fácil como dejar 1 BTC en una cartera. El BTC probablemente alcance un valor superior, pero que especulativa, porque toda la economía, es un experimento que nunca ha sido llevado a cabo en la práctica. Esta es la razón por la que es una moneda volátil.

La minería no es un camino viable para invertir ya que la dificultad de éxito en la minería BTC ha aumentado debido a la tecnología, los avances en la mezcla y la BTCs aumento de la popularidad.

+628
tomis 29 jul. 2016 14:40:45

es posible hacer una multisig tx con las mismas claves ? Por ejemplo, yo tengo: Tecla, La Tecla B Tecla C

Ahora debería ser capaz de gastar las monedas y también a B con la ayuda de C. (B y C por sí sola no debe ser capaz de gastar las monedas) 2 llaves de 4 debería funcionar, pero puede tecla 1 y 2 será de UN (AABC) ?

Gracias,

+626
xtmq 19 jun. 2011 19:38:49

Eso no significa que no todas las validaciones siga simplemente "concatenar desbloqueo y bloqueo de la secuencia de comandos y ejecutar el método de validación? Como un principiante, me gustaría esperar que por la homogeneidad y la seguridad de todas las transacciones deben seguir esta misma regla uniforme.

Nada utiliza el "concatenar desbloqueo y bloqueo de la secuencia de comandos y ejecutar". Ese enfoque fue abandonado en Bitcoin v0.3.7 (lanzado en julio de 2010), como lo fue la razón para que uno de los dos robos de habilitación de errores Bitcoin tuvo en su infancia.

El enfoque actual es ejecutar primero el desbloqueo de script, mira el resultado de la pila y, a continuación, ejecutar la secuencia de comandos de bloqueo con que la pila inicial de la pila. La resultante de la parte superior de la pila elemento determina si la validación se ha realizado correctamente o no.

Basado en la oferta, parece que el P2SH (o posiblemente otros tipos de secuencias de comandos son evaluados de una manera diferente?

No es tanto una regla diferente - sólo una regla adicional. Debido a la compatibilidad con versiones anteriores, regla de red mejoras sólo pueden agregar restricciones adicionales en anteriormente-válido secuencias de comandos. Ellos no pueden hacer secuencias de comandos no válidos válidos, como los que correría el riesgo de dividir la red en dos (buscar "softforks").

Si la respuesta es sí, ¿cómo funciona el Bitcoin nodo saber que tipo de desbloqueo/bloqueo de tipo de secuencia de comandos debe ser aplicado para cada transacción en particular?

Cada vez que un pase (a) valida el uso de las reglas normales y (b) tiene un bloqueo de secuencia de comandos que satisface un patrón específico, definido en BIP16, una adición P2SH específicos de la ejecución de la siguiente manera, cuya validación resultado es lo que importa.

También, si la respuesta es sí, hay otras desviaciones de la llanura "concatenar y ejecutar la regla"?

Este mismo enfoque se utiliza de una forma mucho más reciente regla de red de la mejora, llamado SegWit, especificado en BIP141, que se espera para ser activado en la red en torno a 22 de agosto de 2017.

Digamos que hay una muy antiguo legado nodo que no P2SH habilitado. La transacción anterior todavía se evalúe a true (si el redimir guión está a la derecha) como la pila tendría un VERDADERO en la parte superior al final de la ejecución?

Sí, por definición, porque P2SH sólo agrega restricciones adicionales. La específica P2SH de bloqueo script comprueba si el consumidor sabe que los "incrustados" desbloqueo de secuencia de comandos (también llamado redeemscript).

+595
FMarazzi 18 mar. 2016 20:29:24

Bitcoin es P2P como BitTorrent. Es probable que sea debido a que su ordenador es lento validación de la blockchain a medida que se descarga. La mayoría de la obra no es en realidad la descarga. Esta respuesta puede ayudar a usted.

+380
Outlaw Programmer 2 oct. 2012 6:13:30

Lo más probable es que el uso de una minería de la piscina, en cuyo caso la moneda con la que ganar permanecerá en su cuenta hasta que usted decide retirar a su local de la cartera. La mayoría de las piscinas de apoyo automático-retiros (es decir, cuando el equilibrio se alcanza un cierto umbral).

+361
LlF 12 ago. 2015 23:23:30

Si usted tiene 0.1 BTC y el Bitcoin, el precio es de$10,000, que es la que vale $1000. Si el precio de Bitcoin se convierte en $20,000 usted todavía tendrá 0.1 BTC , pero tendrán un valor de $2000.

+286
starless 25 dic. 2015 20:46:14

Debe hacer las cosas más suave y el resultado en menos de oscilación. Hay una razón por la que retargetting es solo una de cada 2016 bloques?

+262
Pbk1303 2 nov. 2015 0:19:19

Primer post. Debo decir de antemano gracias a todos por el gran conversación y ayuda y software hasta el momento. Realmente me ayudó a familiarizarse con bitcoins y de minería de bitcoin.

Tengo una pregunta acerca de la funcionalidad de los Bitcoin de la red y de cómo la minería de créditos se aplican a la persona correcta.

Suponga que una persona es solo de la minería. Es decir, un equipo que está haciendo la minería. Se puede ejecutar una piscina, pero que no es relevante para esta pregunta. Así, supongamos un solo minero genera un par de cuadras y ellos aceptan.

Cuando la red se aprueba un bloque que ha sido creado, ¿cómo es el crédito para el bloque de creación (50 bits monedas, pronto 25) que se aplica a los mineros en cartera?

Digamos que una GPU minero, como DiabloMiner se está ejecutando, y conseguir su trabajo de Bitcoin-QT. ¿Cómo funciona Bitcoin-QT, detectar la minería de crédito de 50/25 bitcoins y enviarlo a la correcta minero de la dirección?

Gracias.

+241
user52233 8 ago. 2011 16:55:01

Satoshi creado un sistema que:

  1. Permite a los usuarios a confiar en las transacciones sin tener que confiar en una sola entidad.
  2. Abierto para que cualquier persona pueda participar y de intercambio de cálculo de potencia para Bitcoins.
  3. Es el diseño con un tamaño fijo (21 millones de Bitcoins), creó un incentivo para que los usuarios participar desde el inicio mientras que los Bitcoins son relativamente baratos para generar, hay menos riesgo de que la inflación futura reduciendo el valor de los early adopters.
+225
Kevin Voorn 8 abr. 2016 5:13:00

Si una transacción en cualquier lugar de alrededor de 10 minutos a horas para llegar por escrito a un bloque y poner en la cadena, ¿cómo es posible tener las cosas como bitcoin máquinas expendedoras? En esos casos, la operación tendría que ser casi instantánea para hacerlo práctico.

+154
Durfee 26 may. 2010 11:00:02

Estoy atrapado entre la búsqueda de una api que me permite obtener bitcoin precios de los diferentes intercambios, he encontrado coincap.io, pero parece que no me da todos los datos necesarios se me requiere.

Por favor, si alguien sabe cómo puedo hacerlo amablemente deben suministrar a mí con los recursos necesarios.

+99
Aar Vee 14 feb. 2019 8:17:22

Mostrar preguntas con etiqueta