Bitcoin Forum

Local => Italiano (Italian) => Topic started by: pf55351 on July 15, 2019, 04:26:42 PM



Title: Transaction Malleability &
Post by: pf55351 on July 15, 2019, 04:26:42 PM
Salve a tutti ragazzi,
avrei una domanda per voi, non ho ben chiaro il concetto di transaction malleability.
In particolare:
  • se ho ben capito la trx malleability consiste in un cambiamento della firma della trx al fine di produrre un nuovo trxid e al mittente vengono sottratti dei bitcoin.
    Ma i miner quando verificano il blocco non verificano anche la correttezza della transazione? Perchè si accorgerebbero che la firma non è corretta
  • Mi è chiaro che la soluzione a questo problema è segwit, ma nello specifico non mi è chiaro dove la parte della firma viene inserita e come questo possa diminuire la grandezza di una trx (visto che la firma viene solo spostata) 
  • attualmente la grandezza del blocco è passata da 1mb a 2mb?
Grazie per le risposte
FP


Title: Re: Transaction Malleability &
Post by: LordStapy on July 15, 2019, 09:03:47 PM
La firma modificata è comunque valida (https://github.com/bitcoin/bips/blob/master/bip-0062.mediawiki per maggiori info), per questo la transazione viene comunque accettata dai miner.
Segwit risolve spostando la firma "fuori" dal blocco, in questo modo l'hash della transazione è calcolato senza includere la firma, che viene appunto "spostata" all'esterno del blocco (tipo allegato), da questo deriva la minor dimensione delle transazioni e il conseguente aumento della dimensione massima del blocco.
Il blocco bitcoin è comunque da 1MB, ma le firme delle transazioni segwit non sono incluse al suo interno e quindi si può "sforare" di un po' fino ad un massimo teorico di 4MB (anche se in realtà si è più vicini ai 2).

Un nodo che non ha attivato segwit può comunque sincronizzarsi e verificare le transazioni, ma non vedrà le firme esterne al blocco, per lui le transazioni segwit sono delle "anyone can spend" senza firma.


Title: Re: Transaction Malleability &
Post by: alexrossi on July 19, 2019, 07:37:36 PM
Un nodo che non ha attivato segwit può comunque sincronizzarsi e verificare le transazioni, ma non vedrà le firme esterne al blocco, per lui le transazioni segwit sono delle "anyone can spend" senza firma.

In realtà penso che diventino anyone can spend solo con una versione del client aggiornato modificata che legga le transazioni segwit. Se il client non supporta completamente segwit, credo non sia nemmeno in grado di visualizzare l'utxo (potrei sbagliarmi).


Title: Re: Transaction Malleability &
Post by: LordStapy on July 20, 2019, 01:14:26 AM
Se il client non supporta completamente segwit, credo non sia nemmeno in grado di visualizzare l'utxo

Se non potesse identificare l'utxo, non avrebbe modo di validare la transazione che va a spenderlo portando a uno split della blockchain, segwit è stato attivato come soft-fork anche per evitare incompatibilità con i vecchi nodi. Sarebbe vero quello che dici nel caso di un hard-fork che introduce nuovi OP_CODE dedicati a segwit (o a qualunque altra cosa), ma in quel caso i nodi obsoleti non potrebbero validare i nuovi blocchi.
Sarei curioso di fare una prova con un vecchio nodo ed avrei anche un vintage bitcoin-qt 0.9 su un vecchio portatile, ma non è sincronizzato da anni ed ho solo un paio di giga liberi su disco  :-\

Comunque, un output segwit (p2wkh o p2wsh) ha come script di blocco qualcosa del tipo "OP_0 OP_PUSHDATA pubkeyhash/scripthash", quindi dovrebbe essere perfettamente riconoscibile ad un vecchio nodo anche se non è presente la condizione per spendere l'output, sicuramente non sarà in grado di decodificare l'indirizzo, ma riconoscerà l'output e lo inserirà nel database degli utxo.
Nel caso di indirizzi segwit P2SH, lo script di blocco è irriconoscibile da un generico P2SH finchè non viene speso; c'è stato qualcuno che ha commesso l'errore di inviare transazioni a quegli indirizzi sulla rete BCH che non supporta segwit ed i miner sono stati in grado di spendere/recuperare quei fondi.