Cómo comprobar manualmente una firma dada scriptSig y scriptPubKey?

Primera transacción

Dada una transacción en la blockchain: 3a1b9e330d32fef1ee42f8e86420d2be978bbe0dc5862f17da9027cf9e11f8c4

Una de las salidas de transferencias 424,242.42424242 BTC a 1eHhgW6vquBYhwMPhQ668HPjxTtpvZGPc

scriptPubKey:

OP_DUP OP_HASH160 070d550bc5bc843149410b8863b5b72857d91439 OP_EQUALVERIFY OP_CHECKSIG 

Segunda transacción

Y la entrada a pasar que la salida es en esta transacción: 7a2a6f66e87ed4e72d85ba7a82eda1572605c3330c461e171f58d7ff2763ac63

scriptSig:

30450221009c45573098c41e5ebd1e41fea5f6d0f96c7833a631c7ae890de328ca7e643a79022037cb1736d6aeeed517b234a16d731072cddf1917947dab25776a0f6dff9d741f01 
041b4c38a55f7d3de915a0732c2237e13349c17250c05b4803e147fcee08ebad75fa76cfcde6aa5f45cde1201f63920c3625c6cba17c42ce052c07cdea0607f488

Pregunta

¿Cómo se hace manualmente la verificación de la firma con la firma ECDSA dado la firma, clave pública, y las dos operaciones?

Mi ingenuo intento de uso de pybitcointools:

>>> de bitcoin de importación *
>>> clave_pública = '041b4c38a55f7d3de915a0732c2237e13349c17250c05b4803e147fcee08ebad75fa76cfcde6aa5f45cde1201f63920c3625c6cba17c42ce052c07cdea0607f488'
>>> sig = '30450221009c45573098c41e5ebd1e41fea5f6d0f96c7833a631c7ae890de328ca7e643a79022037cb1736d6aeeed517b234a16d731072cddf1917947dab25776a0f6dff9d741f01'
>>> tx = '7a2a6f66e87ed4e72d85ba7a82eda1572605c3330c461e171f58d7ff2763ac63'
>>> print ecdsa_verify(tx, sig, clave_pública)
Falso

Podría ser que tengo que ir a través de este diagrama para construir el "mensaje" para utilizar en la verificación de: https://dl.dropboxusercontent.com/u/1139081/BitcoinImg/OpCheckSigDiagram.png

Gracias de antemano por cualquier ayuda en esto!

+704
rkukuh 8 may. 2017 9:48:51
19 respuestas

Así que mi amigo está interesado en cryptocurrency y me decidí a darle una mano, ya que él quiere empezar a comprar y vender monedas con fines de lucro. Pensé que podría lograr esto, así que voy a señalar mi plan:

  1. Voy a mirar en GDAX, que por lo que entiendo que será mejor para nosotros ya que vamos a estar haciendo varias bajas de precios de las transacciones.

  2. Desde GDAX puede acceder a Coinbase, puedo usar mi cartera de ahí a tirar de los fondos.

  3. Una vez que me he registrado en ambos sitios, voy a empezar a crear la real aplicación de Java.

  4. Yo estaba pensando en usar esta API: https://github.com/robevansuk/gdax-java aunque es un poco confuso para mí, creo que puedo averiguar cómo realizar estas funciones: obtener datos de mercado (a saber cuándo vender o comprar), obtener la cuenta (obviamente), depositar y retirar de Coinbase, realizar un nuevo pedido (para el comercio)

Ahora quería preguntar un par de cosas en este plan.

1) ¿sabe usted de cualquiera de los ejemplos de implementaciones de esta API: https://github.com/robevansuk/gdax-java

2) estoy usando GDAX para el propósito de seguridad y tarifas más bajas, pero la retirada y depósito de Coinbase coste adicional?

3) probablemente soy un poco ciego, debido a mi falta de conocimiento en el tema. Antes de entrar en esto, ¿me podrías recomendar la mejor manera de acercarse a este plan?

+911
ankur 03 февр. '09 в 4:24

