Pregunta 4

wallet: fix mixed-input transaction accounting in history RPCs

Kepler 15/09/2026 11:45
Pregunta 4 → En el tercer commit se añade CWallet::MarkOutputsDirty() y se invoca al insertar una transacción nueva en AddToWallet() y LoadToWallet(). ¿Qué ayuda a solucionar esta función? (Piensa en qué pasaría si el padre de una transacción que ya está en la wallet se importa después).
22/09/2026 18:26
Quien quiere esta? Esta muy relacionada con la 2, casi casi ya la hemos resuleto alli
arejula27 22/09/2026 18:27
👀
Pol Espinasa 22/09/2026 18:28
Teniendo en cuenta que antes se ha dicho que MarkDirty() invalida un resultado porque puede haber cambiado, imagino que si conoces un padre de la tx podria ser que el output gastado fuera tuyo y pensaras que no
👍 1
22/09/2026 18:28
(suposiciones sin haber revisado el PR ni leido el codigo)
nebula 22/09/2026 18:29
Cuando importamos mas tarde una tx, MarkOutputsDIrty recorre los outputs de la nueva tx y marca dirty las que los gastan.
arejula27 22/09/2026 18:29
una tx puede pasar que esta pase de estado PARTIAL a ALL si llega un nuevo utxo a la wallet
22/09/2026 18:29
creo que el test wallet_gettransaction_mixed_inputs.py:141 cubre este escenario 🤓
👍 1
Kepler 22/09/2026 18:30
Muy bien, no tengo nada que añadir aqui lo habeis explicado todo!
🔥 1
Leo (w0xlt) 22/09/2026 18:30
Exato. Evita que la información calculada previamente sobre la transacción hija quede desactualizada.
22/09/2026 18:30
Imagina que la wallet ya conoce la transacción C, que gasta una salida de la transacción P, pero todavía no tiene P. La wallet podría almacenar en caché que no puede reconocer ese input como propio ni verificar si su valor es cero.
22/09/2026 18:30
Más adelante, se importa P. La wallet ahora dispone de información que podría cambiar la contabilidad de C. Limitarse a añadir P dejaría intactos los resultados de C almacenados en caché.
👍 3
Pol Espinasa 22/09/2026 18:31
en que situacion podriamos conocer el hijo pero no el padre?
arejula27 22/09/2026 18:32
importa un descriptor nuevo a la wallwt
22/09/2026 18:33
o alguna condicion de carrera, not sure como se guardan los utxos en wallet
arejula27 22/09/2026 18:33
tienes la tx hija que estas gastando (toda firmada) y por alguna razon uno de los inputs es de tu cartera A que se te ocurre importarla
👍 2
22/09/2026 18:34
pero idk es un caso que no le veo sentido pero teoricamente pasa
Leo (w0xlt) 22/09/2026 18:34
Puedes recibir primero la transacción hija en el mempool.
👍 1
arejula27 22/09/2026 18:34
eso tiene mas sentido, pero no la rechazas al faltar un input?
22/09/2026 18:36
tiene sentido
Kepler 22/09/2026 18:37
Pues seguimos con la siguiente!
22/09/2026 18:38
No estoy seguro de que la traducción anterior sea correcta.
Pol Espinasa 22/09/2026 18:39
creo que no
22/09/2026 18:39
puedes escribir en ingle si quieres y yo lo traduzco
Leo (w0xlt) 22/09/2026 18:40

Imagina la wallet de Alice:

Transacción padre P: Carol le paga a Bob.
Transacción hija C: Bob gasta ese output para pagarle a Alice.

22/09/2026 18:41
La wallet de Alice guarda C porque le paga a ella. No tiene ningún motivo para guardar P, ya que esa transacción solo involucraba a Carol y Bob.
22/09/2026 18:41
Lo mismo ocurre en un Payjoin: Alice puede conocer la transacción padre que financia su propio input, pero no la transacción padre que financia el input de Bob. Aun así, guarda la transacción hija colaborativa.
Pol Espinasa 22/09/2026 18:42
claro pero si el input es de Bob, nunca va a canviar el estado a ALL porque es un input de Bob