Blockchain

Krzysztof Kempiński
Apr 7 · 13 min read
Image for post
Image for post

W ramach podcastu “Porozmawiajmy o IT” miałem okazję porozmawiać z Adamem Smolarkiem o technologii blockchain.

Posłuchaj naszej rozmowy w wersji audio 🎧 👇

Cześć! Mój dzisiejszy gość to blockchain developer, programista Java i Scala, bloger oraz podcaster, szerzący wiedzę i świadomość o blockchainie. Mam dziś przyjemność gościć Adama Smolarka. Cześć, Adam! Bardzo miło mi gościć cię w podcaście.

Cześć, Krzysztof! Bardzo miło mi uczestniczyć w tym podcaście.

No właśnie, z Adamem porozmawiamy sobie o technologii blockchain w ogólności — czyli o takim temacie, który niektórych rozpala do czerwoności, natomiast my się postaramy wyjaśnić, jak pewne rzeczy działają w oderwaniu od różnych, powiedziałbym, wokoło — nietechnicznych rzeczy. Mam nadzieję, że wyjdzie z tego bardzo fajna i wartościowa rozmowa. Ponieważ Adam specjalizuje się w technologii blockchain, to mam nadzieję, że przybliży różne rzeczy, które niekoniecznie są jasne, ale też takie, które związane są z całym takim ruchem związanym z blockchainem, jak gdyby nie tylko samą technologią, ale o tym, jak się rozwijać pracując jako blockchain deweloper, ponieważ to jest to, czym Adam się na co dzień zajmuje. Zanim przejdziemy do właśnie tego tematu, to standardowe pytanie wprowadzające: czy słuchasz podcastów, a jeśli tak, to jakich najczęściej?

Ostatnio właśnie zacząłem słuchać mniejszej ilości podcastów, bardziej przerzuciłem się na audiobooki. Czasami zdarza mi się jeszcze posłuchać Joe Rogana, on ma tam czasami fajnych gości. To głównie ten podcast. Bardziej na YouTube niż na podcastach.

Okej. To powiedz może na początek: jak to się w ogóle stało, że zainteresowałeś się blockchainem, bo specjalizujesz się w Javie, w Scali. Czy to, że jesteś programistą tych dwóch języków w ogóle ma jakiś wpływ na to, że zainteresowałeś się blockchainem? Jest jakieś powiązanie?

Trochę to miało wpływ. Tak od początku, to najpierw o blockchainie powiedział mi mój znajomy, który przy okazji dao fork się tym zainteresował. Była tam akcja z ZTR, że tam bardzo dużo kasy ludzie stracili. Wtedy mi powiedział, że ta technologia jest w ogóle super, że powinienem się nią zainteresować, żeby poczytać o niej. Wtedy to olałem i zostawiłem na boku. Później zająłem się magisterką, zrobiłem kierunek, który był bardzo związany z kryptografią, co okazało się później pomocne. No i właśnie przez tę Javę i Scalę, czyli języki, w których pracuję, dostałem w pracy projekt. Miał on na celu napisanie klienta do Ethereum od zera. Od wtedy więc zacząłem na poważnie interesować się blockchainem, zgłębiłem tę całą technologię, jak to działa, bo trzeba to było napisać.

Czyli trochę przez przypadek, ale później pokierowałeś swoim rozwojem w tym kierunku?

Tak, później był projekt do wzięcia — miałem to szczęście, że dołączyłem i tak to się zaczęło.

No i tak, można powiedzieć, wsiąknąłeś w tę technologię?

Tak, od tamtego czasu tak!

Dobrze. Blockchain to słowo, które opisuje zestaw technologii. To nie jest jedna rzecz — o tym sobie jeszcze porozmawiamy. Natomiast blockchain to także jest pewna architektura systemów informatycznych, powiedzmy. Do składowania, do wymiany informacji w taki sposób, który daje nam dużą dozę zabezpieczenia tych transakcji — to też postaramy się jeszcze tutaj ten wątek pociągnąć.

