Az elmúlt egy hetet (karácsony ide, karácsony oda) a bejglizabáláson és a nagycsaládi ebédelésen túl lényegében a Lightning Networkkel töltöttem. Maga a Lightning Network (továbbiakban LN) egy olyan jövőkép, amivel kapcsolatban perpillanat két táborra szakad a közösség: vagy nagyon imádja és az egyetlen tiszta jövőt látja benne (én személy szerint ugye ezt a tábort erősítem), vagy nagyon utálja és csak a népbutítást és a nagybankok hatalomátvételét vizionálja ennek kapcsán. A két csoportban – tisztelet a nagyon kicsi kivételnek -, egyetlen dolog közös: lényegében fogalmuk sincs arról, hogy mit is imádnak, avagy éppen utálnak. A brutálisan szélsőséges politikai megosztottság nem véletlen, hiszen az LN egy olyan szintű protokollt hoz el, ami nagyon erősen rajzolhatja át az erővonalakat a Bitcoinhoz kapcsolódó üzleti vállalkozások között. Ezért ezen körök mindent megtesznek azért, hogy minél inkább befolyásolják a közösségeket. A két kezemen sem tudom megszámolni, hogy csak az elmúlt egy hónapban mennyi olyan megtévesztő propagandavideót és leírást láttam/olvastam, ami a nagybanki befolyásolástól egészen a decentralizáció teljes összeomlásáig mindent belevizionált a Lightning Networkbe.
Mindenképp fogok a közeljövőben egy mythbuster cikket is írni ezekről a bizonyos politikai agymenésekről, de ebben a cikkben most arra koncentrálnék, amit – reményeim szerint – legtöbben vártok: Mi is az az LN és miként is működik? Az elmúlt fél évben már többször is beígértem ezt a cikket, de eddig nem volt elég időm, hogy a mélyére ássak. Szerencsére az ünnepi hangulat azonban megteremtette az ehhez szükséges időt is.
Kezdeném talán egy nagyon gyors fogalomhatározóval. Ennek első pontját lopnám is a tegnapi postomból:
- Az LN a korábban már sokat emlegetett layer2-es skálázási implementációja a Bitcoin (és Litecoin) protokollnak, ennek volt az egyik fontos előfeltétele az a bizonyos SegWit protokoll implementáció (Nem a SegWit2X… az egy másik történet…)
- Az LN nodeok egymás között egy- vagy kétirányú csatornákat hoz létre, mely csatornák között routing protokollt működik. Nagyjából úgy érdemes elképzelni az LN-t mint magát az interneten, csak itt adatkapcsolatok helyett pénzügyi műveletekre épül rá a protokoll. Az adatok helyett/mellett itt pénz áramlik minden aktív csatornán.
- Mindez úgy, hogy a csatorna változása nem kerül onchain propagálásra, tehát nincs confirmation várakozás, nincs mempool és nincs mining fee sem.
- Az LN nem bitcoin specifikus történet. Bármilyen blockchainre ráhúzható, bár a szó szerinti implementációnak szükséges előfeltétele a SegWit, de “from-scretch” ez megkerülhető.
- A jelenlegi tervek és állapot szerint 2018 igen korai szakaszában az LN elérhető lesz az éles blockláncokon is. Jelenlegi információk között a Litecoin (LTC) fog kapni teljes értékű LN-t (Litening néven fog ott futni), de perpillanat azt sem lehet kizárni, hogy a Bitcoin hálózaton is egyszerre fog indulni az éles szolgáltatás.
- Apró érdekesség, hogy a LND egyik vezető fejlesztője (@roasbeef) néhány hete már nyitott egy kisebb payment csatornát a Bitcoin mainneten teszt jelleggel, ahol már valós Bitcoinnal “tesztelnek”. Szóval ennyire a kiadásközeli állapotban van az LN.
- A LN nem egy termék, hanem egy specifikáció, aminek számos implementációja ismert. Ezek közül a legnagyobb felhasználói bázis az lnd, eclair és a c-lightning köré összpontosul. Ezek kompatibilitását folyamatosan tesztelik (-link-), mely tesztek november közepe óta már 100%-os kompatibilitást mutatnak.
- Az LN filozófiája nagyon egyszerű: Építs fel egy vagy több LN node/hub felé payment channelt, amiken keresztül már off-chain tudsz költekezni és/vagy pénzt fogadni, sőt ha két irányú csatornát építesz fel, akkor akár fogadni is tudsz azon keresztül bitcoint.
- Az LN implementálásához a stabil node kódokon kívül nem kell SEMMI. Nem kell se hardfork, se pedig softfork. A protokoll működtetéséhez szükséges minden előfeltétel ott van már az összes Bitcoin node kódbázisában.
Na ez így leírva nagyon egyszerű és még talán logikus is, de… mi a francot is jelent ez??? Nézzük mire jutottam:
Kezdjük talán azzal, hogy mit is jelent pontosan az, hogy payment channel, miként is lehet ezt így elképzelni? Ez egy roppant egyszerű kontraktus a kezdeményező és egy LN node között, lényegében egy multi-party signature contract. Mindkét fél berak egy közös addressre adott mennyiségű pénzt (bitcoint), majd megegyeznek abban, hogy ezen address felett csak közös elhatározásból (mindkét fél által aláírva) lehet majd csak rendelkezni. Ezt követően a felek ezen kontraktust updatelgetik (újra aláírják), azonban megegyeznek abban, hogy a frissítéseket nem küldik be a blockláncba (onchain), hanem csak maguknál tárolják. Majd amikor valamelyik fél úgy dönt, hogy szeretné lezárni a csatornát (tehát lekönyvelni az aktuális állapotot), akkor szépen beküldi az utolsó érvényes állapotot, ami a blockláncba kerülve jóváíródik a felek között.
A rosszhiszemű visszaélések ellen (pl. valaki egy korábbi állapotot küld be) számos védelem van implementálva (pl a végső állapotra timelock kerül, aminek leteltéig van lehetőség a jogorvoslatra). Emellett számos egyéb védelem van definiálva a whitepaperben és kerül implementálásra a nodetípusokban is. Mindezen téma viszont annyira komplex, hogy erről egy külön cikket fogok később írni.
Mindez persze eddig csak egy buta multisign contract, hol jön itt be a Lightning Network? Az LN lényege, hogy nagyon sok ilyen “buta” csatornát építünk ki, amelyek között routing jön létre és ezáltal a megfelelő likviditás megléte esetén el tud kezdeni áramlani a pénz. Mindez teljesen trustless alapon és fontos védelmi funkciók (pl. HTLC) mellett.
[commercial_break]Oké, ennyi alap talán már elég lehet, hogy rátérhessünk a LN előnyeire, miért is – lesz – jó mindez:
- Mivel a payment channelek megnyitását követően a tranzakciók nem kerülnek beküldésre a blockláncba, ezért egy számla kifizetése közel instant, csak annyi időbe telik, amíg végigmegy a routing. Ez a legtöbb esetben tizedmásodperceket vesz csak igénybe. Fontos viszont, hogy a csatorna csak akkor él, ha mindkét fél működik, tehát a Lightning Network nodeok közel 100%-os rendelkezésre állása elengedhetetlen.
- Persze ezen előbbi pontot sokban árnyalja az, hogy akár egy SPV wallet tulajdonosnak is lehet több LN node/hub felé is payment channelje és a gráfba rendezett LN hálózat bármely eleme is elvárható módon több független útvonalon keresztül is elérhető.
- Egy megnyitott csatorna fenntartható bármeddig, csak a feleken múlik, hogy mikor akarják azt lezárni/megnyitni. Ha például egy kávézó megnyit egy 1/1 BTC-s kétirányú payment channelt és ugyanazon csatornán keresztül árulja a Blockaccinokat és a Satoschinokat, mely csatornán keresztül fizeti pl a fizetéseket, a számlákat és egyéb költségeket, akkor a csatornát soha az életben nem kell többé lezárnia, hiszen folyamatosan likvid marad az mindkét irányba.
- A csatornák bezárása esetén van lehetőség gyors lezárási opcióra, ez akkor lehetséges, hogyha a lezáró tranzakció blockláncba propagálása előtt mindkét fél finalizálja a csatornát a saját aláírásával (tehát jelzik, hogy ezen pont után már egyik fél sem akarja azt változtatni), ilyenkor nem kerül timelock a pénzre és lényegében a blockba foglalás után azonnal újrahasznosítható a likviditás.
- A LN payment routing technológiája teljesen titkosított, így annak működése leginkább az onion (tor) hálózatra hasonlít. A routingban érintett köztes szereplők csak azt tudják, hogy merre kell tovább küldeniük az adott pénzmennyiséget, de nem feltétlenül ismerik annak egyéb paramétereit.
- A payment channelek megnyitásánál természetesen van lehetőség eleve olyan csatornát felépíteni, ahol a rendelkező felek önállóan is multisignaturet használnak. Tehát a gyakorlatban a rendszer lehetővé teszi azt a hiánypótló funkciót, mely szerint az asszonnyal az összes megvásárolandó sör számláját alá kell íratnod, ellenkező esetben sikertelen lesz a fizetés. Szép új világ! 🙂
- Természetesen a Lightning Networknek a blokklánc adta keret sem szabhat gátat. Ha pl ki akarod fizetni a kedvenc kávéd, akkor simán elképzelhető, hogy egyik-másik routing útvonalon a bitcoinodból pl litecoin tranzakció lesz, majd onnan vissza bitcoinba.
Miként is néz ki mindez a Bitcoin testneten? nézzük:
A pontok reprezentálják a LN nodeokat/hubokat a vonalak pedig a közöttük felépült csatornákat.
Én személy szerint a lnd (from Lightning Labs) implementációval ismerkedtem, bár tény, hogy az eclair sokkal felhasználóbarátabb. Az lnd egy nagyon egyszerű – de teljes értékű – lightning network implementáció, ami nagyon minimális konfigurálás után könnyedén működik. Bár jelenleg csak a testneten lehet LN-t használni, de ez mit sem vesz el annak értékéből. Nézzünk egy gyakorlati példát:
Számla (Invoice) kifizetése (lnd és starblocks)
Betérve a híres neves Starblocks Coffeeba (-link-) válogathatunk kedvenc kávés italaink közül:
Kiválasztva a Blockaccino-t máris kapjuk is a számlát:
Látható a képen az összeg és a lightning referencia hash. A hash-t dekódolva egyből megtudhatjuk a következőket:
lncli decodepayreq lntb15u1pdyzarspp50kcsucy84er94sukggqm4rqehhpgd0akltpkxxef6sy6gsvk7ndqdq4xysyymr0vd4kzcmrd9hx77l9gvua4r7l7xk32tc88mmkn0rj9dct6g360s22p973fa73uscvjjt08nxwh9mfqunj5dfluwcshakd3sg9jfnvyze3hntpx7xvqsqqqaam2q3 { "destination": "035b55e3e08538afeef6ff9804e3830293eec1c4a6a9570f1e96a478dad1c86fed", "payment_hash": "7db10e6087ae465ac3964201ba8c19bdc286bfb6fac3631b29d409a44196f4da", "num_satoshis": "1500", "timestamp": "1514239088", "expiry": "3600", "description": "1 Blockaccino", "description_hash": "", "fallback_addr": "", "cltv_expiry": "9" }
Látható a dekódolt számlában, hogy mit akarunk venni (1 Blockaccino), mennyiért (1500 sat) és még néhány releváns információt, többek között a cél hash-t, ahova küldeni kell a 1,5k sat-ot (destination)
Akkor ezt most fizessük is ki:
lncli payinvoice lntb15u1pdyzarspp50kcsucy84er94sukggqm4rqehhpgd0akltpkxxef6sy6gsvk7ndqdq4xysyymr0vd4kzcmrd9hx77l9gvua4r7l7xk32tc88mmkn0rj9dct6g360s22p973fa73uscvjjt08nxwh9mfqunj5dfluwcshakd3sg9jfnvyze3hntpx7xvqsqqqaam2q3 { "payment_error": "", "payment_preimage": "5d8c199bbb7599da4268fddcc524ba14e93c3c425e66a30d429d92ad88e15b24", "payment_route": { "total_time_lock": 1256108, "total_fees": 10, "total_amt": 1510, "hops": [ { "chan_id": 1380837070910521344, "chan_capacity": 16700000, "amt_to_forward": 1500, "fee": 10, "expiry": 1255964 }, { "chan_id": 1380856862121000960, "chan_capacity": 15000000, "amt_to_forward": 1500, "expiry": 1255964 } ] } }
Látható, hogy a tranzakció 2 csomóponton routeolódott át, amiből az egyik lenyúlt 10 sat-nyi fee-t a szolgáltatásért. A pénzünk sikeresen oda is ért, és a Starblocks coffee oldala máris kitörő örömmel tájékoztat bennünket arról, hogy a rendelt kávé -virtuálisan- fogyasztható:
Mindez a másodperc tört része alatt, nincs külön várakozás a blokkba foglalásra, nincs confirmation és nincs semmi egyéb technikai trükközés. A csatorna, nevéhez híven villámgyors.
Ha valaki esetleg úgy döntene, hogy ezt maga is ki akarja próbálni, de nincs kedve/lehetősége lnd-t futtatni, akkor megteheti ezt könnyedén a htlc.me testnetes web walleten keresztül, semmi regisztráció és egyéb vacakolás, egyből a belépés után már lehet is bemásolni az invoice hasht:
Rányomva a “Send Payment” gombra másik villan a StarBlocks coffee oldalán a zöld pipa.
***megjegyzés: Mivel ez ugye testnet, ezért sűrűn előfordul, hogy akár a htlc.me LN nodeja, akár az eclair (endurance) nodeja nem működik valamilyen okból kifolyólag. Szóval, ha sikertelen lenne a tranzakció, akkor ne nagyon csüggedjetek 🙂
Számla (invoice) kiállítása és kifizetése htlc.me-vel
Amennyiben van olyan payment channelünk, ami kétirányú (tehát fogadni is tuduk rajta bitcoint), akkor a lehetőségeink száma jelentősen növekszik. Nézzünk erre egy példát: kiállításra kerül egy új számla:
lncli addinvoice --memo "Variance donation! 006" --value 27500 { "r_hash": "ce9106af311835b2304dcb907ab3b3457506d99d877213b37a10237ac29b38da", "pay_req": "lntb275u1pdyzlytpp5e6gsdte3rq6myvzdewg84vang46sdkvasaep8vm6zq3h4s5m8rdqdpy2eshy6tpde3k2grydahxzarfdahzzgpsxqmqcqzysgt0x0hh3tx0tspwcsaqlw0jtzrh0sz0yr9t9mt6xurt9xw33gvn5an3t8mtssdhq9s9g5l4v8z00esvc52tmuerwuygzw9txz7qwdxgqnyztdq" }
Majd a megadott pay_req-t bemásolva a htlc.me walletbe:
A sikeres befizetés természetesen azonnal látszik az lnd-ben is:
lncli lookupinvoice ce9106af311835b2304dcb907ab3b3457506d99d877213b37a10237ac29b38da { "memo": "Variance donation! 006", "receipt": null, "r_preimage": "xWRnPRnBjTKdh+RXC7uRvLsADq+Ah04uXESb3iVPGMQ=", "r_hash": "zpEGrzEYNbIwTcuQerOzRXUG2Z2HchOzehAjesKbONo=", "value": "27500", "settled": true, "creation_date": "1514241163", "settle_date": "1514241402", "payment_request": "lntb275u1pdyzlytpp5e6gsdte3rq6myvzdewg84vang46sdkvasaep8vm6zq3h4s5m8rdqdpy2eshy6tpde3k2grydahxzarfdahzzgpsxqmqcqzysgt0x0hh3tx0tspwcsaqlw0jtzrh0sz0yr9t9mt6xurt9xw33gvn5an3t8mtssdhq9s9g5l4v8z00esvc52tmuerwuygzw9txz7qwdxgqnyztdq", "description_hash": null, "expiry": "3600", "fallback_addr": "", "cltv_expiry": "144" }
Zárszó és a környezet
Jelenleg a lnd nodeom 674 db másik nodeot lát a Bitcoin testneten, amelyek között 1169 db élő payment channelről tud.
Aki esetleg ki akarja próbálni mindezt, annak jó hír, hogy szó szerint el lehet futtatni az lnd-t egy kukás cloud szerveren minden gond nélkül, ráadásul még csak egy full bitcoin node sem kell hozzá, hiszen működik a neutrino light clienttel is:
lnd --bitcoin.active --bitcoin.testnet --debuglevel=info --neutrino.active --neutrino.connect=faucet.lightning.community
Ha virtuálisan hostolt gépen futtatod, akkor érdemes hozzárakni még egy “–externalip=X.X.X.X” paramétert is, ami nagyon sokat segíthet a gyors LN discoveryben.
A teszteléshez szükséges kezdő Bitcoin tőkét legegyszerűbben a testnet sanbox faucerből tudsz magadnak küldeni: (-link-)
Kétirányú LN csatornát (amin keresztül fogadni is tudsz) pedig a https://faucet.lightning.community oldalon tudsz kezdeményezni.
A végére pedig egy apró kis vizualizáció a hálózatról:
A középső sárga pötty az én saját nodeom, ami a két kék pöttyel tartja a kapcsolatot egy-egy csatornán keresztül, melyeken keresztül (néhány hoppon át) a halvány kék vonalakon keresztül az összes halvány pötty által reprezentált LN nodeot elérem.
Ennyire egyszerű…
Követhető és valamennyire érthető is. Köszönöm.
Reményteli mondat:
“2018 igen korai szakaszában az LN elérhető lesz az éles blockláncokon”
Ha egy évet kellene várni rá, azt gyanítom, késő lenne. Nagyon nyomul az a bizonyos “sötét nagyúr”.
Jól sejtem, hogy ezzel az altcoinok egy jelentős része értelmét veszti? Lehet, hogy érdemes még jövő év elején visszapakolni a pénzt Bitcoinba? Az olyan coinokból, amik elsődleges célja a Bitcoin “hibáinak” kijavítása.
Az IOTA, Ripple sorsa mi lesz? Továbbra is más fejlődés, célcsoport teljesen?
A Litecoinra miért lesz szükség a jövőben? Gyorsabb blokkgenerálás, de azon kívül megegyeznek, nem?
Olyan összefüggéseket próbálsz keresni amiket csak nagyon erőltetve lehet beleképzelni ebbe. Az LN semmit nem fejleszt az alap bitcoin protokollon, csak egy olyan réteget húz rá ami bizonyos jól körülhatárolható esetekben (microtx, exchange arbitrage, atomicswap, stb) inflinite scalinget biztosít a csatornák likviditásának keretéig. Ennek semmi köze a bitcoin/altcoin kérdéshez. Azt altcoinok 90% eleve csak a bitcoin miatt létezik (a btc inhale/exhale folyamata táplálja őket), ezen semmit nem fog változtatni az LN.
Egyelőre a jövőt latolagatni talán még felesleges.
A sötét nagyurat meg hagyjuk… a bch a maga módján nem rossz megoldás, miért is lenne az. Egy egyébként tök jó altcoin, elférhet a portfolióban a btg mellett.
Kicsit hiányosnak érzem a cikket, az “Alice -> Bob -> Carol” példa szerintem még elfért volna. Ebből kifolyólag a “megfelelő likviditás megléte esetén el tud kezdeni áramlani a pénz” kijelentés súlya, fontossága sincs kiemelve, megmagyarázva.
Persze még lehet, hogy ez egy “mythbuster” cikk része lesz, azokat is nagyon várom. 🙂
Ezt anno már kifejtettem a Lightning Networkról szóló korábbi cikkekben, ez a cikk fő célja most tényleg az volt, hogy a saját tapasztalataimat és gondolataimat megosszam. Egyébként kacérkodtam a gondolattal a cikk felénél, hogy picit elmegyek az elvi működés irányába, de a cikk már így is túlságosan masszív lett.
Én nagyon szívesen olvasnék elvi működésről is cikket akar tőled, akár angolul mástól. Honnan tájékozódsz ilyen kérdésekben?
LN források terén még eléggé utánajárós… Eléggé szétszórva érhető el minden, de a legfontosabbak:
https://github.com/tmlee/awesome-lightning-network
lightning.network
dev.lightning.community
Ebből a másodikon találod meg magát a whitepapert amit még Poon és Drya írt. Na abban technológiailag mindent megtalálsz. Ha pedig a konkrét implementálás érdekel, akkor Elisabeth Start és roasbeef-et érdemes követni twitteren, slacken és kb minden egyéb felületen.
Köszi, örök hálám 🙂
A banyaszok kapnak mining feet. Az LN node futtatoknak miert fogja megerni? Lehet csak en nem ertettem meg, mert ott a paymentnel lattam, hogy volt 10satoshi fee, de ha 100 nodon keresztul er el a vegso celhoz akkor 100*10? Vagy hogy van maximalizalva a fee illetve minimalizalva a legrovidebb ut 2 pont kozott? Koszi!
A LN nodeok elemi érdeke, hogy minél több végponttal építsenek ki direkt payment channelt. Az lesz a jó LN node ami aktívan monitorozza az ügyfelek szokásait és ha azt látja, hogy nagyon sok ügyfél payment routolódik át hosszú és drága útvonalon, akkor azokat megkerülve felépít direkt kapcsolatot. Nincs ebben semmi ördöngősség.
crypto trader facebook csoportban már megnyugtattak hogy a bitcoin kártyás vásárláshoz nem kell mining fee-t fizetni.
Nyugtass meg hogy csak viccből van itt a 10 satoshi fee 🙂 oszlasd el a kételyeimet, valami még mindig nem tiszta itt számomra 🙂
Amikor egy tőzsdén vásárolsz (pl. Coinbase) bankkártyával Bitcoint, akkor az a Bitcoin a tőszde walletjében marad egészen addig amíg azt ki nem utalod onnan. Éppen ezért a vásárlásnál természetesen nem kell ezért extra mining fee-t fizetned (az egyébként 3% kártyás vásárlás+1% kezelési feen felül). Ellenben ilyenkor a Bitcoin valójában még nem a te tulajdonod, hiszen továbbra is a tőzsdén marad. Ha úgy döntesz, hogy ki akarod azt onnan utalni a saját pénztárcádba, akkor azért viszont már meg kell fizetni a mining fee-t.
nem kártyás vásárlásról akartam beszélni, hanem ha a példa szerint bitcoinnal fizetjük ki a kávénkat (tenx bitwala) bitcoin kártyával. Ezt nem értettem a lightning network példán keresztül, hogy kell fizetni 10 satoshi fee-t :O
Bocs, de nem igazán tudlak követni. Ha tenx, bitwala kártyával akarsz vásárolni (ami mögött Bitcoin fedezet van), akkor te valójában egy EUR-s vagy USD-s bankkártya műveletet hajtasz végre ami migött a fedezetet a hotwalletben tárolt crypto-d adja, tehát egyszerűen a bitwala/tenx levonja a fedezetként adott cryptoból a váráslás ellenértékét. Hogy ezt ő milyen költségeket teszi azt mindegyik kártya üzletszabályzata tartalmazza.
Hol jön itt neked bárhol is képbe a Lightning Network?
Csaba, elnézést ha buta a kérdés és előre leszögezném nem vagyok tisztába még sok fogalommal, de…Ha az LN megvalósul akkor hogyan befolyásolja a bányászatot, értem ez alatt, hogy a bányászat továbbra is megmarad? Illetve ha megmarad akkor milyen módon, és ne utolsó sorban milyen profittal? Köszönöm a választ előre is!
Az LN egy második szintű (layer-2) implementáció, amiben layer1-en megnyitott csatornákban történik off-chain tranzaktálás a csatornak kapacitásának terhéig. Tehát a bányászok szerese semmilyen szinten sem változik, továbbra is fontos szerepük lesz, hiszen ők adják az elosztott konszenzuson keresztül a rendszer legfontosabb védelmét. Amit az LN önmagában el tud hozni, az – megfelelő elterjedés és implementációk esetén – annyi, hogy sok olyan felhasználási mód kerülhet fel layer2-be, ami jelenleg csak on-chain tud megtörténni (pl. mikrotranzakciók, fixen tervezhető oda-vissza pénzmozgások (pl. exchange hotwalletek között), stb. Ez összességében jelentősen csökkentheti a hálózat terheltségét, ami a bevétel szempontjából annyi jelent, hogy nem fog a jelenlegi óriási extra profittal bányászni minden Bitcoin miner, hiszen a txfee-k alacsonyabbak lesznek, de még így is bőven a világ egyik legnagyobb profitabilitását ígérő passzív bevétel marad a Bitcoin bányászat 🙂
Illetve itt jöhet a képbe az, hogy ha a gyorsulásnak/elterjedésnek köszönhetően nő a tranzakciók száma, akkor ez is növeli a bányászok profitját.
Köszönöm a gyors választ !..:)