He visto varias formas de crear una billetera para el frío (seguro) de almacenamiento:

  1. Uso BitcoinQT para generar una cartera offline utilizando una instalación limpia de Ubuntu.
  2. Armería
  3. Electrum

Son cualquiera de estos métodos más seguros que los otros? Hay una solución recomendada para la creación de un seguro billetera?

+740
luci 16 ago. 2016 16:44:52

En Windows no funcionaría debido al bloqueo de archivos/compartir sospecho y en Linux que no sería un problema, pero los datos seguramente se corrompe. No hay ninguna ventaja para la ejecución de múltiples servidores, si usted necesita para procesar más transacciones que el servidor puede manejar, entonces usted probablemente debería estar haciendo cosas de una manera distinta o con varias máquinas. Si es para ayudar a la red, entonces uno va a hacer - dejar 24/7 y va a empezar a dar más de 8 conexiones si usted permite que a través de config.

+725
posdef 21 abr. 2011 9:02:51

[Edit: mi anterior respuesta fue incorrecta en su explicación, he actualizado desde]

sería la siguiente cosa lógica por la piscina para asignar el minero un poco más difícil de bits de trabajo?

No. En un sentido general, considere esto: si la dificultad se incrementa cada vez que un minero presenta su parte, a continuación se aumenta sin cesar a lo largo del tiempo, lo cual es obviamente indeseable.

Si la piscina no asigna más trabajo y permite que el minero a seguir para resolver problemas en la misma dificultad (que es menor que el de la red de dificultad), ¿cómo funciona el conjunto total de beneficios?

Los mineros en la piscina y se repartirán los premios para la validez de los bloques entre sí, de acuerdo a la proporción de hashpower cada minero está contribuyendo. La piscina dificultad es una forma de dar seguimiento a cada uno de los mineros de compartir, además de dividir la carga de trabajo entre los miembros del fondo.

Cada minero tiene una cierta cantidad de hashpower disponibles, y pondrá a su dificultad a un nivel adecuado para que puedan presentar sus trabajos y reclamar su parte de la recompensa. Configuración de la dificultad demasiado baja no es una manera para que un minero para reclamar una parte injusta de las recompensas, solo significa que es muy probable encontrar un hash válido antes, pero que válida hash tendrá el valor de un porcentaje menor, que los saldos de las cosas.

+696
mbaird 10 jul. 2011 8:04:06

Odio a ese tipo, pero que realmente debería echar otro vistazo a pywallet. Sus problemas pueden ser específicos para Joric del pywallet, que no ha sido actualizado en un tiempo. Hay una mejor conservado de la horquilla de pywallet por JackJack.
Si esta fue la versión que ya experimentado, siempre se puede probar la interfaz web mediante la ejecución:./pywallet.py --web y, a continuación, vaya a localhost:8989/ en un navegador web.
Que no obstante la solicitud de una línea de comandos manera de hacerlo, que con jackjack del pywallet tendría este aspecto:
./pywallet.py --dumpwallet --datadir=--DATADIR cartera=WALLETFILE --passphrase=frase de contraseña
El --passphrase opción puede haber sido el problema que se encontró con pywallet, ya que es necesario para tratar con cifrado de carteras, pero no está en el archivo léame (no muy segura de por qué es).
De todos modos, pywallet realmente parece ser su mejor apuesta para lo que estamos tratando de hacer. Si usted está teniendo problemas con ello, siéntase libre de incluir información acerca de estos problemas.

+694
ADKUMAR 7 mar. 2016 0:32:19

Sé que bitcoind está escrito en C++, pero no puedo averiguar cómo usar su API dentro de mi programa. He estado usando un wrapper) de Python de manera efectiva, pero necesito otro proceso en ejecución que es tan rápido como sea posible. Hay una biblioteca en algún lugar de bitcoind? Gracias.

O podría simplemente me apunte a un buen Json-rpc de la biblioteca?

+641
user28542 24 jul. 2017 21:44:48