Mógłbyś powiedzieć teraz o tej architekturze wymiany informacji? Jak to wygląda i na czym to polega, bez wchodzenia w konkretne technologie?

Powiedzmy, że mamy takie systemy rozproszone, czyli mamy takie sieci P2P. Kojarzysz Torrenty, BitTorrent. Są to sieci stworzone z takich samych węzłów, które wymieniają się ze sobą informacjami.

Blockchain to jest coś w ten deseń, tylko że do tej wymiany informacji dorzucona została jeszcze kryptografia — czyli podpisywanie tych informacji, weryfikowanie, czy są poprawne i w ten sposób mamy sieć blockchain, gdzie właśnie krążą transakcje, ale niekoniecznie. Mogą to być po prostu jakieś podpisane informacje, które są później weryfikowane, pakowane w te tytułowe bloki i z tych bloków składa się łańcuch bloków, czyli blockchain.

Okej, brzmi trochę skomplikowanie może na początek! Postaramy się to jeszcze trochę pogłębić. To idźmy dalej. Pod względem technologicznym, blockchain to jest też taka zdecentralizowana, rozproszona baza danych — do tego często sprowadza się definicja blockchainu. Często mówi się też o łańcuchu bloków — to jest bezpośrednie nawiązanie do samej nazwy.

Mógłbyś powiedzieć, czym są te bloki i transakcje w blockchainie?

Mamy transakcje, które krążą w sieci — są niezweryfikowane. Mamy również te zweryfikowane transakcje albo zamiast transakcje, możemy mówić po prostu informacje — które są zapakowane w bloki. Taki blok jak taki koszyk, czy pojemnik na informacje. Węzły, które uczestniczą w sieci, te krążące, niezweryfikowane, informacje wybierają według własnego widzimisię, taki zbiór tych informacji, weryfikują je w procesie kopania bloku: podpisują taki blok, pakują informacje do bloku i to jest taki pojemnik, który zawiera już zweryfikowane informacje i jest dołączany jako kolejna część tego łańcucha.

Blok to jest taki pojemnik na informacje, a transakcja jest po prostu informacją. W przypadku kryptowalut jest informacją o przelewie z konta A na B, ale można też sobie wyobrazić blockchain, który będzie na przykład przechowywał rekordy DNS. Wtedy taką transakcją będzie powiązanie jakiejś nazwy, która jest zrozumiała dla ludzi z adresem IP i który — to też jest taka informacja, która po zweryfikowaniu, zapakowaniu do bloku jest uważana już za obowiązującą.

Czyli w tej rozproszonej bazie danych zapamiętywane są bloki a krążą gdzieś, można powiedzieć, transakcje pomiędzy węzłami?

Jeżeli taki blok zostanie przygotowany, to ten blok też jest rozsyłany po innych węzłach w tej sieci. Te informacje więc krążą tam po tej całej sieci — nie tylko transakcje, ale bloki też. Przy czym różnią między tymi informacjami a blokami jest taka, że masz już wtedy pewność, że ten blok, że przynajmniej jeden węzeł z tej sieci zweryfikował informacje, które są tam w środku. W ten sposób ten blok dołączył do łańcucha bloków. Ty powinieneś sprawdzić te informacje, ale jeśli je sprawdzisz, to zwykle są one poprawne. W ten sposób rozbudowuje się ten łańcuch bloków.

Dobrze. Powiedziałeś trochę o teorii i takim spojrzeniu abstrakcyjnym, to może zejdźmy do jakichś konkretów. Jakich technologii, powiedzmy języków programowania, frameworków, baz danych i tego typu rzeczy używa się, jeśli mówimy o technologii blockchain, na co dzień, produkcyjnie.

Jeżeli chodzi o Javę, to z uwagi na to, że jest to sieć, która łączy się ze sobą różnymi węzłami — musisz mieć biblioteki służące do komunikacji sieciowej. Możesz wykorzystać, HTP, jakieś serwery aplikacji — myślę, że też dadzą radę, ale z uwagi na optymalizację, żeby tych bajtów wysyłać jak najmniej, to protokół http jest trochę za bardzo gadatliwy, więc zwykle schodzi się do poziomu TCP/IP, więc masz połączenia bezpośrednie po TCP.

