Lightning Network
Alekos Filini (@afilini) - BHB Network
Scaling di Bitcoin
- Limite fisico di ~3 - 7 transazioni al secondo
- Blocchi da (circa) 1 MB
- Tempo di blocco di 10 minuti
- Tentativo di massimizzare la decentralizzazione
- Permettere a chiunque di mantenere un "full node"
- Agevola i miners più piccoli
HF
- Riduzione tempo di blocco
- Aumento dimensione del blocco
- MimbleWimble (?)
SF
- Batching
- Soluzioni off-chain
Possibili soluzioni
Bitcoin senza blockchain
- La blockchain è l'arbitro che decide chi ha ragione
solo in caso di controversie
- "La blockchain ha sempre ragione"
- Gran parte delle transazioni non verranno mai pubblicate
- Spazio risparmiato nei blocchi
- Non è necessario aspettare conferme
- Pagamenti istantanei
- Sistema per scambiare transazioni senza pubblicarle
(normalmente)
sulla blockchain
Payment Channels
One use of nLockTime is high frequency trades between a set of parties. [...] Intermediate transactions do not need to be broadcast. Only the final outcome gets recorded by the network. Just before nLockTime, the parties and a few witness nodes broadcast the highest sequence tx they saw.
- Satoshi Nakamoto
Mono-directional Payment Channels
- A deposita fondi in un multisig
- Si crea una tx di "refund" con timelock
- A Crea degli stati successivi mettendo la propria firma
- Prima del timelock B aggiunge la propria firma e pubblica la tx
- È incentivato a pubblicare l'ultimo stato perché più conveniente per lui
Timelock in Bitcoin
- Campo nLockTime - uint a 32 bit nella transazione
- Firmato dal SIGHASH più utilizzato (SIGHASH_ALL)
- Se 0 la tx può essere minata in qualunque blocco
- Se < 500 * 1e6 viene interpretato come block height
- Altrimenti interpretato come UNIX Timestamp
- Calcolato come la media dei timestamp degli ultimi 11 blocchi
Punti critici
- Monodirezionale
- Il canale ha una "scadenza" e va rinnovato periodicamente
- Scadenze lontane rischiano di bloccare i fondi per troppo tempo
- Scadenze vicine rendono necessario rinnovare il canale ogni poco
Duh.
- Si perde l'incentivo a broadcastare l'ultimo stato
- Il concetto di "stato favorevole" è opposto tra le due parti
- Fidarsi dell'altra parte non è ovviamente una soluzione
Bi-directional Payment Channels
Timelocked Bi-directional Payment Channels
- A e B depositano fondi in un multisig
- Si crea lo stato iniziale con timelock relativamente lungo
- A e B possono creare nuovi stati successivi mettendo la propria firma e riducendo il timelock
- Prima del timelock dell'ultimo stato esso viene broadcastato
- Non ci sono incentivi a comportarsi bene
- Semplicemente la tx viene rifiutata da Bitcoin se non valida (timelock non raggiunto)
- Non ci sono incentivi a comportarsi bene
Punti critici
- Il canale ha una "scadenza" e va rinnovato periodicamente
- Scadenze lontane rischiano di bloccare i fondi per troppo tempo
- Scadenze vicine rendono necessario rinnovare il canale ogni poco
We
Can do Better
Bitcoin Script
- Linguaggio volutamente non Touring-complete
- Stack based
- Composto da molti op-code
- Permette di creare diversi "contratti"
- scriptPubKey - determina le condizioni per spendere un output
- scriptSig - soddisfa le condizioni
- Eseguiti in ordine, se ci sono errori la transazione non è valida
Esempio
OP_CSV e OP_CLTV
Timelock a livello di Script, non di transazione
- Permette di creare contratti che contengono timelock relativi
- OP_CSV abbreviazione di OP_CHECKSEQUENCEVERIFY
-
Sfrutta il campo nSequence degli input
- Originariamente utilizzato per poter "aggiornare" una transazione nella mempool
- Introdotto con un soft-fork (BIP 112)
- Come timelock tradizionali
- OP_CLTV abbreviazione di OP_CHECKLOCKTIMEVERIFY
- Sfrutta sempre il campo nLockTime delle transazioni
- Introdotto con un soft-fork (BIP 65)
OP_CSV
OP_CLTV
Punishment-based Payment Channels
- A e B depositano fondi in un multisig
- Si crea lo stato iniziale del canale
- Due versioni "specchiate", diversa per le due parti
- Permette la chiusura unilaterale (senza collaborazione) ma i fondi di chi chiude saranno bloccati per un certo periodo di tempo
- Permette anche di "punire" l'altra parte se si comporta male tramite una "revocation key"
- Ad ogni stato viene scambiata la key dello stato precedente
- Incentivo a comportarsi bene
- Rischio di perdere tutta la mia parte se vengo punito
"eltoo" Payment Channels
- A e B creano due multisig (uno di "update" e uno di "settlement")
- A e B depositano i fondi in quello di update
- A e B si scambiano una tx di update:
- Può spendere qualunque output depositato nel multisig di update
- Crea un nuovo output che può essere speso subito con il keypair di update o più tardi con il keypair di settlement
- A e B si scambiano una tx di settlement che spende quella di update con il keypair di update
- Nessun incentivo a comportarsi "bene":
- Se mando un update vecchio l'altra parte può ri-spenderlo nella finestra di tempo prima del settlement
Multi-hop Payments. HTLC FTW
- Creare canali direttamente con molte persone non è efficiente
- Sarebbe bello poter "prendere in prestito" il canale di qualcun altro per fare un pagamento
- HTLC permettono di implementare una soluzione molto elegante
- HTLC = Hashed Time-lock Contract
- Contratto che permette di sbloccare dei fondi presentando una pre-image entro un certo timeout
- Scaduto il timeout i fondi tornano al mittente
Esempio
Stato iniziale: A <-> B <-> C. A vuole pagare C
- C genera un segreto e ne calcola l'hash che passa a B
- B crea un HTLC che permette a C di ottenere i fondi se mostra il segreto entro un giorno. Scaduto il timeout B recupera i propri soldi
- A crea un HTLC che permette a B di ottenere i fondi se mostra il segreto entro un giorno. Scaduto il timeout A recupera i propri soldi
- C verifica la catena di HTLC e, se soddisfatto, rivela il segreto, prendendo i fondi da B
- B copia il segreto e può prendere i soldi da A
Punti critici
- Bilanciamento dei canali
- Routing inefficiente - al momento
- Necessario essere online anche per ricevere transazioni
- Rischio di perdere fondi se non mi accorgo del broadcast dell'altra persona
- Possibile soluzione: trustless watchtowers
Sviluppi futuri
- Channel factories
- Rendono ancora più economica la creazione dei canali
- Cross-chain atomic swap
- AMP - Atomic Multi-Path Payments
- Permette di dividere un pagamento su più rotte garantendo l'atomicità
- Asset generici su Lightning - RGB
Principali implementazioni
- Una specifica unificata "Basis of Lightning Technology" (BOLT)
- Tre principali implementazioni
- c-lightning (Blockstream - C)
- lnd (Lightning Labs - Golang)
- Eclair (ACINQ - Scala)
Mappa di mainnet
Mappa di testnet
Demo
Domande?
Lightning Network (FULL) - IT
By Alekos Filini
Lightning Network (FULL) - IT
- 850