Cómo firmar las transacciones con Bitcoin JCE?

Tengo que firmar las transacciones con Bitcoin JCE primitivas(no bitcoinj), pero mis firmas no son considerados válidos por bitcoinj.

Traté de simular este proceso. He creado un azar hash y firma con tanto JCE y bitcoinj. Las firmas no son iguales.

Aquí está el código

import org.bitcoinj.núcleo.ECKey;
import org.bitcoinj.núcleo.Sha256Hash;
import org.spongycastle.crypto.digiere.SHA256Digest;
import org.spongycastle.crypto.params.ECPrivateKeyParameters;
import org.spongycastle.crypto.los firmantes.ECDSASigner;
import org.spongycastle.crypto.los firmantes.HMacDSAKCalculator;
importación de sol.de seguridad.ce.ECPrivateKeyImpl;
importación de sol.de seguridad.ce.ECPublicKeyImpl;

import java.de matemáticas.BigInteger;
import java.de seguridad.*;
import java.de seguridad.spec.ECGenParameterSpec;

clase pública ECDSABitcoin {

 private static final String SIGN_ALGORITHM = "SHA256withECDSA";

 public static void main(String[] args) throws Exception {

 KeyPairGenerator keyPairGenerator = createGenerator();
 final del Par de claves par de claves = keyPairGenerator.generateKeyPair();
 ECPrivateKeyImpl privateKey = (ECPrivateKeyImpl) par de claves.getPrivate();
 ECPublicKeyImpl clavepublica = (ECPublicKeyImpl) par de claves.getPublic();
 try {
 Sha256Hash hashOut = Sha256Hash.wrap(toSha256("abc".getBytes()));
 byte[] signatureBytes = signo(hashOut.getBytes(), par de claves);

 ECKey.ECDSASignature mySignature = ECKey.ECDSASignature.decodeFromDER(signatureBytes).toCanonicalised();
 ECKey.ECDSASignature bitcoinSignature = signo(privateKey.getS(), hashOut.getBytes()).toCanonicalised();
 Sistema.a cabo.println("Mi firma s" + mySignature.s + " i " + mySignature.r + "canónica" + mySignature.isCanonical());
 Sistema.a cabo.println("Verificar mi" + verificar(par de claves, hashOut.getBytes(), signatureBytes));
 Sistema.a cabo.println("Bitcoinj firma s" + bitcoinSignature.s + " i " + bitcoinSignature.r + "canónica" + bitcoinSignature.isCanonical());
 Sistema.a cabo.println("Verificar Bitcoinj" + verificar(par de claves, hashOut.getBytes(), bitcoinSignature.encodeToDER()));
 } catch (Exception e) {
e.printStackTrace();
}
}

 private static boolean verificar(Par de claves par de claves, byte[] mensaje, byte[] signatureBytes) lanza NoSuchAlgorithmException, InvalidKeyException, SignatureException {
 Firma final verifySignature = Firma.getInstance(SIGN_ALGORITHM);
verifySignature.initVerify(par.getPublic());
verifySignature.actualización(mensaje);
 volver verifySignature.verificar(signatureBytes);
}

 private static byte[] signo(byte[] mensaje, un Par de claves par de claves) lanza InvalidKeyException, NoSuchAlgorithmException, SignatureException {
 final firma Firma = Firma.getInstance(SIGN_ALGORITHM);
de la firma.initSign(par.getPrivate());
de la firma.actualización(mensaje);
 el retorno de la firma.signo();
}

 private static KeyPairGenerator createGenerator() throws NoSuchAlgorithmException, InvalidAlgorithmParameterException {
 final KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("CE");
 ECGenParameterSpec ecParam = new ECGenParameterSpec("secp256k1");
keyPairGenerator.inicializar(ecParam);
 volver keyPairGenerator;
}

 private static ECKey.ECDSASignature signo(BigInteger privateKeyForSigning, byte[] datos) {
 ECDSASigner firmante = new ECDSASigner(nueva HMacDSAKCalculator(nueva SHA256Digest()));
 ECPrivateKeyParameters privKey = new ECPrivateKeyParameters(privateKeyForSigning, ECKey.La CURVA);
 el firmante.init(true, privKey);
 BigInteger[] componentes = firmante.generateSignature(datos);
 regreso de nuevo ECKey.ECDSASignature(componentes[0], los componentes[1]).toCanonicalised();
}

 private static byte[] toSha256(byte[] mensaje) lanza NoSuchAlgorithmException {
 MessageDigest cripta = MessageDigest.getInstance("SHA-256");
la cripta.reset();
la cripta.actualización(mensaje);
 el retorno de la cripta.digest();
}
}

