Relacionado Cómo se confirmó mi propia transacción de doble gasto
¡No se trata de gastos dobles y creo que la pregunta relacionada no se trata de éter de gastos dobles!
En testnet3 de bitcoin, veo (usando https://github.com/bitpay/bitcore-p2p ) muchos tx cambian de identificación
guión:
Envío algunos tBTC usando http://testnetwallet.com
Veo un utx con txid de XXXX transmitido a la red con mis entradas y yendo a mi dirección de prueba (todo se ve bien)
Sigo monitoreando mirando todos los txs transmitidos
sucede un nuevo bloque .
Busco entre los txids del bloque pero no encuentro mi txid
Consulto mi dirección de recepción en algún servicio web del explorador de bloques y veo que el txid de mi tx se renombró a YYYY
¡Voy a mirar el bloque nuevamente y veo que YYYY está en su matriz tx!
Dejo de monitorear todos los tx transmitidos
¡Estoy empezando a pensar que (la maleabilidad de tx) está sucediendo cuando los mineros incluyen los tx en los bloques!
Nunca veo un tx con txid YYYY transmitido NUNCA (¡estoy viendo todas las transacciones!) ¡Esto sugiere que el txid está siendo alterado!
He estado viendo que esto sucede ahora durante más de 2 semanas y no encontré a nadie hablando de eso aparte de la primera persona hoy (4 de abril de 2017) en la pregunta relacionada.
He intentado muchas cosas en mi código para dejar de confiar en el txid para identificar si mi tx tiene 6 confirmaciones. Pero me resulta imposible ... ¡actualizar mi tx con su nuevo txid!
He intentado (muchas veces de diferentes maneras) pedir a los pares (pares p2p) que obtengan datos para cada txid irreconocible en bloques nuevos, pero muchas veces el par parece desconectarse...
Mi pregunta es: ¿Qué debo hacer en esta situación?
Nota: estoy tratando de no usar servicios de terceros
también relacionado: ¿Cómo vio esto blockr.io?
¡Veo que todos los txs cambian de identificación, no solo los míos! Estoy recopilando cada txid que veo transmitido y colocándolos en una matriz llamada visto, luego, cuando ocurre un bloque, busco cada tx en el bloque en mi matriz vista.
durante los últimos diez bloques más o menos hoy tengo console.logged en cada bloque
visto:1/52 por 73 compañeros visto:0/4 por 73 compañeros visto:0/35 por 73 compañeros visto:0/22 por 73 compañeros etc...
El 99% de todos los txs (todos) en testnet3 están cambiando txid
estoy escuchando max peers 150
{ hash: '00000000000017f2a1d8ff44f149e7ead61a38e1a03217c33762ed9ace3c0c7d', validProofOfWork: true, validTimestamp: true, prevHash: '000000000000178c28b96e945965b9311ea4005a66e8c5c2701d30f928a498d8', txs: [ '775b7b0bf9345cbee62e3af57e1660a6fd92d0a089fd0694e4804a7190dd4a05', '1133ba34f4ef95af8a53c9698877cf8b7dc0e03d3095c371c0e2a1b8cd395ce2', '14df326c04bf2da2edbd4f9f04810916b95144eeef67570458c06449d3a56fc4', 'b969a4bdab4b6a5ea91500b4230c3eadc9aa807cca000ecce6686450d2676b42', 'fa5acc2feecae6a603673c6a817f79fa3a4dd1516d50c59014772c80500b7063', '0cd386804b65a3fb826557881dc3b50c1b298b7f0a0372da8faec97a2744d0e0', '24ca695bac05c4500a596415b70bd199c935308f7a90ccfc8ae01d7b96e6b115', '8125ed124dd4d0b3af98bc6028905fb329ff311c22f484be41bf9def8ea7b63e', '4f1e5a894be245d2a68c79e2b73dde54dbeaa8bb2e872b9b1115f40c0b93585b', 'aee4a615c617d71c544930d5dbacdb62d66fb089d556d84cbe92682295895d91', '545b2164e6bc2e764a702eac1bd69e625c6100c8cbeaa9528c16cd74eb144ecb', '450c86ef90858943f6b6ba284da3987191880b2b534749d3ae762d7c9060bb7c', '83d9107d90c36b0302af47f2b7e7bece30aaf20431dcdf251faa025d31f02fa8', '4785a7fb5b0a6106152dc80d2c028b2aa80cb9b4f0ce81985b8c672a34561703', '232a70178859760c5cd75ae054c503af9db4515d92a47b9da17ca5c81cee5d34', '5c218f9e957cfd7fa97dbbdd29a81673d4c91b3441279c23607a7d3889533855', 'b2472c88eb6c7a38476444c22cb560793624216e1e36354b406f15b09dd8316b', '5a7f3652282429eedf7bd2a6d0a8404e7844515f4139d14f8d7ed1e871efd373', '5147d190550b44eddad2d8ea6cdd022e47fe71a2517458b69c07c2424fd08bb2', '8e64ee1dcde8feb6b39ee043ecc43be719d0999ad181acee4d01e9d603976ff1', '0223ed8beb7d466d9d4026665d2ba58a97cbd1e6641be22f16d23be2b4574688', '18efc474f89835fb9eb1fa9ed1fc1dc296621aae3b727aab64f4f80ff76a098f', '8f38f6030a0471c7bef2b1e1757a6db0b63edf07aab3fe12a7e85d86b35c5eb5', '6b88744cba8f7661e64c67cd554d07a1b1981fe10614647a18b101520d289816', '6aee3deb7c0cb7247c2a85f14f96f8cb8447dee00e98a72ace80cbb850f5a709', '67de891a99a4c62fc90af91f5d880f9c2be80c1fc55bc444d10b74b63dd1ae1a', '62f955cf10d52f34a0b7bf2328c5095051d8dcf5009b65dd53632d54de4a515c', 'c42685086053a0b2d989453b6f0cb17a1b60642ac963acc782b5269c8e563b89', 'e2c2114e7cd15e47a84a4a48e7c1adbb29daff0f85afb5be6015a17271859909', 'cc834a0f20e43f4eb05638398e8cfc61bfaaa303dcd82705be2c9cbf80189ded', '10907000e1062dc63c817b995683a4a7433836f450f763c910fe6191aa555f24', 'a5bf7009e9c97b1b7652d3f5ed4067c1eeb40d1625e2fadb6ffb11ca18a27e74', '40c3ffce0140a9db634e4b869e79848f4316fd40528e48b0899e2b5606075ef2', '22b9db7c0ee380ec0c4eed97788dbf6f75fedbec569fb84a6c0d27bf36923cfa', 'f4906eda20607d733ae55caf3274fa91d5c2f20506881857af59be4d8bb0af25', '98dfd83a0506b7a56e7cc6b1c91623a38ecf504c9b78c658bb8a6e5c56f7af72', 'cd2711ab3400f03cb3830e6d7401058c99f5b3c0c438fe78180785582994b884', '566251b6b27cfbca202678f87ab6ebe5e6a71f306dea8e4035bca96207e630c1', '68eb0e868ebc4f0388c130bac9adcfb26fb526d8fdd7af6646ddcb9969e045df', '1cc856b20b1a66702782b4063caa1cce1cfd9a77600d53dbb727bc8d59cdeee3', 'd5312340a7bd04a732ea6da056fa4a32ef92558a30160cb63c457b9d72603823', 'd6cadd383605ab45e1cab2499349724d8973b160cd85e226115cbb30df383d44', '30a09d4abd5f3f52d47b7a7d2da05c5e0db2e40d93ae26a3d8b772227dffed48', 'efb6889c4507f2e7ccb781dc5982e14d111b696098acaa450a286b100322ca5d', 'cb7d6e3b904b49f01c85de319d4f3ed5ecc80aa3048dfbb97bb7300bc2fb4bd1', 'bb70bd40d0d9d2ceda243172a10c05b2f9099d4ea6c62414e6c04c0309e5f7d1', '7912e77605eddb2e18a5baac16326f5ee3f31ebee5ed5badec7f9327dda75a7e', '75255b0e2000c546b5f9e3836a8ed483b401280f993b5320f433507b7dad4981', '77af8d90ecca1b09f072b244a032775f025a82c148ae8393a56bdf2f055e687f' ] }
mira el bloque: http://tbtc.blockr.io/block/info/1115996
a continuación, elijamos un tx aleatorio del bloque que podría ser el tx de cualquiera:
http://tbtc.blockr.io/tx/info/a5bf7009e9c97b1b7652d3f5ed4067c1eeb40d1625e2fadb6ffb11ca18a27e74
verá que este tx tiene dos salidas, veamos una de las direcciones a las que conduce una salida:
http://tbtc.blockr.io/address/info/mjSujFSUn1uCVHkD4bDj5cs3mZrp8ayec5
¡Qué sorpresa! tiene 1 tx confirmado y un tx no confirmado
sin confirmar: http://tbtc.blockr.io/zerotx/info/8d7778e2238db427149f0c7fa46a572e0ea5c3ae9eeefe78c0ec9e4b795f0d38
confirmado: http://tbtc.blockr.io/tx/info/a5bf7009e9c97b1b7652d3f5ed4067c1eeb40d1625e2fadb6ffb11ca18a27e74
¡las entradas y salidas son todas iguales en ambos!
¡Acabo de sacar eso al azar de un tx aleatorio en un bloque aleatorio hoy que sucedió hace unos minutos!
Si pasa por cada uno de esos txs, ¡entonces el 99% serán todos así!
Alguien (llamémosla Alice en adelante) se está equivocando con las transacciones de testnet, le sucedió a una de las minas hoy.
Qué esta pasando
Alice está cambiando la s
representación de la firma EDCSA ( Ver algoritmo de generación de firma ECDSA ) de al menos una de las entradas de las transacciones. Al hacerlo, la firma cambia, pero sigue siendo válida y, por lo tanto, txid
cambia.
¿Cómo lo está haciendo?
Como se explica en el BIP62 , hay dos representaciones válidas del s
valor, dependiendo de qué tan grande sea el valor. Además, dependiendo del resultado , también se puede cambiar la codificación DER .
Alice simplemente está modificando uno de los s
valores de una de las firmas de transacciones originales, realizando una resta entre el orden n
de la curva (es decir, FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
para Secp256k1 ) y el valor s
.
Ejemplo:
Digamos que el s
componente de una firma de una de nuestras transacciones es s = 37c0af486123367bc7839d507894bd30cba3f61e0d1bbf54727e43199864452c
, si restamos s
a n
:
s' = n - s = c83f50b79edcc984387c62af876b42cdef0ae6c8a22ce0e74d541b7337d1fc15
Esa es una representación válida de s
.
Dado que s'
comienza por 0xc8
, que es mayor que 0x80
, la codificación DER necesitará un encabezado 0x00
:
00c83f50b79edcc984387c62af876b42cdef0ae6c8a22ce0e74d541b7337d1fc15
¿Quién lo está haciendo?
Podría ser un minero, tal como lo sugeriste, pero también podría ser un nodo normal.
Si es un minero, podría estar haciendo las modificaciones justo antes de incluir las transacciones del bloque que está minando. Por otro lado, si un nodo normal (mejor conectado que tú) recibe la transacción, la modifica y la transmite, podría incluirse en un bloque en lugar de tu transacción original. Tenga en cuenta también que, dado que ha estado transmitiendo la transacción original desde su nodo, es probable que no esté al tanto de las transacciones que intentan duplicar el gasto, ya que sus vecinos (a los que ha enviado la transacción original) eliminarán el doble gasto. intente y no se lo reenvíe.
¿Qué puedes hacer?
Puede reenviar la transacción desde una fuente diferente a la que está utilizando para monitorear la red, y no confiar en las transacciones de este último, para ver qué está pasando. Además, puede monitorear la red utilizando el UTXO
que está tratando de gastar ( prev_txid
+ index
) en lugar de txid
la transacción que acaba de crear. Si aparece otra transacción gastando de la misma fuente, lo sabrás.
ben muircroft
Nate Eldredge
ben muircroft