Es posible leer cada una de las transacciones mi nodo relés?

Me gustaría añadir cada transacción válido mi nodo recibe a mi propia base de datos.

Por el momento, estoy usando getrawmempool cada segundo para encontrar nuevas transacciones y, a continuación, obtener los datos para ellos el uso de getrawtransaction.

Sin embargo, estos bitcoin-cli consultas puede ser lento. Entonces, ¿hay una manera de "interceptar" cada transacción válido mi nodo relés sin tener que usar bitcoin-cli? Preferiblemente usando PHP?

+192
Caya Hefner 23 jun. 2018 14:08:08
20 respuestas

Lo que puedo hacer, soy incapaz de mina el 1er bloque después de la génesis de bloque. Todo el tiempo, he asumido que me han minado la Génesis de bloque, y soy incapaz de mina el 1er bloque usando "setgenerate verdadero" de comandos. Pero, puedo estar equivocado. Yo puede que en realidad NO han minado la génesis de bloque. Sí, me tiene confundido. Me han generado nuevas claves. Así que, aquí está lo que he hecho desde el principio.

1) Código antes de génesis bloque:

En "chainparams.php" he actualizado a la siguiente.

boost::asignar::map_list_of(0, uint256("0x01"));
static const puntos de control::CCheckpointData datos = {
&mapCheckpoints,
 1538530667, // * UNIX timestamp de la última comprobación de bloque
 0, // * número total de transacciones entre el génesis y el último punto de control
 // (el tx=... número en el SetBestChain de depuración.las líneas de registro)
 500 // * se estima que el número de transacciones por día después de que el punto de control
};

pchMessageStart[0] = 0x91;
pchMessageStart[1] = 0xc5;
pchMessageStart[2] = 0xfa;
pchMessageStart[3] = 0xe3;
vAlertPubKey = ParseHex("04ae6724abca5c2e2e9524d3cd10a303e0ef3f02d324bac4d06aceb873fb8591f1a968d9a2e5ac7024d5a45643d189b99015314d7ef1ff5f8799b9680d6e668471");

const char* pszTimestamp = "mi nuevo mensaje aquí. tratando de aprender a crear una altcoin.";
txNew.uout[0].nvalor = 50 * de la MONEDA;
txNew.uout[0].scriptPubKey = CScript() << ParseHex("047394ed7e750f6202487e7c8ec1e61bbd2fb5cdc6f0f5488af4d2ea082bec606fea95eea381cd0466cf6ea53d8f42c299f9d0e2a3bc313515fc52f02a16fef0a0") << OP_CHECKSIG;
el génesis.nTime = 1538530667;
el génesis.nBits = 0x1e0ffff0;

assert(hashGenesisBlock == uint256("0x01"));
assert(génesis.hashMerkleRoot == uint256("0x01"));

fRequireRPCPassword = false;
fMiningRequiresPeers = false;
fAllowMinDifficultyBlocks = false;
fDefaultConsistencyChecks = false;
fRequireStandard = true;
fMineBlocksOnDemand = true;
fSkipProofOfWorkCheck = false;
fTestnetToBeDeprecatedFieldRPC = false;
fHeadersFirstSyncingActive = false;

vFixedSeeds.clear();
vSeeds.clear();

En el main.cpp archivo he cambiado la siguiente

int64_t nSubsidy = 0;

si(nHeight == 0) {
 nSubsidy = 0;
} else if( .......

Tenga en cuenta, también he intentado cambiar nSubsidy valor para nHight = 0 a "50 * MONEDA" y también a un mayor valor como "5000 * MONEDA". Todo lo que los resultados en el mismo problema.

2) Utiliza el siguiente código para crear la génesis de bloque.

si(génesis.GetHash() != uint256("0"))
{
 printf("MSearching para la génesis de bloque...\n");
 uint256 hashTarget;
hashTarget.SetCompact(génesis.nBits);
 mientras(uint256(génesis.GetHash()) > uint256(hashTarget))
{
++génesis.nNonce;
 si (génesis.nNonce == 0)
{
 printf("Mainnet NONCE ENVUELTO, el incremento de tiempo");
 std::cout << std::string("Mainnet NONCE ENVUELTO, el incremento de tiempo:\n");
++génesis.nTime;
}
 si (génesis.nNonce % 10000 == 0)
{
 printf("Mainnet: nonce %08u: hash = %s \n", génesis.nNonce, génesis.GetHash().ToString().c_str());
}
}
 printf("Mainnet bloque.nTime = %u \n", génesis.nTime);
 printf("Mainnet bloque.nNonce = %u \n", génesis.nNonce);
 printf("Mainnet bloque.hashMerkleRoot: %s\n", génesis.hashMerkleRoot.ToString().c_str());
 printf("Mainnet bloque.GetHash = %s\n", génesis.GetHash().ToString().c_str());
}

