Det är snart två år sedan jag testade Lightning Network och plånboken Eclair i den här artikeln. Mycket har hänt sedan dess och för några månader sedan släppte företaget bakom Eclair, franska ACINQ, sin nya plånbok Phoenix med ett helt nytt tänk kring UX, ett tänk som de förklarar i detalj i dessa fyra artiklar:
* Introducing Phoenix
* Phoenix Part 2: Pay-to-Open
* Phoenix Part 3: Backup
* Phoenix Part 4: Trampoline payments
Designval och kompromisser
De säger sig ha skapat en användarupplevelse som är i princip likvärdig med en klassisk bitcoinplånbok utan några av de tekniska krångligheterna som ofta hittills varit en del av Lightning. De har lyckats åstadkomma detta dels genom nya tekniska framsteg men även genom ett antal kompromisser rörande tillit och integritet. Här kommer en kort beskrivning av hur ACINQ löst de olika delarna av användarupplevelsen.
- Installation / backup. Direkt när man startar igång en bitcoinplånbok brukar man få skriva ned 12 eller 24 ord som fungerar som backup men med Lightning är inte detta tekniskt möjligt eftersom backup måste ske efter varje transaktion (vilket beror på att kanalernas tillstånd hela tiden ändras). I Phoenix har man löst backupproblemet med någon man kallar “peer backup” vilket innebär att plånboken kontinuerligt delar med sig av en krypterad backup till de noder man är ansluten till. Problemet vid en återställning är förstås att veta vilka noder det var man var ansluten till och där kommer den första kompromissen in i bilden, Phoenix ansluter nämligen endast till ACINQs egna noder. Vi återkommer till denna kompromiss nedan men hur som helst är det alltså så att det med Phoenix räcker att skriva ned de 12 orden som presenteras, precis som med vilken annan bitcoinplånbok som helst.
- Ta emot sin första Lightningbetalning. Det här är ett stort problem inom Lightning som jag tagit upp i flera andra artiklar. För att ta emot pengar över Lightning krävs att du har en kanal öppen med någon annan där denne motpart har pengar på sin sida av kanalen. Någon annan måste alltså ha valt att stoppa in pengar i en kanal med dig eller så måste du redan ha skickat en betalning. ACINQs lösning på detta kallas pay-to-open och grundar sig också på det faktum att ACINQ är motpart för alla dina kanaler i Phoenix. När man vill ta emot pengar (innan några kanaler finns öppnade) så använder ACINQ så kallade routing hints så att sändaren kan hitta en route till dig, via en fejkad kanal. Om sändaren väl skickar pengar via denna route så kommer ACINQ när pengarna når dem att öppna en ny kanal, vid behov (alltså, om de inte redan har en kanal till dig som går att använda). För öppnandet av denna nya kanal så får du betala en liten avgift (i princip för att täcka kostnaden för öppnandet). Det här innebär att du faktiskt direkt när du startat Phoenix kan ta emot en Lightningbetalning på valfritt belopp.
- On-chain vs Lightning. Phoenix har valt att endast visa ett saldo i plånboken, nämligen pengarna du har på Lightning Network. Du har alltså ingen onchain-plånbok men du kan trots det både skicka till en vanlig bitcoinadress och ta emot betalningar till en vanlig bitcoinadress. I dessa fall utför ACINQ en swap åt dig, d.v.s. antingen tar emot en vanlig bitcointransaktion och skickar vidare en lightningbetalning till dig eller tar emot en lightningbetalning från dig och skickar vidare en vanlig bitcointransaktion. Här finns en annan kompromiss, dessa swaps är inte trustless utan du litar på att ACINQ efter att ha tagit emot en bitcointransaktion faktiskt skickar dig en lightningbetalning och vice versa. Nu kanske du undrar vad som händer om t.ex en kanal tvångsstängs och du därmed måste få dina bitcoin utbetalda on-chain (om det nu inte finns någon onchain-plånbok i Phoenix). I ett sådant fall kan du faktiskt helt enkelt använda dina 12 ord och återställa en plånbok i t.ex. Electrum (eller någon annan plånbok som stödjer BIP39) så kommer dina bitcoin att dyka upp där.
Nedan är ACINQs egen demo av Phoenix:
Test
Man har i mening verkligen lyckats med målet att skapa en smidig användarupplevelse med Phoenix. Du är igång direkt du startar appen och kan genast ta emot valfritt belopp över lightningnätverket (eller över bitcoinnätverket mot en avgift på 0,1%). Du behöver varken skriva ned din backup eller sätta en PIN-kod innan du sätter igång men det är förstås rekommenderat att du gör det snarast.
Jag testar både att ta emot och att skicka utan några som helst problem. För den tekniskt intresserade kan det vara kul att kolla in detaljerna under “Channels list” för att se vilka kanaler som faktiskt i bakgrunden skapats upp. I mitt test får jag först en kanal uppskapad när jag tar emot en lightningbetalning och sedan ytterligare en kanal uppskapad när jag tar emot en (större) onchain-betalning (vilket beror på att den första kanalen inte har kapacitet nog att kunna hantera denna).
När mitt saldo sedan är utspritt på flera kanaler är det ändå inga problem att skicka hela beloppet i en enda lightningbetalning (eller onchain-betalning). Här är vi dock återigen, såvitt jag förstår, beroende av det faktum att våra kanaler alltid är med ACINQ som motpart. Som den fjärde artikeln om Phoenix ovan beskriver så är ACINQ först med att använda s.k. trampoline payments, vilket är ännu ett sätt att snabba upp plånboken genom att den inte själv behöver beräkna routes hela vägen till mottagaren av en transaktion. Istället behöver bara plånboken känna till routen av några få "trampolinnoder" och dessa noder tar sedan över ansvaret för att hitta en route resten av vägen. I Phoenix fall är som sagt motparten och trampolinnoden alltid ACINQ och när jag skickar en betalning som kräver att flera kanaler används så handlar det inte om en avancerad multipath-route hela vägen utan bara den första biten till ACINQs nod. Såhär skriver de själva om trampoline payments:
When you send a payment with Phoenix, here is what happens:
- Phoenix looks at all of your channels, splits the payment accordingly and sends a multi-part trampoline payment to the ACINQ node.
- The ACINQ node aggregates the incoming partial payments, unwraps the trampoline onion and forwards the payment to its final recipient.
Two things can happen when the ACINQ node forwards the payment:
- The recipient is another Phoenix: this is business as usual, ACINQ forwards the payment or uses pay-to-open.
- The recipient isn’t another Phoenix (and thus doesn’t support trampoline): ACINQ will find a route to that recipient and forward the payment “the old way”.
Sammanfattning
Det är inget snack om att användarvänligheten här är på en högre nivå än de flesta (kanske alla) andra lightningplånböcker. Jag upplever inga problem alls med att varken skicka eller ta emot varken on-chain eller via lightning och den enda lilla glitch jag råkar ut för är att appen då och då påstår att jag inte har någon nätverkskoppling, något som dock alltid verkar ordna upp sig automatiskt.
Men, det är viktigt att förstå att de kompromisser som gjorts inte bara är små detaljer som vi kan ignorera. Varje gång du skickar till/från bitcoinnätverket så görs en swap där ACINQ under en stund har kontroll över dina pengar, vilket kräver ett stort mått av tillit. Din anonymitet är heller inte bättre än hos "hostade" plånböcker då ACINQ känner till sändare, mottagare och belopp för alla transaktioner. Det positiva är att det finns tydliga möjligheter att i framtiden förbättra dessa egenskaper genom att de tekniker som används i Phoenix blir mer allmänt implementerade.