₿ Bitcoin
Modello UTXO (Unspent Transaction Output)
- Bitcoin non ha un saldo: Avere saldo vuol dire avere uno stato e in un sistema asincrono avere uno stato è una limitazione
- Funzionamento:
- Ogni transazione ha input (riferimenti a UTXO precedenti) e output (nuovi UTXO)
- Gli input devono utilizzare output non spesi di transazioni precedenti
- La somma degli input deve essere ≥ alla somma degli output; l'eccedenza diventa resto (trasferito all'autore)
- Vantaggi:
- Transazioni parallele: Nessun account centrale
- Anonimato: Un utente può disporre di multipli indirizzi
- Stateless: Resilienza, elasticità e possibilità per qualsiasi istanza di eseguire qualsiasi attività
- Svantaggi:
- Difficile determinare il saldo di un utente (deve essere ricostruito analizzando tutti gli UTXO associati ai suoi indirizzi)
- Stateless: Complesso implementare smart contract
Indirizzi Bitcoin
- Generazione: Gratuita, 26-35 caratteri
- Privacy:
- Ogni utente ha molti indirizzi (pseudonimi)
- Best practice: Usare un indirizzo diverso per ogni transazione
- Problema di sicurezza:
- Se un cliente paga con Bitcoin, un malintenzionato potrebbe vedere la transazione e rivendicare il pagamento
- Soluzione: Sistema di scripting
Sistema di Scripting
- Scopo: Autenticare la legittimità dell'utilizzo di una transazione
- Caratteristiche:
- Linguaggio imperativo basato su stack
- Elaborato da sinistra a destra
- Non Turing-completo (nessun ciclo o istruzioni condizionali per avere predicibilità dei tempi)
- Senza stato
- Tipi di istruzioni:
- Istruzioni di dati: Valori racchiusi in
< >
- OP_CODE: Operazioni che agiscono sullo stack
- Transazione valida:
- Se l'esecuzione non genera errori e il risultato in cima allo stack è True
- Locking e Unlocking Script:
- Locking script: Posto sull'output di una transazione
- Unlocking script: Fornito nell'input per sbloccare i fondi
- Durante l'esecuzione, l'unlocking script viene eseguito prima del locking script