3) tengo los siguientes resultados.

el bloque.nTime = 1538530667
el bloque.nNonce = 3916247
el bloque.hashMerkleRoot: 668d1e9c1c4f354589b9357d0ac0135b5e236f13ea8cf3bdf79e3670d347e07b
el bloque.GetHash = 00000320986bcdf6c2e62f36321232ce1dfc77dc0e0b4a79e2199d8b77fa4820

4) Actualiza la anterior información en el archivo "chainparams.cpp".

boost::asignar::map_list_of(0, uint256("00000320986bcdf6c2e62f36321232ce1dfc77dc0e0b4a79e2199d8b77fa4820"));

el génesis.nTime = 1538530667;
el génesis.nBits = 0x1e0ffff0;
el génesis.nNonce = 3916247;

assert(hashGenesisBlock == uint256("00000320986bcdf6c2e62f36321232ce1dfc77dc0e0b4a79e2199d8b77fa4820"));
assert(génesis.hashMerkleRoot == uint256("668d1e9c1c4f354589b9357d0ac0135b5e236f13ea8cf3bdf79e3670d347e07b"));

5) se suprimió el código que he usado para crear la génesis de bloque que he utilizado en el paso 2 (arriba).

6) Compila de nuevo, sin errores ni problemas.

7) que hice de esta corriente VPS como servidor y crea una "moneda.conf archivo" y se añade lo siguiente:

servidor=1
rpcuser=usuario
rpcpassword=contraseña
escuchar=1
daemon=1

8) yo NO clon de este servidor para crear un nuevo cliente. En lugar de ello, he creado un nuevo VPS, instalado todas las dependencias y copiar la carpeta completa - completa el proyecto en el que el cliente VPS para configurar el cliente.

9) he añadido el siguiente en "moneda.conf" archivo en el cliente de VPS.

addnode=<dirección ip del servidor> (Ex: 207.87.10.2)

10) Comenzó con la billetera "de la moneda-qt" en el servidor. No hay errores.

11) Comenzó con la billetera "de la moneda-qt" en el cliente. No hay errores.

12), Ambos conectados sin problemas.

13) Ejecutó el comando siguiente en el cliente de la mina el 1er bloque.

setgenerate verdadero

Tengo el siguiente error.

"la cartera keypool vacío"

se detuvo setgenerate el uso de

setgenerate falso

14) Ejecuta el siguiente comando.

keypoolrefill

15) una vez más trató de setgenerate

setgenerate verdadero

16) activado la depuración.archivo de registro. Esto es lo que estoy consiguiendo.

CreateNewBlock(): tamaño total de 1000
ERROR: CheckProofOfWork() : hash no coincide con nBits
ERROR: CheckBlockHeader() : prueba de trabajo fallado
ERROR: CheckBlock() : CheckBlockHeader error
CreateNewBlock() : TestBlockValidity error
keypool de retorno de 2
keypool reserva 2

He impreso el hash en el archivo de depuración. Esto es lo que me pasa.

Hash = 35301222bb9164c21222107e1c43045c50c190d63eb8be2ad193ed38228b26a1
bnTarget = 00000fffff000000000000000000000000000000000000000000000000000000

Estoy atrapado aquí. Lo que puedo hacer, cuántas veces he de empezar de cero, me acaban aquí.

Hay alguna otra opción que tengo para cambio relacionado con ProofOfWork? ¿Qué estoy haciendo mal? Alguien me puede ayudar?

+905
Hamster 03 февр. '09 в 4:24

La 0.3.7 actualización efectivamente, la revisión de la ejecución del script de error que se describe, el código vulnerable a continuación es eliminado y reemplazado con funciones de ejecución del scriptSig y, a continuación, el scriptPubKey en la misma pila.

