¿Cuándo varias transacciones que gastan la misma producción en el mismo bloque se consideran un gasto doble?

Aquí hay un ejemplo de transacciones múltiples en el mismo bloque, todas gastando de la misma salida. Los creé usando la billetera Electrum, diciéndole a Electrum que gastara un poco de BTC de la misma dirección 1AD9xV6aeQMPMzfv5Nzk8yNDgtyV3LaUkB cada vez

Ver: https://blockchain.info/address/1AD9xV6aeQMPMzfv5Nzk8yNDgtyV3LaUkB

Parece un gasto doble

Cuando intento hacer algo similar con Python y la biblioteca de Pycoin, la segunda transacción se marca como "gasto doble" cuando la envío a blockchain.info/pushtx. La respuesta que recibo es:

Ya se gastó un punto de salida en [DBBitcoinTx [txIndex=101360418, getEstimatedBTCSent()=0, isGeneratedBlockReward()=false, getTotalBTCSent()=0, getHash()=1766bb1b732db7b3eef1bea27a572651ee343d79ca6c5b9e866e2f97e8df85izea(), getSizea()=28Versiona()=28Stringa()=58Stringa()= ()=BitcoinTx{hash=1766bb1b732db7b3eef1bea27a572651ee343d79ca6c5b9e866e2f97e8df85aa, versión=1, lockTime=0, entrada=[], salida=[]}, getClass()=clase piuk.blockchain_db.DBBitcoinTx]] [(1013552)]

Como en el primer ejemplo, el total gastado por todas las transacciones nunca supera el total disponible en esa dirección, por lo que tengo curiosidad por saber por qué esto se considera un "doble gasto".

¿Cómo debe estructurar una serie de transacciones que gastan desde la misma dirección para que no se desencadene un gasto doble?

Las tres transacciones que muestra gastan diferentes salidas.
Blockchain.info es una autoridad en nada, sus reglas no son reglas de Bitcoins.
la misma dirección no significa la misma salida . Es solo un doble gasto si gasta las mismas salidas. Las direcciones pueden tener más de una salida.

Respuestas (2)

Agregando mi propia respuesta después de investigar un poco: una dirección y una salida son cosas diferentes. Una transacción puede tener muchas entradas y muchas salidas. Aquí hay una buena visualización de bitcoin.org:

ingrese la descripción de la imagen aquí

Se produce un gasto doble cuando se utiliza el mismo BTC para pagar a dos personas diferentes. Esto nunca sucederá en la cadena de bloques porque la red de Bitcoin garantiza un libro mayor consistente. Pero, ¿qué pasa con las transacciones no confirmadas que viven en los mempools de los mineros?

Es posible que algunas inconsistencias en el mempool no se manifiesten hasta que se agreguen o no a la cadena de bloques, otras las podemos marcar como no válidas de inmediato, por ejemplo, la cantidad excede los fondos disponibles, etc. Si no se verificaba la validez de las transacciones no confirmadas, un atacante podría inundar el mempool con transacciones falsas y paralizar la red.

Una transacción enviada que tiene exactamente las mismas entradas y salidas que otra transacción no confirmada en el mempool es rechazada por la red de Bitcoin (incluso si se trata de una transacción financiera válida). Por ejemplo, podría enviar 1 BTC de A a B, y mientras la transacción no está confirmada, enviar otros 2 BTC de A a B. Siempre que A tenga 3 BTC para cubrir las transferencias, estas transacciones son consistentes, pero conservadoramente rechazadas por mineros

Puede verlo usted mismo con la billetera Electrum usando la opción "Enviar desde". Normalmente, Electrum selecciona entradas válidas para usted, pero puede anular esto. Cree una transacción especificando las direcciones de origen y destino. Luego, cree otra transacción con el mismo desde y hasta (pero la cantidad puede diferir). Si la primera transacción aún está pendiente, obtendrá el siguiente error:

ingrese la descripción de la imagen aquí

Dado que las cantidades son diferentes ($ 23,75, $ 23,89 y $ 24,03), no es posible que sean la misma salida.