Kolejną rzeczą, której musisz użyć, to kryptografia, żeby być w stanie podpisywać informacje, które wysyłasz i weryfikować informacje, które odbierasz. Takim — przynajmniej z tego, co widzę — standardem w przypadku Javy i C Sharpa, to jest taka biblioteka Bouncy Castle, czyli Skaczący Zamek, utrzymywana przez Legię Skaczącego Zamku. Do tego jeszcze przyda ci się baza danych. W przypadku transakcji i bloków to jest zwykle powiązanie hash i block, czyli key-value store, więc możesz wrzucić wedle twojego uznania jakieś Mongo, możesz też pójść w normalną, relacyjną bazę danych i wykorzystać tylko jedną tabelkę czy trzy do tego, żeby przechowywać wartość klucz — ale to już wedle implementacji, wymagań.

Nie wiem, czy dobrze zrozumiałem — nie ma takiego jednego przodującego języka programowania, teoretycznie można użyć, powiedzmy, dowolnego i tak samo z frameworkami, raczej framework w danym języku, związany z blockchainem może występować, natomiast to nie jest tak, że jeśli chcemy być blockchain developerem, to musimy opanować jakiś jeden, konkretny język programowania, specjalnie przeznaczony do tej technologii? Dobrze to zrozumiałem?

Dokładnie tak! Na przykład, z tego projektu, który miałem okazję pisać, ten klient, którego my pisaliśmy, napisany był w języku Scala, ale inne aplikacje, które były już na rynku napisane były w Go, w Rustcie. Jest też sporo kodu napisanego w czystym C, więc jeżeli chodzi o język, możesz wybrać co chcesz. Musisz tylko dostarczyć kryptografię i połączenie TCP.

Są takie rzeczy, które wspierane są pewnie przez całkiem sporą ilość nowoczesnych języków. Myślę, że takie biblioteki kryptograficzne i TCP, połączenia TCP/IP to w miarę standard, prawda?

Tak.

Jesteś blockchain developerem, to może powiedz, jak na co dzień wygląda twoja praca? Czym się zajmujesz, czy to jest bardziej związane z bazami danych, z programowaniem sieciowym, może z testami? Gdybyś mógł trochę więcej powiedzieć o swojej pracy.

Może trochę wyjaśnię, że aktualnie moim projektem, którym się w tym momencie zajmuję, z którego zarabiam, to nie jest blockchain, w tym przypadku zajmuję się tym bardziej w formie konsultacji. Jeżeli chodzi o moją pracę nad projektami, które wykonywałem, to zależy, na której warstwie sobie pracujesz. Jeżeli piszesz goły blockchain, od zera, to twoją pracą w większości jest czytanie dokumentacji: wzorków matematycznych, w jaki sposób mają być zakodowane struktury danych, implementacja tego w jakimś języku programowania, a później porównywanie tego, co zaimplementowałeś z innymi klientami, które są na rynku. Dlatego, że jeżeli coś jest zapisane w dokumentacji — w White Paperze albo Yellow Paperze, to wcale nie znaczy, że to jest prawda. To, że coś działa możesz sprawdzić dopiero, jeśli połączysz się z innymi klientami w sieci i one cię nie wytną — to znaczy, nie zostaniesz oznaczony jako oszust. Jeżeli pracujesz na tym wyższym poziomie, czyli tych Smart Contractów, to wtedy twoja praca polega na tym, że piszesz kod Solidity zastanawiasz się, jak optymalnie coś przechowywać na blockchainie, żeby cię to zbyt dużo nie kosztowało. Piszesz testy, zwykle w Truffle , oczywiście też śledzisz jak wygląda aktualny stan solidity, czy nie wyszedł jakiś zero bait, który musisz załatać.