si (!EvalScript(txin.scriptSig + CScript(OP_CODESEPARATOR) + txout.scriptPubKey, txTo, nIn))

Previamente lo que iba a suceder es que la secuencia de comandos de dos cintas fueron, literalmente, concatenados, entonces se ejecuta como uno. El problema aquí es que podemos utilizar un trailing OP_PUSHDATA en el scriptSig empuje de toda la scriptPubKey a la pila como un solo elemento de datos en lugar de discretos códigos de operación. Nuestro scriptSig simplemente sería un empuje código de operación para la longitud de la scriptPubKey además de un OP_CODESEPERATOR. Al final de la ejecución el único elemento restante de la pila no es cero, por lo que la evaluación devuelve true y podemos gastar las monedas que nos gusta.

+884
AlbeyAmakiir 19 ene. 2016 19:32:22

Esto me ocurrió el día de hoy: el continuo ataque de ransomware (comenzó el 12 de Mayo) causada por la WannaCry virus infectado a más de 230 000 equipos hasta la fecha (fuente: Wikipedia). Esto significa que, probablemente, muchas de estas personas (y/o empresas) tendrán que pagar la demandada precio de Bitcoin, que, intuitivamente, debe conducir a un rápido crecimiento de BTC valor.

Sin embargo, como se puede ver en la imagen de abajo (BTC a USD gráfico tomado de Kraken), esto no está sucediendo. Esto es un poco confuso, así que estoy en busca de una explicación. enter image description here

+858
EFrog 27 sept. 2010 5:00:45

afaik - 25 sólo sucede si la salida está intentando usar está ya gastado (ya sea confirmado en la cadena o por un TX en su mempool)

+853
Shy Girl 1 sept. 2012 18:05:39

Dos razones:

  1. Por lo tanto, quien envió a su "dirección" no puede decir que ha enviado el 31 de bitcoins ("a Ver! Mira en el bloque explorer, hay dos transacciones enviar a "A", uno de 20 bitcoins y uno de 11-- me envían de vuelta el extra de 11!")

  2. El uso de un nuevo cambio de dirección hace que sea más difícil que otras personas la pista de cuántos bitcoins tiene o dónde estás gastando.

+835
Vasanth Kumar 31 mar. 2013 19:20:14

A donde puedo ir para ver si me puse un 1 satoshi / byte tarifa que se va a ir a través de una transacción bitcoin cuando se utiliza un 3xxx segwit dirección?

+740
Tar 13 mar. 2017 12:34:49

Multisig transacciones puede tener múltiples direcciones. Para obtener un ejemplo que he encontrado en webbtc la lista de multisig transacciones, vea 055f9c6dc094cf21fa224e1eb4a54ee3cc44ae9daa8aa47f98df5c73c48997f9 (utilizando el conocimiento de la api, ya que es práctico).