Digamos que quiero dar a Alice .22 BTC. Actualmente tengo en mi cartera de 1 BTC. Debido a que Bitcoin es indivisible, tengo que pasar el 1 BTC que tengo como entrada, y .78 BTC será devuelto a mí como el cambio, mientras que el otro .22 BTC se envía a Alice. Mi pregunta es ¿cómo es esto consistente con la moneda de la invisibilidad? Es el .22 BTC y .78 técnicamente creado a partir de la 1 BTC? O es que hay cambio de otra transacción? Estoy confundido ¿cómo es indivisible, pero el cambio exacto puede ser creado.

+542
89279192393 2 jun. 2011 2:16:35

Estoy escribiendo una aplicación web que puede utilizar bitcoin como método de pago. Gracias a los consejos útiles en esta pregunta, soy capaz de generar direcciones de pago para varios firmado de proveedores. Ahora estoy tomando esa dirección y la creación de una Solicitud de Pago mediante el bitcoinJ de la biblioteca. Me gustaría, sin embargo, para que esta solicitud como una significativa URL todavía, por lo que el navegador web o cliente de realizar el pago se puede hacer algo con él. Es decir, creo que la solicitud de pago en el servidor y devolver al cliente. El cliente puede, a continuación, poner el pedido en su cartera de elección y hacer un pago.

Es la solicitud de pago capaz de trabajar de esa manera? Vi este post en stackoverflow que indica que se puede, sin embargo no he sido capaz de ver nada dentro de la API estoy utilizando que puede hacer eso. Es que una limitación de la especificación, la biblioteca que estoy usando, o es posible hacer?

+529
Michael Suede 31 ago. 2018 10:12:01