Jeżeli piszesz goły blockchain, od zera, to twoją pracą w większości jest czytanie dokumentacji: wzorków matematycznych, w jaki sposób mają być zakodowane struktury danych, implementacja tego w jakimś języku programowania, a później porównywanie tego, co zaimplementowałeś z innymi klientami, które są na rynku. Dlatego, że jeżeli coś jest zapisane w dokumentacji — w White Paperze albo Yellow Paperze, to wcale nie znaczy, że to jest prawda.

Czyli to jest tak naprawdę połączenie sporej ilości różnych dziedzin związanych z programowaniem? Wspomniałeś i o bazach danych, i o testowaniu, programowaniu, trochę o security. Muszę przyznać, że to jest taka trochę interdyscyplinarna dziedzina, tak przynajmniej mi się wydaje.

Tak. Jeżeli chcesz się zajmować samym tym spectrum, to tak.

Wspomniałeś chwilę o testach. Zastanawiam się, czy tego typu rozwiązania testuje się w podobny sposób jak powiedzmy aplikacje. Pisze się jakieś testy jednostkowe, coś takiego? Jakie tu praktyki się stosuje w kontekście testowania?

W kontekście testowania? Tak, oczywiście piszesz. Jeżeli masz dokumentację, to ta dokumentacja w pewnym sensie dyktuje ci od razu testy integracyjne, jednostkowe, które możesz sobie napisać. Jeżeli piszesz taki blockchain, który już istnieje na rynku, tak jak w przypadku Ethereum to jesteś też w takiej dobrej sytuacji, że twoja implementacja musi przetworzyć w ten sam sposób transakcje, które już są w tym łańcuchu bloków. To znaczy, masz jakieś trzy miliony bloków, więc masz trzy miliony testów jednostkowych, na których możesz puścić swoją implementację.

Czasami wychodzą też bardzo dobre testy, które łapią corner case’y. Jeżeli chodzi o testowanie tych smart contractów, to są do tego frameworki, do których też piszesz sobie testy jednostkowe i taki test jest w stanie zdeplojować twój contract na lokalną sieć, w jakiś sposób zrobić z nim interakcję i sprawdzić, czy zostały przelane odpowiedni środki, czy zostały zapisane odpowiednie dane. To są takie dwie części.

Czyli w miarę, w miarę standardowe podejście, powiedziałbym.

Dobrze. Powiedziałeś chwilę o White Papers, powiedziałeś o technologiach otwartych, typu właśnie języki programowania, bazy danych typu Mongo i tak dalej. To wszystko w jakiś sposób są technologie dostępne dla wszystkich. Czy istnieje coś takiego, jak zamknięte blockchainy, które są dostępne tylko w jakiś ograniczony sposób, albo z jakąś bramką? Czy każdy blockchain jest z definicji, powiedzmy, otwarty?

Z tymi rozwiązaniami, z którymi ja się spotkałem, to wszystkie są otwarte. Praktycznie wszystkie mają swoje repozytorium na GitHubie, do którego możesz zajrzeć, przeczytać kod, przeczytać dokumentację. Może istnieją rozwiązania zamknięte, ale ja ich na oczy nie widziałem. Z tego, co wiem to jest głównie otwarta technologia.

Jeśli mówimy głównie o bazach danych, to istnieje coś takiego, jak CAP theorem , który mówi, że system może spełniać maksymalnie dwa z założeń takich jak consistency, partition tolerance i availability. Zastanawiam się, jak na tym tle wypada blockchain? Jak do tego ma się algorytm konsensusu czy rozwiązywanie konfliktów?

Jeśli chodzi o blockchain, to on poszedł sobie w dostępność i tolerancję na podziały, czyli to partition tolerance i trochę odpuścił to consistency. Dlatego, jak robisz na przykład przelewy na giełdach kryptowalut, to zawsze jest ten czas oczekiwania na tzw. potwierdzenie bloku. Czyli, jeżeli blok, który zawiera twoją transakcję jest odpowiednio głęboko w łańcuchu, to dopiero wtedy dostaniesz przelew złotówek czy dolarów na swoje konto. Na consistency trzeba poczekać. W przypadku tego protokołu konsensusu, to właśnie też ma załatwiać to consistency. Mimo tego, że każdy z tych węzłów może równolegle tworzyć swoje własne bloki, to przez ten algorytm konsensusu masz prawie że pewność, że na końcu, po skończonym czasie, powiedzmy pół godziny, każdy z węzłów sieci będzie miał dokładnie tę samą wersję do chaina.