{
 "txid": "055f9c6dc094cf21fa224e1eb4a54ee3cc44ae9daa8aa47f98df5c73c48997f9",
 "versión": 1,
 "locktime": 0,
 "vin": [
{
 "txid": "b187426f2fdd5a7ac2f49d822f68e07f48486ee53a8a45de2494f12acb37a0d8",
 "vsal": 3,
 "scriptSig": {
 "asm": "3046022100d78c31a20fa11533475be893b229eb4d252e600dcc2a0735d360c541b6aec813022100e3eaa72c915ef47d94ccbd18c2ba6d9ae5b98be6e9fbf968d4bbbb003e06d68701 030e001332b43924be343986cca3df669f57b0dedd120990e727787f8dea50fdbc"
},
 "secuencia": 4294967295,
 "n": 0,
 "direccion": "1FrbMcddiM1v3HMpUqygjZYCamBykWCWao",
 "valueSat": 1114144,
 "valor": 0.01114144,
 "doubleSpentTxID": null
}
],
 "vsal": [
{
 "valor": "0.00010860",
 "n": 0,
 "scriptPubKey": {
 "asm": "1 030e001332b43924be343986cca3df669f57b0dedd120990e727787f8dea50fdbc 20434e545250525459000000140001a9e0e85838b5000000174876e800010053b6 2 OP_CHECKMULTISIG",
 "reqSigs": 1,
 "tipo": "multisig",
 "direcciones": [
"1FrbMcddiM1v3HMpUqygjZYCamBykWCWao",
"1HT7xU2Ngenf7D4yocz2SAcnNLW7rK8d4e"
]
}
},
{
 "valor": "0.00010860",
 "n": 1,
 "scriptPubKey": {
 "asm": "1 030e001332b43924be343986cca3df669f57b0dedd120990e727787f8dea50fdbc 20a3c3000000000000000000000000000000000000000000000000000000000000 2 OP_CHECKMULTISIG",
 "reqSigs": 1,
 "tipo": "multisig",
 "direcciones": [
"1FrbMcddiM1v3HMpUqygjZYCamBykWCWao",
"1HT7xU2Ngenf7D4yocz2SAcnNLW7rK8d4e"
]
}
},
{
 "valor": "0.00010860",
 "n": 2,
 "scriptPubKey": {
 "asm": "1 030e001332b43924be343986cca3df669f57b0dedd120990e727787f8dea50fdbc 100000000000000000000000000000000000000000000000000000000000000000 2 OP_CHECKMULTISIG",
 "reqSigs": 1,
 "tipo": "multisig",
 "direcciones": [
"1FrbMcddiM1v3HMpUqygjZYCamBykWCWao",
"1HT7xU2Ngenf7D4yocz2SAcnNLW7rK8d4e"
]
}
},
{
 "valor": "0.01061564",
 "n": 3,
 "scriptPubKey": {
 "asm": "OP_DUP OP_HASH160 a2f2d251cc06ec1e789800127e3fa6ed9e515651 OP_EQUALVERIFY OP_CHECKSIG",
 "reqSigs": 1,
 "tipo": "pubkeyhash",
 "direcciones": [
"1FrbMcddiM1v3HMpUqygjZYCamBykWCWao"
]
}
}
],
 "blockhash": "0000000000000000491fdff68a1c99de7798278a791e461b8d5bebdd9df9de46",
 "confirmaciones": 1,
 "el tiempo": 1401911255,
 "blocktime": 1401911255,
 "valueOut": 0.01094144,
 "tamaño": 433,
 "valueIn": 0.01114144,
 "honorarios": 0.0002
}
+685
scorpion 17 may. 2010 0:29:14
  1. Usted puede obtener la clave pública de una clave privada
  2. Aunque, usted no puede derivar una clave privada a partir de una clave pública
  3. Se puede derivar una dirección bitcoin de una clave pública
  4. Aunque, Usted no puede derivar una clave pública de una dirección bitcoin

Medios:

PrivateKey -> Clavepublica -> Dirección

+660
user40096 19 jul. 2019 16:38:56

He leído el bitcoin papel blanco y estoy en el proceso de lectura de etereum del. El segundo documento que se lee en un punto : "en la Actualidad, es viable para algunos equipos de escritorio y no los teléfonos, y más adelante, en el futuro, sólo las empresas y los aficionados podrán participar."

No quiere esto decir que algún día el resto de blockchain nodos sólo será controlado por los muy pocos que tienen el dinero y la infraestructura necesaria, como el más pequeño de los nodos de no ser capaz de permanecer en el largo plazo ? No quiere esto decir que a medida que pasa el tiempo, el blockchain se vuelve menos descentralizado y más centralizada ? Si es así, otra consecuencia sería la disminución de la seguridad de la blockchain : el resto de poderosos nodos de adquirir la capacidad de falsas transacciones, derecho ?

+568
fergbrain 3 ago. 2018 6:30:03

Hacer todas las carteras uso específico de los exploradores? Si es así, ¿hay una manera de identificar que el explorador de la cartera está utilizando? La mayoría de los principales-mid tier carteras parece muy ambigua o no parecen hablar de esto en absoluto.

+566
Neil Stevens 25 jul. 2014 16:33:41

Así que depende de qué idioma se utiliza para analizar el JSON.

La salida de la API está en formato JSON (JavaScript Object Notation). Esta notación es muy común en la API de espacio y cuando la lectura raw bitcoin transacciones y blockchain de datos. Cuando se consulta la información de la dirección de bitcoin core console es en formato JSON. Piense en ello como un conjunto de matrices. Si usted tiene una matriz de "Alimentos" y que la matriz contiene "Fruta", "JunkFood", y "Snacks", y cada una de estas matrices contienen valores adicionales dentro de ellos. Así que si desea acceder a "apple" sería en virtud de Alimentos> Frutas> Manzanas.