El resultado es:

Mi firma s 45669553786690215047884329722902825758089042579493437816717142987836102849876 r 14778973653615637448416336446742229796258878351047437829727432860950944374049 canónica de verdad
Compruebe mi verdadero
Bitcoinj firma s 24278043061766196831119988370534304503511938256487950554838614741011144316017 r 26413727078831382349368962255251267289169651926313668837949728205557969096319 canónica de verdad
Compruebe Bitcoinj falso

Como se puede ver, las firmas son completamente diferentes, aunque yo uso la misma clave privada. Lo que está mal con mi código? Yo simplemente no lo entiendo.

+581
wjans 29 sept. 2019 16:40:41
20 respuestas

La universidad de Cumbria, una Universidad Británica, es la primera Universidad Pública de la aceptación de bitcoin en el reino unido para dos de sus cursos. "Certificado de aprovechamiento Sostenible de Exchange", que será impartida en Cumbria del campus de Londres, y el "Certificado de Postgrado en Liderazgo Sostenible", que tendrá lugar en el Distrito de los lagos campus. http://www.independent.co.uk/student/news/cumbria-becomes-first-public-university-in-the-world-to-accept-bitcoin-in-tuition-fees-9074700.html

Otras opciones a nivel mundial se encuentran la Universidad de Nicosia, en Chipre (http://www.unic.ac.cy/news-and-events/73/unic-to-be-the-first-university-in-the-world-to-accept-bitcoin/112831#.UuFCG9LnaUk) y hay falsos rumores de que la ciudad de Novi Sad, en Serbia lleva así.

+913
Johanna 03 февр. '09 в 4:24

El 2016 reducir a la mitad, de 25 BTC a 12.5 BTC, que sucedió en el: sábado 9 de julio de 2016 16:46:13 UTC.

La recompensa fue reducido a la mitad en:

enter image description here

+840
JAckBlack854 27 jun. 2017 7:23:41

También puede ver más información sobre la operación en caso de que usted vaya a la ficha Transacciones, haga clic derecho sobre él y seleccione "Ver detalles de la transacción'.

En la pantalla que aparece, usted puede hacer clic en "Ver en blockchain.info' botón. Esto abre un navegador con los detalles de la transacción en blockchain.info.

Blockchain.info probablemente le dirá que la transacción no está confirmado por las razones Stephen descrito.

+840
Cosimo wiSe 17 mar. 2013 12:52:56

Quiero crear una brainwallet utilizando una costumbre diceware ya que no me gusta la original. En lugar de 7776 palabras ha 46656 porque yo uso 6 dados para cada palabra en lugar de 5.

Así que esto es lo que tengo hasta el momento, por favor, dime si me equivoco:

2 ^ (log2(46656) * 5) / (1 * 10^15) / (60 * 60 * 24 * 365) = 7 años

  • 2 ^ (log2(46656) * 5) es la entropía de una brainwallet de 5 palabras
  • 1 * 10^15 es 1 Phash/s, que es el poder de hash estoy asumiendo de este atacante. Ni siquiera sé si esto tiene sentido, porque un atacante no necesita empezar de nuevo para cada brainwallet quiere crack.
  • 60 * 60 * 24 * 365 representa un año en segundos
+799
user117529 2 sept. 2013 2:53:16

Yo estoy usando el electrum protocolo para la consulta de la historia de una dirección bitcoin usando blockchain.dirección.get_history.

Todo es bueno yo estoy recibiendo el tx de datos para cada transacción. Mi problema es que soy incapaz de encontrar una manera para obtener la cuota y los detalles de la transacción para cada tx recibido. ( Quiero usar el mismo estrato protocolo si es posible )

Gracias

+757
sigs 26 dic. 2015 23:39:07

Nunca he usado JSON antes y estoy tratando de recuperar los valores Publicados en mi sitio de coinbase. Pero no tengo idea de cómo.

Información acerca del IPN y de devolución de llamada se puede encontrar aquí: https://coinbase.com/docs/merchant_tools/callbacks

Para ser más específicos, lo que entiendo hasta ahora es que puedo usar json_decode($jsonData); para convertir los datos en JSON en PHP de datos. Pero ¿cómo se define la variable $jsonData?

Esta es la respuesta que se supone debe ser enviado a:

{"orden":{"id":null,"created_at":null,"estado":"nuevo","total_btc":
{"centavos":100000000,"currency_iso":"BTC"},"total_native":
{"centavos":2263,"currency_iso":"USD"},"custom":"123456789","botón":
{"type":"buy_now","nombre":"Elemento de Prueba","descripcion":null,"id":null},"transacción":
{"hash":"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b","confirmaciones":0}}}
+741
Mike467 28 abr. 2011 0:09:25

Felicitaciones! Su transacción en el momento de la escritura tiene 65 confirmaciones!

blockchain.info

+720
Abe Petrillo 23 jun. 2010 10:27:55

Litecoin CPU ScryptMiner

Descargar

http://www.mediafire.com/?l8i99fbyn41n97a

Tengo un i7 llegar a 40 k/Hash que no es malo

Teniendo en cuenta que con cgminer config correctamente, recibirás un k/Hash resultado similar al de la M/resultado Hash para su GPU actividades de minería

Compruebe esto hacia fuera para una guía completa de lo que sus salidas se deben usar ambos reaper & cgminer

https://bitcointalk.org/index.php?topic=117221.0

Creo que dado i5 cpu y muchas, como en los 30 años que u tiene @ su disposición, a continuación, LTC debe ser un goer

mrb afirmó que con correctamente configered s/w LTC & BTC de minería de datos debe ser en un par de ~ 0.0041/0.0040 BTC/LTC por hora (600 m-Hash BTC/600 k-hash LTC) de la GPU de la tarjeta de instalación

https://bitcointalk.org/index.php?topic=131809.msg1414530#msg1414530

+682
openyourstackoverflow 27 dic. 2012 18:05:29

Estoy tratando de configurar Diablo-D3 Minero en mi equipo (soy consciente de que hay otras soluciones, pero necesito algo escrito en Java para un proyecto personal) y veo en la consola me estoy poniendo a cero los hash:

mh: 0.0/0.0 | a/r/hwe: 0/0/0 | gh: 0.0 0.0 | fps: Infinito

¿Por qué mi hash tasa cero cuando tengo NVIDIA CUDA, OpenCL 1.2 CUDA 9.1.75 y GeForce GTX 960M instalado en mi sistema y está siendo detectado por el Diablo?

Gracias de antemano.

+665
Mahla 5 abr. 2013 23:26:53

Aquí está la dirección de recepción en blockchain: https://blockchain.info/address/3EHttCtQtNU4BZvf5YvjbnDruhd1ubDvBT. Parece 0.028028 BTC donde recibió.

+664
morpheus05 22 sept. 2014 21:53:53

Básicamente, si somos de alguna manera encontrar una manera de separar los honorarios del tx a sí mismos

  • no es posible, sin hardforking bitcoin
  • a nadie le interesa y nadie va a implementar
  • usted puede crear su propio altcoin con esta regla del consenso incluido

Podría un sistema de ayuda a la Bitcoin en forma ?

¿Por qué crees que bitcoin necesita tu ayuda?

+525
stwienert 22 mar. 2017 23:56:30

Usted podría utilizar la poda de modo que sólo almacena los bloques después de la altura que usted está interesado en. Creo que tienes que descargar para comprobar el pasado de la historia, pero usted no tiene que almacenar todo en el disco.

Ver esta llamada RPC para obtener más información.

+452
Elizabeth Gerzowski 13 abr. 2018 14:58:12

hay un testnet para blockchain.info aquí , pero no puedo encontrar una dirección url para llamar a la api(s) en testnet como tales, tenemos en la red principal

en la red principal https://api.blockchain.info/v2/receive?xpub=$xpub&callback=$callback_url&clave=$clave

y, por ejemplo, en testnet https://api.testnet.blockchain.info/v2/receive?xpub=$xpub&callback=$callback_url&clave=$clave

hay alguien que sepa donde la testnet api url es? Gracias,

+281
David Obando 29 dic. 2014 23:43:53

¿Cómo puedo confirmar que la transacción ha sido recibido ?

¿Cómo puedo confirmar el valor de la transacción es correcta ?

Hay dos formas:

  1. Establecer y ejecutar su propio somecoin* nodo, y escribir un módulo de pago para su sitio web\store para interactuar con él. Dicho módulo debe proporcionar una forma de consulta de información acerca de una transacción, la solicitud de una dirección de pago, y así sucesivamente.

* somecoin - bitcoin o cualquier altcoin

¿Hay alguna API que podría utilizar para lograr lo que estoy buscando ?

  1. Usted puede utilizar servicios de terceros. Son propietarios completo de nodos y proporciona la API. Usted puede crear módulo de pago en la parte superior de dicha API.

Si he tenido que devolver un usuario, ¿cómo puedo hacer esto ?

Es depende el pago del módulo de realización, se necesita un método para crear una transacción de reembolso a la dirección del usuario.

+278
Woorna 5 abr. 2018 8:41:28

¿Cómo se establece el "txindex = 1' en bitcoincore?

He instalado en linux ubuntu. No puedo encontrar el /home/bitcoin/bitcoin.conf archivo.

Ruta " /home/bitcoin/share/examples/bitcoin.conf'el bitcoin. conf se encuentra el archivo, pero no hay lugar para establecer txindex = 1 en el interior.

+268
Dennis Rogers 13 ene. 2010 19:57:45

Por ejemplo, es la minería, requiere para producir cálculos para soportar el sistema, y si es así, ¿cómo sería el sistema de gestionar una enorme caída en la minería, con un aumento en las transacciones?

Los mineros no "compartir la carga", pero en lugar de competir para encontrar una respuesta para el mismo problema: un nonce para el siguiente bloque que hace el encabezado de bloque hash menor que un cierto valor. La dificultad de este problema es establecer artificialmente (pero distribuido por consenso) para mantener el ritmo de los nuevos bloques que se creó en torno al 1 por 10 minutos.

Si una gran cantidad de mineros de dejar de fumar, la dificultad es baja automáticamente y transacciones seguirán ser confirmado en la misma proporción. En este sentido, no es necesario tener una gran cantidad de mineros.

Sin embargo, esto hace que la red sea menos segura, ya que hace que sea más fácil para un atacante con una gran cantidad de poder de cómputo (es decir, más del 50%) para hacer grandes cambios en el bloque de la cadena. Que permitiría duplicar el gasto de los ataques entre otras cosas.

Para evitar que los mineros de dejar de fumar, los honorarios de la transacción tendría que compensar la reducción de bloque de recompensa. Así que la pregunta real es: ¿cuáles serán los gastos de transacción convertido en la manzana de la recompensa tiende a cero? Y van a ser suficientes para mantener el bloque de la cadena de seguro?

+236
breaking dawn 12 nov. 2018 17:47:54

net.cpp por ejemplo:

// uso de un nUnkBias entre 10 (sin conexiones salientes) y 90 (8 conexiones salientes) CAddress addr = addrman.Seleccione(10 + min(nOutbound,8)*10);

Lo que hace esta línea de código exactamente decir/hacer?

+216
Calum 18 nov. 2013 2:42:10

Estoy creando muchos derivados de direcciones de un xprv (HD clave privada).

He estado leyendo acerca de la brecha problema de límite. La brecha límite es de 20 direcciones por delante.

¿Cómo puedo obtener mi cartera para detectar los fondos, en las direcciones, que han superado la brecha límite?

es decir, m/100 derivados de transacciones de dirección no ser detectado, hasta que la brecha límite de llenado. Hay trucos para conseguir alrededor de esto?

Si no, pienso a granel de importación correspondiente WIF claves para cada dirección. Hacer que la gente recomienda hacer esto?

Idealmente me gustaría que todo controlable a través de la 1 de la clave maestra.

+174
La Thortilla 26 dic. 2014 12:50:34

Yo se bien con relación a cómo el desbloqueo de la secuencia de comandos debe ser. Yo nunca he usado bitcoire.io de la API, pero por lo que puedo ver, parece que usted puede construir la utxo haciendo referencia a la información que ya tiene.

(Tomar la respuesta con un grano de sal, ya que nunca he utilizado la API, la información que estoy dando es más de una estructura de la transacción / scripting punto de vista que de la propia API).

Parece que el UTXO estructura de la API es un poco desordenado, ya que mezcla los datos que realmente se refiere a un UTXO (txId y el índice) con los datos que en realidad se refiere nuevo transacción de salida (dirección, guión y satoshis)

txId se puede encontrar en el anterior tx c85ab15eddd1faabc86b36b5fb0a963ba4ebb3fd5839404708c5e0eb2dcaa545.

El índice que debe pasar es 0, ya que es la única salida generada por el anterior tx.

Supongo que la dirección del campo se refiere a la salida de la dirección (la dirección en la que desea enviar bitcoins a), ya que tienen la suficiente información, con el txId y el índice para construir la entrada de su nueva transacción.

Supongo que el script se refiere a scriptPubKey, ya que el código es la firma de la transacción después, lo que debe llenar el scriptSig campo. De acuerdo a esto, la secuencia de comandos proporcionada debe ser el que requiere la clave pública asociada con la dirección Bitcoin para que usted lo que a la transferencia de los fondos (P2PKH), en ese caso, debería ser algo como:

76a9<HASH160 de la clave pública>88ac que es

<OP_DUP><OP_HASH160><HASH160 de la clave pública><OP_EQUAL><OP_CHECKSIG>

satoshis es la cantidad de ellos que desea pasar de la salida anterior. Tener en cuenta que, ya que sólo hay una salida en la anterior tx, si usted no gastar todos los fondos de ella, el resto será considerado como de los gastos.

Finalmente, usted debe realizar 2 de las 3 firmas con las claves privadas que tienen, me parece que .signo(myKeys); hace el truco.

Puede el demonio de la deserializa tx de datos utilizados para responder a la pregunta en http://tbtc.blockr.io/api/v1/tx/raw/c85ab15eddd1faabc86b36b5fb0a963ba4ebb3fd5839404708c5e0eb2dcaa545

+171
Subbysmom 17 ene. 2015 16:47:31

Es posible la búsqueda de cuánto pago de la transacción fue pagado por una transacción específica?

Si la transacción, por ejemplo, en blockchain.infopuedo ver a un campo denominado "Cargo", pero supongo que es una suma de todos los gastos combinados en esta transacción.

+94
Grace Maguire 7 dic. 2016 20:09:36

Mostrar preguntas con etiqueta