Che cos’è il Discreet Log Contract (DLC)?
Un Discreet Log Contract (DLC) è una forma di transazione Bitcoin che utilizza un Oracle per eseguire un contratto intelligente. L’obiettivo principale dei DLC è quello di consentire alle parti di effettuare scommesse utilizzando la blockchain Bitcoin. Per costruire un DLC, due parti bloccano i fondi in un indirizzo multisig, il che significa che i fondi possono essere spesi solo quando l’Oracle rilascia le informazioni specificate in un determinato momento. Un Oracle per un DLC può essere qualsiasi tipo di feed di dati, come la pubblicazione di un sito Web sul risultato di una partita sportiva o un elenco di prezzi di scambio.
La parola “discreta” utilizzata in Discreet Log Contract è tecnicamente un errore di ortografia di “discreto”. Tuttavia, sin dall’inizio dell’utilizzo dei DLC, questa è diventata l’ortografia comune.
I Discreet Log Contract offrono un vantaggio rispetto ad altri tipi di contratti smart poiché la loro impronta sulla blockchain non è diversa da una transazione multisig normale. Ciò significa che non è necessaria alcuna modifica speciale al protocollo Bitcoin, a parte l’introduzione delle firme Schnorr che verranno introdotte nell’aggiornamento Taproot. Tuttavia, i DLC non risolvono completamente il problema degli Oracle, ovvero l’incapacità di incorporare dati del mondo reale in un contratto intelligente in modo fiduciario. Infatti, i DLC si basano ancora su un Oracle affidabile per rilasciare dati veri.
Nel funzionamento di un DLC, viene utilizzata la firma di Oracle di un determinato messaggio come chiave privata. Questo consente al vincitore della scommessa di firmare una transazione che spende i fondi delle due parti coinvolte nel contratto. Ad esempio, se Alice e Bob vogliono impostare un DLC per scommettere sul risultato di un lancio di monete, creano innanzitutto una transazione di finanziamento in cui inviano entrambi Bitcoin, ad esempio 1 BTC ciascuno, a un indirizzo multisig 2 su 2. Successivamente, Alice e Bob ottengono chiavi pubbliche le cui chiavi private vengono appena create dalla firma dell’oracolo di entrambi gli eventi: testa o croce nel caso di un lancio di monete. È importante notare che queste chiavi private non sono la chiave utilizzata per creare le firme dell’evento. Non è possibile utilizzare una firma per ricavare la chiave privata che l’ha creata.
Utilizzando queste chiavi pubbliche, Alice e Bob creano due transazioni di impegno, chiamate Transazioni di Esecuzione del Contratto (CET), una delle quali spende i 2 BTC dalla transazione di finanziamento alla chiave pubblica “Testa” e l’altra alla chiave pubblica “Croce”. Entrambe queste transazioni richiedono firme da parte di Alice, Bob e dalla chiave “Testa” o “Croce”. Poiché né Alice né Bob dispongono della chiave privata per le chiavi “Testa” o “Croce”, queste transazioni richiedono solo 2 su 3 firme e rimangono inedite sulla blockchain.
Dopo che l’Oracle determina il risultato del lancio della moneta, ad esempio “Testa”, l’Oracle pubblica la firma corrispondente a “Testa” e Alice o Bob utilizzano questa firma per derivare la chiave privata per “Testa”. Ora Alice e Bob possono firmare soltanto la CET che invia i Bitcoin alla persona che ha scelto “Testa”. La CET firmata viene pubblicata sulla blockchain e il vincitore della scommessa riceve i 2 BTC. La CET che richiedeva la firma per “Croce” diventa obsoleta e viene scartata.
Per incentivare il perdente della scommessa a firmare e pubblicare la transazione, entrambe le controparti aggiungono un ulteriore bitcoin alla transazione di finanziamento. Se la scommessa è di 1 BTC, ogni controparte potrebbe puntare 1,5 BTC.
Il vincitore riceverà 2,5 BTC, mentre il perdente si vedrà restituire 0,5 BTC. Ciò consente di implementare una condizione di blocco temporale, in base alla quale, se il perdente non ha firmato e pubblicato la transazione entro una certa ora, il vincitore può reclamare anche gli 0,5 BTC del perdente come garanzia.