Usted debe tener una mirada en el SPV (https://en.bitcoin.it/wiki/Thin_Client_Security#Simplified_Payment_Verification_.28SPV.29_Clients).

También fue mencionado por Satoshi en su papel en la página 5 punto 8: https://bitcoin.org/bitcoin.pdf

+518
haschdl 1 sept. 2016 21:52:09

He estado leyendo acerca de blockchain horquillas y el más largo de la cadena de situaciones y realmente no puedo entender lo que va a ocurrido en la situación cuando el transacton fueron incluidos en ambos aceptados Y rechazados bloques? Si las transacciones rechazado en bloque vamos a volver a la mempool, ¿significa que habrá bloques con los duplicados de las transacciones? He dibujado algo para una mejor comprensión de este: https://imgur.com/a/3ViIu Supongo que me estoy perdiendo algo fundamental aquí. Gracias de antemano!

+457
liotims 23 jun. 2016 16:40:53

No se perderán. Pero no va a ser fácil para ellos obtener recuperado.

La página de la wiki en gastos de Transacción menciona las siguientes:

Una transacción puede ser enviar de forma segura sin cargos si se cumplen estas condiciones:

  • Es menor de 10.000 bytes.
  • Todas las salidas son de 0,01 BTC o más.
  • Su prioridad es lo suficientemente grande (consulte la sección Información Técnica a continuación)

Así que si usted tiene 1.000.000 de salidas con un satoshi, puede unirlos mediante la combinación de ellos pocos a la vez con una mayor salida.

Digamos que usted tiene otra salida de 1 BTC. Usted puede hacer una transacción con esta salida y cualquier número de 1-satoshi salidas hasta el límite de 10kB es alcanzado. Hacer la transacción sólo crean una nueva salida.

No estoy muy familiarizado con tamaños de salida, pero vamos a planear para lo peor y considerar sólo se pueden añadir dos entradas (este probablemente no sea el caso). Usted tendrá que hacer 1.000.000 de transacciones gratis de cada la combinación de la 1-satoshi con el 1 BTC. Primera tx le dará una 1,000,001 Satoshi salida para esa dirección y así sucesivamente.

Así que, básicamente, de 1 satoshi salidas no se pierde, pero que son difíciles de pasar. Sin embargo, el precio será necesario incrementar sustancialmente hasta que el esfuerzo vale la pena ir a través de esta molestia para liberar algo de satoshi.

+455
James Ball 28 ago. 2015 15:20:02

Me he dado cuenta de 2 cosas:

  1. Si empecé segundo nodo, cuando tuvo su primera 1000 tx en mempool, a continuación, el segundo nodo tiene 1000 tx menos (casi) constante hasta mempool de compensación. Esto significa que todos los recién emitido tx todos los afectados (tres) mempools, pero los nuevos nodos no pueden ponerse al día con los mayores nodos.
  2. Periódicamente mempools disminuir bruscamente (de 70 mil a 40 miles, por ejemplo). Los nodos de quitar caducado transacciones o llegar a su maxmempool tamaño y limpia mempool. Después de este evento, el monto de las transacciones es aproximadamente el mismo en los tres nodos (la diferencia es de menos de 100 tx, comparable al de varios miles en mi caso).

Transacciones anteriores, no parece ser difundido por los nodos. Y se ve a la derecha, porque si los nodos, que se emitirá todos sus mempool las transacciones de todo el tiempo, la red será hinchado por la información innecesaria. Lo nuevo nodo puede ponerse al día con viejos solamente cuando todas las transacciones, que existía antes de que el nuevo nodo de inicio, serán eliminados del mempools (ya sea por la forma). Sin embargo, puede ser que estoy equivocado y hay un camino a la fuerza de nuevo nodo recuperar todas las transacciones de mempool de mayores nodo.

(Casi) Todas las nuevas transacciones será en mempools de (casi) todos los nodos. Mempools tarde o temprano se convertirá en aproximadamente el mismo tamaño. Menor es el tiempo que hay entre el inicio de su nodo - la mejor (la diferencia será menor).

Así que si usted necesita para sincronizar mempools, uso addnode=IP:PUERTO de la opción en el bitcoin.conf archivo (sólo para estar seguro de que sus nodos están hablando el uno al otro) y a esperar un poco (aproximadamente 72 horas) y mempools será tan cerca como sea posible a cada uno de los otros. Sin embargo, tal y como yo lo entendía, siempre existe la posibilidad de que algunas transacciones estarán ausentes en algunos mempools y no hay manera de solucionarlo.

+416
Prasanna UV 24 feb. 2017 20:43:53

Como mencioné en el comentario anterior, a menos que sea absolutamente necesario su clave privada para estar en el servidor, sólo recomendaría el almacenamiento de direcciones para los fines de la verificación.

Nunca he utilizado el bitcoind antes, pero la mejor solución que he visto para la aceptación de pagos bitcoin sería usar algo como bitaddress.org para generar un gran número de dirección y la clave privada combos. Cargar las direcciones en una base de datos en el servidor y, a continuación, cuando un cliente pasa a través de una transacción que su servidor puede seleccionar un nuevo (nunca usado antes) clave para pagar. A continuación, puede utilizar un bitcoin API como el proporcionado por Blockchain para validar que el número correcto de bitcoins han sido enviados a esta dirección, y una vez que se confirma, se puede liberar el producto para el cliente.

Luego, en su tiempo libre en algún momento en el futuro, puede recoger sus Bitcoins a partir de las direcciones de haber recibido los pagos.

Este método presenta una serie de ventajas de la OMI:

1) las claves Privadas están nunca en el servidor, que son considerablemente menos vulnerable a un ataque.

2) no hay Ningún requisito para mantener todo el blockchain en su servidor, el ahorro de espacio y ancho de banda.

3) los Fondos de cada cliente se mantienen por separado (en principio) por lo que si había múltiples ventas en un corto período de tiempo, usted todavía puede identificar a cada uno por separado (si se utiliza una central de cartera, se corre el riesgo de confundir los pagos)

4) Su carpeta central es ligeramente más seguro - el cliente no paga directamente a ella. Importante tenga en cuenta que esto hace muy poca diferencia, porque se tendría la necesidad de la clave privada, pero la paz de la mente es agradable.

Agradezco que esta no es la solución que estaba pidiendo, pero creo que todavía puede adaptarse a su uso y estar más seguro.

