History of Payment Channels
Gabriel Comte
Gabriel <acento español>
Gabrielito
Gabri-chelito
Señor Maestro Chero Gabo
Don Gabrón
Ordered by topics rather than time
Bitcoin is a broadcast network
Entire ledger is replicated to all network participants
Omitting (some) data from the broadcast protocol
A Micropayment Channel or Payment Channel is class of techniques designed to allow users to make multiple Bitcoin transactions without commiting all of the transactions to the Bitcoin blockchain.
Can be replaced until nLockTime
You create a final TX and remove nLockTime
Any questions so far?
After Satoshi's flawed idea, a lot of innovation happened on payment channels
In 2011 Bitcointalk user hashcoin proposed a scheme to fix miner collusion
Spilman reintroduced similar scheme in 2013 and provided a PoC implementation
Schemes use 2-of-2 multisig to resolve trust issues
With Spilman channels we can already see the emergence of the payment channel lifecycles which subsist until today:
Why is it that the newest channel state is being published?
Any questions so far?
Spilman channels and other proposals required SegWit to fix transaction malleability
SegWit was activated in 2017
The already existing problem of the limited lifetime of a channel gets even worse!
Alex Akselrod had the idea to let funds flow bi-directionally in channels by using decreasing nLockTimes.
Various proposals integrated limited forms of trust to solve various problems
Any questions so far?
"The Bitcoin Lightning Network" paper released in February 2015 (updated version by Poon and Dryja)
Most important finding was routing, not new channel techniques
Poon-Dryja channels (Penalty)
More details on Elle Mouton
More details on Elle Mouton
When Alice publishes an old channel state, Bob has 144 blocks to claim all the funds in the channel
Bob stores channel states with the same scheme, but mirrored
to_remote output (Bolt 3)
<remotepubkey> OP_CHECKSIGVERIFY 1 OP_CHECKSEQUENCEVERIFY
to_local output (Bolt 3)
OP_IF
# Penalty transaction
<revocationpubkey>
OP_ELSE
`to_self_delay`
OP_CHECKSEQUENCEVERIFY
OP_DROP
<local_delayedpubkey>
OP_ENDIF
OP_CHECKSIG
Any questions so far?
When we craft TXs that spend unconfirmed outputs (think Reclaim TXs), the spended output can suddenly seize to exist, because it's TX id (which is referenced as an input) changed.
Problem: You need to estimate Transaction fees in advance, potentially for months!
This is particularly bad because timelocks can expire while TX is waiting for confirmations
Solution: Anchor channels
Channels based on taproot can use MuSig2 for the Multi-signature part and hide the script within the tweaked PubKey. (details)
History
Current implementation