Jeśli chodzi o blockchain, to on poszedł sobie w dostępność i tolerancję na podziały, czyli to partition tolerance i trochę odpuścił to consistency. Dlatego, jak robisz na przykład przelewy na giełdach kryptowalut, to zawsze jest ten czas oczekiwania na tzw. potwierdzenie bloku. Czyli, jeżeli blok, który zawiera twoją transakcję jest odpowiednio głęboko w łańcuchu, to dopiero wtedy dostaniesz przelew złotówek czy dolarów na swoje konto.

Powiedz jeszcze właśnie o tym algorytmie konsensusu czy rozwiązywania konfliktów. Jak to ma się do blockchaina?

Mamy takie trzy. Proof of work, proof of stake i proof of authority.

Takim pierwszym i w sumie używanym do tej pory, na przykład w blockchainie, jest Proof of work. Polega to na tym, że masz do rozwiązania w skończonym czasie taką łamigłówkę kryptograficzną, która wymaga od ciebie dużej ilości prądu. Możesz to porównać mniej więcej do rzucania kostką. Jeżeli sobie taką kostką rzucisz wystarczająca ilość razy, to czasami ci coś wypadnie, czasami nie. W tym przypadku nie możesz oszukiwać — nie możesz powiedzieć, że ci wypadło sześć — nie wypadło ci sześć, bo masz to zabezpieczenie przez kryptografię.

Głównym zadaniem tego Proof of work i wszystkich innych, jest wybrać z całej tej puli węzłów jeden węzeł, który będzie miał prawo do wykopania, czyli do przygotowania kolejnego bloku. W ten sposób mamy do rozrzucenia tę dystrybucję i nie ma takiej opcji, żeby jeden węzeł prze zmowę miał kontrolę cały czas nad produkowaniem nowych bloków. Z uwagi na to, że wybieranie tego węzła jest deterministyczne — to znaczy, bierzesz pod uwagę tylko tyle, ile wyrzuciłeś — jeżeli ktoś wyrzucił więcej, to zawsze, jeżeli masz dwa bloki do porównania, to każdy węzeł z sieci poprzez to porównanie wybierze ten konkretny blok. Ten konkretny blok, który ma najwięcej tych oczek, będzie później częścią blockchaina. Nie wiem, czy to w jakiś sposób odpowiada na twoje pytanie.

Myślę, że to pokazuje, w jaki sposób kryptografia wspiera czy gwarantuje pewne rzeczy, które powiedzmy są zapisywane w blockchainie.

Poruszyliśmy kilka takich kwestii mniej lub bardziej technicznych, teraz chciałbym przejść do tych trochę mniej technicznych — związanych z zastosowaniami blockchaina. Jakie są według ciebie zalety czy korzyści wynikające z blockchaina? Po co ludzie silą się na budowanie rozwiązań opartych o blockchain?

Wydaje mi się, że trochę wracając do tego CAP theorem z uwagi na dostępność i odporność na te partition tolerance, odporność na podziały, przez co odpada taki problem, jak na przykład… Spali ci się serwerownia w takim jednym miejscu i później taka jedna sieć komórkowa przestanie w jakiś sposób działać — to w przypadku Ethereum to musiałoby być dużo, dużo większy kataklizm, żeby takie wydarzenie miało wpływ na całą sieć i na przelewy, które robisz na przykład na giełdach.

Są też silne gwarancje związane z autentycznością informacji, przez podpisy cyfrowe i przez sprawdzanie ich. Takim jeszcze jednym feature’em blockchaina jest to, że jeżeli coś wrzucisz na blockchain, szczególnie publiczny, to prawdopodobnie tam zostanie do końca świata i jeden dzień dłużej. Prawie jak z wrzucaniem zdjęć do Internetu. Tam zostanie stworzonych tyle kopii, że z dużą pewnością możesz założyć, że to po prostu będzie na którymś z tych węzłów.