+414
davidfmatheson 17 feb. 2015 0:17:27

Sí es posible. Usted ya respondió a su propia pregunta:

"Esto podría aumentar drásticamente el tiempo que toma para que las transacciones se confirmó, así como hace que no sea rentable para los otros mineros. Concedido esto solo duraría hasta que la dificultad es reajustado, pero tal vez podría ser suficiente para sacudir la confianza del público en la red."

Hay otros vectores de ataque (como ciertos Sybil ataques, Finney ataques, el 51% de los ataques o ataques en blockchain inmutabilidad, tales como la ETH hardfork propuesta en respuesta al reciente ataque en el DAO) que podría tener un impacto aún mayor en la confianza del público de una dificultad temporal de ajuste.

Si el atacante podría generar suficiente hash tasa de participar en un doble gasto de ataque, que además de tener un mucho mayor impacto que un cambio en el nivel de dificultad como la que usted describe.

+399
Paul Stuart 4 ago. 2013 8:02:49

La cartera de pedidos (se encuentra dentro de la Ondulación del cliente una vez que ha iniciado sesión y financiado) no en el hecho de mostrar el precio, es sólo una gran difusión y confusa interfaz de usuario que hace que sea difícil de entender ahora.

Ahora mismo, la mejor oferta es:

10BTC 10BTC 5,000.00000 XR

Y la mejor preguntar es:

43,998.00000 XRP 10BTC 10B

Lo que significa que alguien está proponiendo para comprar BTC al precio de 5000 XRPs, y otra persona que se ofrece a vender los BTC al precio de 43,399.8 XRP. Así, la extensión es enorme, pero todavía se puede decir que el "precio" de 1 XRP ahora está en algún lugar entre 0.000002 y 0.0002 BTC

+363
Youloush 9 oct. 2019 2:27:31

Acabo de formatear mi Mac, y volver a instalar la Colmena. Tengo una copia de seguridad en Dropbox opción habilitada en la Colmena, y a mi viejo bitcoin wallet archivo está ahí. Pero no puedo encontrar alguna manera de recuperar mi antiguo bitcoin wallet a mi nueva instalación. Ser capaz de volver, pero hasta que no se recupere no tiene mucho sentido para mí ahora mismo, alguien me puede ayudar con este proceso?

+358
Shady Puck 13 may. 2017 0:22:01

Estoy buscando en el JSON-RPC comandos disponibles en el QT cliente, así puedo crear un multi-tenant servicio de monedero en la parte superior de la misma. En otras palabras, la gente se iba a firmar para arriba para mi sitio y tiene la capacidad de crear una cartera, con su propia dirección.

Una preocupación que tengo es que un "cambio de dirección" sería creado y no ir en una cuenta espero y por lo tanto necesita tener una forma de manejar esto en mi aplicación.

Pregunta

  • Lo JSON RPC comandos deben (o expresamente no debe) ser utilizado en el escenario anterior? ... ¿qué consideraciones adicionales se aplican?

Por ejemplo, supongamos que quiero hacer un M N o multisig alojado cartera. Serían los comandos de "jugar bien" con el cambio de dirección?

  • Debo exportar la clave privada de la cartera, y sólo importa cuando está siendo usado o gastado?

En mi investigación he descubierto que getaddressesbyaccount sólo devuelve una Base58 dirección por "nombre de texto" en mi QT cliente. No entiendo las condiciones cuando esto va a ser poblada con más de una dirección, si puedo hacer de este manual tiene más de una dirección (para pruebas).

+268
alisaleitan 30 jun. 2011 20:31:08

La siguiente oferta de venta de bitcoins en grandes cantidades:

+104
thefigg88 2 mar. 2014 17:45:48

Dependiendo del país en el que hay varias maneras de comprar bitcoin. Mi defecto recomendación para NOSOTROS los compradores es el uso de Coinbase.com o echa un vistazo a localbitcoins.com para un cara a cara de comercio.

+23
iMacThere4iAm 25 oct. 2018 16:05:32

Mostrar preguntas con etiqueta