Con el BTC-e de la API JSON de respuesta se le da la categoría de "btc_usd" y, a continuación, dentro de esa matriz es "alta", "baja", "avg", "último", etc. Con el fin de seleccionar sólo "última" sería bajo btc_usd -> la última.

Normalmente yo uso PHP y es muy simple de hacer. He aquí un phpfiddle: http://phpfiddle.org/lite/code/jsah-t4dv

<?php
$url = "https://btc-e.com/api/3/ticker/btc_usd";
$decode = json_decode(file_get_contents($url), true);
$precio = $decodificar["btc_usd"]["apellido"];
echo $precio;
?>
+546
tiranaghoul 21 sept. 2010 6:13:05

¿Cómo es posible que en NOSOTROS, si alguien reveiced salario en Bitcoin, justo en ese día la renta estar sujeto a impuestos?

Debido a que usted tuvo ingresos. Si su pago en dólares de bitcoin, Euros, o de grano no importa. Recibido el pago por los servicios y que los ingresos tributables.

En Europa, en Hungría sólo cuando el BTC es vendido y enviado a una cuenta bancaria que estar sujeto a impuestos.

Diferentes países del impuesto bitcoin de manera diferente, pero que sería muy extraño. Nunca he oído hablar de un país que tenía un impuesto a la renta, pero exentos de impuestos los ingresos que no estaba en forma de moneda. Supongo que es posible tener un país que trata de un comercio de trabajar para bitcoin, como el trueque y los impuestos sólo el trueque como de los ingresos si el comercio activo se vende.

Mi asesor fiscal dijo que la razón es porque BTC no es reconocido como una moneda en nuestro banco central, esta es la diferencia entre la UE y EEUU BTC impuestos. ¿Estás de acuerdo?

Los estados unidos no tratar de BTC como moneda, lo tratan como una mercancía o genérica de los activos. NOSOTROS impuesto sobre la renta no importa si a usted le pagan en dólares, bitcoin, o pieles-sigue siendo la renta gravable tan pronto como no hay obstáculos importantes para usted tomar posesión de ella.

+513
Donarsson 12 jun. 2019 11:10:30

La información que usted está buscando en es incorrecta y parece ser el resultado de la interpolación de la gráfica, no hubo ninguna dificultad para los cambios que se asemejan a los que en el Bitcoin bloque de la cadena. La dificultad de los cambios son cada 2016 bloques, que es de aproximadamente 2 semanas si no hay ninguna dificultad de cambio en el período.

+506
Merci Me 27 abr. 2011 8:05:21

Creo que si esto se hizo extensivo, esto podría desestabilizar toda la red. Ya nadie quiere eso, que no se convierta en extenso.

La cosa más fundamental que el cliente se decida cuál es el actual válido bloque de cadena. Supongo que ver a dos competidores hash cadenas en la red. ¿Cómo puedo saber cuál debo seguir? La respuesta es, primero asegúrese de que ambas cadenas son válidos -- un inválido bloque de la cadena nunca puede ganar. ¿Cómo puedo validar la cadena de hash si no puedo asegúrese de que cada transacción de entrada en válidamente reclamos de una transacción anterior está la salida? ¿Cómo puedo hacer eso sin una completa tabla de transacciones?

Supongamos que veo una transacción que de reclamaciones, alguien me envió 50 Bitcoins. ¿Cómo puedo determinar los 50 Bitcoins son, de hecho, válido? Bueno, tengo que asegúrese de que cada entrada de la transacción válidamente reclama una salida de una transacción anterior. ¿Cómo puedo hacerlo si no tengo el completo conjunto de transacciones?

En otras palabras, un cliente no puede determinar si se ha recibido de los fondos si no tiene acceso a un mapa de todos los no reclamados de la transacción de salida indexados por ID de transacción.

+308
perencia 31 ago. 2016 10:48:29

No hay almuerzo gratis. Usted puede pasar todo el UTXOs en una transacción para difundir los bytes de salida a través de muchas entradas, pero cada entrada todavía se necesita un cierto número de bytes. A mi conocimiento, no hay ninguna manera más eficiente de gasto que el estándar de tipos de transacción. (Si la hubo, que sería la norma.)