Technologia daje nam całkiem sporo, różnych możliwości. Jak sobie myślę o blockchainie, to oczywiście siłą rzeczy przychodzą mi do głowy kryptowaluty, na czele z Bitcoinem, czy Ethereum. Nie jest to ostateczna czy całościowa lista zastosowań?

W jakich gałęziach przemysłu i powiedzmy, ludzkiej działalności ogólnie wykorzystuje się obecne technologie blockchain?

Powiedziałbym, że kryptowaluty to jest wierzchołek góry lodowej. Jeżeli chodzi o zastosowania blockchaina, to szukając przykładów w Polsce, to chociażby Alior Bank poszedł w trwały nośnik i zapisuje na blockchainie informacje dotyczące tabeli opłat, czy czegoś takiego.

Jest taka firma Doxy Chain, która na blockchainie próbuje robić zarządzanie upoważnieniami, pełnomocnictwami, które dajesz na przykład prawnikowi czy jakieś pełnomocnictwa związane z odbiorem poczty. Taka firma, Zara, ta od kosmetyków, oni na przykład używają blockchaina do śledzenia promocji w swoich sklepach, żeby sprawdzać, czy te sklepy rzeczywiście sprzedały te produkty po cenie promocyjnej i w jaki sposób zwrócić za tę promocję.

Bardziej ze świata: Starbucks razem z Microsoftem, jeżeli dobrze pamiętam robi taki blockchain, który śledzi łańcuchy dostaw kawy, że jesteś w stanie od kubka do praktycznie zerwania tych ziaren z krzaka, przejść. Też Microsoft, tylko z Louis Vuitton robi zabezpieczenia związane z dobrami luksusowymi. Jeżeli masz jakieś… Kapcie za pięć kafli [śmiech] czy coś takiego, to jesteś w stanie dojść do tego, czy one rzeczywiście zostały sprzedane za te pięć kafli, czy nie.

używają blockchaina do śledzenia promocji w swoich sklepach, żeby sprawdzać, czy te sklepy rzeczywiście sprzedały te produkty po cenie promocyjnej i w jaki sposób zwrócić za tę promocję. Bardziej ze świata: Starbucks razem z Microsoftem, jeżeli dobrze pamiętam robi taki blockchain, który śledzi łańcuchy dostaw kawy, że jesteś w stanie od kubka do praktycznie zerwania tych ziaren z krzaka, przejść. Też Microsoft, tylko z Louis Vuitton robi zabezpieczenia związane z dobrami luksusowymi.

Alians robi prototypy — to jeszcze nie jest produkt — ale prototyp związany z ubezpieczeniami. W takich dziedzinach ubezpieczeń, gdzie normalni ubezpieczyciele nie chcą się bawić, bo ryzyko jest bardzo duże. Wtedy masz captive insurance czy coś takiego — nie pamiętam dokładnie, jak się nazywa — ludzie, którzy się ubezpieczają, są jednocześnie właścicielami tego ubezpieczenia i oni finansują w jakiś sposób, jeżeli komuś z ubezpieczonych się coś stanie.

Przechodząc do strony technologicznej blockchaina, to jest też IPFS, czyli InterPlanetary File System. Czyli taki system plików oparty na blockchainie, gdzie jesteś w stanie zapisać coś, ten twój plik jest później replikowany w różne miejsca. Idąc jeszcze dalej, to jest InterPlanetary Name System, czyli to samo co z systemem plików, ale w przypadku DNSA — rekordy jesteś w stanie zapisać w blockchainie.

Jeszcze z ciekawych zastosowań, to jest zastosowanie blockchaina w satelitach i innych urządzeniach, które latają w kosmosie. Dlatego, że one mają… No, czasami ten partition tolerance się bardzo przydaje, bo połączenie z innym satelitą może być przerwane przez praktycznie dowolną rzecz — gaz słoneczny, cokolwiek.

Czytaj dalej na:

kkempin’s dev blog

Dev and life blog.

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface.

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox.

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store