2. O que é maleabilidade de transação (transaction malleability) e o que o segwit tem a ver com isso?
Basicamente, uma transação consiste de inputs, outputs e sua assinatura digital (assinada pela(s) private-key(s) dos inputs).
Ao enviar uma transação, seu hash é utilizado como ID na blockchain (aquela string que a gente vê nos block explorers). O problema é que, devido a forma como as assinaturas ECDSA (utilizadas pelo Bitcoin) funcionam, é possível alterar uma assinatura de forma que ela continue válida mas gere um hash diferente.
Um problema causado por isso é que ao alterar o ID de uma transação ainda não confirmada, todas as transações sucedentes (também não confirmadas) se tornam inválidas, pois são dependentes do ID de uma transação que não existe mais.
Por exemplo:
1. Eu envio 1 BTC para João pela transação 12345.
2. Antes da transação confirmar, João gasta seus 1 BTC oriundos da transação 12345.
3. Eu altero a assinatura dessa transação e ela se confirma como transação 54321.
4. João, que criou uma transação dependente da transação 12345, tem sua transação cancelada (12345 não existe mais, portanto sua transação é inválida).
Outro exemplo:
1 input 0.001
1 input 0.003
Assinatura 12345
1 output 0.004
Transação de hash 0ccf3ad4cfd887b8c697ccf9a296a39db23c48c2aec547a04f89995881dfcd59
1 input 0.001
1 input 0.003
Assinatura 012345
1 output 0.004
Transação de hash 1ad47cb8422bfacdb79473e35faf59113154fd317354dfbbefe920e3840f2821
Matematicamente, 12345 é a mesma coisa de 012345, portanto, ambas transações tem uma assinatura valida e idêntica. Porém, seu hash é diferente.
O que o Segwit faz é realocar essa assinatura digital (chamada Witness) para fora desse "bloco" da transação, deixando apenas os inputs e outputs.
1 input 0.001
1 input 0.003
-assinatura removida-
1 output 0.004
Agora não é mais possível alterar nada da transação, pois os inputs e outputs são imutáveis (caso contrário, a transação se torna inválida). E com isso, o hash dela (ID) não pode mais ser alterada.