Smart contract eseguiti off-chain e verificati dentro output Taproot per portare nuovi use case su Bitcoin.
- BitVM è una nuova proposta per portare smart contract Turing-completi su Bitcoin senza necessità di soft fork o hard fork.
- Il sistema è simile agli optimistic roll-up e si basa sulla possibilità di creare prove di errata esecuzione del codice in caso di tentativo di frode.
- Pur ampliando di molto ciò che sarà possibile fare su Bitcoin, la soluzione presenta limiti di efficienza e praticità.
L’esecuzione di codice sulla blockchain di Bitcoin è limitata da design, in quanto, data l’importanza di Bitcoin come sistema monetario alternativo, massimizzare la sicurezza e minimizzare i rischi di comportamenti imprevisti è considerato prioritario rispetto alla flessibilità che smart contract più generici possono offrire. Tuttavia, grazie a nuovi protocolli di computazione off-chain, potrebbe diventare possibile abilitare l’esecuzione di contratti complessi direttamente su Bitcoin, senza bisogno di fare compromessi con la sicurezza della blockchain.
In data 9 ottobre 2023, lo sviluppatore Bitcoin Robin Linus ha pubblicato un paper intitolato “BitVM: Compute Anything on Bitcoin” presentando una proposta per permettere di creare smart contract Turing-completi su Bitcoin senza necessità di soft fork o hard fork al protocollo di consenso. Il paper è stato accolto con molto entusiasmo in quanto ha il potenziale di aprire le porte a casi d’uso ad oggi impossibili su Bitcoin.
Che cos’è BitVM?
L’idea alla base di BitVM è quella di avere un protocollo dove la blockchain non viene usata per eseguire codice, ma solo per effettuare la verifica dell’esecuzione. Due utenti possono perciò creare un contratto dove il primo (il “Prover”) afferma che l’output dell’esecuzione di un pezzo di codice è un determinato valore, mentre il secondo utente (il “Verifier”) può verificare se l’esecuzione del codice è corretta o meno, e nel caso non lo sia può a sua volta creare una prova che il primo utente ha fornito un output errato. Il codice può essere un qualunque tipo di programma, abilitando molteplici casi d’uso.
È importante notare che BitVM non permette di eseguire codice su Bitcoin, cosa che avrebbe grossi problemi di scalabilità, ma offre la possibilità di pubblicare le prove che un determinato script sia stato eseguito (fuori dalla blockchain) in modo errato e di attivare un meccanismo di punizione nel caso ciò avvenga.
Il vantaggio principale di questo paradigma è che una prova di esecuzione errata on-chain è generalmente molto compatta in quanto vengono pubblicate solamente le righe di codice dove è avvenuto l’errore, non l’intero script che è stato eseguito. Per questo motivo, sebbene sia simile negli scopi, BitVM è fondamentalmente diverso dall’EVM (Ethereum Virtual Machine) e sposa un approccio che ha sicuramente le sue complessità, ma risulta essere molto più scalabile.
Come funziona BitVM?
Per fare deployment di un contratto con BitVM, il codice del contratto viene scomposto in circuiti logici composti da porte NAND. Ogni passaggio dell’esecuzione viene poi committato all’interno di una foglia (Tapleaf) di un indirizzo Taproot, in modo che lo spazio on-chain usato sia minimizzato. Le due parti possono poi depositare dei bitcoin sull’indirizzo Taproot e cominciare una sequenza di Challenges e Responses dove le due parti preparano una serie di transazioni pre-firmate in cui il Verifier proporrà un Challenge e il Prover risponderà con una soluzione, creando quindi una catena di challenge → response → challenge → response, e così via.
Se il Prover riesce a rispondere a tutti i challenge, avrà diritto a prendersi dei bitcoin che il Verifier aveva depositato sull’indirizzo Taproot, mentre se il Prover fallisce uno dei challenge o le sue risposte risultano essere inconsistenti tra loro, il Verifier può prendersi i bitcoin che il Prover aveva messo a stake.
Tutte le transazioni pre-firmate usate per la catena di challenge-response verranno inoltrate sulla blockchain solo in caso di contenzioso, mentre se le due parti sono cooperative potranno fare settlement con una semplice firma multisig 2 di 2. Se invece una delle due parti non risulta essere collaborativa, la controparte potrà reclamare i bitcoin bloccati dell’indirizzo dopo che il timelock ad esso associato sarà scaduto. Si può notare quindi che per alcuni aspetti BitVM fa leva su un sistema di incentivi simile a quello usato nella rete Lightning.
La Turing-completness è desiderabile?
Spesso si dibatte se sia desiderabile o meno avere la possibilità di eseguire script Turing-completi su Bitcoin o se invece sia un rischio per la sicurezza. Il problema principale della Turing-completness è che un computer non è in grado di distinguere tra un programma che è computabile e uno che non lo è fino a che non procede con l’esecuzione; se uno script non computabile venisse inserito dentro una transazione Bitcoin, tutti i nodi che proverebbero a validarla rimarrebbero bloccati, paralizzando di fatto il network. Per questo motivo su Bitcoin si è sempre preferito evitare la Turing-completness in modo da prevenire loop e script di cui non è possibile completare l’esecuzione.
Tuttavia BitVM, spostando l’esecuzione del codice fuori dalla blockchain, risolve a monte il problema, in quanto uno script non computabile non avrebbe alcun effetto sui nodi nel network. Con BitVM infatti solo il Prover deve eseguire il codice e qualunque problema emerga durante l’esecuzione rimarrà confinato al computer del Prover.
Casi d’uso
Non è ancora del tutto chiaro quali casi d’uso sarebbero effettivamente implementabili grazie a BitVM, ma permettendo di verificare l’esecuzione di programmi arbitrari direttamente su Bitcoin, BitVM ha il potenziale di aprire le porte a diversi casi d’uso che altrimenti avrebbero bisogno di un soft fork. Tra questi potrebbero risultare possibile implementare covenant, bridge trustless 2-way-peg da e verso sidechain, migliorare dei prediction market tramite DLC e in generale l’emulare ogni proposta per nuovi op_code nel linguaggio di scripting di Bitcoin.
Limiti e critiche
Pur risultando essere una soluzione rivoluzionaria che permette di avere smart contract molto complessi direttamente su Bitcoin, BitVM ha comunque i suoi limiti:
- Il protocollo è molto complesso e richiede molta interattività tra le parti, rendendolo quindi difficile da implementare in applicazioni user friendly.
- Ogni contratto è limitato a due parti, estendibile in alcuni casi a un modello 1 a N (i.e. un Prover risponde a challenge di N Verifier), ma non è possibile avere N persone che interagiscono tutte tra loro. Per via di questa limitazione è probabilmente impossibile usare BitVM per gestire il meccanismo di peg-out di una sidechain in maniera trustless.
- La quantità di dati off-chain che le parti devono gestire sarà probabilmente enorme, rendendo il tutto poco pratico.
- I requisiti di hardware per eseguire programmi complessi con BitVM potrebbero essere tali da limitarne l’uso a dispositivi desktop escludendo ambienti mobile. Per contratti più semplici invece anche un dispositivo mobile potrebbe essere sufficiente.
Conclusioni
BitVM è un nuovo paradigma che risulta essere sicuramente rivoluzionario in quanto apre a nuovi scenari su Bitcoin prima ritenuti impensabili senza un fork, valida ulteriormente l’idea che vi sia molto margine per innovare su Bitcoin.
Ad oggi solo una proof-of-concept è stata effettivamente sviluppata con BitVM. Tanto lavoro di ricerca deve ancora essere fatto per comprendere a pieno come BitVM possa passare dalla teoria alla pratica per casi d’uso reali, ma è probabile che nel tempo nuove ottimizzazioni per rendere il protocollo più pratico verranno scoperte.
BitVM inoltre conferma che lavorare su più layer e spostare la complessità off-chain è una scelta di design che da un lato richiede un grande sforzo ingegneristico, ma al contempo permette di valorizzare al massimo Bitcoin senza comprometterne i principi di sicurezza e decentralizzazione.