Por supuesto, usted puede adjuntar una tasa por debajo de la actual tarifa vigente, y la esperanza de que la transacción se recogió durante un período de transacción bajo demanda (cuando las tasas de caída), o esperar hasta una hora para emitir su transacción. Ciertas horas del día o días de la semana puede ser un poco mejor, usted podría mirar hacia atrás en el histórico de cargos por transacción para obtener un sentido. Pero no hay ninguna garantía de que un bajo costo de transacción serán confirmadas.

+285
grumpykat 8 abr. 2010 3:45:20

En GDAX sitio web, afirman que 3 confirmaciones que se necesita para finalizar su tx en. Supongo que han hecho una investigación exhaustiva sobre este y podría haber llegado con un poco de lógica para protegerse de las ramas temporales.

En algunos otros posts, a menudo me encontré a gente decir que al menos 6 es necesario. Me refiero, obviamente, es el trade-off entre eficiencia y robustez, pero solo me pregunto ¿cuáles son algunas de las posibles maneras de impulsar este número para el extremo inferior, mientras que mantener el sistema lo más robusto posible.

+223
trevor jones 5 dic. 2015 13:32:59

En primer lugar usted necesita para decidir cuál de los cripto-moneda que usted desea a la mía: Bitcoin, Litecoin, Peercoin, Dogecoin o cualquier otro de los cientos de alternativas. Usted debe ya he descargado el monedero de la moneda.

Usted tiene que decidir si va a unirse a una piscina o ir en solitario a la minería. A menos que la moneda que usted desea mina fue lanzado el día de ayer (literalmente), tiene muy pocos usuarios o que tienen enormes cantidades de hashpower, olvídate de ir en solitario.

Lo siguiente que necesita para abrir una cuenta en un minero de la piscina hay cientos por ahora, un mínimo de 1 para cada uno de los cripto-moneda (bitcoin, litecoin y dux, tienen docenas cada uno). Minero piscinas tienen sus páginas web donde usted se registre, crear su nombre de usuario y establecer su uenta por lo que las monedas que la mina vaya a su cartera.

Al final del proceso de registro (o en la página de ayuda) se le dará la dirección IP de un puerto, se debe señalar de minería de programa. Finalmente iniciar su minero y ver como conseguir monedas, esperemos que en un beneficio frente a los costes de la electricidad.

También hay la opción de usar un p2pool, estos son descentralizado piscinas donde usted no tiene que abrir una cuenta en una página, no tiene que confiar en la piscina del administrador para ser honesto, etc. Pero estos requieren que usted tenga más en profundidad el conocimiento de cómo cryptocoins y minería de trabajo, así que deje a un lado para más adelante.

+187
Jeff Uy 26 dic. 2017 19:03:58

En orden para que un nodo de retransmisión de una transacción, la transacción debe satisfacer el nodo del minRelayTxFee. Esta tasa de reducción de la tasa de descuento está ajustado por defecto a 1000 satoshi por kvB (= 1 satoshi por vbyte). Su primera transacción podría conseguir incluido en un bloque si los mineros eran conscientes de ello, pero es probable que no les llega. Usted debe tratar a la emisión de la primera transacción con 1 sat/vbyte o enviar directamente a los mineros a través de sus respectivas APIs.

+111
Kenan Casey 21 oct. 2014 12:02:55

Usted siempre puede gastar bitcoins para que usted sea el propietario de la clave privada. No importa actualizaciones, versiones, cambios de protocolo. Si usted tiene su clave privada, a continuación, usted puede conseguir / calcular / derivar la clave para abrir su Bitcoin wallet.

Puede ser que las cosas se vuelven obsoletas, como las unidades de disquete.

Lo más importante es que las funciones de hash que se utiliza actualmente puede ser roto en algún punto del tiempo. En este caso, usted tendrá sólo horas para reaccionar. O, la comunidad puede ahorrar a través de algún tipo de medidas en contra.

+44
xmenticle 3 nov. 2016 14:50:23

Trate de buscar en línea y fuera de línea las direcciones aquí:

http://blockchain.info/

Este bloque explorer listas de transacciones que aún no son parte de un bloque. Si la transacción se encuentra allí, probablemente se convertirá en parte de un bloque pronto.

+28
Sidharth J Dev 14 nov. 2015 23:56:25

Mostrar preguntas con etiqueta