testnet3 maleabilidad tx frecuente

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:

  1. Envío algunos tBTC usando http://testnetwallet.com

  2. 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)

  3. Sigo monitoreando mirando todos los txs transmitidos

  4. sucede un nuevo bloque .

  5. Busco entre los txids del bloque pero no encuentro mi txid

  6. 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

  7. ¡Voy a mirar el bloque nuevamente y veo que YYYY está en su matriz tx!

  8. 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?


ACTUALIZAR

¡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

PRUEBA DE QUE ESTO ESTÁ PASANDO EN LOS TX DE TODOS

{ 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í!

testnet supongo que actuará como mainet. algo está claramente roto con algunos/muchos mineros en testnet... por lo que testnet es actualmente inútil para realizar pruebas.
Yo diría justo lo contrario. La maleabilidad es igualmente posible (y legal) en mainnet. Da la casualidad de que nadie lo está haciendo a gran escala en este momento, pero ciertamente podrían hacerlo. Por lo tanto, cualquier aplicación que diseñe debe poder manejarla adecuadamente. Quienquiera que esté haciendo esto en testnet nos está haciendo un favor a todos al obligarnos a manejar este importante caso que de otro modo podríamos ignorar o descartar.
Entiendo ahora

Respuestas (2)

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 srepresentació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, txidcambia.

¿Cómo lo está haciendo?

Como se explica en el BIP62 , hay dos representaciones válidas del svalor, 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 svalores de una de las firmas de transacciones originales, realizando una resta entre el orden nde la curva (es decir, FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141para Secp256k1 ) y el valor s.

Ejemplo:

Digamos que el scomponente de una firma de una de nuestras transacciones es s = 37c0af486123367bc7839d507894bd30cba3f61e0d1bbf54727e43199864452c, si restamos sa 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 UTXOque está tratando de gastar ( prev_txid+ index) en lugar de txidla transacción que acaba de crear. Si aparece otra transacción gastando de la misma fuente, lo sabrás.

¡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. visto: 0/63, visto: 0/45, visto: 0/87, etc.... todos los txs en testnet3 están cambiando txid
Lo sé, como dije a mí también me pasó, solo consideré todos los casos posibles.
Actualicé mi pregunta, y si me das unos 20 minutos para agregar más pruebas, ¡creo que te sorprenderá!
He publicado una prueba innegable en la pregunta.
Lo siento, pero ¿cuál es el problema? Las transacciones de Bitcoin son maleables. El minero puede usar esta técnica y la está usando ahora. Solo vive con este conocimiento.
@ ben-muircroft No entiendo el punto, nadie te dice que no tienes razón, solo te explica por qué sucede.
si entiendo eso pero no entiendo cómo se supone que debo hacer coincidir un txid maleado en un bloque con el tx original
Si lo que desea hacer es simplemente identificarlos, puede verificar qué UTXO están gastando ambas transacciones, es decir, qué tx id e índice anteriores están tratando de gastar ambas transacciones. Habrá dos transacciones gastando de la misma fuente, una en el bloque y otra que habías recibido a través de la red.
pero nunca veo los txs maleados. Solo veo el txid maleado en el bloque, así que no sé qué salidas tiene el tx maleado
Pero conoce las entradas de la transacción que ha visto, debe verificar con la transacción en el nuevo bloque generado que se está gastando de la misma salida anterior.
pero dado que nunca veo txs maleados difundidos, no tengo nada que verificar
también tenía razón acerca de que había información adicional de tx dentro de los bloques

El minero que confirma los bloques actuales en testnet está manipulando transacciones. Puedo confirmar esto.ingrese la descripción de la imagen aquí

¿Pero cuál es el problema? Las reglas de consenso actuales lo permiten. Confía en mí. Soy un experto en maleabilidad :)

En fin, gracias!! ¿A quién le informamos esto?
Bitcoin está descentralizado. No existe una autoridad central para quejarse y enviar informes. Este es un comportamiento normal. Puede ser que alguien esté probando algo.
durante las últimas 2 semanas?
No veo ningún problema aquí en absoluto.
el problema es que nunca veo los txs maleados transmitidos por la red (solo veo los txs originales)
Es su problema, no un problema de la red bitcoin :) nadie puede ayudarlo porque los clientes actuales no transmiten transacciones HI-S. Por lo tanto, solo existen en el nodo del minero hasta que se confirmen en el bloque.